瀏覽代碼

more Buffer support

Nicolas Cannasse 7 年之前
父節點
當前提交
405f5deeba
共有 2 個文件被更改,包括 9 次插入8 次删除
  1. 6 5
      hxsl/Checker.hx
  2. 3 3
      hxsl/Eval.hx

+ 6 - 5
hxsl/Checker.hx

@@ -725,8 +725,8 @@ class Checker {
 		return tv;
 	}
 
-	function makeVarType( t : Type, parent : TVar, pos : Position ) {
-		switch( t ) {
+	function makeVarType( vt : Type, parent : TVar, pos : Position ) {
+		switch( vt ) {
 		case TStruct(vl):
 			// mutate to allow TArray to access previously declared vars
 			var vl = vl.copy();
@@ -736,7 +736,7 @@ class Checker {
 				vl[i] = makeVar( { type : v.type, qualifiers : v.qualifiers, name : v.name, kind : v.kind, expr : null }, pos, parent);
 			}
 			return parent.type;
-		case TArray(t, size):
+		case TArray(t, size), TBuffer(t,size):
 			switch( t ) {
 			case TArray(_):
 				error("Multidimentional arrays are not allowed", pos);
@@ -780,9 +780,10 @@ class Checker {
 				if( !v2.isConst() ) error("Array size variable '" + v.name + "'should be a constant", pos);
 				SVar(v2);
 			}
-			return TArray(makeVarType(t,parent,pos), s);
+			t = makeVarType(t,parent,pos);
+			return vt.match(TArray(_)) ? TArray(t, s) : TBuffer(t,s);
 		default:
-			return t;
+			return vt;
 		}
 	}
 

+ 3 - 3
hxsl/Eval.hx

@@ -52,18 +52,18 @@ class Eval {
 		switch( v2.type ) {
 		case TStruct(vl):
 			v2.type = TStruct([for( v in vl ) mapVar(v)]);
-		case TArray(t, SVar(vs)):
+		case TArray(t, SVar(vs)), TBuffer(t, SVar(vs)):
 			var c = constants.get(vs.id);
 			if( c != null )
 				switch( c ) {
 				case TConst(CInt(v)):
-					v2.type = TArray(t, SConst(v));
+					v2.type = v2.type.match(TArray(_)) ? TArray(t, SConst(v)) : TBuffer(t, SConst(v));
 				default:
 					Error.t("Integer value expected for array size constant " + vs.name, null);
 				}
 			else {
 				var vs2 = mapVar(vs);
-				v2.type = TArray(t, SVar(vs2));
+				v2.type = v2.type.match(TArray(_)) ? TArray(t, SVar(vs2)) : TBuffer(t, SVar(vs2));
 			}
 		default:
 		}