Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 2f78d14

Browse files
committed
Handle sclass
1 parent c59c585 commit 2f78d14

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

lib/syntax_tree/visitor/compiler.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,6 +1876,19 @@ def visit_rest_param(node)
18761876
current_iseq.argument_size += 1
18771877
end
18781878

1879+
def visit_sclass(node)
1880+
visit(node.target)
1881+
builder.putnil
1882+
1883+
singleton_iseq =
1884+
with_instruction_sequence(:class, "singleton class", current_iseq, node) do
1885+
visit(node.bodystmt)
1886+
builder.leave
1887+
end
1888+
1889+
builder.defineclass(:singletonclass, singleton_iseq, VM_DEFINECLASS_TYPE_SINGLETON_CLASS)
1890+
end
1891+
18791892
def visit_statements(node)
18801893
statements =
18811894
node.body.select do |statement|

test/compiler_test.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,8 @@ class CompilerTest < Minitest::Test
378378
"class ::Foo::Bar < Baz; end",
379379
"class Foo; class Bar < Baz; end; end",
380380
"class Foo < baz; end",
381+
"class << Object; end",
382+
"class << ::String; end",
381383
# Block
382384
"foo do end",
383385
"foo {}",

0 commit comments

Comments
 (0)