From 7ff306b9e88ccb51f978237de704c07600d9b015 Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress Date: Wed, 24 Dec 2025 16:22:51 +1100 Subject: [PATCH] Some math (no order of operations yet) --- src/parser.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/parser.cpp b/src/parser.cpp index 7e6e502..a7a6abe 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -214,6 +214,42 @@ namespace Solstice { code.push_back(codeBlock); break; } + case SolNodeType::Multiply: { + ensure2(children[0], SolDataType::Int, SolDataType::Double); + ensure2(children[1], SolDataType::Int, SolDataType::Double); + SolGroundCodeBlock codeBlock; + outputId = "tmp_" + std::to_string(tmpIdIterator++); + GroundInstruction gi = groundCreateInstruction(MULTIPLY); + if (children.size() < 2) { + std::cout << "Need more stuff to add\n"; + } + groundAddReferenceToInstruction(&gi, groundCreateReference(VALREF, children[0].outputId.data())); + groundAddReferenceToInstruction(&gi, groundCreateReference(VALREF, children[1].outputId.data())); + groundAddReferenceToInstruction(&gi, groundCreateReference(DIRREF, outputId.data())); + codeBlock.code.push_back(gi); + if (isTemp(children[0].outputId)) codeBlock.toBeDropped.push_back(children[0].outputId); + if (isTemp(children[1].outputId)) codeBlock.toBeDropped.push_back(children[1].outputId); + code.push_back(codeBlock); + break; + } + case SolNodeType::Divide: { + ensure2(children[0], SolDataType::Int, SolDataType::Double); + ensure2(children[1], SolDataType::Int, SolDataType::Double); + SolGroundCodeBlock codeBlock; + outputId = "tmp_" + std::to_string(tmpIdIterator++); + GroundInstruction gi = groundCreateInstruction(DIVIDE); + if (children.size() < 2) { + std::cout << "Need more stuff to add\n"; + } + groundAddReferenceToInstruction(&gi, groundCreateReference(VALREF, children[0].outputId.data())); + groundAddReferenceToInstruction(&gi, groundCreateReference(VALREF, children[1].outputId.data())); + groundAddReferenceToInstruction(&gi, groundCreateReference(DIRREF, outputId.data())); + codeBlock.code.push_back(gi); + if (isTemp(children[0].outputId)) codeBlock.toBeDropped.push_back(children[0].outputId); + if (isTemp(children[1].outputId)) codeBlock.toBeDropped.push_back(children[1].outputId); + code.push_back(codeBlock); + break; + } case SolNodeType::Equal: { ensuresame(children[0], children[1]); SolGroundCodeBlock codeBlock;