certi-cvs
[Top][All Lists]
Advanced

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

[certi-cvs] certi/scripts GenMsgC.py


From: CERTI CVS commits
Subject: [certi-cvs] certi/scripts GenMsgC.py
Date: Fri, 15 Jul 2011 13:37:54 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      11/07/15 13:37:54

Modified files:
        scripts        : GenMsgC.py 

Log message:
        C Message generator backend update

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenMsgC.py?cvsroot=certi&r1=1.1&r2=1.2

Patches:
Index: GenMsgC.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenMsgC.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- GenMsgC.py  13 Jul 2011 15:43:17 -0000      1.1
+++ GenMsgC.py  15 Jul 2011 13:37:54 -0000      1.2
@@ -20,12 +20,12 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenMsgC.py,v 1.1 2011/07/13 15:43:17 erk Exp $
+## $Id: GenMsgC.py,v 1.2 2011/07/15 13:37:54 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
 The CERTI Message Generator.
-C++ Backend Generator
+C Backend Generator
 """
 
 import logging
@@ -68,36 +68,36 @@
             'double': 'double',
             }
         self.serializeTypeMap = {
-            'onoff': 'write_bool',
-            'bool': 'write_bool',
-            'string': 'write_string',
-            'byte': 'write_byte',
-            'int8': 'write_int8',
-            'uint8': 'write_uint8',
-            'int16': 'write_int16',
-            'uint16': 'write_uint16',
-            'int32': 'write_int32',
-            'uint32': 'write_uint32',
-            'int64': 'write_int64',
-            'uint64': 'write_uint64',
-            'float': 'write_float',
-            'double': 'write_double',
+            'onoff': 'MB_write_bool',
+            'bool': 'MB_write_bool',
+            'string': 'MB_write_string',
+            'byte': 'MB_write_byte',
+            'int8': 'MB_write_int8',
+            'uint8': 'MB_write_uint8',
+            'int16': 'MB_write_int16',
+            'uint16': 'MB_write_uint16',
+            'int32': 'MB_write_int32',
+            'uint32': 'MB_write_uint32',
+            'int64': 'MB_write_int64',
+            'uint64': 'MB_write_uint64',
+            'float': 'MB_write_float',
+            'double': 'MB_write_double',
             }
         self.deserializeTypeMap = {
-            'onoff': 'read_bool',
-            'bool': 'read_bool',
-            'string': 'read_string',
-            'byte': 'read_byte',
-            'int8': 'read_int8',
-            'uint8': 'read_uint8',
-            'int16': 'read_int16',
-            'uint16': 'read_uint16',
-            'int32': 'read_int32',
-            'uint32': 'read_uint32',
-            'int64': 'read_int64',
-            'uint64': 'read_uint64',
-            'float': 'read_float',
-            'double': 'read_double',
+            'onoff': 'MB_read_bool',
+            'bool': 'MB_read_bool',
+            'string': 'MB_read_string',
+            'byte': 'MB_read_byte',
+            'int8': 'MB_read_int8',
+            'uint8': 'MB_read_uint8',
+            'int16': 'MB_read_int16',
+            'uint16': 'MB_read_uint16',
+            'int32': 'MB_read_int32',
+            'uint32': 'MB_read_uint32',
+            'int64': 'MB_read_int64',
+            'uint64': 'MB_read_uint64',
+            'float': 'MB_read_float',
+            'double': 'MB_read_double',
             }
         self.__languageName = 'C'
         self.replacePrefix = None
@@ -113,42 +113,14 @@
             t = self.AST.getType(name)
         if isinstance(t, GenMsgAST.EnumType):
             prefix = self.AST.name.split('.')[0] + '_'
-            return prefix + name
+            return prefix + name + "_t"
         else:
-            return name
-
-    def getRepresentationFor(self, name):
-        for native in self.AST.natives:
-            if name == native.name:
-                representation = native.getRepresentation()
-                if representation:
-                    return representation
-        return None
-
-    def getSerializeMethodName(self, name):
-        if name in self.serializeTypeMap.keys():
-            return self.serializeTypeMap[name]
-        else:
-            representation = self.getRepresentationFor(name)
-            if representation:
-                return self.getSerializeMethodName(representation)
-        return None
-
-    def getDeSerializeMethodName(self, name):
-        if name in self.deserializeTypeMap.keys():
-            return self.deserializeTypeMap[name]
-        else:
-            representation = self.getRepresentationFor(name)
-            if representation:
-                return self.getDeSerializeMethodName(representation)
-        return None
+            return name + "_t"
 
     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() + self.commentLineBeginWith + 
'''package %s 
@@ -183,7 +155,7 @@
                 stream.write(' {return cthis.' + field.name + 'size;}\n')
                 stream.write(self.getIndent())
                 stream.write('void ' + msg.name + '_set' + 
self.upperFirst(field.name)
-                             + 'Size(%s* cthis,uint32_t num) {\n' % msg.name)
+                             + 'Size(%s_t* cthis,uint32_t num) {\n' % msg.name)
                self.indent()
                 stream.write(self.getIndent() + field.typeid.name + '* 
temp;\n')
                 stream.write(self.getIndent() + 'temp = calloc(num,sizeof(' + 
field.typeid.name + '));\n')
@@ -202,13 +174,13 @@
                 stream.write(' {return cthis.' + field.name + ';}\n')
 
                 stream.write(self.getIndent())
-                stream.write('void ' + msg.name + '_' + field.name + 'On(%s* 
cthis, uint32_t rank)'
+                stream.write('void ' + msg.name + '_' + field.name + 'On(%s_t* 
cthis, uint32_t rank)'
                            % msg.name)
                 stream.write(' {\n' + self.getIndent() + 
'assert(rank<cthis->'+ field.name +'size);\n')
                 stream.write(self.getIndent() + 'cthis->' + field.name + 
'[rank] = 1;}\n')
 
                 stream.write(self.getIndent())
-                stream.write('void ' + msg.name + '_' + field.name + 'Off(%s* 
cthis, uint32_t rank)'
+                stream.write('void ' + msg.name + '_' + field.name + 
'Off(%s_t* cthis, uint32_t rank)'
                            % msg.name)
                         
                 stream.write(' {\n' + self.getIndent() + 
'assert(rank<cthis->'+ field.name +'size);\n')
@@ -221,12 +193,12 @@
                 stream.write(' {return cthis.' + field.name + '[rank];}\n')
             else:
                 stream.write(self.getIndent())
-                stream.write('void ' + msg.name + '_' + field.name + 'On(%s* 
cthis)'
+                stream.write('void ' + msg.name + '_' + field.name + 'On(%s_t* 
cthis)'
                            % msg.name)
                 stream.write(' {cthis->' + field.name + ' = 1;}\n')
 
                 stream.write(self.getIndent())
-                stream.write('void ' + msg.name + '_' + field.name + 'Off(%s* 
cthis)'
+                stream.write('void ' + msg.name + '_' + field.name + 
'Off(%s_t* cthis)'
                            % (msg.name, msg.name,msg.name))
                 stream.write(' {cthis->' +field.name + ' = 0;}\n')
 
@@ -241,13 +213,13 @@
                 stream.write(self.getIndent())
                 stream.write('uint32_t ' + msg.name + '_get'
                              + self.upperFirst(field.name)
-                             + 'Size(%s cthis) '
+                             + 'Size(%s_t cthis) '
                             % msg.name)
                 stream.write('{ return cthis.' + field.name + 'size;}\n')
 
                 stream.write(self.getIndent())
                 stream.write('void ' + msg.name + '_set' + 
self.upperFirst(field.name)
-                             + 'Size(%s* cthis, uint32_t num) { \n'
+                             + 'Size(%s_t* cthis, uint32_t num) { \n'
                              % msg.name)
                self.indent()
                 stream.write(self.getIndent() + field.typeid.name + '* 
temp;\n')
@@ -261,22 +233,15 @@
                 stream.write(self.getIndent() + '}\n')
 
                 stream.write(self.getIndent())
-                #stream.write('const ' + targetTypeName
-                #             + '* ' + msg.name + '_get' + 
self.upperFirst(field.name)
-                #             + '(' + msg.name + ' cthis) ')
-                #stream.write(' {return cthis.' + field.name + ';}\n')
-
-
-                stream.write(self.getIndent())
                 stream.write(targetTypeName + ' ' + msg.name + '_get'
                              + self.upperFirst(field.name)
-                             + '(%s* cthis, uint32_t rank)'
+                             + '(%s_t* cthis, uint32_t rank)'
                            % msg.name)
                 stream.write(' {return cthis->' + field.name + '[rank];}\n')
 
                 stream.write(self.getIndent())
                 stream.write('void ' + msg.name + '_set' + 
self.upperFirst(field.name)
-                             + '(%s* cthis, '
+                             + '(%s_t* cthis, '
                            % msg.name)
                 stream.write(targetTypeName + ' new'
                              + self.upperFirst(field.name)
@@ -286,13 +251,13 @@
             else:
                 stream.write(self.getIndent())
                 stream.write(targetTypeName + ' ' + msg.name + '_get'
-                             + self.upperFirst(field.name) + '(%s cthis) '
+                             + self.upperFirst(field.name) + '(%s_t cthis) '
                              % msg.name)
                 stream.write(' {return cthis.'  + field.name + ';}\n')
 
                 stream.write(self.getIndent())
                 stream.write('void ' + msg.name + '_set'+ 
self.upperFirst(field.name)
-                             + '(%s* cthis,  '
+                             + '(%s_t* cthis,  '
                             % msg.name)
                 stream.write(targetTypeName + ' new'
                              + self.upperFirst(field.name) + ') {')
@@ -312,7 +277,7 @@
                 if field.qualifier == 'optional':
                     stream.write(self.getIndent())
                     tmp = self.upperFirst(field.name)
-                    stream.write('uint8_t has%s(%s cthis) {return 
cthis._has%s;}\n'
+                    stream.write('uint8_t has%s(%s_t cthis) {return 
cthis._has%s;}\n'
                                  % (tmp,  msg.name,
                                  tmp))
 
@@ -364,7 +329,7 @@
 
         self.unIndent()
         stream.write(self.getIndent())
-        stream.write('} %s_%s; ' % (self.AST.name.split('.'
+        stream.write('} %s_%s_t; ' % (self.AST.name.split('.'
                          )[0], enum.name))
         stream.write(self.commentLineBeginWith + 'end of enum %s \n'
                      % enum.name)
@@ -372,7 +337,6 @@
     def generateHeader(self, stream, factoryOnly=False):
 
         # write the usual header protecting MACRO
-
         supposedHeaderName = stream.name
         if supposedHeaderName != '<stdout>':
             supposedHeaderName = os.path.basename(supposedHeaderName)
@@ -410,9 +374,7 @@
         for native in self.AST.natives:
             if native.hasLanguage('C'):
                 for line in native.getLanguageLines('C'):
-
                     # we are only interested in native "include" statement
-
                     stmt = line.statement
                     if stmt.find('#include') >= 0 and not stmt \
                         in self.included.keys():
@@ -426,9 +388,7 @@
         self.openNamespaces(stream)
 
         if not factoryOnly:
-
             # Native type should be defined in included header
-
             stream.write(self.getIndent() + self.commentLineBeginWith)
             stream.write(' Native types has been defined:\n')
             stream.write(self.getIndent() + self.commentLineBeginWith)
@@ -439,10 +399,8 @@
                 if native.hasLanguage('C'):
                     for line in native.getLanguageLines('C'):
                         stmt = line.statement
-
                        # we are only interested in native statement
                        # which are not #include
-
                         if stmt.find('typedef') >= 0 and not stmt \
                             in self.typedefed.keys():
                             self.writeComment(stream, native)
@@ -450,14 +408,12 @@
                             self.typedefed[stmt] = 1
 
             # Put enum in a namespace in order to avoid conflict
-           
             stream.write(self.getIndent() + 
                        self.commentLineBeginWith +
                                '%s package equivalent in C\n'
                              % (self.AST.name.split('.')[0]))
 
             # Generate version
-
             if self.AST.hasVersion():
                 (major, minor) = self.AST.version.number
                 stream.write(self.getIndent())
@@ -468,7 +424,6 @@
                               % (self.AST.name.split('.')[0], minor))
 
             # Generate enum
-
             lastname = ''
             for enum in self.AST.enums:
                 self.generateEnum(stream, enum)
@@ -478,7 +433,6 @@
 
 
             # Generate message type
-
             for msg in self.AST.messages:
                 self.writeComment(stream, msg)
 
@@ -489,27 +443,16 @@
 
                 stream.write('typedef struct %s %s' % (self.exportPrefix,
                              msg.name))
-                if msg.hasMerge():
-                   stream.write('{\n')
-                    virtual = ''
-                elif msg.hasHeir():
-                    stream.write(' {\n')
-                    virtual = ''
-                else:
                     stream.write(' {\n')
                     virtual = ''
-
                 self.indent()
 
-
                 if msg.hasMerge():
                     stream.write(self.getIndent()
                                  + '%s super;\n'
                                  % msg.merge.name)
 
-
                 # write fields
-
                 for field in msg.fields:
                     if isinstance(field,
                                   GenMsgAST.MessageType.CombinedField):
@@ -521,29 +464,24 @@
                                 field)
 
                self.unIndent()
-               stream.write(self.getIndent() + '} %s; \n\n' % msg.name)
+                stream.write(self.getIndent() + '} %s_t; \n\n' % msg.name)
 
                 # now write constructor/destructor
-
                 stream.write(self.getIndent() + 'void %s_create();\n' % 
msg.name)
                 stream.write(self.getIndent() + 'void %s_destroy();\n\n' % 
msg.name)
 
                 # write virtual serialize and deserialize
                 # if we have some specific field
-
                 if len(msg.fields) > 0:
-
                     # serialize/deserialize
-
                     stream.write(self.getIndent() + virtual
-                                 + 'void %s_serialize(%s* cthis, %s* 
msgBuffer);\n'
+                                 + 'void %s_serialize(%s_t* cthis, %s* 
msgBuffer);\n'
                                  % (msg.name, msg.name, 
self.serializeBufferType))
                     stream.write(self.getIndent() + virtual
-                                 + 'void %s_deserialize(%s* cthis, %s* 
msgBuffer);\n'
+                                 + 'void %s_deserialize(%s_t* cthis, %s* 
msgBuffer);\n'
                                  % (msg.name, msg.name, 
self.serializeBufferType))
 
                     # specific getter/setter
-
                     stream.write(self.getIndent()
                                  + self.commentLineBeginWith
                                  + ' specific Getter(s)/Setter(s)\n')
@@ -554,7 +492,7 @@
                                 self.writeOneGetterSetter(stream,
                                         cfield,msg)
                         else:
-                            self.writeOneGetterSetter(stream, field,msg)
+                            self.writeOneGetterSetter(stream,field,msg)
 
                     # the show method
 
@@ -564,64 +502,32 @@
                     stream.write(self.getIndent() + virtual
                                  + 'FILE* show(FILE* out);\n'
                                  )
-
                 # end public:
 
 
         # Generate Factory (if any)
         # @todo
-
         if self.AST.hasFactory():
             self.writeComment(stream, self.AST.factory)
             stream.write(self.getIndent() + '/*\n')
-            stream.write(self.getIndent() + 'typedef struct %s %s {\n'
-                         % (self.exportPrefix, self.AST.factory.name))
-            self.indent()
-
-            # begin public
-
-            stream.write(self.getIndent() + 'public:\n')
-            self.indent()
 
-            stream.write(self.getIndent()
-                         + 'static %s* %s(%s type) throw ('
-                         % self.AST.factory.creator)
-            stream.write('%s' % self.exception[0])
-            for exception in self.exception[1:]:
-                stream.write(' ,%s' % exception)
-            stream.write('); \n')
+            if self.AST.factory.hasFactoryCreator:
+                ccreator = (self.AST.factory.creator[0],
+                            
self.AST.factory.name+"_"+self.AST.factory.creator[1],
+                            self.AST.factory.creator[2])
+                stream.write(self.getIndent()
+                             + '%s* %s(%s type)'
+                             % ccreator)
+                stream.write('; \n')
 
             if self.AST.factory.hasFactoryReceiver():
-                stream.write(self.getIndent()
-                             + 'static %s* %s(%s stream) throw ('
-                             % self.AST.factory.receiver)
-                stream.write('%s' % self.exception[0])
-                for exception in self.exception[1:]:
-                    stream.write(' ,%s' % exception)
-                stream.write('); \n')
-
-            self.unIndent()
-
-            # end public
-            # begin protected
-
-            stream.write(self.getIndent() + 'protected:\n')
-            self.indent()
-            self.unIndent()
-
-            # end protected
-            # begin private
-
-            stream.write(self.getIndent() + 'private:\n')
-            self.indent()
-            self.unIndent()
-
-            # end private
-
-            self.unIndent()
-            stream.write(self.getIndent() + '''};
-
-''')
+                creceiver = (self.AST.factory.receiver[0],
+                            
self.AST.factory.name+"_"+self.AST.factory.receiver[1],
+                            self.AST.factory.receiver[2])
+                stream.write(self.getIndent()
+                             + '%s* %s(%s stream)'
+                             % creceiver)
+                stream.write('; \n')
            stream.write(self.getIndent() + '*/\n')
 
         # may close any open namespaces
@@ -689,7 +595,7 @@
             # enum type field case (enum are serialized as uint32)
 
                 methodName = self.getSerializeMethodName('uint32')
-                stream.write('MB_' + methodName)
+                stream.write(methodName)
                 stream.write('(msgBuffer' + field.name + indexField + ');\n')
             else:
 
@@ -705,7 +611,7 @@
 
               # field has one Serialize Method Name found in the map
 
-            stream.write('MB_' + methodName)
+            stream.write(methodName)
             stream.write('(msgBuffer,' + field.name + indexField + ');\n')
 
         if field.qualifier == 'optional':
@@ -725,7 +631,6 @@
             stream.write(self.getIndent())
             stream.write('fprintf(out,"    %s [] = \n");\n'
                          % field.name)
-            stream.write('fflush(out);\n')
             stream.write(self.getIndent())
             stream.write('for (uint32_t i = 0; i < get'
                          + self.upperFirst(field.name)
@@ -754,7 +659,6 @@
 
                 # stream.write(self.commentLineBeginWith+" FIXME FIXME FIXME 
inherited message\n")
             # native field case
-
                 stream.write('<< "')
                 stream.write(self.getIndent()
                              + self.commentLineBeginWith
@@ -762,9 +666,7 @@
                               % (field.name, field.typeid.name))
                 stream.write('"')
         else:
-
               # field has one Serialize Method Name found in the map
-
             stream.write('+ %s + " " ' % (field.name + indexField))
 
         if field.qualifier == 'optional':
@@ -775,10 +677,8 @@
             self.unIndent()
             stream.write(self.getIndent() + '}\n')
             stream.write(self.getIndent() + 'fprintf(out,"\\n");\n')
-            stream.write(self.getIndent() + 'fflush(out);\n')
         else:
             stream.write(self.getIndent() + ' + "\\n");\n')
-            stream.write(self.getIndent() + 'fflush(out);\n')
 
     def writeDeSerializeFieldStatement(self, stream, field):
         indexField = ''
@@ -823,7 +723,7 @@
                 # We should check if the uint32 value is in enum range before 
casting it into enumtype
 
                 stream.write(field.name + indexField + ' = static_cast<'
-                              + targetTypeName + '>(MB_'
+                              + targetTypeName + '>('
                              + methodName + ' ());\n')
             else:
 
@@ -840,7 +740,7 @@
               # field has one Deserialize Method Name found in the map
 
             if methodName == 'read_string':
-                stream.write('MB_' + methodName + '(msgBuffer,'
+                stream.write(methodName + '(msgBuffer,'
                              + field.name + indexField + ');\n')
             else:
 
@@ -849,11 +749,11 @@
                 if isinstance(field.typeid, GenMsgAST.NativeType):
                     stream.write(field.name + indexField
                                  + ' = static_cast<'
-                                 + field.typeid.name + '>(MB_'
+                                 + field.typeid.name + '>('
                                  + methodName + '(msgBuffer));\n')
                 else:
                     stream.write(field.name + indexField
-                                 + ' = MB_' + methodName
+                                 + ' = ' + methodName
                                  + '(msgBuffer);\n')
 
         if field.qualifier == 'optional':
@@ -977,10 +877,7 @@
         """
 
         # add necessary standard includes
-
-
         # [Try to] add corresponding header include
-
         supposedHeaderName = stream.name
         if supposedHeaderName != '<stdout>':
             supposedHeaderName = os.path.basename(supposedHeaderName)
@@ -989,17 +886,13 @@
 
         # Generate namespace for specified package package
         # we may have nested namespace
-
         self.openNamespaces(stream)
         if not factoryOnly:
 
             # Generate message type
-
             for msg in self.AST.messages:
-
                 # Generate Constructor
-
-                stream.write(self.getIndent() + '%s_create(%s* cthis) {\n'
+                stream.write(self.getIndent() + '%s_create(%s_t* cthis) {\n'
                              % (msg.name, msg.name))
                 self.indent()
                 if msg.hasMerge():
@@ -1023,7 +916,6 @@
                                 + msg.name.upper() + ';\n')
 
                 # Write init value if any was provided and alloc memory
-
                 if len(msg.fields) > 0:
                     self.applyToFields(stream, msg.fields,
                             self.writeInitFieldStatement)
@@ -1031,8 +923,7 @@
                 stream.write(self.getIndent() + '}\n')
 
                 # Generate Destructor
-
-                stream.write(self.getIndent() + 'void %s_destroy(%s* cthis) 
{\n'
+                stream.write(self.getIndent() + 'void %s_destroy(%s_t* cthis) 
{\n'
                              % (msg.name, msg.name))
                 self.indent()
                 stream.write(self.getIndent() + 'free(cthis);\n')
@@ -1043,9 +934,7 @@
                 # if we have some specific field
 
                 if len(msg.fields) > 0:
-
                     # begin serialize method
-
                     stream.write(self.getIndent()
                                  + 'void %s_serialize(%s* msgBuffer) {\n'
                                   % (msg.name,



reply via email to

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