import org.simantics.scl.compiler.environment.Environment;
import org.simantics.scl.compiler.environment.EnvironmentFactory;
import org.simantics.scl.compiler.environment.Environments;
+import org.simantics.scl.compiler.errors.CompilationError;
import org.simantics.scl.compiler.errors.ErrorLog;
+import org.simantics.scl.compiler.errors.ErrorSeverity;
import org.simantics.scl.compiler.errors.Locations;
import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor;
import org.simantics.scl.compiler.internal.codegen.effects.ThreadLocalVariable;
compilationContext.environment = new EnvironmentOfModule(importedEnvironment, module);
} catch (ImportFailureException e) {
for(ImportFailure failure : e.failures)
- errorLog.log(failure.location, failure.toString());
+ errorLog.log(new CompilationError(failure.location, failure.toString(), ErrorSeverity.IMPORT_ERROR));
return;
}
for(ImportDeclaration importAst : importsAst)
type);
if(callJava != null) {
NameExistenceChecks.checkIfValueExists(errorLog, javaMethod.location,
- importedEnvironment, name);
+ importedEnvironment, module, name);
SCLValue value = module.addValue(name, callJava);
value.definitionLocation = javaMethod.methodName.location;
if(isPrivate)
int constructorTag = 0;
for(Constructor constructor : dataType.constructors) {
SCLValue value = new SCLValue(constructor.name);
+ value.definitionLocation = constructor.loc;
SCLConstructor sclConstructor =
new SCLConstructor(
constructor.name.name,
value.setType(constructor.getType());
NameExistenceChecks.checkIfValueExists(errorLog, constructor.loc,
- importedEnvironment, constructor.name.name);
+ importedEnvironment, module, constructor.name.name);
if(module.addValue(value)) {
errorLog.log(constructor.loc,
"Value " + constructor.name.name + " is already defined.");
SCLValue value = method.createValue();
value.definitionLocation = method.location;
NameExistenceChecks.checkIfValueExists(errorLog, Locations.NO_LOCATION,
- importedEnvironment, value.getName().name);
+ importedEnvironment, module, value.getName().name);
if(module.addValue(value)) {
String name = method.getName();
long location = valueDefinitionsAst.getLocation(name);
NameExistenceChecks.checkIfValueExists(errorLog, location,
- importedEnvironment, value.getName().name);
+ importedEnvironment, module, value.getName().name);
value.definitionLocation = location;
if(module.addValue(value))
errorLog.log(location, "Value " + name + " is already defined.");
for(String name : valueDefinitionsAst.getValueNames()) {
ArrayList<DValueAst> defs = valueDefinitionsAst.getDefinition(name);
+ if(defs.size() != 1 || !(defs.get(0).value instanceof EPreCHRRulesetConstructor))
+ continue;
+ try {
+ SCLValue value = module.getValue(name);
+ TranslationContext context = createTranslationContext();
+ Expression expression = context.translateCases2(defs);
+ value.setExpression(expression);
+
+ if(exportMap != null && exportMap.remove(name) == null)
+ value.addProperty(PrivateProperty.INSTANCE);
+ } catch(RuntimeException e) {
+ errorLog.setExceptionPosition(defs.get(0).location);
+ throw e;
+ }
+ }
+ for(String name : valueDefinitionsAst.getValueNames()) {
+ ArrayList<DValueAst> defs = valueDefinitionsAst.getDefinition(name);
+ if(defs.size() == 1 && defs.get(0).value instanceof EPreCHRRulesetConstructor)
+ continue;
try {
SCLValue value = module.getValue(name);
TranslationContext context = createTranslationContext();