public AFieldField findField(ARecordInvariantType rec, String tag) { for (AFieldField f : rec.getFields()) { if (f.getTag().equals(tag)) { return f; } } return null; }
sv.set(ee.getLocation(), iv.fieldmap.get(f.getTag()), globals);
ctxt.put(field.getTagname(), sigma.fieldmap.get(field.getTag()));
private static AFieldField findField(ARecordInvariantType ty, ILexIdentifierToken id) { List<AFieldField> fields = ty.getFields(); for (AFieldField f : fields) { if (f.getTag().equals(id.getName())) { return f; } } return null; }
@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("mk_" + type.getName() + "("); Iterator<AFieldField> fi = type.getFields().iterator(); if (fi.hasNext()) { String ftag = fi.next().getTag(); sb.append(fieldmap.get(ftag)); while (fi.hasNext()) { ftag = fi.next().getTag(); sb.append(", " + fieldmap.get(ftag)); } } sb.append(")"); return sb.toString(); }
@Override public String caseAFieldField(AFieldField node, PrettyPrinterEnv question) throws AnalysisException { question.increaseIdent(); StringBuilder sb = new StringBuilder(question.getIdent()); sb.append(node.getTag() + " : " + node.getType().apply(typePrinter, question)); question.decreaseIdent(); return sb.toString(); }
@Override public String caseARecordInvariantType(ARecordInvariantType node, PrettyPrinterEnv question) throws AnalysisException { StringBuilder sb = new StringBuilder(); question.increaseIdent(); sb.append("\n"); for (AFieldField f : node.getFields()) { sb.append(question.getIdent() + f.getTag() + " : " + f.getType().apply(typePrinter, question) + "\n"); } question.decreaseIdent(); if (node.getFields().size() > 0) { sb.delete(sb.length() - 1, sb.length()); } return sb.toString(); }
public RecordValue(ARecordInvariantType type, FieldMap mapvalues, Context ctxt) throws AnalysisException { this.type = type; this.fieldmap = new FieldMap(); this.invariant = ctxt.assistantFactory.createSInvariantTypeAssistant().getInvariant(type, ctxt); this.equality = ctxt.assistantFactory.createSInvariantTypeAssistant().getEquality(type, ctxt); this.ordering = ctxt.assistantFactory.createSInvariantTypeAssistant().getOrder(type, ctxt); if (mapvalues.size() != type.getFields().size()) { abort(4080, "Wrong number of fields for " + type.getName(), ctxt); } Iterator<AFieldField> fi = type.getFields().iterator(); while (fi.hasNext()) { AFieldField f = fi.next(); Value v = mapvalues.get(f.getTag()); if (v == null) { abort(4081, "Field not defined: " + f.getTag(), ctxt); } fieldmap.add(f.getTag(), v.convertTo(f.getType(), ctxt), !f.getEqualityAbstraction()); } checkInvariant(ctxt); }
public RecordValue(ARecordInvariantType type, ValueList values, Context ctxt) throws AnalysisException { this.type = type; this.fieldmap = new FieldMap(); this.invariant = ctxt.assistantFactory.createSInvariantTypeAssistant().getInvariant(type, ctxt); this.equality = ctxt.assistantFactory.createSInvariantTypeAssistant().getEquality(type, ctxt); this.ordering = ctxt.assistantFactory.createSInvariantTypeAssistant().getOrder(type, ctxt); if (values.size() != type.getFields().size()) { abort(4078, "Wrong number of fields for " + type.getName(), ctxt); } Iterator<AFieldField> fi = type.getFields().iterator(); for (Value v : values) { AFieldField f = fi.next(); fieldmap.add(f.getTag(), v.convertTo(f.getType(), ctxt), !f.getEqualityAbstraction()); } checkInvariant(ctxt); }
"Modifier for " + f.getTag() + " should be " + f.getType(), node.getLocation(), node); TypeCheckerErrors.detail("Actual", mtype);