I am currently working on building an executable version of the
semantics of regular expression pattern matching, and I think I've found
in a bug in how they are specified in both the released version of
ECMA-262 and the latest working draft.
In §15.10.2.5, it says that:
The production Term :: Assertion evaluates by returning an internal
Matcher closure that takes two arguments, a State x and a Continuation
c, and performs the following:
1. Evaluate Assertion to obtain an AssertionTester t.
[ ... ]
However, the definition of the negative and positive lookahead
assertions in §15.10.2.6 do not return AssertionTesters (like the ^, $,
\b, and \B assertions do) but matchers:
The production Assertion :: ( ? = Disjunction ) evaluates as follows:
1. Evaluate Disjunction to obtain a Matcher m.
2. Return an internal Matcher closure that takes two arguments, a State
x and a Continuation c, and performs the following steps:
1. Let d be a Continuation that always returns its State argument as
a successful MatchResult.
2. Call m(x, d) and let r be its result.
3. If r is failure, return failure.
4. Let y be r's State.
5. Let cap be y's captures internal array.
6. Let xe be x's endIndex.
7. Let z be the State (xe, cap).
8. Call c(z) and return its result.
--
Joshua Cranmer
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss