Start work on inline ground
This commit is contained in:
@@ -975,6 +975,10 @@ ResultType(GroundProgram, charptr) generateUseNode(SolsNode* node, SolsScope* sc
|
|||||||
return Success(GroundProgram, charptr, codegen.as.success);
|
return Success(GroundProgram, charptr, codegen.as.success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ResultType(GroundProgram, charptr) generateInlineGroundNode(SolsNode* node, SolsScope* scope) {
|
||||||
|
return Success(GroundProgram, charptr, groundParseFile(node->as.inlineGround));
|
||||||
|
}
|
||||||
|
|
||||||
ResultType(GroundProgram, charptr) generateCode(SolsNode* node, SolsScope* scope) {
|
ResultType(GroundProgram, charptr) generateCode(SolsNode* node, SolsScope* scope) {
|
||||||
|
|
||||||
GroundProgram program = groundCreateProgram();
|
GroundProgram program = groundCreateProgram();
|
||||||
@@ -1026,6 +1030,7 @@ ResultType(GroundProgram, charptr) generateCode(SolsNode* node, SolsScope* scope
|
|||||||
case SNT_FUNCTION_CALL: generate(FunctionCall);
|
case SNT_FUNCTION_CALL: generate(FunctionCall);
|
||||||
case SNT_RETURN: generate(Return);
|
case SNT_RETURN: generate(Return);
|
||||||
case SNT_USE: generate(Use);
|
case SNT_USE: generate(Use);
|
||||||
|
case SNT_GROUND: generate(InlineGround);
|
||||||
}
|
}
|
||||||
return Success(GroundProgram, charptr, program);
|
return Success(GroundProgram, charptr, program);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1571,6 +1571,20 @@ static inline ResultType(Nothing, charptr) parseUse(SolsParser* parser) {
|
|||||||
return Success(Nothing, charptr, {});
|
return Success(Nothing, charptr, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline ResultType(Nothing, charptr) parseInlineGround(SolsParser* parser) {
|
||||||
|
ResultType(SolsToken, Nothing) token = parserPeek(parser, 0);
|
||||||
|
if (token.error) {
|
||||||
|
return Error(Nothing, charptr, "ruh roh");
|
||||||
|
}
|
||||||
|
ResultType(SolsNode, charptr) newNode = createSolsNode(SNT_GROUND, token.as.success.as.inlineGround);
|
||||||
|
if (newNode.error) {
|
||||||
|
return Error(Nothing, charptr, newNode.as.error);
|
||||||
|
}
|
||||||
|
|
||||||
|
addChildToSolsNode(parser->currentParent, newNode.as.success);
|
||||||
|
return Success(Nothing, charptr, {});
|
||||||
|
}
|
||||||
|
|
||||||
static inline ResultType(Nothing, charptr) parseOpenParen(SolsParser* parser) {
|
static inline ResultType(Nothing, charptr) parseOpenParen(SolsParser* parser) {
|
||||||
return Error(Nothing, charptr, "WIP");
|
return Error(Nothing, charptr, "WIP");
|
||||||
}
|
}
|
||||||
@@ -1593,6 +1607,7 @@ ResultType(Nothing, charptr) parse(SolsParser* parser) {
|
|||||||
case STT_KW_PUTS: PARSER_HANDLE(Puts);
|
case STT_KW_PUTS: PARSER_HANDLE(Puts);
|
||||||
case STT_KW_IF: PARSER_HANDLE(If);
|
case STT_KW_IF: PARSER_HANDLE(If);
|
||||||
case STT_KW_WHILE: PARSER_HANDLE(While);
|
case STT_KW_WHILE: PARSER_HANDLE(While);
|
||||||
|
case STT_KW_GROUND: PARSER_HANDLE(InlineGround);
|
||||||
case STT_KW_LAMBDA: PARSER_HANDLE(Lambda);
|
case STT_KW_LAMBDA: PARSER_HANDLE(Lambda);
|
||||||
case STT_KW_RETURN: PARSER_HANDLE(Return);
|
case STT_KW_RETURN: PARSER_HANDLE(Return);
|
||||||
case STT_KW_USE: PARSER_HANDLE(Use);
|
case STT_KW_USE: PARSER_HANDLE(Use);
|
||||||
|
|||||||
Reference in New Issue
Block a user