Browse Source

- copy :access and :allow metadata to abstract implementation class
- use abstract path instead of implementation class path when checking acl
(closes ##2166)

Simon Krajewski 12 years ago
parent
commit
1f3914cee5
2 changed files with 4 additions and 3 deletions
  1. 1 1
      typeload.ml
  2. 3 2
      typer.ml

+ 1 - 1
typeload.ml

@@ -175,7 +175,7 @@ let make_module ctx mpath file tdecls loadp =
 				(match !decls with
 				(match !decls with
 				| (TClassDecl c,_) :: _ ->
 				| (TClassDecl c,_) :: _ ->
 					List.iter (fun m -> match m with
 					List.iter (fun m -> match m with
-						| (Meta.Build,_,_) | (Meta.CoreApi,_,_) ->
+						| ((Meta.Build | Meta.CoreApi | Meta.Allow | Meta.Access),_,_) ->
 							c.cl_meta <- m :: c.cl_meta;
 							c.cl_meta <- m :: c.cl_meta;
 						| (Meta.FakeEnum,_,_) ->
 						| (Meta.FakeEnum,_,_) ->
 							c.cl_meta <- (Meta.Build,[ECall((EField((EField((EField((EConst(Ident "haxe"),p),"macro"),p),"Build"),p),"buildFakeEnum"),p),[]),p],p) :: c.cl_meta;
 							c.cl_meta <- (Meta.Build,[ECall((EField((EField((EField((EConst(Ident "haxe"),p),"macro"),p),"Build"),p),"buildFakeEnum"),p),[]),p],p) :: c.cl_meta;

+ 3 - 2
typer.ml

@@ -205,8 +205,9 @@ let rec can_access ctx c cf stat =
 		true
 		true
 	else
 	else
 	(* has metadata path *)
 	(* has metadata path *)
-	let make_path c f =
-		fst c.cl_path @ [snd c.cl_path; f.cf_name]
+	let make_path c f = match c.cl_kind with
+		| KAbstractImpl a -> fst a.a_path @ [snd a.a_path; f.cf_name]
+		| _ -> fst c.cl_path @ [snd c.cl_path; f.cf_name]
 	in
 	in
 	let rec expr_path acc e =
 	let rec expr_path acc e =
 		match fst e with
 		match fst e with