diff options
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); + } +} + |