Skip to content

Commit 77d8bd2

Browse files
committed
Support more node types in compilation of PM_DEFINED_NODE
1 parent 271cdb3 commit 77d8bd2

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

prism_compile.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3877,6 +3877,8 @@ pm_compile_defined_expr0(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_l
38773877
pm_compile_defined_expr0(iseq, cast->value, node_location, ret, popped, scope_node, in_condition, lfinish, false);
38783878
return;
38793879
}
3880+
case PM_ALIAS_GLOBAL_VARIABLE_NODE:
3881+
case PM_ALIAS_METHOD_NODE:
38803882
case PM_AND_NODE:
38813883
case PM_BEGIN_NODE:
38823884
case PM_BREAK_NODE:
@@ -3885,26 +3887,32 @@ pm_compile_defined_expr0(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_l
38853887
case PM_CLASS_NODE:
38863888
case PM_DEF_NODE:
38873889
case PM_DEFINED_NODE:
3890+
case PM_FLIP_FLOP_NODE:
38883891
case PM_FLOAT_NODE:
38893892
case PM_FOR_NODE:
3893+
case PM_FORWARDING_ARGUMENTS_NODE:
38903894
case PM_IF_NODE:
38913895
case PM_IMAGINARY_NODE:
38923896
case PM_INTEGER_NODE:
3897+
case PM_INTERPOLATED_MATCH_LAST_LINE_NODE:
38933898
case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE:
38943899
case PM_INTERPOLATED_STRING_NODE:
38953900
case PM_INTERPOLATED_SYMBOL_NODE:
38963901
case PM_INTERPOLATED_X_STRING_NODE:
38973902
case PM_LAMBDA_NODE:
3903+
case PM_MATCH_LAST_LINE_NODE:
38983904
case PM_MATCH_PREDICATE_NODE:
38993905
case PM_MATCH_REQUIRED_NODE:
39003906
case PM_MATCH_WRITE_NODE:
39013907
case PM_MODULE_NODE:
39023908
case PM_NEXT_NODE:
39033909
case PM_OR_NODE:
3910+
case PM_POST_EXECUTION_NODE:
39043911
case PM_RANGE_NODE:
39053912
case PM_RATIONAL_NODE:
39063913
case PM_REDO_NODE:
39073914
case PM_REGULAR_EXPRESSION_NODE:
3915+
case PM_RESCUE_MODIFIER_NODE:
39083916
case PM_RETRY_NODE:
39093917
case PM_RETURN_NODE:
39103918
case PM_SINGLETON_CLASS_NODE:
@@ -3913,12 +3921,14 @@ pm_compile_defined_expr0(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_l
39133921
case PM_SOURCE_LINE_NODE:
39143922
case PM_STRING_NODE:
39153923
case PM_SYMBOL_NODE:
3924+
case PM_UNDEF_NODE:
39163925
case PM_UNLESS_NODE:
39173926
case PM_UNTIL_NODE:
39183927
case PM_WHILE_NODE:
39193928
case PM_X_STRING_NODE:
39203929
dtype = DEFINED_EXPR;
39213930
break;
3931+
case PM_IT_LOCAL_VARIABLE_READ_NODE:
39223932
case PM_LOCAL_VARIABLE_READ_NODE:
39233933
dtype = DEFINED_LVAR;
39243934
break;
@@ -4069,6 +4079,8 @@ pm_compile_defined_expr0(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_l
40694079
case PM_CONSTANT_PATH_OR_WRITE_NODE:
40704080
case PM_CONSTANT_PATH_WRITE_NODE:
40714081

4082+
case PM_SHAREABLE_CONSTANT_NODE:
4083+
40724084
case PM_GLOBAL_VARIABLE_WRITE_NODE:
40734085
case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE:
40744086
case PM_GLOBAL_VARIABLE_AND_WRITE_NODE:

test/ruby/test_compile_prism.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,17 @@ def self.m1; defined?(return) end
266266
assert_prism_eval("defined?(while a != 1; end)")
267267
assert_prism_eval("defined?(until a == 1; end)")
268268
assert_prism_eval("defined?(unless true; 1; end)")
269+
assert_prism_eval("defined?((alias a b))")
270+
assert_prism_eval("defined?((alias $a $b))")
271+
assert_prism_eval("defined?(!(a..b))")
272+
assert_prism_eval("def f(...); defined?(f(...)); end")
273+
assert_prism_eval("defined?(!/foo/)")
274+
assert_prism_eval('defined?(!/#{1}/)')
275+
assert_prism_eval("defined?((END{}))")
276+
assert_prism_eval("defined?((a rescue b))")
277+
assert_prism_eval("# shareable-constant-value: experimental_everything\ndefined?(A=1)")
278+
assert_prism_eval("defined?((undef a))")
279+
assert_prism_eval("tap { defined?(it) }")
269280
end
270281

271282
def test_GlobalVariableReadNode

0 commit comments

Comments
 (0)