From 121b7a79d94f880337562462f6e7bc1d203f856b Mon Sep 17 00:00:00 2001
From: Sven Gestegard Robertz <sven.robertz@cs.lth.se>
Date: Fri, 21 Mar 2014 18:39:52 +0100
Subject: [PATCH] some simple tests of void type check performed

---
 compiler/TypeCheck.jrag   | 19 +++++++++++++------
 examples/simple/simple.lc | 11 +++++++++++
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/compiler/TypeCheck.jrag b/compiler/TypeCheck.jrag
index 1536ee8..747d830 100644
--- a/compiler/TypeCheck.jrag
+++ b/compiler/TypeCheck.jrag
@@ -1,29 +1,36 @@
 aspect TypeCheck {
   public void ASTNode.typeCheck() {
-    for (int i = 0; i < getNumChild(); i++) {
-      getChild(i).typeCheck();
-    }
+      // calls to the different type checks to be performed
+      nullTypeCheck();
   }
+
+// void is not allowed as a field in a struct or an array element
   
   syn boolean Type.isNull();
   eq Type.isNull() = false;
   eq VoidType.isNull() = true;
+  eq UserType.isNull() = decl().isNull();
+
+  syn boolean TypeDecl.isNull();
+  eq TypeDecl.isNull() = getType().isNull();
   
+  public void ASTNode.nullTypeCheck() {}
+ 
   public void Field.nullTypeCheck() {
     if(getType().isNull()) {
-      error(getName() + ": fields cannot be of type void");
+      error("field " + getName() + " may not be of type void");
     }
   }
 
   public void ParseArrayType.nullTypeCheck() {
     if(getType().isNull()) {
-      error("array elements cannot be of type void");
+      error("array elements may not be of type void");
     }
   }
 
   public void ArrayType.nullTypeCheck() {
     if(getType().isNull()) {
-      error("array elements cannot be of type void");
+      error("array elements may not be of type void");
     }
   }
 } 
diff --git a/examples/simple/simple.lc b/examples/simple/simple.lc
index c3725ac..f25295d 100644
--- a/examples/simple/simple.lc
+++ b/examples/simple/simple.lc
@@ -29,3 +29,14 @@ sample struct {
 typedef void avoid;
 
 sample avoid doavoid;
+
+// examples of errors: void may not be used
+// in structs or arrays
+//
+// sample struct {
+//  int a;
+//  avoid error;
+//} foo;
+//
+//sample void error2[2] ;
+//sample avoid error3[_];
-- 
GitLab