浏览代码

Lua: Simplify defArray declarations.

We don't need to specify the length of an anonymous table declarations,
since the table maxn will consider this in the total count.  This
function was introdced in 2006, so it should have broad enough
support.
Justin Donaldson 10 年之前
父节点
当前提交
81da433bd0
共有 4 个文件被更改,包括 6 次插入8 次删除
  1. 1 3
      genlua.ml
  2. 2 2
      std/lua/Boot.hx
  3. 1 1
      std/lua/TableTools.hx
  4. 2 2
      std/lua/_std/Array.hx

+ 1 - 3
genlua.ml

@@ -492,13 +492,11 @@ and gen_expr ctx e =
 		gen_call ctx e el false
 	| TArrayDecl el ->
 		spr ctx "lua.Boot.defArray({";
-		let count = ref 0 in
 		List.iteri (fun i e ->
-		    incr count;
 		    if (i == 0) then spr ctx "[0]="
 		    else spr ctx ", ";
 		    gen_value ctx e) el;
-		print ctx " }, %i)" !count;
+		print ctx " })";
 	| TThrow e ->
 		spr ctx "error(";
 		gen_value ctx e;

+ 2 - 2
std/lua/Boot.hx

@@ -96,8 +96,8 @@ class Boot {
 	}
 
 	@:keep
-	public static function defArray(tabobj: Dynamic, ?length : Int) : Array<Dynamic>  untyped {
-		tabobj.length = length != null ? length : lua.TableTools.getn(tabobj);
+	public static function defArray(tabobj: Dynamic) : Array<Dynamic>  untyped {
+		tabobj.length = lua.TableTools.maxn(tabobj) + 1;
 		setmetatable(tabobj, {
 			__index : __lua__("Array.prototype"),
 			__newindex : lua.Boot.arrayNewIndex

+ 1 - 1
std/lua/TableTools.hx

@@ -16,5 +16,5 @@ extern class TableTools {
 	@:overload(function<B>(table:Table<Int,B>):Void{})
 	public static function remove<B>(table:Table<Int,B>, ?pos:Int) : Void;
 
-	public static function getn<B>(table: Table<Int,B>) : Int;
+	public static function maxn<B>(table: Table<Int,B>) : Int;
 }

+ 2 - 2
std/lua/_std/Array.hx

@@ -25,7 +25,7 @@ class Array<T> {
 	public var length(default,null) : Int;
 
 	public function new() : Void  {
-		lua.Boot.defArray(this,0);
+		lua.Boot.defArray(this);
 	}
 	public function concat( a : Array<T> ) : Array<T> {
 		var ret = this.copy();
@@ -82,7 +82,7 @@ class Array<T> {
 			var a = this[i];
 			if (a == x){
 				lua.TableTools.remove(cast this, i+1);
-				length-=1;
+				this.length-=1;
 				return true;
 			}
 		}