forked from solstice/solstice
Fix struct parsing
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user