diff options
author | nathansmith117 <nathansmith117@sdf.org> | 2025-02-03 16:03:37 +0000 |
---|---|---|
committer | nathansmith117 <nathansmith117@sdf.org> | 2025-02-03 16:03:37 +0000 |
commit | 7ecace4284edc98d48e12348372c2c2af4342ad8 (patch) | |
tree | 21d2b51e676047d218e6a73d0ff813dfa25b2927 /src/scripting.c | |
parent | 69733d1f2171978e3d15078d24323af39d54c518 (diff) | |
download | sldj-7ecace4284edc98d48e12348372c2c2af4342ad8.tar.gz sldj-7ecace4284edc98d48e12348372c2c2af4342ad8.tar.bz2 sldj-7ecace4284edc98d48e12348372c2c2af4342ad8.zip |
Scripting working very well
Diffstat (limited to 'src/scripting.c')
-rw-r--r-- | src/scripting.c | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/src/scripting.c b/src/scripting.c index af5d993..9781f5f 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -7,27 +7,12 @@ void handle_tcc_error(void* opaque, const char* msg) void initScripting(SldjScripting* scripting) { - scripting->state = tcc_new(); - scripting->lineScanner = NULL; - scripting->fileBuf = NULL; - - if (!scripting->state) - { - TraceLog(LOG_ERROR, "Could not open tcc state"); - return; - } - - tcc_set_error_func(scripting->state, stderr, handle_tcc_error); -} - -void closeScripting(SldjScripting* scripting) -{ - tcc_delete(scripting->state); - - if (scripting->fileBuf != NULL) - { - free(scripting->fileBuf); - } + *scripting = (SldjScripting){ + .state = NULL, + .lineScanner = NULL, + .fileBuf = NULL, + .fileSize = 0 + }; } void compileScript(SldjScripting* scripting, const char filePath[SLDJ_NAMEMAX]) @@ -69,10 +54,25 @@ void compileScript(SldjScripting* scripting, const char filePath[SLDJ_NAMEMAX]) scripting->fileBuf[scripting->fileSize - 1] = '\0'; fclose(file); - // Compile shit now. + // Setup compiler. + if (scripting->state != NULL) + { + tcc_delete(scripting->state); + } + + scripting->state = tcc_new(); + + if (scripting->state == NULL) + { + TraceLog(LOG_ERROR, "Could not open tcc state"); + return; + } + + tcc_set_error_func(scripting->state, stderr, handle_tcc_error); tcc_set_output_type(scripting->state, TCC_OUTPUT_MEMORY); - if (tcc_compile_string(scripting->state, scripting->fileBuf) == -1) + // Compile. + if (tcc_compile_string(scripting->state, scripting->fileBuf) < 0) { return; } @@ -85,3 +85,16 @@ void compileScript(SldjScripting* scripting, const char filePath[SLDJ_NAMEMAX]) scripting->lineScanner = tcc_get_symbol(scripting->state, "lineScanner"); } +void closeScripting(SldjScripting* scripting) +{ + if (scripting->state != NULL) + { + tcc_delete(scripting->state); + } + + if (scripting->fileBuf != NULL) + { + free(scripting->fileBuf); + } +} + |