@@ -45,7 +45,10 @@ class PatternAcceptorState {
45
45
if ( this . empty ( ) ) {
46
46
return null ;
47
47
}
48
- return String . fromCodePoint ( this . pattern . codePointAt ( this . index ) ) ;
48
+ if ( this . unicode ) {
49
+ return String . fromCodePoint ( this . pattern . codePointAt ( this . index ) ) ;
50
+ }
51
+ return this . pattern . charAt ( this . index ) ;
49
52
}
50
53
51
54
skipCodePoint ( ) {
@@ -344,7 +347,7 @@ const acceptCharacterEscape = anyOf(
344
347
if ( character === null ) {
345
348
return { matched : false } ;
346
349
}
347
- return { matched : true , value : character . codePointAt ( 0 ) % 32 } ;
350
+ return { matched : true , value : character . charCodeAt ( 0 ) % 32 } ;
348
351
} ) ,
349
352
backtrackOnFailure ( state => {
350
353
if ( ! state . eat ( '0' ) || state . eatAny ( ...decimalDigits ) ) {
@@ -395,7 +398,7 @@ const acceptCharacterEscape = anyOf(
395
398
if ( value === null ) {
396
399
return { matched : false } ;
397
400
}
398
- return { matched : true , value : value . codePointAt ( 0 ) } ;
401
+ return { matched : true , value : value . charCodeAt ( 0 ) } ;
399
402
} ) ,
400
403
state => {
401
404
if ( ! state . unicode || ! state . eat ( '/' ) ) {
@@ -432,34 +435,43 @@ const acceptCharacterClass = backtrackOnFailure(state => {
432
435
subState => {
433
436
return { matched : ! ! subState . eat ( 'b' ) , value : 0x0008 } ;
434
437
} ,
438
+ subState => {
439
+ if ( ! subState . unicode ) {
440
+ return { matched : false } ;
441
+ }
442
+ return acceptDecimalEscape ( subState ) ;
443
+ } ,
435
444
subState => {
436
445
return { matched : subState . unicode && ! ! subState . eat ( '-' ) , value : '-' . charCodeAt ( 0 ) } ;
437
446
} ,
438
447
backtrackOnFailure ( subState => {
439
448
if ( subState . unicode || ! subState . eat ( 'c' ) ) {
440
449
return { matched : false } ;
441
450
}
442
- let eaten = subState . eatAny ( ...decimalDigits , '_' ) ;
443
- return { matched : ! ! eaten , value : eaten } ;
451
+ let character = subState . eatAny ( ...decimalDigits , '_' ) ;
452
+ if ( character === null ) {
453
+ return { matched : false } ;
454
+ }
455
+ return { matched : true , value : character . charCodeAt ( 0 ) % 32 } ;
444
456
} ) ,
445
457
acceptCharacterClassEscape ,
446
458
acceptCharacterEscape
447
459
) ;
448
460
449
461
const acceptClassAtomNoDash = localState => {
450
- if ( localState . eat ( '\\' ) ) {
451
- return anyOf (
452
- acceptClassEscape ,
453
- backtrackOnFailure ( subState => {
454
- if ( subState . match ( 'c' ) ) {
455
- return { matched : true , value : 0x005C } ; // reverse solidus
456
- }
457
- return { matched : false } ;
458
- } )
459
- ) ( localState ) ;
462
+ if ( localState . match ( '\\' ) ) {
463
+ let ret = backtrackOnFailure ( subState => {
464
+ subState . eat ( '\\' ) ;
465
+ return acceptClassEscape ( subState ) ;
466
+ } ) ( localState ) ;
467
+ if ( ret . matched ) {
468
+ return ret ;
469
+ } else if ( ! localState . match ( '\\c' ) || localState . unicode ) {
470
+ return { matched : false } ;
471
+ }
460
472
}
461
473
let nextCodePoint = localState . nextCodePoint ( ) ;
462
- if ( nextCodePoint === null ) {
474
+ if ( nextCodePoint === null || nextCodePoint === ']' || nextCodePoint === '-' ) {
463
475
return { matched : false } ;
464
476
}
465
477
localState . skipCodePoint ( ) ;
@@ -468,7 +480,7 @@ const acceptCharacterClass = backtrackOnFailure(state => {
468
480
469
481
const acceptClassAtom = localState => {
470
482
if ( localState . eat ( '-' ) ) {
471
- return { matched : true , value : '-' . codePointAt ( 0 ) } ;
483
+ return { matched : true , value : '-' . charCodeAt ( 0 ) } ;
472
484
}
473
485
return acceptClassAtomNoDash ( localState ) ;
474
486
} ;
@@ -499,7 +511,6 @@ const acceptCharacterClass = backtrackOnFailure(state => {
499
511
return { matched : true } ;
500
512
}
501
513
return acceptNonEmptyClassRangesNoDash ( localState ) ;
502
-
503
514
} ;
504
515
505
516
const acceptNonEmptyClassRanges = localState => {
0 commit comments