Commit 8d7747a7 authored by Jakob Kummerow's avatar Jakob Kummerow Committed by Commit Bot

[strings] Reclaim a bit in the hash field

By replacing usage of the IsNotArrayIndex bit with IsNotIntegerIndex,
we get back one bit that we can use to increase the number of hash bits
stored. The price is that strings that represent array/integer indices
beyond the cacheable range will have to be scanned more often, but these
strings should be rare, and we expect that the additional hash bit is
more worthwhile to have.

Bug: v8:9904
Change-Id: I33f74b0a73f4754aee85805d4b7c409177668439
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2051947Reviewed-by: 's avatarToon Verwaest <verwaest@chromium.org>
Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
Auto-Submit: Jakob Kummerow <jkummerow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#66299}
parent c371f9de
......@@ -95,16 +95,18 @@ void AstRawString::Internalize(OffThreadIsolate* isolate) {
}
bool AstRawString::AsArrayIndex(uint32_t* index) const {
// The StringHasher will set up the hash in such a way that we can use it to
// figure out whether the string is convertible to an array index.
if ((hash_field_ & Name::kIsNotArrayIndexMask) != 0) return false;
// The StringHasher will set up the hash. Bail out early if we know it
// can't be convertible to an array index.
if ((hash_field_ & Name::kIsNotIntegerIndexMask) != 0) return false;
if (length() <= Name::kMaxCachedArrayIndexLength) {
*index = Name::ArrayIndexValueBits::decode(hash_field_);
} else {
OneByteStringStream stream(literal_bytes_);
CHECK(StringToIndex(&stream, index));
}
return true;
}
// Might be an index, but too big to cache it. Do the slow conversion. This
// might fail if the string is outside uint32_t (but within "safe integer")
// range.
OneByteStringStream stream(literal_bytes_);
return StringToIndex(&stream, index);
}
bool AstRawString::IsIntegerIndex() const {
......
......@@ -6159,13 +6159,35 @@ TNode<BoolT> CodeStubAssembler::IsUniqueName(TNode<HeapObject> object) {
[=] { return IsSymbolInstanceType(instance_type); });
}
// Semantics: guaranteed not to be an integer index (i.e. contains non-digit
// characters, or is outside MAX_SAFE_INTEGER/size_t range). Note that for
// non-TypedArray receivers, there are additional strings that must be treated
// as named property keys, namely the range [0xFFFFFFFF, MAX_SAFE_INTEGER].
TNode<BoolT> CodeStubAssembler::IsUniqueNameNoIndex(TNode<HeapObject> object) {
TNode<Uint16T> instance_type = LoadInstanceType(object);
return Select<BoolT>(
IsInternalizedStringInstanceType(instance_type),
[=] {
return IsSetWord32(LoadNameHashField(CAST(object)),
Name::kIsNotArrayIndexMask);
Name::kIsNotIntegerIndexMask);
},
[=] { return IsSymbolInstanceType(instance_type); });
}
// Semantics: {object} is a Symbol, or a String that doesn't have a cached
// index. This returns {true} for strings containing representations of
// integers in the range above 9999999 (per kMaxCachedArrayIndexLength)
// and below MAX_SAFE_INTEGER. For CSA_ASSERTs ensuring correct usage, this is
// better than no checking; and we don't have a good/fast way to accurately
// check such strings for being within "array index" (uint32_t) range.
TNode<BoolT> CodeStubAssembler::IsUniqueNameNoCachedIndex(
TNode<HeapObject> object) {
TNode<Uint16T> instance_type = LoadInstanceType(object);
return Select<BoolT>(
IsInternalizedStringInstanceType(instance_type),
[=] {
return IsSetWord32(LoadNameHashField(CAST(object)),
Name::kDoesNotContainCachedArrayIndexMask);
},
[=] { return IsSymbolInstanceType(instance_type); });
}
......@@ -7426,7 +7448,7 @@ void CodeStubAssembler::TryToName(SloppyTNode<Object> key, Label* if_keyisindex,
&if_has_cached_index);
// No cached array index. If the string knows that it contains an index,
// then it must be an uncacheable index. Handle this case in the runtime.
GotoIf(IsClearWord32(hash, Name::kIsNotArrayIndexMask), if_bailout);
GotoIf(IsClearWord32(hash, Name::kIsNotIntegerIndexMask), if_bailout);
GotoIf(InstanceTypeEqual(var_instance_type.value(), THIN_STRING_TYPE),
&if_thinstring);
......@@ -8418,7 +8440,7 @@ void CodeStubAssembler::TryLookupPropertyInSimpleObject(
TVariable<HeapObject>* var_meta_storage, TVariable<IntPtrT>* var_name_index,
Label* if_not_found) {
CSA_ASSERT(this, IsSimpleObjectMap(map));
CSA_ASSERT(this, IsUniqueNameNoIndex(unique_name));
CSA_ASSERT(this, IsUniqueNameNoCachedIndex(unique_name));
TNode<Uint32T> bit_field3 = LoadMapBitField3(map);
Label if_isfastmap(this), if_isslowmap(this);
......@@ -8481,7 +8503,7 @@ void CodeStubAssembler::TryHasOwnProperty(Node* object, Node* map,
Label* if_not_found,
Label* if_bailout) {
Comment("TryHasOwnProperty");
CSA_ASSERT(this, IsUniqueNameNoIndex(CAST(unique_name)));
CSA_ASSERT(this, IsUniqueNameNoCachedIndex(CAST(unique_name)));
TVARIABLE(HeapObject, var_meta_storage);
TVARIABLE(IntPtrT, var_name_index);
......@@ -8797,7 +8819,7 @@ void CodeStubAssembler::TryGetOwnProperty(
GetOwnPropertyMode mode) {
DCHECK_EQ(MachineRepresentation::kTagged, var_value->rep());
Comment("TryGetOwnProperty");
CSA_ASSERT(this, IsUniqueNameNoIndex(unique_name));
CSA_ASSERT(this, IsUniqueNameNoCachedIndex(unique_name));
TVARIABLE(HeapObject, var_meta_storage);
TVARIABLE(IntPtrT, var_entry);
......
......@@ -2587,6 +2587,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler
TNode<BoolT> IsInternalizedStringInstanceType(TNode<Int32T> instance_type);
TNode<BoolT> IsUniqueName(TNode<HeapObject> object);
TNode<BoolT> IsUniqueNameNoIndex(TNode<HeapObject> object);
TNode<BoolT> IsUniqueNameNoCachedIndex(TNode<HeapObject> object);
TNode<BoolT> IsUndetectableMap(SloppyTNode<Map> map);
TNode<BoolT> IsNotWeakFixedArraySubclass(SloppyTNode<HeapObject> object);
TNode<BoolT> IsZeroOrContext(SloppyTNode<Object> object);
......
......@@ -1023,7 +1023,7 @@ Handle<Symbol> Factory::NewSymbol(AllocationType allocation) {
int hash = isolate()->GenerateIdentityHash(Name::kHashBitMask);
Handle<Symbol> symbol(Symbol::cast(result), isolate());
symbol->set_hash_field(Name::kIsNotArrayIndexMask |
symbol->set_hash_field(Name::kIsNotIntegerIndexMask |
(hash << Name::kHashShift));
symbol->set_description(*undefined_value());
symbol->set_flags(0);
......
......@@ -78,15 +78,12 @@ class V8_EXPORT_PRIVATE StubCache {
Isolate* isolate() { return isolate_; }
// Ideally we would set kCacheIndexShift to Name::kHashShift, such that
// the bit field inside the hash field gets shifted out implicitly. However,
// sizeof(Entry) needs to be a multiple of 1 << kCacheIndexShift, and it
// isn't clear whether letting one bit of the bit field leak into the index
// computation is bad enough to warrant an additional shift to get rid of it.
static const int kCacheIndexShift = 2;
// The purpose of the static assert is to make us reconsider this choice
// if the bit field ever grows even more.
STATIC_ASSERT(kCacheIndexShift == Name::kHashShift - 1);
// Setting kCacheIndexShift to Name::kHashShift is convenient because it
// causes the bit field inside the hash field to get shifted out implicitly.
// Note that kCacheIndexShift must not get too large, because
// sizeof(Entry) needs to be a multiple of 1 << kCacheIndexShift (see
// the STATIC_ASSERT below, in {entry(...)}).
static const int kCacheIndexShift = Name::kHashShift;
static const int kPrimaryTableBits = 11;
static const int kPrimaryTableSize = (1 << kPrimaryTableBits);
......
......@@ -563,7 +563,7 @@ class FeedbackMetadata : public HeapObject {
// possibly be confused with a pointer.
// NOLINTNEXTLINE(runtime/references) (false positive)
STATIC_ASSERT((Name::kEmptyHashField & kHeapObjectTag) == kHeapObjectTag);
STATIC_ASSERT(Name::kEmptyHashField == 0x7);
STATIC_ASSERT(Name::kEmptyHashField == 0x3);
// Verify that a set hash field will not look like a tagged object.
STATIC_ASSERT(Name::kHashNotComputedMask == kHeapObjectTag);
......
......@@ -69,14 +69,13 @@ class Name : public TorqueGeneratedName<Name, PrimitiveHeapObject> {
int NameShortPrint(Vector<char> str);
// Mask constant for checking if a name has a computed hash code
// and if it is a string that is an array index. The least significant bit
// and if it is a string that is an integer index. The least significant bit
// indicates whether a hash code has been computed. If the hash code has
// been computed the 2nd bit tells whether the string can be used as an
// array index.
// integer index (up to MAX_SAFE_INTEGER).
static const int kHashNotComputedMask = 1;
static const int kIsNotArrayIndexMask = 1 << 1;
static const int kIsNotIntegerIndexMask = 1 << 2;
static const int kNofHashBitFields = 3;
static const int kIsNotIntegerIndexMask = 1 << 1;
static const int kNofHashBitFields = 2;
// Shift constant retrieving hash code from hash field.
static const int kHashShift = kNofHashBitFields;
......@@ -126,11 +125,11 @@ class Name : public TorqueGeneratedName<Name, PrimitiveHeapObject> {
static const unsigned int kDoesNotContainCachedArrayIndexMask =
(~static_cast<unsigned>(kMaxCachedArrayIndexLength)
<< ArrayIndexLengthBits::kShift) |
kIsNotArrayIndexMask;
kIsNotIntegerIndexMask;
// Value of empty hash field indicating that the hash is not computed.
static const int kEmptyHashField =
kIsNotIntegerIndexMask | kIsNotArrayIndexMask | kHashNotComputedMask;
kIsNotIntegerIndexMask | kHashNotComputedMask;
protected:
static inline bool IsHashFieldComputed(uint32_t field);
......
......@@ -4624,7 +4624,6 @@ uint32_t StringHasher::MakeArrayIndexHash(uint32_t value, int length) {
value <<= String::ArrayIndexValueBits::kShift;
value |= length << String::ArrayIndexLengthBits::kShift;
DCHECK_EQ(value & String::kIsNotArrayIndexMask, 0);
DCHECK_EQ(value & String::kIsNotIntegerIndexMask, 0);
DCHECK_EQ(length <= String::kMaxCachedArrayIndexLength,
Name::ContainsCachedArrayIndex(value));
......@@ -6847,8 +6846,8 @@ Address LookupString(Isolate* isolate, String string, String source,
return Smi::FromInt(String::ArrayIndexValueBits::decode(hash_field)).ptr();
}
if ((hash_field & Name::kIsNotArrayIndexMask) == 0) {
// It is an indexed, but it's not cached.
if ((hash_field & Name::kIsNotIntegerIndexMask) == 0) {
// It is an index, but it's not cached.
return Smi::FromInt(ResultSentinel::kUnsupported).ptr();
}
......
......@@ -781,15 +781,11 @@ void StringCharacterStream::VisitTwoByteString(const uint16_t* chars,
bool String::AsArrayIndex(uint32_t* index) {
DisallowHeapAllocation no_gc;
uint32_t field = hash_field();
// The {IsHashFieldComputed} check is not functionally necessary as the
// subsequent mask includes it; it's here to make the logic more obvious,
// and the compile will fold it away so it doesn't hurt performance.
if (IsHashFieldComputed(field) &&
(field & kDoesNotContainCachedArrayIndexMask) == 0) {
if (ContainsCachedArrayIndex(field)) {
*index = ArrayIndexValueBits::decode(field);
return true;
}
if (IsHashFieldComputed(field) && (field & kIsNotArrayIndexMask)) {
if (IsHashFieldComputed(field) && (field & kIsNotIntegerIndexMask)) {
return false;
}
return SlowAsArrayIndex(index);
......@@ -797,11 +793,7 @@ bool String::AsArrayIndex(uint32_t* index) {
bool String::AsIntegerIndex(size_t* index) {
uint32_t field = hash_field();
// The {IsHashFieldComputed} check is not functionally necessary as the
// subsequent mask includes it; it's here to make the logic more obvious,
// and the compile will fold it away so it doesn't hurt performance.
if (IsHashFieldComputed(field) &&
(field & kDoesNotContainCachedArrayIndexMask) == 0) {
if (ContainsCachedArrayIndex(field)) {
*index = ArrayIndexValueBits::decode(field);
return true;
}
......
......@@ -1381,7 +1381,7 @@ bool String::SlowAsArrayIndex(uint32_t* index) {
if (length <= kMaxCachedArrayIndexLength) {
Hash(); // Force computation of hash code.
uint32_t field = hash_field();
if ((field & kIsNotArrayIndexMask) != 0) return false;
if ((field & kIsNotIntegerIndexMask) != 0) return false;
*index = ArrayIndexValueBits::decode(field);
return true;
}
......@@ -1396,12 +1396,7 @@ bool String::SlowAsIntegerIndex(size_t* index) {
if (length <= kMaxCachedArrayIndexLength) {
Hash(); // Force computation of hash code.
uint32_t field = hash_field();
if ((field & kIsNotArrayIndexMask) != 0) {
// If it was short but it's not an array index, then it can't be an
// integer index either.
DCHECK_NE(0, field & kIsNotIntegerIndexMask);
return false;
}
if ((field & kIsNotIntegerIndexMask) != 0) return false;
*index = ArrayIndexValueBits::decode(field);
return true;
}
......
......@@ -35,18 +35,13 @@ uint32_t StringHasher::GetHashCore(uint32_t running_hash) {
uint32_t StringHasher::GetTrivialHash(int length) {
DCHECK_GT(length, String::kMaxHashCalcLength);
// The hash of a large string is simply computed from the length. We don't
// have quite enough bits, so we drop the least significant bit.
// TODO(9904): Free up one bit, so we don't have to drop anything here.
constexpr int kDroppedBits = 1;
// Ensure that the max length after dropping bits is small enough to be
// shifted without losing information.
STATIC_ASSERT(base::bits::CountLeadingZeros32(String::kMaxLength) +
kDroppedBits >=
// The hash of a large string is simply computed from the length.
// Ensure that the max length is small enough to be shifted without losing
// information.
STATIC_ASSERT(base::bits::CountLeadingZeros32(String::kMaxLength) >=
String::kHashShift);
uint32_t hash = static_cast<uint32_t>(length) >> kDroppedBits;
return (hash << String::kHashShift) | String::kIsNotArrayIndexMask |
String::kIsNotIntegerIndexMask;
uint32_t hash = static_cast<uint32_t>(length);
return (hash << String::kHashShift) | String::kIsNotIntegerIndexMask;
}
template <typename char_t>
......@@ -93,8 +88,17 @@ uint32_t StringHasher::HashSequentialString(const char_t* chars_raw, int length,
}
running_hash = AddCharacterCore(running_hash, *chars++);
}
return (GetHashCore(running_hash) << String::kHashShift) |
String::kIsNotArrayIndexMask | is_integer_index;
uint32_t hash = (GetHashCore(running_hash) << String::kHashShift) |
is_integer_index;
if (Name::ContainsCachedArrayIndex(hash)) {
// The hash accidentally looks like a cached index. Fix that by
// setting a bit that looks like a longer-than-cacheable string
// length.
hash |= (String::kMaxCachedArrayIndexLength + 1)
<< String::ArrayIndexLengthBits::kShift;
}
DCHECK(!Name::ContainsCachedArrayIndex(hash));
return hash;
}
#endif
}
......@@ -113,7 +117,7 @@ uint32_t StringHasher::HashSequentialString(const char_t* chars_raw, int length,
}
return (GetHashCore(running_hash) << String::kHashShift) |
String::kIsNotArrayIndexMask | String::kIsNotIntegerIndexMask;
String::kIsNotIntegerIndexMask;
}
std::size_t SeededStringHasher::operator()(const char* name) const {
......
......@@ -728,10 +728,16 @@ TEST(TryToName) {
{
// TryToName(<internalized uncacheable number string greater than
// array index>) => is_keyisunique: <internalized string>.
// array index but less than MAX_SAFE_INTEGER>) => 32-bit platforms
// take the if_keyisunique path, 64-bit platforms bail out because they
// let the runtime handle the string-to-size_t parsing.
Handle<Object> key =
isolate->factory()->InternalizeUtf8String("4294967296");
#if V8_TARGET_ARCH_64_BIT
ft.CheckTrue(key, expect_bailout);
#else
ft.CheckTrue(key, expect_unique, key);
#endif
}
{
......
......@@ -1873,11 +1873,6 @@ void TestString(i::Isolate* isolate, const IndexData& data) {
uint32_t index;
CHECK(s->AsArrayIndex(&index));
CHECK_EQ(data.array_index, index);
// AsArrayIndex only forces hash computation for cacheable indices;
// so trigger hash computation for longer strings manually.
if (s->length() > String::kMaxCachedArrayIndexLength) s->Hash();
CHECK_EQ(0, s->hash_field() & String::kIsNotArrayIndexMask);
CHECK(s->HasHashCode());
}
if (data.is_integer_index) {
size_t index;
......@@ -1889,9 +1884,6 @@ void TestString(i::Isolate* isolate, const IndexData& data) {
}
if (!s->HasHashCode()) s->Hash();
CHECK(s->HasHashCode());
if (!data.is_array_index) {
CHECK_NE(0, s->hash_field() & String::kIsNotArrayIndexMask);
}
if (!data.is_integer_index) {
CHECK_NE(0, s->hash_field() & String::kIsNotIntegerIndexMask);
}
......
Tests that cloning a module notifies the debugger
Got URL: wasm://wasm/95d1e44e
Got URL: wasm://wasm/95d1e44e
Got URL: wasm://wasm/95d1e44e
Got URL: wasm://wasm/cae8f226
Got URL: wasm://wasm/cae8f226
Got URL: wasm://wasm/cae8f226
Done!
......@@ -3,9 +3,9 @@ Installing code and global variable.
Calling instantiate function.
Waiting for wasm scripts to be parsed.
Ignoring script with url v8://test/callInstantiate
Got wasm script: wasm://wasm/fa045c1e
Got wasm script: wasm://wasm/7d022e0e
paused No 1
Script wasm://wasm/fa045c1e byte offset 35: Wasm opcode 0x20
Script wasm://wasm/7d022e0e byte offset 35: Wasm opcode 0x20
Debugger.resume
exports.main returned!
Finished!
......@@ -2,7 +2,7 @@ Tests breakable locations in wasm
Running testFunction...
Script nr 0 parsed. URL: v8://test/setup
Script nr 1 parsed. URL: v8://test/runTestFunction
Script nr 2 parsed. URL: wasm://wasm/6a95b41e
Script nr 2 parsed. URL: wasm://wasm/354ada0e
This is a wasm script (nr 0).
Querying breakable locations for all wasm scripts now...
Requesting all breakable locations in wasm script 0
......@@ -33,51 +33,51 @@ Requesting breakable locations in offsets [50,60)
[4] 0:57 || byte=11
[5] 0:58 || byte=11
Setting a breakpoint on each breakable location...
Setting at wasm://wasm/6a95b41e:0:40
Setting at wasm://wasm/354ada0e:0:40
Success!
Setting at wasm://wasm/6a95b41e:0:41
Setting at wasm://wasm/354ada0e:0:41
Success!
Setting at wasm://wasm/6a95b41e:0:43
Setting at wasm://wasm/354ada0e:0:43
Success!
Setting at wasm://wasm/6a95b41e:0:45
Setting at wasm://wasm/354ada0e:0:45
Success!
Setting at wasm://wasm/6a95b41e:0:48
Setting at wasm://wasm/354ada0e:0:48
Success!
Setting at wasm://wasm/6a95b41e:0:50
Setting at wasm://wasm/354ada0e:0:50
Success!
Setting at wasm://wasm/6a95b41e:0:52
Setting at wasm://wasm/354ada0e:0:52
Success!
Setting at wasm://wasm/6a95b41e:0:54
Setting at wasm://wasm/354ada0e:0:54
Success!
Setting at wasm://wasm/6a95b41e:0:56
Setting at wasm://wasm/354ada0e:0:56
Success!
Setting at wasm://wasm/6a95b41e:0:57
Setting at wasm://wasm/354ada0e:0:57
Success!
Setting at wasm://wasm/6a95b41e:0:58
Setting at wasm://wasm/354ada0e:0:58
Success!
Running wasm code...
Missing breakpoints: 11
Script nr 3 parsed. URL: v8://test/runWasm
Stopped at wasm://wasm/6a95b41e:0:48
Stopped at wasm://wasm/354ada0e:0:48
Missing breakpoints: 10
Stopped at wasm://wasm/6a95b41e:0:50
Stopped at wasm://wasm/354ada0e:0:50
Missing breakpoints: 9
Stopped at wasm://wasm/6a95b41e:0:52
Stopped at wasm://wasm/354ada0e:0:52
Missing breakpoints: 8
Stopped at wasm://wasm/6a95b41e:0:54
Stopped at wasm://wasm/354ada0e:0:54
Missing breakpoints: 7
Stopped at wasm://wasm/6a95b41e:0:40
Stopped at wasm://wasm/354ada0e:0:40
Missing breakpoints: 6
Stopped at wasm://wasm/6a95b41e:0:41
Stopped at wasm://wasm/354ada0e:0:41
Missing breakpoints: 5
Stopped at wasm://wasm/6a95b41e:0:43
Stopped at wasm://wasm/354ada0e:0:43
Missing breakpoints: 4
Stopped at wasm://wasm/6a95b41e:0:45
Stopped at wasm://wasm/354ada0e:0:45
Missing breakpoints: 3
Stopped at wasm://wasm/6a95b41e:0:56
Stopped at wasm://wasm/354ada0e:0:56
Missing breakpoints: 2
Stopped at wasm://wasm/6a95b41e:0:57
Stopped at wasm://wasm/354ada0e:0:57
Missing breakpoints: 1
Stopped at wasm://wasm/6a95b41e:0:58
Stopped at wasm://wasm/354ada0e:0:58
Missing breakpoints: 0
Finished!
......@@ -4,11 +4,11 @@ Calling instantiate function for module A.
Waiting for wasm script to be parsed.
Got wasm script!
Setting breakpoint in line 1:
Script wasm://wasm/1871020e byte offset 33: Wasm opcode 0x1
Script wasm://wasm/8c388106 byte offset 33: Wasm opcode 0x1
Calling instantiate function for module B.
Calling main function on module B.
Paused at 0:33.
Script wasm://wasm/1871020e byte offset 33: Wasm opcode 0x1
Script wasm://wasm/8c388106 byte offset 33: Wasm opcode 0x1
Getting current stack trace via "new Error().stack".
Error
at v8://test/getStack:1:1
......
......@@ -3,7 +3,7 @@ Installing code and global variable.
Calling instantiate function.
Waiting for wasm scripts to be parsed.
Ignoring script with url v8://test/callInstantiate
Got wasm script: wasm://wasm/fa045c1e
Got wasm script: wasm://wasm/7d022e0e
Setting breakpoint on line 3 of wasm function
{
columnNumber : 39
......@@ -12,7 +12,7 @@ Setting breakpoint on line 3 of wasm function
}
BreakpointId: 4:0:39:6
paused No 1
Script wasm://wasm/fa045c1e byte offset 39: Wasm opcode 0x6b
Script wasm://wasm/7d022e0e byte offset 39: Wasm opcode 0x6b
Remove breakpoint with breakpointId: 4:0:39:6
Debugger.resume
exports.main returned!
......
......@@ -9,7 +9,7 @@ Setting breakpoint on first instruction of second function
scriptId : <scriptId>
}
Paused:
Script wasm://wasm/a6e9de16 byte offset 69: Wasm opcode 0x41
Script wasm://wasm/d374ef0a byte offset 69: Wasm opcode 0x41
Scope:
at func (0:69):
- scope (global):
......@@ -26,7 +26,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 71: Wasm opcode 0x21
Script wasm://wasm/d374ef0a byte offset 71: Wasm opcode 0x21
Scope:
at func (0:71):
- scope (global):
......@@ -43,7 +43,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 73: Wasm opcode 0x41
Script wasm://wasm/d374ef0a byte offset 73: Wasm opcode 0x41
Scope:
at func (0:73):
- scope (global):
......@@ -60,7 +60,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 75: Wasm opcode 0x21
Script wasm://wasm/d374ef0a byte offset 75: Wasm opcode 0x21
Scope:
at func (0:75):
- scope (global):
......@@ -77,7 +77,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 77: Wasm opcode 0x42
Script wasm://wasm/d374ef0a byte offset 77: Wasm opcode 0x42
Scope:
at func (0:77):
- scope (global):
......@@ -94,7 +94,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 88: Wasm opcode 0x21
Script wasm://wasm/d374ef0a byte offset 88: Wasm opcode 0x21
Scope:
at func (0:88):
- scope (global):
......@@ -111,7 +111,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 90: Wasm opcode 0x42
Script wasm://wasm/d374ef0a byte offset 90: Wasm opcode 0x42
Scope:
at func (0:90):
- scope (global):
......@@ -128,7 +128,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 101: Wasm opcode 0x21
Script wasm://wasm/d374ef0a byte offset 101: Wasm opcode 0x21
Scope:
at func (0:101):
- scope (global):
......@@ -145,7 +145,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 103: Wasm opcode 0x41
Script wasm://wasm/d374ef0a byte offset 103: Wasm opcode 0x41
Scope:
at func (0:103):
- scope (global):
......@@ -162,7 +162,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 105: Wasm opcode 0xb8
Script wasm://wasm/d374ef0a byte offset 105: Wasm opcode 0xb8
Scope:
at func (0:105):
- scope (global):
......@@ -179,7 +179,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 106: Wasm opcode 0x41
Script wasm://wasm/d374ef0a byte offset 106: Wasm opcode 0x41
Scope:
at func (0:106):
- scope (global):
......@@ -196,7 +196,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 108: Wasm opcode 0xb8
Script wasm://wasm/d374ef0a byte offset 108: Wasm opcode 0xb8
Scope:
at func (0:108):
- scope (global):
......@@ -213,7 +213,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 109: Wasm opcode 0xa3
Script wasm://wasm/d374ef0a byte offset 109: Wasm opcode 0xa3
Scope:
at func (0:109):
- scope (global):
......@@ -230,7 +230,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 110: Wasm opcode 0x21
Script wasm://wasm/d374ef0a byte offset 110: Wasm opcode 0x21
Scope:
at func (0:110):
- scope (global):
......@@ -247,7 +247,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 112: Wasm opcode 0x41
Script wasm://wasm/d374ef0a byte offset 112: Wasm opcode 0x41
Scope:
at func (0:112):
- scope (global):
......@@ -264,7 +264,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 114: Wasm opcode 0x24
Script wasm://wasm/d374ef0a byte offset 114: Wasm opcode 0x24
Scope:
at func (0:114):
- scope (global):
......@@ -281,7 +281,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/a6e9de16 byte offset 116: Wasm opcode 0xb
Script wasm://wasm/d374ef0a byte offset 116: Wasm opcode 0xb
Scope:
at func (0:116):
- scope (global):
......
......@@ -10,7 +10,7 @@ Setting breakpoint on line 2 (first instruction) of third function
scriptId : <scriptId>
}
Paused:
Script wasm://wasm/89d60696 byte offset 85: Wasm opcode 0x20
Script wasm://wasm/c4eb034a byte offset 85: Wasm opcode 0x20
Scope:
at C (interpreted) (0:85):
- scope (global):
......@@ -35,7 +35,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/89d60696 byte offset 87: Wasm opcode 0x24
Script wasm://wasm/c4eb034a byte offset 87: Wasm opcode 0x24
Scope:
at C (interpreted) (0:87):
- scope (global):
......@@ -60,7 +60,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/89d60696 byte offset 89: Wasm opcode 0x41
Script wasm://wasm/c4eb034a byte offset 89: Wasm opcode 0x41
Scope:
at C (interpreted) (0:89):
- scope (global):
......@@ -85,7 +85,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/89d60696 byte offset 91: Wasm opcode 0x21
Script wasm://wasm/c4eb034a byte offset 91: Wasm opcode 0x21
Scope:
at C (interpreted) (0:91):
- scope (global):
......@@ -110,7 +110,7 @@ at (anonymous) (0:17):
-- skipped globals
Paused:
Script wasm://wasm/89d60696 byte offset 93: Wasm opcode 0xb
Script wasm://wasm/c4eb034a byte offset 93: Wasm opcode 0xb
Scope:
at C (interpreted) (0:93):
- scope (global):
......
Tests how wasm scripts are reported
Check that each inspector gets a wasm script at module creation time.
Session #1: Script #0 parsed. URL: wasm://wasm/f608ae1e. Source map URL: , code begin: 34, code end: 48
Session #2: Script #0 parsed. URL: wasm://wasm/f608ae1e. Source map URL: , code begin: 34, code end: 48
Session #1: Script #1 parsed. URL: wasm://wasm/74f86b7e. Source map URL: wasm://dwarf, code begin: 34, code end: 48
Session #2: Script #1 parsed. URL: wasm://wasm/74f86b7e. Source map URL: wasm://dwarf, code begin: 34, code end: 48
Session #1: Script #2 parsed. URL: wasm://wasm/3754e3fe. Source map URL: abc, code begin: 34, code end: 48
Session #2: Script #2 parsed. URL: wasm://wasm/3754e3fe. Source map URL: abc, code begin: 34, code end: 48
Session #1: Script #3 parsed. URL: wasm://wasm/2bd2e40e. Source map URL: abc, code begin: 34, code end: 48
Session #2: Script #3 parsed. URL: wasm://wasm/2bd2e40e. Source map URL: abc, code begin: 34, code end: 48
Session #1: Script #4 parsed. URL: wasm://wasm/f568e726. Source map URL: abc, code begin: 34, code end: 48
Session #2: Script #4 parsed. URL: wasm://wasm/f568e726. Source map URL: abc, code begin: 34, code end: 48
Session #1: Source for wasm://wasm/f608ae1e:
Session #1: Script #0 parsed. URL: wasm://wasm/7b04570e. Source map URL: , code begin: 34, code end: 48
Session #2: Script #0 parsed. URL: wasm://wasm/7b04570e. Source map URL: , code begin: 34, code end: 48
Session #1: Script #1 parsed. URL: wasm://wasm/ba7c35be. Source map URL: wasm://dwarf, code begin: 34, code end: 48
Session #2: Script #1 parsed. URL: wasm://wasm/ba7c35be. Source map URL: wasm://dwarf, code begin: 34, code end: 48
Session #1: Script #2 parsed. URL: wasm://wasm/1baa71fe. Source map URL: abc, code begin: 34, code end: 48
Session #2: Script #2 parsed. URL: wasm://wasm/1baa71fe. Source map URL: abc, code begin: 34, code end: 48
Session #1: Script #3 parsed. URL: wasm://wasm/95e97206. Source map URL: abc, code begin: 34, code end: 48
Session #2: Script #3 parsed. URL: wasm://wasm/95e97206. Source map URL: abc, code begin: 34, code end: 48
Session #1: Script #4 parsed. URL: wasm://wasm/7ab47392. Source map URL: abc, code begin: 34, code end: 48
Session #2: Script #4 parsed. URL: wasm://wasm/7ab47392. Source map URL: abc, code begin: 34, code end: 48
Session #1: Source for wasm://wasm/7b04570e:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #2: Source for wasm://wasm/f608ae1e:
Session #2: Source for wasm://wasm/7b04570e:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #1: Source for wasm://wasm/74f86b7e:
Session #1: Source for wasm://wasm/ba7c35be:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 11 0b 2e 64 65 62 75 67 5f 69 6e 66 6f 01 02 03 04 05 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #2: Source for wasm://wasm/74f86b7e:
Session #2: Source for wasm://wasm/ba7c35be:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 11 0b 2e 64 65 62 75 67 5f 69 6e 66 6f 01 02 03 04 05 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #1: Source for wasm://wasm/3754e3fe:
Session #1: Source for wasm://wasm/1baa71fe:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 15 10 73 6f 75 72 63 65 4d 61 70 70 69 6e 67 55 52 4c 03 61 62 63 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #2: Source for wasm://wasm/3754e3fe:
Session #2: Source for wasm://wasm/1baa71fe:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 15 10 73 6f 75 72 63 65 4d 61 70 70 69 6e 67 55 52 4c 03 61 62 63 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #1: Source for wasm://wasm/2bd2e40e:
Session #1: Source for wasm://wasm/95e97206:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 11 0b 2e 64 65 62 75 67 5f 69 6e 66 6f 01 02 03 04 05 00 15 10 73 6f 75 72 63 65 4d 61 70 70 69 6e 67 55 52 4c 03 61 62 63 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #2: Source for wasm://wasm/2bd2e40e:
Session #2: Source for wasm://wasm/95e97206:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 11 0b 2e 64 65 62 75 67 5f 69 6e 66 6f 01 02 03 04 05 00 15 10 73 6f 75 72 63 65 4d 61 70 70 69 6e 67 55 52 4c 03 61 62 63 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #1: Source for wasm://wasm/f568e726:
Session #1: Source for wasm://wasm/7ab47392:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 15 10 73 6f 75 72 63 65 4d 61 70 70 69 6e 67 55 52 4c 03 61 62 63 00 11 0b 2e 64 65 62 75 67 5f 69 6e 66 6f 01 02 03 04 05 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Session #2: Source for wasm://wasm/f568e726:
Session #2: Source for wasm://wasm/7ab47392:
Raw: 00 61 73 6d 01 00 00 00 01 07 02 60 00 00 60 00 00 03 03 02 00 01 07 08 01 04 6d 61 69 6e 00 01 0a 0e 02 03 00 01 0b 08 00 02 40 41 02 1a 0b 0b 00 15 10 73 6f 75 72 63 65 4d 61 70 70 69 6e 67 55 52 4c 03 61 62 63 00 11 0b 2e 64 65 62 75 67 5f 69 6e 66 6f 01 02 03 04 05 00 1b 04 6e 61 6d 65 01 14 02 00 0b 6e 6f 70 46 75 6e 63 74 69 6f 6e 01 04 6d 61 69 6e
Imports: []
Exports: [main: function]
Tests how wasm scripts are reported with name
Check that the inspector gets four wasm scripts at module creation time.
Session #1: Script #0 parsed. URL: wasm://wasm/49a8663e.
Session #1: Script #1 parsed. URL: wasm://wasm/moduleName-aea4a206.
Session #1: Source for wasm://wasm/49a8663e:
Session #1: Script #0 parsed. URL: wasm://wasm/a4d4331e.
Session #1: Script #1 parsed. URL: wasm://wasm/moduleName-d7525102.
Session #1: Source for wasm://wasm/a4d4331e:
Session #1: Source for wasm://wasm/moduleName-aea4a206:
Session #1: Source for wasm://wasm/moduleName-d7525102:
Tests stepping through wasm scripts.
Instantiating.
Waiting for wasm script (ignoring first non-wasm script).
Setting breakpoint at offset 54 on script wasm://wasm/18214bfe
Setting breakpoint at offset 53 on script wasm://wasm/18214bfe
Setting breakpoint at offset 51 on script wasm://wasm/18214bfe
Setting breakpoint at offset 49 on script wasm://wasm/18214bfe
Setting breakpoint at offset 45 on script wasm://wasm/18214bfe
Setting breakpoint at offset 47 on script wasm://wasm/18214bfe
Setting breakpoint at offset 54 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 53 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 51 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 49 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 45 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 47 on script wasm://wasm/0c10a5fe
Calling main(4)
Breaking on byte offset 45
Breaking on byte offset 47
......
Tests stepping through wasm scripts.
Instantiating.
Waiting for wasm script (ignoring first non-wasm script).
Setting breakpoint at offset 54 on script wasm://wasm/18214bfe
Setting breakpoint at offset 53 on script wasm://wasm/18214bfe
Setting breakpoint at offset 51 on script wasm://wasm/18214bfe
Setting breakpoint at offset 49 on script wasm://wasm/18214bfe
Setting breakpoint at offset 45 on script wasm://wasm/18214bfe
Setting breakpoint at offset 47 on script wasm://wasm/18214bfe
Setting breakpoint at offset 54 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 53 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 51 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 49 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 45 on script wasm://wasm/0c10a5fe
Setting breakpoint at offset 47 on script wasm://wasm/0c10a5fe
Calling main(4)
Breaking on byte offset 45
Breaking on byte offset 47
......
Tests stepping through wasm scripts by byte offsets
Setting up global instance variable.
Got wasm script: wasm://wasm/7dfc8356
Setting breakpoint on offset 59 (should be propagated to 60, the offset of the call), url wasm://wasm/7dfc8356
Got wasm script: wasm://wasm/befe41aa
Setting breakpoint on offset 59 (should be propagated to 60, the offset of the call), url wasm://wasm/befe41aa
{
columnNumber : 60
lineNumber : 0
scriptId : <scriptId>
}
Paused at wasm://wasm/7dfc8356:0:60
Paused at wasm://wasm/befe41aa:0:60
at wasm_B (0:60):
- scope (global):
-- skipped
......@@ -18,7 +18,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:39
Paused at wasm://wasm/befe41aa:0:39
at wasm_A (0:39):
- scope (global):
-- skipped
......@@ -35,7 +35,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOver called
Paused at wasm://wasm/7dfc8356:0:40
Paused at wasm://wasm/befe41aa:0:40
at wasm_A (0:40):
- scope (global):
-- skipped
......@@ -52,7 +52,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOut called
Paused at wasm://wasm/7dfc8356:0:62
Paused at wasm://wasm/befe41aa:0:62
at wasm_B (0:62):
- scope (global):
-- skipped
......@@ -63,7 +63,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOut called
Paused at wasm://wasm/7dfc8356:0:60
Paused at wasm://wasm/befe41aa:0:60
at wasm_B (0:60):
- scope (global):
-- skipped
......@@ -74,7 +74,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOver called
Paused at wasm://wasm/7dfc8356:0:62
Paused at wasm://wasm/befe41aa:0:62
at wasm_B (0:62):
- scope (global):
-- skipped
......@@ -85,7 +85,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:44
Paused at wasm://wasm/befe41aa:0:44
at wasm_B (0:44):
- scope (global):
-- skipped
......@@ -96,7 +96,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.resume called
Paused at wasm://wasm/7dfc8356:0:60
Paused at wasm://wasm/befe41aa:0:60
at wasm_B (0:60):
- scope (global):
-- skipped
......@@ -107,7 +107,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:39
Paused at wasm://wasm/befe41aa:0:39
at wasm_A (0:39):
- scope (global):
-- skipped
......@@ -124,7 +124,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOut called
Paused at wasm://wasm/7dfc8356:0:62
Paused at wasm://wasm/befe41aa:0:62
at wasm_B (0:62):
- scope (global):
-- skipped
......@@ -135,7 +135,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:44
Paused at wasm://wasm/befe41aa:0:44
at wasm_B (0:44):
- scope (global):
-- skipped
......@@ -146,7 +146,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:46
Paused at wasm://wasm/befe41aa:0:46
at wasm_B (0:46):
- scope (global):
-- skipped
......@@ -157,7 +157,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:48
Paused at wasm://wasm/befe41aa:0:48
at wasm_B (0:48):
- scope (global):
-- skipped
......@@ -168,7 +168,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:50
Paused at wasm://wasm/befe41aa:0:50
at wasm_B (0:50):
- scope (global):
-- skipped
......@@ -179,7 +179,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:52
Paused at wasm://wasm/befe41aa:0:52
at wasm_B (0:52):
- scope (global):
-- skipped
......@@ -190,7 +190,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:54
Paused at wasm://wasm/befe41aa:0:54
at wasm_B (0:54):
- scope (global):
-- skipped
......@@ -201,7 +201,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:55
Paused at wasm://wasm/befe41aa:0:55
at wasm_B (0:55):
- scope (global):
-- skipped
......@@ -212,7 +212,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:57
Paused at wasm://wasm/befe41aa:0:57
at wasm_B (0:57):
- scope (global):
-- skipped
......@@ -223,7 +223,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:60
Paused at wasm://wasm/befe41aa:0:60
at wasm_B (0:60):
- scope (global):
-- skipped
......@@ -234,7 +234,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:39
Paused at wasm://wasm/befe41aa:0:39
at wasm_A (0:39):
- scope (global):
-- skipped
......@@ -251,7 +251,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:40
Paused at wasm://wasm/befe41aa:0:40
at wasm_A (0:40):
- scope (global):
-- skipped
......@@ -268,7 +268,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:41
Paused at wasm://wasm/befe41aa:0:41
at wasm_A (0:41):
- scope (global):
-- skipped
......@@ -285,7 +285,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/7dfc8356:0:62
Paused at wasm://wasm/befe41aa:0:62
at wasm_B (0:62):
- scope (global):
-- skipped
......
......@@ -3,7 +3,7 @@ Installing code and global variable.
Calling instantiate function.
Waiting for wasm scripts to be parsed.
Ignoring script with url v8://test/callInstantiate
Got wasm script: wasm://wasm/fa045c1e
Got wasm script: wasm://wasm/7d022e0e
Setting breakpoint on line 3 of wasm function
{
columnNumber : 37
......@@ -23,10 +23,10 @@ paused
Debugger.stepInto
paused
Script wasm://wasm/fa045c1e byte offset 35: Wasm opcode 0x20
Script wasm://wasm/7d022e0e byte offset 35: Wasm opcode 0x20
Debugger.resume
paused
Script wasm://wasm/fa045c1e byte offset 37: Wasm opcode 0x41
Script wasm://wasm/7d022e0e byte offset 37: Wasm opcode 0x41
Debugger.resume
exports.main returned!
Finished!
......@@ -3,7 +3,7 @@ Installing code and global variable.
Calling instantiate function.
Waiting for wasm scripts to be parsed.
Ignoring script with url v8://test/callInstantiate
Got wasm script: wasm://wasm/485e942e
Got wasm script: wasm://wasm/242f4a16
Setting breakpoint at start of wasm function
{
columnNumber : 33
......@@ -18,7 +18,7 @@ function test() {
Debugger.resume
paused
Script wasm://wasm/485e942e byte offset 33: Wasm opcode 0x1
Script wasm://wasm/242f4a16 byte offset 33: Wasm opcode 0x1
Debugger.stepOut
paused
instance.exports.main();
......@@ -37,10 +37,10 @@ function test() {
Debugger.resume
paused
Script wasm://wasm/485e942e byte offset 33: Wasm opcode 0x1
Script wasm://wasm/242f4a16 byte offset 33: Wasm opcode 0x1
Debugger.stepOver
paused
Script wasm://wasm/485e942e byte offset 34: Wasm opcode 0xb
Script wasm://wasm/242f4a16 byte offset 34: Wasm opcode 0xb
Debugger.resume
exports.main returned!
Finished run 2!
......@@ -53,10 +53,10 @@ function test() {
Debugger.resume
paused
Script wasm://wasm/485e942e byte offset 33: Wasm opcode 0x1
Script wasm://wasm/242f4a16 byte offset 33: Wasm opcode 0x1
Debugger.stepInto
paused
Script wasm://wasm/485e942e byte offset 34: Wasm opcode 0xb
Script wasm://wasm/242f4a16 byte offset 34: Wasm opcode 0xb
Debugger.resume
exports.main returned!
Finished run 3!
Tests stepping through wasm scripts with source maps
Installing code an global variable and instantiate.
Got wasm script: wasm://wasm/3697f0fe
Got wasm script: wasm://wasm/9b4bf87e
Script sourceMapURL: abc
Requesting source for wasm://wasm/3697f0fe...
Requesting source for wasm://wasm/9b4bf87e...
Source retrieved without error: true
Setting breakpoint on offset 54 (on the setlocal before the call), url wasm://wasm/3697f0fe
Setting breakpoint on offset 54 (on the setlocal before the call), url wasm://wasm/9b4bf87e
{
columnNumber : 54
lineNumber : 0
scriptId : <scriptId>
}
Paused at wasm://wasm/3697f0fe:0:54
Paused at wasm://wasm/9b4bf87e:0:54
at wasm_B (0:54):
- scope (global):
-- skipped
......@@ -21,7 +21,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:56
Paused at wasm://wasm/9b4bf87e:0:56
at wasm_B (0:56):
- scope (global):
-- skipped
......@@ -32,7 +32,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:38
Paused at wasm://wasm/9b4bf87e:0:38
at wasm_A (0:38):
- scope (global):
-- skipped
......@@ -48,7 +48,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOver called
Paused at wasm://wasm/3697f0fe:0:39
Paused at wasm://wasm/9b4bf87e:0:39
at wasm_A (0:39):
- scope (global):
-- skipped
......@@ -64,7 +64,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOut called
Paused at wasm://wasm/3697f0fe:0:58
Paused at wasm://wasm/9b4bf87e:0:58
at wasm_B (0:58):
- scope (global):
-- skipped
......@@ -75,7 +75,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOut called
Paused at wasm://wasm/3697f0fe:0:54
Paused at wasm://wasm/9b4bf87e:0:54
at wasm_B (0:54):
- scope (global):
-- skipped
......@@ -86,7 +86,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOver called
Paused at wasm://wasm/3697f0fe:0:56
Paused at wasm://wasm/9b4bf87e:0:56
at wasm_B (0:56):
- scope (global):
-- skipped
......@@ -97,7 +97,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOver called
Paused at wasm://wasm/3697f0fe:0:58
Paused at wasm://wasm/9b4bf87e:0:58
at wasm_B (0:58):
- scope (global):
-- skipped
......@@ -108,7 +108,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.resume called
Paused at wasm://wasm/3697f0fe:0:54
Paused at wasm://wasm/9b4bf87e:0:54
at wasm_B (0:54):
- scope (global):
-- skipped
......@@ -119,7 +119,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:56
Paused at wasm://wasm/9b4bf87e:0:56
at wasm_B (0:56):
- scope (global):
-- skipped
......@@ -130,7 +130,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:38
Paused at wasm://wasm/9b4bf87e:0:38
at wasm_A (0:38):
- scope (global):
-- skipped
......@@ -146,7 +146,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepOut called
Paused at wasm://wasm/3697f0fe:0:58
Paused at wasm://wasm/9b4bf87e:0:58
at wasm_B (0:58):
- scope (global):
-- skipped
......@@ -157,7 +157,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:43
Paused at wasm://wasm/9b4bf87e:0:43
at wasm_B (0:43):
- scope (global):
-- skipped
......@@ -168,7 +168,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:45
Paused at wasm://wasm/9b4bf87e:0:45
at wasm_B (0:45):
- scope (global):
-- skipped
......@@ -179,7 +179,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:47
Paused at wasm://wasm/9b4bf87e:0:47
at wasm_B (0:47):
- scope (global):
-- skipped
......@@ -190,7 +190,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:49
Paused at wasm://wasm/9b4bf87e:0:49
at wasm_B (0:49):
- scope (global):
-- skipped
......@@ -201,7 +201,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:51
Paused at wasm://wasm/9b4bf87e:0:51
at wasm_B (0:51):
- scope (global):
-- skipped
......@@ -212,7 +212,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:53
Paused at wasm://wasm/9b4bf87e:0:53
at wasm_B (0:53):
- scope (global):
-- skipped
......@@ -223,7 +223,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:54
Paused at wasm://wasm/9b4bf87e:0:54
at wasm_B (0:54):
- scope (global):
-- skipped
......@@ -234,7 +234,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:56
Paused at wasm://wasm/9b4bf87e:0:56
at wasm_B (0:56):
- scope (global):
-- skipped
......@@ -245,7 +245,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:38
Paused at wasm://wasm/9b4bf87e:0:38
at wasm_A (0:38):
- scope (global):
-- skipped
......@@ -261,7 +261,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:39
Paused at wasm://wasm/9b4bf87e:0:39
at wasm_A (0:39):
- scope (global):
-- skipped
......@@ -277,7 +277,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:40
Paused at wasm://wasm/9b4bf87e:0:40
at wasm_A (0:40):
- scope (global):
-- skipped
......@@ -293,7 +293,7 @@ at (anonymous) (0:17):
- scope (global):
-- skipped
Debugger.stepInto called
Paused at wasm://wasm/3697f0fe:0:58
Paused at wasm://wasm/9b4bf87e:0:58
at wasm_B (0:58):
- scope (global):
-- skipped
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment