Commit graph

761 commits

Author SHA1 Message Date
Moonchild
8d3f23ed00 Issue #2103 - Fix typo in RegExp Parser
This corrects the typo where the left-hand character would determine if
the right-hand character would be added or not.

Resolves #2103
2023-02-02 21:43:39 +08:00
Martok
f75e9d9441 Issue #2089 - Implement the Promise.any combinator
Based-on: m-c 1568903/9,1560300
2023-02-02 09:32:17 +08:00
Martok
9fc50a9920 Issue #2089 - Rename shared Promise combinator functions, with helpers for element functions
Based-on: m-c 1568903/{5-8}
2023-02-02 09:31:56 +08:00
Martok
61c99bf6cd Issue #2089 - Implement AggregateError
Based-on: m-c 1568903/4,1641355(partial),1652148,1643397
2023-02-02 09:31:39 +08:00
Martok
209c8e06a2 Issue #2089 - Move ErrorObject parts from jsexn.cpp to ErrorObject.cpp
Based-on: m-c 1568903/2
2023-02-02 09:31:16 +08:00
Martok
92906d4da5 Issue #2089 - Add cache for Promise property lookups
Based-on: m-c 1475678/11
2023-02-02 09:31:00 +08:00
Job Bautista
10ef0da5a0 Issue #2099 - Remove unnecessary cast in GeneratorObject::suspend's do loop.
This resolves build bustage with --enable-debug.
2023-02-01 07:42:40 +08:00
Job Bautista
22dc363c3a Issue #2083 - Follow-up: RegExpShared::source should be a GCPtr.
A hangover from before RegExpShared was a GC thing, as noted by m-c 1399928.
2023-02-01 07:42:23 +08:00
Martok
a215929a31 Issue #2089 - Report unhandled rejection for optimized away promise
Based-on: m-c 1498775
2023-02-01 07:42:07 +08:00
Martok
078daa705a Issue #2089 - Further runtime perf improvements for PromiseState
- Reduce slot size of PromiseReactionRecord to fit into OBJECT8 alloc kind
- Use the Call() helper from Interpreter.h to reduce code duplication
- Clear the incumbent global slot when it's no longer used

Based-on: m-c 1475678/{12-14}
2023-02-01 07:40:48 +08:00
Martok
5ff7a51da0 Issue #2089 - Create a shared helper for PerformPromiseRace, PerformPromiseAll and PerformPromiseAllSettled
Replace the previous non-CommonPerformPromiseAllRace port with the unified one

Based-on: m-c 1475678/10,1539694
2023-02-01 07:40:29 +08:00
Martok
c0b1bf7e1e Issue #2089 - Add a PromiseCapability struct, directly initialize dense elements in PerformPromiseAll using NewbornArrayPush
Based-on: m-c 1475678/{8,9}
2023-02-01 07:40:02 +08:00
Martok
1fd51e14f3 Issue #2089 - Improve Runtime perf of Promises
- reduce typecasting
- reduce rooting already rooted values
- directly handle unwrapped promises

Based-on: m-c 1475678/{1-7}
2023-02-01 07:39:42 +08:00
Martok
ee395231dd Issue #2089 - Don't use BlockOnPromise fast path with non-default resolving functions, combine default resolving functions flags
Based-on: m-c 1474348
2023-02-01 07:39:25 +08:00
Martok
9744b0c2bc Issue #2089 - Optimize Promise.then and Promise.all/race with default resolving functions
Based-on: m-c 1401508,1412200,1473970/{1-4}
2023-02-01 07:39:01 +08:00
Martok
55eacd43a4 Issue #2089 - Turn AsyncGeneratorResumeNext recursion into iteration to avoid stack overflow
Based-on: m-c 1416809
2023-02-01 07:38:35 +08:00
Martok
6e2201d3a8 Issue #2089 - Only create result Promises in Promise#then and Promise#catch if it's used or the creation is otherwise observable
Based-on: m-c 1342070
2023-02-01 07:38:16 +08:00
Martok
ed8af362be Issue #2089 - Shrink Promise instances from 8 to 4 slots by moving debug information to an external object
Based-on: m-c 1342050
2023-02-01 07:37:53 +08:00
Job Bautista
233802c9ab Revert "Issue #1382 - RegExpShared::groupsTemplate_ cannot be a GCPtr since RegExpShared is managed by C++"
This workaround has been obsoleted by the work on Issue #2083.
This reverts commit bbd743608685ec77ebebe480761118db8a988253.
2023-02-01 07:37:24 +08:00
Job Bautista
b7e4530861 Issue #2083 - Part 5: Fix memory leak in RegExpObject.
Based on Mozilla bug 1345177.
2023-02-01 07:37:02 +08:00
Job Bautista
9824659d3c Issue #2083 - Part 4: Give RegExpShared a finalizer.
Based on Mozilla bug 1345177.
2023-02-01 07:36:42 +08:00
Job Bautista
2ac60a27c7 Issue #2083 - Part 3: Fix RegExpShared rooting hazards now it's a GC thing.
Based on Mozilla bug 1345177.
Changes from the original bug's patch:

- The original patch didn't have a dotAll for a call to irregexp::ParsePattern,
  so let's make our dotAll a member of the MutableHandleRegExpShared re.
- Make RegExpShared::initializeNamedCaptures, introduced in Issue #1285, static.
  This resolves a build bustage where static RegExpShared::compile was trying to
  use a member function.
2023-02-01 07:36:25 +08:00
Job Bautista
d163d08cb2 Issue #2083 - Part 2: Remove use of RegExpGuard.
Based on Mozilla bug 1345177.
There were more uses of RegExpGuard in js/src/builtin/RegExp.cpp not found in
 the original bug's patch.
2023-02-01 07:36:07 +08:00
Job Bautista
3796c7c1e1 Issue #2083 - Part 1: Make RegExpShared a GC thing.
Based on Mozilla bug 1345177.
Changes from the original bug's patch:

- We don't have JS::CurrentThreadIsHeapCollecting, so let's use
  trc->runtime()->isHeapCollecting() instead.
- Mozilla bug 1337117 renamed runtimeFromMainThread to
  runtimeFromActiveCooperatingThread for Firefox 54, so let's use the former
2023-02-01 07:35:50 +08:00
Moonchild
8f3badf882 Issue #1382 - Remove incorrect assertion.
Tag #2090 #2095
2023-01-30 12:56:00 +08:00
Martok
70279e1eb2 Issue #2093 - Trace HeapPtr<RegExpShared::groupsTemplate_> for GC move/compact events, regression from #2072 2023-01-26 11:41:33 +08:00
Job Bautista
8495231395 Issue #2091 - Parse \p{Extended_Pictographic} too.
This is essentially a follow up to Issue #1286. We already have
 UCHAR_EXTENDED_PICTOGRAPHIC in our in-tree ICU, so there's no reason to comment
 this case out.
2023-01-26 11:41:21 +08:00
Martok
ece0496985 Issue #2089 - Avoid copying/recreating iterator result, AsyncGeneratorRequest and GeneratorObject expression stacks
Based-on: m-c 1394682,1410283,1396499
2023-01-26 11:40:56 +08:00
Martok
8322304fb3 Issue #2089 - In Promises, use a C++ version of SpeciesConstructor when calling from C++
Based-on: m-c 1344656,1386534
2023-01-26 11:40:28 +08:00
Martok
6b50dd5d06 Issue #2089 - Use JS engine stack if necessary when reporting errors
Based-on: m-c 996060
2023-01-26 11:39:57 +08:00
Martok
0216108195 No issue - Throw error when resolving or rejecting promise returned by async function with testing function
Based-on: m-c 1418106
2023-01-26 11:39:31 +08:00
Martok
531906eb87 No issue - add API to tell Profile Timeline Recording state to JS engine
Based-on: m-c 1342070/5
2023-01-26 11:38:40 +08:00
Martok
1230808583 No issue - Cleanup unused function exports to self-hosted global
Based-on: m-c 1325696
2023-01-26 11:38:19 +08:00
Martok
41c2b34542 No issue - Remove "code" from jsprototype.h macros
Based-on: m-c 1394084
2023-01-26 11:38:07 +08:00
Martok
7d2b83fafc No issue - reformat GlobalObject::skipDeselectedConstructor 2023-01-26 11:37:54 +08:00
Martok
2db0386e65 No issue - implement js::NativeDefineDataProperty helper 2023-01-26 11:37:43 +08:00
Moonchild
549389d327 No issue - factor out some frame iterator helper functions. 2023-01-19 09:41:27 +08:00
Job Bautista
ee541a5330 Issue #80 - Re-unify some more missed sources in js/src 2023-01-13 13:29:05 +08:00
FranklinDM
2f7f622cd4 No issue - Fix invalid neq check on assert in RegExpParser 2023-01-10 07:41:54 +08:00
Martok
86782b8f39 Issue #1382 - RegExpShared::groupsTemplate_ cannot be a GCPtr since RegExpShared is managed by C++ 2023-01-06 20:36:47 +08:00
Job Bautista
507ed86ef5 Issue #80 - Fix deprot in js/src/irregexp.
Regression seems to have been introduced by PR #2060? This tree didn't fail
 building before we've reinstated unified building for js/src.
Found while building js/src de-unified.
2022-12-30 09:23:06 +08:00
Job Bautista
5c505b86ca No issue - Fallthrough attributes must be terminated with semicolon.
This also fixes building with Clang 15 on Linux.
2022-12-30 09:21:30 +08:00
FranklinDM
558b83975c Issue #2065 - Part 3: Process install manifests with --track in the recursive make backend
This excludes parts that remove support for building the Mozilla SDK.
Based on https://bugzilla.mozilla.org/show_bug.cgi?id=1390916
2022-12-30 09:20:05 +08:00
Martok
904ddfa28f Follow-up #2060 - Correctly handle \k in non-unicode expressions 2022-12-30 09:08:53 +08:00
Martok
81a8ac427a Issue #1286 - Parse unicode property escapes and property sequences
In addition to upstream, we also allow RGI-named sequences since they're used in the wild.
2022-12-24 08:09:55 +08:00
Martok
d2e0e199b7 No issue - Refactor CharacterRange + Unicode handling into module for maintainability
Collects code from RegExpParser and RegExpEngine (regexp-compiler-tonode.cc)
Simplify parsing AtomEscape/CharacterClassEscape
2022-12-24 08:09:52 +08:00
Martok
6eead2deb4 Issue #1285 - Implement named capturing groups for replacing 2022-12-24 08:09:49 +08:00
Martok
e81a8d866d Issue #1285 - implement named capturing groups and named backrefs
- RegExpParser collects seen groups in named_captures_.
- After irregexp::ParsePattern has finished, RegExpParser::StoreNamedCaptureMap translates
  the parser data to RegExpCompileData.capture_name/index
- RegExpShared::initializeNamedCaptures takes these and builds a PlainObject map which
  is kept with the compiled expression
This is done because irregexp doesn't have access to the JS context and so can't allocate
any JSValues itself.
- for each match result, this map is used to build PlainObjects of name->match/undefined
  (extremely simplified from upstream at the expense of some perf)

IonMonkey switches to non-masm code path for expressions with named groups.
2022-12-24 08:09:39 +08:00
Martok
05a8a5271c No issue - Refactor parsing of unicode escapes to be more general 2022-12-24 08:09:37 +08:00
Martok
952f2273b6 No issue - Fix VectorMatchPairs allocating more memory than required 2022-12-24 08:09:33 +08:00