]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java
Added module header feature to SCL language.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / parsing / parser / SCLParserImpl.java
index 5498b16b5f0552df54669752cd807e6dde64a53b..90c801403c859ab2218b47000daf86ceb8851bd7 100644 (file)
@@ -87,6 +87,7 @@ import org.simantics.scl.compiler.internal.parsing.declarations.DFixityAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DImportJavaAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DInstanceAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DMappingRelationAst;
+import org.simantics.scl.compiler.internal.parsing.declarations.DModuleHeader;
 import org.simantics.scl.compiler.internal.parsing.declarations.DRelationAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DRuleAst;
 import org.simantics.scl.compiler.internal.parsing.declarations.DTypeAst;
@@ -155,10 +156,22 @@ public class SCLParserImpl extends SCLParser {
     @Override
     protected Object reduceModule() {
         ArrayList<DeclarationAst> declarations = new ArrayList<DeclarationAst>(length()/2+1);
-        for(int i=0;i<length();i+=2)
-            declarations.add((DeclarationAst)get(i));
+        for(int i=0;i<length();i+=2) {
+            DeclarationAst declaration = (DeclarationAst)get(i);
+            if(declaration == null)
+                throw new NullPointerException();
+            declarations.add(declaration);
+        }
         return declarations;
     }
+    
+    @Override
+    protected Object reduceModuleHeader() {
+        FieldAssignment[] fields = new FieldAssignment[length()/2-1];
+        for(int i=0;i<fields.length;++i)
+            fields[i] = (FieldAssignment)get(2+i*2);
+        return new DModuleHeader(fields);
+    }
 
     @Override
     protected Object reduceLocalTypeAnnotation() {