aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Hall <hallmatthew314@gmail.com>2023-03-09 00:49:16 +1300
committerMatthew Hall <hallmatthew314@gmail.com>2023-03-09 00:49:16 +1300
commitce254c83be3cf613a8f655f55f2207073404148f (patch)
tree7dc6b40ed46b57ba2d1805cb346f366642e2237a /src
parentca4ef7c14c8398b24db54c58bb4062607eb44067 (diff)
Rewrite Assert to use blocks
Diffstat (limited to 'src')
-rw-r--r--src/parcom.cr12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/parcom.cr b/src/parcom.cr
index dbdd44d..3aed672 100644
--- a/src/parcom.cr
+++ b/src/parcom.cr
@@ -67,9 +67,12 @@ module Parcom
Plus.new(self, other)
end
- # TODO: allow/change to support block invocation
def assert(f : V -> Bool)
- Assert.new(self, f)
+ Assert.new(self, &f)
+ end
+
+ def assert(&block : V -> Bool)
+ Assert.new(self, &block)
end
# TODO: allow/change to support block invocation
@@ -118,9 +121,9 @@ module Parcom
end
end
- # TODO: allow/change to support block invocation
class Assert(T, V) < Parser(T, V)
- def initialize(@p : Parser(T, V), @f : V -> Bool)
+ def initialize(@p : Parser(T, V), &block : V -> Bool)
+ @f = block
end
def parse(tokens : TokenStream(T)) : Result(T, V)
@@ -212,7 +215,6 @@ module Parcom
end
end
- # TODO: find a way to make this use Recover on the back end
class Optional(T, V) < Parser(T, V?)
def initialize(@p : Parser(T, V))
end