本文整理汇总了C#中expdesc.Copy方法的典型用法代码示例。如果您正苦于以下问题:C# expdesc.Copy方法的具体用法?C# expdesc.Copy怎么用?C# expdesc.Copy使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类expdesc
的用法示例。
在下文中一共展示了expdesc.Copy方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LuaKPosFix
public static void LuaKPosFix (FuncState fs, BinOpr op, expdesc e1, expdesc e2) {
switch (op) {
case BinOpr.OPR_AND: {
LuaAssert(e1.t == NO_JUMP); /* list must be closed */
LuaKDischargeVars(fs, e2);
LuaKConcat(fs, ref e2.f, e1.f);
e1.Copy(e2);
break;
}
case BinOpr.OPR_OR: {
LuaAssert(e1.f == NO_JUMP); /* list must be closed */
LuaKDischargeVars(fs, e2);
LuaKConcat(fs, ref e2.t, e1.t);
e1.Copy(e2);
break;
}
case BinOpr.OPR_CONCAT: {
LuaKExp2Val(fs, e2);
if (e2.k == expkind.VRELOCABLE && GET_OPCODE(GetCode(fs, e2)) == OpCode.OP_CONCAT) {
LuaAssert(e1.u.s.info == GETARG_B(GetCode(fs, e2))-1);
FreeExp(fs, e1);
SETARG_B(GetCode(fs, e2), e1.u.s.info);
e1.k = expkind.VRELOCABLE; e1.u.s.info = e2.u.s.info;
}
else {
LuaKExp2NextReg(fs, e2); /* operand must be on the 'stack' */
CodeArith(fs, OpCode.OP_CONCAT, e1, e2);
}
break;
}
case BinOpr.OPR_ADD: CodeArith(fs, OpCode.OP_ADD, e1, e2); break;
case BinOpr.OPR_SUB: CodeArith(fs, OpCode.OP_SUB, e1, e2); break;
case BinOpr.OPR_MUL: CodeArith(fs, OpCode.OP_MUL, e1, e2); break;
case BinOpr.OPR_DIV: CodeArith(fs, OpCode.OP_DIV, e1, e2); break;
case BinOpr.OPR_MOD: CodeArith(fs, OpCode.OP_MOD, e1, e2); break;
case BinOpr.OPR_POW: CodeArith(fs, OpCode.OP_POW, e1, e2); break;
case BinOpr.OPR_EQ: CodeComp(fs, OpCode.OP_EQ, 1, e1, e2); break;
case BinOpr.OPR_NE: CodeComp(fs, OpCode.OP_EQ, 0, e1, e2); break;
case BinOpr.OPR_LT: CodeComp(fs, OpCode.OP_LT, 1, e1, e2); break;
case BinOpr.OPR_LE: CodeComp(fs, OpCode.OP_LE, 1, e1, e2); break;
case BinOpr.OPR_GT: CodeComp(fs, OpCode.OP_LT, 0, e1, e2); break;
case BinOpr.OPR_GE: CodeComp(fs, OpCode.OP_LE, 0, e1, e2); break;
default: LuaAssert(0); break;
}
}
示例2: luaK_posfix
public static void luaK_posfix (FuncState fs, BinOpr op, expdesc e1, expdesc e2) {
switch (op) {
case BinOpr.OPR_AND: {
lua_assert(e1.t == NO_JUMP); /* list must be closed */
luaK_dischargevars(fs, e2);
luaK_concat(fs, ref e2.f, e1.f);
e1.Copy(e2);
break;
}
case BinOpr.OPR_OR: {
lua_assert(e1.f == NO_JUMP); /* list must be closed */
luaK_dischargevars(fs, e2);
luaK_concat(fs, ref e2.t, e1.t);
e1.Copy(e2);
break;
}
case BinOpr.OPR_CONCAT: {
luaK_exp2val(fs, e2);
if (e2.k == expkind.VRELOCABLE && GET_OPCODE(getcode(fs, e2)) == OpCode.OP_CONCAT) {
lua_assert(e1.u.s.info == GETARG_B(getcode(fs, e2))-1);
freeexp(fs, e1);
SETARG_B(getcode(fs, e2), e1.u.s.info);
e1.k = expkind.VRELOCABLE; e1.u.s.info = e2.u.s.info;
}
else {
luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */
codearith(fs, OpCode.OP_CONCAT, e1, e2);
}
break;
}
case BinOpr.OPR_ADD: codearith(fs, OpCode.OP_ADD, e1, e2); break;
case BinOpr.OPR_SUB: codearith(fs, OpCode.OP_SUB, e1, e2); break;
case BinOpr.OPR_MUL: codearith(fs, OpCode.OP_MUL, e1, e2); break;
case BinOpr.OPR_DIV: codearith(fs, OpCode.OP_DIV, e1, e2); break;
case BinOpr.OPR_MOD: codearith(fs, OpCode.OP_MOD, e1, e2); break;
case BinOpr.OPR_POW: codearith(fs, OpCode.OP_POW, e1, e2); break;
case BinOpr.OPR_EQ: codecomp(fs, OpCode.OP_EQ, 1, e1, e2); break;
case BinOpr.OPR_NE: codecomp(fs, OpCode.OP_EQ, 0, e1, e2); break;
case BinOpr.OPR_LT: codecomp(fs, OpCode.OP_LT, 1, e1, e2); break;
case BinOpr.OPR_LE: codecomp(fs, OpCode.OP_LE, 1, e1, e2); break;
case BinOpr.OPR_GT: codecomp(fs, OpCode.OP_LT, 0, e1, e2); break;
case BinOpr.OPR_GE: codecomp(fs, OpCode.OP_LE, 0, e1, e2); break;
default: lua_assert(0); break;
}
}