При просмотре дерева v8 в каталоге src
было несколько файлов js, предоставляющих базовые возможности JS. такие объекты, как Math, Array и т. д. Просматривая эти файлы, я видел идентификаторы, включающие знак процента (%) в их именах, то есть %Foo
. Сначала я наивно думал, что это какой-то другой разрешенный символ в идентификаторах JS, но когда я попробовал его в оболочке, он наорал на меня, говоря, что я нарушаю правила синтаксиса. Но если это синтаксическая ошибка, то почему работает d8? Вот пример из фактического исходного кода:
src/apinatives.js, строки с 44 по 47, клон git из github/v8/v8
function Instantiate(data, name) {
if (!%IsTemplate(data)) return data;
var tag = %GetTemplateField(data, kApiTagOffset);
switch (tag) {
src/apinatives.js, строки с 41 по 43, клон git из github/v8/v8
function SetConstructor() {
if (%_IsConstructCall()) {
%SetInitialize(this);
Почему эти идентификаторы не приводят к синтаксическим ошибкам. Все файлы js, включая math.js, string.js и все остальные?:wq
%
— это оператор модуля; это что-то тестирует, хотя я не уверен, что именно. - person David says reinstate Monica   schedule 14.02.2013!%IsTemplate(data)
- person   schedule 14.02.2013IsTemplate(data)
. - person David says reinstate Monica   schedule 14.02.2013!%2
должен быть допустимым, что при попытке в консоли приводит к синтаксической ошибке. - person   schedule 14.02.2013