]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/contexts/TranslationContext.java
Collect reference hierarchy for SCL values
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / contexts / TranslationContext.java
index aeeb4cb5525b3be9f02bfb5cfee4e92fc857b8cb..b71c0ad276e69937fbde4d6be0969954b3dd151d 100644 (file)
@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 
 import org.simantics.scl.compiler.common.names.Name;
-import org.simantics.scl.compiler.common.names.Names;
 import org.simantics.scl.compiler.common.precedence.Associativity;
 import org.simantics.scl.compiler.common.precedence.Precedence;
 import org.simantics.scl.compiler.compilation.CompilationContext;
@@ -33,6 +32,8 @@ import org.simantics.scl.compiler.environment.Namespace;
 import org.simantics.scl.compiler.environment.filter.AcceptAllNamespaceFilter;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.internal.parsing.declarations.DValueAst;
+import org.simantics.scl.compiler.module.debug.ModuleDebugInfo;
+import org.simantics.scl.compiler.module.debug.SymbolReference;
 import org.simantics.scl.compiler.top.SCLCompilerConfiguration;
 import org.simantics.scl.compiler.types.Type;
 
@@ -77,6 +78,10 @@ public class TranslationContext extends TypeTranslationContext implements Enviro
     
     public CHRRuleset currentRuleset;
     
+    public ModuleDebugInfo moduleDebugInfo;
+    
+    private String definitionName;
+    
     static class Entry {
         String name;
         Variable variable;
@@ -104,9 +109,11 @@ public class TranslationContext extends TypeTranslationContext implements Enviro
         }
     }
     
-    public TranslationContext(CompilationContext compilationContext, LocalEnvironment localEnvironment) {
+    public TranslationContext(CompilationContext compilationContext, LocalEnvironment localEnvironment, String definitionName) {
         super(compilationContext);
         this.localEnvironment = localEnvironment;
+        this.moduleDebugInfo = compilationContext.moduleDebugInfo;
+        this.definitionName = definitionName;
     }
     
     public static boolean isConstructorName(String name) {
@@ -193,6 +200,8 @@ public class TranslationContext extends TypeTranslationContext implements Enviro
             String deprecatedDescription = value.isDeprecated();
             if(deprecatedDescription != null)
                 errorLog.logWarning(location, "Deprecated value " + value.getName().name + "." + (deprecatedDescription.isEmpty() ? "" : " " + deprecatedDescription));
+            if(moduleDebugInfo != null)
+                moduleDebugInfo.symbolReferences.add(new SymbolReference(value.getName(), definitionName, location));
             return new EConstant(location, value);
         } catch (AmbiguousNameException e) {
             if(SCLCompilerConfiguration.ALLOW_OVERLOADING)
@@ -219,6 +228,8 @@ public class TranslationContext extends TypeTranslationContext implements Enviro
                 public Expression realize() {
                     EConstant expression = new EConstant(altValue);
                     expression.location = location;
+                    if(moduleDebugInfo != null)
+                        moduleDebugInfo.symbolReferences.add(new SymbolReference(altValue.getName(), definitionName, location));
                     return expression;
                 }