use of mb.nabl2.terms.matching.Transform.T in project nabl by metaborg.
the class HashcodeAndEqualsTest method testSerializeSpecialized.
@Test
public void testSerializeSpecialized() throws Exception {
ITerm t = ImmutableSpecializedAppl.of("Hello, world!", 42);
byte[] b1 = serialize(t);
byte[] b2 = serialize(deserialize(b1));
assertTrue(Arrays.equals(b1, b2));
}
use of mb.nabl2.terms.matching.Transform.T in project nabl by metaborg.
the class VarMultimap method remove.
public boolean remove(ITermVar key, T value, IUnifier unifier) {
final Set<ITermVar> reps = unifier.getVars(key);
boolean change = false;
for (ITermVar rep : reps) {
change |= map.remove(rep, value);
}
return change;
}
use of mb.nabl2.terms.matching.Transform.T in project nabl by metaborg.
the class VarMultimap method put.
public boolean put(ITermVar key, T value, IUnifier unifier) {
final Set<ITermVar> reps = unifier.getVars(key);
boolean change = false;
for (ITermVar rep : reps) {
change |= map.put(rep, value);
}
return change;
}
use of mb.nabl2.terms.matching.Transform.T in project nabl by metaborg.
the class SetComponent method makeMessages.
private Iterable<IMessageInfo> makeMessages(IMessageInfo template, Collection<IElement<ITerm>> elements) {
boolean nameOrigin = M.appl0(NAME_OP).match(template.getOriginTerm(), unifier()).isPresent();
if (nameOrigin && !elements.isEmpty()) {
return elements.stream().<IMessageInfo>map(e -> {
Function1<ITerm, ITerm> f = T.sometd(t -> M.appl0(NAME_OP, a -> e.getValue()).match(t, unifier()));
return ImmutableMessageInfo.of(template.getKind(), template.getContent().apply(f), e.getPosition());
}).collect(Collectors.toList());
} else {
ITerm es = B.newList(elements.stream().map(e -> e.getValue()).collect(Collectors.toList()));
Function1<ITerm, ITerm> f = T.sometd(t -> M.appl0(NAME_OP, a -> es).match(t, unifier()));
return Iterables2.singleton(ImmutableMessageInfo.of(template.getKind(), template.getContent().apply(f), template.getOriginTerm()));
}
}
use of mb.nabl2.terms.matching.Transform.T in project nabl by metaborg.
the class PolymorphismComponent method solve.
// ------------------------------------------------------------------------------------------------------//
private Optional<SolveResult> solve(CGeneralize gen) {
final ITerm declTerm = unifier().findRecursive(gen.getDeclaration());
if (!declTerm.isGround()) {
return Optional.empty();
}
final Occurrence decl = Occurrence.matcher().match(declTerm, unifier()).orElseThrow(() -> new TypeException("Expected an occurrence as first argument to " + gen));
final ITerm type = gen.getType();
if (!isGenSafe.test(type)) {
return Optional.empty();
}
// linked map to preserve key order
final Map<ITermVar, TypeVar> subst = Maps.newLinkedHashMap();
final ITerm scheme;
{
int c = 0;
for (ITermVar var : type.getVars()) {
subst.put(var, ImmutableTypeVar.of("T" + (++c)));
}
scheme = subst.isEmpty() ? type : ImmutableForall.of(subst.values(), subst(type, subst));
}
SolveResult result = SolveResult.constraints(// @formatter:off
ImmutableCDeclProperty.of(decl, DeclProperties.TYPE_KEY, scheme, 0, gen.getMessageInfo()), ImmutableCEqual.of(gen.getGenVars(), B.newList(subst.keySet()), gen.getMessageInfo()));
return Optional.of(result);
}
Aggregations