handle any infix

This commit is contained in:
ProgramSnail 2025-06-18 20:44:56 +03:00
parent 30a0b63ba5
commit b60602055b

View file

@ -1,5 +1,6 @@
package org.programsnail.truffle_lama.parser;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.FrameDescriptor;
import com.oracle.truffle.api.frame.FrameSlotKind;
import com.oracle.truffle.api.source.Source;
@ -336,7 +337,7 @@ public class LamaNodeFactory {
return addSrcFromNodes(new LamaAssignNode(left, right), left, right);
}
// TODO: fix assignment in parser (var + ref + put ??)
// TODO: fix assignment in parser
public LamaExpressionNode createAssignVarNode(Token token, LamaExpressionNode value) {
var definition = createVarNode(token);
var reference = createRefNode(token);
@ -348,11 +349,23 @@ public class LamaNodeFactory {
return addSrcFromNodes(new LamaSeqNode(left, right), left, right);
}
public LamaExpressionNode createBinopNode(String op, LamaExpressionNode left, LamaExpressionNode right) {
// TODO: fix on parser
public LamaExpressionNode createAnyBinopNode(Token opToken, LamaExpressionNode left, LamaExpressionNode right) {
String op = opToken.getText();
return switch (op) {
case ":=" -> createAssignNode(left, right);
case "+", "-", "/", "%",
"<", "<=", ">", ">=", "==", "!=",
"&&", "!!" -> createBinopNode(opToken, left, right);
default -> createCallNode(createRefNode(opToken), new LamaExpressionNode[]{left, right});
};
}
public LamaExpressionNode createBinopNode(Token opToken, LamaExpressionNode left, LamaExpressionNode right) {
String op = opToken.getText();
return addSrcFromNodes(LamaBinopNodeGen.create(left, right, op), left, right);
}
// TODO: decide Elem or ElemRef
public LamaExpressionNode createElemRefOrValueNode(LamaExpressionNode array, LamaExpressionNode index, boolean doUnref) {
return addUnref(createElemRefNode(array, index), doUnref);
}