From 8f7b17a305634bcd60b9526f5358243b8b95ae9d Mon Sep 17 00:00:00 2001 From: "BADIM-PC\\Vadim" Date: Fri, 16 Feb 2018 15:43:30 +0300 Subject: [PATCH] Preprocessor definitions to build with/without lua/moon/js/wren #529 --- Makefile | 8 +- build/android/jni/src/Android.mk | 2 +- include/tic80_config.h | 70 +++++----- src/console.c | 219 +++++++++++++++++++++++-------- src/jsapi.c | 9 ++ src/luaapi.c | 198 ++++++++++++++-------------- src/machine.h | 25 +++- src/tic.c | 57 +++++--- src/wrenapi.c | 7 +- 9 files changed, 382 insertions(+), 213 deletions(-) diff --git a/Makefile b/Makefile index 7dceaa3..3558ab1 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC=gcc -OPT=-O3 -Wall -std=c99 +OPT=-O3 -Wall -std=gnu99 OPT_PRO=-DTIC80_PRO BIN_NAME= bin/tic80 @@ -57,7 +57,6 @@ LINUX_ARM_LIBS= \ -L$(PRE_BUILT)/arm LINUX_LINKER_LTO_FLAGS= \ - -D_GNU_SOURCE \ -lSDL2 \ -llua \ -lwren \ @@ -69,7 +68,6 @@ LINUX_LINKER_LTO_FLAGS= \ -lz LINUX_LINKER_FLAGS= \ - -D_GNU_SOURCE \ -llua5.3 \ -lwren \ -ldl \ @@ -82,7 +80,6 @@ MINGW_OUTPUT=$(BIN_NAME).exe EMS_CC=emcc EMS_OPT= \ - -D_GNU_SOURCE \ -Wno-typedef-redefinition \ -s USE_SDL=2 \ -s TOTAL_MEMORY=67108864 \ @@ -101,8 +98,7 @@ EMS_LINKER_FLAGS= \ MACOSX_OPT= \ -mmacosx-version-min=10.6 \ -Wno-typedef-redefinition \ - -D_THREAD_SAFE \ - -D_GNU_SOURCE + -D_THREAD_SAFE MACOSX_LIBS= \ -L$(PRE_BUILT)/macos \ diff --git a/build/android/jni/src/Android.mk b/build/android/jni/src/Android.mk index 03c47db..6dc6ca4 100644 --- a/build/android/jni/src/Android.mk +++ b/build/android/jni/src/Android.mk @@ -1,7 +1,7 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) -LOCAL_CFLAGS += -O3 -Wall -std=c99 -D"log2(x)=(log(x)/log(2))" +LOCAL_CFLAGS += -O3 -Wall -std=gnu99 -D"log2(x)=(log(x)/log(2))" LOCAL_MODULE := main SRC_PATH := ../../../../src diff --git a/include/tic80_config.h b/include/tic80_config.h index 3717ef4..6dbe52a 100644 --- a/include/tic80_config.h +++ b/include/tic80_config.h @@ -22,46 +22,44 @@ #pragma once +#define TIC_BUILD_WITH_LUA 1 +#define TIC_BUILD_WITH_MOON 1 +#define TIC_BUILD_WITH_JS 1 +#define TIC_BUILD_WITH_WREN 1 + #if defined(__APPLE__) -/* lets us know what version of Mac OS X we're compiling on */ -#include "AvailabilityMacros.h" -#include "TargetConditionals.h" - - #ifndef TARGET_OS_IPHONE - #undef __TIC_MACOSX__ - #define __TIC_MACOSX__ 1 - #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 - # error SDL for Mac OS X only supports deploying on 10.6 and above. - #endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */ - #endif /* TARGET_OS_IPHONE */ - +# include "AvailabilityMacros.h" +# include "TargetConditionals.h" +# ifndef TARGET_OS_IPHONE +# undef __TIC_MACOSX__ +# define __TIC_MACOSX__ 1 +# if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +# error SDL for Mac OS X only supports deploying on 10.6 and above. +# endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */ +# endif /* TARGET_OS_IPHONE */ #endif /* defined(__APPLE__) */ #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) -/* Try to find out if we're compiling for WinRT or non-WinRT */ -#if defined(_MSC_VER) && defined(__has_include) -#define HAVE_WINAPIFAMILY_H __has_include() -/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */ -#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */ -#define HAVE_WINAPIFAMILY_H 1 -#else -#define HAVE_WINAPIFAMILY_H 0 -#endif - -#if HAVE_WINAPIFAMILY_H -#include -#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) -#else -#define WINAPI_FAMILY_WINRT 0 -#endif /* HAVE_WINAPIFAMILY_H */ - -#if WINAPI_FAMILY_WINRT -#undef __TIC_WINRT__ -#define __TIC_WINRT__ 1 -#else -#undef __TIC_WINDOWS__ -#define __TIC_WINDOWS__ 1 -#endif +# if defined(_MSC_VER) && defined(__has_include) +# define HAVE_WINAPIFAMILY_H __has_include() +# elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) +# define HAVE_WINAPIFAMILY_H 1 +# else +# define HAVE_WINAPIFAMILY_H 0 +# endif +# if HAVE_WINAPIFAMILY_H +# include +# define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) +# else +# define WINAPI_FAMILY_WINRT 0 +# endif /* HAVE_WINAPIFAMILY_H */ +# if WINAPI_FAMILY_WINRT +# undef __TIC_WINRT__ +# define __TIC_WINRT__ 1 +# else +# undef __TIC_WINDOWS__ +# define __TIC_WINDOWS__ 1 +# endif #endif #if (defined(linux) || defined(__linux) || defined(__linux__)) diff --git a/src/console.c b/src/console.c index c4a0fd9..eb41b1f 100644 --- a/src/console.c +++ b/src/console.c @@ -52,10 +52,23 @@ typedef enum { +#if defined(TIC_BUILD_WITH_LUA) LuaScript, - MoonScript, - JavaScript, - WrenScript, + +# if defined(TIC_BUILD_WITH_MOON) + MoonScript, +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + +#if defined(TIC_BUILD_WITH_JS) + JavaScript, +#endif + +#if defined(TIC_BUILD_WITH_WREN) + WrenScript, +#endif + } ScriptLang; #if defined(__TIC_WINDOWS__) || defined(__TIC_LINUX__) || defined(__TIC_MACOSX__) @@ -80,10 +93,23 @@ typedef struct static const char* ExeExt = ".exe"; #endif +#if defined(TIC_BUILD_WITH_LUA) static const char DefaultLuaTicPath[] = TIC_LOCAL "default.tic"; + +# if defined(TIC_BUILD_WITH_MOON) static const char DefaultMoonTicPath[] = TIC_LOCAL "default_moon.tic"; +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + +#if defined(TIC_BUILD_WITH_JS) static const char DefaultJSTicPath[] = TIC_LOCAL "default_js.tic"; +#endif + +#if defined(TIC_BUILD_WITH_WREN) static const char DefaultWrenTicPath[] = TIC_LOCAL "default_wren.tic"; +#endif + static const char* getName(const char* name, const char* ext) { @@ -421,18 +447,22 @@ static void* getDemoCart(Console* console, ScriptLang script, s32* size) { switch(script) { - case LuaScript: - strcpy(path, DefaultLuaTicPath); - break; - case MoonScript: - strcpy(path, DefaultMoonTicPath); - break; - case JavaScript: - strcpy(path, DefaultJSTicPath); - break; - case WrenScript: - strcpy(path, DefaultWrenTicPath); - break; +#if defined(TIC_BUILD_WITH_LUA) + case LuaScript: strcpy(path, DefaultLuaTicPath); break; + +# if defined(TIC_BUILD_WITH_MOON) + case MoonScript: strcpy(path, DefaultMoonTicPath); break; +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + +#if defined(TIC_BUILD_WITH_JS) + case JavaScript: strcpy(path, DefaultJSTicPath); break; +#endif + +#if defined(TIC_BUILD_WITH_WREN) + case WrenScript: strcpy(path, DefaultWrenTicPath); break; +#endif } void* data = fsLoadRootFile(console->fs, path, size); @@ -441,47 +471,68 @@ static void* getDemoCart(Console* console, ScriptLang script, s32* size) return data; } - static const u8 LuaDemoRom[] = - { - #include "../bin/assets/luademo.tic.dat" - }; - - static const u8 JsDemoRom[] = - { - #include "../bin/assets/jsdemo.tic.dat" - }; - - static const u8 MoonDemoRom[] = - { - #include "../bin/assets/moondemo.tic.dat" - }; - - static const u8 WrenDemoRom[] = - { - #include "../bin/assets/wrendemo.tic.dat" - }; - const u8* demo = NULL; s32 romSize = 0; switch(script) { +#if defined(TIC_BUILD_WITH_LUA) case LuaScript: - demo = LuaDemoRom; - romSize = sizeof LuaDemoRom; + { + static const u8 LuaDemoRom[] = + { + #include "../bin/assets/luademo.tic.dat" + }; + + demo = LuaDemoRom; + romSize = sizeof LuaDemoRom; + } break; + +# if defined(TIC_BUILD_WITH_MOON) case MoonScript: - demo = MoonDemoRom; - romSize = sizeof MoonDemoRom; + { + static const u8 MoonDemoRom[] = + { + #include "../bin/assets/moondemo.tic.dat" + }; + + demo = MoonDemoRom; + romSize = sizeof MoonDemoRom; + } break; +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + + +#if defined(TIC_BUILD_WITH_JS) case JavaScript: - demo = JsDemoRom; - romSize = sizeof JsDemoRom; + { + static const u8 JsDemoRom[] = + { + #include "../bin/assets/jsdemo.tic.dat" + }; + + demo = JsDemoRom; + romSize = sizeof JsDemoRom; + } break; +#endif + +#if defined(TIC_BUILD_WITH_WREN) case WrenScript: - demo = WrenDemoRom; - romSize = sizeof WrenDemoRom; + { + static const u8 WrenDemoRom[] = + { + #include "../bin/assets/wrendemo.tic.dat" + }; + + demo = WrenDemoRom; + romSize = sizeof WrenDemoRom; + } break; +#endif } u8* data = NULL; @@ -508,14 +559,26 @@ static void onConsoleLoadDemoCommandConfirmed(Console* console, const char* para console->showGameMenu = false; +#if defined(TIC_BUILD_WITH_LUA) if(strcmp(param, DefaultLuaTicPath) == 0) data = getDemoCart(console, LuaScript, &size); - else if(strcmp(param, DefaultMoonTicPath) == 0) + +# if defined(TIC_BUILD_WITH_MOON) + if(strcmp(param, DefaultMoonTicPath) == 0) data = getDemoCart(console, MoonScript, &size); - else if(strcmp(param, DefaultJSTicPath) == 0) +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + +#if defined(TIC_BUILD_WITH_JS) + if(strcmp(param, DefaultJSTicPath) == 0) data = getDemoCart(console, JavaScript, &size); - else if(strcmp(param, DefaultWrenTicPath) == 0) +#endif + +#if defined(TIC_BUILD_WITH_WREN) + if(strcmp(param, DefaultWrenTicPath) == 0) data = getDemoCart(console, WrenScript, &size); +#endif const char* name = getCartName(param); @@ -1073,17 +1136,44 @@ static void loadDemo(Console* console, ScriptLang script) static void onConsoleNewCommandConfirmed(Console* console, const char* param) { + bool done = false; + if(param && strlen(param)) { +#if defined(TIC_BUILD_WITH_LUA) if(strcmp(param, "lua") == 0) + { loadDemo(console, LuaScript); - else if(strcmp(param, "moon") == 0 || strcmp(param, "moonscript") == 0) + done = true; + } + +# if defined(TIC_BUILD_WITH_MOON) + if(strcmp(param, "moon") == 0 || strcmp(param, "moonscript") == 0) + { loadDemo(console, MoonScript); - else if(strcmp(param, "js") == 0 || strcmp(param, "javascript") == 0) + done = true; + } +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + +#if defined(TIC_BUILD_WITH_JS) + if(strcmp(param, "js") == 0 || strcmp(param, "javascript") == 0) + { loadDemo(console, JavaScript); - else if(strcmp(param, "wren") == 0) + done = true; + } +#endif + +#if defined(TIC_BUILD_WITH_WREN) + if(strcmp(param, "wren") == 0) + { loadDemo(console, WrenScript); - else + done = true; + } +#endif + + if(!done) { printError(console, "\nunknown parameter: "); printError(console, param); @@ -1091,9 +1181,14 @@ static void onConsoleNewCommandConfirmed(Console* console, const char* param) return; } } - else loadDemo(console, LuaScript); - printBack(console, "\nnew cart is created"); +#if defined(TIC_BUILD_WITH_LUA) + else loadDemo(console, LuaScript); +#endif + + if(done) printBack(console, "\nnew cart is created"); + else printError(console, "\ncart not created"); + commandDone(console); } @@ -1335,22 +1430,36 @@ static void onConsoleConfigCommand(Console* console, const char* param) console->config->reset(console->config); printBack(console, "\nconfiguration reset :)"); } + +#if defined(TIC_BUILD_WITH_LUA) else if(strcmp(param, "default") == 0 || strcmp(param, "default lua") == 0) { onConsoleLoadDemoCommand(console, DefaultLuaTicPath); } + +# if defined(TIC_BUILD_WITH_MOON) else if(strcmp(param, "default moon") == 0 || strcmp(param, "default moonscript") == 0) { onConsoleLoadDemoCommand(console, DefaultMoonTicPath); } +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + +#if defined(TIC_BUILD_WITH_JS) else if(strcmp(param, "default js") == 0) { onConsoleLoadDemoCommand(console, DefaultJSTicPath); } +#endif + +#if defined(TIC_BUILD_WITH_WREN) else if(strcmp(param, "default wren") == 0) { onConsoleLoadDemoCommand(console, DefaultWrenTicPath); } +#endif + else { printError(console, "\nunknown parameter: "); @@ -2660,7 +2769,13 @@ static void tick(Console* console) { if(!console->embed.yes) { +#if defined(TIC_BUILD_WITH_LUA) loadDemo(console, LuaScript); +#elif defined(TIC_BUILD_WITH_JS) + loadDemo(console, JavaScript); +#elif defined(TIC_BUILD_WITH_WREN) + loadDemo(console, WrenScript); +#endif printBack(console, "\n hello! type "); printFront(console, "help"); diff --git a/src/jsapi.c b/src/jsapi.c index 24ab98e..363ccc4 100644 --- a/src/jsapi.c +++ b/src/jsapi.c @@ -21,6 +21,9 @@ // SOFTWARE. #include "machine.h" + +#if defined(TIC_BUILD_WITH_JS) + #include "tools.h" #include @@ -1026,3 +1029,9 @@ const tic_script_config* getJsScriptConfig() { return &JsSyntaxConfig; } + +#else + +s32 duk_timeout_check(void* udata){return 0;} + +#endif /* defined(TIC_BUILD_WITH_JS) */ \ No newline at end of file diff --git a/src/luaapi.c b/src/luaapi.c index 9c35199..a14407c 100644 --- a/src/luaapi.c +++ b/src/luaapi.c @@ -20,6 +20,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +#include "machine.h" + +#if defined(TIC_BUILD_WITH_LUA) + #include #include #include @@ -27,9 +31,6 @@ #include #include -#include "machine.h" -#include "moonscript.h" - #define LUA_LOC_STACK 1E8 // 100.000.000 static const char TicMachine[] = "_TIC80"; @@ -1130,22 +1131,6 @@ static s32 lua_loadfile(lua_State *lua) return 0; } - -static void setloaded(lua_State* l, char* name) -{ - s32 top = lua_gettop(l); - lua_getglobal(l, "package"); - lua_getfield(l, -1, "loaded"); - lua_getfield(l, -1, name); - if (lua_isnil(l, -1)) { - lua_pop(l, 1); - lua_pushvalue(l, top); - lua_setfield(l, -2, name); - } - - lua_settop(l, top); -} - static const char* const ApiKeywords[] = API_KEYWORDS; static const lua_CFunction ApiFunc[] = { @@ -1237,82 +1222,6 @@ static bool initLua(tic_mem* tic, const char* code) return true; } -#define MOON_CODE(...) #__VA_ARGS__ - -static const char* execute_moonscript_src = MOON_CODE( - local fn, err = require('moonscript.base').loadstring(...) - - if not fn then - return err - end - return fn() -); - -static bool initMoonscript(tic_mem* tic, const char* code) -{ - tic_machine* machine = (tic_machine*)tic; - closeLua(tic); - - lua_State* lua = machine->lua = luaL_newstate(); - - static const luaL_Reg loadedlibs[] = - { - { "_G", luaopen_base }, - { LUA_LOADLIBNAME, luaopen_package }, - { LUA_COLIBNAME, luaopen_coroutine }, - { LUA_TABLIBNAME, luaopen_table }, - { LUA_STRLIBNAME, luaopen_string }, - { LUA_MATHLIBNAME, luaopen_math }, - { LUA_DBLIBNAME, luaopen_debug }, - { NULL, NULL } - }; - - for (const luaL_Reg *lib = loadedlibs; lib->func; lib++) - { - luaL_requiref(lua, lib->name, lib->func, 1); - lua_pop(lua, 1); - } - - luaopen_lpeg(lua); - setloaded(lua, "lpeg"); - - initAPI(machine); - - { - lua_State* moon = machine->lua; - - lua_settop(moon, 0); - - if (luaL_loadbuffer(moon, (const char *)moonscript_lua, moonscript_lua_len, "moonscript.lua") != LUA_OK) - { - machine->data->error(machine->data->data, "failed to load moonscript.lua"); - return false; - } - - lua_call(moon, 0, 0); - - if (luaL_loadbuffer(moon, execute_moonscript_src, strlen(execute_moonscript_src), "execute_moonscript") != LUA_OK) - { - machine->data->error(machine->data->data, "failed to load moonscript compiler"); - return false; - } - - lua_pushstring(moon, code); - if (lua_pcall(moon, 1, 1, 0) != LUA_OK) - { - const char* msg = lua_tostring(moon, -1); - - if (msg) - { - machine->data->error(machine->data->data, msg); - return false; - } - } - } - - return true; -} - static void callLuaTick(tic_mem* tic) { tic_machine* machine = (tic_machine*)tic; @@ -1482,6 +1391,101 @@ const tic_script_config* getLuaScriptConfig() return &LuaSyntaxConfig; } +#if defined(TIC_BUILD_WITH_MOON) + +#include "moonscript.h" + +#define MOON_CODE(...) #__VA_ARGS__ + +static const char* execute_moonscript_src = MOON_CODE( + local fn, err = require('moonscript.base').loadstring(...) + + if not fn then + return err + end + return fn() +); + +static void setloaded(lua_State* l, char* name) +{ + s32 top = lua_gettop(l); + lua_getglobal(l, "package"); + lua_getfield(l, -1, "loaded"); + lua_getfield(l, -1, name); + if (lua_isnil(l, -1)) { + lua_pop(l, 1); + lua_pushvalue(l, top); + lua_setfield(l, -2, name); + } + + lua_settop(l, top); +} + +static bool initMoonscript(tic_mem* tic, const char* code) +{ + tic_machine* machine = (tic_machine*)tic; + closeLua(tic); + + lua_State* lua = machine->lua = luaL_newstate(); + + static const luaL_Reg loadedlibs[] = + { + { "_G", luaopen_base }, + { LUA_LOADLIBNAME, luaopen_package }, + { LUA_COLIBNAME, luaopen_coroutine }, + { LUA_TABLIBNAME, luaopen_table }, + { LUA_STRLIBNAME, luaopen_string }, + { LUA_MATHLIBNAME, luaopen_math }, + { LUA_DBLIBNAME, luaopen_debug }, + { NULL, NULL } + }; + + for (const luaL_Reg *lib = loadedlibs; lib->func; lib++) + { + luaL_requiref(lua, lib->name, lib->func, 1); + lua_pop(lua, 1); + } + + luaopen_lpeg(lua); + setloaded(lua, "lpeg"); + + initAPI(machine); + + { + lua_State* moon = machine->lua; + + lua_settop(moon, 0); + + if (luaL_loadbuffer(moon, (const char *)moonscript_lua, moonscript_lua_len, "moonscript.lua") != LUA_OK) + { + machine->data->error(machine->data->data, "failed to load moonscript.lua"); + return false; + } + + lua_call(moon, 0, 0); + + if (luaL_loadbuffer(moon, execute_moonscript_src, strlen(execute_moonscript_src), "execute_moonscript") != LUA_OK) + { + machine->data->error(machine->data->data, "failed to load moonscript compiler"); + return false; + } + + lua_pushstring(moon, code); + if (lua_pcall(moon, 1, 1, 0) != LUA_OK) + { + const char* msg = lua_tostring(moon, -1); + + if (msg) + { + machine->data->error(machine->data->data, msg); + return false; + } + } + } + + return true; +} + static const char* const MoonKeywords [] = { "false", "true", "nil", "return", @@ -1571,3 +1575,7 @@ const tic_script_config* getMoonScriptConfig() { return &MoonSyntaxConfig; } + +#endif /* defined(TIC_BUILD_WITH_MOON) */ + +#endif /* defined(TIC_BUILD_WITH_LUA) */ diff --git a/src/machine.h b/src/machine.h index 4c226f5..487012a 100644 --- a/src/machine.h +++ b/src/machine.h @@ -123,9 +123,17 @@ typedef struct struct { +#if defined(TIC_BUILD_WITH_LUA) || defined(TIC_BUILD_WITH_MOON) + struct lua_State* lua; +#endif + +#if defined(TIC_BUILD_WITH_JS) struct duk_hthread* js; - struct lua_State* lua; - struct WrenVM* wren; +#endif + +#if defined(TIC_BUILD_WITH_WREN) + struct WrenVM* wren; +#endif }; blip_buffer_t* blip; @@ -161,7 +169,20 @@ s32 drawSpriteFont(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 heig s32 drawFixedSpriteFont(tic_mem* memory, u8 index, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale); void parseCode(const tic_script_config* config, const char* start, u8* color, const tic_code_theme* theme); +#if defined(TIC_BUILD_WITH_LUA) const tic_script_config* getLuaScriptConfig(); + +# if defined(TIC_BUILD_WITH_MOON) const tic_script_config* getMoonScriptConfig(); +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + + +#if defined(TIC_BUILD_WITH_JS) const tic_script_config* getJsScriptConfig(); +#endif + +#if defined(TIC_BUILD_WITH_WREN) const tic_script_config* getWrenScriptConfig(); +#endif diff --git a/src/tic.c b/src/tic.c index 9db3ea9..355edec 100644 --- a/src/tic.c +++ b/src/tic.c @@ -558,10 +558,23 @@ void tic_close(tic_mem* memory) machine->state.initialized = false; +#if defined(TIC_BUILD_WITH_LUA) getLuaScriptConfig()->close(memory); + +# if defined(TIC_BUILD_WITH_MOON) getMoonScriptConfig()->close(memory); +# endif + +#endif /* defined(TIC_BUILD_WITH_LUA) */ + + +#if defined(TIC_BUILD_WITH_JS) getJsScriptConfig()->close(memory); +#endif + +#if defined(TIC_BUILD_WITH_WREN) getWrenScriptConfig()->close(memory); +#endif blip_delete(machine->blip); @@ -1517,29 +1530,32 @@ static bool compareMetatag(const char* code, const char* tag, const char* value, return result; } -static bool isMoonscript(const char* code) -{ - return compareMetatag(code, "script", "moon", getMoonScriptConfig()->singleComment) - || compareMetatag(code, "script", "moonscript", getMoonScriptConfig()->singleComment); -} - -static bool isJavascript(const char* code) -{ - return compareMetatag(code, "script", "js", getJsScriptConfig()->singleComment) - || compareMetatag(code, "script", "javascript", getJsScriptConfig()->singleComment); -} - -static bool isWren(const char* code) -{ - return compareMetatag(code, "script", "wren", getWrenScriptConfig()->singleComment); -} - static const tic_script_config* getScriptConfig(const char* code) { - if(isMoonscript(code)) return getMoonScriptConfig(); - if(isJavascript(code)) return getJsScriptConfig(); - if(isWren(code)) return getWrenScriptConfig(); +#if defined(TIC_BUILD_WITH_MOON) + if(compareMetatag(code, "script", "moon", getMoonScriptConfig()->singleComment) || + compareMetatag(code, "script", "moonscript", getMoonScriptConfig()->singleComment)) + return getMoonScriptConfig(); +#endif + +#if defined(TIC_BUILD_WITH_JS) + if(compareMetatag(code, "script", "js", getJsScriptConfig()->singleComment) || + compareMetatag(code, "script", "javascript", getJsScriptConfig()->singleComment)) + return getJsScriptConfig(); +#endif + +#if defined(TIC_BUILD_WITH_WREN) + if(compareMetatag(code, "script", "wren", getWrenScriptConfig()->singleComment)) + return getWrenScriptConfig(); +#endif + +#if defined(TIC_BUILD_WITH_LUA) return getLuaScriptConfig(); +#elif defined(TIC_BUILD_WITH_JS) + return getJsScriptConfig(); +#elif defined(TIC_BUILD_WITH_WREN) + return getWrenScriptConfig(); +#endif } static const tic_script_config* api_get_script_config(tic_mem* memory) @@ -1592,6 +1608,7 @@ static void api_tick(tic_mem* tic, tic_tick_data* data) config = getScriptConfig(code); cart2ram(tic); + machine->state.synced = 0; tic->input.data = 0; if(compareMetatag(code, "input", "mouse", config->singleComment)) diff --git a/src/wrenapi.c b/src/wrenapi.c index 182e70a..7db808c 100644 --- a/src/wrenapi.c +++ b/src/wrenapi.c @@ -20,12 +20,15 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +#include "machine.h" + +#if defined(TIC_BUILD_WITH_WREN) + #include #include #include #include -#include "machine.h" #include "tools.h" #include "wren.h" @@ -1369,3 +1372,5 @@ const tic_script_config* getWrenScriptConfig() { return &WrenSyntaxConfig; } + +#endif /* defined(TIC_BUILD_WITH_WREN) */