11

私は%多くのコードで見ました。その目的や機能について説明していただけますか?

編集:私は数学のオペランドを知っています13 % 10 = 3が、私が見たものはのようなものreturn %fooです。

v8ソースファイルを調べているときにこれに遭遇しました

一部の関数呼び出しの前に%記号が付いているのはなぜですか?

%CheckIsBootstrapping();
//---
// Only used by async-await.js
function RejectPromise(promise, reason, debugEvent) {
  %PromiseReject(promise, reason, debugEvent);
}
//---
var callbacks = %create_resolving_functions(promise, debugEvent);
4

1 に答える 1

12

コメントで提供したリンクに基づくと、この%文字は、JavaScriptソースの解析中に実行されるC++ランタイムのメソッドを示すためにV8JavaScriptエンジンのソースコードの一部で使用されているようです。

たとえば、string.jsの行:

return %StringBuilderConcat(parts, len + 1, "");

パーサーが検出されると、StringBuilderConcatメソッドが実行されます。runtime.hでV8JavaScriptファイルに使用できるランタイムメソッドのリストを見つけることができます(注:私はC ++の経験がないので、これはstring.jsStringBuilderConcatで参照されるメソッドとは何の関係もないことを私は知っていますが、私は同じことだと思います):

#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \
  /* Property access */ \
  F(GetProperty, 2, 1) \
  F(KeyedGetProperty, 2, 1) \
  /* ... */
  F(StringBuilderConcat, 3, 1) \
  /* ... */

すでに述べたように、return %fooJavaScriptでSyntaxErrorをスローします。

于 2012-06-26T08:13:15.287 に答える