Parse and ignore external type references.
authorKim Grasman <kim.grasman@gmail.com>
Fri, 25 Jul 2014 09:36:17 +0000 (11:36 +0200)
committerKim Grasman <kim.grasman@gmail.com>
Fri, 25 Jul 2014 09:36:17 +0000 (11:36 +0200)
asn1ate/parser.py
asn1ate/sema.py
testdata/external_typeref.asn [new file with mode: 0644]

index f20987b..917a3d5 100644 (file)
@@ -218,7 +218,9 @@ def _build_asn1_grammar():
     extension_default = EXTENSIBILITY_IMPLIED | empty
 
     # types
-    defined_type = Unique(typereference)  # todo: consider other defined types from 13.1
+    # todo: consider other defined types from 13.1
+    external_type_reference = module_reference + Suppress('.') + typereference
+    defined_type = external_type_reference | typereference
     referenced_type = Unique(defined_type)  # todo: consider other ref:d types from 16.3
 
     # values
index 79d7bc9..11df19d 100644 (file)
@@ -440,7 +440,14 @@ class SimpleType(SemaNode):
 
 class ReferencedType(SemaNode):
     def __init__(self, elements):
-        self.type_name = elements[0]
+        # TODO: Module references are not resolved at the moment,
+        # and I'm not sure how to handle them.
+        if len(elements) > 1 and elements[0].ty == 'ModuleReference':
+            self.module_reference = elements[0].elements[0]
+            self.type_name = elements[1]
+        else:
+            self.module_reference = None
+            self.type_name = elements[0]
 
     def reference_name(self):
         return self.type_name
diff --git a/testdata/external_typeref.asn b/testdata/external_typeref.asn
new file mode 100644 (file)
index 0000000..f58deee
--- /dev/null
@@ -0,0 +1,7 @@
+M1 DEFINITIONS ::=\r
+BEGIN\r
+  T1 ::= INTEGER\r
+  T2 ::= T1\r
+\r
+  T3 ::= SEQUENCE OF M1.T1\r
+END\r