diff options
| author | Jemma Issroff <jemmaissroff@gmail.com> | 2023-10-16 12:00:01 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-16 12:00:01 -0700 |
| commit | 10d88ec9c3bbc93b83b2ea5e93cb781fbf42f0be (patch) | |
| tree | cf2cb614de7ad2a92fe4151392a186638a9962f8 | |
| parent | 8f33d801c21c01fb15abed6cabd4d4b289554de3 (diff) | |
[PRISM] Compile AliasGlobalVariableNode (#8675)
| -rw-r--r-- | prism_compile.c | 19 | ||||
| -rw-r--r-- | test/ruby/test_compile_prism.rb | 8 |
2 files changed, 27 insertions, 0 deletions
diff --git a/prism_compile.c b/prism_compile.c index 3c9451449a..b2173608b4 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -161,6 +161,12 @@ parse_string_symbol(pm_string_t *string) return parse_symbol(start, start + pm_string_length(string)); } +static inline ID +parse_location_symbol(pm_location_t *location) +{ + return parse_symbol(location->start, location->end); +} + static int pm_optimizable_range_item_p(pm_node_t *node) { @@ -848,6 +854,19 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, NODE dummy_line_node = generate_dummy_line_node(lineno, lineno); switch (PM_NODE_TYPE(node)) { + case PM_ALIAS_GLOBAL_VARIABLE_NODE: { + pm_alias_global_variable_node_t *alias_node = (pm_alias_global_variable_node_t *) node; + + ADD_INSN1(ret, &dummy_line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + + ADD_INSN1(ret, &dummy_line_node, putobject, ID2SYM(parse_location_symbol(&alias_node->new_name->location))); + ADD_INSN1(ret, &dummy_line_node, putobject, ID2SYM(parse_location_symbol(&alias_node->old_name->location))); + + ADD_SEND(ret, &dummy_line_node, id_core_set_variable_alias, INT2FIX(2)); + + PM_POP_IF_POPPED; + return; + } case PM_ALIAS_METHOD_NODE: { pm_alias_method_node_t *alias_node = (pm_alias_method_node_t *) node; diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb index 512a89f59e..dc2a82eb48 100644 --- a/test/ruby/test_compile_prism.rb +++ b/test/ruby/test_compile_prism.rb @@ -401,6 +401,14 @@ module Prism # Methods / parameters # ############################################################################ + def test_AliasGlobalVariableNode + test_prism_eval("alias $prism_foo $prism_bar") + end + + def test_AliasMethodNode + test_prism_eval("alias :prism_a :to_s") + end + def test_UndefNode test_prism_eval("def prism_undef_node_1; end; undef prism_undef_node_1") test_prism_eval(<<-HERE |
