Compare commits
5 Commits
a7e24c059b
...
61fb44bbce
Author | SHA1 | Date |
---|---|---|
Danila Fedorin | 61fb44bbce | |
Danila Fedorin | 230a50c532 | |
Danila Fedorin | a96d503095 | |
Danila Fedorin | caaae87344 | |
Danila Fedorin | 86ee6557cf |
|
@ -0,0 +1,7 @@
|
|||
fun main(): u0 {
|
||||
1+2+3;
|
||||
var a = 5+5;
|
||||
var b = a;
|
||||
var a = a + b;
|
||||
var c = a - b;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
fun double(a): u8 {
|
||||
return a + a;
|
||||
}
|
||||
|
||||
fun quadruple(a): u8 {
|
||||
return double(double(a));
|
||||
}
|
||||
|
||||
fun reuse(): u0 {
|
||||
var one = 2;
|
||||
var two = 4;
|
||||
var three = 6;
|
||||
}
|
||||
|
||||
fun main(): u0 {
|
||||
var a = quadruple(4);
|
||||
var one = 1;
|
||||
var two = 2;
|
||||
var three = 3;
|
||||
reuse();
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fun main(): u0 {
|
||||
draw_number(69, 1, 1);
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
fun main(): u0 {
|
||||
var a = 3+3;
|
||||
if(a) {
|
||||
a = 0;
|
||||
}
|
||||
|
||||
var b = 0;
|
||||
if(b) {
|
||||
b = 4;
|
||||
}
|
||||
|
||||
if(b) {
|
||||
b = 4;
|
||||
} else {
|
||||
b = 5;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
fun main(): u0 {
|
||||
var a = get_key();
|
||||
var b = get_key();
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
fun main(): u0 {
|
||||
var a = 5;
|
||||
var b = 0;
|
||||
while(a) {
|
||||
b = b + 2;
|
||||
a = a - 1;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
fun main(): u0 {
|
||||
var a = 1;
|
||||
var b = 1;
|
||||
while(233 - a) {
|
||||
draw_number(a, 24, 13);
|
||||
set_delay(30);
|
||||
var temp = a;
|
||||
a = b;
|
||||
b = b + temp;
|
||||
while(get_delay()){}
|
||||
draw_number(temp, 24, 13);
|
||||
}
|
||||
draw_number(a, 24, 13);
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
fun main(): u0 {
|
||||
var a = 1;
|
||||
var b = 0;
|
||||
var previous = 0;
|
||||
draw_number(0, 24, 13);
|
||||
|
||||
while(a) {
|
||||
previous = b;
|
||||
b = get_key();
|
||||
draw_number(previous, 24, 13);
|
||||
draw_number(b, 24, 13);
|
||||
}
|
||||
}
|
|
@ -91,7 +91,7 @@ module Chalk
|
|||
when Trees::TreeBlock
|
||||
table = Table.new(table)
|
||||
tree.children.each do |child|
|
||||
free += generate! child, table, free, free + 1
|
||||
free += generate! child, table, THROWAWAY_REG, free
|
||||
end
|
||||
when Trees::TreeVar
|
||||
entry = table[tree.name]?
|
||||
|
@ -134,7 +134,8 @@ module Chalk
|
|||
cond_jump.offset = @instructions.size - old_size + 1
|
||||
after_jump.offset = before_cond - instructions.size + 1
|
||||
when Trees::TreeReturn
|
||||
generate! tree.rvalue, table, RETURN_REG, free
|
||||
generate! tree.rvalue, table, free, free + 1
|
||||
loadr RETURN_REG, free
|
||||
ret
|
||||
end
|
||||
return 0
|
||||
|
@ -142,7 +143,7 @@ module Chalk
|
|||
|
||||
# Generates code for the function that was given to it.
|
||||
def generate!
|
||||
generate!(@function.block, @table, -1, @registers)
|
||||
generate!(@function.block, @table, 0, @registers)
|
||||
return @instructions
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,6 +4,8 @@ module Chalk
|
|||
RETURN_REG = 14
|
||||
# The register into which the "stack pointer" is stored.
|
||||
STACK_REG = 13
|
||||
# Register used for throwing away values.
|
||||
THROWAWAY_REG = 12
|
||||
|
||||
# Module to emit instructions and store
|
||||
# them into an existing array.
|
||||
|
|
Loading…
Reference in New Issue