浏览代码

Fix line number for relocated bytecode after closure fixup.

Mike Pall 12 年之前
父节点
当前提交
4fba08a9ac
共有 1 个文件被更改,包括 3 次插入1 次删除
  1. 3 1
      src/lj_parse.c

+ 3 - 1
src/lj_parse.c

@@ -1555,7 +1555,9 @@ static void fs_fixup_ret(FuncState *fs)
       switch (bc_op(ins)) {
       switch (bc_op(ins)) {
       case BC_CALLMT: case BC_CALLT:
       case BC_CALLMT: case BC_CALLT:
       case BC_RETM: case BC_RET: case BC_RET0: case BC_RET1:
       case BC_RETM: case BC_RET: case BC_RET0: case BC_RET1:
-	offset = bcemit_INS(fs, ins)-(pc+1)+BCBIAS_J;  /* Copy return ins. */
+	offset = bcemit_INS(fs, ins);  /* Copy original instruction. */
+	fs->bcbase[offset].line = fs->bcbase[pc].line;
+	offset = offset-(pc+1)+BCBIAS_J;
 	if (offset > BCMAX_D)
 	if (offset > BCMAX_D)
 	  err_syntax(fs->ls, LJ_ERR_XFIXUP);
 	  err_syntax(fs->ls, LJ_ERR_XFIXUP);
 	/* Replace with UCLO plus branch. */
 	/* Replace with UCLO plus branch. */