[vm, service] Represent pool immediates as JSON strings instead of numbers to work around JS representation limits.

TEST=ci
Bug: https://github.com/dart-lang/sdk/issues/53093
Change-Id: Ie3c734cbc298ef2f926b329c7636a3417aa7fc34
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/317800
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
This commit is contained in:
Ryan Macnak 2023-08-15 17:55:39 +00:00 committed by Commit Queue
parent d9a5f25e6d
commit b253857750
4 changed files with 9 additions and 15 deletions

View file

@ -136,15 +136,9 @@ class ObjectPoolViewElement extends CustomElement implements Renderable {
case M.ObjectPoolEntryKind.object:
return [anyRef(_isolate, entry.asObject, _objects, queue: _r.queue)];
case M.ObjectPoolEntryKind.immediate:
return [
new SpanElement()
..text = 'Immediate 0x${entry.asInteger!.toRadixString(16)}'
];
return [new SpanElement()..text = 'Immediate ${entry.asImmediate!}'];
case M.ObjectPoolEntryKind.nativeEntry:
return [
new SpanElement()
..text = 'NativeEntry 0x${entry.asInteger!.toRadixString(16)}'
];
return [new SpanElement()..text = 'NativeEntry ${entry.asImmediate!}'];
}
}
}

View file

@ -18,5 +18,5 @@ abstract class ObjectPoolEntry {
int get offset;
ObjectPoolEntryKind get kind;
ObjectRef? get asObject;
int? get asInteger;
String? get asImmediate;
}

View file

@ -4010,7 +4010,7 @@ class ObjectPoolEntry implements M.ObjectPoolEntry {
final int offset;
final M.ObjectPoolEntryKind kind;
final M.ObjectRef? asObject;
final int? asInteger;
final String? asImmediate;
factory ObjectPoolEntry(map) {
M.ObjectPoolEntryKind kind = stringToObjectPoolEntryKind(map['kind']);
@ -4020,15 +4020,15 @@ class ObjectPoolEntry implements M.ObjectPoolEntry {
case M.ObjectPoolEntryKind.object:
return new ObjectPoolEntry._fromObject(map['value'], offset);
default:
return new ObjectPoolEntry._fromInteger(kind, map['value'], offset);
return new ObjectPoolEntry._fromImmediate(kind, map['value'], offset);
}
}
ObjectPoolEntry._fromObject(this.asObject, this.offset)
: kind = M.ObjectPoolEntryKind.object,
asInteger = null;
asImmediate = null;
ObjectPoolEntry._fromInteger(this.kind, this.asInteger, this.offset)
ObjectPoolEntry._fromImmediate(this.kind, this.asImmediate, this.offset)
: asObject = null;
}

View file

@ -828,12 +828,12 @@ void ObjectPool::PrintJSONImpl(JSONStream* stream, bool ref) const {
case ObjectPool::EntryType::kImmediate:
imm = RawValueAt(i);
jsentry.AddProperty("kind", "Immediate");
jsentry.AddProperty64("value", imm);
jsentry.AddPropertyF("value", "0x%" Px, imm);
break;
case ObjectPool::EntryType::kNativeFunction:
imm = RawValueAt(i);
jsentry.AddProperty("kind", "NativeFunction");
jsentry.AddProperty64("value", imm);
jsentry.AddPropertyF("value", "0x%" Px, imm);
break;
default:
UNREACHABLE();