Class: Carbon::Compiler::Visitor::Preparation

Inherits:
Object
  • Object
show all
Includes:
Base, Expressions, Function, Statements, Struct
Defined in:
lib/carbon/compiler/visitor/preparation.rb,
lib/carbon/compiler/visitor/preparation/struct.rb,
lib/carbon/compiler/visitor/preparation/function.rb,
lib/carbon/compiler/visitor/preparation/statements.rb,
lib/carbon/compiler/visitor/preparation/expressions.rb

Defined Under Namespace

Modules: Expressions, Function, Statements, Struct

Instance Method Summary collapse

Methods included from Struct

#visit_struct, #visit_struct_element

Methods included from Statements

#visit_statement_body, #visit_statement_body_follow, #visit_statement_catch, #visit_statement_else, #visit_statement_for, #visit_statement_if, #visit_statement_let, #visit_statement_while

Methods included from Function

#visit_function, #visit_function_body, #visit_function_generic, #visit_function_parameter

Methods included from Base

included

Constructor Details

#initialize(file, index) ⇒ Preparation

Returns a new instance of Preparation.



20
21
22
23
24
25
26
27
# File 'lib/carbon/compiler/visitor/preparation.rb', line 20

def initialize(file, index)
  @index = index
  @file = file
  @name = @file.module
  @directives = []
  @_funcs = {}
  @context = :normal
end

Instance Method Details

#call(node) ⇒ Object



29
30
31
# File 'lib/carbon/compiler/visitor/preparation.rb', line 29

def call(node)
  accept(node)
end

#visit_directive(node) ⇒ Object



53
54
55
56
57
58
# File 'lib/carbon/compiler/visitor/preparation.rb', line 53

def visit_directive(node)
  directive = Compiler::Directive.new(node, @file, @index)
  @directives << node if directive.attach?
  directive.call
  node
end

#visit_module(node) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/carbon/compiler/visitor/preparation.rb', line 44

def visit_module(node)
  error_mismatched_name(node) if node.name != @name
  error_multiple_modules(node) if @_name
  @_name = node
  @file.module = @name = node.name
  node
end

#visit_root(node) ⇒ Object



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

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

#visit_type(node) ⇒ Object



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

def visit_type(node)
  node.sub(@file.aliases)
end