2 # Voodoo compiler driver.
3 # The compiler driver reads input from a parser (see
4 # Voodoo::Parser), feeds it to a code generator (see
5 # Voodoo::CommonCodeGenerator), and writes the generated code.
7 # An example of its usage can be found on the main page for the
10 # Initialize a compiler.
13 # [parser] the parser to be used (see Voodoo::Parser)
14 # [code_generator] the code generator to be used
15 # (see Voodoo::CommonCodeGenerator)
16 # [output] an IO object. The generated code will be written to it
17 def initialize parser, code_generator, output
19 @generator = code_generator
23 # Perform the compilation.
26 statement = @parser.parse_top_level
28 break if statement == nil
29 next if statement.empty?
32 when :align, :export, :import, :label, :section
33 # Specials, passed on to the generator
34 args = statement[1..-1]
35 @generator.send statement[0], *args
36 when :byte, :string, :word
38 @generator.add_data statement
40 # Function declaration
42 @generator.add_function statement[1], *body
45 @generator.add_code statement
49 @generator.write @output