浏览代码

added ++/-- support (without lvalue)

Nicolas Cannasse 8 年之前
父节点
当前提交
806226d5f0
共有 2 个文件被更改,包括 9 次插入0 次删除
  1. 7 0
      hxsl/Checker.hx
  2. 2 0
      hxsl/MacroParser.hx

+ 7 - 0
hxsl/Checker.hx

@@ -428,6 +428,13 @@ class Checker {
 				}
 				}
 				type = e1.t;
 				type = e1.t;
 				TUnop(op, e1);
 				TUnop(op, e1);
+			case OpIncrement, OpDecrement:
+				switch( e1.t ) {
+				case TFloat, TInt:
+				default: error("Cannot increment " + e1.t.toString(), e.pos);
+				}
+				type = TVoid;
+				TBinop(OpAssignOp(op == OpIncrement ? OpAdd : OpSub), e1, { e : TConst(CInt(1)), t : TInt, p : e1.p });
 			default:
 			default:
 				error("Operation non supported", e.pos);
 				error("Operation non supported", e.pos);
 			}
 			}

+ 2 - 0
hxsl/MacroParser.hx

@@ -177,6 +177,8 @@ class MacroParser {
 			EBinop(op, parseExpr(e1), parseExpr(e2));
 			EBinop(op, parseExpr(e1), parseExpr(e2));
 		case EUnop(op, false, e1):
 		case EUnop(op, false, e1):
 			EUnop(op, parseExpr(e1));
 			EUnop(op, parseExpr(e1));
+		case EUnop(op, true, e1):
+			EUnop(op, parseExpr(e1)); // TODO : ++/-- postfix with lvalue
 		case EConst(c):
 		case EConst(c):
 			switch( c ) {
 			switch( c ) {
 			case CString(s):
 			case CString(s):