Updated component and bus generation logic + bugfixes
This commit is contained in:
1 parent
86b8861533
commit
f93a2afa63
14 files changed
+208
-68
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user