V8 中的 Typeof 和 Expression*
Typeof and Expression* in V8
我正在试验 V8 引擎。
在 V8 (full-codegen-x64.cc) 中存在用于比较类型的函数:
void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr,
Expression* sub_expr,
Handle<String> check)
因此,如果例如:
typeof Obj == "object"
那么sub_expr是一个表达式对象和"typeof Obj" 和 check 是一个 "object".
如果可能的话,如何从 Expression 对象中获取 JSObject? - 不可能(你不能。一个表达式是一段语法 Andreas Rossberg)
在 void FullCodeGenerator::EmitLiteralCompareTypeof 中我们可以检查是否 :
Obj is function __ CmpObjectType(rax, JS_FUNCTION_TYPE, rdx);
Obj is proxy function __ CmpInstanceType(rdx, JS_FUNCTION_PROXY_TYPE);
Obj is proxy __ CmpObjectType(rax, FIRST_NONCALLABLE_SPEC_OBJECT_TYPE, rdx);
and etc...
例如,如果我们将使用此代码:
__ CmpObjectType(rax, FIRST_NONCALLABLE_SPEC_OBJECT_TYPE, rdx);
__ j(equal, if_true);
then
typeof Proxy_Obj == 'string' ---> true
V8 是怎么知道的?这是什么意思 - V8 运行 代码?
你不能。 Expression 是一段语法,JSObject 是运行时对象。他们完全没有关系。
我正在试验 V8 引擎。
在 V8 (full-codegen-x64.cc) 中存在用于比较类型的函数:
void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr,
Expression* sub_expr,
Handle<String> check)
因此,如果例如:
typeof Obj == "object"
那么sub_expr是一个表达式对象和"typeof Obj" 和 check 是一个 "object".
如果可能的话,如何从 Expression 对象中获取 JSObject? - 不可能(你不能。一个表达式是一段语法 Andreas Rossberg)
在 void FullCodeGenerator::EmitLiteralCompareTypeof 中我们可以检查是否 :
Obj is function __ CmpObjectType(rax, JS_FUNCTION_TYPE, rdx);
Obj is proxy function __ CmpInstanceType(rdx, JS_FUNCTION_PROXY_TYPE);
Obj is proxy __ CmpObjectType(rax, FIRST_NONCALLABLE_SPEC_OBJECT_TYPE, rdx);
and etc...
例如,如果我们将使用此代码:
__ CmpObjectType(rax, FIRST_NONCALLABLE_SPEC_OBJECT_TYPE, rdx);
__ j(equal, if_true);
then
typeof Proxy_Obj == 'string' ---> true
V8 是怎么知道的?这是什么意思 - V8 运行 代码?
你不能。 Expression 是一段语法,JSObject 是运行时对象。他们完全没有关系。