Module: Carbon::Compiler::Visitor::Preparation::Function

Included in:
Carbon::Compiler::Visitor::Preparation
Defined in:
lib/carbon/compiler/visitor/preparation/function.rb

Instance Method Summary collapse

Instance Method Details

#visit_function(node) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/carbon/compiler/visitor/preparation/function.rb', line 10

def visit_function(node)
  params = node.parameters.map { |c| accept(c) }
  generics = node.generics.map { |c| accept(c) }
  ptypes = params.map { |c| c.name.value == "self" ? @name : c.type }
  name = @name.call(node.name, ptypes, generics)
  error_function_duplicate(node, name) if @_funcs.key?(name)
  @_funcs[name] = node
  fname = node._name.merge(generics: generics)
  body = accept(node.body)
  node.merge(parameters: params, _name: fname, body: body)
end

#visit_function_body(node) ⇒ Object



40
41
42
# File 'lib/carbon/compiler/visitor/preparation/function.rb', line 40

def visit_function_body(node)
  node.map! { |c| accept(c) }
end

#visit_function_generic(node) ⇒ Object



31
32
33
34
35
36
# File 'lib/carbon/compiler/visitor/preparation/function.rb', line 31

def visit_function_generic(node)
  name = accept(node.name)
  implements = node.implements.map { |i| accept(i) }

  Concrete::Type::Generic.new(name, implements)
end

#visit_function_parameter(node) ⇒ Object



24
25
26
27
28
# File 'lib/carbon/compiler/visitor/preparation/function.rb', line 24

def visit_function_parameter(node)
  return node if node.name.value == "self"
  type = accept(node.type)
  node.merge(type: type)
end