@@ -61,20 +61,20 @@ FMT(label_u16)
6161#define  def (id , size , n_pop , n_push , f ) DEF (id , size , n_pop , n_push , f )
6262#endif 
6363
64- def (invalid , 1 , 0 , 0 , none ) /* never emitted */ 
64+ DEF (invalid , 1 , 0 , 0 , none ) /* never emitted */ 
6565
6666/* push values */ 
6767DEF ( push_i32 , 5 , 0 , 1 , i32 )
6868DEF ( push_const , 5 , 0 , 1 , const )
6969DEF ( fclosure , 5 , 0 , 1 , const ) /* must follow push_const */ 
7070DEF (push_atom_value , 5 , 0 , 1 , atom )
71+ DEF ( private_symbol , 5 , 0 , 1 , atom )
7172DEF ( undefined , 1 , 0 , 1 , none )
7273DEF ( null , 1 , 0 , 1 , none )
7374DEF ( push_this , 1 , 0 , 1 , none ) /* only used at the start of a function */ 
7475DEF ( push_false , 1 , 0 , 1 , none )
7576DEF ( push_true , 1 , 0 , 1 , none )
7677DEF ( object , 1 , 0 , 1 , none )
77- DEF ( var_object , 1 , 0 , 1 , none )
7878DEF ( special_object , 2 , 0 , 1 , u8 ) /* only used at the start of a function */ 
7979DEF ( rest , 3 , 0 , 1 , u16 ) /* only used at the start of a function */ 
8080
@@ -109,6 +109,8 @@ DEF( return, 1, 1, 0, none)
109109DEF ( return_undef , 1 , 0 , 0 , none )
110110DEF (check_ctor_return , 1 , 1 , 2 , none )
111111DEF ( check_ctor , 1 , 0 , 0 , none )
112+ DEF ( check_brand , 1 , 2 , 2 , none ) /* this_obj func -> this_obj func */ 
113+ DEF ( add_brand , 1 , 2 , 0 , none ) /* this_obj home_obj -> */ 
112114DEF ( return_async , 1 , 1 , 0 , none )
113115DEF ( throw , 1 , 1 , 0 , none )
114116DEF ( throw_var , 6 , 0 , 0 , atom_u8 )
@@ -135,6 +137,9 @@ DEF( define_func, 6, 1, 0, atom_u8)
135137DEF ( get_field , 5 , 1 , 1 , atom )
136138DEF ( get_field2 , 5 , 1 , 2 , atom )
137139DEF ( put_field , 5 , 2 , 0 , atom )
140+ DEF ( get_private_field , 1 , 2 , 1 , none ) /* obj prop -> value */ 
141+ DEF ( put_private_field , 1 , 3 , 0 , none ) /* obj value prop -> */ 
142+ DEF (define_private_field , 1 , 3 , 1 , none ) /* obj prop value -> obj */ 
138143DEF ( get_array_el , 1 , 2 , 1 , none )
139144DEF ( get_array_el2 , 1 , 2 , 2 , none ) /* obj prop -> obj value */ 
140145DEF ( put_array_el , 1 , 3 , 0 , none )
@@ -144,12 +149,13 @@ DEF( define_field, 5, 2, 1, atom)
144149DEF ( set_name , 5 , 1 , 1 , atom )
145150DEF (set_name_computed , 1 , 2 , 2 , none )
146151DEF ( set_proto , 1 , 2 , 1 , none )
152+ DEF (set_home_object , 1 , 2 , 2 , none )
147153DEF (define_array_el , 1 , 3 , 2 , none )
148154DEF ( append , 1 , 3 , 2 , none ) /* append enumerated object, update length */ 
149155DEF (copy_data_properties , 2 , 3 , 3 , u8 )
150156DEF ( define_method , 6 , 2 , 1 , atom_u8 )
151157DEF (define_method_computed , 2 , 3 , 1 , u8 ) /* must come after define_method */ 
152- DEF ( define_class , 2 , 2 , 2 , u8 )
158+ DEF ( define_class , 6 , 2 , 2 , atom_u8 )
153159
154160DEF ( get_loc , 3 , 0 , 1 , loc )
155161DEF ( put_loc , 3 , 1 , 0 , loc ) /* must come after get_loc */ 
@@ -161,34 +167,20 @@ DEF( get_var_ref, 3, 0, 1, var_ref)
161167DEF ( put_var_ref , 3 , 1 , 0 , var_ref ) /* must come after get_var_ref */ 
162168DEF ( set_var_ref , 3 , 1 , 1 , var_ref ) /* must come after put_var_ref */ 
163169DEF (set_loc_uninitialized , 3 , 0 , 0 , loc )
164- def (set_arg_valid_upto , 3 , 0 , 0 , arg ) /* emitted in phase 1, removed in phase 2 */ 
165170DEF ( get_loc_check , 3 , 0 , 1 , loc )
166171DEF ( put_loc_check , 3 , 1 , 0 , loc ) /* must come after get_loc_check */ 
167172DEF ( put_loc_check_init , 3 , 1 , 0 , loc )
168173DEF (get_var_ref_check , 3 , 0 , 1 , var_ref ) 
169174DEF (put_var_ref_check , 3 , 1 , 0 , var_ref ) /* must come after get_var_ref_check */ 
170175DEF (put_var_ref_check_init , 3 , 1 , 0 , var_ref )
171176DEF ( close_loc , 3 , 0 , 0 , loc )
172- def (close_var_object , 1 , 0 , 0 , none ) /* emitted in phase 1, removed in phase 2 */ 
173- def ( enter_scope , 3 , 0 , 0 , u16 ) /* emitted in phase 1, removed in phase 2 */ 
174- def ( leave_scope , 3 , 0 , 0 , u16 ) /* emitted in phase 1, removed in phase 2 */ 
175- 176177DEF ( if_false , 5 , 1 , 0 , label )
177178DEF ( if_true , 5 , 1 , 0 , label ) /* must come after if_false */ 
178179DEF ( goto , 5 , 0 , 0 , label ) /* must come after if_true */ 
179- def ( label , 5 , 0 , 0 , label ) /* emitted in phase 1, removed in phase 3 */ 
180180DEF ( catch , 5 , 0 , 1 , label )
181181DEF ( gosub , 5 , 0 , 0 , label ) /* used to execute the finally block */ 
182182DEF ( ret , 1 , 1 , 0 , none ) /* used to return from the finally block */ 
183183
184- def (scope_get_var_undef , 7 , 0 , 1 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
185- def ( scope_get_var , 7 , 0 , 1 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
186- def ( scope_put_var , 7 , 1 , 0 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
187- def (scope_delete_var , 7 , 0 , 1 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
188- def ( scope_make_ref , 11 , 0 , 2 , atom_label_u16 ) /* emitted in phase 1, removed in phase 2 */ 
189- def ( scope_get_ref , 7 , 0 , 2 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
190- def (scope_put_var_init , 7 , 0 , 2 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
191- 192184DEF ( to_object , 1 , 1 , 1 , none )
193185//DEF( to_string, 1, 1, 1, none) 
194186DEF ( to_propkey , 1 , 1 , 1 , none )
@@ -206,8 +198,6 @@ DEF( make_arg_ref, 7, 0, 2, atom_u16)
206198DEF (make_var_ref_ref , 7 , 0 , 2 , atom_u16 )
207199DEF ( make_var_ref , 5 , 0 , 2 , atom )
208200
209- def ( line_num , 5 , 0 , 0 , u32 ) /* emitted in phase 1, removed in phase 3 */ 
210- 211201DEF ( for_in_start , 1 , 1 , 1 , none )
212202DEF ( for_of_start , 1 , 1 , 3 , none )
213203DEF (for_await_of_start , 1 , 1 , 3 , none )
@@ -270,6 +260,31 @@ DEF( math_div, 1, 2, 1, none)
270260DEF ( math_mod , 1 , 2 , 1 , none )
271261DEF ( math_pow , 1 , 2 , 1 , none )
272262#endif 
263+ /* must be the last non short and non temporary opcode */ 
264+ DEF ( nop , 1 , 0 , 0 , none ) 
265+ 266+ /* temporary opcodes: never emitted in the final bytecode */ 
267+ 268+ def (set_arg_valid_upto , 3 , 0 , 0 , arg ) /* emitted in phase 1, removed in phase 2 */ 
269+ 270+ def (close_var_object , 1 , 0 , 0 , none ) /* emitted in phase 1, removed in phase 2 */ 
271+ def ( enter_scope , 3 , 0 , 0 , u16 ) /* emitted in phase 1, removed in phase 2 */ 
272+ def ( leave_scope , 3 , 0 , 0 , u16 ) /* emitted in phase 1, removed in phase 2 */ 
273+ 274+ def ( label , 5 , 0 , 0 , label ) /* emitted in phase 1, removed in phase 3 */ 
275+ 276+ def (scope_get_var_undef , 7 , 0 , 1 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
277+ def ( scope_get_var , 7 , 0 , 1 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
278+ def ( scope_put_var , 7 , 1 , 0 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
279+ def (scope_delete_var , 7 , 0 , 1 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
280+ def ( scope_make_ref , 11 , 0 , 2 , atom_label_u16 ) /* emitted in phase 1, removed in phase 2 */ 
281+ def ( scope_get_ref , 7 , 0 , 2 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
282+ def (scope_put_var_init , 7 , 0 , 2 , atom_u16 ) /* emitted in phase 1, removed in phase 2 */ 
283+ def (scope_get_private_field , 7 , 1 , 1 , atom_u16 ) /* obj -> value, emitted in phase 1, removed in phase 2 */ 
284+ def (scope_get_private_field2 , 7 , 1 , 2 , atom_u16 ) /* obj -> obj value, emitted in phase 1, removed in phase 2 */ 
285+ def (scope_put_private_field , 7 , 1 , 1 , atom_u16 ) /* obj value ->, emitted in phase 1, removed in phase 2 */ 
286+ 287+ def ( line_num , 5 , 0 , 0 , u32 ) /* emitted in phase 1, removed in phase 3 */ 
273288
274289#if  SHORT_OPCODES 
275290DEF ( push_minus1 , 1 , 0 , 1 , none_int )
@@ -345,8 +360,6 @@ DEF( is_null, 1, 1, 1, none)
345360DEF ( is_function , 1 , 1 , 1 , none )
346361#endif 
347362
348- DEF ( nop , 1 , 0 , 0 , none ) /* temporary use during code generation */ 
349- 350363#undef  DEF 
351364#undef  def 
352365#endif  /* DEF */ 
0 commit comments