V8中的类型和表达式*

Typeof and Expression* in V8

本文关键字:表达式 类型 V8      更新时间:2023-10-16

我正在试验V8发动机。

在V8(full-coodegen-x64.cc)中,存在用于比较类型的此功能:

void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr,
                                             Expression* sub_expr,
                                             Handle<String> check)

因此,例如:

   typeof Obj == "object"

sub_expr表达式对象,且检查"对象"

如果可能的话,如何从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运行代码吗

你不能。表达式是一段语法,JSObject是一个运行时对象。他们完全没有任何关系。

相关文章: