From 7fde86d87f761c0088ea04b7afd19a3713ed5e85 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Wed, 18 Dec 2019 14:04:35 -0800 Subject: [PATCH 1/2] Make `accept` a generic method Stop throwing away types from the `Visitor` which already has a generic. --- lib/src/ast.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/src/ast.dart b/lib/src/ast.dart index 1408ffd..d16098a 100644 --- a/lib/src/ast.dart +++ b/lib/src/ast.dart @@ -21,7 +21,7 @@ abstract class Node { Iterable get variables; /// Calls the appropriate [Visitor] method on [this] and returns the result. - dynamic accept(Visitor visitor); + T accept(Visitor visitor); } /// A single variable. @@ -38,7 +38,7 @@ class VariableNode implements Node { VariableNode(this.name, [this.span]); @override - dynamic accept(Visitor visitor) => visitor.visitVariable(this); + T accept(Visitor visitor) => visitor.visitVariable(this); @override String toString() => name; @@ -64,7 +64,7 @@ class NotNode implements Node { NotNode(this.child, [this.span]); @override - dynamic accept(Visitor visitor) => visitor.visitNot(this); + T accept(Visitor visitor) => visitor.visitNot(this); @override String toString() => @@ -97,7 +97,7 @@ class OrNode implements Node { OrNode(this.left, this.right); @override - dynamic accept(Visitor visitor) => visitor.visitOr(this); + T accept(Visitor visitor) => visitor.visitOr(this); @override String toString() { @@ -136,7 +136,7 @@ class AndNode implements Node { AndNode(this.left, this.right); @override - dynamic accept(Visitor visitor) => visitor.visitAnd(this); + T accept(Visitor visitor) => visitor.visitAnd(this); @override String toString() { @@ -179,7 +179,7 @@ class ConditionalNode implements Node { ConditionalNode(this.condition, this.whenTrue, this.whenFalse); @override - dynamic accept(Visitor visitor) => visitor.visitConditional(this); + T accept(Visitor visitor) => visitor.visitConditional(this); @override String toString() { From 912f94dc39699b93dea99d460dba09ea7a9d8783 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Wed, 18 Dec 2019 14:08:52 -0800 Subject: [PATCH 2/2] Use generic for RecursiveVisitor --- lib/src/visitor.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/visitor.dart b/lib/src/visitor.dart index d0efe72..c6808c2 100644 --- a/lib/src/visitor.dart +++ b/lib/src/visitor.dart @@ -17,7 +17,7 @@ abstract class Visitor { /// /// The default implementations of this visitor's methods just traverse the AST /// and do nothing with it. -abstract class RecursiveVisitor implements Visitor { +abstract class RecursiveVisitor implements Visitor { const RecursiveVisitor(); @override