Skip to content

Commit e7ae0f4

Browse files
committed
Fix hardcoded encodings in various places and add YARPTranslator#sourceEncoding
1 parent 7634127 commit e7ae0f4

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
import org.truffleruby.core.cast.StringToSymbolNodeGen;
2121
import org.truffleruby.core.cast.ToSNode;
2222
import org.truffleruby.core.cast.ToSNodeGen;
23+
import org.truffleruby.core.encoding.EncodingManager;
2324
import org.truffleruby.core.encoding.Encodings;
2425
import org.truffleruby.core.encoding.RubyEncoding;
2526
import org.truffleruby.core.encoding.TStringUtils;
2627
import org.truffleruby.core.module.ModuleNodes;
2728
import org.truffleruby.core.string.InterpolatedStringNode;
28-
import org.truffleruby.core.string.TStringConstants;
2929
import org.truffleruby.core.symbol.RubySymbol;
3030
import org.truffleruby.language.RubyContextSourceNode;
3131
import org.truffleruby.language.RubyNode;
@@ -63,7 +63,6 @@
6363
import org.yarp.AbstractNodeVisitor;
6464
import org.yarp.Nodes;
6565

66-
import java.nio.charset.StandardCharsets;
6766
import java.util.Arrays;
6867
import java.util.List;
6968

@@ -79,6 +78,7 @@ public final class YARPTranslator extends AbstractNodeVisitor<RubyNode> {
7978
private final ParserContext parserContext;
8079
private final Node currentNode;
8180
private final RubyDeferredWarnings rubyWarnings;
81+
private final RubyEncoding sourceEncoding;
8282

8383
public YARPTranslator(
8484
RubyLanguage language,
@@ -97,6 +97,7 @@ public YARPTranslator(
9797
this.parserContext = parserContext;
9898
this.currentNode = currentNode;
9999
this.rubyWarnings = rubyWarnings;
100+
this.sourceEncoding = Encodings.UTF_8; // TODO
100101
}
101102

102103
public RubyRootNode translate(Nodes.Node node) {
@@ -200,7 +201,7 @@ public RubyNode visitBreakNode(Nodes.BreakNode node) {
200201
}
201202

202203
public RubyNode visitCallNode(Nodes.CallNode node) {
203-
var methodName = new String(node.name, StandardCharsets.UTF_8);
204+
var methodName = new String(node.name, EncodingManager.charsetForEncoding(sourceEncoding.jcoding));
204205
var receiver = node.receiver == null ? new SelfNode() : node.receiver.accept(this);
205206
var arguments = node.arguments.arguments;
206207

@@ -343,7 +344,7 @@ public RubyNode visitEmbeddedStatementsNode(Nodes.EmbeddedStatementsNode node) {
343344
// empty interpolation expression, e.g. in "a #{} b"
344345
if (node.statements == null) {
345346
RubyNode rubyNode = new ObjectLiteralNode(
346-
language.getFrozenStringLiteral(TStringConstants.EMPTY_BINARY, Encodings.BINARY));
347+
language.getFrozenStringLiteral(sourceEncoding.tencoding.getEmpty(), sourceEncoding));
347348
assignNodePositionInSource(node, rubyNode);
348349
return rubyNode;
349350
}
@@ -516,9 +517,9 @@ public RubyNode visitInterpolatedStringNode(Nodes.InterpolatedStringNode node) {
516517

517518
// a special case for `:"abc"` literal - convert to Symbol ourselves
518519
if (node.parts.length == 1 && node.parts[0] instanceof Nodes.StringNode s) {
519-
final TruffleString tstring = TStringUtils.fromByteArray(s.unescaped, Encodings.UTF_8);
520-
final TruffleString cachedTString = language.tstringCache.getTString(tstring, Encodings.UTF_8);
521-
final RubyNode rubyNode = new StringLiteralNode(cachedTString, Encodings.UTF_8);
520+
final TruffleString tstring = TStringUtils.fromByteArray(s.unescaped, sourceEncoding);
521+
final TruffleString cachedTString = language.tstringCache.getTString(tstring, sourceEncoding);
522+
final RubyNode rubyNode = new StringLiteralNode(cachedTString, sourceEncoding);
522523

523524
assignNodePositionInSource(node, rubyNode);
524525
copyNewlineFlag(s, rubyNode);
@@ -535,7 +536,7 @@ public RubyNode visitInterpolatedStringNode(Nodes.InterpolatedStringNode node) {
535536
children[i] = ToSNodeGen.create(part.accept(this));
536537
}
537538

538-
final RubyNode rubyNode = new InterpolatedStringNode(children, Encodings.UTF_8.jcoding);
539+
final RubyNode rubyNode = new InterpolatedStringNode(children, sourceEncoding.jcoding);
539540
assignNodePositionInSource(node, rubyNode);
540541

541542
return rubyNode;
@@ -564,7 +565,7 @@ public RubyNode visitInterpolatedSymbolNode(Nodes.InterpolatedSymbolNode node) {
564565
children[i] = ToSNodeGen.create(part.accept(this));
565566
}
566567

567-
final RubyNode stringNode = new InterpolatedStringNode(children, Encodings.UTF_8.jcoding);
568+
final RubyNode stringNode = new InterpolatedStringNode(children, sourceEncoding.jcoding);
568569
final RubyNode rubyNode = StringToSymbolNodeGen.create(stringNode);
569570
assignNodePositionInSource(node, rubyNode);
570571

@@ -800,7 +801,7 @@ public RubyNode visitStringConcatNode(Nodes.StringConcatNode node) {
800801
}
801802

802803
public RubyNode visitStringNode(Nodes.StringNode node) {
803-
final RubyEncoding encoding = Encodings.UTF_8;
804+
final RubyEncoding encoding = sourceEncoding;
804805
final TruffleString tstring = TStringUtils.fromByteArray(node.unescaped, encoding);
805806
final TruffleString cachedTString = language.tstringCache.getTString(tstring, encoding);
806807
final RubyNode rubyNode = new StringLiteralNode(cachedTString, encoding);
@@ -917,11 +918,13 @@ protected RubyContextSourceNode createCallNode(RubyNode receiver, String method,
917918
}
918919

919920
private String toString(Nodes.Location location) {
920-
return new String(sourceBytes, location.startOffset, location.length, StandardCharsets.US_ASCII);
921+
return new String(sourceBytes, location.startOffset, location.length,
922+
EncodingManager.charsetForEncoding(sourceEncoding.jcoding));
921923
}
922924

923925
private String toString(Nodes.Node node) {
924-
return new String(sourceBytes, node.startOffset, node.length, StandardCharsets.US_ASCII);
926+
return new String(sourceBytes, node.startOffset, node.length,
927+
EncodingManager.charsetForEncoding(sourceEncoding.jcoding));
925928
}
926929

927930
private String toString(Nodes.SymbolNode node) {

0 commit comments

Comments
 (0)