[tlox] Cache ConcatNode for String add

This commit is contained in:
ctsk
2024-09-02 16:55:13 +02:00
parent 2c8817aa69
commit 8d524a05e1
2 changed files with 6 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ package xyz.ctsk.lox;
import com.oracle.truffle.api.CallTarget; import com.oracle.truffle.api.CallTarget;
import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.TruffleLanguage;
import com.oracle.truffle.api.strings.TruffleString;
import xyz.ctsk.lox.nodes.LoxExpressionNode; import xyz.ctsk.lox.nodes.LoxExpressionNode;
import xyz.ctsk.lox.nodes.LoxNode; import xyz.ctsk.lox.nodes.LoxNode;
import xyz.ctsk.lox.nodes.LoxRootNode; import xyz.ctsk.lox.nodes.LoxRootNode;
@@ -11,6 +12,7 @@ import xyz.ctsk.lox.parser.LoxParser;
public class LoxLanguage extends TruffleLanguage<Void> { public class LoxLanguage extends TruffleLanguage<Void> {
public static final String ID = "lox"; public static final String ID = "lox";
public static final String NAME = "Lox"; public static final String NAME = "Lox";
public static final TruffleString.Encoding STRING_ENCODING = TruffleString.Encoding.UTF_16;
@Override @Override
protected CallTarget parse(ParsingRequest request) throws Exception { protected CallTarget parse(ParsingRequest request) throws Exception {

View File

@@ -1,8 +1,10 @@
package xyz.ctsk.lox.nodes.expr; package xyz.ctsk.lox.nodes.expr;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.strings.TruffleString; import com.oracle.truffle.api.strings.TruffleString;
import xyz.ctsk.lox.LoxLanguage;
import xyz.ctsk.lox.runtime.LoxException; import xyz.ctsk.lox.runtime.LoxException;
import xyz.ctsk.lox.nodes.LoxBinaryNode; import xyz.ctsk.lox.nodes.LoxBinaryNode;
@@ -13,8 +15,8 @@ public abstract class LoxAddNode extends LoxBinaryNode {
} }
@Specialization @Specialization
public TruffleString add(TruffleString left, TruffleString right) { public TruffleString add(TruffleString left, TruffleString right, @Cached TruffleString.ConcatNode concatNode) {
return TruffleString.ConcatNode.create().execute(left, right, TruffleString.Encoding.UTF_16, false); return concatNode.execute(left, right, LoxLanguage.STRING_ENCODING, true);
} }
@Fallback @Fallback