bool run_memory_tests(int vars) { int test_num = 1; int count = 0; int passed = 0; while (test_num<1000) { char fn[32]; sprintf(fn, TEST_DIR"test%03d.js", test_num); // check if the file exists - if not, assume we're at the end of our tests FILE *f = fopen(fn,"r"); if (!f) break; fclose(f); run_memory_test(fn, vars); test_num++; } if (count==0) printf("No tests found in "TEST_DIR"test*.js!\n"); return true; }
bool run_memory_tests(int vars) { int count = 0; DIR *dir = opendir(TEST_DIR); if(dir) { struct dirent *pDir=NULL; while((pDir = readdir(dir)) != NULL) { char *fn = (*pDir).d_name; size_t l = strlen(fn); if (l>3 && fn[l-3]=='.' && fn[l-2]=='j' && fn[l-1]=='s') { char *full_fn = (char *)malloc(1+l+strlen(TEST_DIR)); strcpy(full_fn, TEST_DIR); strcat(full_fn, fn); run_memory_test(full_fn, vars); count++; } } closedir(dir); } else { printf(TEST_DIR" directory not found"); } return true; }
int main(int argc, char **argv) { int i; for (i=1;i<argc;i++) { if (argv[i][0]=='-') { // option char *a = argv[i]; if (!strcmp(a,"-h") || !strcmp(a,"--help")) { show_help(); exit(1); } else if (!strcmp(a,"-e") || !strcmp(a,"--eval")) { if (i+1>=argc) die("Expecting an extra argument\n"); jshInit(); jsvInit(); jsiInit(true); addNativeFunction("quit", nativeQuit); jsvUnLock(jspEvaluate(argv[i+1], false)); int errCode = handleErrors(); isRunning = !errCode; bool isBusy = true; while (isRunning && (jsiHasTimers() || isBusy)) isBusy = jsiLoop(); jsiKill(); jsvKill(); jshKill(); exit(errCode); } else if (!strcmp(a,"--test")) { if (i+1>=argc) die("Expecting an extra argument\n"); bool ok = run_test(argv[i+1]); exit(ok ? 0 : 1); } else if (!strcmp(a,"--test-all")) { bool ok = run_all_tests(); exit(ok ? 0 : 1); } else if (!strcmp(a,"--test-mem-all")) { bool ok = run_memory_tests(0); exit(ok ? 0 : 1); } else if (!strcmp(a,"--test-mem")) { if (i+1>=argc) die("Expecting an extra argument\n"); bool ok = run_memory_test(argv[i+1], 0); exit(ok ? 0 : 1); } else if (!strcmp(a,"--test-mem-n")) { if (i+2>=argc) die("Expecting an extra 2 arguments\n"); bool ok = run_memory_test(argv[i+1], atoi(argv[i+2])); exit(ok ? 0 : 1); } else { printf("Unknown Argument %s\n", a); show_help(); exit(1); } } } if (argc==1) { printf("Interactive mode.\n"); } else if (argc==2) { // single file - just run it char *buffer = read_file(argv[1]); if (!buffer) exit(1); // check for '#' as the first char, and if so, skip the first line char *cmd = buffer; if (cmd[0]=='#') { while (cmd[0] && cmd[0]!='\n') cmd++; if (cmd[0]=='\n') cmd++; } jshInit(); jsvInit(); jsiInit(false /* do not autoload!!! */); addNativeFunction("quit", nativeQuit); jsvUnLock(jspEvaluate(cmd, true)); int errCode = handleErrors(); free(buffer); isRunning = !errCode; bool isBusy = true; while (isRunning && (jsiHasTimers() || isBusy)) isBusy = jsiLoop(); jsiKill(); jsvKill(); jshKill(); exit(errCode); } else { printf("Unknown arguments!\n"); show_help(); exit(1); } printf("Size of JsVar is now %d bytes\n", (int)sizeof(JsVar)); printf("Size of JsVarRef is now %d bytes\n", (int)sizeof(JsVarRef)); #ifndef __MINGW32__ struct sigaction sa; sa.sa_handler = sig_handler; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); if (sigaction(SIGINT, &sa, NULL) == -1) printf("Adding SIGINT hook failed\n"); else printf("Added SIGINT hook\n"); if (sigaction(SIGHUP, &sa, NULL) == -1) printf("Adding SIGHUP hook failed\n"); else printf("Added SIGHUP hook\n"); if (sigaction(SIGTERM, &sa, NULL) == -1) printf("Adding SIGTERM hook failed\n"); else printf("Added SIGTERM hook\n"); #endif//!__MINGW32__ jshInit(); jsvInit(); jsiInit(true); addNativeFunction("quit", nativeQuit); addNativeFunction("interrupt", nativeInterrupt); while (isRunning) { jsiLoop(); } jsiConsolePrint("\n"); jsiKill(); jsvGarbageCollect(); jsvShowAllocated(); jsvKill(); jshKill(); return 0; }
int main(int argc, char **argv) { int i; for (i=1;i<argc;i++) { if (argv[i][0]=='-') { // option char *a = argv[i]; if (!strcmp(a,"-h") || !strcmp(a,"--help")) { show_help(); exit(1); } else if (!strcmp(a,"-e") || !strcmp(a,"--eval")) { if (i+1>=argc) die("Expecting an extra argument"); jshInit(); jsiInit(true); jspAddNativeFunction(jsiGetParser(), "function quit()", nativeQuit); jsvUnLock(jspEvaluate(jsiGetParser(), argv[i+1])); isRunning = true; while (isRunning && jsiHasTimers()) jsiLoop(); jsiKill(); jshKill(); exit(0); } else if (!strcmp(a,"--test-all")) { bool ok = run_all_tests(); exit(ok ? 0 : 1); } else if (!strcmp(a,"--test-mem-all")) { bool ok = run_memory_tests(0); exit(ok ? 0 : 1); } else if (!strcmp(a,"--test-mem")) { if (i+1>=argc) die("Expecting an extra argument"); bool ok = run_memory_test(argv[i+1], 0); exit(ok ? 0 : 1); } else if (!strcmp(a,"--test-mem-n")) { if (i+2>=argc) die("Expecting an extra 2 arguments"); bool ok = run_memory_test(argv[i+1], atoi(argv[i+2])); exit(ok ? 0 : 1); } else { printf("Unknown Argument %s\n", a); show_help(); exit(1); } } } if (argc==1) { printf("Interactive mode.\n"); } else if (argc==2) { char *buffer = read_file(argv[1]); jshInit(); jsiInit(false /* do not autoload!!! */); jspAddNativeFunction(jsiGetParser(), "function quit()", nativeQuit); jsvUnLock(jspEvaluate(jsiGetParser(), buffer )); free(buffer); isRunning = true; while (isRunning && jsiHasTimers()) jsiLoop(); jsiKill(); jshKill(); exit(0); } else { printf("Unknown arguments!\n"); show_help(); exit(1); } printf("Size of JsVar is now %d bytes\n", (int)sizeof(JsVar)); printf("Size of JsVarRef is now %d bytes\n", (int)sizeof(JsVarRef)); struct sigaction sa; sa.sa_handler = sig_handler; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); if (sigaction(SIGINT, &sa, NULL) == -1) printf("Adding SIGINT hook failed\n"); else printf("Added SIGINT hook\n"); if (sigaction(SIGHUP, &sa, NULL) == -1) printf("Adding SIGHUP hook failed\n"); else printf("Added SIGHUP hook\n"); if (sigaction(SIGTERM, &sa, NULL) == -1) printf("Adding SIGTERM hook failed\n"); else printf("Added SIGTERM hook\n"); jshInit(); jsiInit(true); jspAddNativeFunction(jsiGetParser(), "function quit()", nativeQuit); jspAddNativeFunction(jsiGetParser(), "function interrupt()", nativeInterrupt); while (isRunning) { jsiLoop(); } jsiConsolePrint("\n"); jsiKill(); jsvShowAllocated(); jshKill(); return 0; }
int espruino(int argc, char **argv) { int i; for (i=1;i<argc;i++) { if (argv[i][0]=='-') { // option char *a = argv[i]; if (!strcmp(a,"-h") || !strcmp(a,"--help")) { show_help(); return (1); } else if (!strcmp(a,"-e") || !strcmp(a,"--eval")) { if (i+1>=argc) die("Expecting an extra argument\n"); jshInit(); jsiInit(true); jspAddNativeFunction(jsiGetParser(), "function quit()", nativeQuit); jsvUnLock(jspEvaluate(jsiGetParser(), argv[i+1])); isRunning = true; //while (isRunning && jsiHasTimers()) jsiLoop(); jsiKill(); jshKill(); return (0); } else if (!strcmp(a,"--test")) { if (i+1>=argc) die("Expecting an extra argument\n"); bool ok = run_test(argv[i+1]); return (ok ? 0 : 1); } else if (!strcmp(a,"--test-all")) { bool ok = run_all_tests(); return (ok ? 0 : 1); } else if (!strcmp(a,"--test-mem-all")) { bool ok = run_memory_tests(0); return (ok ? 0 : 1); } else if (!strcmp(a,"--test-mem")) { if (i+1>=argc) die("Expecting an extra argument\n"); bool ok = run_memory_test(argv[i+1], 0); return (ok ? 0 : 1); } else if (!strcmp(a,"--test-mem-n")) { if (i+2>=argc) die("Expecting an extra 2 arguments\n"); bool ok = run_memory_test(argv[i+1], atoi(argv[i+2])); return (ok ? 0 : 1); } else { printf("Unknown Argument %s\n", a); show_help(); return -1; } } } if (argc==1) { printf("Interactive mode.\n"); } else if (argc==2) { // single file - just run it char *buffer = (char *)read_file(argv[1]); if (!buffer) return (1); // check for '#' as the first char, and if so, skip the first line char *cmd = buffer; if (cmd[0]=='#') { while (cmd[0] && cmd[0]!='\n') cmd++; if (cmd[0]=='\n') cmd++; } jshInit(); jsiInit(false /* do not autoload!!! */); jspAddNativeFunction(jsiGetParser(), "function quit()", nativeQuit); jsvUnLock(jspEvaluate(jsiGetParser(), cmd )); free(buffer); //isRunning = true; //while (isRunning && jsiHasTimers()) jsiLoop(); jsiKill(); jshKill(); return -1; } else { printf("Unknown arguments!\n"); show_help(); return -1; } printf("Size of JsVar is now %d bytes\n", (int)sizeof(JsVar)); printf("Size of JsVarRef is now %d bytes\n", (int)sizeof(JsVarRef)); jshInit(); jsiInit(true); jspAddNativeFunction(jsiGetParser(), "function quit()", nativeQuit); jspAddNativeFunction(jsiGetParser(), "function interrupt()", nativeInterrupt); while (isRunning) { jsiLoop(); } jsiConsolePrint("\n"); jsiKill(); jsvShowAllocated(); jshKill(); return 0; }