FunctionValueType.java
package edu.udel.cis.vsl.tass.dynamic.impl.type;
import edu.udel.cis.vsl.tass.dynamic.IF.type.FunctionValueTypeIF;
import edu.udel.cis.vsl.tass.dynamic.IF.type.ValueTypeIF;
public class FunctionValueType extends ValueType implements FunctionValueTypeIF {
public FunctionValueType(int instanceId, ValueTypeIF returnType,
ValueTypeIF[] argumentTypes) {
super(instanceId, true, new ValueType[1 + argumentTypes.length]);
assert returnType != null;
int i = 0;
boolean commit = returnType.isCommitted();
while (i < argumentTypes.length) {
ValueType argument = (ValueType) argumentTypes[i];
assert argument != null;
setChild(i, argument);
i++;
commit = commit && argument.isCommitted();
}
setChild(i, (ValueType) returnType);
if (commit)
commit();
}
@Override
public ValueTypeIF argumentType(int i) {
return (ValueTypeIF) getChild(i);
}
@Override
public int numArguments() {
return numChildren() - 1;
}
@Override
public ValueTypeIF returnType() {
return (ValueTypeIF) getChild(numChildren() - 1);
}
@Override
String stringRecursive() {
String result = "Fun[";
int numArgs = numArguments();
setFlag(true);
for (int i = 0; i < numArgs; i++) {
result += ((ValueType) argumentType(i)).stringRecursive();
if (i < numArgs - 1)
result += ",";
}
result += "->" + ((ValueType) returnType()).stringRecursive() + "]";
return result;
}
}