Skip to content

Commit 4718be6

Browse files
committed
Adopt StringFlags
1 parent 99d03a3 commit 4718be6

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
subject: "String"
2+
description: "encoding / when there are ASCII and non-ASCII characters in a literal"
3+
notes: >
4+
String may be forced to the BINARY (ASCII-8BIT) encoding sometimes
5+
focused_on_node: "org.truffleruby.language.literal.StringLiteralNode"
6+
ruby: |
7+
# encoding: us-ascii
8+
"\xFF"
9+
ast: |
10+
StringLiteralNode
11+
attributes:
12+
encoding = ASCII-8BIT
13+
flags = 1
14+
tstring = \xFF
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
subject: "String"
2+
description: "encoding / when there are UTF-8 characters in a literal"
3+
notes: >
4+
String may be forced to the UTF-8 encoding sometimes
5+
focused_on_node: "org.truffleruby.language.literal.StringLiteralNode"
6+
ruby: |
7+
# encoding: us-ascii
8+
"\u{A3}"
9+
ast: |
10+
StringLiteralNode
11+
attributes:
12+
encoding = UTF-8
13+
flags = 1
14+
tstring = £

src/main/java/org/truffleruby/parser/YARPTranslator.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2711,13 +2711,23 @@ public RubyNode visitStatementsNode(Nodes.StatementsNode node) {
27112711
@Override
27122712
public RubyNode visitStringNode(Nodes.StringNode node) {
27132713
final RubyNode rubyNode;
2714-
final TruffleString tstring = TStringUtils.fromByteArray(node.unescaped, sourceEncoding);
2714+
final RubyEncoding encoding;
2715+
2716+
if (node.isForcedUtf8Encoding()) {
2717+
encoding = Encodings.UTF_8;
2718+
} else if (node.isForcedBinaryEncoding()) {
2719+
encoding = Encodings.BINARY;
2720+
} else {
2721+
encoding = sourceEncoding;
2722+
}
2723+
2724+
final TruffleString tstring = TStringUtils.fromByteArray(node.unescaped, encoding);
27152725

27162726
if (!node.isFrozen()) {
2717-
final TruffleString cachedTString = language.tstringCache.getTString(tstring, sourceEncoding);
2718-
rubyNode = new StringLiteralNode(cachedTString, sourceEncoding);
2727+
final TruffleString cachedTString = language.tstringCache.getTString(tstring, encoding);
2728+
rubyNode = new StringLiteralNode(cachedTString, encoding);
27192729
} else {
2720-
final ImmutableRubyString frozenString = language.getFrozenStringLiteral(tstring, sourceEncoding);
2730+
final ImmutableRubyString frozenString = language.getFrozenStringLiteral(tstring, encoding);
27212731
rubyNode = new FrozenStringLiteralNode(frozenString, FrozenStrings.EXPRESSION);
27222732
}
27232733

0 commit comments

Comments
 (0)