Skip to content

Commit bb437e2

Browse files
committed
[Dana] Add programs with more fine-grained type errors
1 parent 0cc7bad commit bb437e2

File tree

9 files changed

+38
-16
lines changed

9 files changed

+38
-16
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def main
2+
break # Error: break outside loop
3+
return: 42
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def main
2+
continue # Error: continue outside loop
3+
return: 42

dana/programs-erroneous/semantic_error.dana

Lines changed: 0 additions & 10 deletions
This file was deleted.

dana/programs-erroneous/powint-erroneous.dana renamed to dana/programs-erroneous/strwrite_err.dana

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
(*
2+
This is the powint program containing a semantic error in a call to
3+
the writeString function. The function expexts a byte[] argunment,
4+
not an int type (variable temp below).
5+
*)
6+
17
def main
28

39
def powint: base as int, exp as int, mod as int, result as ref int
@@ -16,7 +22,7 @@ def main
1622
else:
1723
result := (base * temp * temp) % mod
1824

19-
writeString: temp # SEMANTIC ERROR: Calling writeString (expects byte[]) with an int argument (temp)
25+
writeString: temp # SEMANTIC ERROR on this line
2026

2127
var b is int
2228
var e is int
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
def main
2+
var x is int
3+
var s is byte[10]
4+
5+
return: x + s # Error: cannot add int and byte[]

dana/programs-erroneous/bsort_error.dana renamed to dana/programs-erroneous/type_mismatch.dana

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
(* This is the bsort.dana program with a type error *)
2+
13
def main
24

35
def bsort: n as int, x as int []
@@ -43,12 +45,10 @@ def main
4345
i := 0
4446
loop:
4547
if i < 16:
46-
seed := (seed * 137 + 220 + i) % 101
48+
seed := (seed * 137 + 221 + i) % 101
4749
x[i] := seed
4850
i := i+1
4951
else: break
5052
writeArray: "Initial array: ", 16, x
51-
# according to the grammar, x here should be a proc-call of function `x` with no arguments
52-
# error should be that x is a variable of type int[16], not a function.
53-
bsort: 16, x
54-
writeArray: "Sorted array: ", 16, x
53+
bsort: 16, x[0] # ERROR: Type mismatch
54+
writeArray: "Sorted array: ", 16, x
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def main
2+
var x y is int
3+
var s is byte[10]
4+
5+
x := z # Error: z is not declared
6+
return: 42
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
def main
2+
var x is int
3+
4+
callMe: 42 # Error: callMe is not declared
5+
return: x
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
def main
2+
var x is int
3+
4+
return: foo(x, 42) # Error: foo is not defined

0 commit comments

Comments
 (0)