Skip to content

Commit

Permalink
[js] Fix enums parameters generation to make it compatible with advan…
Browse files Browse the repository at this point in the history
…ced JS minification tools (HaxeFoundation#11328)

* [js] don't use enum parameters names in the generated code

* cleanup

---------

Co-authored-by: a.v.kuzmenko <[email protected]>
  • Loading branch information
2 people authored and 0b1kn00b committed Jan 25, 2024
1 parent 6f743bc commit 2f62527
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 11 deletions.
4 changes: 2 additions & 2 deletions src/generators/genjs.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 5 additions & 2 deletions std/js/Boot.hx
Original file line number Diff line number Diff line change
Expand Up @@ -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>)) __string_rec(o[p], s)].join(",") + ")";
var params:Array<Any> = o.__params__();
for (i in 0...params.length)
params[i] = __string_rec(params[i], s);
return n + "(" + params.join(",") + ")";
} else {
return n;
}
Expand Down
12 changes: 5 additions & 7 deletions std/js/_std/Type.hx
Original file line number Diff line number Diff line change
Expand Up @@ -289,10 +289,10 @@ enum ValueType {
#else
if (a._hx_index != b._hx_index)
return false;
var enm = $hxEnums[e];
var params:Array<String> = enm.__constructs__[a._hx_index].__params__;
for (f in params) {
if (!enumEq(a[f], b[f])) {
var aparams:Array<Any> = a.__params__();
var bparams:Array<Any> = b.__params__();
for (i in 0...aparams.length) {
if (!enumEq(aparams[i], bparams[i])) {
return false;
}
}
Expand All @@ -318,9 +318,7 @@ enum ValueType {
#else
public static function enumParameters(e:EnumValue):Array<Dynamic>
untyped {
var enm:Enum<Dynamic> = $hxEnums[e.__enum__];
var params:Array<String> = enm.__constructs__[e._hx_index].__params__;
return params != null ? [for (p in params) e[p]] : [];
return e.__params__ != null ? e.__params__() : [];
}
#end

Expand Down

0 comments on commit 2f62527

Please sign in to comment.