Skip to content

Commit 55aed66

Browse files
committed
Handle getters/setters and restore removed test
1 parent 13e863b commit 55aed66

17 files changed

+321
-74
lines changed

Diff for: jscomp/core/lam_compile.ml

+9-25
Original file line numberDiff line numberDiff line change
@@ -1531,15 +1531,10 @@ and compile_prim (prim_info : Lam.prim_info)
15311531
check the arity of fn before wrapping it
15321532
we need mark something that such eta-conversion can not be simplified in some cases
15331533
*)
1534-
| {
1535-
primitive = Pjs_unsafe_downgrade { name = property; setter };
1536-
args = [ obj ];
1537-
} -> (
1538-
(*
1539-
either a getter {[ x #. height ]} or {[ x ## method_call ]}
1540-
*)
1541-
(* assert (not setter); *)
1542-
1534+
| { primitive = Pjs_unsafe_downgrade { name = property; setter=false };
1535+
args = [ obj ];
1536+
} -> (
1537+
(* getter {[ x #. height ]} *)
15431538
match
15441539
compile_lambda { lambda_cxt with continuation = NeedValue Not_tail } obj
15451540
with
@@ -1555,18 +1550,10 @@ and compile_prim (prim_info : Lam.prim_info)
15551550
in
15561551
Js_output.output_of_block_and_expression lambda_cxt.continuation
15571552
blocks ret)
1558-
| {
1559-
primitive = Pfull_apply;
1560-
args =
1561-
[
1562-
Lprim
1563-
{
1564-
primitive = Pjs_unsafe_downgrade { name = property; setter = true };
1565-
args = [ obj ];
1566-
};
1567-
setter_val;
1568-
];
1569-
} -> (
1553+
| { primitive = Pjs_unsafe_downgrade { name = property; setter = true };
1554+
args = [ obj; setter_val ];
1555+
} -> (
1556+
(* setter {[ x ## method_call ]} *)
15701557
let need_value_no_return_cxt =
15711558
{ lambda_cxt with continuation = NeedValue Not_tail }
15721559
in
@@ -1589,10 +1576,7 @@ and compile_prim (prim_info : Lam.prim_info)
15891576
| Some (obj_code, obj) ->
15901577
cont obj_block arg_block (Some obj_code)
15911578
(E.seq (E.assign (E.dot (E.var obj) property) value) E.unit)))
1592-
| {
1593-
primitive = Pfull_apply;
1594-
args = Lprim { primitive = Pjs_unsafe_downgrade { setter = true } } :: _;
1595-
} ->
1579+
| { primitive = Pjs_unsafe_downgrade _; args } ->
15961580
assert false
15971581
| { primitive = Pfull_apply | Pvoid_run; args; loc } -> (
15981582
(* 1. uncurried call should not do eta-conversion

Diff for: jscomp/core/lam_convert.ml

+18-13
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,24 @@ let convert (exports : Set_ident.t) (lam : Lambda.lambda) :
527527
match lam with
528528
| Lvar x -> Lam.var (Hash_ident.find_default alias_tbl x x)
529529
| Lconst x -> Lam.const (Lam_constant_convert.convert_constant x)
530+
| Lapply { ap_func = ((Lsend (name, obj, loc))); ap_args } when Ext_string.ends_with name Literals.setter_suffix ->
531+
let obj = convert_aux obj in
532+
let args = obj :: (Ext_list.map ap_args convert_aux) in
533+
let property =
534+
(String.sub name 0
535+
(String.length name - Literals.setter_suffix_len))
536+
in
537+
prim
538+
~primitive:(Pjs_unsafe_downgrade { name = property; setter=true })
539+
~args loc
540+
| Lsend (name, obj, loc) ->
541+
let obj = convert_aux obj in
542+
let args = [ obj ] in
543+
let setter = Ext_string.ends_with name Literals.setter_suffix in
544+
let _ = assert (not setter) in
545+
prim
546+
~primitive:(Pjs_unsafe_downgrade { name; setter })
547+
~args loc
530548
| Lapply { ap_func = fn; ap_args = args; ap_loc = loc; ap_inlined } ->
531549
(* we need do this eargly in case [aux fn] add some wrapper *)
532550
Lam.apply (convert_aux fn)
@@ -611,19 +629,6 @@ let convert (exports : Set_ident.t) (lam : Lambda.lambda) :
611629
| Lfor (id, from_, to_, dir, loop) ->
612630
Lam.for_ id (convert_aux from_) (convert_aux to_) dir (convert_aux loop)
613631
| Lassign (id, body) -> Lam.assign id (convert_aux body)
614-
| Lsend (name, obj, loc) ->
615-
let obj = convert_aux obj in
616-
let args = [ obj ] in
617-
let setter = Ext_string.ends_with name Literals.setter_suffix in
618-
let property =
619-
if setter then
620-
(String.sub name 0
621-
(String.length name - Literals.setter_suffix_len))
622-
else name
623-
in
624-
prim
625-
~primitive:(Pjs_unsafe_downgrade { name = property; setter })
626-
~args loc
627632
and convert_let (kind : Lam_compat.let_kind) id (e : Lambda.lambda) body :
628633
Lam.t =
629634
match (kind, e) with

Diff for: jscomp/gentype_tests/typescript-react-example/src/nested/Types.res.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/chain_code_test.js

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/class_type_ffi_test.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/gpr_2352_test.js

+1-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/hash_sugar_desugar.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/mario_game.js

+13-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/method_name_test.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/method_string_name.js

+1-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: jscomp/test/mutable_obj_test.js

+2-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)