@@ -6,7 +6,7 @@ use std::ops::ControlFlow;
6
6
7
7
use oxc_allocator:: Allocator ;
8
8
use oxc_ast:: ast:: RegExpFlags ;
9
- use oxc_regular_expression:: ConstructorParser ;
9
+ use oxc_regular_expression:: { LiteralParser , Options } ;
10
10
11
11
use crate :: {
12
12
ecmascript:: {
@@ -196,13 +196,19 @@ pub(crate) fn reg_exp_initialize<'a>(
196
196
Ok ( f) => f. as_str ( ) . into ( ) ,
197
197
Err ( f) => f. to_string_lossy ( agent) ,
198
198
} ;
199
+ let flags: Option < & str > = if f_str. is_empty ( ) {
200
+ None
201
+ } else {
202
+ Some ( f_str. as_ref ( ) )
203
+ } ;
204
+
199
205
let allocator = Allocator :: new ( ) ;
200
206
// 13. Let parseResult be ParsePattern(patternText, u, v).
201
- match ConstructorParser :: new (
207
+ match LiteralParser :: new (
202
208
& allocator,
203
209
& p. to_string_lossy ( agent) ,
204
- Some ( & f_str ) ,
205
- Default :: default ( ) ,
210
+ flags ,
211
+ Options :: default ( ) ,
206
212
)
207
213
. parse ( )
208
214
{
@@ -241,22 +247,25 @@ fn parse_flags(f: &str) -> Option<RegExpFlags> {
241
247
let mut flags: u8 = 0 ;
242
248
for cu in f. as_bytes ( ) {
243
249
match cu {
250
+ b'd' => flags |= RegExpFlags :: D . bits ( ) ,
251
+ b'g' => flags |= RegExpFlags :: G . bits ( ) ,
244
252
// 6. If F contains "i", let i be true; else let i be false.
245
- b'i' => flags & = RegExpFlags :: I . bits ( ) ,
253
+ b'i' => flags | = RegExpFlags :: I . bits ( ) ,
246
254
// 7. If F contains "m", let m be true; else let m be false.
247
- b'm' => flags & = RegExpFlags :: M . bits ( ) ,
255
+ b'm' => flags | = RegExpFlags :: M . bits ( ) ,
248
256
// 8. If F contains "s", let s be true; else let s be false.
249
- b's' => flags & = RegExpFlags :: S . bits ( ) ,
257
+ b's' => flags | = RegExpFlags :: S . bits ( ) ,
250
258
// 9. If F contains "u", let u be true; else let u be false.
251
- b'u' => flags & = RegExpFlags :: U . bits ( ) ,
259
+ b'u' => flags | = RegExpFlags :: U . bits ( ) ,
252
260
// 10. If F contains "v", let v be true; else let v be false.
253
- b'v' => flags &= RegExpFlags :: V . bits ( ) ,
261
+ b'v' => flags |= RegExpFlags :: V . bits ( ) ,
262
+ b'y' => flags |= RegExpFlags :: Y . bits ( ) ,
263
+ // 5. If F contains any code unit other than "d", "g", "i", "m",
264
+ // "s", "u", "v", or "y", or if F contains any code unit more
265
+ // than once, throw a SyntaxError exception.
254
266
_ => return None ,
255
267
}
256
268
}
257
- // 5. If F contains any code unit other than "d", "g", "i", "m", "s", "u",
258
- // "v", or "y", or if F contains any code unit more than once, throw a
259
- // SyntaxError exception.
260
269
Some ( RegExpFlags :: from_bits_retain ( flags) )
261
270
}
262
271
0 commit comments