Parcourir la source

Review: Added custom opaque type mappings (#2433)

* Added custom opaque type mappings via --opaque-map option parameter to generate_datatypes.py

* Removed unused import
Jojakim Stahl il y a 5 ans
Parent
commit
3fea4d8090
1 fichiers modifiés avec 20 ajouts et 1 suppressions
  1. 20 1
      tools/generate_datatypes.py

+ 20 - 1
tools/generate_datatypes.py

@@ -15,10 +15,12 @@ import xml.etree.ElementTree as etree
 import itertools
 import argparse
 import csv
-from nodeset_compiler.opaque_type_mapping import get_base_type_for_opaque
+import json
+from nodeset_compiler.opaque_type_mapping import get_base_type_for_opaque as get_base_type_for_opaque_ns0
 
 types = OrderedDict() # contains types that were already parsed
 typedescriptions = {} # contains type nodeids
+user_opaque_type_mapping = {} # contains user defined opaque type mapping
 
 excluded_types = ["NodeIdType", "InstanceNode", "TypeNode", "Node", "ObjectNode",
                   "ObjectTypeNode", "VariableNode", "VariableTypeNode", "ReferenceTypeNode",
@@ -71,6 +73,12 @@ def makeCLiteral(value):
 def makeCIdentifier(value):
     return re.sub(r'[^\w]', '', value)
 
+def get_base_type_for_opaque(name):
+    if name in user_opaque_type_mapping:
+        return user_opaque_type_mapping[name]
+    else:
+        return get_base_type_for_opaque_ns0(name)
+
 ################
 # Type Classes #
 ################
@@ -457,6 +465,14 @@ parser.add_argument('--no-builtin',
                     dest="no_builtin",
                     help='Do not generate builtin types')
 
+parser.add_argument('--opaque-map',
+                    metavar="<opaqueTypeMap>",
+                    type=argparse.FileType('r'),
+                    dest="opaque_map",
+                    action='append',
+                    default=[],
+                    help='JSON file with opaque type mapping: { \'typename\': { \'ns\': 0,  \'id\': 7, \'name\': \'UInt32\' }, ... }')
+
 parser.add_argument('-t', '--type-bsd',
                     metavar="<typeBsds>",
                     type=argparse.FileType('r'),
@@ -481,6 +497,9 @@ inname = ', '.join(list(map(lambda x:x.name.split("/")[-1], args.type_bsd)))
 for builtin in builtin_types:
     types[builtin] = BuiltinType(builtin)
 
+for f in args.opaque_map:
+    user_opaque_type_mapping.update(json.load(f))
+
 for f in args.type_bsd:
     parseTypeDefinitions(outname, f, args.namespace)