Added imports / exports support
authorRick van Rein <rick@openfortress.nl>
Thu, 10 Mar 2016 22:29:04 +0000 (22:29 +0000)
committerRick van Rein <rick@openfortress.nl>
Thu, 10 Mar 2016 22:29:04 +0000 (22:29 +0000)
asn1ate/asn2quickder.py
asn1ate/sema.py

index 5be3bc7..01123e7 100755 (executable)
@@ -112,11 +112,25 @@ class QuickDERgen ():
                #       ik.wout (' *   (no other modules)\n')
                # ik.wout (' */\n\n')
                closer = ''
-               for rm in ik.refmods:
-                       rmfn = toCsym (rm.rsplit ('.', 1) [0])
-                       ik.wout ('#include <quick-der/' + rmfn + '\n')
+               for rm in ik.semamod.imports.module2symbols.keys ():
+                       rmfn = toCsym (rm.rsplit ('.', 1) [0]).lower ()
+                       ik.wout ('#include <quick-der/' + rmfn + '.h>\n')
                        closer = '\n\n'
                ik.wout (closer)
+               closer = ''
+               for rm in ik.semamod.imports.module2symbols.keys ():
+                       rmfn = toCsym (rm.rsplit ('.', 1) [0]).lower ()
+                       for sym in ik.semamod.imports.module2symbols [rm]:
+                               ik.wout ('typedef DER_OVLY_' + toCsym (rmfn) + '_' + toCsym (sym) + ' DER_OVLY_' + toCsym (ik.unit) + '_' + toCsym (sym) + ';\n')
+                               closer = '\n\n'
+               ik.wout (closer)
+               closer = ''
+               for rm in ik.semamod.imports.module2symbols.keys ():
+                       rmfn = toCsym (rm.rsplit ('.', 1) [0]).lower ()
+                       for sym in ik.semamod.imports.module2symbols [rm]:
+                               ik.wout ('#define DER_PACK_' + toCsym (ik.unit) + '_' + toCsym (sym) + ' DER_PACK_' + toCsym (rmfn) + '_' + toCsym (sym) + '\n')
+                               closer = '\n\n'
+               ik.wout (closer)
 
        def generate_tail (ik):
                ik.wout ('\n\n/* asn2quickder output for ' + ik.semamod.name + ' ends here */\n')
index f011339..846b907 100644 (file)
@@ -270,6 +270,8 @@ class Module(SemaNode):
             self.tag_default = TagImplicity.EXPLICIT
 
         self.assignments = [_create_sema_node(token) for token in assignments.elements]
+       self.imports = _create_sema_node (imports)
+       self.exports = _create_sema_node (exports)
 
     def user_types(self):
         if not self._user_types:
@@ -719,6 +721,18 @@ class ValueListType(SemaNode):
     __repr__ = __str__
 
 
+class Imports(SemaNode):
+    def __init__(self,elements):
+       self.module2symbols = { }
+       for i in range (0,len(elements),2):
+               self.module2symbols [elements [i+1].elements[0]] = set (elements [i])
+       print 'Imported from', self.module2symbols.keys ()
+
+class Exports(Imports):
+    def __init__(self,elements):
+       Imports.__init__ (self, elements)
+
+
 class BitStringType(SemaNode):
     def __init__(self, elements):
         self.type_name = elements[0]
@@ -901,6 +915,10 @@ def _create_sema_node(token):
         return BinaryStringValue(token.elements)
     elif token.ty == 'HexStringValue':
         return HexStringValue(token.elements)
+    elif token.ty == 'Imports':
+       return Imports(token.elements)
+    elif token.ty == 'Exports':
+       return Exports(token.elements)
 
     raise Exception('Unknown token type: %s' % token.ty)