Skip to content

Commit 7cea99e

Browse files
authored
Merge branch 'nodejs:main' into main
2 parents f50e3ff + dec0213 commit 7cea99e

File tree

71 files changed

+1725
-553
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1725
-553
lines changed

.github/workflows/post-release.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Post-Release actions
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: The version to generate a blog post for.
8+
type: string
9+
required: true
10+
release:
11+
types: [released]
12+
13+
permissions:
14+
contents: read
15+
16+
jobs:
17+
post-release-actions:
18+
if: github.repository == 'nodejs/node'
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Trigger update-links workflow on nodejs/release-cloudflare-worker
22+
run: |
23+
gh workflow run update-links.yml --repo nodejs/release-cloudflare-worker
24+
env:
25+
GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
26+
27+
- name: Trigger create-release-post workflow on nodejs/nodejs.org
28+
run: |
29+
gh workflow run create-release-post.yml --repo nodejs/nodejs.org -f version=$VERSION
30+
env:
31+
GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}
32+
VERSION: ${{ inputs.version || github.event.release.tag_name }}

.github/workflows/update-release-links.yml

Lines changed: 0 additions & 20 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
Select a Node.js version below to view the changelog history:
44

55
* [Node.js 25](doc/changelogs/CHANGELOG_V25.md) **Current**
6-
* [Node.js 24](doc/changelogs/CHANGELOG_V24.md) **Current**
6+
* [Node.js 24](doc/changelogs/CHANGELOG_V24.md) **Long Term Support**
77
* [Node.js 23](doc/changelogs/CHANGELOG_V23.md) End-of-Life
8-
* [Node.js 22](doc/changelogs/CHANGELOG_V22.md) **Long Term Support**
8+
* [Node.js 22](doc/changelogs/CHANGELOG_V22.md) Long Term Support
99
* [Node.js 21](doc/changelogs/CHANGELOG_V21.md) End-of-Life
1010
* [Node.js 20](doc/changelogs/CHANGELOG_V20.md) Long Term Support
1111
* [Node.js 19](doc/changelogs/CHANGELOG_V19.md) End-of-Life
@@ -35,16 +35,18 @@ release.
3535
<table>
3636
<tr>
3737
<th title="Current"><a href="doc/changelogs/CHANGELOG_V25.md">25</a> (Current)</th>
38-
<th title="Current"><a href="doc/changelogs/CHANGELOG_V24.md">24</a> (Current)</th>
38+
<th title="LTS Until 2028-04"><a href="doc/changelogs/CHANGELOG_V24.md">24</a> (LTS)</th>
3939
<th title="LTS Until 2027-04"><a href="doc/changelogs/CHANGELOG_V22.md">22</a> (LTS)</th>
4040
<th title="LTS Until 2026-04"><a href="doc/changelogs/CHANGELOG_V20.md">20</a> (LTS)</th>
4141
</tr>
4242
<tr>
4343
<td valign="top">
44-
<b><a href="doc/changelogs/CHANGELOG_V25.md#25.0.0">25.0.0</a></b><br/>
44+
<b><a href="doc/changelogs/CHANGELOG_V25.md#25.1.0">25.1.0</a></b><br/>
45+
<a href="doc/changelogs/CHANGELOG_V25.md#25.0.0">25.0.0</a><br/>
4546
</td>
4647
<td valign="top">
47-
<b><a href="doc/changelogs/CHANGELOG_V24.md#24.10.0">24.10.0</a></b><br/>
48+
<b><a href="doc/changelogs/CHANGELOG_V24.md#24.11.0">24.11.0</a></b><br/>
49+
<a href="doc/changelogs/CHANGELOG_V24.md#24.10.0">24.10.0</a><br/>
4850
<a href="doc/changelogs/CHANGELOG_V24.md#24.9.0">24.9.0</a><br/>
4951
<a href="doc/changelogs/CHANGELOG_V24.md#24.8.0">24.8.0</a><br/>
5052
<a href="doc/changelogs/CHANGELOG_V24.md#24.7.0">24.7.0</a><br/>
@@ -60,7 +62,8 @@ release.
6062
<a href="doc/changelogs/CHANGELOG_V24.md#24.0.0">24.0.0</a><br/>
6163
</td>
6264
<td valign="top">
63-
<b><a href="doc/changelogs/CHANGELOG_V22.md#22.21.0">22.21.0</a></b><br/>
65+
<b><a href="doc/changelogs/CHANGELOG_V22.md#22.21.1">22.21.1</a></b><br/>
66+
<a href="doc/changelogs/CHANGELOG_V22.md#22.21.0">22.21.0</a><br/>
6467
<a href="doc/changelogs/CHANGELOG_V22.md#22.20.0">22.20.0</a><br/>
6568
<a href="doc/changelogs/CHANGELOG_V22.md#22.19.0">22.19.0</a><br/>
6669
<a href="doc/changelogs/CHANGELOG_V22.md#22.18.0">22.18.0</a><br/>

benchmark/streams/finished.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const { Readable, Writable } = require('stream');
5+
const { finished } = require('stream/promises');
6+
7+
const bench = common.createBenchmark(main, {
8+
n: [1e7],
9+
streamType: ['readable', 'writable'],
10+
});
11+
12+
async function main({ n, streamType }) {
13+
bench.start();
14+
15+
for (let i = 0; i < n; i++) {
16+
let stream;
17+
18+
switch (streamType) {
19+
case 'readable':
20+
stream = new Readable({ read() { this.push(null); } });
21+
stream.resume();
22+
break;
23+
case 'writable':
24+
stream = new Writable({ write(chunk, enc, cb) { cb(); } });
25+
stream.end();
26+
break;
27+
}
28+
29+
await finished(stream);
30+
}
31+
32+
bench.end(n);
33+
}

deps/v8/include/v8-version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#define V8_MAJOR_VERSION 14
1212
#define V8_MINOR_VERSION 2
1313
#define V8_BUILD_NUMBER 231
14-
#define V8_PATCH_LEVEL 9
14+
#define V8_PATCH_LEVEL 14
1515

1616
// Use 1 for candidates and 0 otherwise.
1717
// (Boolean macro values are not supported by all preprocessors.)

deps/v8/src/builtins/loong64/builtins-loong64.cc

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3185,12 +3185,9 @@ void ReloadParentStack(MacroAssembler* masm, Register return_reg,
31853185
Register parent = tmp2;
31863186
__ Ld_d(parent, MemOperand(active_stack, wasm::kStackParentOffset));
31873187

3188-
// Update active stack.
3189-
__ StoreRootRelative(IsolateData::active_stack_offset(), parent);
3190-
31913188
// Switch stack!
3192-
SwitchStacks(masm, ExternalReference::wasm_return_stack(), active_stack,
3193-
nullptr, no_reg, {return_reg, return_value, context, parent});
3189+
SwitchStacks(masm, ExternalReference::wasm_return_stack(), parent, nullptr,
3190+
no_reg, {return_reg, return_value, context, parent});
31943191
LoadJumpBuffer(masm, parent, false, tmp3);
31953192
}
31963193

@@ -3425,22 +3422,18 @@ void Builtins::Generate_WasmSuspend(MacroAssembler* masm) {
34253422
ResetWasmJspiFrameStackSlots(masm);
34263423

34273424
Label resume;
3428-
DEFINE_REG(stack);
3429-
__ LoadRootRelative(stack, IsolateData::active_stack_offset());
34303425
DEFINE_REG(scratch);
34313426

3432-
// Update active stack.
34333427
DEFINE_REG(parent);
34343428
__ LoadProtectedPointerField(
34353429
parent, FieldMemOperand(suspender, WasmSuspenderObject::kParentOffset));
34363430
DEFINE_REG(target_stack);
34373431
__ LoadExternalPointerField(
34383432
target_stack, FieldMemOperand(parent, WasmSuspenderObject::kStackOffset),
34393433
kWasmStackMemoryTag);
3440-
__ StoreRootRelative(IsolateData::active_stack_offset(), target_stack);
34413434

3442-
SwitchStacks(masm, ExternalReference::wasm_suspend_stack(), stack, &resume,
3443-
no_reg, {target_stack, suspender, parent});
3435+
SwitchStacks(masm, ExternalReference::wasm_suspend_stack(), target_stack,
3436+
&resume, no_reg, {target_stack, suspender, parent});
34443437
__ StoreRootRelative(IsolateData::active_suspender_offset(), parent);
34453438
__ LoadTaggedField(
34463439
kReturnRegister0,
@@ -3512,11 +3505,8 @@ void Generate_WasmResumeHelper(MacroAssembler* masm, wasm::OnResume on_resume) {
35123505
target_stack,
35133506
FieldMemOperand(suspender, WasmSuspenderObject::kStackOffset),
35143507
kWasmStackMemoryTag);
3515-
3516-
__ StoreRootRelative(IsolateData::active_stack_offset(), target_stack);
3517-
SwitchStacks(masm, ExternalReference::wasm_resume_jspi_stack(), active_stack,
3508+
SwitchStacks(masm, ExternalReference::wasm_resume_jspi_stack(), target_stack,
35183509
&suspend, suspender, {target_stack});
3519-
35203510
regs.ResetExcept(target_stack);
35213511

35223512
// -------------------------------------------
@@ -3563,11 +3553,8 @@ void Builtins::Generate_WasmFXResume(MacroAssembler* masm) {
35633553
__ EnterFrame(StackFrame::WASM_STACK_EXIT);
35643554
Register target_stack = WasmFXResumeDescriptor::GetRegisterParameter(0);
35653555
Label suspend;
3566-
Register active_stack = a0;
3567-
__ LoadRootRelative(active_stack, IsolateData::active_stack_offset());
3568-
__ StoreRootRelative(IsolateData::active_stack_offset(), target_stack);
35693556
SwitchStacks(masm, ExternalReference::wasm_resume_wasmfx_stack(),
3570-
active_stack, &suspend, no_reg, {target_stack});
3557+
target_stack, &suspend, no_reg, {target_stack});
35713558
LoadJumpBuffer(masm, target_stack, true, a1);
35723559
__ Trap();
35733560
__ bind(&suspend);
@@ -3580,9 +3567,8 @@ void Builtins::Generate_WasmFXReturn(MacroAssembler* masm) {
35803567
__ LoadRootRelative(active_stack, IsolateData::active_stack_offset());
35813568
Register parent = a1;
35823569
__ Move(parent, MemOperand(active_stack, wasm::kStackParentOffset));
3583-
__ StoreRootRelative(IsolateData::active_stack_offset(), parent);
3584-
SwitchStacks(masm, ExternalReference::wasm_return_stack(), active_stack,
3585-
nullptr, no_reg, {parent});
3570+
SwitchStacks(masm, ExternalReference::wasm_return_stack(), parent, nullptr,
3571+
no_reg, {parent});
35863572
LoadJumpBuffer(masm, parent, true, a2);
35873573
__ Trap();
35883574
}
@@ -3599,14 +3585,15 @@ void SwitchToAllocatedStack(MacroAssembler* masm, RegisterAllocator& regs,
35993585
Label* suspend) {
36003586
ResetWasmJspiFrameStackSlots(masm);
36013587
DEFINE_SCOPED(scratch)
3602-
DEFINE_REG(parent_stack)
3603-
__ LoadRootRelative(parent_stack, IsolateData::active_stack_offset());
3604-
__ Ld_d(parent_stack, MemOperand(parent_stack, wasm::kStackParentOffset));
3605-
3606-
SwitchStacks(masm, ExternalReference::wasm_start_stack(), parent_stack,
3607-
suspend, no_reg, {wasm_instance, wrapper_buffer});
3588+
DEFINE_REG(stack)
3589+
__ LoadRootRelative(stack, IsolateData::active_suspender_offset());
3590+
__ LoadExternalPointerField(
3591+
stack, FieldMemOperand(stack, WasmSuspenderObject::kStackOffset),
3592+
kWasmStackMemoryTag);
3593+
SwitchStacks(masm, ExternalReference::wasm_start_stack(), stack, suspend,
3594+
no_reg, {wasm_instance, wrapper_buffer});
36083595

3609-
FREE_REG(parent_stack);
3596+
FREE_REG(stack);
36103597
// Save the old stack's fp in t0, and use it to access the parameters in
36113598
// the parent frame.
36123599
regs.Pinned(t1, &original_fp);

deps/v8/src/codegen/loong64/macro-assembler-loong64.cc

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,58 @@ void MacroAssembler::PushStandardFrame(Register function_reg) {
142142
Add_d(fp, sp, Operand(offset));
143143
}
144144

145+
void MacroAssembler::PreCheckSkippedWriteBarrier(Register object,
146+
Register value,
147+
Register scratch, Label* ok) {
148+
ASM_CODE_COMMENT(this);
149+
DCHECK(!AreAliased(object, scratch));
150+
DCHECK(!AreAliased(value, scratch));
151+
152+
// The most common case: Static write barrier elimination is allowed on the
153+
// last young allocation.
154+
{
155+
UseScratchRegisterScope temps(this);
156+
Register scratch1 = temps.Acquire();
157+
Sub_d(scratch, object, kHeapObjectTag);
158+
Ld_d(scratch1, MemOperand(kRootRegister,
159+
IsolateData::last_young_allocation_offset()));
160+
Branch(ok, Condition::kEqual, scratch, Operand(scratch1));
161+
}
162+
163+
// Write barier can also be removed if value is in read-only space.
164+
CheckPageFlag(value, MemoryChunk::kIsInReadOnlyHeapMask, ne, ok);
165+
166+
Label not_ok;
167+
168+
// Handle allocation folding, allow WB removal if:
169+
// LAB start <= last_young_allocation_ < (object address+1) < LAB top
170+
// Note that object has tag bit set, so object == object address+1.
171+
{
172+
UseScratchRegisterScope temps(this);
173+
Register scratch1 = temps.Acquire();
174+
175+
// Check LAB start <= last_young_allocation_.
176+
Ld_d(scratch, MemOperand(kRootRegister,
177+
IsolateData::new_allocation_info_start_offset()));
178+
Ld_d(scratch1, MemOperand(kRootRegister,
179+
IsolateData::last_young_allocation_offset()));
180+
Branch(&not_ok, Condition::kUnsignedGreaterThan, scratch,
181+
Operand(scratch1));
182+
183+
// Check last_young_allocation_ < (object address+1).
184+
Branch(&not_ok, Condition::kUnsignedGreaterThanEqual, scratch1,
185+
Operand(object));
186+
187+
// Check (object address+1) < LAB top.
188+
Ld_d(scratch, MemOperand(kRootRegister,
189+
IsolateData::new_allocation_info_top_offset()));
190+
Branch(ok, Condition::kUnsignedLessThan, object, Operand(scratch));
191+
}
192+
193+
// Slow path: Potentially check more cases in C++.
194+
bind(&not_ok);
195+
}
196+
145197
// Clobbers object, dst, value, and ra, if (ra_status == kRAHasBeenSaved)
146198
// The register 'object' contains a heap object pointer. The heap object
147199
// tag is shifted away.
@@ -582,11 +634,33 @@ void MacroAssembler::CallVerifySkippedWriteBarrierStubSaveRegisters(
582634
void MacroAssembler::CallVerifySkippedWriteBarrierStub(Register object,
583635
Register value) {
584636
ASM_CODE_COMMENT(this);
637+
UseScratchRegisterScope temps(this);
638+
Register scratch = temps.Acquire();
639+
PrepareCallCFunction(2, scratch);
585640
MovePair(kCArgRegs[0], object, kCArgRegs[1], value);
586641
CallCFunction(ExternalReference::verify_skipped_write_barrier(), 2,
587642
SetIsolateDataSlots::kNo);
588643
}
589644

645+
void MacroAssembler::CallVerifySkippedIndirectWriteBarrierStubSaveRegisters(
646+
Register object, Register value, SaveFPRegsMode fp_mode) {
647+
ASM_CODE_COMMENT(this);
648+
PushCallerSaved(fp_mode);
649+
CallVerifySkippedIndirectWriteBarrierStub(object, value);
650+
PopCallerSaved(fp_mode);
651+
}
652+
653+
void MacroAssembler::CallVerifySkippedIndirectWriteBarrierStub(Register object,
654+
Register value) {
655+
ASM_CODE_COMMENT(this);
656+
UseScratchRegisterScope temps(this);
657+
Register scratch = temps.Acquire();
658+
PrepareCallCFunction(2, scratch);
659+
MovePair(kCArgRegs[0], object, kCArgRegs[1], value);
660+
CallCFunction(ExternalReference::verify_skipped_indirect_write_barrier(), 2,
661+
SetIsolateDataSlots::kNo);
662+
}
663+
590664
void MacroAssembler::MoveObjectAndSlot(Register dst_object, Register dst_slot,
591665
Register object, Operand offset) {
592666
ASM_CODE_COMMENT(this);

deps/v8/src/codegen/loong64/macro-assembler-loong64.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ class V8_EXPORT_PRIVATE MacroAssembler : public MacroAssemblerBase {
181181
void LoadRootRelative(Register destination, int32_t offset) final;
182182
void StoreRootRelative(int32_t offset, Register value) final;
183183

184+
void PreCheckSkippedWriteBarrier(Register object, Register value,
185+
Register scratch, Label* ok);
186+
184187
// Operand pointing to an external reference.
185188
// May emit code to set up the scratch register. The operand is
186189
// only guaranteed to be correct as long as the scratch register
@@ -360,6 +363,11 @@ class V8_EXPORT_PRIVATE MacroAssembler : public MacroAssemblerBase {
360363
SaveFPRegsMode fp_mode);
361364
void CallVerifySkippedWriteBarrierStub(Register object, Register value);
362365

366+
void CallVerifySkippedIndirectWriteBarrierStubSaveRegisters(
367+
Register object, Register value, SaveFPRegsMode fp_mode);
368+
void CallVerifySkippedIndirectWriteBarrierStub(Register object,
369+
Register value);
370+
363371
// For a given |object| and |offset|:
364372
// - Move |object| to |dst_object|.
365373
// - Compute the address of the slot pointed to by |offset| in |object| and

deps/v8/src/codegen/source-position-table.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ struct PositionTableEntry {
3636
int code_offset;
3737
bool is_statement;
3838
bool is_breakable;
39+
40+
bool operator==(const PositionTableEntry&) const = default;
3941
};
4042

4143
class V8_EXPORT_PRIVATE SourcePositionTableBuilder {
@@ -95,6 +97,8 @@ class V8_EXPORT_PRIVATE SourcePositionTableIterator {
9597
PositionTableEntry position_;
9698
IterationFilter iteration_filter_;
9799
FunctionEntryFilter function_entry_filter_;
100+
101+
bool operator==(const IndexAndPositionState&) const = default;
98102
};
99103

100104
// We expose three flavours of the iterator, depending on the argument passed

0 commit comments

Comments
 (0)