From 284d439f4db00be49de12862b2610a40d84cfc81 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 14 Jul 2016 16:35:31 +0100 Subject: Remove NodeMapper in favour of a DynamicNodeMapper --- .../org/zwobble/couscous/interpreter/Executor.java | 28 ++++++++++++++++------ 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/Executor.java') diff --git a/src/main/java/org/zwobble/couscous/interpreter/Executor.java b/src/main/java/org/zwobble/couscous/interpreter/Executor.java index 9641c5e..50fdcff 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Executor.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java @@ -1,13 +1,15 @@ package org.zwobble.couscous.interpreter; +import net.bytebuddy.description.type.TypeDescription; import org.zwobble.couscous.ast.*; -import org.zwobble.couscous.ast.visitors.NodeMapperWithDefault; +import org.zwobble.couscous.ast.visitors.DynamicNodeMapper; import org.zwobble.couscous.ast.visitors.StatementNodeMapper; import org.zwobble.couscous.interpreter.values.InterpreterValue; import org.zwobble.couscous.interpreter.values.UnitInterpreterValue; import java.util.List; import java.util.Optional; +import java.util.function.Function; import java.util.stream.Stream; import static org.zwobble.couscous.ast.structure.NodeStructure.descendantNodesAndSelf; @@ -63,12 +65,24 @@ public class Executor implements StatementNodeMapper> private static Stream findDeclarations(List body) { return body.stream() .flatMap(statement -> descendantNodesAndSelf(statement, node -> node instanceof StatementNode)) - .flatMap(node -> node.accept(new NodeMapperWithDefault>(Stream.empty()) { - @Override - public Stream visit(LocalVariableDeclarationNode localVariableDeclaration) { - return Stream.of(localVariableDeclaration); - } - })); + .flatMap(findDirectDeclarations); + } + + private static final Function> findDirectDeclarations = + DynamicNodeMapper.>build( + FindDirectDeclarations.class, + new TypeDescription.ForLoadedType(Stream.class), + "visit" + ).instantiate(new FindDirectDeclarations()); + + public static class FindDirectDeclarations { + public Stream visit(Node node) { + return Stream.empty(); + } + + public Stream visit(LocalVariableDeclarationNode localVariableDeclaration) { + return Stream.of(localVariableDeclaration); + } } public static Optional exec(Environment environment, Iterable statements) { -- cgit v1.2.3