summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2020-11-07 22:11:56 +0100
committerRoland Reichwein <mail@reichwein.it>2020-11-07 22:11:56 +0100
commit7b6fc865d9871a63c7377ca8d9ebc57dd854d15c (patch)
tree130e929c815065ddd4450b14eb7bcd2281f0b9ea
parent5c7df4f7b09d138df58f720260306afdf0f6713a (diff)
Handle nodes up to expression
-rw-r--r--cpp.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/cpp.cpp b/cpp.cpp
index 52cd5f2..afd6c52 100644
--- a/cpp.cpp
+++ b/cpp.cpp
@@ -420,6 +420,90 @@ std::unordered_map<std::string, std::function<std::any(index_t)>> CPP::getNodeEv
throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
}
},
+ { "shift-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"additive-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "compare-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"shift-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "relational-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"compare-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "equality-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"relational-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "and-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"equality-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "exclusive-or-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"and-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "inclusive-or-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"exclusive-or-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "logical-and-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"inclusive-or-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "logical-or-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"logical-and-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "conditional-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"logical-or-expression"}))
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "assignment-expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"conditional-expression"}))
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
+ { "expression", [&](index_t index) -> std::any
+ {
+ if (childTypesOfNodeMatch(index, {"assignment-expression", ""}) && !getValue(index, 1).has_value())
+ return getValue(index, 0);
+ throw std::runtime_error("ICE: Unsupported childs: "s + ruleString(index)); // TODO
+ }
+ },
};
}