Module: Carbon::Compiler::Visitor::Generation::Expressions::Calls
- Included in:
- Carbon::Compiler::Visitor::Generation::Expressions
- Defined in:
- lib/carbon/compiler/visitor/generation/expressions/calls.rb
Instance Method Summary collapse
- #visit_expression_call_access(node, context) ⇒ Object
- #visit_expression_call_attribute(node, context) ⇒ Object
- #visit_expression_call_enum(node, context) ⇒ Object
- #visit_expression_call_module(node, context) ⇒ Object
- #visit_expression_call_self(node, context) ⇒ Object
- #visit_expression_call_unified(node, context) ⇒ Object
Instance Method Details
#visit_expression_call_access(node, context) ⇒ Object
12 13 14 15 16 17 18 19 20 21 |
# File 'lib/carbon/compiler/visitor/generation/expressions/calls.rb', line 12 def visit_expression_call_access(node, context) base = accept(node.expression, context) params = node.parameters.map { |p| accept(p, context) } ptypes = params.map(&:type) name = base.type.call(:[], [base.type, *ptypes], node.generics || []) func, gens = context.find(name) context.build.call(name, base, *params) .as(func.return.sub(gens)) end |
#visit_expression_call_attribute(node, context) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/carbon/compiler/visitor/generation/expressions/calls.rb', line 25 def visit_expression_call_attribute(node, context) base = accept(node.expression, context) name = base.type.call(node.name.value, [base.type], node.generics || []) func, gens = context.find(name) context.build.call(name, base).as(func.return.sub(gens)) end |
#visit_expression_call_enum(node, context) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# File 'lib/carbon/compiler/visitor/generation/expressions/calls.rb', line 35 def visit_expression_call_enum(node, context) base = node.module params = node.parameters.map { |p| accept(p, context) } generics = node.generics.map { |p| accept(p, context) } ptypes = params.map(&:type) name = base.call(node.name.value, ptypes, node.generics || []) func, gens = context.find(name) context.build.call(name, *params).as(func.return.sub(gens)) end |
#visit_expression_call_module(node, context) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/carbon/compiler/visitor/generation/expressions/calls.rb', line 47 def visit_expression_call_module(node, context) base = node.module params = node.parameters.map { |p| accept(p, context) } ptypes = params.map(&:type) name = base.call(node.name.value, ptypes, node.generics || []) func, gens = context.find(name) context.build.call(name, *params).as(func.return.sub(gens)) end |
#visit_expression_call_self(node, context) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/carbon/compiler/visitor/generation/expressions/calls.rb', line 58 def visit_expression_call_self(node, context) base = @name params = node.parameters.map { |p| accept(p, context) } ptypes = params.map(&:type) name = base.call(node.name.value, [base, *ptypes], node.generics || []) func, gens = context.find(name) thisp = context.current.fetch("self") this = context.build.load(thisp).as(base) context.build.call(name, this, *params) .as(func.return.sub(gens)) end |
#visit_expression_call_unified(node, context) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/carbon/compiler/visitor/generation/expressions/calls.rb', line 73 def visit_expression_call_unified(node, context) base = accept(node.expression, context) params = node.parameters.map { |p| accept(p, context) } generics = node.generics.map { |p| accept(p, context) } ptypes = params.map(&:type) name = base.type.call(node.name.value, [base.type, *ptypes], node.generics || []) func, gens = context.find(name) context.build.call(name, base, *params) .as(func.return.sub(gens)) end |