LibJS: Drop source ranges from bytecode source maps

Store source map locations as bytecode offset, line, and column.
Runtime consumers only emit the start line and column, so source end
positions and source text offsets do not need to be carried through
Executable source maps, bytecode cache serialization, or the Rust FFI.

Keep SourceCode's internal position cache able to track source text
offsets so callers can still translate source offsets to line and
column pairs when needed. Hash dump-bytecode IDs from the name, first
source position, and bytecode size instead of source slices that need
end offsets.

Bump the bytecode cache format version for the slimmer serialized
source map entry shape.
This commit is contained in:
Andreas Kling 2026-05-14 08:29:39 +02:00 committed by Andreas Kling
parent b6ac36c200
commit 21cbfb3cb1
162 changed files with 478 additions and 513 deletions

View file

@ -45,7 +45,10 @@ public:
BasicBlock const* handler() const { return m_handler; }
auto const& source_map() const { return m_source_map; }
void add_source_map_entry(u32 bytecode_offset, SourceRecord const& source_record) { m_source_map.append({ bytecode_offset, source_record }); }
void add_source_map_entry(u32 bytecode_offset, Position source_start)
{
m_source_map.append({ bytecode_offset, source_start.line, source_start.column });
}
[[nodiscard]] bool has_resolved_this() const { return m_has_resolved_this; }
void set_has_resolved_this() { m_has_resolved_this = true; }

View file

@ -112,36 +112,46 @@ void Executable::fixup_cache_pointers()
}
}
static SourceMapEntry const* first_real_source_map_entry(Executable const& executable)
{
SourceMapEntry const* first_entry = nullptr;
for (auto const& entry : executable.source_map) {
if (entry.line == 0 && entry.column == 0)
continue;
if (!first_entry || entry.line < first_entry->line || (entry.line == first_entry->line && entry.column < first_entry->column))
first_entry = &entry;
}
return first_entry;
}
static void dump_header(StringBuilder& output, Executable const& executable, bool use_color)
{
auto const white_bold = use_color ? "\033[37;1m"sv : ""sv;
auto const reset = use_color ? "\033[0m"sv : ""sv;
// Generate a stable hash from the source text for identification.
// We hash source code rather than bytecode so the ID is stable
// across changes to bytecode generation.
// Find the overall source range covered by this executable.
u32 source_start = NumericLimits<u32>::max();
u32 source_end = 0;
Optional<Position> first_position;
for (auto const& entry : executable.source_map) {
if (entry.source_record.start.offset < entry.source_record.end.offset) {
source_start = min(source_start, entry.source_record.start.offset);
source_end = max(source_end, entry.source_record.end.offset);
if (!first_position.has_value() || entry.source_record.start.offset < first_position->offset)
first_position = entry.source_record.start;
}
}
auto const* first_source_map_entry = first_real_source_map_entry(executable);
u32 hash = 2166136261u; // FNV-1a offset basis
auto code_view = executable.source_code->code_view();
for (auto i = source_start; i < source_end && i < code_view.length_in_code_units(); ++i) {
auto code_unit = code_view.code_unit_at(i);
auto update_hash = [&](u32 value) {
for (size_t i = 0; i < sizeof(value); ++i) {
hash ^= (value >> (i * 8)) & 0xFF;
hash *= 16777619u;
}
};
auto update_hash_with_code_unit = [&](u16 code_unit) {
hash ^= code_unit & 0xFF;
hash *= 16777619u;
hash ^= (code_unit >> 8) & 0xFF;
hash *= 16777619u;
};
auto name_view = executable.name.view();
for (size_t i = 0; i < name_view.length_in_code_units(); ++i)
update_hash_with_code_unit(name_view.code_unit_at(i));
if (first_source_map_entry) {
update_hash(first_source_map_entry->line);
update_hash(first_source_map_entry->column);
}
update_hash(static_cast<u32>(min(executable.bytecode.size(), static_cast<size_t>(NumericLimits<u32>::max()))));
if (executable.name.is_empty())
output.appendff("{}${:08x}{}", white_bold, hash, reset);
@ -149,16 +159,16 @@ static void dump_header(StringBuilder& output, Executable const& executable, boo
output.appendff("{}{}${:08x}{}", white_bold, executable.name, hash, reset);
// Show source location if available.
if (source_start < source_end && first_position.has_value()) {
if (first_source_map_entry) {
auto filename = executable.source_code->filename();
if (!filename.is_empty()) {
// Show just the basename to keep output portable across machines.
auto last_slash = filename.bytes_as_string_view().find_last('/');
if (last_slash.has_value())
filename = MUST(filename.substring_from_byte_offset(last_slash.value() + 1));
output.appendff(" {}:{}:{}", filename, first_position->line, first_position->column);
output.appendff(" {}:{}:{}", filename, first_source_map_entry->line, first_source_map_entry->column);
} else {
output.appendff(" line {}, column {}", first_position->line, first_position->column);
output.appendff(" line {}, column {}", first_source_map_entry->line, first_source_map_entry->column);
}
}
output.append('\n');
@ -421,8 +431,7 @@ Optional<SourceRange> Executable::source_range_at(size_t offset) const
auto& entry = source_map[low - 1];
return SourceRange {
.code = source_code,
.start = entry.source_record.start,
.end = entry.source_record.end,
.start = { .line = entry.line, .column = entry.column },
};
}
@ -431,7 +440,7 @@ SourceRange const& Executable::get_source_range(u32 program_counter)
return m_source_range_cache.ensure(program_counter, [&] {
if (auto source_range = source_range_at(program_counter); source_range.has_value())
return *source_range;
static SourceRange dummy { SourceCode::create({}, {}), {}, {} };
static SourceRange dummy { SourceCode::create({}, {}), {} };
return dummy;
});
}

View file

@ -137,14 +137,10 @@ struct ObjectPropertyIteratorCache {
GC::Ptr<Object> reusable_property_name_iterator;
};
struct SourceRecord {
Position start {};
Position end {};
};
struct SourceMapEntry {
u32 bytecode_offset {};
SourceRecord source_record {};
u32 line {};
u32 column {};
};
class JS_API Executable final

View file

@ -13,7 +13,6 @@ namespace JS {
struct Position {
u32 line { 0 };
u32 column { 0 };
u32 offset { 0 };
};
}

View file

@ -15,7 +15,7 @@
namespace JS {
static SourceRange dummy_source_range { SourceCode::create({}, {}), {}, {} };
static SourceRange dummy_source_range { SourceCode::create({}, {}), {} };
SourceRange const& TracebackFrame::source_range() const
{
@ -67,7 +67,7 @@ Utf16String ErrorData::stack_string(CompactTraceback compact) const
auto const& function_name = frame.function_name;
auto const& source_range = frame.source_range();
// Note: Since we don't know whether we have a valid SourceRange here we just check for some default values.
if (!source_range.filename().is_empty() || source_range.start.offset != 0 || source_range.end.offset != 0) {
if (!source_range.filename().is_empty() || source_range.start.line != 0 || source_range.start.column != 0) {
if (function_name.is_empty())
stack_string_builder.appendff(" at {}:{}:{}\n", source_range.filename(), source_range.start.line, source_range.start.column);

View file

@ -6,14 +6,13 @@
use super::instruction::Instruction;
use super::operand::Label;
use crate::ast::Position;
/// A source map entry mapping a bytecode offset to a source range.
/// A source map entry mapping a bytecode offset to a source position.
#[derive(Debug, Clone, Copy)]
pub struct SourceMapEntry {
pub bytecode_offset: u32,
pub source_start: Position,
pub source_end: Position,
pub line: u32,
pub column: u32,
}
/// A basic block in the bytecode generator.

View file

@ -40,16 +40,12 @@ pub struct FFIExceptionHandler {
pub handler_offset: u32,
}
/// Source map entry mapping bytecode offset to source range.
/// Source map entry mapping bytecode offset to source position.
#[repr(C)]
pub struct FFISourceMapEntry {
pub bytecode_offset: u32,
pub source_start_line: u32,
pub source_start_column: u32,
pub source_start_offset: u32,
pub source_end_line: u32,
pub source_end_column: u32,
pub source_end_offset: u32,
}
/// A borrowed UTF-16 string slice for passing across FFI.
@ -702,12 +698,8 @@ pub unsafe fn create_executable_with_dependencies(
.iter()
.map(|e| FFISourceMapEntry {
bytecode_offset: e.bytecode_offset,
source_start_line: e.source_start.line,
source_start_column: e.source_start.column,
source_start_offset: e.source_start.offset,
source_end_line: e.source_end.line,
source_end_column: e.source_end.column,
source_end_offset: e.source_end.offset,
source_start_line: e.line,
source_start_column: e.column,
})
.collect();

View file

@ -785,8 +785,8 @@ impl Generator {
}
let source_map = SourceMapEntry {
bytecode_offset: 0, // filled during flattening
source_start: self.current_source_start,
source_end: self.current_source_end,
line: self.current_source_start.line,
column: self.current_source_start.column,
};
let block = &mut self.basic_blocks[self.current_block_index.basic_block_index()];
block.append(instruction, source_map);
@ -1646,9 +1646,9 @@ impl Generator {
let mut source_map: Vec<SourceMapEntry> = Vec::new();
let mut exception_handlers: Vec<ExceptionHandler> = Vec::new();
fn push_source_map_entry(source_map: &mut Vec<SourceMapEntry>, entry: SourceMapEntry) {
let should_push = source_map.last().is_none_or(|previous| {
previous.source_start != entry.source_start || previous.source_end != entry.source_end
});
let should_push = source_map
.last()
.is_none_or(|previous| previous.line != entry.line || previous.column != entry.column);
if should_push {
source_map.push(entry);
}
@ -1679,8 +1679,8 @@ impl Generator {
&mut source_map,
SourceMapEntry {
bytecode_offset: u32_from_usize(instruction_offset),
source_start: sm.source_start,
source_end: sm.source_end,
line: sm.line,
column: sm.column,
},
);
instruction.encode(self.strict, &mut bytecode);
@ -1691,8 +1691,8 @@ impl Generator {
&mut source_map,
SourceMapEntry {
bytecode_offset: u32_from_usize(instruction_offset),
source_start: sm.source_start,
source_end: sm.source_end,
line: sm.line,
column: sm.column,
},
);
let replacement = Instruction::Return { value };
@ -1704,8 +1704,8 @@ impl Generator {
&mut source_map,
SourceMapEntry {
bytecode_offset: u32_from_usize(instruction_offset),
source_start: sm.source_start,
source_end: sm.source_end,
line: sm.line,
column: sm.column,
},
);
let replacement = Instruction::End { value };
@ -1720,8 +1720,8 @@ impl Generator {
&mut source_map,
SourceMapEntry {
bytecode_offset: u32_from_usize(instruction_offset),
source_start: sm.source_start,
source_end: sm.source_end,
line: sm.line,
column: sm.column,
},
);
let replacement = Instruction::JumpFalse { condition, target };
@ -1735,8 +1735,8 @@ impl Generator {
&mut source_map,
SourceMapEntry {
bytecode_offset: u32_from_usize(instruction_offset),
source_start: sm.source_start,
source_end: sm.source_end,
line: sm.line,
column: sm.column,
},
);
let replacement = Instruction::JumpTrue { condition, target };
@ -1755,16 +1755,8 @@ impl Generator {
&mut source_map,
SourceMapEntry {
bytecode_offset: u32_from_usize(instruction_offset),
source_start: Position {
line: 0,
column: 0,
offset: 0,
},
source_end: Position {
line: 0,
column: 0,
offset: 0,
},
line: 0,
column: 0,
},
);
end_instruction.encode(self.strict, &mut bytecode);

View file

@ -29,7 +29,7 @@ use crate::bytecode::validator::{
use crate::{CompiledProgram, CompiledProgramBytecode, ModuleCallbacks, ast, u32_from_usize};
const MAGIC: &[u8; 8] = b"LBJSBC\0\0";
const FORMAT_VERSION: u32 = 2;
const FORMAT_VERSION: u32 = 4;
const SOURCE_HASH_SIZE: usize = 32;
const COMPLETION_TYPE_VARIANT_COUNT: u32 = 6;
const ITERATOR_HINT_VARIANT_COUNT: u32 = 2;
@ -2209,12 +2209,8 @@ impl Encode for SourceMapTable<'_> {
fn encode(&self, encoder: &mut Encoder) {
encoder.sequence(&self.0.source_map, |entry, encoder| {
entry.bytecode_offset.encode(encoder);
entry.source_start.line.encode(encoder);
entry.source_start.column.encode(encoder);
entry.source_start.offset.encode(encoder);
entry.source_end.line.encode(encoder);
entry.source_end.column.encode(encoder);
entry.source_end.offset.encode(encoder);
entry.line.encode(encoder);
entry.column.encode(encoder);
});
}
}
@ -2224,8 +2220,8 @@ impl SourceMapTable<'_> {
decoder.sequence_values(|decoder| {
Some(SourceMapEntry {
bytecode_offset: u32::decode(decoder)?,
source_start: ast::Position::decode(decoder)?,
source_end: ast::Position::decode(decoder)?,
line: u32::decode(decoder)?,
column: u32::decode(decoder)?,
})
})
}

View file

@ -78,7 +78,7 @@ static void collect_parse_errors(void* ctx, uint8_t const* message, size_t messa
auto& errors = *static_cast<Vector<ParserError>*>(ctx);
errors.append({
MUST(String::from_utf8({ message, message_len })),
Position { line, column, 0 },
Position { line, column },
});
}
@ -1041,18 +1041,8 @@ extern "C" void* rust_create_executable(
for (size_t i = 0; i < data->source_map_count; ++i) {
executable->source_map.append({
data->source_map[i].bytecode_offset,
{
.start = {
.line = data->source_map[i].source_start_line,
.column = data->source_map[i].source_start_column,
.offset = data->source_map[i].source_start_offset,
},
.end = {
.line = data->source_map[i].source_end_line,
.column = data->source_map[i].source_end_column,
.offset = data->source_map[i].source_end_offset,
},
},
data->source_map[i].source_start_line,
data->source_map[i].source_start_column,
});
}

View file

@ -54,7 +54,7 @@ void SourceCode::fill_position_cache() const
u32 offset_of_last_starting_point = 0;
m_cached_positions.ensure_capacity(predicted_minimum_cached_positions + (m_code.length_in_code_units() / maximum_distance_between_cached_positions));
m_cached_positions.append({ .line = 1, .column = 1, .offset = 0 });
m_cached_positions.append({ .position = { .line = 1, .column = 1 }, .offset = 0 });
auto view = m_code.utf16_view();
@ -69,7 +69,7 @@ void SourceCode::fill_position_cache() const
auto distance_between_cached_position = offset - offset_of_last_starting_point;
if ((distance_between_cached_position >= minimum_distance_between_cached_positions && is_nonempty_line) || distance_between_cached_position >= maximum_distance_between_cached_positions) {
m_cached_positions.append({ .line = line, .column = column, .offset = static_cast<u32>(offset) });
m_cached_positions.append({ .position = { .line = line, .column = column }, .offset = static_cast<u32>(offset) });
offset_of_last_starting_point = offset;
}
@ -84,19 +84,19 @@ void SourceCode::fill_position_cache() const
}
}
SourceRange SourceCode::range_from_offsets(u32 start_offset, u32 end_offset) const
SourceRange SourceCode::range_from_offsets(u32 start_offset, [[maybe_unused]] u32 end_offset) const
{
// If the underlying code is an empty string, the range is 1,1 - 1,1 no matter what.
// If the underlying code is an empty string, the range is 1,1 no matter what.
if (m_code.is_empty())
return { *this, { .line = 1, .column = 1, .offset = 0 }, { .line = 1, .column = 1, .offset = 0 } };
return { *this, { .line = 1, .column = 1 } };
if (m_cached_positions.is_empty())
fill_position_cache();
Position current { .line = 1, .column = 1, .offset = 0 };
CachedPosition current { .position = { .line = 1, .column = 1 }, .offset = 0 };
if (!m_cached_positions.is_empty()) {
Position const dummy;
CachedPosition const dummy;
size_t nearest_index = 0;
binary_search(m_cached_positions, dummy, &nearest_index,
[&](auto&, auto& starting_point) {
@ -107,7 +107,6 @@ SourceRange SourceCode::range_from_offsets(u32 start_offset, u32 end_offset) con
}
Optional<Position> start;
Optional<Position> end;
u32 previous_code_point = 0;
@ -117,42 +116,31 @@ SourceRange SourceCode::range_from_offsets(u32 start_offset, u32 end_offset) con
// If we're on or after the start offset, this is the start position.
if (!start.has_value() && view.iterator_offset(it) >= start_offset) {
start = Position {
.line = current.line,
.column = current.column,
.offset = start_offset,
.line = current.position.line,
.column = current.position.column,
};
}
// If we're on or after the end offset, this is the end position.
if (!end.has_value() && view.iterator_offset(it) >= end_offset) {
end = Position {
.line = current.line,
.column = current.column,
.offset = end_offset,
};
break;
}
u32 code_point = *it;
bool const is_line_terminator = code_point == '\r' || (code_point == '\n' && previous_code_point != '\r') || code_point == LINE_SEPARATOR || code_point == PARAGRAPH_SEPARATOR;
previous_code_point = code_point;
if (is_line_terminator) {
current.line += 1;
current.column = 1;
current.position.line += 1;
current.position.column = 1;
continue;
}
current.column += 1;
current.position.column += 1;
}
// If we didn't find both a start and end position, just return 1,1-1,1.
// If we didn't find a start position, just return 1,1.
// FIXME: This is a hack. Find a way to return the nicest possible values here.
if (!start.has_value() || !end.has_value())
return SourceRange { *this, { .line = 1, .column = 1 }, { .line = 1, .column = 1 } };
if (!start.has_value())
return SourceRange { *this, { .line = 1, .column = 1 } };
return SourceRange { *this, *start, *end };
return SourceRange { *this, *start };
}
}

View file

@ -40,7 +40,11 @@ private:
// starting points (with byte offsets into the source string) and which
// line:column they map to. This can then be binary-searched.
void fill_position_cache() const;
Vector<Position> mutable m_cached_positions;
struct CachedPosition {
Position position;
u32 offset { 0 };
};
Vector<CachedPosition> mutable m_cached_positions;
// Cached UTF-16 widening of ASCII source data, lazily populated by
// utf16_data() for use by the Rust compilation pipeline.

View file

@ -18,11 +18,8 @@
namespace JS {
struct JS_API SourceRange {
[[nodiscard]] bool contains(Position const& position) const { return position.offset <= end.offset && position.offset >= start.offset; }
NonnullRefPtr<SourceCode const> code;
Position start;
Position end;
ByteString filename() const { return code->filename().to_byte_string(); }
};

View file

@ -112,7 +112,7 @@ void DevToolsConsoleClient::report_exception(String const& name, String const& m
if (!frame.function_name.is_empty())
stack_frame.function = frame.function_name.to_utf8();
if (!source_range.filename().is_empty() || source_range.start.offset != 0 || source_range.end.offset != 0) {
if (!source_range.filename().is_empty() || source_range.start.line != 0 || source_range.start.column != 0) {
stack_frame.file = String::from_utf8_with_replacement_character(source_range.filename());
stack_frame.line = source_range.start.line;
stack_frame.column = source_range.start.column;

View file

@ -1,4 +1,4 @@
$64717e3f annex-b-function-in-if.js:13:1
$eeeaa256 annex-b-function-in-if.js:13:1
Registers: 11
Blocks: 1
Constants:
@ -20,7 +20,7 @@ block0:
[ 140] End value:reg7
annexBFunctionInIf$cf6b2161 annex-b-function-in-if.js:2:5
annexBFunctionInIf$f4b6a259 annex-b-function-in-if.js:2:5
Registers: 8
Blocks: 4
Constants:
@ -57,7 +57,7 @@ block3:
[ 190] Return value:reg5
inner$b8316a64 annex-b-function-in-if.js:4:13
inner$b5b8e95a annex-b-function-in-if.js:4:13
Registers: 5
Blocks: 1
Constants:
@ -67,7 +67,7 @@ block0:
[ 0] Return value:String("true branch")
inner$1f25fd67 annex-b-function-in-if.js:8:13
inner$8980a116 annex-b-function-in-if.js:8:13
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$d99dc022 annexb-function-existing-var.js:10:1
$d36729be annexb-function-existing-var.js:10:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
test$de75bc07 annexb-function-existing-var.js:2:5
test$8422248c annexb-function-existing-var.js:2:5
Registers: 7
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$b08b32bb argument-postfix-self-move.js:5:1
$9431c529 argument-postfix-self-move.js:5:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
f$bfdb0dbf argument-postfix-self-move.js:2:6
f$833b82e7 argument-postfix-self-move.js:2:6
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$e3bb9811 argument-variables.js:12:1
$3b8b4350 argument-variables.js:12:1
Registers: 8
Blocks: 1
Constants:
@ -14,7 +14,7 @@ block0:
[ 80] End value:reg6
identity$7176ad76 argument-variables.js:5:5
identity$753f961b argument-variables.js:5:5
Registers: 5
Blocks: 1
@ -22,7 +22,7 @@ block0:
[ 0] Return value:arg0
swap$0ff1f8d6 argument-variables.js:9:5
swap$556fb42c argument-variables.js:9:5
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$69cce752 arguments-with-arguments-fn.js:4:1
$2b997e90 arguments-with-arguments-fn.js:4:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
f$811c9dc5
f$6cd6eab3
Registers: 6
Blocks: 3
Locals: arguments~0

View file

@ -1,4 +1,4 @@
$a49ec34a assign-to-argument-no-tdz.js:11:1
$393b7f47 assign-to-argument-no-tdz.js:11:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
f$71204352 assign-to-argument-no-tdz.js:6:5
f$44906188 assign-to-argument-no-tdz.js:6:5
Registers: 5
Blocks: 1
Locals: y~0

View file

@ -1,4 +1,4 @@
$3dab9a19 assign-to-let-variable-tdz.js:12:1
$bced3bd8 assign-to-let-variable-tdz.js:12:1
Registers: 8
Blocks: 1
Constants:
@ -14,7 +14,7 @@ block0:
[ 78] End value:reg5
f$08c437ee assign-to-let-variable-tdz.js:7:5
f$7105e5e6 assign-to-let-variable-tdz.js:7:5
Registers: 10
Blocks: 3
Locals: a~0
@ -45,7 +45,7 @@ block2:
[ 100] Return value:a~0
g$15d4d90c assign-to-let-variable-tdz.js:4:17
g$f452072f assign-to-let-variable-tdz.js:4:17
Registers: 5
Blocks: 1

View file

@ -1,4 +1,4 @@
$b05eae7c assign-to-parameter.js:8:1
$162ec0dc assign-to-parameter.js:8:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
isect$96caa89c assign-to-parameter.js:5:9
isect$41c8d351 assign-to-parameter.js:5:9
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$0b8784bc async-await-in-try-catch.js:9:1
$793f2555 async-await-in-try-catch.js:9:1
Registers: 8
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 50] End value:reg5
f$9cd82caf async-await-in-try-catch.js:2:5
f$8982c134 async-await-in-try-catch.js:2:5
Registers: 10
Blocks: 8
Locals: e~0

View file

@ -1,4 +1,4 @@
$69cce752 async-await.js:9:1
$fd650eed async-await.js:9:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
f$c9505126 async-await.js:7:5
f$efa3ed5e async-await.js:7:5
Registers: 10
Blocks: 8
Constants:

View file

@ -1,4 +1,4 @@
$bfb1383b async-generator-yield-await.js:6:1
$6a33dffa async-generator-yield-await.js:6:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
f$12f73db2 async-generator-yield-await.js:4:5
f$7363bd74 async-generator-yield-await.js:4:5
Registers: 12
Blocks: 19
Constants:

View file

@ -1,4 +1,4 @@
$bfb1383b async-generator-yield.js:7:1
$516a2e0b async-generator-yield.js:7:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
f$a4f936a8 async-generator-yield.js:5:5
f$aa186530 async-generator-yield.js:5:5
Registers: 10
Blocks: 16
Constants:

View file

@ -1,4 +1,4 @@
$69cce752 async-return-bare.js:4:1
$2b997e90 async-return-bare.js:4:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
f$e646074e async-return-bare.js:2:5
f$e16999cc async-return-bare.js:2:5
Registers: 5
Blocks: 2
Constants:

View file

@ -1,4 +1,4 @@
$52070826 baseline.js:5:1
$8ea9e309 baseline.js:5:1
Registers: 10
Blocks: 1
Constants:
@ -15,7 +15,7 @@ block0:
[ a0] End value:reg5
add$782c0096 baseline.js:2:5
add$9f351e1b baseline.js:2:5
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$811c9dc5
$ccf7ed9d
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$ab928610 bigint-constant-folding.js:1:1
$7ca8f805 bigint-constant-folding.js:1:1
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$66877791 bigint-large-constant-folding.js:2:1
$343fb726 bigint-large-constant-folding.js:2:1
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$a2397124 bigint-truthiness.js:2:1
$266c01d6 bigint-truthiness.js:2:1
Registers: 6
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$3063fdab bitwise-numeric-preconvert.js:4:1
$acfb7718 bitwise-numeric-preconvert.js:4:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
test$355d3f01 bitwise-numeric-preconvert.js:2:5
test$e718c164 bitwise-numeric-preconvert.js:2:5
Registers: 6
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$7ec14918 block-function-declaration-order.js:1:1
$ae8c96e2 block-function-declaration-order.js:1:1
Registers: 7
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$d99dc022 block-scoped-function-no-tdz.js:10:1
$d36729be block-scoped-function-no-tdz.js:10:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 38] End value:reg5
test$8f4c6018 block-scoped-function-no-tdz.js:3:5
test$65d0907d block-scoped-function-no-tdz.js:3:5
Registers: 7
Blocks: 1
Locals: foo~0, result~1
@ -30,7 +30,7 @@ block0:
[ 88] Return value:result~1
foo$48752efa block-scoped-function-no-tdz.js:5:26
foo$f46a9b04 block-scoped-function-no-tdz.js:5:26
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$975f41e0 block-scoping.js:13:1
$fcbe57a6 block-scoping.js:13:1
Registers: 11
Blocks: 1
Constants:
@ -18,7 +18,7 @@ block0:
[ 130] End value:reg7
closureOverBlockScope$4f0633f8 block-scoping.js:2:15
closureOverBlockScope$61104af2 block-scoping.js:2:15
Registers: 10
Blocks: 1
Locals: fns~0
@ -54,7 +54,7 @@ block0:
[ 1f8] Return value:reg7
$551734f7 block-scoping.js:5:18
$4bcefff2 block-scoping.js:5:18
Registers: 6
Blocks: 1
@ -63,7 +63,7 @@ block0:
[ 18] Return value:reg5
$2f14ba8e block-scoping.js:9:18
$3664423e block-scoping.js:9:18
Registers: 6
Blocks: 1
@ -72,7 +72,7 @@ block0:
[ 18] Return value:reg5
breakThroughBlockScopes$c915ba4a block-scoping.js:16:5
breakThroughBlockScopes$bb8ff62f block-scoping.js:16:5
Registers: 8
Blocks: 7
Locals: f~0, i~1, result~2
@ -115,7 +115,7 @@ block6:
[ 120] Jump target:block2
f$551734f7 block-scoping.js:20:21
f$e7dc110a block-scoping.js:20:21
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$da4d2529 call-spread-register-order.js:2:1
$973653fe call-spread-register-order.js:2:1
Registers: 10
Blocks: 1
Constants:
@ -15,7 +15,7 @@ block0:
[ 80] End value:reg5
f$811c9dc5
f$7aaaa003
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$6cc1cfb5 captured-variables.js:12:1
$c7fd0018 captured-variables.js:12:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
outer$0300a3f9 captured-variables.js:5:5
outer$e7583c0c captured-variables.js:5:5
Registers: 7
Blocks: 1
Locals: inner~0
@ -29,7 +29,7 @@ block0:
[ 88] Return value:reg6
inner$f798183e captured-variables.js:7:9
inner$e471f8e5 captured-variables.js:7:9
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$b00b92b3 catch-scope-boundary.js:14:1
$3a6e508d catch-scope-boundary.js:14:1
Registers: 11
Blocks: 1
Constants:
@ -18,7 +18,7 @@ block0:
[ 130] End value:reg7
throwInCatch$ff1cead7 catch-scope-boundary.js:2:5
throwInCatch$94c0d746 catch-scope-boundary.js:2:5
Registers: 7
Blocks: 7
Locals: e2~0, e~1, result~2
@ -61,7 +61,7 @@ Exception handlers:
[ 88 .. 90] => handler block1
throwInCatchWithLocals$a73f2041 catch-scope-boundary.js:17:5
throwInCatchWithLocals$35b0d9e9 catch-scope-boundary.js:17:5
Registers: 9
Blocks: 5
Locals: inner~0, catchLocal~1, e~2, outerVar~3

View file

@ -1,4 +1,4 @@
$c0e94b43 chained-member-call.js:12:1
$82bdc9cb chained-member-call.js:12:1
Registers: 10
Blocks: 7
Constants:
@ -44,7 +44,7 @@ Exception handlers:
[ e8 .. 158] => handler block4
chained_computed_call$df45ff7f chained-member-call.js:5:5
chained_computed_call$78bf026a chained-member-call.js:5:5
Registers: 8
Blocks: 1
@ -57,7 +57,7 @@ block0:
[ 80] Return value:reg5
chained_dot_call$9501e458 chained-member-call.js:9:5
chained_dot_call$4ef00940 chained-member-call.js:9:5
Registers: 8
Blocks: 1

View file

@ -1,4 +1,4 @@
$91a5a724 class-computed-field-lhs-name.js:1:1
$00cee19d class-computed-field-lhs-name.js:1:1
Registers: 7
Blocks: 1
Constants:
@ -18,7 +18,7 @@ block0:
[ 90] End value:reg6
C$811c9dc5
C$e7b179de
Registers: 5
Blocks: 1
Constants:
@ -28,7 +28,7 @@ block0:
[ 0] End value:Undefined
field$d817cc70 class-computed-field-lhs-name.js:2:15
field$e1b95ffa class-computed-field-lhs-name.js:2:15
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$69cce752 class-computed-key.js:10:1
$d36729be class-computed-key.js:10:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
f$7455d328 class-computed-key.js:4:5
f$88b2a512 class-computed-key.js:4:5
Registers: 8
Blocks: 1

View file

@ -1,4 +1,4 @@
$5f9e2ffb class-environment.js:9:1
$241c3dcd class-environment.js:9:1
Registers: 10
Blocks: 1
Constants:
@ -13,7 +13,7 @@ block0:
[ 98] End value:reg5
classWithName$8829de8e class-environment.js:2:13
classWithName$155d62f1 class-environment.js:2:13
Registers: 8
Blocks: 1
Locals: C~0
@ -34,7 +34,7 @@ block0:
[ c0] Return value:reg7
Foo$811c9dc5
Foo$534d924b
Registers: 5
Blocks: 1
Constants:
@ -44,7 +44,7 @@ block0:
[ 0] End value:Undefined
method$e3fa2040 class-environment.js:4:13
method$f198ceab class-environment.js:4:13
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$e092f884 class-lhs-name-no-createvariable.js:1:1
$e7eb680d class-lhs-name-no-createvariable.js:1:1
Registers: 7
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$b4f9525c class-literal-fields.js:12:1
$ccb44156 class-literal-fields.js:12:1
Registers: 15
Blocks: 1
Constants:
@ -26,7 +26,7 @@ block0:
[ 210] End value:reg5
test$657cc1d3 class-literal-fields.js:2:5
test$7bd6515c class-literal-fields.js:2:5
Registers: 7
Blocks: 1
Locals: A~0
@ -51,7 +51,7 @@ block0:
[ 98] Return value:reg6
A$811c9dc5
A$ef0589ec
Registers: 5
Blocks: 1
Constants:
@ -61,7 +61,7 @@ block0:
[ 0] End value:Undefined
field$4297853c class-literal-fields.js:8:22
field$d016a301 class-literal-fields.js:8:22
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$17c08991 computed-compound-assign-register-reuse.js:9:1
$9d326325 computed-compound-assign-register-reuse.js:9:1
Registers: 9
Blocks: 1
Constants:
@ -12,7 +12,7 @@ block0:
[ 80] End value:reg5
subVector$1525553e computed-compound-assign-register-reuse.js:5:13
subVector$3599dc10 computed-compound-assign-register-reuse.js:5:13
Registers: 9
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$d6bbce15 computed-member-access.js:12:1
$3e4f3460 computed-member-access.js:12:1
Registers: 9
Blocks: 1
Constants:
@ -15,7 +15,7 @@ block0:
[ b0] End value:reg6
computed_read$a6f67e31 computed-member-access.js:5:5
computed_read$f0ef6ac1 computed-member-access.js:5:5
Registers: 7
Blocks: 1
Constants:
@ -27,7 +27,7 @@ block0:
[ 28] Return value:reg6
computed_read_expression$adb2a228 computed-member-access.js:9:5
computed_read_expression$c18fd380 computed-member-access.js:9:5
Registers: 7
Blocks: 1

View file

@ -1,4 +1,4 @@
$b23ddabf computed-member-compound-assign.js:15:1
$7fc74e7b computed-member-compound-assign.js:15:1
Registers: 9
Blocks: 1
Constants:
@ -18,7 +18,7 @@ block0:
[ c8] End value:reg6
compound_computed$3d35f992 computed-member-compound-assign.js:7:14
compound_computed$811bdddb computed-member-compound-assign.js:7:14
Registers: 8
Blocks: 1
Constants:
@ -33,7 +33,7 @@ block0:
[ 50] End value:Undefined
compound_then_assign$fda157e3 computed-member-compound-assign.js:11:13
compound_then_assign$aead8c3c computed-member-compound-assign.js:11:13
Registers: 8
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$2d41d92c computed-string-object-literal.js:15:1
$f8dd73d3 computed-string-object-literal.js:15:1
Registers: 8
Blocks: 1
Constants:
@ -15,7 +15,7 @@ block0:
[ b0] End value:reg5
simple_computed$4b41b515 computed-string-object-literal.js:6:5
simple_computed$ee1d99de computed-string-object-literal.js:6:5
Registers: 6
Blocks: 1
Constants:
@ -28,7 +28,7 @@ block0:
[ 38] Return value:reg5
mixed$5c18a76a computed-string-object-literal.js:9:5
mixed$9f3e333c computed-string-object-literal.js:9:5
Registers: 6
Blocks: 1
Constants:
@ -43,7 +43,7 @@ block0:
[ 50] Return value:reg5
dynamic$ae7fe9ae computed-string-object-literal.js:12:5
dynamic$fd0d2731 computed-string-object-literal.js:12:5
Registers: 7
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$90ad3082 computed-string-to-ById.js:17:1
$dc43d5b2 computed-string-to-ById.js:17:1
Registers: 9
Blocks: 1
Constants:
@ -20,7 +20,7 @@ block0:
[ 140] End value:reg6
get_string_prop$fa843635 computed-string-to-ById.js:5:5
get_string_prop$d6b42da3 computed-string-to-ById.js:5:5
Registers: 7
Blocks: 1
Constants:
@ -32,7 +32,7 @@ block0:
[ 30] Return value:reg6
set_string_prop$5b793bae computed-string-to-ById.js:8:16
set_string_prop$592a21c7 computed-string-to-ById.js:8:16
Registers: 6
Blocks: 1
Constants:
@ -46,7 +46,7 @@ block0:
[ 38] End value:Undefined
get_index_prop$f6a04ecf computed-string-to-ById.js:11:5
get_index_prop$a54df54e computed-string-to-ById.js:11:5
Registers: 7
Blocks: 1
Constants:
@ -58,7 +58,7 @@ block0:
[ 28] Return value:reg6
get_length_prop$2983fb9b computed-string-to-ById.js:14:5
get_length_prop$813e14f1 computed-string-to-ById.js:14:5
Registers: 7
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$b70081a4 computed-update-register-order.js:8:1
$9790b964 computed-update-register-order.js:8:1
Registers: 8
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 70] End value:reg5
test$c6be6338 computed-update-register-order.js:5:9
test$7becb49f computed-update-register-order.js:5:9
Registers: 8
Blocks: 1
Constants:
@ -28,7 +28,7 @@ block0:
[ 90] End value:Undefined
foo$7176ad76 computed-update-register-order.js:2:5
foo$93622fcc computed-update-register-order.js:2:5
Registers: 5
Blocks: 1

View file

@ -1,4 +1,4 @@
$4a68760f condition-dead-code-elim.js:141:1
$ec8fc79b condition-dead-code-elim.js:141:1
Registers: 8
Blocks: 1
Constants:
@ -31,7 +31,7 @@ block0:
[ 270] End value:reg5
ternary_true$adbcc261 condition-dead-code-elim.js:9:5
ternary_true$cd62d477 condition-dead-code-elim.js:9:5
Registers: 5
Blocks: 1
Constants:
@ -42,7 +42,7 @@ block0:
[ 0] Return value:Int32(1)
ternary_truthy$8671fdc6 condition-dead-code-elim.js:12:5
ternary_truthy$8c4636c2 condition-dead-code-elim.js:12:5
Registers: 5
Blocks: 1
Constants:
@ -52,7 +52,7 @@ block0:
[ 0] Return value:Int32(1)
ternary_false$1fde34b2 condition-dead-code-elim.js:15:5
ternary_false$0ff09522 condition-dead-code-elim.js:15:5
Registers: 5
Blocks: 1
Constants:
@ -63,7 +63,7 @@ block0:
[ 0] Return value:Int32(1)
ternary_falsey$1c25e5ad condition-dead-code-elim.js:18:5
ternary_falsey$47046b1e condition-dead-code-elim.js:18:5
Registers: 5
Blocks: 1
Constants:
@ -74,7 +74,7 @@ block0:
[ 0] Return value:Int32(1)
while_falsey$5d6360eb condition-dead-code-elim.js:33:5
while_falsey$17590e95 condition-dead-code-elim.js:33:5
Registers: 7
Blocks: 1
Constants:
@ -88,7 +88,7 @@ block0:
[ 38] End value:Undefined
alive$57b46309 condition-dead-code-elim.js:2:5
alive$dfea904d condition-dead-code-elim.js:2:5
Registers: 5
Blocks: 1
Constants:
@ -98,7 +98,7 @@ block0:
[ 0] Return value:String("alive")
do_while_falsey$799dde23 condition-dead-code-elim.js:37:9
do_while_falsey$2b22dba1 condition-dead-code-elim.js:37:9
Registers: 7
Blocks: 4
Constants:
@ -124,7 +124,7 @@ block3:
[ e0] End value:Undefined
if_falsely$5d6360eb condition-dead-code-elim.js:62:5
if_falsely$537336d6 condition-dead-code-elim.js:62:5
Registers: 7
Blocks: 1
Constants:
@ -138,7 +138,7 @@ block0:
[ 38] End value:Undefined
if_truthy$ac929a95 condition-dead-code-elim.js:66:9
if_truthy$a6783770 condition-dead-code-elim.js:66:9
Registers: 7
Blocks: 1
Constants:
@ -159,7 +159,7 @@ block0:
[ e0] End value:Undefined
if_exhausted$80f20e23 condition-dead-code-elim.js:90:9
if_exhausted$9d4f2301 condition-dead-code-elim.js:90:9
Registers: 7
Blocks: 1
Constants:
@ -177,7 +177,7 @@ block0:
[ a8] End value:Undefined
for_false$2883f85d condition-dead-code-elim.js:109:5
for_false$23671fdc condition-dead-code-elim.js:109:5
Registers: 7
Blocks: 9
Locals: x~0
@ -218,7 +218,7 @@ block8:
[ b0] End value:Undefined
call_this$77eb3a07 condition-dead-code-elim.js:105:5
call_this$7cdf005a condition-dead-code-elim.js:105:5
Registers: 5
Blocks: 1
Constants:
@ -228,7 +228,7 @@ block0:
[ 0] Return value:Int32(1)
for_true$81dd51ad condition-dead-code-elim.js:128:5
for_true$e3e30115 condition-dead-code-elim.js:128:5
Registers: 7
Blocks: 11
Constants:

View file

@ -1,4 +1,4 @@
$e6445d4a conditional-register-order.js:4:1
$2b997e90 conditional-register-order.js:4:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
foo$3dbe5650 conditional-register-order.js:2:5
foo$1d0ffb84 conditional-register-order.js:2:5
Registers: 6
Blocks: 4
Constants:

View file

@ -1,4 +1,4 @@
$5904f18d const-assignment-no-extra-tdz.js:5:1
$0a83f971 const-assignment-no-extra-tdz.js:5:1
Registers: 9
Blocks: 4
Locals: e~0
@ -28,7 +28,7 @@ Exception handlers:
[ 48 .. b0] => handler block1
f$22fe0a32 const-assignment-no-extra-tdz.js:2:5
f$e16999cc const-assignment-no-extra-tdz.js:2:5
Registers: 5
Blocks: 1
Locals: x~0

View file

@ -1,4 +1,4 @@
$68a257fc const-fold-exponentiation.js:1:1
$e7eb680d const-fold-exponentiation.js:1:1
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$dc4cd9dd const-fold-template-literals.js:20:1
$5034494e const-fold-template-literals.js:20:1
Registers: 7
Blocks: 1
Constants:
@ -42,7 +42,7 @@ block0:
[ 2d0] End value:Undefined
prefix$f72ec249 const-fold-template-literals.js:2:5
prefix$722bd91a const-fold-template-literals.js:2:5
Registers: 6
Blocks: 1
Constants:
@ -54,7 +54,7 @@ block0:
[ 20] Return value:reg5
suffix$5b9fba3e const-fold-template-literals.js:5:5
suffix$a92a9be2 const-fold-template-literals.js:5:5
Registers: 6
Blocks: 1
Constants:
@ -66,7 +66,7 @@ block0:
[ 20] Return value:reg5
tostring$1567fc7c const-fold-template-literals.js:8:5
tostring$ba142bc6 const-fold-template-literals.js:8:5
Registers: 6
Blocks: 1
@ -75,7 +75,7 @@ block0:
[ 10] Return value:reg5
multi$f3ef7824 const-fold-template-literals.js:11:5
multi$05431102 const-fold-template-literals.js:11:5
Registers: 6
Blocks: 1
@ -86,7 +86,7 @@ block0:
[ 30] Return value:reg5
literal$c7e85f9e const-fold-template-literals.js:14:5
literal$12c5c655 const-fold-template-literals.js:14:5
Registers: 6
Blocks: 1
Constants:
@ -96,7 +96,7 @@ block0:
[ 0] Return value:String("hello world")
empty$93602216 const-fold-template-literals.js:17:5
empty$4890c274 const-fold-template-literals.js:17:5
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$8ea0b7a6 constant-fold-large-string-to-number.js:1:1
$e7eb680d constant-fold-large-string-to-number.js:1:1
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$199ac30a constant-fold-string-to-number.js:1:1
$e7eb680d constant-fold-string-to-number.js:1:1
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$bfb1383b default-param-self-reference.js:2:1
$b865a0be default-param-self-reference.js:2:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
f$e162c485 default-param-self-reference.js:1:16
f$d753a0ea default-param-self-reference.js:1:16
Registers: 5
Blocks: 3
Constants:

View file

@ -1,4 +1,4 @@
$bfb1383b delete-expression-register.js:6:1
$6a33dffa delete-expression-register.js:6:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
f$2bc22ddd delete-expression-register.js:3:7
f$04c49ea7 delete-expression-register.js:3:7
Registers: 7
Blocks: 3
Locals: x~0, arguments~1

View file

@ -1,4 +1,4 @@
$7867793e delete-super-eval-order.js:4:1
$67bc40cb delete-super-eval-order.js:4:1
Registers: 10
Blocks: 4
Constants:
@ -36,7 +36,7 @@ Exception handlers:
[ a8 .. 150] => handler block1
A$811c9dc5
A$ef0589ec
Registers: 5
Blocks: 1
Constants:
@ -46,7 +46,7 @@ block0:
[ 0] End value:Undefined
m$0f0a711c delete-super-eval-order.js:6:9
m$0f7c4977 delete-super-eval-order.js:6:9
Registers: 7
Blocks: 2
Constants:

View file

@ -1,4 +1,4 @@
$2915e894 delete-super-property.js:1:1
$752dc5b7 delete-super-property.js:1:1
Registers: 11
Blocks: 7
Locals: e~0, e~1
@ -55,7 +55,7 @@ Exception handlers:
[ 188 .. 228] => handler block4
A$811c9dc5
A$ef0589ec
Registers: 5
Blocks: 1
Constants:
@ -65,7 +65,7 @@ block0:
[ 0] End value:Undefined
foo$7dff3f72 delete-super-property.js:3:9
foo$7707d509 delete-super-property.js:3:9
Registers: 7
Blocks: 2
Constants:
@ -81,7 +81,7 @@ block1:
[ 28] End value:Undefined
baz$cb4e52e2 delete-super-property.js:6:9
baz$8acb3acb delete-super-property.js:6:9
Registers: 7
Blocks: 2
Constants:

View file

@ -1,4 +1,4 @@
$69cce752 destructure-array-rest.js:9:1
$fd650eed destructure-array-rest.js:9:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
f$e318a32c destructure-array-rest.js:6:5
f$88fef6f3 destructure-array-rest.js:6:5
Registers: 12
Blocks: 6
Locals: a~0, b~1

View file

@ -1,4 +1,4 @@
$490efcb5 destructuring-assignment-in-logical-and.js:5:1
$9431c529 destructuring-assignment-in-logical-and.js:5:1
Registers: 7
Blocks: 1
Constants:
@ -12,7 +12,7 @@ block0:
[ 40] End value:reg5
f$c5d7e0b7 destructuring-assignment-in-logical-and.js:2:5
f$bd59b03f destructuring-assignment-in-logical-and.js:2:5
Registers: 12
Blocks: 10
Locals: a~0, b~1

View file

@ -1,4 +1,4 @@
$6b0803e2 destructuring-assignment.js:28:1
$f2f04dd8 destructuring-assignment.js:28:1
Registers: 8
Blocks: 1
Constants:
@ -14,7 +14,7 @@ block0:
[ a8] End value:reg5
array_destructuring_with_class_default$c0397068 destructuring-assignment.js:6:10
array_destructuring_with_class_default$28ef14a9 destructuring-assignment.js:6:10
Registers: 13
Blocks: 7
Locals: x~0
@ -57,7 +57,7 @@ block6:
[ 140] Return value:x~0
object_destructuring_with_function_default$544c1fbd destructuring-assignment.js:12:12
object_destructuring_with_function_default$497a8092 destructuring-assignment.js:12:12
Registers: 8
Blocks: 3
Locals: x~0
@ -80,7 +80,7 @@ block2:
[ 90] Return value:x~0
setter_parameter_resolution$75109441 destructuring-assignment.js:19:9
setter_parameter_resolution$2898cc06 destructuring-assignment.js:19:9
Registers: 12
Blocks: 5
Constants:
@ -116,7 +116,7 @@ block4:
[ 168] Jump target:block3
set y$f36f0033 destructuring-assignment.js:21:26
set y$72954fa9 destructuring-assignment.js:21:26
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$59a926ae destructuring-let-compound-assign.js:5:1
$99b9a749 destructuring-let-compound-assign.js:5:1
Registers: 9
Blocks: 1
Constants:
@ -12,7 +12,7 @@ block0:
[ 60] End value:reg5
f$0c16b60f destructuring-let-compound-assign.js:2:5
f$fa4d135c destructuring-let-compound-assign.js:2:5
Registers: 8
Blocks: 1
Locals: a~0

View file

@ -1,4 +1,4 @@
$7861a666 destructuring-no-base-identifier.js:1:1
$32b2807a destructuring-no-base-identifier.js:1:1
Registers: 12
Blocks: 5
Constants:

View file

@ -1,4 +1,4 @@
$34849cbe destructuring-param-no-param-expressions.js:10:1
$2e11f366 destructuring-param-no-param-expressions.js:10:1
Registers: 8
Blocks: 1
Constants:
@ -16,7 +16,7 @@ block0:
[ 90] End value:reg5
f$84013cfc destructuring-param-no-param-expressions.js:7:5
f$41e63819 destructuring-param-no-param-expressions.js:7:5
Registers: 6
Blocks: 1
Locals: local~0

View file

@ -1,4 +1,4 @@
$d99dc022 do-while-register-allocation.js:15:1
$6c6bb70b do-while-register-allocation.js:15:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
test$21b235ef do-while-register-allocation.js:9:5
test$e414328f do-while-register-allocation.js:9:5
Registers: 9
Blocks: 4
Locals: i~0
@ -38,7 +38,7 @@ block3:
[ e0] End value:Undefined
foo$7176ad76 do-while-register-allocation.js:2:5
foo$93622fcc do-while-register-allocation.js:2:5
Registers: 5
Blocks: 1
@ -46,7 +46,7 @@ block0:
[ 0] Return value:arg0
bar$7176ad76 do-while-register-allocation.js:5:5
bar$cbf37924 do-while-register-allocation.js:5:5
Registers: 5
Blocks: 1

View file

@ -1,4 +1,4 @@
$e6445d4a double-constant-deduplication.js:8:1
$162ec0dc double-constant-deduplication.js:8:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
foo$afa1fb9c double-constant-deduplication.js:2:5
foo$9e71f40c double-constant-deduplication.js:2:5
Registers: 7
Blocks: 1
Locals: a~0, b~1, c~2

View file

@ -1,4 +1,4 @@
$2de61f8f eval-prevents-locals.js:22:1
$a036f1fa eval-prevents-locals.js:22:1
Registers: 8
Blocks: 1
Constants:
@ -12,7 +12,7 @@ block0:
[ 70] End value:reg6
with_eval$28a6eab0 eval-prevents-locals.js:6:5
with_eval$361b5eed eval-prevents-locals.js:6:5
Registers: 9
Blocks: 1
Constants:
@ -31,7 +31,7 @@ block0:
[ a8] Return value:reg6
eval$811c9dc5
eval$b72141f3
Registers: 5
Blocks: 1
Constants:
@ -41,7 +41,7 @@ block0:
[ 0] End value:Undefined
outer_eval$85fe2dd2 eval-prevents-locals.js:14:9
outer_eval$6785167a eval-prevents-locals.js:14:9
Registers: 8
Blocks: 1
Constants:
@ -61,7 +61,7 @@ block0:
[ e0] Return value:reg5
eval$811c9dc5
eval$b72141f3
Registers: 5
Blocks: 1
Constants:
@ -71,7 +71,7 @@ block0:
[ 0] End value:Undefined
inner$cbedf31d eval-prevents-locals.js:16:9
inner$1897993a eval-prevents-locals.js:16:9
Registers: 5
Blocks: 1
Locals: y~0

View file

@ -1,4 +1,4 @@
$e6445d4a eval-same-function.js:10:1
$d36729be eval-same-function.js:10:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
foo$a4ff2c4f eval-same-function.js:6:9
foo$c25bdd1c eval-same-function.js:6:9
Registers: 8
Blocks: 1
Constants:
@ -27,7 +27,7 @@ block0:
[ 88] Return value:reg5
eval$3c61584c line 1, column 1
eval$6295ffeb line 1, column 1
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$6cc1cfb5 eval-scope-optimization.js:12:1
$c7fd0018 eval-scope-optimization.js:12:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
outer$6201e926 eval-scope-optimization.js:9:5
outer$2f7d7ac8 eval-scope-optimization.js:9:5
Registers: 7
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$169c53c3 expression-identifier-number-format.js:1:1
$f8830e6d expression-identifier-number-format.js:1:1
Registers: 8
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$1faa0c14 for-in-block-order.js:5:1
$916dd419 for-in-block-order.js:5:1
Registers: 8
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 50] End value:reg5
foo$ad9db83a for-in-block-order.js:2:16
foo$3b347bf9 for-in-block-order.js:2:16
Registers: 8
Blocks: 6
Locals: k~0

View file

@ -1,4 +1,4 @@
$6f3aad7a for-in-lexical-scope.js:1:12
$3122836b for-in-lexical-scope.js:1:12
Registers: 12
Blocks: 6
Constants:

View file

@ -1,4 +1,4 @@
$5af00ff4 for-in-object-property-iterator-next.js:8:1
$298a584c for-in-object-property-iterator-next.js:8:1
Registers: 8
Blocks: 1
Constants:
@ -21,7 +21,7 @@ block0:
[ c8] End value:reg5
collect$4195dbe6 for-in-object-property-iterator-next.js:2:18
collect$a74ca55b for-in-object-property-iterator-next.js:2:18
Registers: 12
Blocks: 6
Locals: key~0, keys~1

View file

@ -1,4 +1,4 @@
$811c9dc5
$ccf7ed9d
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$0d42cfa1 for-in-register-lifetime.js:1:1
$ee43eb0f for-in-register-lifetime.js:1:1
Registers: 14
Blocks: 6
Constants:

View file

@ -1,4 +1,4 @@
$a37f24d4 for-in-var-function-lhs-name.js:7:1
$d0083583 for-in-var-function-lhs-name.js:7:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
fn$a115675f for-in-var-function-lhs-name.js:4:19
fn$4477295a for-in-var-function-lhs-name.js:4:19
Registers: 8
Blocks: 6
Locals: f~0

View file

@ -1,4 +1,4 @@
$1eaa9a1f for-loop-break-after-if-continue.js:11:1
$393b7f47 for-loop-break-after-if-continue.js:11:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
bok$e37018c9 for-loop-break-after-if-continue.js:6:9
bok$3c12db64 for-loop-break-after-if-continue.js:6:9
Registers: 5
Blocks: 4
Constants:

View file

@ -1,4 +1,4 @@
$5198286f for-loop-scoping.js:8:1
$3ce5efbc for-loop-scoping.js:8:1
Registers: 10
Blocks: 1
Constants:
@ -13,7 +13,7 @@ block0:
[ 98] End value:reg5
forLetClosure$ab480781 for-loop-scoping.js:2:15
forLetClosure$9d2e257d for-loop-scoping.js:2:15
Registers: 10
Blocks: 5
Locals: fns~0
@ -63,7 +63,7 @@ block4:
[ 260] Return value:reg5
$a78bf47f for-loop-scoping.js:6:20
$617ce76f for-loop-scoping.js:6:20
Registers: 6
Blocks: 1
Constants:
@ -74,7 +74,7 @@ block0:
[ 20] Return value:reg5
$ceed13fe for-loop-scoping.js:4:18
$732f8c03 for-loop-scoping.js:4:18
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$9cd3e64e for-of-cond-rhs-block-order.js:6:1
$6a33dffa for-of-cond-rhs-block-order.js:6:1
Registers: 7
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 40] End value:reg5
f$0adf9089 for-of-cond-rhs-block-order.js:2:21
f$567c3f32 for-of-cond-rhs-block-order.js:2:21
Registers: 17
Blocks: 20
Locals: r~0, n~1

View file

@ -1,4 +1,4 @@
$90bea1bc for-of-continue-with-block-scope.js:13:1
$2b0d6491 for-of-continue-with-block-scope.js:13:1
Registers: 8
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 50] End value:reg5
f$cb6e0975 for-of-continue-with-block-scope.js:2:15
f$a6e23ba8 for-of-continue-with-block-scope.js:2:15
Registers: 18
Blocks: 12
Locals: o~0, t~1

View file

@ -1,4 +1,4 @@
$abb2d42c for-of-iteration-env-capacity.js:1:14
$0a509d5d for-of-iteration-env-capacity.js:1:14
Registers: 13
Blocks: 10
Locals: x~0

View file

@ -1,4 +1,4 @@
$d21ee499 for-of-iterator-close.js:6:1
$04795212 for-of-iterator-close.js:6:1
Registers: 9
Blocks: 1
Constants:
@ -15,7 +15,7 @@ block0:
[ d8] End value:reg5
forOfBreak$0cb6b2e2 for-of-iterator-close.js:2:18
forOfBreak$0dacb993 for-of-iterator-close.js:2:18
Registers: 13
Blocks: 13
Locals: x~0
@ -79,7 +79,7 @@ Exception handlers:
[ b8 .. 108] => handler block3
forOfReturn$1ac7c5b6 for-of-iterator-close.js:9:18
forOfReturn$3e676e69 for-of-iterator-close.js:9:18
Registers: 12
Blocks: 10
Locals: x~0
@ -133,7 +133,7 @@ Exception handlers:
[ b8 .. f0] => handler block3
forAwaitOfBreak$1ffc670e for-of-iterator-close.js:16:24
forAwaitOfBreak$0834dde7 for-of-iterator-close.js:16:24
Registers: 18
Blocks: 30
Locals: x~0

View file

@ -1,4 +1,4 @@
$811c9dc5
$ccf7ed9d
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$7e6e32fd for-try-finally-continue.js:1:1
$6ce1f287 for-try-finally-continue.js:1:1
Registers: 11
Blocks: 16
Locals: e~0

View file

@ -1,4 +1,4 @@
$ae1c0998 function-decl-source-order.js:17:1
$7ed51afa function-decl-source-order.js:17:1
Registers: 14
Blocks: 1
Constants:
@ -21,7 +21,7 @@ block0:
[ 188] End value:reg5
alpha$3b8324cd function-decl-source-order.js:5:20
alpha$29e24060 function-decl-source-order.js:5:20
Registers: 5
Blocks: 1
Constants:
@ -31,7 +31,7 @@ block0:
[ 0] Return value:Int32(1)
beta$d739d7c6 function-decl-source-order.js:7:19
beta$565e177b function-decl-source-order.js:7:19
Registers: 5
Blocks: 1
Constants:
@ -41,7 +41,7 @@ block0:
[ 0] Return value:Int32(2)
gamma$09aead7f function-decl-source-order.js:11:20
gamma$03071905 function-decl-source-order.js:11:20
Registers: 5
Blocks: 1
Constants:
@ -51,7 +51,7 @@ block0:
[ 0] Return value:Int32(3)
delta$240367f0 function-decl-source-order.js:15:20
delta$3c1404ee function-decl-source-order.js:15:20
Registers: 5
Blocks: 1
Constants:
@ -61,7 +61,7 @@ block0:
[ 0] Return value:Int32(4)
dup$510f266c function-decl-source-order.js:13:18
dup$7c6f066b function-decl-source-order.js:13:18
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$115d56d4 generator-yield-call.js:9:1
$9ff65435 generator-yield-call.js:9:1
Registers: 9
Blocks: 1
Constants:
@ -18,7 +18,7 @@ block0:
[ b0] End value:reg5
f$21b59c1e generator-yield-call.js:6:5
f$914aca23 generator-yield-call.js:6:5
Registers: 11
Blocks: 12
Constants:

View file

@ -1,4 +1,4 @@
$69cce752 generator-yield-finally.js:11:1
$ba9d77cf generator-yield-finally.js:11:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
f$f2967315 generator-yield-finally.js:4:5
f$6b17ea44 generator-yield-finally.js:4:5
Registers: 13
Blocks: 24
Constants:

View file

@ -1,4 +1,4 @@
$1522c0b3 generator-yield-star.js:6:1
$6fbbc21a generator-yield-star.js:6:1
Registers: 8
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 60] End value:reg5
f$c2e40832 generator-yield-star.js:4:5
f$289ca507 generator-yield-star.js:4:5
Registers: 22
Blocks: 19
Constants:

View file

@ -1,4 +1,4 @@
$9403c830 generator-yield.js:11:1
$ef4507bc generator-yield.js:11:1
Registers: 9
Blocks: 1
Constants:
@ -17,7 +17,7 @@ block0:
[ 100] End value:reg7
multi_yield$617e06b7 generator-yield.js:7:5
multi_yield$7e2d183f generator-yield.js:7:5
Registers: 10
Blocks: 12
Constants:

View file

@ -1,4 +1,4 @@
$df0fe8a9 global-variables.js:4:1
$9f27c1c8 global-variables.js:4:1
Registers: 9
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$93c13d35 if-else-register-lifetime.js:11:1
$c02559ef if-else-register-lifetime.js:11:1
Registers: 8
Blocks: 1
Constants:
@ -11,7 +11,7 @@ block0:
[ 58] End value:reg5
test$c1ed08de if-else-register-lifetime.js:2:5
test$5f5e45da if-else-register-lifetime.js:2:5
Registers: 13
Blocks: 12
Locals: a~0, i~1, j~2

View file

@ -1,4 +1,4 @@
$01a3b494 indexed-append-guards.js:16:1
$40a540f0 indexed-append-guards.js:16:1
Registers: 11
Blocks: 7
Constants:
@ -75,7 +75,7 @@ block6:
[ 430] End value:reg5
expect_type_error$f42c6af9 indexed-append-guards.js:4:5
expect_type_error$f9cd6888 indexed-append-guards.js:4:5
Registers: 9
Blocks: 8
Locals: error~0, did_throw~1
@ -125,7 +125,7 @@ Exception handlers:
[ c0 .. e8] => handler block1
$58e01468 indexed-append-guards.js:18:5
$6dd371fa indexed-append-guards.js:18:5
Registers: 6
Blocks: 1
Constants:
@ -139,7 +139,7 @@ block0:
[ 30] End value:Undefined
$19fab4ff indexed-append-guards.js:26:5
$f99f4d22 indexed-append-guards.js:26:5
Registers: 8
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$b4733eed invalid-lhs-assignment-no-dead-code.js:8:1
$aaec50d4 invalid-lhs-assignment-no-dead-code.js:8:1
Registers: 10
Blocks: 4
Constants:
@ -28,7 +28,7 @@ Exception handlers:
[ 40 .. c8] => handler block1
f$36570247 invalid-lhs-assignment-no-dead-code.js:5:6
f$36958900 invalid-lhs-assignment-no-dead-code.js:5:6
Registers: 6
Blocks: 1
Constants:
@ -40,7 +40,7 @@ block0:
[ 30] Throw src:reg5
$811c9dc5
$ccf7ed9d
Registers: 5
Blocks: 1
Constants:

View file

@ -1,4 +1,4 @@
$fa0f7b9b invalid-lhs-forin-no-dead-code.js:6:6
$03b9f5e5 invalid-lhs-forin-no-dead-code.js:6:6
Registers: 11
Blocks: 6
Constants:

View file

@ -1,4 +1,4 @@
$6c97fa3b lexical-env-teardown.js:13:1
$b319ee85 lexical-env-teardown.js:13:1
Registers: 11
Blocks: 1
Constants:
@ -45,7 +45,7 @@ block0:
[ 408] End value:reg6
withTeardown$27bad413 lexical-env-teardown.js:7:5
withTeardown$f8b3e64d lexical-env-teardown.js:7:5
Registers: 10
Blocks: 1
Locals: inner~0
@ -71,7 +71,7 @@ block0:
[ e8] Return value:reg6
blockTeardown$7cd4b5cf lexical-env-teardown.js:17:5
blockTeardown$b6f5c4f0 lexical-env-teardown.js:17:5
Registers: 5
Blocks: 1
Locals: inner~0, outer~1
@ -84,7 +84,7 @@ block0:
[ 18] Return value:outer~1
forInTeardown$e8d7ea8e lexical-env-teardown.js:28:5
forInTeardown$00ab80a8 lexical-env-teardown.js:28:5
Registers: 8
Blocks: 6
Locals: k~0, outer~1
@ -121,7 +121,7 @@ block5:
[ d8] Jump target:block2
forOfTeardown$b603f5d2 lexical-env-teardown.js:38:5
forOfTeardown$94a2ae97 lexical-env-teardown.js:38:5
Registers: 12
Blocks: 10
Locals: v~0, outer~1
@ -176,7 +176,7 @@ Exception handlers:
[ c0 .. e0] => handler block3
catchTeardown$ece08ab5 lexical-env-teardown.js:48:5
catchTeardown$ea214605 lexical-env-teardown.js:48:5
Registers: 7
Blocks: 4
Locals: e~0, outer~1
@ -207,7 +207,7 @@ Exception handlers:
[ 48 .. 88] => handler block1
myName$bf13a37c lexical-env-teardown.js:60:5
myName$b54e4267 lexical-env-teardown.js:60:5
Registers: 6
Blocks: 1

View file

@ -1,4 +1,4 @@
$da832d31 local-source-order.js:12:1
$c7fd0018 local-source-order.js:12:1
Registers: 7
Blocks: 1
Constants:
@ -10,7 +10,7 @@ block0:
[ 38] End value:reg5
source_order_locals$7988cb5f local-source-order.js:6:5
source_order_locals$4b1aeb83 local-source-order.js:6:5
Registers: 7
Blocks: 1
Locals: zebra~0, yak~1, aardvark~2

Some files were not shown because too many files have changed in this diff Show more