Browse Source

[hl] Revert use hl.NativeArray for Vector #11568 (#11766)

* Revert "[hl] use hl.NativeArray for Vector (#11568)"

This reverts commit 3b050f0a108d47c71622a70e330ad38c1ef43d15.

* [tests] test change can remains
Yuxiao Mao 10 tháng trước cách đây
mục cha
commit
7f3dd53680

+ 1 - 1
src/generators/genhl.ml

@@ -2034,7 +2034,7 @@ and eval_expr ctx e =
 			hold ctx arr;
 			let pos = eval_to ctx pos HI32 in
 			free ctx arr;
-			let r = if is_array_type at then alloc_tmp ctx HDyn else alloc_tmp ctx at in
+			let r = alloc_tmp ctx at in
 			op ctx (OGetArray (r, arr, pos));
 			cast_to ctx r (to_type ctx e.etype) e.epos
 		| "$aset", [a; pos; value] ->

+ 20 - 18
std/haxe/ds/Vector.hx

@@ -27,13 +27,18 @@ using cpp.NativeArray;
 #end
 
 private typedef VectorData<T> =
-	#if flash10 flash.Vector<T>
-	#elseif neko neko.NativeArray<T>
-	#elseif java java.NativeArray<T>
-	#elseif lua lua.Table<Int, T>
-	#elseif eval eval.Vector<T>
-	#elseif hl hl.NativeArray<T>
-	#else Array<T>
+	#if flash10
+	flash.Vector<T>
+	#elseif neko
+	neko.NativeArray<T>
+	#elseif java
+	java.NativeArray<T>
+	#elseif lua
+	lua.Table<Int, T>
+	#elseif eval
+	eval.Vector<T>
+	#else
+	Array<T>
 	#end;
 
 /**
@@ -71,8 +76,6 @@ abstract Vector<T>(VectorData<T>) {
 		this = untyped __lua_table__({length: length});
 		#elseif eval
 		this = new eval.Vector(length);
-		#elseif hl
-		this = new hl.NativeArray<T>(length);
 		#else
 		this = [];
 		untyped this.length = length;
@@ -92,6 +95,7 @@ abstract Vector<T>(VectorData<T>) {
 		#elseif python
 		this = python.Syntax.code("([{0}]*{1})", defaultValue, length);
 		#else
+
 		#if flash10
 		this = new flash.Vector<T>(length, true);
 		#elseif neko
@@ -104,13 +108,12 @@ abstract Vector<T>(VectorData<T>) {
 		this = untyped __lua_table__({length: length});
 		#elseif eval
 		this = new eval.Vector(length);
-		#elseif hl
-		this = new hl.NativeArray<T>(length);
 		#else
 		this = [];
 		untyped this.length = length;
 		#end
 		fill(defaultValue);
+
 		#end
 	}
 
@@ -171,8 +174,7 @@ abstract Vector<T>(VectorData<T>) {
 		Sets all `length` elements of `this` Vector to `value`.
 	**/
 	public inline function fill(value:T):Void
-		for (i in 0...length)
-			this[i] = value;
+		for (i in 0...length) this[i] = value;
 
 	/**
 		Copies `length` of elements from `src` Vector, beginning at `srcPos` to
@@ -181,12 +183,12 @@ abstract Vector<T>(VectorData<T>) {
 		The results are unspecified if `length` results in out-of-bounds access,
 		or if `src` or `dest` are null
 	**/
-	public static #if (java || neko || cpp || eval || hl) inline #end function blit<T>(src:Vector<T>, srcPos:Int, dest:Vector<T>, destPos:Int, len:Int):Void {
+	public static #if (java || neko || cpp || eval) inline #end function blit<T>(src:Vector<T>, srcPos:Int, dest:Vector<T>, destPos:Int, len:Int):Void {
 		#if neko
 		untyped __dollar__ablit(dest, destPos, src, srcPos, len);
 		#elseif java
 		java.lang.System.arraycopy(src, srcPos, dest, destPos, len);
-		#elseif (cpp || hl)
+		#elseif cpp
 		dest.toData().blit(destPos, src.toData(), srcPos, len);
 		#elseif eval
 		src.toData().blit(srcPos, dest.toData(), destPos, len);
@@ -220,7 +222,7 @@ abstract Vector<T>(VectorData<T>) {
 	/**
 		Creates a new Array, copy the content from the Vector to it, and returns it.
 	**/
-	public #if (flash || cpp || js || java || eval || hl) inline #end function toArray():Array<T> {
+	public #if (flash || cpp || js || java || eval) inline #end function toArray():Array<T> {
 		#if cpp
 		return this.copy();
 		#elseif python
@@ -232,7 +234,7 @@ abstract Vector<T>(VectorData<T>) {
 		#else
 		var a = new Array();
 		var len = length;
-		#if (neko || hl)
+		#if (neko)
 		// prealloc good size
 		if (len > 0)
 			a[len - 1] = get(0);
@@ -375,7 +377,7 @@ abstract Vector<T>(VectorData<T>) {
 		If `f` is null, the result is unspecified.
 	**/
 	public inline function sort(f:T->T->Int):Void {
-		#if (neko || java || eval || hl)
+		#if (neko || java || eval)
 		throw "not yet supported";
 		#elseif lua
 		haxe.ds.ArraySort.sort(cast this, f);

+ 0 - 13
std/hl/NativeArray.hx

@@ -99,17 +99,4 @@ package hl;
 	public inline function blit(pos:Int, src:NativeArray<T>, srcPos:Int, srcLen:Int):Void {
 		real_blit(cast this, pos, cast src, srcPos, srcLen);
 	}
-
-	#if (hl_ver >= version("1.15.0"))
-	@:hlNative("std", "array_bytes") static function get_bytes(a:NativeArray<Any>):Bytes {
-		return null;
-	}
-
-	/**
-		Get the bytes reference from an native array (no copy occurs)
-	**/
-	public inline function getBytes():Bytes {
-		return get_bytes(cast this);
-	}
-	#end
 }

+ 99 - 0
std/hl/_std/haxe/ds/Vector.hx

@@ -0,0 +1,99 @@
+/*
+ * Copyright (C)2005-2019 Haxe Foundation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+package haxe.ds;
+
+private typedef VectorData<T> = Array<T>
+
+@:coreApi
+abstract Vector<T>(VectorData<T>) {
+	extern overload public inline function new(length:Int) {
+		this = [];
+		if (length > 0)
+			this[length - 1] = @:nullSafety(Off) cast null;
+	}
+
+	extern overload public inline function new(length:Int, defaultValue:T):Vector<T> {
+		this = [
+			for (i in 0...length) defaultValue
+		];
+	}
+
+	@:op([]) public inline function get(index:Int):T {
+		return this[index];
+	}
+
+	@:op([]) public inline function set(index:Int, val:T):T {
+		return this[index] = val;
+	}
+
+	public var length(get, never):Int;
+
+	inline function get_length():Int {
+		return this.length;
+	}
+
+	public inline function fill(value:T):Void
+		for (i in 0...length) this[i] = value;
+
+	public static inline function blit<T>(src:Vector<T>, srcPos:Int, dest:Vector<T>, destPos:Int, len:Int):Void {
+		(cast dest : hl.types.ArrayBase.ArrayAccess).blit(destPos, (cast src : hl.types.ArrayBase.ArrayAccess), srcPos, len);
+	}
+
+	public inline function toArray():Array<T> {
+		return this.copy();
+	}
+
+	public inline function toData():VectorData<T>
+		return this;
+
+	static public inline function fromData<T>(data:VectorData<T>):Vector<T>
+		return cast data;
+
+	static public inline function fromArrayCopy<T>(array:Array<T>):Vector<T> {
+		return cast array.copy();
+	}
+
+	public inline function copy<T>():Vector<T> {
+		return cast this.copy();
+	}
+
+	public inline function join<T>(sep:String):String {
+		return this.join(sep);
+	}
+
+	public inline function sort(f:T->T->Int):Void {
+		this.sort(f);
+	}
+
+	public inline function map<S>(f:T->S):Vector<S> {
+		var length = length;
+		var r = new Vector<S>(length);
+		var i = 0;
+		var len = length;
+		for (i in 0...len) {
+			var v = f(get(i));
+			r.set(i, v);
+		}
+		return r;
+	}
+}

+ 2 - 2
tests/unit/src/unitstd/haxe/ds/Vector.unit.hx

@@ -27,7 +27,7 @@ vec.get(2) == vNullBool;
 // fromArray
 var arr = ["1", "2", "3"];
 var vec:haxe.ds.Vector<String> = haxe.ds.Vector.fromArrayCopy(arr);
-#if (!flash && !neko && !jvm && !lua && !eval && !php && !hl)
+#if (!flash && !neko && !jvm && !lua && !eval && !php)
 arr != vec.toData();
 #end
 vec.length == 3;
@@ -192,7 +192,7 @@ vec2[1] == "value: 13";
 
 // sort
 
-#if !(neko || jvm || eval || hl)
+#if !(neko || jvm || eval)
 var vec = new haxe.ds.Vector(4);
 vec[0] = 99;
 vec[1] = 101;