Search in sources :

Example 1 with T

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));
}
Also used : ITerm(mb.nabl2.terms.ITerm) Test(org.junit.Test)

Example 2 with T

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar)

Example 3 with T

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar)

Example 4 with T

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()));
    }
}
Also used : ISetConstraint(mb.nabl2.constraints.sets.ISetConstraint) Function1(org.metaborg.util.functions.Function1) ITerm(mb.nabl2.terms.ITerm) ImmutableCEqual(mb.nabl2.constraints.equality.ImmutableCEqual) Multimap(com.google.common.collect.Multimap) SolveResult(mb.nabl2.solver.ISolver.SolveResult) SolverCore(mb.nabl2.solver.SolverCore) CEvalSet(mb.nabl2.constraints.sets.CEvalSet) HashMultimap(com.google.common.collect.HashMultimap) Lists(com.google.common.collect.Lists) SetEvaluator(mb.nabl2.sets.SetEvaluator) T(mb.nabl2.terms.matching.Transform.T) Unit(org.metaborg.util.unit.Unit) B(mb.nabl2.terms.build.TermBuild.B) ImmutableMessageInfo(mb.nabl2.constraints.messages.ImmutableMessageInfo) ASolver(mb.nabl2.solver.ASolver) M(mb.nabl2.terms.matching.TermMatch.M) Collection(java.util.Collection) Set(java.util.Set) CDistinct(mb.nabl2.constraints.sets.CDistinct) Collectors(java.util.stream.Collectors) IMessageInfo(mb.nabl2.constraints.messages.IMessageInfo) MessageContent(mb.nabl2.constraints.messages.MessageContent) CSubsetEq(mb.nabl2.constraints.sets.CSubsetEq) Iterables2(org.metaborg.util.iterators.Iterables2) List(java.util.List) Optional(java.util.Optional) IMatcher(mb.nabl2.terms.matching.TermMatch.IMatcher) IElement(mb.nabl2.sets.IElement) Function1(org.metaborg.util.functions.Function1) ITerm(mb.nabl2.terms.ITerm)

Example 5 with T

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);
}
Also used : ImmutableTypeVar(mb.nabl2.poly.ImmutableTypeVar) TypeVar(mb.nabl2.poly.TypeVar) SolveResult(mb.nabl2.solver.ISolver.SolveResult) ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm) TypeException(mb.nabl2.solver.TypeException) Occurrence(mb.nabl2.scopegraph.terms.Occurrence)

Aggregations

ITerm (mb.nabl2.terms.ITerm)7 ITermVar (mb.nabl2.terms.ITermVar)4 Test (org.junit.Test)3 List (java.util.List)2 Optional (java.util.Optional)2 Collectors (java.util.stream.Collectors)2 SolveResult (mb.nabl2.solver.ISolver.SolveResult)2 HashMultimap (com.google.common.collect.HashMultimap)1 Lists (com.google.common.collect.Lists)1 Multimap (com.google.common.collect.Multimap)1 Arrays (java.util.Arrays)1 Collection (java.util.Collection)1 Map (java.util.Map)1 Set (java.util.Set)1 ImmutableCEqual (mb.nabl2.constraints.equality.ImmutableCEqual)1 IMessageInfo (mb.nabl2.constraints.messages.IMessageInfo)1 ImmutableMessageInfo (mb.nabl2.constraints.messages.ImmutableMessageInfo)1 MessageContent (mb.nabl2.constraints.messages.MessageContent)1 CDistinct (mb.nabl2.constraints.sets.CDistinct)1 CEvalSet (mb.nabl2.constraints.sets.CEvalSet)1