Skip to content

Commit

Permalink
Revert @:forward.accessOnAbstract, hack instead
Browse files Browse the repository at this point in the history
see #11527
  • Loading branch information
Simn authored and kLabz committed Mar 4, 2024
1 parent bafb5fe commit 9f8b8a2
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 22 deletions.
6 changes: 0 additions & 6 deletions src-json/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -394,12 +394,6 @@
"targets": ["TAbstract"],
"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",
"metadata": ":forward.new",
Expand Down
21 changes: 8 additions & 13 deletions src/typing/fields.ml
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,12 @@ let type_field cfg ctx e i p mode (with_type : WithType.t) =
| None -> raise Not_found
in
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)
in
let type_field_by_e f e =
Expand All @@ -293,15 +299,7 @@ let type_field cfg ctx e i p mode (with_type : WithType.t) =
type_field_by_forward f Meta.ForwardStatics a
in
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
in
let type_field_by_typedef f e td tl =
Expand Down Expand Up @@ -380,10 +378,7 @@ let type_field cfg ctx e i p mode (with_type : WithType.t) =
field_access f FHAnon
)
| 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 ->
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;
Expand Down
4 changes: 1 addition & 3 deletions std/cs/Pointer.hx
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,5 @@ import cs.StdTypes.Int64;
@: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

0 comments on commit 9f8b8a2

Please sign in to comment.