diff --git a/Directory.Packages.props b/Directory.Packages.props index 1ad2f23da8..db46280bc1 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,8 +4,8 @@ true - - + + diff --git a/Jint.Tests.Test262/Test262Harness.settings.json b/Jint.Tests.Test262/Test262Harness.settings.json index 780a9ece46..b37710982d 100644 --- a/Jint.Tests.Test262/Test262Harness.settings.json +++ b/Jint.Tests.Test262/Test262Harness.settings.json @@ -7,8 +7,6 @@ "ExcludedFeatures": [ "import-defer", "import-text", - "regexp-unicode-property-escapes", - "regexp-v-flag", "source-phase-imports", "tail-call-optimization" ], @@ -26,55 +24,6 @@ // Currently quite impossible to detect if assignment target is CoverParenthesizedExpression "language/expressions/assignment/fn-name-lhs-cover.js", - // === REGEX EXCLUSIONS === - - // CharacterClassEscapes tests internally use v flag which is not supported - "built-ins/RegExp/CharacterClassEscapes/*.js", - - // .NET regex engine: forward backreferences not supported in ECMAScript mode - "built-ins/RegExp/S15.10.2.11_A1_T5.js", - "built-ins/RegExp/S15.10.2.11_A1_T7.js", - "language/literals/regexp/named-groups/forward-reference.js", - "built-ins/RegExp/named-groups/non-unicode-references.js", - "built-ins/RegExp/named-groups/unicode-references.js", - - // .NET regex engine: lookbehind backreference capture semantics differ from JS - "built-ins/RegExp/lookBehind/back-references-to-captures.js", - "built-ins/RegExp/lookBehind/mutual-recursive.js", - - // .NET regex engine: nullable quantifier and lookahead capture group semantics differ - "built-ins/RegExp/nullable-quantifier.js", - "built-ins/RegExp/lookahead-quantifier-match-groups.js", - - // .NET regex engine: scoped regexp modifiers don't fully match ECMAScript boundary and multiline semantics - "built-ins/RegExp/regexp-modifiers/add-ignoreCase-affects-slash-lower-b.js", - "built-ins/RegExp/regexp-modifiers/add-ignoreCase-affects-slash-lower-w.js", - "built-ins/RegExp/regexp-modifiers/add-ignoreCase-affects-slash-upper-b.js", - "built-ins/RegExp/regexp-modifiers/add-ignoreCase-affects-slash-upper-w.js", - "built-ins/RegExp/regexp-modifiers/add-multiline.js", - "built-ins/RegExp/regexp-modifiers/remove-multiline-does-not-affect-dotAll-flag.js", - - // .NET regex engine: complex quantifier capture group tracking differs - "built-ins/RegExp/S15.10.2.5_A1_T4.js", - "built-ins/RegExp/prototype/exec/S15.10.6.2_A1_T6.js", - - // .NET regex engine: Unicode case folding tables differ from ECMAScript CaseFolding.txt - "language/literals/regexp/u-case-mapping.js", - "built-ins/RegExp/unicode_full_case_folding.js", - - // .NET regex engine: quantifier values exceeding int.MaxValue - "built-ins/RegExp/quantifier-integer-limit.js", - - // .NET regex engine: quantified groups with alternation retain captures from previous iterations - // (JavaScript resets non-participating groups per iteration, .NET does not) - "built-ins/RegExp/named-groups/duplicate-names-exec.js", - "built-ins/RegExp/named-groups/duplicate-names-match.js", - "built-ins/RegExp/named-groups/duplicate-names-test.js", - "built-ins/RegExp/prototype/exec/duplicate-named-groups-properties.js", - "built-ins/RegExp/prototype/exec/duplicate-named-indices-groups-properties.js", - "built-ins/String/prototype/match/duplicate-named-groups-properties.js", - "built-ins/String/prototype/match/duplicate-named-indices-groups-properties.js", - // requires investigation how to process complex function name evaluation for property "built-ins/Function/prototype/toString/method-computed-property-name.js", @@ -355,13 +304,7 @@ "intl402/Temporal/ZonedDateTime/prototype/with/leap-year-hebrew.js", "intl402/Temporal/ZonedDateTime/prototype/withCalendar/extreme-dates.js", "intl402/Temporal/ZonedDateTime/prototype/year/arithmetic-year.js", - "intl402/Temporal/ZonedDateTime/prototype/year/epoch-year.js", - - // === ANNEX B EXCLUSIONS === - - // Acornima parser/RegExp limitation: malformed named groups in non-unicode mode - // Per B.1.2, non-unicode RegExp should accept some malformed named group syntax - "annexB/built-ins/RegExp/named-groups/non-unicode-malformed.js" + "intl402/Temporal/ZonedDateTime/prototype/year/epoch-year.js" ] } diff --git a/Jint.Tests.Test262/Test262Test.cs b/Jint.Tests.Test262/Test262Test.cs index 1154d695c8..d55fea1f05 100644 --- a/Jint.Tests.Test262/Test262Test.cs +++ b/Jint.Tests.Test262/Test262Test.cs @@ -1,7 +1,6 @@ #nullable enable using Jint.Native; -using Jint.Native.Error; using Jint.Native.Object; using Jint.Runtime; using Jint.Runtime.Interop; diff --git a/Jint.Tests/Runtime/ScriptModulePreparationTests.ScriptPreparation.cs b/Jint.Tests/Runtime/ScriptModulePreparationTests.ScriptPreparation.cs index fcb15cadfe..6e65f93230 100644 --- a/Jint.Tests/Runtime/ScriptModulePreparationTests.ScriptPreparation.cs +++ b/Jint.Tests/Runtime/ScriptModulePreparationTests.ScriptPreparation.cs @@ -22,8 +22,12 @@ public void CanPreCompileRegex() var declaration = Assert.IsType(script.Program.Body[0]); var init = Assert.IsType(declaration.Declarations[0].Init); - init.Value.ToString().Should().Be("[cgt]"); - (init.Value.Options & RegexOptions.Compiled).Should().Be(RegexOptions.Compiled); + // Regex is pre-compiled during preparation with Compiled flag + var regex = init.ParseResult.Regex; + regex.Should().NotBeNull(); + (regex!.Options & RegexOptions.Compiled).Should().Be(RegexOptions.Compiled); + + // Prepared script executes correctly new Engine().Evaluate(script).AsNumber().Should().Be(1); } diff --git a/Jint/Engine.Ast.cs b/Jint/Engine.Ast.cs index 13075da536..3e843dad4e 100644 --- a/Jint/Engine.Ast.cs +++ b/Jint/Engine.Ast.cs @@ -29,6 +29,7 @@ public static Prepared