Procházet zdrojové kódy

add @:impl metadata to @:fakeEnum pattern fields and ignore other fields when matching (closes #2250)

Simon Krajewski před 12 roky
rodič
revize
8ed327ca06
2 změnil soubory, kde provedl 2 přidání a 1 odebrání
  1. 1 1
      matcher.ml
  2. 1 0
      std/haxe/macro/Build.hx

+ 1 - 1
matcher.ml

@@ -757,7 +757,7 @@ let rec all_ctors mctx t =
 	| TAbstract({a_impl = Some c} as a,pl) when Meta.has Meta.FakeEnum a.a_meta ->
 		List.iter (fun cf ->
 			ignore(follow cf.cf_type);
-			if not (Meta.has Meta.Impl cf.cf_meta) then match cf.cf_expr with
+			if Meta.has Meta.Impl cf.cf_meta then match cf.cf_expr with
 				| Some {eexpr = TConst c | TCast ({eexpr = TConst c},None)} -> h := PMap.add (CConst c) cf.cf_pos !h
 				| _ -> ()
 		) c.cl_ordered_statics;

+ 1 - 0
std/haxe/macro/Build.hx

@@ -46,6 +46,7 @@ class Build {
 					if (e == null) Context.error("Value required", field.pos);
 					var tE = Context.typeof(e);
 					if (!Context.unify(tE, tThis)) Context.error('${tE.toString()} should be ${tThis.toString()}', e.pos);
+					field.meta.push({name: ":impl", params: [], pos: field.pos});
 					field.kind = FVar(ctA, macro cast $e);
 				case _:
 			}