summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2020-08-18 07:21:15 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2020-08-18 07:21:15 +0200
commitfbd0896eef2f79bdd7006c9405e441b9f56562a8 (patch)
tree59ba1e620396f2a38fb91180bb3a46ab56540d67
parentfb582b6ff0ba7b5a675c9fa95b8921769873352e (diff)
downloadcompilertests-fbd0896eef2f79bdd7006c9405e441b9f56562a8.tar.gz
compilertests-fbd0896eef2f79bdd7006c9405e441b9f56562a8.tar.bz2
added another test for procedure parameter mismatch
-rwxr-xr-xecomp-c/test.sh1
-rw-r--r--ecomp-c/tests/procedure_call_too_few_parameters.e20
-rw-r--r--ecomp-c/tests/procedure_call_too_few_parameters.easm48
-rw-r--r--ecomp-c/tests/procedure_call_too_few_parameters.ecomp_err1
4 files changed, 70 insertions, 0 deletions
diff --git a/ecomp-c/test.sh b/ecomp-c/test.sh
index fbcc2b6..12ba9cf 100755
--- a/ecomp-c/test.sh
+++ b/ecomp-c/test.sh
@@ -28,6 +28,7 @@ procedure_local_variables
procedure_scoping
procedure_call_value_parameters
procedure_call_too_many_parameters
+procedure_call_too_few_parameters
example_divisors
example_divisors_array_result
example_reverse_array
diff --git a/ecomp-c/tests/procedure_call_too_few_parameters.e b/ecomp-c/tests/procedure_call_too_few_parameters.e
new file mode 100644
index 0000000..0befb69
--- /dev/null
+++ b/ecomp-c/tests/procedure_call_too_few_parameters.e
@@ -0,0 +1,20 @@
+/*
+ * procedure call with too few number of parameters
+ */
+
+module procedure_call_too_few_parameters;
+
+var
+ i : integer := 1;
+
+procedure proc( x : integer );
+var
+ l : integer;
+begin
+ l := x;
+ i := l;
+end
+
+begin
+ proc;
+end
diff --git a/ecomp-c/tests/procedure_call_too_few_parameters.easm b/ecomp-c/tests/procedure_call_too_few_parameters.easm
new file mode 100644
index 0000000..d7fb8b4
--- /dev/null
+++ b/ecomp-c/tests/procedure_call_too_few_parameters.easm
@@ -0,0 +1,48 @@
+format binary
+use32
+org $1000000
+jmp __global_0
+; DECL i -> integer, 1
+; param x, offset: -8, size: 4
+; PROC proc
+__global_proc:
+push ebp
+push esp
+pop ebp
+; DECL l -> integer, 0
+; local l, offset: 4, size: 4
+mov eax, 4
+sub esp, eax
+push ebp
+pop ebx
+mov eax, 4
+sub ebx, eax
+mov eax, 0
+mov [ebx], eax
+; LET l <- x
+push ebp
+pop ebx
+mov eax, -8
+sub ebx, eax
+mov eax, [ebx]
+push eax
+push ebp
+pop ebx
+mov eax, 4
+sub ebx, eax
+pop eax
+mov [ebx], eax
+; LET i <- l
+push ebp
+pop ebx
+mov eax, 4
+sub ebx, eax
+mov eax, [ebx]
+push eax
+pop eax
+mov [i], eax
+mov eax, 4
+add esp, eax
+pop ebp
+ret 4
+__global_0:
diff --git a/ecomp-c/tests/procedure_call_too_few_parameters.ecomp_err b/ecomp-c/tests/procedure_call_too_few_parameters.ecomp_err
new file mode 100644
index 0000000..24aca6d
--- /dev/null
+++ b/ecomp-c/tests/procedure_call_too_few_parameters.ecomp_err
@@ -0,0 +1 @@
+Error line 20, pos 1: procedure 'proc' expects 1 parameter(s), but 0 were given