public static List<PMultipleBind> bindListFromPattern(PPattern pattern, PType type) { List<PMultipleBind> bindList = new LinkedList<PMultipleBind>(); ATypeMultipleBind tmBind = new ATypeMultipleBind(); List<PPattern> plist = new LinkedList<PPattern>(); plist.add(pattern.clone()); tmBind.setPlist(plist); tmBind.setType(type.clone()); bindList.add(tmBind); return bindList; }
private List<PMultipleBind> makeBinds() { List<PMultipleBind> result = new LinkedList<PMultipleBind>(); Iterator<PType> types = argtypes.iterator(); for (List<PPattern> params : paramPatternList) { for (PPattern param : params) { ATypeMultipleBind typeBind = new ATypeMultipleBind(); List<PPattern> one = new Vector<PPattern>(); one.add(param.clone()); typeBind.setPlist(one); PType type = types.next(); typeBind.setType(type.clone()); result.add(typeBind); } } return result; }
private void addParameterBinds(LinkedList<PMultipleBind> r) { Iterator<PType> types = deftype.getParameters().iterator(); for (PPattern p : paramPatternList) { ATypeMultipleBind tmBind = new ATypeMultipleBind(); List<PPattern> pats = new LinkedList<PPattern>(); pats.add(p.clone()); tmBind.setType(types.next().clone()); tmBind.setPlist(pats); r.add(tmBind); } }
public static ATypeMultipleBind newATypeMultipleBind(List<PPattern> plist, PType readType) { ATypeMultipleBind result = new ATypeMultipleBind(); result.setLocation(plist.get(0).getLocation()); result.setPlist(plist); result.setType(readType); return result; }
/** * Create a multiple type bind with a varargs list of pattern variables, like a,b,c:T. This is used by several * obligations. */ protected PMultipleBind getMultipleTypeBind(PType patternType, ILexNameToken... patternNames) { ATypeMultipleBind typeBind = new ATypeMultipleBind(); List<PPattern> patternList = new Vector<PPattern>(); for (ILexNameToken patternName : patternNames) { AIdentifierPattern pattern = new AIdentifierPattern(); pattern.setName(patternName.clone()); patternList.add(pattern); } typeBind.setPlist(patternList); typeBind.setType(patternType.clone()); return typeBind; }
/** * Create the context (forall x,y,z...) for a Proof Obligation for * eq and ord relations. */ protected AForAllExp makeRelContext(ATypeDefinition node, AVariableExp... exps){ AForAllExp forall_exp = new AForAllExp(); forall_exp.setType(new ABooleanBasicType()); ATypeMultipleBind tmb = new ATypeMultipleBind(); List<PPattern> pats = new LinkedList<>(); for (AVariableExp exp : exps) { pats.add(AstFactory.newAIdentifierPattern(exp.getName().clone())); } tmb.setPlist(pats); tmb.setType(node.getType().clone()); List<PMultipleBind> binds = new LinkedList<>(); binds.add(tmb); forall_exp.setBindList(binds); return forall_exp; }
protected void addStateBinds(LinkedList<PMultipleBind> r) { if (stateDefinition != null) { ATypeMultipleBind tmBind2 = new ATypeMultipleBind(); AIdentifierPattern pattern = new AIdentifierPattern(); if (stateDefinition instanceof AStateDefinition) { AStateDefinition def = (AStateDefinition) stateDefinition; tmBind2.setType(def.getRecordType().clone()); pattern.setName(OLD_STATE_ARG.clone()); } else { SClassDefinition def = (SClassDefinition) stateDefinition; tmBind2.setType(def.getClasstype().clone()); pattern.setName(OLD_SELF_ARG.clone()); } List<PPattern> plist = new LinkedList<PPattern>(); plist.add(pattern); tmBind2.setPlist(plist); r.add(tmBind2); } }
public SatisfiabilityObligation(ATypeDefinition node, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(node, POType.TYPE_INV_SAT, ctxt, node.getLocation(), af); AExistsExp exists_exp = new AExistsExp(); exists_exp.setType(new ABooleanBasicType()); ATypeMultipleBind tmb = new ATypeMultipleBind(); List<PPattern> pats = new LinkedList<PPattern>(); pats.add(node.getInvPattern().clone()); tmb.setPlist(pats); tmb.setType(node.getInvType().clone()); List<PMultipleBind> binds = new LinkedList<PMultipleBind>(); binds.add(tmb); exists_exp.setBindList(binds); exists_exp.setPredicate(node.getInvExpression().clone()); stitch = exists_exp; valuetree.setPredicate(ctxt.getPredWithContext(exists_exp)); }
public ValueBindingObligation(PPattern pattern, PType type, PExp exp, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(pattern, POType.VALUE_BINDING, ctxt, pattern.getLocation(), af); AExistsExp existsExp = new AExistsExp(); List<PPattern> patternList = new Vector<PPattern>(); patternList.add(pattern.clone()); ATypeMultipleBind typeBind = new ATypeMultipleBind(); typeBind.setPlist(patternList); typeBind.setType(type.clone()); List<PMultipleBind> bindList = new Vector<PMultipleBind>(); bindList.add(typeBind); existsExp.setBindList(bindList); AEqualsBinaryExp equals = AstExpressionFactory.newAEqualsBinaryExp(patternToExp(pattern.clone()), exp.clone()); existsExp.setPredicate(equals); stitch = existsExp; valuetree.setPredicate(ctxt.getPredWithContext(existsExp)); // valuetree.setContext(ctxt.getContextNodeList()); } }
List<PPattern> patternList = new LinkedList<PPattern>(); patternList.add(result.getPattern().clone()); tmBind.setPlist(patternList); tmBind.setType(result.getType().clone()); binds.add(tmBind);
pats.add(idPat); r.setPlist(pats); r.setType(var.getType().clone());
private PExp alt2Exp(ACaseAlternative alt, ACasesExp exp, IPogAssistantFactory assistantFactory) throws AnalysisException { if (assistantFactory.createPPatternAssistant().isSimple(alt.getPattern())) { AEqualsBinaryExp equalsExp = AstExpressionFactory.newAEqualsBinaryExp(exp.getExpression().clone(), patternToExp(alt.getPattern().clone())); return equalsExp; } else { PExp matching = patternToExp(alt.getPattern().clone()); AExistsExp existsExp = new AExistsExp(); ATypeMultipleBind tbind = new ATypeMultipleBind(); List<PPattern> plist = new LinkedList<PPattern>(); plist.add(alt.getPattern().clone()); tbind.setPlist(plist); tbind.setType(exp.getExpression().getType().clone()); List<PMultipleBind> bindList = new LinkedList<PMultipleBind>(); bindList.add(tbind); existsExp.setBindList(bindList); AEqualsBinaryExp equalsExp = AstExpressionFactory.newAEqualsBinaryExp(exp.getExpression().clone(), matching); existsExp.setPredicate(equalsExp); return existsExp; } }