From: Kim Grasman Date: Thu, 2 Jan 2014 08:35:12 +0000 (+0100) Subject: Support extension markers in ENUMERATED. X-Git-Url: http://git.arpa2.org/?p=asn2quickder;a=commitdiff_plain;h=d6844da82634c6709b98992fb69ed4d0b497e3ed Support extension markers in ENUMERATED. Based on patch by James Ward. --- diff --git a/asn1ate/parser.py b/asn1ate/parser.py index f784a9f..cef74d0 100644 --- a/asn1ate/parser.py +++ b/asn1ate/parser.py @@ -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) diff --git a/asn1ate/pyasn1gen.py b/asn1ate/pyasn1gen.py index 5d6b020..9f5c146 100644 --- a/asn1ate/pyasn1gen.py +++ b/asn1ate/pyasn1gen.py @@ -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 + '()' diff --git a/testdata/extension_marker.asn b/testdata/extension_marker.asn index 9046310..54edf0c 100644 --- a/testdata/extension_marker.asn +++ b/testdata/extension_marker.asn @@ -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