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;
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;
TIntArrayList chrConstraintFrames = new TIntArrayList();
ArrayList<CHRConstraintEntry> chrConstraintEntries = new ArrayList<CHRConstraintEntry>();
+ public CHRRuleset currentRuleset;
+
+ public ModuleDebugInfo moduleDebugInfo;
+
+ private String definitionName;
+
static class Entry {
String name;
Variable variable;
}
}
- 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) {
int p = name.lastIndexOf('.');
char firstChar = name.charAt(p<0 ? 0 : p+1);
- return Character.isUpperCase(firstChar);
+ return Character.isUpperCase(firstChar) || firstChar == '(';
}
/* Tries to resolve name as a local variable. It is assumed
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(), Name.create(compilationContext.module.getName(), definitionName), location));
return new EConstant(location, value);
} catch (AmbiguousNameException e) {
if(SCLCompilerConfiguration.ALLOW_OVERLOADING)
public Expression realize() {
EConstant expression = new EConstant(altValue);
expression.location = location;
+ if(moduleDebugInfo != null)
+ moduleDebugInfo.symbolReferences.add(new SymbolReference(altValue.getName(), Name.create(compilationContext.module.getName(), definitionName), location));
return expression;
}
Locations.combine(definitions.get(0).location, definitions.get(definitions.size()-1).location),
cases);
}
-
- public SCLValue getBindFunction() {
- if(bindFunction == null) {
- bindFunction = getEnvironment().getValue(Names.Prelude_bind);
- }
- return bindFunction;
- }
public SCLRelation resolveRelation(long location, String name) {
SCLRelation relation = relations.get(name);