Browse Source

Revert @:forward.accessOnAbstract, hack instead

see #11527
Simon Krajewski 1 year ago
parent
commit
b3d3a2ff91
3 changed files with 9 additions and 22 deletions
  1. 0 6
      src-json/meta.json
  2. 8 13
      src/typing/fields.ml
  3. 1 3
      std/cs/Pointer.hx

+ 0 - 6
src-json/meta.json

@@ -395,12 +395,6 @@
 		"targets": ["TAbstract"],
 		"targets": ["TAbstract"],
 		"links": ["https://haxe.org/manual/types-abstract-forward.html"]
 		"links": ["https://haxe.org/manual/types-abstract-forward.html"]
 	},
 	},
-	{
-		"name": "ForwardAccessOnAbstract",
-		"metadata": ":forward.accessOnAbstract",
-		"doc": "Generates @:forward field access on the abstract itself instead of the underlying type.",
-		"targets": ["TAbstract"]
-	},
 	{
 	{
 		"name": "ForwardNew",
 		"name": "ForwardNew",
 		"metadata": ":forward.new",
 		"metadata": ":forward.new",

+ 8 - 13
src/typing/fields.ml

@@ -270,6 +270,12 @@ let type_field cfg ctx e i p mode (with_type : WithType.t) =
 		| None -> raise Not_found
 		| None -> raise Not_found
 	in
 	in
 	let type_field_by_et f e t =
 	let type_field_by_et f e t =
+		let e = match ctx.com.platform with
+			| Cs ->
+				{e with etype = t}
+			| _ ->
+				mk (TCast(e,None)) t e.epos
+		in
 		f e (follow_without_type t)
 		f e (follow_without_type t)
 	in
 	in
 	let type_field_by_e f e =
 	let type_field_by_e f e =
@@ -291,15 +297,7 @@ let type_field cfg ctx e i p mode (with_type : WithType.t) =
 		type_field_by_forward f Meta.ForwardStatics a
 		type_field_by_forward f Meta.ForwardStatics a
 	in
 	in
 	let type_field_by_forward_member f e a tl =
 	let type_field_by_forward_member f e a tl =
-		let f () =
-			let t = Abstract.get_underlying_type ~return_first:true a tl in
-			let e = if Meta.has Meta.ForwardAccessOnAbstract a.a_meta then
-				e
-			else
-				mk (TCast(e,None)) t e.epos
-			in
-			type_field_by_et f e t
-		in
+		let f () = type_field_by_et f e (Abstract.get_underlying_type ~return_first:true a tl) in
 		type_field_by_forward f Meta.Forward a
 		type_field_by_forward f Meta.Forward a
 	in
 	in
 	let type_field_by_typedef f e td tl =
 	let type_field_by_typedef f e td tl =
@@ -382,10 +380,7 @@ let type_field cfg ctx e i p mode (with_type : WithType.t) =
 					field_access f FHAnon
 					field_access f FHAnon
 				)
 				)
 			| CTypes tl ->
 			| CTypes tl ->
-				type_field_by_list (fun (t,_) ->
-					let e = mk (TCast(e,None)) t e.epos in
-					type_field_by_et type_field_by_type e t
-				) tl
+				type_field_by_list (fun (t,_) -> type_field_by_et type_field_by_type e t) tl
 			| CUnknown ->
 			| CUnknown ->
 				if not (List.exists (fun (m,_) -> m == r) ctx.monomorphs.perfunction) && not (ctx.untyped && ctx.com.platform = Neko) then
 				if not (List.exists (fun (m,_) -> m == r) ctx.monomorphs.perfunction) && not (ctx.untyped && ctx.com.platform = Neko) then
 					ctx.monomorphs.perfunction <- (r,p) :: ctx.monomorphs.perfunction;
 					ctx.monomorphs.perfunction <- (r,p) :: ctx.monomorphs.perfunction;

+ 1 - 3
std/cs/Pointer.hx

@@ -129,7 +129,5 @@ import cs.StdTypes.Int64;
 	@:arrayAccess public static function setp<T>(p:Pointer<T>, at:Int64, val:T):T;
 	@:arrayAccess public static function setp<T>(p:Pointer<T>, at:Int64, val:T):T;
 }
 }
 
 
-@:forward
-@:forward.accessOnAbstract
-abstract PointerAccess<T>(T) {}
+@:forward abstract PointerAccess<T>(T) {}
 #end
 #end