minor
This commit is contained in:
parent
e07682b6a3
commit
f34fddd383
@ -14,18 +14,19 @@ module Ast
|
|||||||
save_locals context , into
|
save_locals context , into
|
||||||
call.load_args into
|
call.load_args into
|
||||||
call.do_call into
|
call.do_call into
|
||||||
resore_locals context , into
|
restore_locals context , into
|
||||||
|
function.return_type
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_locals context , into
|
def save_locals context , into
|
||||||
into.instance_eval do
|
into.instance_eval do
|
||||||
push [:r0, :r1 , :r2]
|
push [:r1 , :r2 , :r3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def resore_locals context , into
|
def restore_locals context , into
|
||||||
into.instance_eval do
|
into.instance_eval do
|
||||||
pop [:r0, :r1 , :r2]
|
pop [:r1, :r2 , :r3]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ module Ast
|
|||||||
body.each do |b|
|
body.each do |b|
|
||||||
compiled = b.compile(context , into)
|
compiled = b.compile(context , into)
|
||||||
function.return_type = compiled
|
function.return_type = compiled
|
||||||
puts "compiled in function #{compiled.inspect}"
|
puts "compiled in function #{compiled.class}"
|
||||||
raise "alarm #{compiled} \n #{b}" unless compiled.is_a? Vm::Word
|
raise "alarm #{compiled} \n #{b}" unless compiled.is_a? Vm::Word
|
||||||
end
|
end
|
||||||
context.locals = parent_locals
|
context.locals = parent_locals
|
||||||
|
@ -21,7 +21,8 @@ module Elf
|
|||||||
|
|
||||||
binary = program.assemble(StringIO.new )
|
binary = program.assemble(StringIO.new )
|
||||||
|
|
||||||
blocks = program.functions.collect{ |f| [f.entry , f.exit , f.body] }
|
# blocks = program.functions.collect{ |f| [f.entry , f.exit , f.body] }
|
||||||
|
blocks = program.functions.collect{ |f| [f.body] }
|
||||||
blocks += [program.entry , program.exit , program.main]
|
blocks += [program.entry , program.exit , program.main]
|
||||||
blocks.flatten.each do |b|
|
blocks.flatten.each do |b|
|
||||||
add_symbol b.name.to_s , b.position
|
add_symbol b.name.to_s , b.position
|
||||||
|
@ -5,9 +5,9 @@ def fibonaccit(n) # n == r0
|
|||||||
tmp = a # r3 <- r1
|
tmp = a # r3 <- r1
|
||||||
a = b # r1 <- r2
|
a = b # r1 <- r2
|
||||||
b = tmp + b # r4 = r2 + r3 (r4 transient) r2 <- r4
|
b = tmp + b # r4 = r2 + r3 (r4 transient) r2 <- r4
|
||||||
putint(b)
|
|
||||||
n = n - 1 # r0 <- r2 for call, #call ok
|
n = n - 1 # r0 <- r2 for call, #call ok
|
||||||
end #r5 <- r0 - 1 n=n-1 through r5 tmp
|
end #r5 <- r0 - 1 n=n-1 through r5 tmp
|
||||||
|
putint(b)
|
||||||
end # r0 <- r5
|
end # r0 <- r5
|
||||||
|
|
||||||
fibonaccit( 10 )
|
fibonaccit( 10 )
|
||||||
|
Loading…
Reference in New Issue
Block a user