Skip to content
Snippets Groups Projects
Select Git revision
  • 7b64e835ebc7f3a5d22869333f12b057ffe8771e
  • master default protected
  • v1.0
3 results

gravity.m

Blame
  • TypeCheck.jrag 953 B
    aspect TypeCheck {
      public void ASTNode.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("field " + getName() + " of struct "+ declName()+ " may not be of type void");
        }
      }
    
      public void ParseArrayType.nullTypeCheck() {
        if(getType().isNull()) {
          error("elements of array "+declName()+" may not be of type void");
        }
      }
    
      public void ArrayType.nullTypeCheck() {
        if(getType().isNull()) {
          error("elements of array "+declName()+" may not be of type void");
        }
      }
    }