From 4366700dd4478236aba2023d18092e17649e37e7 Mon Sep 17 00:00:00 2001
From: Sven Gestegard Robertz <sven.robertz@cs.lth.se>
Date: Fri, 14 Nov 2014 13:57:53 +0100
Subject: [PATCH] compiler code cleanup

---
 compiler/CS_CodeGen.jrag     | 167 ++++++-----------------------------
 compiler/C_CodeGen.jrag      | 138 +++++++++++++----------------
 compiler/Java_CodeGen.jrag   |  50 +++++------
 compiler/NameAnalysis.jrag   |   1 -
 compiler/Signature.jrag      |  39 +++-----
 examples/user_types/Makefile |   2 +-
 6 files changed, 125 insertions(+), 272 deletions(-)

diff --git a/compiler/CS_CodeGen.jrag b/compiler/CS_CodeGen.jrag
index 2790335..dc273e1 100644
--- a/compiler/CS_CodeGen.jrag
+++ b/compiler/CS_CodeGen.jrag
@@ -15,9 +15,6 @@ aspect CS_CodeGenEnv {
     private CS_printer printer;
     private HashMap unique = new HashMap();
 
-//    public boolean versionHasMetaData() {
-//      return version != 2006;
-//    }
     final private static class CS_printer {
       
       private boolean newline = true;
@@ -84,7 +81,7 @@ aspect CS_CodeGenEnv {
       this.version = version;
       this.indent = indent;
       this.printer = printer;
-      this.verStr = (version == 2006) ? "2006" : "";
+      this.verStr = LabCommVersion.versionString(version);
     }
 
     public CS_env(File f, int version) {
@@ -234,16 +231,6 @@ aspect CS_CodeGen {
 aspect CS_Register {
 
   public void Program.CS_emitTypeRegister(CS_env env) {
-    /*
-    env.println("static void register(LabCommChannel c) {");
-    env.indent();
-    for (int i = 0; i < getNumDecl(); i++) {
-      getDecl(i).CS_emitTypeRegister(env);
-    }
-    env.unindent();
-    env.println("}");
-*/
-
   }
 
   public void Decl.CS_emitTypeRegister(CS_env env) {
@@ -281,32 +268,18 @@ aspect CS_Class {
   }
   
   public void Decl.CS_emitUserTypeDeps(CS_env env, String via, boolean outputCode){
-//	if(env.versionHasMetaData() && hasDependencies() || isReferenced() ) {
-//	if(env.versionHasMetaData() && isSampleDecl() && outputCode) {
-//	   env.println("if(sendMetaData){");
-//	   env.indent();
-//	}
-//	Iterator<Decl> it = type_dependencies().iterator();
-//	while(it.hasNext()) {
-//	    Decl t = it.next();
-//
-//	    t.CS_emitUserTypeDeps(env, t.getName(), outputCode);
-//	    if( outputCode && t.getType().isUserType() ) {
-//               //env.println("/* FIXME: " + t.getName() + " does not exist");
-//	       env.println(t.getName()+".register(e, sendMetaData);");
-//               //env.println("*/");
-//	    } else {  // Just output a comment
-//		String refpath = (via == null) ? "directly" : "indirectly via "+via;
-//	       //env.println(" //Depends ("+refpath+") on "+t.getName() + " (" + t +") " );
-//	       //env.println(" //Depends ("+refpath+") on "+t.getName() );
-//	       env.println(" //Depends ("+refpath+") on "+t.getName()+" -- "+t.getType() );
-//	    }
-//	}
-//	if(env.versionHasMetaData() && isSampleDecl() && outputCode) {
-//	   env.unindent();
-//	   env.println("}");
-//	}
-//    }
+	Iterator<Decl> it = type_dependencies().iterator();
+	while(it.hasNext()) {
+	    Decl t = it.next();
+
+	    t.CS_emitUserTypeDeps(env, t.getName(), outputCode);
+	    if( outputCode && t.getType().isUserType() ) {
+	       env.println(t.getName()+".register(e);");
+	    } else {  // Just output a comment
+		String refpath = (via == null) ? "directly" : "indirectly via "+via;
+	       env.println(" //Depends ("+refpath+") on "+t.getName() );
+	    }
+	}
   }
   
   public void Decl.CS_emitUserTypeRefs(CS_env env, String via, boolean outputCode){
@@ -332,22 +305,17 @@ aspect CS_Class {
     env.println("e.register(Dispatcher.singleton());");
     env.unindent();
     env.println("}");
-
-//    env.println();
-//    env.println("public static void register(Encoder e, bool sendMetaData){");
-//    env.indent();
-//
-//    CS_emitUserTypeDeps(env, null, true);
-//    if(env.versionHasMetaData()) {
-//        env.println("e.register(Dispatcher.singleton(), sendMetaData);");
-//    } else {
-//        env.println("e.register(Dispatcher.singleton());");
-//    }
-//    env.unindent();
-//    env.println("}");
-//    env.println();
   }
   
+  public void Decl.CS_emitRegisterDecoder(CS_env env) {
+    env.println("public static void register(Decoder d, Handler h) {");
+    env.indent();
+    env.println("d.register(Dispatcher.singleton(), h);");
+    env.unindent();
+    env.println("}");
+    env.println();
+  }
+    
   public void TypeDecl.CS_emitClass(CS_env env) {
     if (getType().CS_needInstance()) {
       // Hackish prettyprint preamble
@@ -389,91 +357,17 @@ aspect CS_Class {
     env.println(");");
     env.println("}");
     env.println();
-    env.println("public static void register(Decoder d, Handler h) {");
-    env.indent();
-    env.println("d.register(new Dispatcher(), h);");
-    env.unindent();
-    env.println("}");
-    env.println();
-/*
-    env.println("public static void register(Encoder e) {");
-    env.indent();
-    env.println("e.register(new Dispatcher());");
-    env.unindent();
-    env.println("}");
-    env.println(); */
-    
-    CS_emitRegisterEncoder(env);
-
-    /*env.println("private class Dispatcher : LabCommDispatcher {");
-    env.indent();
-    env.println(); 
-    env.println("public Type getSampleClass() {");
-    env.indent();
-    env.println("return typeof(" + getName() + ");");
-    env.unindent();
-    env.println("}");
-    env.println(); 
-    env.println("public String getName() {");
-    env.indent();
-    env.println("return \"" + getName() + "\";");
-    env.unindent();
-    env.println("}");
-    env.println(); 
-    env.println("public byte[] getSignature() {");
-    env.indent();
-    env.println("return signature;");
-    env.unindent();
-    env.println("}");
-    env.println(); 
-    env.println("public void decodeAndHandle(Decoder d, SampleHandler h) {");
-    env.indent();
-    if (isVoid()) {
-      env.println(getName() + ".decode(d);");
-      env.println("((Handler)h).handle();"); 
-    } else {
-      env.println("((Handler)h).handle(" + getName() + ".decode(d));"); 
-    }
-    env.unindent();
-    env.println("}");
-    env.println("");
-    env.unindent();
-    env.println("}");
-    env.println("");*/
     CS_emitDispatcher(env,true);
-
+    CS_emitRegisterEncoder(env);
+    CS_emitRegisterDecoder(env);
     CS_emitEncoder(env);
     CS_emitDecoder(env);
-    /*env.println("private static byte[] signature = new byte[] {");
-    env.indent();
-    SignatureList signature = flatSignature(env.version);
-    for (int i = 0 ; i < signature.size() ; i++) {
-      String comment = signature.getComment(i);
-      if (comment != null) {
-        env.println(signature.getIndent(i) + "// " + comment);
-      }
-      byte[] data = signature.getData(i, env.version);
-      if (data != null) {
-        env.print(signature.getIndent(i));
-        for (int j = 0 ; j < data.length ; j++) {
-	  env.print(data[j] + ", ");
-        }
-        env.println();
-      }
-    }
-    env.unindent();
-    env.println("};");
-    env.unindent();
-    env.println();*/
     CS_emitSignature(env);
+
     env.println("}");
   }
 
   public void Decl.CS_emitSignature(CS_env env) {
-    //always emit the flat signature, as it is needed
-    //for matching at the decoder side (which cannot know
-    //the type_ids of dependent types. Therefore, flat sigs
-    //are used for matching
     CS_emitFlatSignature(env);
 //    if(isReferenced() || isSampleDecl()){
 //      Signature signature = getSignature();
@@ -494,7 +388,8 @@ aspect CS_Class {
       if (data != null) {
         env.print(signature.getIndent(i));
         for (int j = 0 ; j < data.length ; j++) {
-          env.print(data[j] + ", ");
+          //env.print(data[j] + ", ");
+          env.print(String.format("0x%02X, ", data[j])) ;
         }
         env.println();
       }
@@ -550,13 +445,7 @@ aspect CS_Class {
     env.println("return "+isSample+";");
     env.unindent();
     env.println("}");
-    env.println("public bool hasStaticSignature() {");
-    env.indent();
-    env.println("return "+!hasDependencies()+";");
-    env.unindent();
-    env.println("}");
-    env.println();
-    env.println("/** return the flat signature. Intended use is on decoder side */");
+    env.println("/** return the flat signature. */");
     env.println("public byte[] getSignature() {");
     env.indent();
     env.println("return signature;");
diff --git a/compiler/C_CodeGen.jrag b/compiler/C_CodeGen.jrag
index bf70105..2ef7bfc 100644
--- a/compiler/C_CodeGen.jrag
+++ b/compiler/C_CodeGen.jrag
@@ -33,7 +33,7 @@ aspect C_CodeGenEnv {
       }
     }
 
-    public final int version; //labcomm version (2006 or 2013)
+    public final int version; //labcomm version (2006 or 2014)
     public final String verStr; // version suffix to append (currently _2006 and empty string)
 
     public final String qualid;
@@ -56,7 +56,7 @@ aspect C_CodeGenEnv {
                   int nestedLevel, int version)
     {
       this.version = version;
-      this.verStr = (version == 2006 ? "2006" : "");
+      this.verStr = LabCommVersion.versionString(version);
       this.qualid = qualid;
       this.lcName = lcName;
       this.rawPrefix = rawPrefix;
@@ -986,13 +986,14 @@ aspect C_DecoderIoctl {
 aspect C_Encoder {
 
   public void Decl.C_emitEncoder(C_env env) {
-  //XXX  throw new Error(this.getClass().getName() + 
-//		    ".C_emitEncoder()" + 
-//		    " not declared");
+    throw new Error(this.getClass().getName() + 
+        ".C_emitEncoder()" + 
+        " not declared");
   }
 
-//  public void TypeDecl.C_emitEncoder(C_env env) {
-//  }
+  public void TypeDecl.C_emitEncoder(C_env env) {
+    // do nothing for type decls
+  }
 
   public void SampleDecl.C_emitEncoder(C_env env) {
     env = env.nestStruct("(*v)");
@@ -1099,15 +1100,15 @@ aspect C_Encoder {
   }
 
   public void Decl.C_emitEncoderRegisterHandler(C_env env) {
-  //XXX
-  //  throw new Error(this.getClass().getName() + 
-  //		    ".C_emitEncoderRegisterHandler(C_env env)" + 
-  //		    " not declared");
-  }
-  //
-  //public void TypeDecl.C_emitEncoderRegisterHandler(C_env env) {
-  //}
-  //
+    throw new Error(this.getClass().getName() + 
+  		    ".C_emitEncoderRegisterHandler(C_env env)" + 
+  		    " not declared");
+  }
+  
+  public void TypeDecl.C_emitEncoderRegisterHandler(C_env env) {
+    // do nothing for type decls
+  }
+  
   public void SampleDecl.C_emitEncoderRegisterHandler(C_env env) {
     env.println("int labcomm"+env.verStr+"_encoder_register_" + 
 		env.prefix + getName() + "(");
@@ -1118,7 +1119,7 @@ aspect C_Encoder {
     env.println("{");
     env.indent();
     C_emitUserTypeDeps(env, null, false); //XXX HERE BE DRAGONS
-                                          //set to false to turn off
+                                          //currently set to false to turn off
                                           //outputting of code
     env.println("return labcomm"+env.verStr+"_internal_encoder_register(");
     env.indent();
@@ -1183,7 +1184,6 @@ aspect C_TypeDependencies {
                env.println("labcomm"+env.verStr+"_encoder_register_"+env.prefix + t.getName()+"(e);");
             } else {  // Just output a comment
 	        String refpath = (via == null) ? "directly" : "indirectly via "+via;
-	       //env.println(" //Depends ("+refpath+") on "+t.getName() + " (" + t +") " );
 	       env.println(" //Depends ("+refpath+") on "+t.getName() );
             }
         }
@@ -1220,30 +1220,26 @@ aspect C_Signature {
   eq TypeDecl.C_DeclTypeString() = "LABCOMM_TYPEDEF";
 
   public void Decl.C_emitSignature(C_env env) {
-    //always emit the flat signature, as it is needed
-    //for matching at the decoder side (which cannot know
-    //the type_ids of dependent types. Therefore, flat sigs
-    //are used for matching
     C_emitFlatSignature(env);
-/*
-    if( false && (isReferenced() || isSampleDecl())){ 
-      Signature signature = getSignature();
-      signature.C_emitSignature(env, !isSampleDecl());
-    } else {
-      env.println("// not emitting signature for "+getName()+isReferenced()+isSampleDecl());  
-    }
-    if(env.versionHasMetaData()) { 
-      if(isReferenced() || isSampleDecl()){
-          env.println("(int (*)(void *))labcomm"+env.verStr+"_signature_" + 
-  	 	env.prefix + getName() + "_emit_signature");
-      } else {
-          env.println("NULL");  // HERE BE DRAGONS! Is it worth the size saving to skip emitting the emit_signature function for unused types?
-                                //                  The code won't likely end up in a target system anyway?
-      }
-    }
-    env.unindent();
-    env.println(" };");
-*/
+//
+//  if( false && (isReferenced() || isSampleDecl())){ 
+//    Signature signature = getSignature();
+//    signature.C_emitSignature(env, !isSampleDecl());
+//  } else {
+//    env.println("// not emitting signature for "+getName()+isReferenced()+isSampleDecl());  
+//  }
+//  if(env.versionHasMetaData()) { 
+//    if(isReferenced() || isSampleDecl()){
+//        env.println("(int (*)(void *))labcomm"+env.verStr+"_signature_" + 
+//	 	env.prefix + getName() + "_emit_signature");
+//    } else {
+//        env.println("NULL");  // HERE BE DRAGONS! Is it worth the size saving to skip emitting the emit_signature function for unused types?
+//                              //                  The code won't likely end up in a target system anyway?
+//    }
+//  }
+//  env.unindent();
+//  env.println(" };");
+//
   }
 
   public void ASTNode.C_emitFlatSignature(C_env env) {
@@ -1318,41 +1314,33 @@ aspect C_Signature {
        //     env.println("\"),");
        // }
     }
-/*
-
-        byte[] data = getData(env.version);
-          if (data != null) {
-              for (int j = 0 ; j < data.length ; j++) {
-                  env.print(getIndentString());
-                  //env.print("printf(\"labcomm"+env.verStr+"_write_byte( w, (unsigned char)"+ String.format("0x%02X ", data[j]) +")\\n\"); ");
-                  env.print("labcomm"+env.verStr+"_write_byte( w, (unsigned char)"+ String.format("0x%02X ", data[j]) +"); ");
-                  env.println("if (result != 0) { return result; }");
-              }
-              env.println();
-          }
-*/
-  //}
-/**
-static int encode_test_twoLines(
-struct labcomm_writer *w
-, test_twoLines *v
-)
-{
-result = labcomm_write_int(w, (*v).l1.start.x.val);
-**/
+//
+//
+//      byte[] data = getData(env.version);
+//        if (data != null) {
+//            for (int j = 0 ; j < data.length ; j++) {
+//                env.print(getIndentString());
+//                //env.print("printf(\"labcomm"+env.verStr+"_write_byte( w, (unsigned char)"+ String.format("0x%02X ", data[j]) +")\\n\"); ");
+//                env.print("labcomm"+env.verStr+"_write_byte( w, (unsigned char)"+ String.format("0x%02X ", data[j]) +"); ");
+//                env.println("if (result != 0) { return result; }");
+//            }
+//            env.println();
+//        }
+//
+//}
   public void SignatureList.C_emitSignature(C_env env, boolean decl) { 
-    env.println("static struct labcomm_signature_data signature_tree_" + 
-		 env.prefix + parentDecl().getName() + "[] = {");
-    env.indent();
-    for (int i = 0 ; i < size() ; i++) {
-      SignatureLine l = getSignatureLine(i);
-      l.C_emitSignature(env, decl);
-    }
-    
-    env.println("LABCOMM_SIGDEF_END");
-    env.println("};");
-    env.unindent();
-    env.println();
+//  env.println("static struct labcomm_signature_data signature_tree_" + 
+//  	 env.prefix + parentDecl().getName() + "[] = {");
+//  env.indent();
+//  for (int i = 0 ; i < size() ; i++) {
+//    SignatureLine l = getSignatureLine(i);
+//    l.C_emitSignature(env, decl);
+//  }
+//  
+//  env.println("LABCOMM_SIGDEF_END");
+//  env.println("};");
+//  env.unindent();
+//  env.println();
   }
 
 
diff --git a/compiler/Java_CodeGen.jrag b/compiler/Java_CodeGen.jrag
index 92ec31a..b3444ff 100644
--- a/compiler/Java_CodeGen.jrag
+++ b/compiler/Java_CodeGen.jrag
@@ -15,10 +15,6 @@ aspect Java_CodeGenEnv {
     private Java_printer printer;
     private HashMap unique = new HashMap();
 
-    public boolean versionHasMetaData() {
-      return version != 2006;
-    }
-
     final private class Java_printer {
 
       private boolean newline = true;
@@ -83,7 +79,7 @@ aspect Java_CodeGenEnv {
 
     private Java_env(int version, int indent) {
       this.version = version;
-      this.verStr = (version == 2006) ? "2006" : "";
+      this.verStr = LabCommVersion.versionString(version);
       this.indent = indent;
     }
 
@@ -289,11 +285,11 @@ aspect Java_Class {
   //  // all type decls
   //}
   //public void SampleDecl.Java_emitUserTypeDeps(Java_env env, String via, boolean outputCode) {
-    if(env.versionHasMetaData() && hasDependencies() || isReferenced() ) {
-        if(env.versionHasMetaData() && isSampleDecl() && outputCode) {
-           env.println("if(sendMetaData){");
-           env.indent();
-        }
+//  if(env.versionHasMetaData() && hasDependencies() || isReferenced() ) {
+//      if(env.versionHasMetaData() && isSampleDecl() && outputCode) {
+//         env.println("if(sendMetaData){");
+//         env.indent();
+//      }
         Iterator<Decl> it = type_dependencies().iterator();
         while(it.hasNext()) {
             Decl t = it.next();
@@ -303,16 +299,14 @@ aspect Java_Class {
                env.println(t.getName()+".register(e);");
             } else {  // Just output a comment
 	        String refpath = (via == null) ? "directly" : "indirectly via "+via;
-	       //env.println(" //Depends ("+refpath+") on "+t.getName() + " (" + t +") " );
-	       //env.println(" //Depends ("+refpath+") on "+t.getName() );
-	       env.println(" //Depends ("+refpath+") on "+t.getName()+" -- "+t.getType() );
+	       env.println(" //Depends ("+refpath+") on "+t.getName() );
             }
         }
-        if(env.versionHasMetaData() && isSampleDecl() && outputCode) {
-           env.unindent();
-           env.println("}");
-        }
-    }
+//      if(env.versionHasMetaData() && isSampleDecl() && outputCode) {
+//         env.unindent();
+//         env.println("}");
+//      }
+//  }
   }
   public void Decl.Java_emitUserTypeRefs(Java_env env, String via, boolean outputCode) {
     if( isReferenced() ) {
@@ -344,11 +338,7 @@ aspect Java_Class {
     env.indent();
 
     Java_emitUserTypeDeps(env, null, true);
-    if(env.versionHasMetaData()) {
-        env.println("e.register(Dispatcher.singleton());");
-    } else {
-        env.println("e.register(Dispatcher.singleton());");
-    }
+    env.println("e.register(Dispatcher.singleton());");
     env.unindent();
     env.println("}");
     env.println();
@@ -499,7 +489,7 @@ aspect Java_Class {
 
   //XXX TODO: refactor: split into a static class ("TypeDefSingleton"?)and a (smaller) dispatcher
   public void Decl.Java_emitDispatcher(Java_env env, boolean isSample) {
-    String genericStr = env.versionHasMetaData()?"<"+getName()+">":""; 
+    String genericStr = ""; //env.versionHasMetaData()?"<"+getName()+">":""; 
     env.println("private static class Dispatcher implements SampleDispatcher "+genericStr+"{");
     env.indent();
     env.println();
@@ -547,13 +537,13 @@ aspect Java_Class {
     env.println("return "+isSample+";");
     env.unindent();
     env.println("}");
-    env.println("public boolean hasStaticSignature() {");
-    env.indent();
-    env.println("return "+!hasDependencies()+";");
-    env.unindent();
-    env.println("}");
+//    env.println("public boolean hasStaticSignature() {");
+//    env.indent();
+//    env.println("return "+!hasDependencies()+";");
+//    env.unindent();
+//    env.println("}");
     env.println();
-    env.println("/** return the flat signature. Intended use is on decoder side */");
+    env.println("/** return the flat signature. */");
     env.println("public byte[] getSignature() {");
     env.indent();
     env.println("return signature;");
diff --git a/compiler/NameAnalysis.jrag b/compiler/NameAnalysis.jrag
index bf06055..92dbb41 100644
--- a/compiler/NameAnalysis.jrag
+++ b/compiler/NameAnalysis.jrag
@@ -34,7 +34,6 @@ aspect NameAnalysis {
     return null;
   }
 
-  //syn TypeDecl UserType.decl() = lookupType(getName());
   syn TypeDecl Type.decl(); 
   eq Type.decl() = null;
   eq UserType.decl() = lookupType(getName());
diff --git a/compiler/Signature.jrag b/compiler/Signature.jrag
index 5bb5907..cba9f09 100644
--- a/compiler/Signature.jrag
+++ b/compiler/Signature.jrag
@@ -23,34 +23,21 @@ aspect Signature {
     Signature sig = new Signature();
     sig.setSignatureList(sl);
     sig.setFlatSignatureList(fsl);
-    // HERE BE DRAGONS. Is this correct for a NTA?
     setSignature(sig);
     return sig;
   }
 
-  //syn nta SignatureList Signature.getSignatureList() {
-  //  SignatureList result = new SignatureList();
-  //  genSigLineForDecl(result, true);
-  //  return result;
-  //}
-
-    public String SignatureLine.getIndentString() {
-      StringBuffer result = new StringBuffer();
-      int indent = getIndent();
-      for (int i = 0 ; i < indent ; i++) {
-        result.append("  ");
-      }
-      return result.toString();
+  public String SignatureLine.getIndentString() {
+    StringBuffer result = new StringBuffer();
+    int indent = getIndent();
+    for (int i = 0 ; i < indent ; i++) {
+      result.append("  ");
     }
+    return result.toString();
+  }
 
-    //Very temporary kludge: the flat signature generation 
-    //predates the SignatureLine class hierarchy. This hack
-    //returns size zero arrays, which doesn't break the sig
-    //generation
-    //public byte[] getData() {
-    syn byte[] SignatureLine.getData(int version) {
-      return new byte[0];
-    }
+    syn byte[] SignatureLine.getData(int version) = null;
+    //  return new byte[0];
 
     private Decl TypeRefSignatureLine.decl;
     public TypeRefSignatureLine.TypeRefSignatureLine(int indent, Decl decl, String comment) {
@@ -171,7 +158,7 @@ aspect Signature {
   }
 
   public void TypeDecl.genSigLineForDecl(SignatureList list, boolean decl) {
-     System.out.println("************ TypeDecl.genSigLine("+decl+").... for "+getName());
+     //System.out.println("************ TypeDecl.genSigLine("+decl+").... for "+getName());
     if(decl){
       getType().genSigLineForDecl(list, decl);
     }else{
@@ -180,7 +167,7 @@ aspect Signature {
   }
 
   public void SampleDecl.genSigLineForDecl(SignatureList list, boolean decl) {
-     System.out.println("************ SampleDecl.genSigLine("+decl+").... for "+getName());
+     //System.out.println("************ SampleDecl.genSigLine("+decl+").... for "+getName());
     getType().genSigLineForDecl(list, decl);
   }
 
@@ -195,9 +182,9 @@ aspect Signature {
 
   public void UserType.genSigLineForDecl(SignatureList list, boolean decl) {
     if(decl){
-     System.out.println("************ UserType.genSigLine("+decl+").... for "+getName());
+     //System.out.println("************ UserType.genSigLine("+decl+").... for "+getName());
       TypeDecl thet=lookupType(getName());
-      System.out.println("************ thet: "+thet.getName() +":"+thet.getType());
+      //System.out.println("************ thet: "+thet.getName() +":"+thet.getType());
       thet.genSigLineForDecl(list, decl);
     }else{
      //System.out.println("************ UserType.genSigLine("+decl+").... for "+getName());
diff --git a/examples/user_types/Makefile b/examples/user_types/Makefile
index a5c0760..b371221 100644
--- a/examples/user_types/Makefile
+++ b/examples/user_types/Makefile
@@ -100,7 +100,7 @@ run:
 	@echo "************ running python decoder (from wiki_example):"
 	PYTHONPATH=${LCDIR}/lib/python ../wiki_example/example_decoder.py encoded_data_p LabComm2014
 
-runwcs: ExampleEncoder.exe ExampleDecoder.exe
+runwcs: build ExampleEncoder.exe ExampleDecoder.exe
 	export LD_LIBRARY_PATH=${LCDIR}/lib/c/
 	@echo
 	@echo "********************************************"
-- 
GitLab