New Lua<->native function interface, simpler. Added type() to baselib.

Fri, 19 Nov 2010 16:04:30 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Fri, 19 Nov 2010 16:04:30 +0000
changeset 74
a4a6adee1459
parent 73
6b43d68abc94
child 75
aaecd573ee30

New Lua<->native function interface, simpler. Added type() to baselib.

lvm.js file | annotate | diff | comparison | revisions
--- a/lvm.js	Fri Nov 19 16:02:55 2010 +0000
+++ b/lvm.js	Fri Nov 19 16:04:30 2010 +0000
@@ -36,10 +36,7 @@
 	call: function (args)
 	{
 		var f = this.precall();
-		if(typeof(f) == "function")
-			var ret = f.apply(this.vm, args?args.map(function (a) { return a.value; }):[]);
-		else
-			var ret = this.vm.call(f);
+		var ret = this.vm.call(f, args);
 		if(typeof(ret) == "undefined")
 			ret = [];
 		return ret;
@@ -567,20 +564,26 @@
 // Standard library
 
 var baselib = {
-	print: function (args)
+	print: function ()
 	{
+		var args = Array.prototype.slice.call(arguments);
 		sys.print(args[0].toString());
 		for(var i = 1; i<args.length; i++)
 			sys.print("\t"+args[i].toString());
 		sys.print("\n");
-		return 0;
+		return [];
 	},
-	setmetatable: function (args)
+	setmetatable: function (table, metatable)
 	{
-		if(args.length!=2)
-			throw "setmetatable expects 2 arguments, got "+args.length;
-		args[0].setMetatable(args[1]);
-		return 1;
+		if(arguments.length!=2)
+			throw "setmetatable expects 2 arguments, got "+arguments.length;
+
+		table.setMetatable(metatable);
+		return [table];
+	},
+	type: function (o)
+	{
+		return [o.type];
 	}
 };
 

mercurial