/*
* This file is part of the X10 project (http://x10-lang.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* This file was originally derived from the Polyglot extensible compiler framework.
*
* (C) Copyright 2000-2007 Polyglot project group, Cornell University
* (C) Copyright IBM Corporation 2007-2012.
*/
package polyglot.types;
import java.util.List;
import polyglot.util.Position;
public abstract class FunctionInstance_c<T extends FunctionDef> extends ProcedureInstance_c<T> implements FunctionInstance<T> {
private static final long serialVersionUID = 7771092895217853763L;
public FunctionInstance_c(TypeSystem ts, Position pos, Position errorPos, Ref<? extends T> def) {
super(ts, pos, errorPos, def);
}
protected Ref<? extends Type> returnType;
public FunctionInstance<T> returnType(Type returnType) {
return returnTypeRef(Types.ref(returnType));
}
public FunctionInstance<T> returnTypeRef(Ref<? extends Type> returnType) {
FunctionInstance_c<T> p = this.<FunctionInstance_c<T>>copyGeneric();
p.returnType = returnType;
return p;
}
public Type returnType() {
if (returnType == null) {
return def().returnType().get();
}
return Types.get(returnType);
}
public Ref<? extends Type> returnTypeRef() {
if (returnType == null) {
return def().returnType();
}
return returnType;
}
public FunctionInstance<T> formalTypes(List<Type> formalTypes) {
return (FunctionInstance<T>) super.formalTypes(formalTypes);
}
public FunctionInstance<T> throwTypes(List<Type> throwTypes) {
return (FunctionInstance<T>) super.throwTypes(throwTypes);
}
}