From b60602055b4bea34ebe493cc1157eea088e4e575 Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Wed, 18 Jun 2025 20:44:56 +0300 Subject: [PATCH] handle any infix --- .../truffle_lama/parser/LamaNodeFactory.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java b/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java index ad9a369..a4a9067 100644 --- a/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java +++ b/src/main/java/org/programsnail/truffle_lama/parser/LamaNodeFactory.java @@ -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); }