lvm.js

changeset 97
80cc68dd8222
parent 96
e4324d9a824c
child 98
14d2400ec059
equal deleted inserted replaced
96:e4324d9a824c 97:80cc68dd8222
627 627
628 var fs=require("fs"); 628 var fs=require("fs");
629 var sys=require("sys"); 629 var sys=require("sys");
630 var c = new LBinaryChunk(testvm, fs.readFileSync("luac.out", "binary")); 630 var c = new LBinaryChunk(testvm, fs.readFileSync("luac.out", "binary"));
631 631
632 var default_environment = testvm.LValue({}); 632 var _G = testvm.LValue({});
633 633
634 // Standard library 634 // Standard library
635 635
636 var baselib = { 636 var baselib = {
637 print: function () 637 print: function ()
661 throw message; 661 throw message;
662 return [expr]; 662 return [expr];
663 } 663 }
664 }; 664 };
665 665
666 for(var name in baselib) 666 var math = {
667 { 667 ldexp: function (m, e)
668 default_environment.setIndex(testvm.LValue(name), testvm.LValue(baselib[name])); 668 {
669 } 669 sys.puts("ldexp(): m: "+sys.inspect(m)+" e: "+sys.inspect(e));
670 return [this.LValue(m.value*Math.pow(2, e.value))];
671 },
672 floor: function (x)
673 {
674 return [this.LValue(Math.floor(x.value))];
675 }
676 };
677
678 testvm.registerLib(_G, null, baselib);
679 testvm.registerLib(_G, "math", math);
670 680
671 // Metatable on environment to print out nil global accesses 681 // Metatable on environment to print out nil global accesses
672 var mt = testvm.LValue({}); 682 var mt = testvm.LValue({});
673 mt.setIndex( 683 mt.setIndex(
674 testvm.LValue("__index"), 684 testvm.LValue("__index"),
675 testvm.LValue(function (t, k) { sys.puts("Access of nil global: "+k); }) 685 testvm.LValue(function (t, k) { sys.puts("Access of nil global: "+k); })
676 ); 686 );
677 default_environment.setMetatable(mt); 687 _G.setMetatable(mt);
678 688
679 689
680 var f = new LFunction(testvm, c, default_environment); 690 var f = new LFunction(testvm, c, _G);
681 691
682 var ret = testvm.call(f); 692 var ret = testvm.call(f);
683 if(ret) 693 if(ret)
684 sys.puts("Returned: "+sys.inspect(ret)); 694 sys.puts("Returned: "+sys.inspect(ret));
685 } 695 }

mercurial