SystemFunction.java
package edu.udel.cis.vsl.tass.model.impl;
import java.io.PrintWriter;
import edu.udel.cis.vsl.tass.model.IF.SyntaxException;
import edu.udel.cis.vsl.tass.model.IF.SystemFunctionIF;
import edu.udel.cis.vsl.tass.model.IF.expression.ExpressionIF;
import edu.udel.cis.vsl.tass.model.IF.scope.ScopeIF;
import edu.udel.cis.vsl.tass.model.IF.type.TypeIF;
public class SystemFunction extends Function implements SystemFunctionIF {
private LibraryInfo libraryInfo = null;
private ExpressionIF guard;
private int idInLibrary = -1;
/**
* Creates new instance of SystemFunction with idInLibrary -1 and null
* libraryInfo. Those two fields are set by registering the function.
*/
SystemFunction(ScopeIF containingScope, String name, TypeIF returnType,
int numFormals, ExpressionIF guard) {
super(containingScope, name, returnType, numFormals);
this.guard = guard;
}
public void setIdInLibrary(int id) {
this.idInLibrary = id;
}
@Override
public String libraryName() {
return libraryInfo.libraryName();
}
public void setGuard(ExpressionIF guard) {
this.guard = guard;
}
@Override
public ExpressionIF guard() {
return guard;
}
@Override
protected void completeLocations() throws SyntaxException {
if (locations().size() != 0)
throw new SyntaxException(this,
"System function should not have body");
}
@Override
protected void printAdditionalData(String prefix, PrintWriter out,
boolean withSource) {
out.println(prefix + "library: " + libraryName() + " (library id:"
+ libraryInfo.libraryId() + ")");
out.println(prefix + "id in library: " + idInLibrary);
out.println(prefix + "guard: " + guard);
if (withSource) {
out.println(prefix + "| " + guard.getSource());
}
}
@Override
public int idInLibrary() {
return idInLibrary;
}
public void setLibraryInfo(LibraryInfo libraryInfo) {
this.libraryInfo = libraryInfo;
}
public LibraryInfo libraryInfo() {
return libraryInfo;
}
@Override
public int libraryId() {
return libraryInfo.libraryId();
}
}