public static AImplicitOperationDefinition newAImplicitOperationDefinition(
ILexNameToken name, List<APatternListTypePair> parameterPatterns,
APatternTypePair resultPattern, PStm body, ASpecificationStm spec)
{
AImplicitOperationDefinition result = new AImplicitOperationDefinition();
initDefinition(result, Pass.DEFS, name.getLocation(), name, NameScope.GLOBAL);
result.setParameterPatterns(parameterPatterns);
result.setResult(resultPattern);
result.setBody(body);
result.setExternals(spec.getExternals());
result.setPrecondition(spec.getPrecondition());
result.setPostcondition(spec.getPostcondition());
result.setErrors(spec.getErrors());
result.setIsConstructor(false);
List<PType> ptypes = new Vector<PType>();
for (APatternListTypePair ptp : parameterPatterns)
{
ptypes.addAll(getTypeList(ptp));
}
AOperationType operationType = AstFactory.newAOperationType(result.getLocation(), ptypes, result.getResult() == null ? AstFactory.newAVoidType(name.getLocation())
: result.getResult().getType());
result.setType(operationType);
return result;
}