block parameters working i think
This commit is contained in:
37
test.c
37
test.c
@@ -6,19 +6,42 @@ int main(void) {
|
||||
GravityBuilder builder = gravityCreateBuilder();
|
||||
|
||||
GravityType charType = gravityCreateIntegerType(8, false);
|
||||
GravityType ptrType = gravityCreatePointerType();
|
||||
|
||||
GravityType mainFuncType = gravityCreateFunctionType(0, NULL, charType);
|
||||
GravityFunction mainFunc = gravityNewFunction(module, "main", mainFuncType);
|
||||
GravityBlock entryBlock = gravityStartBlock("entry", mainFunc, 0);
|
||||
GravityBlock entryBlock = gravityStartBlock("entry", mainFunc);
|
||||
|
||||
gravityPositionBuilderAtEnd(builder, entryBlock);
|
||||
GravityValue someVar = gravityBuildAlloc(builder, charType, NULL);
|
||||
// define blocks
|
||||
GravityBlock thenBlock = gravityStartBlock("then", mainFunc);
|
||||
gravityAppendBlockArgument(thenBlock, ptrType);
|
||||
|
||||
GravityValue someConstant = gravityNewIntConstant(charType, 123);
|
||||
gravityBuildStore(builder, someVar, someConstant);
|
||||
GravityBlock elseBlock = gravityStartBlock("else", mainFunc);
|
||||
gravityAppendBlockArgument(elseBlock, ptrType);
|
||||
|
||||
GravityValue output = gravityBuildLoad(builder, someVar, NULL);
|
||||
gravityBuildRet(builder, output);
|
||||
GravityBlock mergeBlock = gravityStartBlock("merge", mainFunc);
|
||||
|
||||
// write entry
|
||||
gravityBuilderSwitchToBlock(builder, entryBlock);
|
||||
GravityValue x = gravityBuildAlloc(builder, charType, "x");
|
||||
|
||||
gravityBuildBr(builder, gravityNewIntConstant(charType, 1), thenBlock, (GravityValue[]){x}, elseBlock, (GravityValue[]){x});
|
||||
|
||||
// then block
|
||||
gravityBuilderSwitchToBlock(builder, thenBlock);
|
||||
GravityValue thenValue = gravityGetBlockArg(thenBlock, 0);
|
||||
gravityBuildStore(builder, thenValue, gravityNewIntConstant(charType, 5));
|
||||
gravityBuildJump(builder, mergeBlock, NULL);
|
||||
|
||||
// else block
|
||||
gravityBuilderSwitchToBlock(builder, elseBlock);
|
||||
GravityValue elseValue = gravityGetBlockArg(elseBlock, 0);
|
||||
gravityBuildStore(builder, elseValue, gravityNewIntConstant(charType, 10));
|
||||
gravityBuildJump(builder, mergeBlock, NULL);
|
||||
|
||||
gravityBuilderSwitchToBlock(builder, mergeBlock);
|
||||
GravityValue xValue = gravityBuildLoad(builder, x, "xValue");
|
||||
gravityBuildRet(builder, xValue);
|
||||
|
||||
printf("%s\n", gravityFunctionToCStr(mainFunc));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user