diff --git a/src/generators/genjs.ml b/src/generators/genjs.ml index a0e07f938f9..37ef20c887c 100644 --- a/src/generators/genjs.ml +++ b/src/generators/genjs.ml @@ -1664,11 +1664,11 @@ let generate_enum ctx e = let sargs = String.concat "," (List.map (fun (n,_,_) -> ident n) args) in begin if as_objects then begin let sfields = String.concat "," (List.map (fun (n,_,_) -> (ident n) ^ ":" ^ (ident n) ) args) in - let sparams = String.concat "," (List.map (fun (n,_,_) -> "\"" ^ (ident n) ^ "\"" ) args) in + let sparams = String.concat "," (List.map (fun (n,_,_) -> "this." ^ (ident n) ) args) in print ctx "($_=function(%s) { return {_hx_index:%d,%s,__enum__:\"%s\"" sargs f.ef_index sfields dotp; if has_enum_feature then spr ctx ",toString:$estr"; - print ctx "}; },$_._hx_name=\"%s\",$_.__params__ = [%s],$_)" f.ef_name sparams + print ctx ",__params__:function(){ return [%s];}}; },$_._hx_name=\"%s\",$_)" sparams f.ef_name end else begin print ctx "function(%s) { var $x = [\"%s\",%d,%s]; $x.__enum__ = %s;" sargs f.ef_name f.ef_index sargs p; if has_enum_feature then diff --git a/std/js/Boot.hx b/std/js/Boot.hx index cef0ba120c3..6b299bcbadd 100644 --- a/std/js/Boot.hx +++ b/std/js/Boot.hx @@ -71,9 +71,12 @@ class Boot { var e = $hxEnums[o.__enum__]; var con = e.__constructs__[o._hx_index]; var n = con._hx_name; - if (con.__params__) { + if (o.__params__) { s += "\t"; - return n + "(" + [for (p in (con.__params__ : Array)) __string_rec(o[p], s)].join(",") + ")"; + var params:Array = o.__params__(); + for (i in 0...params.length) + params[i] = __string_rec(params[i], s); + return n + "(" + params.join(",") + ")"; } else { return n; } diff --git a/std/js/_std/Type.hx b/std/js/_std/Type.hx index 695bba203b3..39b2096ea3f 100644 --- a/std/js/_std/Type.hx +++ b/std/js/_std/Type.hx @@ -289,10 +289,10 @@ enum ValueType { #else if (a._hx_index != b._hx_index) return false; - var enm = $hxEnums[e]; - var params:Array = enm.__constructs__[a._hx_index].__params__; - for (f in params) { - if (!enumEq(a[f], b[f])) { + var aparams:Array = a.__params__(); + var bparams:Array = b.__params__(); + for (i in 0...aparams.length) { + if (!enumEq(aparams[i], bparams[i])) { return false; } } @@ -318,9 +318,7 @@ enum ValueType { #else public static function enumParameters(e:EnumValue):Array untyped { - var enm:Enum = $hxEnums[e.__enum__]; - var params:Array = enm.__constructs__[e._hx_index].__params__; - return params != null ? [for (p in params) e[p]] : []; + return e.__params__ != null ? e.__params__() : []; } #end