readOr in reader macros

This commit is contained in:
2024-07-02 18:18:42 -06:00
parent e3f1997409
commit 57403abc93
2 changed files with 10 additions and 0 deletions

View File

@@ -531,6 +531,7 @@ class Helpers {
// plus macro-specific things.
var interp = new KissInterp();
interp.variables.set("read", Reader._assertRead.bind(_, k));
interp.variables.set("readOr", Reader._readOr.bind(_, k));
interp.variables.set("readExpArray", Reader._readExpArray.bind(_, _, k));
interp.variables.set("ReaderExp", ReaderExpDef);
interp.variables.set("nextToken", Reader.nextToken.bind(_, "a token"));

View File

@@ -327,6 +327,15 @@ class Reader {
}
}
static function _readOr(stream:Stream, k:KissState, defaultExp:ReaderExp):ReaderExp {
return switch (_read(stream, k)) {
case Some(exp):
exp;
case None:
defaultExp;
}
}
static var nestedReadExpArrayStartPositions = [];
static var readExpArrayStartPositions = [];