Skip to content

Commit

Permalink
Showing 2 changed files with 19 additions and 15 deletions.
19 changes: 19 additions & 0 deletions spec/compiler/type_inference/const_spec.cr
Original file line number Diff line number Diff line change
@@ -284,4 +284,23 @@ describe "Type inference: const" do
),
"recursive dependency of class var Foo::@@a: Foo::@@a -> Foo::B -> Foo::@@a"
end

it "can use constant defined later (#2906)" do
assert_type(%(
FOO = Foo.new
class Foo
A = Bar.new
def initialize
A
end
end
class Bar
end
FOO
)) { types["Foo"] }
end
end
15 changes: 0 additions & 15 deletions src/compiler/crystal/semantic/cleanup_transformer.cr
Original file line number Diff line number Diff line change
@@ -250,21 +250,6 @@ module Crystal
node
end

def transform(node : Path)
if target_const = node.target_const
if target_const.used && !target_const.initialized?
value = target_const.value
if (const_node = @const_being_initialized) && !simple_constant?(value)
const_being_initialized = const_node.target_const.not_nil!
const_node.raise "constant #{const_being_initialized} requires initialization of #{target_const}, \
which is initialized later. Initialize #{target_const} before #{const_being_initialized}"
end
end
end

super
end

def transform(node : Global)
if const_node = @const_being_initialized
const_being_initialized = const_node.target_const.not_nil!

0 comments on commit c49f41a

Please sign in to comment.