Добро пожаловать в другие главы Давайте разберемся с Chrome V8

Большинство функций в V8 реализованы во встроенном файле. В этой статье мы поговорим об инициализации встроенных и общих встроенных типов.

1. Инициализация

Ниже приведен класс кода, который отвечает за управление всеми встроенными функциями.

Строка 7 определяет тип кода, определения встроенных модулей приведены в файле builtins-definitions.h. Роли кода и встроенной функции различны, но их инициализация выполняется единообразно с помощью void Isolate::Initialize(Isolate* isolate,const v8::Isolate::CreateParams& params). Ниже инициализация.

Во время инициализации будет выполнена 22-я строка кода и вызовет приведенную ниже функцию.

Основная задача инициализации — сгенерировать и скомпилировать встроенный код и смонтировать его на i::isolate. Мы подробно объясняем BuildWithCodeStubAssemblerCS.

Первый параметр используется для хранения встроенной функции; второй параметр — это индекс встроенного массива; третий параметр — указатель на функцию, указывающий на сгенерированную встроенную функцию; четвертый параметр — дескриптор вызова; последний параметр - это имя.

Строка 19 приведенного выше кода вызывает функцию генератора. Давайте возьмем TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) в качестве примера, чтобы объяснить:

TF_BUILTIN(RecordWrite, RecordWriteCodeStubAssembler) генерирует источник RecordWrite. TF_BUILTIN — это шаблон макроса. После развертывания вы можете увидеть, что его член CodeAssemblerState* находится в состоянии, которое сохраняет сгенерированный код. Сгенерированный исходный код RecordWrite будет сохранен в структуре кода.

Мы видим, что встроенные функции классифицируются по классу кода. Кстати, код — это объект кучи, которым управляет куча V8. мы объясним объект кучи V8 в будущем, на рисунке 1 показан стек вызовов.

В SetupBuiltinsInternal() мы видим, что AddBuiltin() добавляет код в i::isolate, как показано ниже.

Сгенерированные встроенные модули будут вставлены в массив builtins_[Builtins::builtin_count], и, наконец, массив будет смонтирован в i::isolate.

2. Встроенный

С функциональной точки зрения встроенные функции охватывают многие функции ядра, такие как зажигание, байт-код и функции спецификации ECMA. В BUILTIN_LIST есть подробные комментарии. Существует семь типов встроенных.

Давайте поговорим о BuildAdaptor.

14-я строка кода отвечает за создание BuildAdaptor и, наконец, вызывает следующий код:

На рис. 2 показан сгенерированный исходный код в формате char.

Вывод. Генерация каждой встроенной функции отличается, но метод анализа и отладки кода одинаков.

Хорошо, на этом мы закончили. Увидимся в следующий раз, берегите себя!

Мой блог cncyclops.com. Пожалуйста, свяжитесь со мной, если у вас есть какие-либо проблемы.

WeChat: qq9123013 Электронная почта: [email protected]