Skip to content

Commit

Permalink
transform abstract fields that are returned from a build macro (see H…
Browse files Browse the repository at this point in the history
  • Loading branch information
Simn committed Jun 25, 2015
1 parent 6d5a836 commit 274a71c
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions typeload.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1889,15 +1889,24 @@ let init_class ctx c p context_init herits fields =
build_module_def ctx (TClassDecl c) c.cl_meta get_fields context_init (fun (e,p) ->
match e with
| EVars [_,Some (CTAnonymous f),None] ->
List.iter (fun f ->
let f = List.map (fun f ->
let f = match abstract with
| Some a ->
let a_t = TExprToExpr.convert_type (TAbstract(a,List.map snd a.a_params)) in
let this_t = TExprToExpr.convert_type a.a_this in
transform_abstract_field ctx this_t a_t a f
| None ->
f
in
if List.mem AMacro f.cff_access then
(match ctx.g.macros with
| Some (_,mctx) when Hashtbl.mem mctx.g.types_module c.cl_path ->
(* assume that if we had already a macro with the same name, it has not been changed during the @:build operation *)
if not (List.exists (fun f2 -> f2.cff_name = f.cff_name && List.mem AMacro f2.cff_access) (!fields)) then
error "Class build macro cannot return a macro function when the class has already been compiled into the macro context" p
| _ -> ())
) f;
| _ -> ());
f
) f in
fields := f
| _ -> error "Class build macro must return a single variable with anonymous fields" p
);
Expand Down

0 comments on commit 274a71c

Please sign in to comment.