public PTypeList(PType act) { add(act); }
public PTypeList getBaseTypes() { PTypeList basetypes = new PTypeList(); if (superobjects.isEmpty()) { basetypes.add(type); } else { for (ObjectValue sup : superobjects) { basetypes.addAll(sup.getBaseTypes()); } } return basetypes; }
private PTypeList getPTypes(ATypeDefinition typedef) { PTypeList ptypes = new PTypeList(); if (typedef.getInvType() instanceof ARecordInvariantType) { // Records are inv_R: R +> bool AUnresolvedType uType= AstFactory.newAUnresolvedType(typedef.getName().clone()); ptypes.add(uType.clone()); ptypes.add(uType.clone()); } else { // Named types are inv_T: x +> bool, for T = x ANamedInvariantType nt = (ANamedInvariantType) typedef.getInvType(); ptypes.add(nt.getType().clone()); ptypes.add(nt.getType().clone()); } return ptypes; }
@SuppressWarnings("unchecked") public AFunctionType getPostType(AOperationType type, AStateDefinition state, SClassDefinition classname, boolean isStatic) { PTypeList params = new PTypeList(); params.addAll((LinkedList<PType>) type.getParameters().clone()); if (!(type.getResult() instanceof AVoidType)) { params.add(type.getResult().clone()); } if (state != null) { params.add(AstFactory.newAUnresolvedType(state.getName())); params.add(AstFactory.newAUnresolvedType(state.getName())); } else if (classname != null) { AMapMapType map = AstFactory.newAMapMapType(type.getLocation(), AstFactory.newASeqSeqType(type.getLocation(), AstFactory.newACharBasicType(type.getLocation())), AstFactory.newAUnknownType(type.getLocation())); params.add(map); if (!isStatic) { params.add(AstFactory.newAUnresolvedType(classname.getName())); } } return AstFactory.newAFunctionType(type.getLocation(), false, params, AstFactory.newABooleanBasicType(type.getLocation())); }
public AExplicitFunctionDefinition getInvDefinition(AStateDefinition d) { ILexLocation loc = d.getInvPattern().getLocation(); List<PPattern> params = new Vector<PPattern>(); params.add(d.getInvPattern().clone()); List<List<PPattern>> parameters = new Vector<List<PPattern>>(); parameters.add(params); PTypeList ptypes = new PTypeList(); ptypes.add(AstFactory.newAUnresolvedType(d.getName())); AFunctionType ftype = AstFactory.newAFunctionType(loc, false, ptypes, AstFactory.newABooleanBasicType(loc)); return AstFactory.newAExplicitFunctionDefinition(d.getName().getInvName(loc), NameScope.GLOBAL, null, ftype, parameters, d.getInvExpression(), null, null, true, null); }
@SuppressWarnings("unchecked") public AFunctionType getPreType(AOperationType type, AStateDefinition state, SClassDefinition classname, boolean isStatic) { if (state != null) { PTypeList params = new PTypeList(); params.addAll((LinkedList<PType>) type.getParameters().clone()); params.add(AstFactory.newAUnresolvedType(state.getName())); return AstFactory.newAFunctionType(type.getLocation(), false, params, AstFactory.newABooleanBasicType(type.getLocation())); } else if (classname != null && !isStatic) { PTypeList params = new PTypeList(); params.addAll((Collection<? extends PType>) type.getParameters().clone()); params.add(AstFactory.newAUnresolvedType(classname.getName())); return AstFactory.newAFunctionType(type.getLocation(), false, params, AstFactory.newABooleanBasicType(type.getLocation())); } else { return AstFactory.newAFunctionType(type.getLocation(), false, (List<PType>) type.getParameters().clone(), AstFactory.newABooleanBasicType(type.getLocation())); } }
@Override public PType caseAMultiBindListDefinition(AMultiBindListDefinition node) throws AnalysisException { PTypeList types = new PTypeList(); for (PDefinition definition : node.getDefs()) { types.add(definition.getType()); } AUnionType result = AstFactory.newAUnionType(node.getLocation(), types); return result; }
public AExplicitFunctionDefinition getInitDefinition(AStateDefinition d) { ILexLocation loc = d.getInitPattern().getLocation(); List<PPattern> params = new Vector<PPattern>(); params.add(d.getInitPattern().clone()); List<List<PPattern>> parameters = new Vector<List<PPattern>>(); parameters.add(params); PTypeList ptypes = new PTypeList(); ptypes.add(AstFactory.newAUnresolvedType(d.getName())); AFunctionType ftype = AstFactory.newAFunctionType(loc, false, ptypes, AstFactory.newABooleanBasicType(loc)); PExp body = AstFactory.newAStateInitExp(d); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(d.getName().getInitName(loc), NameScope.GLOBAL, null, ftype, parameters, body, null, null, false, null); return def; }
@Override public PType caseATuplePattern(ATuplePattern pattern) throws AnalysisException { PTypeList list = new PTypeList(); for (PPattern p : pattern.getPlist()) { list.add(af.createPPatternAssistant().getPossibleType(p)); } return list.getType(pattern.getLocation()); }
types.add(pType);// .clone()
public AExplicitFunctionDefinition getInvDefinition(ATypeDefinition d) { ILexLocation loc = d.getInvPattern().getLocation(); List<PPattern> params = new Vector<PPattern>(); params.add(d.getInvPattern().clone()); List<List<PPattern>> parameters = new Vector<List<PPattern>>(); parameters.add(params); PTypeList ptypes = new PTypeList(); if (d.getInvType() instanceof ARecordInvariantType) { // Records are inv_R: R +> bool ptypes.add(AstFactory.newAUnresolvedType(d.getName().clone())); } else { // Named types are inv_T: x +> bool, for T = x ANamedInvariantType nt = (ANamedInvariantType) d.getInvType(); ptypes.add(nt.getType().clone()); } AFunctionType ftype = AstFactory.newAFunctionType(loc, false, ptypes, AstFactory.newABooleanBasicType(loc)); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(d.getName().getInvName(loc), NameScope.GLOBAL, null, ftype, parameters, d.getInvExpression(), null, null, true, null); def.setAccess(d.getAccess().clone()); // Same as type's def.setClassDefinition(d.getClassDefinition()); return def; }
@Override public ValueList defaultSMapType(SMapType type, Context ctxt) throws AnalysisException { PTypeList tuple = new PTypeList(); tuple.add(type.getFrom()); tuple.add(type.getTo()); ValueList results = new ValueList(); ValueList tuples = getAllValues(tuple, ctxt); ValueSet set = new ValueSet(); set.addAll(tuples); List<ValueSet> psets = set.powerSet(); for (ValueSet map : psets) { ValueMap result = new ValueMap(); for (Value v : map) { TupleValue tv = (TupleValue) v; result.put(tv.values.get(0), tv.values.get(1)); } results.add(new MapValue(result)); } return results; }
plist.add(pt);
plist.add(pt);
list.add(result.get(i).getType(type.getLocation()));
undefined.add(composeType); } else