Class: Mirah::Generator
- Inherits:
-
Object
- Object
- Mirah::Generator
- Includes:
- Util::ProcessErrors
- Defined in:
- lib/mirah/generator.rb
Instance Attribute Summary collapse
-
#compiler ⇒ Object
Returns the value of attribute compiler.
-
#logging ⇒ Object
Returns the value of attribute logging.
-
#parser ⇒ Object
Returns the value of attribute parser.
-
#verbose ⇒ Object
Returns the value of attribute verbose.
Instance Method Summary collapse
- #generate(arguments) ⇒ Object
- #infer_asts(nodes) ⇒ Object
-
#initialize(state, compiler_class, logging, verbose) ⇒ Generator
constructor
A new instance of Generator.
Methods included from Util::ProcessErrors
Constructor Details
#initialize(state, compiler_class, logging, verbose) ⇒ Generator
Returns a new instance of Generator.
20 21 22 23 24 25 |
# File 'lib/mirah/generator.rb', line 20 def initialize(state, compiler_class, logging, verbose) @parser = Mirah::Parser.new(state, logging) @compiler = Mirah::Compiler::ASTCompiler.new(compiler_class, logging) @logging = logging @verbose = verbose end |
Instance Attribute Details
#compiler ⇒ Object
Returns the value of attribute compiler.
27 28 29 |
# File 'lib/mirah/generator.rb', line 27 def compiler @compiler end |
#logging ⇒ Object
Returns the value of attribute logging.
27 28 29 |
# File 'lib/mirah/generator.rb', line 27 def logging @logging end |
#parser ⇒ Object
Returns the value of attribute parser.
27 28 29 |
# File 'lib/mirah/generator.rb', line 27 def parser @parser end |
#verbose ⇒ Object
Returns the value of attribute verbose.
27 28 29 |
# File 'lib/mirah/generator.rb', line 27 def verbose @verbose end |
Instance Method Details
#generate(arguments) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/mirah/generator.rb', line 29 def generate(arguments) # collect all ASTs from all files top_nodes = parser.parse_from_args(arguments) # enter all ASTs into inference engine puts "Inferring types..." if logging infer_asts(top_nodes) # compile each AST in turn compiler_results = compiler.compile_asts(top_nodes) puts "Done!" if logging compiler_results end |
#infer_asts(nodes) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/mirah/generator.rb', line 45 def infer_asts(nodes) typer = Mirah::JVM::Typer.new(parser.transformer) nodes.each {|ast| typer.infer(ast, true) } begin typer.resolve(false) ensure puts nodes.inspect if verbose failed = !typer.errors.empty? if failed puts "Inference Error:" process_errors(typer.errors) end end end |