certi-cvs
[Top][All Lists]
Advanced

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

[certi-cvs] certi/scripts GenerateMessages.py TestMessageSp...


From: certi-cvs
Subject: [certi-cvs] certi/scripts GenerateMessages.py TestMessageSp...
Date: Sun, 06 Sep 2009 13:25:13 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      09/09/06 13:25:13

Modified files:
        scripts        : GenerateMessages.py TestMessageSpec.msg 
                         CERTI_NetworkMessage.msg 

Log message:
        Now I do properly handle native language specifics
        for native type usage.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/TestMessageSpec.msg?cvsroot=certi&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/CERTI_NetworkMessage.msg?cvsroot=certi&r1=1.4&r2=1.5

Patches:
Index: GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- GenerateMessages.py 6 Sep 2009 10:02:02 -0000       1.18
+++ GenerateMessages.py 6 Sep 2009 13:25:13 -0000       1.19
@@ -19,7 +19,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenerateMessages.py,v 1.18 2009/09/06 10:02:02 erk Exp $
+## $Id: GenerateMessages.py,v 1.19 2009/09/06 13:25:13 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -102,6 +102,7 @@
    'factoryCreator' : 'FACTORY_CREATOR',
    'factoryReceiver': 'FACTORY_RECEIVER',   
    'native'   : 'NATIVE',            
+   'language' : 'LANGUAGE',            
    'message'  : 'MESSAGE',
    'merge'    : 'MERGE',
    'enum'     : 'ENUM',
@@ -139,6 +140,7 @@
           'COLON',
           'PERIOD',
           'NEWLINE',
+          'LANGLINE',
           ] + list(reserved.values())
 
 # This is a message of field or name identifier          
@@ -200,6 +202,10 @@
     r'\n'
     t.lexer.lineno += 1
     
+def t_LANGLINE(t):
+    r'\[.*\]'
+    return t
+    
 # A string containing ignored characters (spaces and tabs)
 t_ignore  = ' \t'
 
@@ -498,15 +504,31 @@
     """ 
     Represents a native message type.
     
-    A C{NaptiveMessageType} is a simple C{ASTElement} whose
+    A C{NaptiveType} is a simple C{ASTElement} whose
     name is the name the native type.
     """
-    def __init__(self,name):
+    def __init__(self,name,languages):
         super(NativeType,self).__init__(name=name)        
+        # store language line list in a dictionnary
+        # in order to ease retrieval
+        self.languages = dict()
+        for l in languages:
+            self.languages[l.name] = l        
         
     def __repr__(self):
         return "native %s" % self.name 
                     
+    def getLanguage(self,language):
+        if language in self.languages.keys():
+            return self.languages[language]
+     
+    class LanguageLine(ASTElement):
+        """ Represents a Language Line Value
+        """
+        def __init__(self,name,value):
+            super(NativeType.LanguageLine,self).__init__(name=name)    
+            self.statement = value.strip("[]")                
+                    
 class MessageType(ASTElement):
     """ 
     Represents a message type.
@@ -636,9 +658,29 @@
     p[0].linespan = (p.linespan(1)[0],p.linespan(len(p)-1)[1]) 
     
 def p_native(p): 
-    'native : NATIVE ID'
-    p[0]=NativeType(p[2])    
-    p[0].linespan = p.linespan(1)
+    'native : NATIVE ID LBRACE language_list RBRACE'
+    # we should reverse the language list
+    # because the parse build it the other way around (recursive way)
+    p[4].reverse()
+    p[0]=NativeType(p[2],p[4])    
+    p[0].linespan = (p.linespan(1)[0],p.linespan(5)[1])
+    
+def p_language_list(p):
+    '''language_list : language_line eol_comment
+                     | language_line eol_comment language_list'''
+    # Create or append the list (of pair)
+    if len(p)==3:
+        p[1].comment = p[2]
+        p[0]=[p[1]]    
+    else:
+        p[1].comment = p[2]
+        p[3].append(p[1])
+        p[0]=p[3]
+
+def p_language_line(p):
+    '''language_line : LANGUAGE ID LANGLINE'''
+    p[0]=NativeType.LanguageLine(p[2],p[3])
+    
         
 def p_enum(p):
     'enum : ENUM ID LBRACE enum_value_list RBRACE'
@@ -701,7 +743,7 @@
 
 def p_field_spec(p):
     '''field_spec : qualifier typeid ID eol_comment
-                  | qualifier typeid ID LBRACKET DEFAULT EQUAL value RBRACKET 
eol_comment'''
+                  | qualifier typeid ID LBRACE DEFAULT EQUAL value RBRACE 
eol_comment'''
     
     if len(p)==5:
         p[0] = MessageType.MessageField(p[1],p[2],p[3],None)
@@ -1013,6 +1055,8 @@
         self.logger = logging.Logger("CXXGenerator")
         self.logger.setLevel(logging.ERROR)
         self.logger.addHandler(stdoutHandler)
+        self.included = dict()
+        self.typedefed = dict()
         self.builtinTypeMap = {'onoff'    : 'bool',
                                'bool'     : 'bool',
                                'string'   : 'std::string',
@@ -1110,9 +1154,21 @@
         headerProtectMacroName = "%s_HH" % headerProtectMacroName.upper()
         stream.write("#ifndef %s\n"%headerProtectMacroName)
         stream.write("#define %s\n"%headerProtectMacroName)        
-        # add necessary standard includes
+        # add necessary standard and global includes
+        stream.write(self.commentLineBeginWith+" ****-**** Global System 
includes ****-****\n")
         stream.write("#include <vector>\n")
+        self.included["#include <vector>"]=1
         stream.write("#include <string>\n")
+        self.included["#include <string>"]=1
+        # add include coming from native type specification 
+        stream.write(self.commentLineBeginWith+" ****-**** Includes coming 
from native types ****-****\n")
+        for native in self.AST.natives:
+            line = native.getLanguage("CXX").statement
+            # we are only interested in native "include" statement
+            if line.find("#include")>=0 and (not line in self.included.keys()):
+                self.writeComment(stream, native)
+                stream.write(line+"\n")
+                self.included[line]=1
         # Generate namespace for specified package package 
         # we may have nested namespace
         self.openNamespaces(stream)
@@ -1120,11 +1176,15 @@
         if not factoryOnly:
             # Native type should be defined in included header
             stream.write(self.getIndent()+self.commentLineBeginWith)
-            stream.write("Native types should be defined by included 
headers\n")
+            stream.write("Native types has been defined by included headers 
(or here with typedef)\n")
             for native in self.AST.natives:                        
+                line = native.getLanguage("CXX").statement
+                # we are only interested in native statement
+                # which are not #include
+                if line.find("typedef")>=0 and (not line in 
self.typedefed.keys()):
                 self.writeComment(stream, native)
-                stream.write(self.getIndent()+self.commentLineBeginWith)
-                stream.write("native %s\n" % native.name)
+                    stream.write(self.getIndent()+line+"\n")
+                    self.typedefed[line]=1                                    
             
             # Generate enum
             for enum in self.AST.enums:            
@@ -1280,7 +1340,7 @@
                 # if we have some specific field
                 if len(msg.fields)>0:
                     # begin serialize method 
-                    stream.write(self.getIndent()+"void 
serialize(MessageBuffer& msgBuffer) {\n")
+                    stream.write(self.getIndent()+"void 
%s::serialize(MessageBuffer& msgBuffer) {\n" % msg.name)
                     self.indent()
                     stream.write(self.getIndent()+self.commentLineBeginWith)
                     stream.write("Call mother class\n")
@@ -1294,7 +1354,7 @@
                     # end serialize method
                     
                     # begin deserialize method
-                    stream.write(self.getIndent()+"void 
deserialize(MessageBuffer& msgBuffer) {\n")
+                    stream.write(self.getIndent()+"void 
%s::deserialize(MessageBuffer& msgBuffer) {\n" % msg.name)
                     self.indent()
                     stream.write(self.getIndent()+self.commentLineBeginWith)
                     stream.write("Call mother class\n")

Index: TestMessageSpec.msg
===================================================================
RCS file: /sources/certi/certi/scripts/TestMessageSpec.msg,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- TestMessageSpec.msg 15 Jul 2009 17:12:02 -0000      1.6
+++ TestMessageSpec.msg 6 Sep 2009 13:25:13 -0000       1.7
@@ -18,11 +18,17 @@
 message MyMessage {} 
 
 // blah
-native ANativeType 
+native ANativeType {
+    language CXX [typedef int ANativeType]
+}
 
-native AnotherNativeType 
+native AnotherNativeType {
+     language CXX [#include "AnotherNativeType.hh"]
+}
 
-native MessageType
+native MessageType {
+     language CXX []
+}
 
 message MyMessage2 { 
     repeated int32 whatever
@@ -31,5 +37,5 @@
 message MyOtherMessage : merge MyMessage {
     required bool              constrained  // constrain 
        optional MessageType       mytype
-       required uint32            a [ default=1 ]
+       required uint32            a { default=1 }
 }
\ No newline at end of file

Index: CERTI_NetworkMessage.msg
===================================================================
RCS file: /sources/certi/certi/scripts/CERTI_NetworkMessage.msg,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- CERTI_NetworkMessage.msg    6 Sep 2009 10:02:02 -0000       1.4
+++ CERTI_NetworkMessage.msg    6 Sep 2009 13:25:13 -0000       1.5
@@ -25,32 +25,39 @@
 package certi
 
 // Basic Message is the base class message for CERTI
-native BasicMessage
-//native BasicMessage {
-//    language C++    [#include BasicMessage.hh]
-//    language Python [import certi.BasicMessage]
-//    language Java   [import certi.BasicMessage]
-//}
+native BasicMessage {
+    language CXX    [#include "BasicMessage.hh"]
+    language Python [import certi.BasicMessage]
+    language Java   [import certi.BasicMessage]
+}
 
 // Network message is the base class
 // for message exchanged between RTIA and RTIG
 // AKA CERTI Network Message
-native NetworkMessage
-native NM_Type
+native NetworkMessage {
+    language CXX [#include "NetworkMessage.hh"]
+}
+native NM_Type {
+    language CXX [typedef NetworkMessage::Type NM_Type]
+}
 
 // Message is the base class 
 // for message exchanged between Federate and RTIA
 // AKA CERTI Message
-native Message
+native Message {
+    language CXX [#include "Message.hh"]
+}
 
-native AttributeHandle
+native AttributeHandle {
+    language CXX [#include "certi.hh"]
+}
 
 message NM_WithHandleArray : merge  NetworkMessage {
        repeated AttributeHandle handle 
 }
 
 message NM_DDM_Base : merge  NM_WithHandleArray {
-       required bool DDM_bool [ default=false ]
+       required bool DDM_bool { default=false }
 }
 
 message NM_Close_Connexion : merge NetworkMessage {}
@@ -77,7 +84,10 @@
 
 message NM_Time_Constrained_Enabled : merge NetworkMessage {}
 
-native ObjectClassHandle
+native ObjectClassHandle {
+       language CXX [#include "certi.hh"]
+}
+
 message NM_Start_Registration_For_Object_Class : merge NetworkMessage {
        required ObjectClassHandle objectClass
 }
@@ -149,7 +159,10 @@
 
 message NM_Unpublish_Object_Class : merge NetworkMessage {}
 
-native InteractionClassHandle
+native InteractionClassHandle {
+       language CXX [#include "certi.hh"]
+}
+
 message NM_Publish_Interaction_Class : merge NetworkMessage {
        required InteractionClassHandle interactionClass // the interaction 
class
 }
@@ -194,7 +207,10 @@
 
 message NM_Request_Class_Attribute_Value_Update : merge NetworkMessage {}
 
-native ObjectHandle
+native ObjectHandle {
+       language CXX [#include "certi.hh"]
+}
+
 message NM_Request_Object_Attribute_Value_Update : merge NM_WithHandleArray {
        required ObjectHandle object
 }
@@ -233,7 +249,10 @@
 
 message NM_Confirm_Attribute_Ownership_Acquisition_Cancellation : merge 
NM_Request_Object_Attribute_Value_Update {}
 
-native SpaceHandle
+native SpaceHandle {
+       language CXX [#include "certi.hh"]
+}
+
 message NM_DDM_Create_Region : merge NM_DDM_Base {
        required SpaceHandle space
        required int32 region




reply via email to

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