Better OBJECT IDENTIFIER value handling in sema. Additional test case with nested...
authorKim Grasman <kim.grasman@gmail.com>
Fri, 2 Aug 2013 19:55:36 +0000 (21:55 +0200)
committerKim Grasman <kim.grasman@gmail.com>
Fri, 2 Aug 2013 19:55:36 +0000 (21:55 +0200)
asn1ate/sema.py
testdata/object_identifier.asn

index 2b90351..19dc5fd 100644 (file)
@@ -571,7 +571,9 @@ class NameForm(object):
 
 class NameAndNumberForm(object):
     def __init__(self, elements):
-        self.name = _create_sema_node(elements[0])
+        # The first element is a NameForm containing only the
+        # name, so unpack it into a string.
+        self.name = elements[0].elements[0]
         self.number = _maybe_create_sema_node(elements[1])
 
     def references(self):
@@ -588,8 +590,12 @@ class ObjectIdentifierValue(object):
         self.components = [_maybe_create_sema_node(c) for c in elements]
 
     def references(self):
-        # TODO
-        return []
+        references = []
+        for component in self.components:
+            if not isinstance(component, str):
+                references.extend(component.references())
+
+        return references
 
     def __str__(self):
         return '{' + ' '.join(str(x) for x in self.components) + '}'
index 80617ca..f82d21c 100644 (file)
@@ -18,6 +18,11 @@ BEGIN
   v2 OBJECT IDENTIFIER ::= {1 2 840 113549}
 
   -- Value assignment, name form
-  v3 OBJECT IDENTIFIER ::= {iso member-body us rsadsi}
+  -- First three parts are known names, the last one a defined value.
+  local INTEGER ::= 1234
+  v3 OBJECT IDENTIFIER ::= {iso member-body us local}
+
+  -- Value assignment, mixed
+  v4 OBJECT IDENTIFIER ::= {v1 723 local}
 
 END