[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [certi-cvs] certi/scripts GenerateMessages.py TestMessageSp...,
certi-cvs <=