From 32e93a758c60d057d358a5cc7909de9260584643 Mon Sep 17 00:00:00 2001 From: paladin-t Date: Tue, 1 Mar 2016 13:21:19 +0800 Subject: [PATCH] +added an OS statement; *refactored platform dependent macros. --- HISTORY | 4 ++ core/my_basic.c | 70 ++++++++++++++++---------------- core/my_basic.h | 64 ++++++++++++++++++++++++++--- output/my_basic.exe | Bin 365056 -> 365056 bytes shell/main.c | 97 +++++++++++++++++++++++++++++--------------- 5 files changed, 162 insertions(+), 73 deletions(-) diff --git a/HISTORY b/HISTORY index 55f0a9d..e7af3c9 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,7 @@ +Mar. 1 2016 +Added an OS statement +Refactored platform dependent macros + Feb. 29 2016 Added multi-line comment support Fixed a crash bug with an invalid expression diff --git a/core/my_basic.c b/core/my_basic.c index 1612213..93cd77a 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -30,15 +30,15 @@ #endif /* _MSC_VER */ #include "my_basic.h" -#ifdef _MSC_VER +#ifdef MB_CP_VC # include # include -#else /* _MSC_VER */ +#else /* MB_CP_VC */ # include -#endif /* _MSC_VER */ -#ifndef ARDUINO +#endif /* MB_CP_VC */ +#ifndef MB_CP_ARDUINO # include -#endif /* ARDUINO */ +#endif /* MB_CP_ARDUINO */ #include #include #include @@ -51,26 +51,26 @@ extern "C" { #endif /* __cplusplus */ -#ifdef _MSC_VER +#ifdef MB_CP_VC # pragma warning(push) # pragma warning(disable : 4127) # pragma warning(disable : 4305) # pragma warning(disable : 4309) # pragma warning(disable : 4805) # pragma warning(disable : 4996) -#endif /* _MSC_VER */ +#endif /* MB_CP_VC */ -#ifdef __APPLE__ +#ifdef MB_CP_CLANG # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wunused-function" # pragma clang diagnostic ignored "-Wunused-variable" -#endif /* __APPLE__ */ +#endif /* MB_CP_CLANG */ -#ifdef __BORLANDC__ +#ifdef MB_CP_BORLANDC # pragma warn -8004 # pragma warn -8008 # pragma warn -8012 -#endif /* __BORLANDC__ */ +#endif /* MB_CP_BORLANDC */ #ifdef MB_COMPACT_MODE # pragma pack(1) @@ -1684,22 +1684,22 @@ static int _close_coll_lib(mb_interpreter_t* s); */ /** Macro */ -#ifdef _MSC_VER -# if _MSC_VER < 1300 +#ifdef MB_CP_VC +# if MB_CP_VC < 1300 # define MB_FUNC 0 -# else /* _MSC_VER < 1300 */ +# else /* MB_CP_VC < 1300 */ # define MB_FUNC __FUNCTION__ -# endif /* _MSC_VER < 1300 */ -#elif defined __BORLANDC__ +# endif /* MB_CP_VC < 1300 */ +#elif defined MB_CP_BORLANDC # define MB_FUNC __FUNC__ -#elif defined __POCC__ +#elif defined MB_CP_PELLESC # define MB_FUNC __func__ -#else /* _MSC_VER */ +#else /* MB_CP_VC */ # define MB_FUNC __FUNCTION__ -#endif /* _MSC_VER */ +#endif /* MB_CP_VC */ -#ifdef _MSC_VER -# if _MSC_VER < 1300 +#ifdef MB_CP_VC +# if MB_CP_VC < 1300 # define _do_nothing(__s, __l, __exit, __result) \ do { \ _ls_node_t* ast = 0; static int i = 0; ++i; \ @@ -1707,8 +1707,8 @@ static int _close_coll_lib(mb_interpreter_t* s); ast = (_ls_node_t*)(*(__l)); \ _handle_error_on_obj((__s), SE_RN_WRONG_FUNCTION_REACHED, (__s)->source_file, DON(ast), MB_FUNC_ERR, __exit, __result); \ } while(0) -# endif /* _MSC_VER < 1300 */ -#endif /* _MSC_VER */ +# endif /* MB_CP_VC < 1300 */ +#endif /* MB_CP_VC */ #ifndef _do_nothing # define _do_nothing(__s, __l, __exit, __result) \ do { \ @@ -4145,7 +4145,7 @@ static mb_input_func_t _get_inputer(mb_interpreter_t* s) { static char* _load_file(mb_interpreter_t* s, const char* f, const char* prefix) { /* Read all content of a file into a buffer */ -#ifndef ARDUINO +#ifndef MB_CP_ARDUINO FILE* fp = 0; char* buf = 0; long curpos = 0; @@ -4186,9 +4186,9 @@ static char* _load_file(mb_interpreter_t* s, const char* f, const char* prefix) } return buf; -#else /* ARDUINO */ +#else /* MB_CP_ARDUINO */ return 0; -#endif /* ARDUINO */ +#endif /* MB_CP_ARDUINO */ } static void _end_of_file(_parsing_context_t* context) { @@ -15093,11 +15093,11 @@ static int _std_input(mb_interpreter_t* s, void** l) { obj = (_object_t*)ast->data; if(!obj || obj->type == _DT_EOS) { -#ifdef _MSC_VER +#ifdef MB_CP_VC getch(); -#else /* _MSC_VER */ +#else /* MB_CP_VC */ _get_inputer(s)(line, sizeof(line)); -#endif /* _MSC_VER */ +#endif /* MB_CP_VC */ goto _exit; } @@ -15906,19 +15906,19 @@ _exit: # pragma pack() #endif /* MB_COMPACT_MODE */ -#ifdef __BORLANDC__ +#ifdef MB_CP_BORLANDC # pragma warn .8004 # pragma warn .8008 # pragma warn .8012 -#endif /* __BORLANDC__ */ +#endif /* MB_CP_BORLANDC */ -#ifdef __APPLE__ +#ifdef MB_CP_CLANG # pragma clang diagnostic pop -#endif /* __APPLE__ */ +#endif /* MB_CP_CLANG */ -#ifdef _MSC_VER +#ifdef MB_CP_VC # pragma warning(pop) -#endif /* _MSC_VER */ +#endif /* MB_CP_VC */ #ifdef __cplusplus } diff --git a/core/my_basic.h b/core/my_basic.h index 68750b4..98e701d 100755 --- a/core/my_basic.h +++ b/core/my_basic.h @@ -30,6 +30,60 @@ extern "C" { #endif /* __cplusplus */ +#if defined _MSC_VER +# define MB_CP_VC _MSC_VER +#elif defined __clang__ +# define MB_CP_CLANG +#elif defined __CYGWIN__ +# define MB_CP_CYGWIN +#elif defined __MINGW32__ +# define MB_CP_MINGW32 +#elif defined __BORLANDC__ +# define MB_CP_BORLANDC +#elif defined __POCC__ +# define MB_CP_PELLESC +#elif defined __TINYC__ +# define MB_CP_TCC +#elif defined __GNUC__ || defined __GNUG__ +# define MB_CP_GCC +#elif defined __ICC || defined __INTEL_COMPILER +# define MB_CP_ICC +#elif defined __HP_cc || defined __HP_aCC +# define MB_CP_HPC +#elif defined __IBMC__ || defined __IBMCPP__ +# define MB_CP_IBMC +#elif defined __PGI +# define MB_CP_PGCC +#elif defined __SUNPRO_C || defined__SUNPRO_CC +# define MB_CP_SOLARISC +#elif defined ARDUINO +# define MB_CP_ARDUINO +#else +# define MB_CP_UNKNOWN +#endif /* Compiler dependent macro */ + +#if defined _WIN32 || defined _WIN64 +# define MB_OS_WIN +#elif defined __APPLE__ +# include +# define MB_OS_APPLE +# ifdef TARGET_OS_IPHONE +# define MB_OS_IOS +# elif defined TARGET_IPHONE_SIMULATOR +# define MB_OS_IOS_SIM +# elif defined TARGET_OS_MAC +# define MB_OS_MAC +# endif +#elif defined __unix__ +# define MB_OS_UNIX +#elif defined __linux__ +# define MB_OS_LINUX +#elif defined __ANDROID__ +# define MB_OS_ANDROID +#else +# define MB_OS_UNKNOWN +#endif /* OS dependent macro */ + #ifndef MBAPI # define MBAPI #endif /* MBAPI */ @@ -156,17 +210,17 @@ extern "C" { #endif /* MB_NULL_STRING */ #ifndef mb_stricmp -# ifdef _MSC_VER +# ifdef MB_CP_VC # define mb_stricmp _strcmpi -# else /* _MSC_VER */ -# ifdef __BORLANDC__ +# else /* MB_CP_VC */ +# ifdef MB_CP_BORLANDC # define mb_stricmp stricmp -# elif defined __POCC__ +# elif defined MB_CP_PELLESC # define mb_stricmp _stricmp # else # define mb_stricmp strcasecmp # endif -# endif /* _MSC_VER */ +# endif /* MB_CP_VC */ #endif /* mb_stricmp */ #ifndef mb_assert diff --git a/output/my_basic.exe b/output/my_basic.exe index f5df4ebdbdc52a31de0d165fcc4f92bac8bf1929..e9175d2ae5badcf66d74ef6a8df5b9611d010497 100755 GIT binary patch delta 6378 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 XG|T^2=#OenYxtgvY # include # include -#elif !defined __BORLANDC__ && !defined __TINYC__ +#elif !defined MB_CP_BORLANDC && !defined MB_CP_TCC # include -#endif /* _MSC_VER */ -#ifndef _MSC_VER +#endif /* MB_CP_VC */ +#ifndef MB_CP_VC # include -#endif /* _MSC_VER */ +#endif /* MB_CP_VC */ +#ifdef MB_CP_CLANG +# include +#endif /* MB_CP_CLANG */ #include #include #include #include #include #include -#ifdef __APPLE__ -# include -#endif /* __APPLE__ */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ -#ifdef _MSC_VER +#ifdef MB_CP_VC # pragma warning(disable : 4127) # pragma warning(disable : 4706) # pragma warning(disable : 4996) -#endif /* _MSC_VER */ +#endif /* MB_CP_VC */ -#ifdef __BORLANDC__ +#ifdef MB_CP_BORLANDC # pragma warn -8004 # pragma warn -8008 # pragma warn -8066 -#endif /* __BORLANDC__ */ +#endif /* MB_CP_BORLANDC */ -#ifdef __POCC__ +#ifdef MB_CP_PELLESC # define strdup _strdup # define unlink _unlink -#endif /* __POCC__ */ +#endif /* MB_CP_PELLESC */ /* ** {======================================================== ** Common declarations */ -#ifdef _MSC_VER +#ifdef MB_OS_WIN # define _BIN_FILE_NAME "my_basic" -#elif defined __APPLE__ +#elif defined MB_OS_MAC # define _BIN_FILE_NAME "my_basic_mac" -#else /* _MSC_VER */ +#else # define _BIN_FILE_NAME "my_basic_bin" -#endif /* _MSC_VER */ +#endif /* Define as 1 to use memory pool, 0 to disable */ #define _USE_MEM_POOL 1 @@ -646,11 +646,11 @@ static bool_t _try_import(struct mb_interpreter_t* s, const char* p) { */ static void _clear_screen(void) { -#ifdef _MSC_VER +#ifdef MB_OS_WIN system("cls"); -#else /* _MSC_VER */ +#else /* MB_OS_WIN */ system("clear"); -#endif /* _MSC_VER */ +#endif /* MB_OS_WIN */ } static int _new_program(void) { @@ -821,13 +821,13 @@ static void _kill_program(const char* path) { static void _list_directory(const char* path) { char line[_MAX_LINE_LENGTH]; -#ifdef _MSC_VER +#ifdef MB_OS_WIN if(path && *path) sprintf(line, "dir %s", path); else sprintf(line, "dir"); -#else /* _MSC_VER */ +#else /* MB_OS_WIN */ if(path && *path) sprintf(line, "ls %s", path); else sprintf(line, "ls"); -#endif /* _MSC_VER */ +#endif /* MB_OS_WIN */ system(line); } @@ -1065,8 +1065,24 @@ static bool_t _process_parameters(int argc, char* argv[]) { ** Scripting interfaces */ +#ifdef MB_OS_WIN +# define _OS "WIN" +#elif defined MB_OS_IOS || MB_OS_IOS_SIM +# define _OS "IOS" +#elif defined MB_OS_MAC +# define _OS "MAC" +#elif defined MB_OS_UNIX +# define _OS "UNIX" +#elif defined MB_OS_LINUX +# define _OS "LINUX" +#elif defined MB_OS_ANDROID +# define _OS "ANDROID" +#else +# define _OS "UNKNOWN" +#endif /* MB_OS_WIN */ + #define _HAS_TICKS -#if defined _MSC_VER +#if defined MB_CP_VC static int_t _ticks(void) { LARGE_INTEGER li; double freq = 0.0; @@ -1079,7 +1095,7 @@ static int_t _ticks(void) { return ret; } -#elif defined __APPLE__ +#elif defined MB_CP_CLANG static int_t _ticks(void) { struct timespec ts; struct timeval now; @@ -1092,7 +1108,7 @@ static int_t _ticks(void) { return (int_t)(ts.tv_sec * 1000 + ts.tv_nsec / 1000000); } -#elif defined __GNUC__ +#elif defined MB_CP_GCC static int_t _ticks(void) { struct timespec ts; @@ -1100,9 +1116,9 @@ static int_t _ticks(void) { return (int_t)(ts.tv_sec * 1000 + ts.tv_nsec / 1000000); } -#else /* _MSC_VER */ +#else /* MB_CP_VC */ # undef _HAS_TICKS -#endif /* _MSC_VER */ +#endif /* MB_CP_VC */ #ifdef _HAS_TICKS static int ticks(struct mb_interpreter_t* s, void** l) { @@ -1167,6 +1183,20 @@ static int set_importing_dirs(struct mb_interpreter_t* s, void** l) { return result; } +static int os(struct mb_interpreter_t* s, void** l) { + int result = MB_FUNC_OK; + + mb_assert(s && l); + + mb_check(mb_attempt_open_bracket(s, l)); + + mb_check(mb_attempt_close_bracket(s, l)); + + mb_check(mb_push_string(s, l, mb_memdup(_OS, (unsigned)(strlen(_OS) + 1)))); + + return result; +} + static int sys(struct mb_interpreter_t* s, void** l) { int result = MB_FUNC_OK; char* arg = 0; @@ -1345,6 +1375,7 @@ static void _on_startup(void) { #endif /* _HAS_TICKS */ mb_reg_fun(bas, now); mb_reg_fun(bas, set_importing_dirs); + mb_reg_fun(bas, os); mb_reg_fun(bas, sys); mb_reg_fun(bas, trace); mb_reg_fun(bas, raise); @@ -1365,11 +1396,11 @@ static void _on_exit(void) { _close_mem_pool(); #endif /* _USE_MEM_POOL */ -#if defined _MSC_VER && !defined _WIN64 +#if defined MB_CP_VC && !defined _WIN64 if(!!_CrtDumpMemoryLeaks()) { _asm { int 3 } } #elif _USE_MEM_POOL if(alloc_count > 0 || alloc_bytes > 0) { mb_assert(0 && "Memory leak."); } -#endif /* _MSC_VER && !_WIN64 */ +#endif /* MB_CP_VC && !_WIN64 */ } /* ========================================================} */ @@ -1382,9 +1413,9 @@ static void _on_exit(void) { int main(int argc, char* argv[]) { int status = 0; -#if defined _MSC_VER && !defined _WIN64 +#if defined MB_CP_VC && !defined _WIN64 _CrtSetBreakAlloc(0); -#endif /* _MSC_VER && !_WIN64 */ +#endif /* MB_CP_VC && !_WIN64 */ atexit(_on_exit);