Skip to content
← Back

src/syntax/parsers/lazy_parser.ghul

1
namespace Syntax.Parsers is
2
use IO.Std
3
4
class LAZY_PARSER[T: class]: Parser[T] is
5
_parser: System.Lazy[Parser[T]]?
6
7
create: () -> Parser[T] public
8
= value is
9
_parser = System.Lazy[Parser[T]](value)
10
si
11
12
init() is
13
super.init()
14
si
15
16
// The parser this stands in for, created on first use.
17
value() -> Parser[T] is
18
let parser = _parser
19
20
assert parser? else "Lazy parser is null: {self}"
21
22
let v = parser.value
23
24
assert v? else "Lazy parser value is null: {_parser}"
25
26
return v
27
si
28
29
parse(context: CONTEXT) -> T? is
30
let parser = _parser
31
32
assert parser? else "Lazy parser is null: {self}"
33
34
let v = parser.value
35
36
assert v? else "Lazy parser value is null: {_parser}"
37
38
return v.parse(context)
39
si
40
si
41
42
si