parseman 0.61.7 → 0.61.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"fail-clean.d.ts","sourceRoot":"","sources":["../../src/table/fail-clean.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;AAwB/C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAmFpE"}
1
+ {"version":3,"file":"fail-clean.d.ts","sourceRoot":"","sources":["../../src/table/fail-clean.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;AAwB/C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAuFpE"}
@@ -3641,7 +3641,7 @@ function regex(pattern, flags = "") {
3641
3641
  }
3642
3642
 
3643
3643
  // src/version.ts
3644
- var PARSEMAN_VERSION = "0.61.7";
3644
+ var PARSEMAN_VERSION = "0.61.8";
3645
3645
 
3646
3646
  // src/table/lex-body.ts
3647
3647
  function buildLexBodyRecognizer(spec, constants) {
@@ -9812,11 +9812,15 @@ function failCleanAnalysis(code) {
9812
9812
  case OP_CONT:
9813
9813
  out = clean(code[ip + 1]) && neverFails(code[ip + 3]);
9814
9814
  break;
9815
- // An arm's failure and the fallback's are committed; only the selector's is
9816
- // not, and without a fallback an unknown key fails after the selector wrote.
9817
- case OP_DISPATCH:
9818
- out = code[ip + 3] >= 0 && clean(code[ip + 1]);
9815
+ // An arm's failure and a committing fallback's are committed; only the
9816
+ // selector's is not. An uncommitted fallback's failure leaves the selector's
9817
+ // capture, unless the fallback reads it through `routed()`, which rolls that
9818
+ // capture back first. With no fallback, the dispatch fails after the selector wrote.
9819
+ case OP_DISPATCH: {
9820
+ const flags = code[ip + 4];
9821
+ out = code[ip + 3] >= 0 && ((flags & 2) === 0 || (flags & 1) === 1) && clean(code[ip + 1]);
9819
9822
  break;
9823
+ }
9820
9824
  default: {
9821
9825
  const c = passChild(code, ip);
9822
9826
  out = c >= 0 && clean(c);