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