+added an OS statement; *refactored platform dependent macros.
This commit is contained in:
parent
b3a461e796
commit
32e93a758c
4
HISTORY
4
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
|
||||
|
@ -30,15 +30,15 @@
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#include "my_basic.h"
|
||||
#ifdef _MSC_VER
|
||||
#ifdef MB_CP_VC
|
||||
# include <conio.h>
|
||||
# include <malloc.h>
|
||||
#else /* _MSC_VER */
|
||||
#else /* MB_CP_VC */
|
||||
# include <stdint.h>
|
||||
#endif /* _MSC_VER */
|
||||
#ifndef ARDUINO
|
||||
#endif /* MB_CP_VC */
|
||||
#ifndef MB_CP_ARDUINO
|
||||
# include <memory.h>
|
||||
#endif /* ARDUINO */
|
||||
#endif /* MB_CP_ARDUINO */
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
@ -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
|
||||
}
|
||||
|
@ -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 <TargetConditionals.h>
|
||||
# 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
|
||||
|
Binary file not shown.
97
shell/main.c
97
shell/main.c
@ -30,59 +30,59 @@
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#include "../core/my_basic.h"
|
||||
#ifdef _MSC_VER
|
||||
#ifdef MB_CP_VC
|
||||
# include <crtdbg.h>
|
||||
# include <conio.h>
|
||||
# include <Windows.h>
|
||||
#elif !defined __BORLANDC__ && !defined __TINYC__
|
||||
#elif !defined MB_CP_BORLANDC && !defined MB_CP_TCC
|
||||
# include <unistd.h>
|
||||
#endif /* _MSC_VER */
|
||||
#ifndef _MSC_VER
|
||||
#endif /* MB_CP_VC */
|
||||
#ifndef MB_CP_VC
|
||||
# include <stdint.h>
|
||||
#endif /* _MSC_VER */
|
||||
#endif /* MB_CP_VC */
|
||||
#ifdef MB_CP_CLANG
|
||||
# include <sys/time.h>
|
||||
#endif /* MB_CP_CLANG */
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <time.h>
|
||||
#ifdef __APPLE__
|
||||
# include <sys/time.h>
|
||||
#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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user