From c981f7fce1bf30cbf0d2e52dd1c20dbac28c18f8 Mon Sep 17 00:00:00 2001 From: Matheus Marchini Date: Mon, 13 Jan 2020 17:23:58 -0800 Subject: [PATCH] src: guess Symbol.name offset PR-URL: https://github.com/nodejs/llnode/pull/330 Reviewed-By: Gireesh Punathil Reviewed-By: Michael Dawson --- src/llv8-constants.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/llv8-constants.cc b/src/llv8-constants.cc index 9c68b78f..4fb97e26 100644 --- a/src/llv8-constants.cc +++ b/src/llv8-constants.cc @@ -550,7 +550,24 @@ void Frame::Load() { void Symbol::Load() { - kNameOffset = LoadConstant({"class_Symbol__name__Object"}); + // map is the last field of HeapObject + Constant maybe_name_offset = + LoadConstant({"class_HeapObject__map__Map"}); + common_->Load(); + if (maybe_name_offset.Check()) { + int name_offset = *maybe_name_offset; + + name_offset += common_->kPointerSize; + // class Name extends HeapObject and has only one uint32 field + name_offset += sizeof(uint32_t); + // class Symbol extends Name and has one int32 field before name + name_offset += sizeof(int32_t); + + kNameOffset = + LoadOptionalConstant({"class_Symbol__name__Object"}, name_offset); + } else { + kNameOffset = LoadConstant({"class_Symbol__name__Object"}); + } }