[tlox] Implement String concatenation

This commit is contained in:
ctsk
2024-09-02 16:13:39 +02:00
parent 297ec48bdb
commit a62fdeb8e4
2 changed files with 8 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ package xyz.ctsk.lox.nodes.expr;
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 xyz.ctsk.lox.runtime.LoxException; import xyz.ctsk.lox.runtime.LoxException;
import xyz.ctsk.lox.nodes.LoxBinaryNode; import xyz.ctsk.lox.nodes.LoxBinaryNode;
@@ -11,6 +12,11 @@ public abstract class LoxAddNode extends LoxBinaryNode {
return left + right; return left + right;
} }
@Specialization
public TruffleString add(TruffleString left, TruffleString right) {
return TruffleString.ConcatNode.create().execute(left, right, TruffleString.Encoding.UTF_16, false);
}
@Fallback @Fallback
protected Object typeError(Object left, Object right) { protected Object typeError(Object left, Object right) {
throw LoxException.typeError(this, left, right); throw LoxException.typeError(this, left, right);

View File

@@ -12,7 +12,8 @@ public class LoxNodeFactory {
} }
public static LoxStringLiteralNode createStringLiteral(Token literalToken) { public static LoxStringLiteralNode createStringLiteral(Token literalToken) {
var value = TruffleString.fromJavaStringUncached(literalToken.getText(), TruffleString.Encoding.UTF_16); var text = literalToken.getText();
var value = TruffleString.fromJavaStringUncached(text.substring(1, text.length() - 1), TruffleString.Encoding.UTF_16);
return new LoxStringLiteralNode(value); return new LoxStringLiteralNode(value);
} }