[tlox] Cache ConcatNode for String add
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user