static int boot_main(int argc, char *argv[] ) { neko_vm *vm; value args[2]; value mload, exc = NULL; char* root = getSwitch(argc,argv,"swroot"); char* rootFromBundle = root ? NULL : getSwitchFromBundle("swroot"); char* index = getSwitch(argc,argv,"swindex"); if(!index) index = getSwitchFromBundle("swindex"); #if OSX char* tmpRootBuffer = NULL; if (rootFromBundle) { if (stricmp("SW_BUNDLE_PARENT",rootFromBundle)==0) { // folder containing bundle is path: root = getBundleRoot(); strcat(root,"/.."); } else { // path is relative to bundle: root = tmpRootBuffer = malloc(FILENAME_MAX); sprintf(root,"%s/%s",getBundleRoot(),rootFromBundle); } } #endif // if root folder is specified, change the current directory: if( root ) { chdir(root); # if OSX if (tmpRootBuffer) free(tmpRootBuffer); # endif } // printf("boot-loader computed working folder: %s\n",root); // printf("boot-loader set working folder: %s\n",getcwd(NULL)); // initialize Neko Virtual Machine neko_global_init(&vm); vm = neko_vm_alloc(NULL); neko_vm_jit(vm,1); neko_vm_select(vm); mload = neko_default_loader(argv, argc); args[0] = alloc_string(index ? index : DEFAULT_INDEX); args[1] = mload; val_callEx(mload,val_field(mload,val_id("loadmodule")),args,2,&exc); if( exc != NULL ) report(vm,exc); vm = NULL; neko_global_free(); while(switches_count--) { free(switches[switches_count]); } if (switches) free(switches); return( exc != NULL ); }
void NekoVM::Execute (const char *modulePath) { neko_vm *vm; neko_global_init (); vm = neko_vm_alloc (NULL); neko_vm_select (vm); std_main (); value mload = neko_default_loader(NULL, 0); value args2[] = { alloc_string(modulePath), mload }; value exc = NULL; val_callEx(mload,val_field(mload,val_id("loadmodule")),args2,2,&exc); if( exc != NULL ) { report(vm,exc,1); //return 1; } //return 0; }
static void mod_neko_do_init() { int tmp = 0; if( init_done ) return; init_done = 1; memset(&config,0,sizeof(config)); config.use_cache = 1; config.gc_period = 1; config.max_post_size = MOD_NEKO_POST_SIZE; # ifdef APACHE_2_X putenv(strdup("MOD_NEKO=2")); # else putenv(strdup("MOD_NEKO=1")); # endif neko_global_init(); cache_root = alloc_local(); }
void init(GeanyData *data) { GtkWidget *demo_item; geany = data; // keep a pointer to the main application fields & functions // Add an item to the Tools menu demo_item = gtk_menu_item_new_with_mnemonic(_("_Run Neko .n")); gtk_widget_show(demo_item); gtk_container_add(GTK_CONTAINER(geany->tools_menu), demo_item); g_signal_connect(G_OBJECT(demo_item), "activate", G_CALLBACK(item_activate), NULL); // keep a pointer to the menu item, so we can remove it when the plugin is unloaded hxLocalData.menu_item = demo_item; neko_global_init(NULL); hxLocalData.vm = neko_vm_alloc(NULL); // Prevent events to fire before the Neko plugin is ready // hxLocalData.isReady = alloc_bool(FALSE); // hxLocalData.isReady = val_false; hxLocalData.plugin_dir = g_strconcat(geany->app->configdir, G_DIR_SEPARATOR_S, "plugins", G_DIR_SEPARATOR_S, "neko",NULL); char *extras = g_strconcat(hxLocalData.plugin_dir, G_DIR_SEPARATOR_S, "Extras.n", NULL); neko_vm_select(hxLocalData.vm); hxLocalData.extrasModule = hxNekoLoad(extras); g_free(extras); }
int main( int argc, char *argv[] ) { neko_vm *vm; value mload; int r; _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); neko_global_init(); vm = neko_vm_alloc(NULL); neko_vm_select(vm); # ifdef NEKO_STANDALONE neko_standalone_init(); # endif if( !neko_has_embedded_module(vm) ) { int jit = 1; int stats = 0; while( argc > 1 ) { if( strcmp(argv[1],"-interp") == 0 ) { argc--; argv++; jit = 0; continue; } if( strcmp(argv[1],"-stats") == 0 ) { argc--; argv++; stats = 1; neko_vm_set_stats(vm,neko_stats_measure,neko_stats_measure); neko_stats_measure(vm,"total",1); continue; } break; } # ifdef NEKO_POSIX if( jit ) { struct sigaction act; act.sa_sigaction = NULL; act.sa_handler = handle_signal; act.sa_flags = 0; sigemptyset(&act.sa_mask); sigaction(SIGSEGV,&act,NULL); } # endif neko_vm_jit(vm,jit); if( argc == 1 ) { # ifdef NEKO_STANDALONE report(vm,alloc_string("No embedded module in this executable"),0); # else printf("NekoVM %d.%d.%d (c)2005-2009 Motion-Twin\n Usage : neko <file>\n",NEKO_VERSION/100,(NEKO_VERSION/10)%10,NEKO_VERSION%10); # endif mload = NULL; r = 1; } else { mload = default_loader(argv+2,argc-2); r = execute_file(vm,argv[1],mload); } if( stats ) { value v; neko_stats_measure(vm,"total",0); v = neko_stats_build(vm); val_print(alloc_string("TOT\tTIME\tCOUNT\tNAME\n")); while( v != val_null ) { char buf[256]; value *s = val_array_ptr(v); int errors = val_int(s[4]); sprintf(buf,"%d\t%d\t%d\t%s%c", val_int(s[1]), val_int(s[2]), val_int(s[3]), val_string(s[0]), errors?' ':'\n'); if( errors ) sprintf(buf+strlen(buf),"ERRORS=%d\n",errors); val_print(alloc_string(buf)); v = s[5]; } } } else { mload = default_loader(argv+1,argc-1); r = neko_execute_self(vm,mload); } if( mload != NULL && val_field(mload,val_id("dump_prof")) != val_null ) val_ocall0(mload,val_id("dump_prof")); vm = NULL; mload = NULL; neko_vm_select(NULL); neko_global_free(); return r; }