[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.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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user