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
|
// 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);
|
||||||
|
|||||||
Reference in New Issue
Block a user