Bladeren bron

added var id

Nicolas Cannasse 11 jaren geleden
bovenliggende
commit
ed0a85c974
1 gewijzigde bestanden met toevoegingen van 41 en 24 verwijderingen
  1. 41 24
      hxsl/Printer.hx

+ 41 - 24
hxsl/Printer.hx

@@ -4,8 +4,10 @@ using hxsl.Ast;
 class Printer {
 	
 	var buffer : StringBuf;
+	var varId : Bool;
 
-	public function new() {
+	public function new(varId = false) {
+		this.varId = varId;
 	}
 	
 	inline function add(v:Dynamic) {
@@ -15,7 +17,7 @@ class Printer {
 	public function shaderString( s : ShaderData ) {
 		buffer = new StringBuf();
 		for( v in s.vars ) {
-			addVar(v, true);
+			addVar(v, Var);
 			add(";\n");
 		}
 		if( s.vars.length > 0 )
@@ -29,7 +31,7 @@ class Printer {
 	
 	public function varString( v : TVar ) {
 		buffer = new StringBuf();
-		addVar(v);
+		addVar(v, null);
 		return buffer.toString();
 	}
 
@@ -45,7 +47,7 @@ class Printer {
 		return buffer.toString();
 	}
 
-	function addVar( v : TVar, isDecl = false, tabs = "" ) {
+	function addVar( v : TVar, defKind : VarKind, tabs = "" ) {
 		if( v.qualifiers != null ) {
 			for( q in v.qualifiers )
 				add("@" + (switch( q ) {
@@ -56,21 +58,34 @@ class Printer {
 				case Name(n): "name('" + n + "')";
 				}) + " ");
 		}
-		switch( v.kind ) {
-		case Local:
-			if( isDecl ) add("@local ");
-		case Global:
-			add("@global ");
-		case Var:
-			if( !isDecl ) add("@var ");
-		case Param:
-			add("@param ");
-		case Input:
-			add("@input ");
-		case Function:
-			add("@function ");
+		if( v.kind != defKind )
+			switch( v.kind ) {
+			case Local:
+				add("@local ");
+			case Global:
+				add("@global ");
+			case Var:
+				add("@var ");
+			case Param:
+				add("@param ");
+			case Input:
+				add("@input ");
+			case Function:
+				add("@function ");
+			}
+		add("var " + v.name + (varId?"@" + v.id:"") + " : ");
+		switch( v.type ) {
+		case TStruct(vl):
+			add("{");
+			var first = true;
+			for( v in vl ) {
+				if( first ) first = false else add(", ");
+				addVar(v,v.kind);
+			}
+			add("}");
+		default:
+			add(v.type.toString());
 		}
-		add("var " + v.name + " : " + v.type.toString());
 	}
 	
 	function addFun( f : TFunction ) {
@@ -82,7 +97,7 @@ class Printer {
 				first = false;
 			} else
 				add(", ");
-			addVar(a);
+			addVar(a, Local);
 		}
 		if( f.args.length > 0 ) add(" ");
 		add(") : "+f.ret.toString()+" ");
@@ -95,6 +110,8 @@ class Printer {
 			add(".");
 		}
 		add(v.name);
+		if( varId )
+			add("@" + v.id);
 	}
 	
 	function addExpr( e : TExpr, tabs : String ) : Void {
@@ -102,7 +119,7 @@ class Printer {
 		case TVar(v):
 			addVarName(v);
 		case TVarDecl(v, init):
-			addVar(v, false, tabs);
+			addVar(v, Local, tabs);
 			if( init != null ) {
 				add(" = ");
 				addExpr(init, tabs);
@@ -230,12 +247,12 @@ class Printer {
 		}
 	}
 
-	public static function toString( e : TExpr ) {
-		return new Printer().exprString(e);
+	public static function toString( e : TExpr, varId = false ) {
+		return new Printer(varId).exprString(e);
 	}
 
-	public static function shaderToString( s : ShaderData ) {
-		return new Printer().shaderString(s);
+	public static function shaderToString( s : ShaderData, varId = false ) {
+		return new Printer(varId).shaderString(s);
 	}
 	
 }