Fix struct parsing

This commit is contained in:
2026-04-09 17:13:13 +10:00
parent 5b61a11f00
commit f694f50d70

View File

@@ -1693,7 +1693,7 @@ static inline ResultType(Nothing, charptr) parseStruct(SolsParser* parser) {
}
// Ignore new lines between struct and opening curly brace
for (;;) {
ResultType(SolsToken, Nothing) token = parserPeek(parser, 0);
ResultType(SolsToken, Nothing) token = parserPeek(parser, 1);
if (token.error) {
return Error(Nothing, charptr, "Expecting '{' after 'struct'");
}
@@ -1707,7 +1707,7 @@ static inline ResultType(Nothing, charptr) parseStruct(SolsParser* parser) {
bool done = false;
// Skip newlines between struct values
for (;;) {
ResultType(SolsToken, Nothing) token = parserPeek(parser, 0);
ResultType(SolsToken, Nothing) token = parserPeek(parser, 1);
if (token.error) {
return Error(Nothing, charptr, "Expecting '}' to end struct");
}
@@ -1716,12 +1716,12 @@ static inline ResultType(Nothing, charptr) parseStruct(SolsParser* parser) {
}
else if (token.as.success.type == STT_CLOSE_CURLY) {
done = true;
parserConsume(parser);
break;
} else {
break;
}
}
parserConsume(parser);
if (done) break;
// key = value\n
@@ -1745,7 +1745,6 @@ static inline ResultType(Nothing, charptr) parseStruct(SolsParser* parser) {
if (setTok.type != STT_OP_SET) {
return Error(Nothing, charptr, "Expecting '=' after struct key");
}
parserConsume(parser);
SolsTokens tokens = ({
ResultType(SolsTokens, charptr) _result = createSolsTokens();
if (_result.error) {
@@ -1754,11 +1753,11 @@ static inline ResultType(Nothing, charptr) parseStruct(SolsParser* parser) {
_result.as.success;
});
// Collect tokens for value
if (parserPeek(parser, 0).error) {
if (parserPeek(parser, 1).error) {
return Error(Nothing, charptr, "Expecting value after '='");
}
for (;;) {
ResultType(SolsToken, Nothing) token = parserPeek(parser, 0);
ResultType(SolsToken, Nothing) token = parserPeek(parser, 1);
if (token.error) {
break;
}
@@ -1800,12 +1799,6 @@ static inline ResultType(Nothing, charptr) parseStruct(SolsParser* parser) {
// Add set node to struct node
addChildToSolsNode(&structNode, setNode);
// Consume newline
ResultType(SolsToken, Nothing) newline = parserConsume(parser);
if (newline.error) {
return Error(Nothing, charptr, "Expecting newline after struct value");
}
}
// Add struct node to parent
addChildToSolsNode(parser->currentParent, structNode);