Browse Source

added vertex comparisons

Nicolas Cannasse 11 năm trước cách đây
mục cha
commit
782a5663fb
2 tập tin đã thay đổi với 20 bổ sung0 xóa
  1. 17 0
      hxsl/AgalOut.hx
  2. 3 0
      hxsl/Checker.hx

+ 17 - 0
hxsl/AgalOut.hx

@@ -250,6 +250,11 @@ class AgalOut {
 				op(bop(r, expr(e1), expr(e2)));
 				op(bop(r, expr(e1), expr(e2)));
 				return r;
 				return r;
 			}
 			}
+			inline function compare(bop,e1,e2) {
+				var r = allocReg(e.t);
+				op(bop(r, expr(e1), expr(e2)));
+				return r;
+			}
 			switch( bop ) {
 			switch( bop ) {
 			case OpAdd: return std(OAdd);
 			case OpAdd: return std(OAdd);
 			case OpSub: return std(OSub);
 			case OpSub: return std(OSub);
@@ -304,6 +309,18 @@ class AgalOut {
 					throw "assert " + [e1.t, e2.t];
 					throw "assert " + [e1.t, e2.t];
 				}
 				}
 				return r;
 				return r;
+			case OpGt:
+				return compare(OSlt, e2, e1);
+			case OpLt:
+				return compare(OSlt, e1, e2);
+			case OpGte:
+				return compare(OSge, e1, e2);
+			case OpLte:
+				return compare(OSlt, e2, e1);
+			case OpEq:
+				return compare(OSeq, e1, e2);
+			case OpNotEq:
+				return compare(OSne, e1, e2);
 			default:
 			default:
 				throw "TODO " + bop;
 				throw "TODO " + bop;
 			}
 			}

+ 3 - 0
hxsl/Checker.hx

@@ -943,6 +943,9 @@ class Checker {
 			case TBool if( (op == OpEq || op == OpNotEq) && e2.t != TVoid ):
 			case TBool if( (op == OpEq || op == OpNotEq) && e2.t != TVoid ):
 				unifyExpr(e2, e1.t);
 				unifyExpr(e2, e1.t);
 				TBool;
 				TBool;
+			case TVec(_) if( e2.t != TVoid ):
+				unifyExpr(e2, e1.t);
+				e1.t;
 			default:
 			default:
 				switch( [e1.e, e2.e] ) {
 				switch( [e1.e, e2.e] ) {
 				case [TVar(v), TConst(CNull)], [TConst(CNull), TVar(v)]:
 				case [TVar(v), TConst(CNull)], [TConst(CNull), TVar(v)]: