This commit is contained in:
2025-12-14 15:38:36 +11:00
parent 52966e3390
commit adaf712441
2 changed files with 32 additions and 1 deletions

View File

@@ -82,8 +82,8 @@ namespace HighGround {
class HGNode {
HGNodeType nodeType = HGNodeType::None;
HGData data;
std::vector<HGNode> children;
public:
std::vector<HGNode> children;
std::string outputId;
HGNode(HGNodeType nodeType) : nodeType(nodeType) {}
HGNode(HGNodeType nodeType, HGData data) : nodeType(nodeType), data(data) {}
@@ -147,6 +147,20 @@ namespace HighGround {
code.push_back(codeBlock);
break;
}
case HGNodeType::Add: {
HGGroundCodeBlock codeBlock;
outputId = "tmp_" + std::to_string(tmpIdIterator++);
GroundInstruction gi = groundCreateInstruction(ADD);
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);
code.push_back(codeBlock);
break;
}
default: {
std::cout << "Not implemented yet\n";
}
@@ -240,6 +254,9 @@ namespace HighGround {
if (getDataType(in) != HGDataType::None) {
return HGNodeType::Value;
}
if (in == "+") {
return HGNodeType::Add;
}
return HGNodeType::None;
}
@@ -288,6 +305,19 @@ namespace HighGround {
}
break;
}
case HGNodeType::Add: {
HGNode addNode(HGNodeType::Add);
addNode.addNode(rootNode.children.back());
rootNode.children.pop_back();
auto tokenopt = consume();
if (tokenopt) {
addNode.addNode(Parser({tokenopt.value()}).parse().children[0]);
} else {
std::cout << "FEED ME MORE TOKENS\n";
}
rootNode.addNode(addNode);
break;
}
}
}
return rootNode;