Skip to content

Commit

Permalink
Fixed #2984: Macros not correctly working inside proc literals and ot…
Browse files Browse the repository at this point in the history
…her places
Ary Borenszweig committed Jul 11, 2016

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent dc9f526 commit 177828e
Showing 3 changed files with 18 additions and 40 deletions.
10 changes: 10 additions & 0 deletions spec/compiler/type_inference/macro_spec.cr
Original file line number Diff line number Diff line change
@@ -898,4 +898,14 @@ describe "Type inference: macro" do
foo
)) { char }
end

it "works inside proc literal (#2984)" do
assert_type(%(
macro foo
1
end
->{ foo }.call
)) { int32 }
end
end
16 changes: 4 additions & 12 deletions src/compiler/crystal/semantic/top_level_visitor.cr
Original file line number Diff line number Diff line change
@@ -703,6 +703,7 @@ module Crystal
end

def visit(node : ProcLiteral)
node.def.body.accept self
false
end

@@ -720,14 +721,17 @@ module Crystal
end

def visit(node : Cast)
node.obj.accept self
false
end

def visit(node : NilableCast)
node.obj.accept self
false
end

def visit(node : IsA)
node.obj.accept self
false
end

@@ -739,18 +743,6 @@ module Crystal
false
end

def visit(node : InstanceSizeOf)
false
end

def visit(node : SizeOf)
false
end

def visit(node : PointerOf)
false
end

def visit(node : MultiAssign)
node.targets.each do |target|
if target.is_a?(Var)
32 changes: 4 additions & 28 deletions src/compiler/crystal/semantic/type_declaration_visitor.cr
Original file line number Diff line number Diff line change
@@ -223,42 +223,22 @@ module Crystal
end

def visit(node : ProcLiteral)
node.def.body.accept self
false
end

def visit(node : IsA)
node.obj.accept self
false
end

def visit(node : Cast)
node.obj.accept self
false
end

def visit(node : NilableCast)
false
end

def visit(node : InstanceSizeOf)
false
end

def visit(node : SizeOf)
false
end

def visit(node : TypeOf)
false
end

def visit(node : PointerOf)
false
end

def visit(node : ArrayLiteral)
false
end

def visit(node : HashLiteral)
node.obj.accept self
false
end

@@ -286,10 +266,6 @@ module Crystal
false
end

def visit(node : TypeOf)
false
end

def inside_block?
false
end

0 comments on commit 177828e

Please sign in to comment.