1 package org.simantics.scl.compiler.elaboration.expressions;
3 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
4 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
5 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
6 import org.simantics.scl.compiler.errors.Locations;
7 import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator;
8 import org.simantics.scl.compiler.types.Type;
9 import org.simantics.scl.compiler.types.exceptions.MatchException;
11 import gnu.trove.map.hash.TObjectIntHashMap;
12 import gnu.trove.set.hash.THashSet;
13 import gnu.trove.set.hash.TIntHashSet;
15 public abstract class ASTExpression extends SimplifiableExpression {
16 public ASTExpression() {
20 final public Expression simplify(SimplificationContext context) {
21 throw new InternalCompilerError(getClass().getSimpleName() + " does not support simplify.");
25 final public void collectFreeVariables(THashSet<Variable> vars) {
26 throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectFreeVariables.");
30 final public void collectRefs(TObjectIntHashMap<Object> allRefs,
32 throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectRefs.");
36 final public void collectVars(TObjectIntHashMap<Variable> allVars,
38 throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectVars.");
42 final protected void updateType() throws MatchException {
43 throw new InternalCompilerError(getClass().getSimpleName() + " does not support updateType.");
47 final public Expression decorate(ExpressionDecorator decorator) {
48 throw new InternalCompilerError(getClass().getSimpleName() + " does not support decorate.");
52 final public void collectEffects(THashSet<Type> effects) {
53 throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectEffects.");
57 public void accept(ExpressionVisitor visitor) {
58 throw new InternalCompilerError(getClass().getSimpleName() + " does not support accept.");
62 public Expression accept(ExpressionTransformer transformer) {
63 throw new InternalCompilerError(getClass().getSimpleName() + " does not support accept.");
67 public Expression checkBasicType(TypingContext context, Type requiredType) {
68 throw new InternalCompilerError("Class " +
69 getClass().getSimpleName() + " does not implement method checkBasicType.");
73 public Expression inferType(TypingContext context) {
74 throw new InternalCompilerError("Class " +
75 getClass().getSimpleName() + " does not implement method inferType.");
79 public void forVariables(VariableProcedure procedure) {
80 throw new InternalCompilerError("Class " +
81 getClass().getSimpleName() + " does not implement method forVariables.");
85 public void setLocationDeep(long loc) {
86 if(location == Locations.NO_LOCATION)