Parcourir la source

python 3 fixes for dictionary items. Check was done clean with sys.version_info

Holger Jeromin il y a 9 ans
Parent
commit
8a4bb92d2b
1 fichiers modifiés avec 33 ajouts et 7 suppressions
  1. 33 7
      tools/generate_datatypes.py

+ 33 - 7
tools/generate_datatypes.py

@@ -156,8 +156,12 @@ class EnumerationType(object):
         return True
 
     def typedef_c(self):
+        if sys.version_info[0] < 3:
+            values = self.elements.iteritems()
+        else:
+            values = self.elements.items()
         return "typedef enum { \n    " + \
-            ",\n    ".join(map(lambda kv : kv[0].upper() + " = " + kv[1], self.elements.iteritems())) + \
+            ",\n    ".join(map(lambda kv : kv[0].upper() + " = " + kv[1], values)) + \
             "\n} " + self.name + ";"
 
     def typelayout_c(self, namespace_0, description, outname):
@@ -253,7 +257,11 @@ class StructType(object):
         if len(self.members) == 0:
             return "typedef void * " + self.name + ";"
         returnstr =  "typedef struct {\n"
-        for name, member in self.members.iteritems():
+        if sys.version_info[0] < 3:
+            values = self.members.iteritems()
+        else:
+            values = self.members.items()
+        for name, member in values:
             if member.isArray:
                 returnstr += "    UA_Int32 " + name + "Size;\n"
                 returnstr += "    " + member.memberType.name + " *" +name + ";\n"
@@ -287,7 +295,10 @@ class StructType(object):
                 before_endpos = "0"
                 thispos = "offsetof(%s, %s)" % (self.name, member.name)
                 if index > 0:
-                    before = self.members.values()[index-1]
+                    if sys.version_info[0] < 3:
+                        before = self.members.values()[index-1]
+                    else:
+                        before = list(self.members.values())[index-1]
                     before_endpos = "(offsetof(%s, %s)" % (self.name, before.name)
                     if before.isArray:
                         before_endpos += " + sizeof(void*))"
@@ -439,10 +450,16 @@ existing_types = OrderedDict()
 if args.namespace_id == 0 or args.ns0_types_xml:
     existing_types = OrderedDict([(t, BuiltinType(t)) for t in builtin_types])
 if args.ns0_types_xml:
-    OrderedDict(existing_types.items() + parseTypeDefinitions(args.ns0_types_xml[0], existing_types).items())
+    if sys.version_info[0] < 3:
+        OrderedDict(existing_types.items() + parseTypeDefinitions(args.ns0_types_xml[0], existing_types).items())
+    else:
+        OrderedDict(existing_types.items() | parseTypeDefinitions(args.ns0_types_xml[0], existing_types).items())
 types = parseTypeDefinitions(args.types_xml, existing_types)
 if args.namespace_id == 0:
-    types = OrderedDict(existing_types.items() + types.items())
+    if sys.version_info[0] < 3:
+        types = OrderedDict(existing_types.items() + types.items())
+    else:
+        types = OrderedDict(existing_types.items() | types.items())
 
 typedescriptions = {}
 if args.typedescriptions:
@@ -488,7 +505,12 @@ printh("#define " + outname.upper() + "_COUNT %s\n" % (str(len(types))))
 printh("extern UA_EXPORT const UA_DataType *" + outname.upper() + ";\n")
 
 i = 0
-for t in types.itervalues():
+if sys.version_info[0] < 3:
+    values = types.itervalues()
+else:
+    values = types.values()
+
+for t in values:
     if type(t) != BuiltinType:
         printh("")
         if t.description != "":
@@ -518,7 +540,11 @@ printc('''/**
 #include "ua_types.h"
 #include "''' + outname + '''_generated.h"\n
 const UA_DataType *''' + outname.upper() + ''' = (UA_DataType[]){''')
-for t in types.itervalues():
+if sys.version_info[0] < 3:
+    values = types.itervalues()
+else:
+    values = types.values()
+for t in values:
     printc("")
     printc("/* " + t.name + " */")
     if args.typedescriptions: