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
- #visit_function(node) ⇒ Object
- #visit_function_body(node) ⇒ Object
- #visit_function_generic(node) ⇒ Object
- #visit_function_parameter(node) ⇒ Object
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 |