diff --git a/compiler/2014/Python_CodeGen.jrag b/compiler/2014/Python_CodeGen.jrag index c454f92bdfaa4ecb26d76d22c54e887df695a390..68b9b95e9b2c5c43b240341f75efc9921b863a9c 100644 --- a/compiler/2014/Python_CodeGen.jrag +++ b/compiler/2014/Python_CodeGen.jrag @@ -84,13 +84,13 @@ aspect Python_CodeGen { env.println("import StringIO"); env.println(); Python_genTypes(env); - //env.println("typedef = ["); - //env.indent(); - //for (int i = 0 ; i < getNumDecl() ; i++) { - // getDecl(i).Python_genTypedefListEntry(env); - //} - //env.unindent(); - //env.println("]"); + env.println("typedef = tuple(["); + env.indent(); + for (int i = 0 ; i < getNumDecl() ; i++) { + getDecl(i).Python_genTypedefListEntry(env); + } + env.unindent(); + env.println("])"); env.println("sample = tuple(["); env.indent(); for (int i = 0 ; i < getNumDecl() ; i++) { @@ -117,7 +117,6 @@ aspect PythonTypes { } public void TypeDecl.Python_genSignature(Python_env env) { -/* env.println("class " + getName() + "(object):"); env.indent(); env.println("signature = labcomm.typedef('" + getName() + "',"); @@ -127,7 +126,6 @@ aspect PythonTypes { env.println(")"); env.unindent(); env.println(); -*/ } public void SampleDecl.Python_genSignature(Python_env env) { @@ -143,7 +141,8 @@ aspect PythonTypes { } public void UserType.Python_genSignature(Python_env env) { - lookupType(getName()).getType().Python_genSignature(env); + env.println(getName() + ".signature"); + // lookupType(getName()).getType().Python_genSignature(env); } public void Type.Python_genSignature(Python_env env) { @@ -204,7 +203,7 @@ aspect PythonTypes { } public void TypeDecl.Python_genTypedefListEntry(Python_env env) { - env.println("('" + getName() + "', " + getName() + ".signature),"); + env.println(getName() + ","); } public void Decl.Python_genSampleListEntry(Python_env env) { diff --git a/lib/python/labcomm/LabComm.py b/lib/python/labcomm/LabComm.py index 039d10bab682f826078fd13f2d1f2b43f620e3ad..208b92f172dcba3d6503ae43878ad9c2e056747c 100644 --- a/lib/python/labcomm/LabComm.py +++ b/lib/python/labcomm/LabComm.py @@ -389,7 +389,7 @@ class SAMPLE(primitive): # # Aggregate types # -class sample_def_or_ref(type_decl): +class sampledef_or_sampleref_or_typedef(type_decl): def __init__(self, name=None, decl=None): self.name = name self.decl = decl @@ -402,8 +402,8 @@ class sample_def_or_ref(type_decl): with length_encoder(e1) as e2: self.decl.encode_decl(e2) - def encode(self, encoder, object): - self.decl.encode(encoder, object) + def encode(self, encoder, value): + self.decl.encode(encoder, value) def decode_decl(self, decoder): index = decoder.decode_type_number() @@ -438,7 +438,7 @@ class sample_def_or_ref(type_decl): def __repr__(self): return "%s('%s', %s)" % (self.type_name, self.name, self.decl) -class sample_def(sample_def_or_ref): +class sample_def(sampledef_or_sampleref_or_typedef): type_index = i_SAMPLE_DEF type_name = 'sample' @@ -448,7 +448,7 @@ class sample_def(sample_def_or_ref): def add_index(self, decoder, index, decl): decoder.add_decl(decl, index) -class sample_ref(sample_def_or_ref): +class sample_ref(sampledef_or_sampleref_or_typedef): type_index = i_SAMPLE_REF type_name = 'sample_ref' @@ -466,6 +466,16 @@ class sample_ref(sample_def_or_ref): def add_index(self, decoder, index, decl): decoder.add_ref(decl, index) +class typedef(sampledef_or_sampleref_or_typedef): + type_index = i_TYPE_DEF + type_name = 'typedef' + + def encode_decl(self, encoder): + self.decl.encode_decl(encoder) + + def encode(self, encoder, value): + self.decl.encode(encoder, value) + class array(type_decl): def __init__(self, indices, decl): self.indices = tuple(indices) diff --git a/lib/python/labcomm/__init__.py b/lib/python/labcomm/__init__.py index 0c95e1d51f7ebefc008ce96c3fcfade381f65fe3..fb2c085247062efa9b21ffcafc9b9e80cb34eb21 100644 --- a/lib/python/labcomm/__init__.py +++ b/lib/python/labcomm/__init__.py @@ -9,6 +9,7 @@ Encoder = labcomm.LabComm.Encoder sample = labcomm.LabComm.sample_def sample_def = labcomm.LabComm.sample_def sample_ref = labcomm.LabComm.sample_ref +typedef = labcomm.LabComm.typedef array = labcomm.LabComm.array struct = labcomm.LabComm.struct diff --git a/test/test_encoder_decoder.py b/test/test_encoder_decoder.py index 08a0c968d532ac92df59b48968126775a725959c..29960cb7245874db49da8085eb04740e15823e34 100755 --- a/test/test_encoder_decoder.py +++ b/test/test_encoder_decoder.py @@ -53,6 +53,12 @@ class Test: result.append((decl, values)) return result + elif decl.__class__ == labcomm.typedef: + result = [] + for values in self.generate(decl.decl): + result.append(values) + return result + elif decl.__class__ == labcomm.struct: result = [] if len(decl.field) == 0: @@ -164,7 +170,6 @@ class Test: print>>sys.stderr, "Checking", signature.name, for decl,value in self.generate(signature): sys.stderr.write('.') - #print name,decl,value,value.__class__ self.next.acquire() self.received_value = None self.received_decl = None @@ -176,7 +181,7 @@ class Test: self.failed = True elif value != self.received_value: print>>sys.stderr, "Coding error" - print>>sys.stderr,value == self.received_value + print>>sys.stderr, value == self.received_value print>>sys.stderr, "Got: ", self.received_value print>>sys.stderr, " ", self.received_decl print>>sys.stderr, "Expected:", value