import org.simantics.scl.compiler.common.names.Names;
import org.simantics.scl.compiler.constants.StringConstant;
+import org.simantics.scl.compiler.dynamic.SafeDynamic;
import org.simantics.scl.compiler.elaboration.expressions.EApply;
import org.simantics.scl.compiler.elaboration.expressions.EBlock;
import org.simantics.scl.compiler.elaboration.expressions.EConstant;
import org.simantics.scl.compiler.environment.LocalEnvironment;
import org.simantics.scl.compiler.environment.specification.EnvironmentSpecification;
import org.simantics.scl.compiler.errors.CompilationError;
+import org.simantics.scl.compiler.errors.ErrorSeverity;
import org.simantics.scl.compiler.errors.Locations;
import org.simantics.scl.compiler.internal.codegen.utils.NameMangling;
import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException;
*/
private boolean validateOnly;
+ public CommandSession(ModuleRepository moduleRepository) {
+ this(moduleRepository, SCLReporting.getCurrentReportingHandler());
+ }
+
public CommandSession(ModuleRepository moduleRepository, SCLReportingHandler handler) {
this.moduleRepository = moduleRepository;
this.defaultHandler = new PrintDecorator(
defaultHandler.printError(failure.toString());
if(failure.reason instanceof CompilationError[])
for(CompilationError error : (CompilationError[])failure.reason) {
- defaultHandler.printError(" " + error.description);
+ if(error.severity != ErrorSeverity.WARNING)
+ defaultHandler.printError(" " + error.description);
}
}
for(CommandSessionImportEntry entry : importEntries)
if(e.location != Locations.NO_LOCATION)
handler.printError(parser.reader.locationUnderlining(e.location));
handler.printError(e.getMessage());
- } catch(Exception e) {
+ } catch (Exception | AssertionError e) {
if(e instanceof InterruptedException)
handler.printError("Execution interrupted.");
else
b.append("\tat ");
if("_SCL_Module".equals(fileName)
|| "_SCL_TypeClassInstance".equals(fileName))
- b.append(NameMangling.demangle(methodName))
+ b.append(className)
+ .append('.')
+ .append(NameMangling.demangle(methodName))
.append('(').append(element.getLineNumber()).append(')');
else
b.append(element);
variableTypes.put(name, type);
}
+ public void setVariable(String name, SafeDynamic typeAndValue) {
+ variableValues.put(name, typeAndValue.value);
+ variableTypes.put(name, typeAndValue.type_);
+ }
+
public Object getVariableValue(String name) {
return variableValues.get(name);
}
return variableTypes.get(name);
}
+ public SafeDynamic getVariableValueAndType(String name) {
+ Type type = variableTypes.get(name);
+ if(type == null)
+ return null;
+ Object value = variableValues.get(name);
+ return new SafeDynamic(type, value);
+ }
+
public void removeVariable(String name) {
variableValues.remove(name);
variableTypes.remove(name);
formatException(handler, e);
}
}
-
+
public static CompilationError[] validate(ModuleRepository moduleRepository,StringReader commandReader) {
CommandSession session = new CommandSession(moduleRepository, null);
return session.validate(commandReader);