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

View File

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