Search in sources :

Example 81 with ITerm

use of mb.nabl2.terms.ITerm in project nabl by metaborg.

the class SG_get_ref_resolution method call.

@Override
public Optional<? extends ITerm> call(IScopeGraphUnit unit, ITerm term, List<ITerm> terms) throws InterpreterException {
    return unit.solution().flatMap(s -> {
        return Occurrence.matcher().match(term, s.unifier()).<ITerm>flatMap(ref -> {
            return s.nameResolution().resolve(ref).map(paths -> {
                List<ITerm> pathTerms = Lists.newArrayListWithExpectedSize(paths.size());
                for (IResolutionPath<Scope, Label, Occurrence> path : paths) {
                    pathTerms.add(B.newTuple(path.getDeclaration(), Paths.toTerm(path)));
                }
                ITerm result = B.newList(pathTerms);
                return result;
            });
        });
    });
}
Also used : Scope(mb.nabl2.scopegraph.terms.Scope) Label(mb.nabl2.scopegraph.terms.Label) ITerm(mb.nabl2.terms.ITerm) Occurrence(mb.nabl2.scopegraph.terms.Occurrence)

Example 82 with ITerm

use of mb.nabl2.terms.ITerm in project nabl by metaborg.

the class ScopeGraphEdgePrimitive method call.

@Override
public Optional<ITerm> call(IScopeGraphUnit unit, ITerm term, List<ITerm> terms) throws InterpreterException {
    return unit.solution().flatMap(sol -> {
        final IRelation3<S, Label, ? extends ITerm> edges = getEdges(sol.scopeGraph());
        final IMatcher<S> sourceMatcher = getSourceMatcher();
        return M.<ITerm>cases(// @formatter:off
        M.term(sourceMatcher, (t, source) -> {
            List<ITerm> edgeTerms = Lists.newArrayList();
            for (Map.Entry<Label, ? extends ITerm> edge : edges.get(source)) {
                edgeTerms.add(B.newTuple(edge.getKey(), edge.getValue()));
            }
            return B.newList(edgeTerms);
        }), M.tuple2(sourceMatcher, Label.matcher(), (t, source, label) -> {
            List<ITerm> targetTerms = Lists.newArrayList();
            for (ITerm target : edges.get(source, label)) {
                targetTerms.add(target);
            }
            return B.newList(targetTerms);
        })).match(term, sol.unifier());
    });
}
Also used : Label(mb.nabl2.scopegraph.terms.Label) ITerm(mb.nabl2.terms.ITerm) Map(java.util.Map)

Aggregations

ITerm (mb.nabl2.terms.ITerm)79 Test (org.junit.Test)24 Occurrence (mb.nabl2.scopegraph.terms.Occurrence)19 Scope (mb.nabl2.scopegraph.terms.Scope)18 SolveResult (mb.nabl2.solver.ISolver.SolveResult)16 Optional (java.util.Optional)15 IMessageInfo (mb.nabl2.constraints.messages.IMessageInfo)15 ITermVar (mb.nabl2.terms.ITermVar)15 Label (mb.nabl2.scopegraph.terms.Label)14 Map (java.util.Map)12 Set (java.util.Set)10 MessageContent (mb.nabl2.constraints.messages.MessageContent)10 SolverCore (mb.nabl2.solver.SolverCore)9 IUnifier (mb.nabl2.terms.unification.IUnifier)9 Function1 (org.metaborg.util.functions.Function1)9 Lists (com.google.common.collect.Lists)8 ISolution (mb.nabl2.solver.ISolution)8 HashMultimap (com.google.common.collect.HashMultimap)7 Multimap (com.google.common.collect.Multimap)7 IConstraint (mb.nabl2.constraints.IConstraint)7