V8中的类型和表达式*
Typeof and Expression* in V8
我正在试验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是一个运行时对象。他们完全没有任何关系。
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 表观调用前面的表达式必须具有指向 func 类型的指针
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 表达式必须具有类类型 vs.
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 非类类型表达式的静态类型与动态类型之间的差异
- 如何确定涉及 C++ 中除法的算术表达式的数据类型
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 为什么C++中的表达式类型在不同版本之间会发生变化
- C++中的可视化 Decltype 表达式类型推导
- ExprTK 未知变量分辨率取决于表达式类型
- 如何在运行时C++表达式类型
- 预期 不允许使用表达式/类型名称