#include "include/gravity/core.h" #include int main(void) { GravityModule module = gravityCreateModule(); 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); // define blocks GravityBlock thenBlock = gravityStartBlock("then", mainFunc); gravityAppendBlockArgument(thenBlock, ptrType); GravityBlock elseBlock = gravityStartBlock("else", mainFunc); gravityAppendBlockArgument(elseBlock, ptrType); 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)); return 0; }