diff --git a/tests/programs/fib.alpha b/tests/programs/fib.alpha index b136295..9ebef58 100644 --- a/tests/programs/fib.alpha +++ b/tests/programs/fib.alpha @@ -1 +1,30 @@ -(* TODO *) \ No newline at end of file +(* TEST: [-asc -tc -cg -ir] *) + +#include "std.alpha" + +function entry : string2integer +function Fib : integer2integer + +Fib(i) := { + [ Boolean: a ; Boolean: b ; Boolean: c] + if( i = 0 ) then { + return 7; + } else { + i := i; + } + b := b | (a & c); + b := 2 < 3; + if(i = 1) then { + return 1; + } else { + return i + Fib(i - 1); + } +} + +entry (arg) := { + [ integer: x; integer: y ] + x := 2; + x := Fib(2); + y := printInteger(Fib(2)); + return 1; +} diff --git a/tests/programs/io.alpha b/tests/programs/io.alpha index eac7b03..45b387f 100644 --- a/tests/programs/io.alpha +++ b/tests/programs/io.alpha @@ -5,6 +5,8 @@ function entry: string2integer entry (arg) := { [integer: x; string: s; character: c; integer: result] + result := printS("hello world"); + s := inS(1); result := printS(s); diff --git a/tests/sprint4/expected/sp4_cg_add.asc.exp b/tests/sprint4/expected/sp4_cg_add.asc.exp index bff5d97..c234273 100644 --- a/tests/sprint4/expected/sp4_cg_add.asc.exp +++ b/tests/sprint4/expected/sp4_cg_add.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [integer:x; integer:y] -006: y := 1; -007: x := 3; -008: y := x + y; -009: return y; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [integer:x; integer:y; integer: result] +040: +041: y := 1; +042: x := 3; +043: y := x + y; +044: +045: result := printInteger(y); +046: return y; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_add.ir.exp b/tests/sprint4/expected/sp4_cg_add.ir.exp index d0a05ab..73beb15 100644 --- a/tests/sprint4/expected/sp4_cg_add.ir.exp +++ b/tests/sprint4/expected/sp4_cg_add.ir.exp @@ -1,8 +1,16 @@ - 1: func : test - 2: $t0 = 1 - 3: y = $t0 - 4: $t1 = 3 - 5: x = $t1 - 6: $t2 = x + y - 7: y = $t2 - 8: return : y + 1: func_dec : entry + 2: func : entry + 3: $t0 = 1 + 4: Label : 1 + 5: y = $t0 + 6: $t1 = 3 + 7: Label : 2 + 8: x = $t1 + 9: $t2 = x + y + 10: Label : 3 + 11: y = $t2 + 12: param y + 13: call : printInteger 1 + 14: Label : 4 + 15: result = $t3 + 16: return : y diff --git a/tests/sprint4/expected/sp4_cg_add.s.exp b/tests/sprint4/expected/sp4_cg_add.s.exp index 4764400..f58dd79 100644 --- a/tests/sprint4/expected/sp4_cg_add.s.exp +++ b/tests/sprint4/expected/sp4_cg_add.s.exp @@ -1,12 +1,30 @@ - movl $1, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end - movl $3, -12(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $1, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end - movl -16(%rbp), %eax #addition start - movl -16(%rbp), %eax - addl %edx, %eax - movl %eax, -20(%rbp) #addition end + movl $3, -20(%rbp) #constant assign +.L2: movl -20(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end + movl %eax, -24(%rbp) #assign end + + movl -24(%rbp), %eax #addition start + addl -16(%rbp), %eax + movl %eax, -28(%rbp) #addition end +.L3: + movl -28(%rbp), %eax #assign start + movl %eax, -16(%rbp) #assign end + movl -16(%rbp), %edi #adding param start + call printInteger + movl %eax, -32(%rbp) #store return from call +.L4: + movl -32(%rbp), %eax #assign start + movl %eax, -36(%rbp) #assign end + movl -16(%rbp), %eax #return y + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_and.asc.exp b/tests/sprint4/expected/sp4_cg_and.asc.exp index 8676177..17aa547 100644 --- a/tests/sprint4/expected/sp4_cg_and.asc.exp +++ b/tests/sprint4/expected/sp4_cg_and.asc.exp @@ -1,10 +1,50 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [Boolean:b; Boolean: c; Boolean: d] -006: c := true; -007: d := false; -008: d := c & d; -009: return 1; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [Boolean:b; Boolean: c; Boolean: d; integer: result] +040: +041: z := true; + LINE (41:14) ** TYPE ERROR: Assignable Assign Expression - Object undefined of type undefined != Object $t0 of type Boolean + LINE (41:14) ** TYPE ERROR: Invalid type passed to assignable. + LINE (41:5) ** TYPE ERROR: Undefined variable z +042: d := false; +043: d := c & d; +044: +045: result := printBoolean(d); +046: return 1; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_calls.asc.exp b/tests/sprint4/expected/sp4_cg_calls.asc.exp new file mode 100644 index 0000000..edc0a7a --- /dev/null +++ b/tests/sprint4/expected/sp4_cg_calls.asc.exp @@ -0,0 +1,60 @@ +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: +039: type rec: [integer: x; integer: y; integer: z; integer: a; integer: b; integer: c; integer: d] +040: type T2: rec -> integer +041: type T: integer -> integer +042: function bar: T2 +043: function ahh: T +044: +045: ahh (a) := { +046: a := printInteger(a); +047: return -1; +048: } +049: +050: bar (a, b, c,d,e,f,g) := { +051: a := printInteger(g); +052: return b; +053: } +054: +055: entry (arg) := { +056: [integer:x; integer:y; integer: result] +057: +058: result := bar(1,2,3,4,5,6,7); +059: return 1; +060: } diff --git a/tests/sprint4/expected/sp4_cg_calls.ir.exp b/tests/sprint4/expected/sp4_cg_calls.ir.exp new file mode 100644 index 0000000..2995985 --- /dev/null +++ b/tests/sprint4/expected/sp4_cg_calls.ir.exp @@ -0,0 +1,37 @@ + 1: func_dec : entry + 2: func_dec : bar + 3: func_dec : ahh + 4: func : ahh + 5: param a + 6: call : printInteger 1 + 7: Label : 1 + 8: a = $t0 + 9: $t1 = 1 + 10: $t2 = -$t1 + 11: return : $t2 + 12: func : bar + 13: param g + 14: call : printInteger 1 + 15: Label : 2 + 16: a = $t3 + 17: return : b + 18: func : entry + 19: $t4 = 1 + 20: $t5 = 2 + 21: $t6 = 3 + 22: $t7 = 4 + 23: $t8 = 5 + 24: $t9 = 6 + 25: $t10 = 7 + 26: param $t10 + 27: param $t9 + 28: param $t8 + 29: param $t7 + 30: param $t6 + 31: param $t5 + 32: param $t4 + 33: call : bar 7 + 34: Label : 3 + 35: result = $t11 + 36: $t12 = 1 + 37: return : $t12 diff --git a/tests/sprint4/expected/sp4_cg_calls.s.exp b/tests/sprint4/expected/sp4_cg_calls.s.exp new file mode 100644 index 0000000..55b65cb --- /dev/null +++ b/tests/sprint4/expected/sp4_cg_calls.s.exp @@ -0,0 +1,69 @@ +.globl entry +ahh: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -4(%rbp) #FunctionStart1param end + movl -4(%rbp), %edi #adding param start + call printInteger + movl %eax, -8(%rbp) #store return from call +.L1: + movl -8(%rbp), %eax #assign start + movl %eax, -4(%rbp) #assign end + movl $1, -12(%rbp) #constant assign + movl -12(%rbp), %eax #negation start + negl %eax + movl %eax, -16(%rbp) #negation end + movl -16(%rbp), %eax #return $t2 + leave + ret +bar: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl 20(%rbp), %eax #FunctionStart1Param start + movl %eax, -4(%rbp) #FunctionStart1param end + movl %r9d, -12(%rbp) #FunctionStart1param end + movl %r8d, -16(%rbp) #FunctionStart1param end + movl %ecx, -20(%rbp) #FunctionStart1param end + movl %edx, -24(%rbp) #FunctionStart1param end + movl %esi, -28(%rbp) #FunctionStart1param end + movl %edi, -32(%rbp) #FunctionStart1param end + movl -32(%rbp), %edi #adding param start + call printInteger + movl %eax, -36(%rbp) #store return from call +.L2: + movl -36(%rbp), %eax #assign start + movl %eax, -4(%rbp) #assign end + movl -12(%rbp), %eax #return b + leave + ret +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $1, -12(%rbp) #constant assign + movl $2, -16(%rbp) #constant assign + movl $3, -20(%rbp) #constant assign + movl $4, -24(%rbp) #constant assign + movl $5, -28(%rbp) #constant assign + movl $6, -32(%rbp) #constant assign + movl $7, -36(%rbp) #constant assign + movl -36(%rbp), %edi #adding param start + movl -32(%rbp), %esi #adding param start + movl -28(%rbp), %edx #adding param start + movl -24(%rbp), %ecx #adding param start + movl -20(%rbp), %r8d #adding param start + movl -16(%rbp), %r9d #adding param start + movl -12(%rbp), %eax #adding param start + movl %eax, 88(%rbp) #adding param end + call bar + movl %eax, -44(%rbp) #store return from call +.L3: + movl -44(%rbp), %eax #assign start + movl %eax, -48(%rbp) #assign end + movl $1, -52(%rbp) #constant assign + movl -52(%rbp), %eax #return $t12 + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_div.asc.exp b/tests/sprint4/expected/sp4_cg_div.asc.exp index 87b68f2..5e0a832 100644 --- a/tests/sprint4/expected/sp4_cg_div.asc.exp +++ b/tests/sprint4/expected/sp4_cg_div.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [integer:x; integer:y] -006: y := 1; -007: x := 3; -008: y := x / y; -009: return y; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [integer:x; integer:y; integer: result] +040: +041: x := 24; +042: y := 3; +043: y := x / y; +044: +045: result := printInteger(y); +046: return y; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_div.ir.exp b/tests/sprint4/expected/sp4_cg_div.ir.exp index 905d038..f316a19 100644 --- a/tests/sprint4/expected/sp4_cg_div.ir.exp +++ b/tests/sprint4/expected/sp4_cg_div.ir.exp @@ -1,8 +1,16 @@ - 1: func : test - 2: $t0 = 1 - 3: y = $t0 - 4: $t1 = 3 - 5: x = $t1 - 6: $t2 = x / y - 7: y = $t2 - 8: return : y + 1: func_dec : entry + 2: func : entry + 3: $t0 = 24 + 4: Label : 1 + 5: x = $t0 + 6: $t1 = 3 + 7: Label : 2 + 8: y = $t1 + 9: $t2 = x / y + 10: Label : 3 + 11: y = $t2 + 12: param y + 13: call : printInteger 1 + 14: Label : 4 + 15: result = $t3 + 16: return : y diff --git a/tests/sprint4/expected/sp4_cg_div.s.exp b/tests/sprint4/expected/sp4_cg_div.s.exp index 1a71c6e..cc51cef 100644 --- a/tests/sprint4/expected/sp4_cg_div.s.exp +++ b/tests/sprint4/expected/sp4_cg_div.s.exp @@ -1,12 +1,30 @@ - movl $1, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end - movl $3, -12(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $24, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end + movl $3, -20(%rbp) #constant assign +.L2: + movl -20(%rbp), %eax #assign start + movl %eax, -24(%rbp) #assign end movl -16(%rbp), %eax #division start cltd - idivl -8(%rbp) - movl %eax, -20(%rbp) #division end - movl -20(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end + idivl -24(%rbp) + movl %eax, -28(%rbp) #division end +.L3: + movl -28(%rbp), %eax #assign start + movl %eax, -24(%rbp) #assign end + movl -24(%rbp), %edi #adding param start + call printInteger + movl %eax, -32(%rbp) #store return from call +.L4: + movl -32(%rbp), %eax #assign start + movl %eax, -36(%rbp) #assign end + movl -24(%rbp), %eax #return y + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_equal_to.asc.exp b/tests/sprint4/expected/sp4_cg_equal_to.asc.exp index df0cbd5..d43e036 100644 --- a/tests/sprint4/expected/sp4_cg_equal_to.asc.exp +++ b/tests/sprint4/expected/sp4_cg_equal_to.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [Boolean: b; integer: x; integer: y] -006: x := 1; -007: y := 2; -008: b := x = y; -009: return 1; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [Boolean: b; integer: x; integer: y; integer: result] +040: +041: x := 1; +042: y := 2; +043: b := x = y; +044: +045: result := printBoolean(b); +046: return 1; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_equal_to.ir.exp b/tests/sprint4/expected/sp4_cg_equal_to.ir.exp index 1739814..d0b9e1c 100644 --- a/tests/sprint4/expected/sp4_cg_equal_to.ir.exp +++ b/tests/sprint4/expected/sp4_cg_equal_to.ir.exp @@ -1,10 +1,17 @@ - 1: func : test - 2: $t0 = 1 - 3: x = $t0 - 4: $t1 = 2 - 5: y = $t1 - 6: if ( x = y ) GOTO 0 - 7: GOTO : 0 - 8: b = $t2 - 9: $t3 = 1 - 10: return : $t3 + 1: func_dec : entry + 2: func : entry + 3: $t0 = 1 + 4: Label : 1 + 5: x = $t0 + 6: $t1 = 2 + 7: Label : 2 + 8: y = $t1 + 9: $t2 = x == y + 10: Label : 3 + 11: b = $t2 + 12: param b + 13: call : printBoolean 1 + 14: Label : 4 + 15: result = $t3 + 16: $t4 = 1 + 17: return : $t4 diff --git a/tests/sprint4/expected/sp4_cg_equal_to.s.exp b/tests/sprint4/expected/sp4_cg_equal_to.s.exp index 5f73e0b..374f095 100644 --- a/tests/sprint4/expected/sp4_cg_equal_to.s.exp +++ b/tests/sprint4/expected/sp4_cg_equal_to.s.exp @@ -1,11 +1,31 @@ - movl $1, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end - movl $2, -12(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $1, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end - movl -8(%rbp), %eax #equal to start - cmpl -16(%rbp), %eax + movl $2, -20(%rbp) #constant assign +.L2: + movl -20(%rbp), %eax #assign start + movl %eax, -24(%rbp) #assign end + movl -16(%rbp), %eax #equal to start + cmpl -24(%rbp), %eax sete %al - movb %al, -15(%rbp) #equal to end - movl $1, -20(%rbp) #constant assign + movb %al, -25(%rbp) #equal to end +.L3: + movl -25(%rbp), %eax #assign start + movl %eax, -26(%rbp) #assign end + movl -26(%rbp), %edi #adding param start + call printBoolean + movl %eax, -30(%rbp) #store return from call +.L4: + movl -30(%rbp), %eax #assign start + movl %eax, -34(%rbp) #assign end + movl $1, -38(%rbp) #constant assign + movl -38(%rbp), %eax #return $t4 + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_less_than.asc.exp b/tests/sprint4/expected/sp4_cg_less_than.asc.exp index 63b0136..ab65623 100644 --- a/tests/sprint4/expected/sp4_cg_less_than.asc.exp +++ b/tests/sprint4/expected/sp4_cg_less_than.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [Boolean: b; integer: x; integer: y] -006: x := 1; -007: y := 2; -008: b := x < y; -009: return 1; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [Boolean: b; integer: x; integer: y; integer: result] +040: +041: x := 1; +042: y := 2; +043: b := x < y; +044: +045: result := printBoolean(b); +046: return 1; +047: } diff --git a/tests/sprint4/expected/sp4_cg_less_than.ir.exp b/tests/sprint4/expected/sp4_cg_less_than.ir.exp index 5feb329..169347b 100644 --- a/tests/sprint4/expected/sp4_cg_less_than.ir.exp +++ b/tests/sprint4/expected/sp4_cg_less_than.ir.exp @@ -1,10 +1,17 @@ - 1: func : test - 2: $t0 = 1 - 3: x = $t0 - 4: $t1 = 2 - 5: y = $t1 - 6: if ( x < y ) GOTO 0 - 7: GOTO : 0 - 8: b = $t2 - 9: $t3 = 1 - 10: return : $t3 + 1: func_dec : entry + 2: func : entry + 3: $t0 = 1 + 4: Label : 1 + 5: x = $t0 + 6: $t1 = 2 + 7: Label : 2 + 8: y = $t1 + 9: $t2 = x < y + 10: Label : 3 + 11: b = $t2 + 12: param b + 13: call : printBoolean 1 + 14: Label : 4 + 15: result = $t3 + 16: $t4 = 1 + 17: return : $t4 diff --git a/tests/sprint4/expected/sp4_cg_less_than.s.exp b/tests/sprint4/expected/sp4_cg_less_than.s.exp index 4ed5ad1..57c2a33 100644 --- a/tests/sprint4/expected/sp4_cg_less_than.s.exp +++ b/tests/sprint4/expected/sp4_cg_less_than.s.exp @@ -1,11 +1,31 @@ - movl $1, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end - movl $2, -12(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $1, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end - movl -8(%rbp), %eax #less than start - cmpl -16(%rbp), %eax + movl $2, -20(%rbp) #constant assign +.L2: + movl -20(%rbp), %eax #assign start + movl %eax, -24(%rbp) #assign end + movl -16(%rbp), %eax #less than start + cmpl -24(%rbp), %eax setl %al - movb %al, -15(%rbp) #less than end - movl $1, -20(%rbp) #constant assign + movb %al, -25(%rbp) #less than end +.L3: + movl -25(%rbp), %eax #assign start + movl %eax, -26(%rbp) #assign end + movl -26(%rbp), %edi #adding param start + call printBoolean + movl %eax, -30(%rbp) #store return from call +.L4: + movl -30(%rbp), %eax #assign start + movl %eax, -34(%rbp) #assign end + movl $1, -38(%rbp) #constant assign + movl -38(%rbp), %eax #return $t4 + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_mod.asc.exp b/tests/sprint4/expected/sp4_cg_mod.asc.exp index 32294ec..3edad31 100644 --- a/tests/sprint4/expected/sp4_cg_mod.asc.exp +++ b/tests/sprint4/expected/sp4_cg_mod.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [integer:x; integer:y] -006: y := 1; -007: x := 3; -008: y := x % y; -009: return y; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [integer:x; integer:y; integer: result] +040: +041: x := 4; +042: y := 20; +043: y := y % x; +044: +045: result := printInteger(y); +046: return y; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_mod.ir.exp b/tests/sprint4/expected/sp4_cg_mod.ir.exp index b16f1de..4c2421e 100644 --- a/tests/sprint4/expected/sp4_cg_mod.ir.exp +++ b/tests/sprint4/expected/sp4_cg_mod.ir.exp @@ -1,8 +1,16 @@ - 1: func : test - 2: $t0 = 1 - 3: y = $t0 - 4: $t1 = 3 - 5: x = $t1 - 6: $t2 = x % y - 7: y = $t2 - 8: return : y + 1: func_dec : entry + 2: func : entry + 3: $t0 = 4 + 4: Label : 1 + 5: x = $t0 + 6: $t1 = 20 + 7: Label : 2 + 8: y = $t1 + 9: $t2 = y % x + 10: Label : 3 + 11: y = $t2 + 12: param y + 13: call : printInteger 1 + 14: Label : 4 + 15: result = $t3 + 16: return : y diff --git a/tests/sprint4/expected/sp4_cg_mod.s.exp b/tests/sprint4/expected/sp4_cg_mod.s.exp index 97d4259..85cd9db 100644 --- a/tests/sprint4/expected/sp4_cg_mod.s.exp +++ b/tests/sprint4/expected/sp4_cg_mod.s.exp @@ -1,12 +1,30 @@ - movl $1, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end - movl $3, -12(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $4, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end - movl -16(%rbp), %eax #mod start - cltd - idivl -8(%rbp) - movl %edx, -20(%rbp) #mod end + movl $20, -20(%rbp) #constant assign +.L2: movl -20(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end + movl %eax, -24(%rbp) #assign end + movl -24(%rbp), %eax #mod start + cltd + idivl -16(%rbp) + movl %edx, -28(%rbp) #mod end +.L3: + movl -28(%rbp), %eax #assign start + movl %eax, -24(%rbp) #assign end + movl -24(%rbp), %edi #adding param start + call printInteger + movl %eax, -32(%rbp) #store return from call +.L4: + movl -32(%rbp), %eax #assign start + movl %eax, -36(%rbp) #assign end + movl -24(%rbp), %eax #return y + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_mult.asc.exp b/tests/sprint4/expected/sp4_cg_mult.asc.exp index 15138ee..3a66591 100644 --- a/tests/sprint4/expected/sp4_cg_mult.asc.exp +++ b/tests/sprint4/expected/sp4_cg_mult.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [integer:x; integer:y] -006: y := 1; -007: x := 3; -008: y := x * x; -009: return y; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [integer:x; integer:y; integer: result] +040: +041: x := 3; +042: y := 20; +043: y := x * y; +044: +045: result := printInteger(y); +046: return y; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_mult.ir.exp b/tests/sprint4/expected/sp4_cg_mult.ir.exp index c125e68..70de136 100644 --- a/tests/sprint4/expected/sp4_cg_mult.ir.exp +++ b/tests/sprint4/expected/sp4_cg_mult.ir.exp @@ -1,8 +1,16 @@ - 1: func : test - 2: $t0 = 1 - 3: y = $t0 - 4: $t1 = 3 - 5: x = $t1 - 6: $t2 = x * x - 7: y = $t2 - 8: return : y + 1: func_dec : entry + 2: func : entry + 3: $t0 = 3 + 4: Label : 1 + 5: x = $t0 + 6: $t1 = 20 + 7: Label : 2 + 8: y = $t1 + 9: $t2 = x * y + 10: Label : 3 + 11: y = $t2 + 12: param y + 13: call : printInteger 1 + 14: Label : 4 + 15: result = $t3 + 16: return : y diff --git a/tests/sprint4/expected/sp4_cg_mult.s.exp b/tests/sprint4/expected/sp4_cg_mult.s.exp index 20b0a57..567acb3 100644 --- a/tests/sprint4/expected/sp4_cg_mult.s.exp +++ b/tests/sprint4/expected/sp4_cg_mult.s.exp @@ -1,11 +1,29 @@ - movl $1, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end movl $3, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end - movl -16(%rbp), %eax #multiplication start - imull -16(%rbp), %eax - movl %eax, -20(%rbp) #multiplication end + movl $20, -20(%rbp) #constant assign +.L2: movl -20(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end + movl %eax, -24(%rbp) #assign end + movl -16(%rbp), %eax #multiplication start + imull -24(%rbp), %eax + movl %eax, -28(%rbp) #multiplication end +.L3: + movl -28(%rbp), %eax #assign start + movl %eax, -24(%rbp) #assign end + movl -24(%rbp), %edi #adding param start + call printInteger + movl %eax, -32(%rbp) #store return from call +.L4: + movl -32(%rbp), %eax #assign start + movl %eax, -36(%rbp) #assign end + movl -24(%rbp), %eax #return y + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_neg.asc.exp b/tests/sprint4/expected/sp4_cg_neg.asc.exp index 647d812..701f487 100644 --- a/tests/sprint4/expected/sp4_cg_neg.asc.exp +++ b/tests/sprint4/expected/sp4_cg_neg.asc.exp @@ -1,9 +1,46 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [integer:x; integer:y] -006: x := 3; -007: y := -x; -008: return y; -009: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [integer:x; integer:y; integer: result] +040: +041: x := 3; +042: y := -x; +043: +044: result := printInteger(y); +045: return y; +046: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_neg.ir.exp b/tests/sprint4/expected/sp4_cg_neg.ir.exp index 6a42a7c..9bc3442 100644 --- a/tests/sprint4/expected/sp4_cg_neg.ir.exp +++ b/tests/sprint4/expected/sp4_cg_neg.ir.exp @@ -1,6 +1,13 @@ - 1: func : test - 2: $t0 = 3 - 3: x = $t0 - 4: $t1 = -x - 5: y = $t1 - 6: return : y + 1: func_dec : entry + 2: func : entry + 3: $t0 = 3 + 4: Label : 1 + 5: x = $t0 + 6: $t1 = -x + 7: Label : 2 + 8: y = $t1 + 9: param y + 10: call : printInteger 1 + 11: Label : 3 + 12: result = $t2 + 13: return : y diff --git a/tests/sprint4/expected/sp4_cg_neg.s.exp b/tests/sprint4/expected/sp4_cg_neg.s.exp index 5f61770..ddf2a63 100644 --- a/tests/sprint4/expected/sp4_cg_neg.s.exp +++ b/tests/sprint4/expected/sp4_cg_neg.s.exp @@ -1,8 +1,25 @@ - movl $3, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end - movl -8(%rbp), %eax #negation start - negl %eax - movl %eax, -12(%rbp) #negation end +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $3, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end + movl -16(%rbp), %eax #negation start + negl %eax + movl %eax, -20(%rbp) #negation end +.L2: + movl -20(%rbp), %eax #assign start + movl %eax, -24(%rbp) #assign end + movl -24(%rbp), %edi #adding param start + call printInteger + movl %eax, -28(%rbp) #store return from call +.L3: + movl -28(%rbp), %eax #assign start + movl %eax, -32(%rbp) #assign end + movl -24(%rbp), %eax #return y + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_not.asc.exp b/tests/sprint4/expected/sp4_cg_not.asc.exp index ac22520..634b5f6 100644 --- a/tests/sprint4/expected/sp4_cg_not.asc.exp +++ b/tests/sprint4/expected/sp4_cg_not.asc.exp @@ -1,9 +1,46 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [Boolean: c; Boolean: d] -006: c := true; -007: d := !c; -008: return 1; -009: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [Boolean: c; Boolean: d; integer: result] +040: +041: c := true; +042: d := !c; +043: +044: result := printBoolean(d); +045: return 1; +046: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_not.ir.exp b/tests/sprint4/expected/sp4_cg_not.ir.exp index f1b6d6b..5a9a503 100644 --- a/tests/sprint4/expected/sp4_cg_not.ir.exp +++ b/tests/sprint4/expected/sp4_cg_not.ir.exp @@ -1,7 +1,13 @@ - 1: func : test - 2: $t0 = true - 3: c = $t0 - 4: $t1 = !c - 5: d = $t1 - 6: $t2 = 1 - 7: return : $t2 + 1: func_dec : entry + 2: func : entry + 3: $t0 = true + 4: Label : 1 + 5: c = $t0 + 6: Label : 2 + 7: d = $t1 + 8: param d + 9: call : printBoolean 1 + 10: Label : 3 + 11: result = $t2 + 12: $t3 = 1 + 13: return : $t3 diff --git a/tests/sprint4/expected/sp4_cg_not.s.exp b/tests/sprint4/expected/sp4_cg_not.s.exp index 39c04ce..63b18a5 100644 --- a/tests/sprint4/expected/sp4_cg_not.s.exp +++ b/tests/sprint4/expected/sp4_cg_not.s.exp @@ -1,13 +1,21 @@ - movl $-1, -1(%rbp) #constant assign - movl -1(%rbp), %eax #assign start - movl %eax, -2(%rbp) #assign end - movzbl -2(%rbp), %eax #not start - testl %eax, %eax - setne %al - xorl $1, %eax - movzbl %al, %eax - movb %al, -3(%rbp) - andb $1, -3(%rbp) #not end - movl -3(%rbp), %eax #assign start - movl %eax, -4(%rbp) #assign end - movl $1, -8(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $-1, -9(%rbp) #constant assign +.L1: + movl -9(%rbp), %eax #assign start + movl %eax, -10(%rbp) #assign end +.L2: + movl -11(%rbp), %edi #adding param start + call printBoolean + movl %eax, -15(%rbp) #store return from call +.L3: + movl -15(%rbp), %eax #assign start + movl %eax, -19(%rbp) #assign end + movl $1, -23(%rbp) #constant assign + movl -23(%rbp), %eax #return $t3 + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_or.asc.exp b/tests/sprint4/expected/sp4_cg_or.asc.exp index 5a99180..44414e0 100644 --- a/tests/sprint4/expected/sp4_cg_or.asc.exp +++ b/tests/sprint4/expected/sp4_cg_or.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [Boolean:b; Boolean: c; Boolean: d] -006: c := true; -007: d := false; -008: d := c | d; -009: return 1; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [Boolean:b; Boolean: c; Boolean: d; integer: result] +040: +041: c := true; +042: d := false; +043: d := c | d; +044: +045: result := printBoolean(d); +046: return 1; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_or.ir.exp b/tests/sprint4/expected/sp4_cg_or.ir.exp index 5dfac99..0319c40 100644 --- a/tests/sprint4/expected/sp4_cg_or.ir.exp +++ b/tests/sprint4/expected/sp4_cg_or.ir.exp @@ -1,9 +1,24 @@ - 1: func : test - 2: $t0 = true - 3: c = $t0 - 4: $t1 = false - 5: d = $t1 - 6: $t2 = c | d - 7: d = $t2 - 8: $t3 = 1 - 9: return : $t3 + 1: func_dec : entry + 2: func : entry + 3: $t0 = true + 4: Label : 1 + 5: c = $t0 + 6: $t1 = false + 7: Label : 2 + 8: d = $t1 + 9: $t2 = true + 10: Label : 3 + 11: if c True GOTO 5 + 12: GOTO : 4 + 13: Label : 4 + 14: if d True GOTO 5 + 15: $t2 = false + 16: GOTO : 5 + 17: Label : 5 + 18: d = $t2 + 19: param d + 20: call : printBoolean 1 + 21: Label : 6 + 22: result = $t3 + 23: $t4 = 1 + 24: return : $t4 diff --git a/tests/sprint4/expected/sp4_cg_or.s.exp b/tests/sprint4/expected/sp4_cg_or.s.exp index 7faecdd..0493673 100644 --- a/tests/sprint4/expected/sp4_cg_or.s.exp +++ b/tests/sprint4/expected/sp4_cg_or.s.exp @@ -1,21 +1,31 @@ - movl $-1, -1(%rbp) #constant assign - movl -1(%rbp), %eax #assign start - movl %eax, -2(%rbp) #assign end - movl $-1, -3(%rbp) #constant assign - movl -3(%rbp), %eax #assign start - movl %eax, -4(%rbp) #assign end - cmpl $0, -2(%rbp) #start or - jne .L1or2 - cmpl $0, -4(%rbp) - je .L1or3 -.L1or2: - movl $1, %eax - jmp .L1or4 -.L1or3: - movl $0, %eax -.L1or4: - movb %al, -5(%rbp) - andb $1, -5(%rbp) #or end - movl -5(%rbp), %eax #assign start - movl %eax, -4(%rbp) #assign end - movl $1, -9(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $-1, -9(%rbp) #constant assign +.L1: + movl -9(%rbp), %eax #assign start + movl %eax, -10(%rbp) #assign end + movl $-1, -11(%rbp) #constant assign +.L2: + movl -11(%rbp), %eax #assign start + movl %eax, -12(%rbp) #assign end + movl $-1, -13(%rbp) #constant assign +.L3: +.L4: + movl $-1, -13(%rbp) #constant assign +.L5: + movl -13(%rbp), %eax #assign start + movl %eax, -12(%rbp) #assign end + movl -12(%rbp), %edi #adding param start + call printBoolean + movl %eax, -17(%rbp) #store return from call +.L6: + movl -17(%rbp), %eax #assign start + movl %eax, -21(%rbp) #assign end + movl $1, -25(%rbp) #constant assign + movl -25(%rbp), %eax #return $t4 + leave + ret diff --git a/tests/sprint4/expected/sp4_cg_sub.asc.exp b/tests/sprint4/expected/sp4_cg_sub.asc.exp index 4b4496c..8726fb3 100644 --- a/tests/sprint4/expected/sp4_cg_sub.asc.exp +++ b/tests/sprint4/expected/sp4_cg_sub.asc.exp @@ -1,10 +1,47 @@ -001: type main: integer -> integer -002: function test: main -003: -004: test (a) := { -005: [integer:x; integer:y] -006: y := 1; -007: x := 3; -008: y := x - y; -009: return y; -010: } \ No newline at end of file +001: +002: type string: 1 -> character +003: type BooleanXBoolean: [Boolean: x; Boolean: y] +004: type characterXcharacter: [character: x; character: y] +005: type integerXinteger: [integer: x; integer: y] +006: +007: type Boolean2Boolean: Boolean -> Boolean +008: type integer2integer: integer -> integer +009: type character2integer: character -> integer +010: type Boolean2integer: Boolean -> integer +011: type string2integer: string -> integer +012: type integerXinteger2integer: integerXinteger -> integer +013: type integerXinteger2Boolean: integerXinteger -> Boolean +014: type characterXcharacter2Boolean: characterXcharacter -> Boolean +015: type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +016: type integer2address: integer -> address +017: type address2integer: address -> integer +018: type integer2string: integer -> string +019: type integer2character: integer -> character +020: type integer2Boolean: integer -> Boolean +021: +022: +023: external function printInteger: integer2integer +024: external function printCharacter: character2integer +025: external function printBoolean: Boolean2integer +026: +027: external function printS: string2integer +028: external function printI: integer2integer +029: external function printC: character2integer +030: external function printB: Boolean2integer +031: +032: external function inS: integer2string +033: external function inI: integer2integer +034: external function inC: integer2character +035: +036: function entry: string2integer +037: +038: entry (arg) := { +039: [integer:x; integer:y; integer: result] +040: +041: y := 1; +042: x := 3; +043: y := x - y; +044: +045: result := printInteger(y); +046: return y; +047: } \ No newline at end of file diff --git a/tests/sprint4/expected/sp4_cg_sub.ir.exp b/tests/sprint4/expected/sp4_cg_sub.ir.exp index c4ef79a..23e60d4 100644 --- a/tests/sprint4/expected/sp4_cg_sub.ir.exp +++ b/tests/sprint4/expected/sp4_cg_sub.ir.exp @@ -1,8 +1,16 @@ - 1: func : test - 2: $t0 = 1 - 3: y = $t0 - 4: $t1 = 3 - 5: x = $t1 - 6: $t2 = x - y - 7: y = $t2 - 8: return : y + 1: func_dec : entry + 2: func : entry + 3: $t0 = 1 + 4: Label : 1 + 5: y = $t0 + 6: $t1 = 3 + 7: Label : 2 + 8: x = $t1 + 9: $t2 = x - y + 10: Label : 3 + 11: y = $t2 + 12: param y + 13: call : printInteger 1 + 14: Label : 4 + 15: result = $t3 + 16: return : y diff --git a/tests/sprint4/expected/sp4_cg_sub.s.exp b/tests/sprint4/expected/sp4_cg_sub.s.exp index 743ef59..bc47b9f 100644 --- a/tests/sprint4/expected/sp4_cg_sub.s.exp +++ b/tests/sprint4/expected/sp4_cg_sub.s.exp @@ -1,11 +1,29 @@ - movl $1, -4(%rbp) #constant assign - movl -4(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end - movl $3, -12(%rbp) #constant assign +.globl entry +entry: + pushq %rbp + movq %rsp, %rbp + subq $128, %rsp + movl %edi, -8(%rbp) #FunctionStart1param end + movl $1, -12(%rbp) #constant assign +.L1: movl -12(%rbp), %eax #assign start movl %eax, -16(%rbp) #assign end - movl -16(%rbp), %eax #subtraction start - subl -8(%rbp), %eax - movl %eax, -20(%rbp) #subtraction end + movl $3, -20(%rbp) #constant assign +.L2: movl -20(%rbp), %eax #assign start - movl %eax, -8(%rbp) #assign end + movl %eax, -24(%rbp) #assign end + movl -24(%rbp), %eax #subtraction start + subl -16(%rbp), %eax + movl %eax, -28(%rbp) #subtraction end +.L3: + movl -28(%rbp), %eax #assign start + movl %eax, -16(%rbp) #assign end + movl -16(%rbp), %edi #adding param start + call printInteger + movl %eax, -32(%rbp) #store return from call +.L4: + movl -32(%rbp), %eax #assign start + movl %eax, -36(%rbp) #assign end + movl -16(%rbp), %eax #return y + leave + ret diff --git a/tests/sprint4/test/sp4_cg_add.alpha b/tests/sprint4/test/sp4_cg_add.alpha index 0d5fb5a..96e2842 100644 --- a/tests/sprint4/test/sp4_cg_add.alpha +++ b/tests/sprint4/test/sp4_cg_add.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [integer:x; integer:y; integer: result] diff --git a/tests/sprint4/test/sp4_cg_and.alpha b/tests/sprint4/test/sp4_cg_and.alpha index a42409b..c4a1d47 100644 --- a/tests/sprint4/test/sp4_cg_and.alpha +++ b/tests/sprint4/test/sp4_cg_and.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [Boolean:b; Boolean: c; Boolean: d; integer: result] diff --git a/tests/sprint4/test/sp4_cg_calls.alpha b/tests/sprint4/test/sp4_cg_calls.alpha index 45a1512..c7beea1 100644 --- a/tests/sprint4/test/sp4_cg_calls.alpha +++ b/tests/sprint4/test/sp4_cg_calls.alpha @@ -1,18 +1,45 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" -(* Standard Alpha Library - Provided by Carl *) - type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + function entry: string2integer type rec: [integer: x; integer: y; integer: z; integer: a; integer: b; integer: c; integer: d] - type T2: rec -> integer type T: integer -> integer -type main: string -> integer -function entry: main function bar: T2 function ahh: T diff --git a/tests/sprint4/test/sp4_cg_div.alpha b/tests/sprint4/test/sp4_cg_div.alpha index 39d5a83..097b978 100644 --- a/tests/sprint4/test/sp4_cg_div.alpha +++ b/tests/sprint4/test/sp4_cg_div.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [integer:x; integer:y; integer: result] diff --git a/tests/sprint4/test/sp4_cg_equal_to.alpha b/tests/sprint4/test/sp4_cg_equal_to.alpha index a2823cc..1baae8e 100644 --- a/tests/sprint4/test/sp4_cg_equal_to.alpha +++ b/tests/sprint4/test/sp4_cg_equal_to.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [Boolean: b; integer: x; integer: y; integer: result] diff --git a/tests/sprint4/test/sp4_cg_fib.alpha b/tests/sprint4/test/sp4_cg_fib.alpha deleted file mode 100644 index df740d1..0000000 --- a/tests/sprint4/test/sp4_cg_fib.alpha +++ /dev/null @@ -1,34 +0,0 @@ -(* TEST: [-asc -tc -cg -ir] *) - -#include "std.alpha" - - -type M : string -> integer -function entry : M - -type fib: integer -> integer -function Fib : fib - -Fib(i) := { - [ Boolean: a ; Boolean: b ; Boolean: c] - if( i = 0 ) then { - return 7; - } else { - i := i; - } - b := b | (a & c); - b := 2 < 3; - if(i = 1) then { - return 1; - } else { - return i + Fib(i - 1); - } -} - -entry (arg) := { - [ integer: x; integer: y ] - x := 2; - x := Fib(2); - y := printInteger(Fib(2)); - return 1; -} diff --git a/tests/sprint4/test/sp4_cg_less_than.alpha b/tests/sprint4/test/sp4_cg_less_than.alpha index 77867ab..86ce4b7 100644 --- a/tests/sprint4/test/sp4_cg_less_than.alpha +++ b/tests/sprint4/test/sp4_cg_less_than.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [Boolean: b; integer: x; integer: y; integer: result] diff --git a/tests/sprint4/test/sp4_cg_mod.alpha b/tests/sprint4/test/sp4_cg_mod.alpha index fbd40d5..c405ec4 100644 --- a/tests/sprint4/test/sp4_cg_mod.alpha +++ b/tests/sprint4/test/sp4_cg_mod.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [integer:x; integer:y; integer: result] diff --git a/tests/sprint4/test/sp4_cg_mult.alpha b/tests/sprint4/test/sp4_cg_mult.alpha index 28e7ab6..157ba35 100644 --- a/tests/sprint4/test/sp4_cg_mult.alpha +++ b/tests/sprint4/test/sp4_cg_mult.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [integer:x; integer:y; integer: result] diff --git a/tests/sprint4/test/sp4_cg_neg.alpha b/tests/sprint4/test/sp4_cg_neg.alpha index 2ffe34a..bae60fa 100644 --- a/tests/sprint4/test/sp4_cg_neg.alpha +++ b/tests/sprint4/test/sp4_cg_neg.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [integer:x; integer:y; integer: result] diff --git a/tests/sprint4/test/sp4_cg_not.alpha b/tests/sprint4/test/sp4_cg_not.alpha index 6811471..1fd4ca4 100644 --- a/tests/sprint4/test/sp4_cg_not.alpha +++ b/tests/sprint4/test/sp4_cg_not.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [Boolean: c; Boolean: d; integer: result] diff --git a/tests/sprint4/test/sp4_cg_or.alpha b/tests/sprint4/test/sp4_cg_or.alpha index 61392c2..6ecac00 100644 --- a/tests/sprint4/test/sp4_cg_or.alpha +++ b/tests/sprint4/test/sp4_cg_or.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [Boolean:b; Boolean: c; Boolean: d; integer: result] diff --git a/tests/sprint4/test/sp4_cg_sub.alpha b/tests/sprint4/test/sp4_cg_sub.alpha index 4b60e57..43420bb 100644 --- a/tests/sprint4/test/sp4_cg_sub.alpha +++ b/tests/sprint4/test/sp4_cg_sub.alpha @@ -1,6 +1,40 @@ (* TEST: [-asc -tc -cg -ir] *) -#include "std.alpha" +type string: 1 -> character +type BooleanXBoolean: [Boolean: x; Boolean: y] +type characterXcharacter: [character: x; character: y] +type integerXinteger: [integer: x; integer: y] + +type Boolean2Boolean: Boolean -> Boolean +type integer2integer: integer -> integer +type character2integer: character -> integer +type Boolean2integer: Boolean -> integer +type string2integer: string -> integer +type integerXinteger2integer: integerXinteger -> integer +type integerXinteger2Boolean: integerXinteger -> Boolean +type characterXcharacter2Boolean: characterXcharacter -> Boolean +type BooleanXBoolean2Boolean: BooleanXBoolean -> Boolean +type integer2address: integer -> address +type address2integer: address -> integer +type integer2string: integer -> string +type integer2character: integer -> character +type integer2Boolean: integer -> Boolean + + +external function printInteger: integer2integer +external function printCharacter: character2integer +external function printBoolean: Boolean2integer + +external function printS: string2integer +external function printI: integer2integer +external function printC: character2integer +external function printB: Boolean2integer + +external function inS: integer2string +external function inI: integer2integer +external function inC: integer2character + +function entry: string2integer entry (arg) := { [integer:x; integer:y; integer: result]