怎样才能%招牌标识使用(How can % signs be used in identifiers

2019-07-19 20:47发布

浏览V8树,下src目录,一些js文件都在那里,提供一些基本的JS对象,如数学,阵列等浏览这些文件,我看到的标识符,包括在他们的名字一个百分号(%),即%Foo 。 我第一次天真地以为这是在JS的标识符其他一些允许的字符,但是当我在外壳试了一下,大声训斥我,说我违反了语法规则。 但是,如果它是一个语法错误,怎么来的D8的作品? 下面是从实际的源代码的示例:

SRC / apinatives.js线44至47,从GitHub / V8 / V8 GIT中克隆

function Instantiate(data, name) {
  if (!%IsTemplate(data)) return data;
      var tag = %GetTemplateField(data, kApiTagOffset);
      switch (tag) {

SRC / apinatives.js线41〜43,从GitHub / V8 / V8 GIT中克隆

function SetConstructor() {
  if (%_IsConstructCall()) {
    %SetInitialize(this);

为什么这个标识符不产生语法错误。 所有的JS文件,包括math.js和string.js和所有其他:WQ

Answer 1:

这不是技术上有效的JavaScript。 这些都是V8调用运行时函数 。 从该页面:

大部分的JavaScript库中的JavaScript代码本身实现,使用最少的一组的C ++运行时函数从JavaScript调用。 有些使用的是与%开始的名字叫,并用标志“--allow本地人语法”。 其他的则只能由代码生成器生成的代码调用,并且是不可见的JS,即使使用%语法。

如果你在看parser.cc你可以看到关于一些代码allow_natives_syntax决定解析器是否会接受这个扩展,V8使用与它的运行时交互的JavaScript语言。 这些文件必须启用该选项进行解析。

我推测,V8不允许你做的这些呼吁默认设置情况下,因为这将违背JavaScript标准,还因为它可能让你做一些事情来运行你不应该是能够做到。



文章来源: How can % signs be used in identifiers