lua if条件语句的实现

先来看看lua if语句最简单的用法:

local n = 3
 if n > 3 then
      n = 4
 else
      n = 5
 end

字节码

要分析lua如何通过词法(llex.c),语法(lparse.c),代码生成器(lcode.c)来解析上面这段代码,生成供虚拟机执行的字节码, 就得先知道这段lua代码最终究竟生成了什么模样的字节码。

先来一步步断点调试虚拟机的执行入口luaV_execute(lvm.c),发现上述代码执行流程为:

1:OP_LOADK ----> 2:OP_LE ---> 3:OP_LOADK ---> 4:OP_RETURN
就这4步。 第1步,第4步分别把3和4加载到n(加载到栈). 第4步就是退出函数了。第2步是条件语句的关键. 来看看OP_LE干了些啥工作:


    
 void luaV_execute (lua_State *L, int nexeccalls) {   
 	...
 	...   
  const Instruction i = *pc++;  // (1)
  	...
   switch (GET_OPCODE(i)) {
 	case OP_LE: {
 	Protect(
 	  if (lessequal(L, RKB(i), RKC(i)) == GETARG_A(i))  // (2)B,C操作数比较多结果是否等于A操作数
 		dojump(L, pc, GETARG_sBx(*p
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值