]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/header/ModuleHeader.java
(refs #7250) CHR rules modularization (first working version)
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / header / ModuleHeader.java
index c49b49abed9da680c60a525602bd28a4b17026e2..80acf17c571cb242e2db401233525006f118908d 100644 (file)
@@ -1,18 +1,25 @@
 package org.simantics.scl.compiler.internal.header;
 
+import java.util.List;
+
+import org.simantics.scl.compiler.elaboration.expressions.EVar;
 import org.simantics.scl.compiler.elaboration.expressions.annotations.AnnotationUtils;
 import org.simantics.scl.compiler.elaboration.expressions.records.FieldAssignment;
 import org.simantics.scl.compiler.errors.ErrorLog;
-import org.simantics.scl.compiler.internal.parsing.declarations.DModuleHeader;
 
 public class ModuleHeader {
     public String classLoader;
     public long classLoaderLocation;
+    public String defaultLocalName;
+    public List<EVar> export;
+    // Features
+    public boolean chr;
+    public boolean fields;
     
-    private void read(ErrorLog errorLog, DModuleHeader header) {
-        for(FieldAssignment assignment : header.fields)
+    private void read(ErrorLog errorLog, FieldAssignment[] fields) {
+        for(FieldAssignment assignment : fields)
             switch(assignment.name) {
-            case "classLoader":
+            case "bundle":
                 if(assignment.value == null)
                     errorLog.log(assignment.location, "Property classLoader needs to be given a string value.");
                 else {
@@ -23,16 +30,44 @@ public class ModuleHeader {
                         classLoaderLocation = assignment.location;
                 }
                 break;
+            case "export":
+                if(assignment.value == null)
+                    errorLog.log(assignment.location, "Property export needs to be given a string list value.");
+                else {
+                    export = AnnotationUtils.extractIdentifierList(assignment.value);
+                    if(export == null)
+                        errorLog.log(assignment.value.location, "Expected a list of exported items.");
+                }
+                break;
+            case "defaultLocalName":
+               if(assignment.value == null)
+                    errorLog.log(assignment.location, "Property defaultLocalName needs to be given a string value.");
+               else {
+                       defaultLocalName = AnnotationUtils.extractString(assignment.value);
+                       if(defaultLocalName == null)
+                               errorLog.log(assignment.value.location, "Expected string here.");
+               }
+               break;
+            case "fields":
+                if(assignment.value != null)
+                    errorLog.log(assignment.location, "No value expected for property fields.");
+                this.fields = true;
+                break;
+            case "chr":
+                if(assignment.value != null)
+                    errorLog.log(assignment.location, "No value expected for property chr.");
+                this.chr = true;
+                break;                
             default:
                 errorLog.logWarning(assignment.location, "Unknown module header field was skipped.");
             }
     }
     
-    public static ModuleHeader process(ErrorLog errorLog, DModuleHeader header) {
-        if(header == null)
+    public static ModuleHeader process(ErrorLog errorLog, FieldAssignment[] fields) {
+        if(fields == null)
             return null;
         ModuleHeader result = new ModuleHeader();
-        result.read(errorLog, header);
+        result.read(errorLog, fields);
         return result;
     }
 }