mirror of
https://codeberg.org/ProgramSnail/truffle-lama.git
synced 2025-12-05 22:38:43 +00:00
handle any infix
This commit is contained in:
parent
30a0b63ba5
commit
b60602055b
1 changed files with 16 additions and 3 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue