swig生成基于neko虚拟机的测试库


声明:本文转载自https://my.oschina.net/littlemonkeyc/blog/1634711,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

我们之前已经测试过neko的在c里的转换了。 接下来基于昨天的研究成果 我们来组合一下,把他们结合到一起试试。

neko测试模块

$exports.x = 33; var inner  = function () {         return 1; } $exports.f = function(x) { return x * 2 + 1 + inner(); } 

examp.i 文件

 %module example /***  * initVM(void)  * @return userdata neko_vm *  */ neko_vm * initVM (void) ; /**  * selectVM  */ void selectVM(neko_vm * vm) ; /***  *  load a vm Module  *  return  userdata ;  *  */ value loadModule(char * str); /***  * executeModule  *  */ void executeModule(value module);   

example.c

/*  * example.c  */  /***  * initVM(void)  * @return neko_vm *  */ neko_vm * initVM (void) { 	neko_vm *vm; 	value module; 	neko_global_init(NULL); 	vm = neko_vm_alloc(NULL); 	return vm; } /**  * selectVM  */ void selectVM(neko_vm * vm) { 	neko_vm_select(vm); }  /***  *  load a vm Module  *  return userdata  ;  */ value loadModule(char * str) { 	value module ; 	value loader; 	value ret; 	value exc = NULL; 	value args[2];  	loader = neko_default_loader(NULL,0);         args[0] = alloc_string(str);         args[1] = loader;         ret = val_callEx(loader,     		        val_field(loader,val_id("loadmodule")), 			args,2,&exc);          if( exc != NULL ) {             buffer b = alloc_buffer(NULL);             val_buffer(b,exc);             printf("Uncaught exception - %s\n",val_string(buffer_to_string(b)));             return NULL;         } 	return ret; }  /***  * executeModule  *  */ void executeModule(value module) {     value x = val_field(module,val_id("x"));     value f = val_field(module,val_id("f"));     value ret;     if( !val_is_int(x) )          return;     printf("x = %d\n",val_int(x));     if( !val_is_function(f) || val_fun_nargs(f) != 1 )          return;     ret = val_call1(f,x);     if( !val_is_int(ret) )          return;     printf("f(x) = %d\n",val_int(ret)); }   

make生成example.so 文件

测试的lua代码

package.cpath = './?.so;' print(package.loadlib);  install,b,c = package.loadlib("./example.so","luaopen_example");  print(install,b,c);  install(); print("vm test")  local vm = example.initVM(); print(vm); example.selectVM(vm);  local module = example.loadModule("mymodule.n") print(module); example.executeModule(module); 

输出

function: 0x254ecb0 function: 0x25541c0     nil     nil vm test userdata: 0x2556968 userdata: 0x2556a58 x = 33 f(x) = 68 

这件事开始有点意思了。

本文发表于2018年03月14日 22:38
(c)注:本文转载自https://my.oschina.net/littlemonkeyc/blog/1634711,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1824 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1