certi-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[certi-cvs] certi/scripts GenMsgBase.py GenMsgCXX.py GenMsg...


From: CERTI CVS commits
Subject: [certi-cvs] certi/scripts GenMsgBase.py GenMsgCXX.py GenMsg...
Date: Fri, 29 Jul 2011 09:08:24 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      11/07/29 09:08:24

Modified files:
        scripts        : GenMsgBase.py GenMsgCXX.py GenMsgC.py 
                         GenMsgAST.py 

Log message:
        Better C message generator

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgBase.py?cvsroot=certi&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgCXX.py?cvsroot=certi&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgC.py?cvsroot=certi&r1=1.7&r2=1.8
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgAST.py?cvsroot=certi&r1=1.22&r2=1.23

Patches:
Index: GenMsgBase.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgBase.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- GenMsgBase.py       28 Jul 2011 14:04:20 -0000      1.11
+++ GenMsgBase.py       29 Jul 2011 09:08:22 -0000      1.12
@@ -19,7 +19,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgBase.py,v 1.11 2011/07/28 14:04:20 erk Exp $
+## $Id: GenMsgBase.py,v 1.12 2011/07/29 09:08:22 erk Exp $
 ## ----------------------------------------------------------------------------
 
 # We use logging for ... logging :-)
@@ -169,6 +169,8 @@
                 stream.write(self.commentEndWith+'\n')
         else:
             stream.write('\n')
+        else:
+            stream.write('\n')
     
     def writeCommentLines(self,stream, commentLines):
         """

Index: GenMsgCXX.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgCXX.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- GenMsgCXX.py        16 Jul 2011 18:10:09 -0000      1.23
+++ GenMsgCXX.py        29 Jul 2011 09:08:23 -0000      1.24
@@ -20,7 +20,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgCXX.py,v 1.23 2011/07/16 18:10:09 erk Exp $
+## $Id: GenMsgCXX.py,v 1.24 2011/07/29 09:08:23 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -120,9 +120,7 @@
     def openNamespaces(self, stream):
         if self.AST.hasPackage():
             self.writeComment(stream, self.AST.package)
-
             # we may have nested namespace
-
             nameSpaceList = self.AST.package.name.split('.')
             for ns in nameSpaceList:
                 stream.write(self.getIndent() + '''namespace %s {
@@ -135,7 +133,6 @@
         if self.AST.hasPackage():
 
             # we may have nested namespace
-
             nameSpaceList = self.AST.package.name.split('.')
             nameSpaceList.reverse()
             for ns in nameSpaceList:
@@ -355,9 +352,7 @@
         for native in self.AST.natives:
             if native.hasLanguage('CXX'):
                 for line in native.getLanguageLines('CXX'):
-
                     # we are only interested in native "include" statement
-
                     stmt = line.statement
                     if stmt.find('#include') >= 0 and not stmt \
                         in self.included.keys():

Index: GenMsgC.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgC.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- GenMsgC.py  28 Jul 2011 14:04:20 -0000      1.7
+++ GenMsgC.py  29 Jul 2011 09:08:23 -0000      1.8
@@ -20,7 +20,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgC.py,v 1.7 2011/07/28 14:04:20 erk Exp $
+## $Id: GenMsgC.py,v 1.8 2011/07/29 09:08:23 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -302,7 +302,7 @@
                 if field.qualifier == 'optional':
                     stream.write(self.getIndent())
                     tmp = self.upperFirst(field.name)
-                    stream.write('uint8_t has%s(%s_t cthis)'
+                    stream.write('uint8_t has%s(%s_t* cthis)'
                                  % (tmp, self.nameprefix + msg.name))
                     if not headerOnly:
                         stream.write(' {return cthis->_has%s;}\n' % tmp)
@@ -481,7 +481,7 @@
 
                 if msg.hasMerge():
                     stream.write(self.getIndent()
-                                 + '%s super;\n'
+                                 + '%s* super;\n'
                                  % self.getTargetTypeName(msg.merge.name))
 
                 # write fields
@@ -601,7 +601,7 @@
         else:
             stream.write(self.getIndent()+'newObj->'+field.name+' = ')
             if isinstance(field.typeid,GenMsgAST.EnumType):
-                stream.write('%s;\n' % field.typeid.values[0].name)
+                stream.write('%s;\n' % (self.nameprefix + 
self.AST.shortenName(field.typeid.name) +'_'+field.typeid.values[0].name))
             else:
                 
stream.write(self.getTargetTypeName(field.typeid.name)+'_create(1);\n')
 
@@ -633,17 +633,15 @@
         if None == methodName:  # field has no Serialize Method Name found in 
the map
             # non native field case
             if field.typeid.name in [m.name for m in self.AST.messages]:
-                stream.write(field.name + indexField
-                             + '_serialize(msgBuffer);\n')
+                self.writeCommentLines("FIXME call serialize for field %s" % 
field.name)
+                #stream.write(field.name + indexField+ 
'_serialize(msgBuffer);\n')
             elif field.typeid.name in [m.name for m in self.AST.enums]:
             # enum type field case (enum are serialized as uint32)
                 methodName = self.getSerializeMethodName('uint32')
                 stream.write(methodName)
-                stream.write('(msgBuffer' + field.name + indexField + ');\n')
+                stream.write('(msgBuffer,cthis->' + field.name + indexField + 
');\n')
             else:
-
             # native field case
-
                 stream.write(self.commentLineBeginWith
                              + ' FIXME FIXME FIXME\n')
                 stream.write(self.getIndent()
@@ -666,7 +664,7 @@
         indexField = ''
         if field.qualifier == 'optional':
             stream.write(self.getIndent())
-            stream.write('fprintf(out,"(opt) %s =" ' % field.name)
+            stream.write('fprintf(out,"(opt) %s =" cthis->' % field.name)
         elif field.qualifier == 'repeated':
             indexField = '[i]'
             stream.write(self.getIndent())
@@ -680,7 +678,7 @@
             stream.write(self.getIndent() + 'out ')
         else:
             stream.write(self.getIndent())
-            stream.write('fprintf(out," %s = " ' % field.name)
+            stream.write('fprintf(out," %s = " cthis->' % field.name)
 
         methodName = self.getSerializeMethodName(field.typeid.name)
         if None == methodName:  # field has no Serialize Method Name found in 
the map
@@ -725,7 +723,7 @@
         indexField = ''
         if field.qualifier == 'optional':
             stream.write(self.getIndent())
-            stream.write('cthis->_has%s = MB_read_bool(msgBuffer);\n'
+            stream.write('MB_read_bool(msgBuffer,&(cthis->_has%s));\n'
                          % self.upperFirst(field.name))
             stream.write(self.getIndent())
             stream.write('if (cthis->_has%s) {\n'
@@ -734,8 +732,8 @@
         elif field.qualifier == 'repeated':
             indexField = '[i]'
             stream.write(self.getIndent())
-            stream.write('uint32_t ' + field.name
-                         + 'Size = MB_read_uint32(msgBuffer);\n')
+            stream.write('uint32_t ' + field.name+ 'Size;\n');
+            stream.write('MB_read_uint32(msgBuffer,&'+field.name+'Size);\n')
             stream.write(self.getIndent())
             stream.write('cthis->'+field.name + 'size =' + field.name
                          + 'Size);\n')
@@ -752,45 +750,36 @@
                 stream.write('cthis->'+field.name + indexField
                              + '_deserialize(msgBuffer);\n')
             elif field.typeid.name in [m.name for m in self.AST.enums]:
-
             # enum type field case (enum are deserialized as uint32)
-
                 targetTypeName = \
                     self.getTargetTypeName(field.typeid.name)
                 methodName = self.getDeSerializeMethodName('uint32')
 
                 # We should check if the uint32 value is in enum range before 
casting it into enumtype
-                stream.write('cthis->'+field.name + indexField + ' = 
static_cast<'
-                              + targetTypeName + '>('
-                             + methodName + ' ());\n')
+                stream.write(methodName +'(msgBuffer,(&cthis->'+field.name + 
indexField + '));\n')
             else:
-
             # native field case
-
                 stream.write(self.commentLineBeginWith
                              + ' FIXME FIXME FIXME\n')
                 stream.write(self.getIndent()
                              + self.commentLineBeginWith
                              + " don't know how to deserialize native field 
<%s> of type <%s>\n"
                               % (field.name, field.typeid.name))
-        else:
               # field has one Deserialize Method Name found in the map
-            if methodName == 'read_string':
-                stream.write(methodName + '(msgBuffer,'
-                             + field.name + indexField + ');\n')
             else:
-
+            if methodName == 'MB_read_string':
+                stream.write(methodName + '(msgBuffer,cthis->'
+                             + field.name + indexField + 
',MAX_CSTRINGSIZE);\n')
+            else:
                 # We may have to vast in order to enforce conversion
-
                 if isinstance(field.typeid, GenMsgAST.NativeType):
                     stream.write('cthis->'+field.name + indexField
                                  + ' = static_cast<'
                                  + field.typeid.name + '>('
                                  + methodName + '(msgBuffer));\n')
                 else:
-                    stream.write('cthis->'+field.name + indexField
-                                 + ' = ' + methodName
-                                 + '(msgBuffer);\n')
+                    stream.write(methodName
+                                 + '(msgBuffer,&(cthis->'+field.name + 
indexField+'));\n')
 
         if field.qualifier == 'optional':
             self.unIndent()
@@ -930,12 +919,13 @@
                 stream.write(self.getIndent() + "assert(nb>0);\n")
                 stream.write(self.getIndent() + 'newObj = 
malloc(nb*sizeof(%s_t));\n' % (self.nameprefix+msg.name))
                 stream.write(self.getIndent() + "assert(newObj!=NULL);\n")
+                
                 if msg.hasMerge():
                     stream.write(self.getIndent()+
                                  'for (%s i=0;i<nb;++i) {\n' % 
self.getTargetTypeName("uint32"))
                     self.indent()
                     stream.write(self.getIndent()+
-                                 'newObj[i].super = %s_create(1)\n' % 
(self.nameprefix+msg.merge.name))
+                                 'newObj[i].super = %s_create(1);\n' % 
(self.nameprefix+msg.merge.name))
                     # Assign my name (we can use constant string here)
                     stream.write(self.getIndent()
                                  + 'newObj[i].super->messageName = "%s"; \n' % 
msg.name)
@@ -945,7 +935,7 @@
                                 self.replacePrefix[1], 1) + ';\n')
                     else:
                         stream.write(self.getIndent() + 'newObj[i].super->type 
= '
-                                + msg.name.upper() + ';\n')
+                                + self.nameprefix + 
self.AST.shortenName("MessageType")+ '_' + msg.name.upper() + ';\n')
                     self.unIndent()
                     stream.write(self.getIndent()+"}\n")
 
@@ -981,8 +971,8 @@
                     self.indent()
                     if msg.hasMerge():
                         self.writeCommentLines(stream,"Call mother class")
-                        stream.write(self.getIndent()
-                                + 'Super_serialize(msgBuffer);\n')
+                        self.writeCommentLines(stream,"FIXME TBD")
+                        #stream.write(self.getIndent()+ 
'Super_serialize(msgBuffer);\n')
                     self.writeCommentLines(stream,"Specific serialization 
code")
                     self.applyToFields(stream, msg.fields,
                             self.writeSerializeFieldStatement)
@@ -1000,8 +990,8 @@
                     self.indent()
                     if msg.hasMerge():
                         self.writeCommentLines(stream,"Call mother class")
-                        stream.write(self.getIndent()
-                                + 'Super_deserialize(msgBuffer);\n')
+                        self.writeCommentLines(stream,"FIXME TBD")
+                        #stream.write(self.getIndent()+ 
'Super_deserialize(msgBuffer);\n')
                     self.writeCommentLines(stream,"Specific deserialization 
code")
                     self.applyToFields(stream, msg.fields,
                             self.writeDeSerializeFieldStatement)
@@ -1033,11 +1023,11 @@
                                  % msg.name)
                     if msg.hasMerge():
                         self.writeCommentLines(stream,"Call mother class")
-                        stream.write(self.getIndent()
-                                + 'Super_show(out);\n')
+                        self.writeCommentLines(stream,"FIXME TBD")
+                        #stream.write(self.getIndent()+ 'Super_show(out);\n')
                     self.writeCommentLines(stream,"Specific show code")
-                    self.applyToFields(stream, msg.fields,
-                            self.writeShowFieldStatement)
+                    # FIXME this needs a rewrite
+                    #self.applyToFields(stream, 
msg.fields,self.writeShowFieldStatement)
                     stream.write(self.getIndent()
                                  + 'fprintf(out,"[%s -End] \\n");\n'
                                  % msg.name)

Index: GenMsgAST.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgAST.py,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- GenMsgAST.py        19 Jul 2011 20:21:21 -0000      1.22
+++ GenMsgAST.py        29 Jul 2011 09:08:23 -0000      1.23
@@ -20,7 +20,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgAST.py,v 1.22 2011/07/19 20:21:21 erk Exp $
+## $Id: GenMsgAST.py,v 1.23 2011/07/29 09:08:23 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -1154,7 +1154,6 @@
             # kind of message.
             # However some message types may merge from one another
             # as soon as there is a "common" root merge type
-
             if msg.hasMerge():
                 parent = AST.getType(msg.merge)
                 parent.nbHeir += 1
@@ -1177,6 +1176,12 @@
             if not self.checkMessageFields(msg, AST):
                 return
 
+        # only add merger type in the enumeration if the
+        # type is not native
+        if (not isinstance(lastMerge, NativeType)):
+            enumval = EnumType.EnumValue(lastMerge.name.upper(), None)
+            enumval.type = lastMerge.name
+            msgTypeEnumVals.append(enumval)
         enumval = EnumType.EnumValue('LAST', None)
         enumval.type = None
         msgTypeEnumVals.append(enumval)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]