Updated component and bus generation logic + bugfixes

This commit is contained in:
Borna Rajković committed 2022-05-31 01:05:08 +02:00
1 parent 86b8861533
commit f93a2afa63
14 files changed
+208 -68

No files matched your search

+2 -1
View File
@@ -309,7 +309,7 @@ struct ComponentNode : public AstNode {
std::optional<StringNode> source;
EnumNode<ComponentType> type;
std::vector<RuleNode> rules;
std::optional<StringNode> instanceName;
std::optional<IdentifierNode> instanceName;
std::optional<CountNode> count;
std::optional<DisplayNode> display;
std::vector<PinNode> pins;
@@ -325,6 +325,7 @@ struct BusNode : public AstNode {
EnumNode<BusType> type;
IdentifierNode name;
std::optional<IdentifierNode> instanceName;
std::optional<StringNode> tooltip;
std::optional<CountNode> count;
std::optional<DisplayNode> display;
+18 -10
View File
@@ -438,7 +438,7 @@ PResult<ComponentNode> ComdelParser::parseComponent() {
PResult<poly<AstNode>> err;
if (check(TokenType::KW_INSTANCE_NAME)) {
bump();
ASSIGN_OR_SET_ERR(component.instanceName, parseString());
ASSIGN_OR_SET_ERR(component.instanceName, parseIdentifier());
} else if (check(TokenType::KW_TOOLTIP)) {
bump();
ASSIGN_OR_SET_ERR(component.tooltip, parseString());
@@ -554,22 +554,30 @@ PResult<BusNode> ComdelParser::parseBus() {
PResult<poly<AstNode>> err;
if (check(TokenType::KW_TOOLTIP)) {
bump();
ASSIGN_OR_RETURN_IF_ERR(bus.tooltip, parseString());
ASSIGN_OR_SET_ERR(bus.tooltip, parseString());
} else if (check(TokenType::KW_INSTANCE_NAME)) {
bump();
ASSIGN_OR_SET_ERR(bus.instanceName, parseIdentifier());
} else if (check(TokenType::KW_COUNT)) {
ASSIGN_OR_RETURN_IF_ERR(bus.count, parseCount());
ASSIGN_OR_SET_ERR(bus.count, parseCount());
} else if (check(TokenType::KW_DISPLAY)) {
ASSIGN_OR_RETURN_IF_ERR(bus.display, parseDisplay());
ASSIGN_OR_SET_ERR(bus.display, parseDisplay());
} else if (check(TokenType::KW_WIRES)) {
bump();
RETURN_IF_NOT_TOKEN(TokenType::LBRACE);
while (check(TokenType::IDENTIFIER)) {
APPEND_OR_RETURN_IF_ERR(bus.wires, parseWire());
if(consume(TokenType::LBRACE)) {
while (check(TokenType::IDENTIFIER)) {
APPEND_OR_RETURN_IF_ERR(bus.wires, parseWire());
if (check(TokenType::COMMA)) {
RETURN_IF_NOT_TOKEN(TokenType::COMMA);
if (check(TokenType::COMMA)) {
RETURN_IF_NOT_TOKEN(TokenType::COMMA);
}
}
} else {
err = unexpected();
}
if(!consume(TokenType::RBRACE)) {
err = unexpected();
}
RETURN_IF_NOT_TOKEN(TokenType::RBRACE);
} else {
err = unexpected();
bump();