Support extension markers in ENUMERATED.
authorKim Grasman <kim.grasman@gmail.com>
Thu, 2 Jan 2014 08:35:12 +0000 (09:35 +0100)
committerKim Grasman <kim.grasman@gmail.com>
Thu, 2 Jan 2014 08:35:12 +0000 (09:35 +0100)
Based on patch by James Ward.

asn1ate/parser.py
asn1ate/pyasn1gen.py
testdata/extension_marker.asn

index f784a9f..cef74d0 100644 (file)
@@ -251,7 +251,7 @@ def _build_asn1_grammar():
     sequenceof_type = Suppress(SEQUENCE) + Optional(size_constraint) + Suppress(OF) + (type_ | named_type)
     setof_type = Suppress(SET) + Optional(size_constraint) + Suppress(OF) + (type_ | named_type)
     choice_type = CHOICE + braced_list(named_type | extension_marker)
-    enumerated_type = ENUMERATED + braced_list(enumeration)
+    enumerated_type = ENUMERATED + braced_list(enumeration | extension_marker)
     bitstring_type = BIT_STRING + braced_list(named_number)
     plain_integer_type = INTEGER
     restricted_integer_type = INTEGER + braced_list(named_number)
index 5d6b020..9f5c146 100644 (file)
@@ -242,7 +242,7 @@ class Pyasn1Backend(object):
             fragment.write_line('namedValues = namedval.NamedValues(')
             fragment.push_indent()
 
-            named_values = list(map(lambda v: '(\'%s\', %s)' % (v.identifier, v.value), t.named_values))
+            named_values = ['(\'%s\', %s)' % (v.identifier, v.value) for v in t.named_values if not isinstance(v, ExtensionMarker)]
             fragment.write_enumeration(named_values)
 
             fragment.pop_indent()
@@ -255,7 +255,7 @@ class Pyasn1Backend(object):
     def expr_value_list_type(self, t):
         class_name = _translate_type(t.type_name)
         if t.named_values:
-            named_values = list(map(lambda v: '(\'%s\', %s)' % (v.identifier, v.value), t.named_values))
+            named_values = ['(\'%s\', %s)' % (v.identifier, v.value) for v in t.named_values if not isinstance(v, ExtensionMarker)]
             return '%s(namedValues=namedval.NamedValues(%s))' % (class_name, ', '.join(named_values))
         else:
             return class_name + '()'
index 9046310..54edf0c 100644 (file)
@@ -25,4 +25,23 @@ PotentiallyInvalid ::= SEQUENCE
   required2 UTF8String
 }
 
+EnumType1 ::= ENUMERATED
+{
+  one (1),
+  ...
+}
+
+EnumType2 ::= ENUMERATED
+{
+  two (2),
+  ...,
+  three (3)
+}
+
+EnumInSequence ::= SEQUENCE
+{
+  -- Check also the inline form of an enum
+  foo ENUMERATED { zero(0), ..., one(1) }
+}
+
 END