aboutsummaryrefslogtreecommitdiffstats
path: root/src/scripting.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripting.c')
-rw-r--r--src/scripting.c59
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);
+ }
+}
+