forked from JavaTX/JavaCompilerCore
application of unifiers
This commit is contained in:
parent
fd5902f6dd
commit
8a40acb73e
@ -3,6 +3,7 @@ package de.dhbwstuttgart.typinference.unify.model;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
||||||
|
import de.dhbwstuttgart.typeinference.unifynew.Unifier;
|
||||||
|
|
||||||
public final class ExtendsType extends Type {
|
public final class ExtendsType extends Type {
|
||||||
private Type extendedType;
|
private Type extendedType;
|
||||||
@ -49,4 +50,9 @@ public final class ExtendsType extends Type {
|
|||||||
ExtendsType other = (ExtendsType) obj;
|
ExtendsType other = (ExtendsType) obj;
|
||||||
return other.getExtendedType().equals(extendedType);
|
return other.getExtendedType().equals(extendedType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type applyToTypeParams(Unifier unif) {
|
||||||
|
return new ExtendsType(extendedType.applyToTypeParams(unif));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package de.dhbwstuttgart.typinference.unify.model;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
||||||
|
import de.dhbwstuttgart.typeinference.unifynew.Unifier;
|
||||||
|
|
||||||
public final class PlaceholderType extends Type{
|
public final class PlaceholderType extends Type{
|
||||||
|
|
||||||
@ -32,4 +33,9 @@ public final class PlaceholderType extends Type{
|
|||||||
|
|
||||||
return ((PlaceholderType) obj).getName().equals(typeName);
|
return ((PlaceholderType) obj).getName().equals(typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type applyToTypeParams(Unifier unif) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,16 @@ package de.dhbwstuttgart.typinference.unify.model;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
||||||
|
import de.dhbwstuttgart.typeinference.unifynew.Unifier;
|
||||||
|
|
||||||
public final class SimpleType extends Type {
|
public final class SimpleType extends Type {
|
||||||
public SimpleType(String name, Type... typeParams) {
|
public SimpleType(String name, Type... typeParams) {
|
||||||
super(name, new TypeParams(typeParams));
|
super(name, new TypeParams(typeParams));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SimpleType(String name, TypeParams params) {
|
||||||
|
super(name, params);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<Type> smArg(IFiniteClosure fc) {
|
public Set<Type> smArg(IFiniteClosure fc) {
|
||||||
@ -36,4 +41,9 @@ public final class SimpleType extends Type {
|
|||||||
|
|
||||||
return other.getTypeParams().equals(typeParams);
|
return other.getTypeParams().equals(typeParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type applyToTypeParams(Unifier unif) {
|
||||||
|
return new SimpleType(typeName, typeParams.apply(unif));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package de.dhbwstuttgart.typinference.unify.model;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
||||||
|
import de.dhbwstuttgart.typeinference.unifynew.Unifier;
|
||||||
|
|
||||||
public final class SuperType extends Type {
|
public final class SuperType extends Type {
|
||||||
|
|
||||||
@ -50,4 +51,9 @@ public final class SuperType extends Type {
|
|||||||
SuperType other = (SuperType) obj;
|
SuperType other = (SuperType) obj;
|
||||||
return other.getSuperedType().equals(superedType);
|
return other.getSuperedType().equals(superedType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type applyToTypeParams(Unifier unif) {
|
||||||
|
return new SuperType(superedType.applyToTypeParams(unif));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package de.dhbwstuttgart.typinference.unify.model;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure;
|
||||||
|
import de.dhbwstuttgart.typeinference.unifynew.Unifier;
|
||||||
|
|
||||||
public abstract class Type {
|
public abstract class Type {
|
||||||
|
|
||||||
@ -31,6 +32,8 @@ public abstract class Type {
|
|||||||
|
|
||||||
public abstract Set<Type> grArg(IFiniteClosure fc);
|
public abstract Set<Type> grArg(IFiniteClosure fc);
|
||||||
|
|
||||||
|
public abstract Type applyToTypeParams(Unifier unif);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
String params = "";
|
String params = "";
|
||||||
|
@ -28,9 +28,11 @@ public final class TypeParams implements Iterable<Type>{
|
|||||||
return typeParams.length == 0;
|
return typeParams.length == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void apply(Unifier u) {
|
public TypeParams apply(Unifier unif) {
|
||||||
|
Type[] newParams = new Type[typeParams.length];
|
||||||
for(int i = 0; i < typeParams.length; i++)
|
for(int i = 0; i < typeParams.length; i++)
|
||||||
typeParams[i] = u.apply(typeParams[i]);
|
newParams[i] = typeParams[i].applyToTypeParams(unif);
|
||||||
|
return new TypeParams(newParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean contains(Type t) {
|
public boolean contains(Type t) {
|
||||||
|
Loading…
Reference in New Issue
Block a user