Created
June 9, 2020 07:40
-
-
Save runeimp/de84eed440efbd6026a7fdc843505a64 to your computer and use it in GitHub Desktop.
Gravity C Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "gravity_compiler.h" | |
#include "gravity_macros.h" | |
#include "gravity_core.h" | |
#include "gravity_vm.h" | |
#define SOURCE "func main() {var a = 10; var b=20; return a + b}" | |
// error reporting callback called by both compiler or VM | |
static void report_error (gravity_vm *vm, error_type_t error_type, | |
const char *description, error_desc_t error_desc, void *xdata) { | |
printf("%s\n", description); | |
exit(0); | |
} | |
int main (void) { | |
// configure a VM delegate | |
gravity_delegate_t delegate = {.error_callback = report_error}; | |
// compile Gravity source code into bytecode | |
gravity_compiler_t *compiler = gravity_compiler_create(&delegate); | |
gravity_closure_t *closure = gravity_compiler_run(compiler, SOURCE, strlen(SOURCE), 0, true, true); | |
// sanity check on compiled source | |
if (!closure) { | |
// an error occurred while compiling source code and it has already been reported by the report_error callback | |
gravity_compiler_free(compiler); | |
return 1; | |
} | |
// create a new VM | |
gravity_vm *vm = gravity_vm_new(&delegate); | |
// transfer objects owned by the compiler to the VM (so they can be part of the GC) | |
gravity_compiler_transfer(compiler, vm); | |
// compiler can now be freed | |
gravity_compiler_free(compiler); | |
// run main closure inside Gravity bytecode | |
if (gravity_vm_runmain(vm, closure)) { | |
// print result (INT) 30 in this simple example | |
gravity_value_t result = gravity_vm_result(vm); | |
gravity_value_dump(vm, result, NULL, 0); | |
} | |
// free VM memory and core libraries | |
gravity_vm_free(vm); | |
gravity_core_free(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment