Skip to content

Commit

Permalink
Add optimize option to orange script.
Browse files Browse the repository at this point in the history
Handle parser error.
  • Loading branch information
macournoyer committed Oct 24, 2008
1 parent 6cab059 commit fa1f10e
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 4 deletions.
3 changes: 2 additions & 1 deletion bin/orange
Expand Up @@ -18,9 +18,10 @@ if $h
end end


file = ARGV.first file = ARGV.first
abort "Usage: orange [-hi] [-c=file.o] file.or" unless file abort "Usage: orange [-hiO] [-c=file.o] file.or" unless file


g = Orange.compile(File.read(file)) g = Orange.compile(File.read(file))
g.optimize unless $O


case case
when $i: puts g.inspect when $i: puts g.inspect
Expand Down
15 changes: 12 additions & 3 deletions lib/orange.rb
Expand Up @@ -13,9 +13,18 @@
end end


module Orange module Orange
class ParserError < RuntimeError; end

def self.compile(code) def self.compile(code)
g = Orange::Generator.new generator = Orange::Generator.new
OrangeParser.new.parse(code).compile(g) parser = OrangeParser.new
g
if node = parser.parse(code)
node.compile(generator)
else
raise ParserError, parser.failure_reason
end

generator
end end
end end
27 changes: 27 additions & 0 deletions lib/orange/generator.rb
Expand Up @@ -8,6 +8,33 @@ class Generator
PCHAR = Type.pointer(Type::Int8Ty) PCHAR = Type.pointer(Type::Int8Ty)
INT = Type::Int32Ty INT = Type::Int32Ty


class Value
STRUCT = LLVM::Type.struct([INT, INT, PCHAR])
TYPES = [:int, :string, :ptr]
attr_reader :type, :value, :ptr

def initialize(value, type)
@value = value
@type = type
end

def alloc(b)
struct = b.alloca(STRUCT, 0)
v = b.struct_gep(struct, 0)
b.store(TYPES.index(@type).llvm, v)
v = case @type
when :int: b.struct_gep(struct, 1)
when :string: b.struct_gep(struct, 2)
end
b.store(@value, v)
@ptr = struct
end

def load_str(b)

end
end

def initialize(mod = LLVM::Module.new("orange"), function=nil) def initialize(mod = LLVM::Module.new("orange"), function=nil)
@module = mod @module = mod
@locals = {} @locals = {}
Expand Down

0 comments on commit fa1f10e

Please sign in to comment.