计算指令

UO

一元运算。一元操作符有:”!” 对 boolean 值进行取反,”-“,对 number 值取相反值。

  • 参数说明:共1参数;参数1:一元操作符

  • 栈行为:消费1,产出1

  • 堆行为:无

  1. 代码:return -(-1)
  2. 指令:
  3. #0 LDC_D -1
  4. #1 UO -
  5. #2 RETURN 0

DO

二元运算。堆栈【第一个操作数,第二个操作数】,二元操作符有

数学运算位运算比较运算逻辑运算
+加法&按位于运算>大于||逻辑或
-减法|按位或运算>=大于等于&&逻辑与
*乘法!按位取反<小于
/除法^异或<=小于等于
\整除<<左位移==等于
%取摸>>有符号右位移!=不等于
(…)计算优先级>>>无符号右位移
  • 参数说明:共1参数;参数1:二元操作符

  • 栈行为:消费2,产出1

  • 堆行为:无

  1. 代码:return 1 + 2
  2. 指令:
  3. #0 LDC_D 1
  4. #1 LDC_D 2
  5. #2 DO +
  6. #3 RETURN 0

TYPEOF

计算堆栈顶元素的类型

  • 参数说明:共1参数;参数1:二元操作符

  • 栈行为:消费1,产出1

  • 堆行为:无

  1. 代码:return abc[a]
  2. 指令:
  3. [0]
  4. #000 E_LOAD #
  5. #001 GET abc
  6. #002 E_LOAD #
  7. #003 GET a
  8. #004 COPY
  9. #005 TYPEOF
  10. #006 COPY
  11. #007 LDC_S string
  12. ...

产出的数据类型为字符产,取值如下表:

类型字符含义
string通过 typeOf 计算得到的类型是 字符串
number通过 typeOf 计算得到的类型是 数字
boolean通过 typeOf 计算得到的类型是 布尔值
object通过 typeOf 计算得到的类型是 对象
list通过 typeOf 计算得到的类型是 集合
udf通过 typeOf 计算得到的类型是 UdfLambda函数
null通过 typeOf 计算得到的类型是 NULL 或 不存在这个属性。