Merge lorikeet-heimdal -r 787 into Samba4 tree.
[kai/samba.git] / source4 / heimdal / lib / asn1 / parse.c
index d9cd23b662365af0e3e2c226980e4e0f13158f0a..6a3e524e93a949e354eb856ee69029c2eebb1ef9 100644 (file)
@@ -16,7 +16,9 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
 #include "gen_locl.h"
 #include "der.h"
 
-RCSID("$Id: parse.y 19539 2006-12-28 17:15:05Z lha $");
+RCSID("$Id: parse.y 21597 2007-07-16 18:48:58Z lha $");
 
 static Type *new_type (Typetype t);
 static struct constraint_spec *new_constraint_spec(enum ctype);
@@ -300,7 +302,7 @@ typedef union YYSTYPE
 {
     int constant;
     struct value *value;
-    struct range range;
+    struct range *range;
     char *name;
     Type *type;
     Member *member;
@@ -538,18 +540,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  4
+#define YYFINAL  6
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   169
+#define YYLAST   195
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  98
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  67
+#define YYNNTS  68
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  131
+#define YYNRULES  136
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  202
+#define YYNSTATES  214
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -603,80 +605,83 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,    12,    15,    18,    21,    22,    25,    26,
-      29,    30,    34,    35,    37,    38,    40,    43,    48,    50,
-      53,    55,    57,    61,    63,    67,    69,    71,    73,    75,
-      77,    79,    81,    83,    85,    87,    89,    91,    93,    95,
-      97,    99,   101,   103,   109,   111,   114,   119,   121,   125,
-     129,   134,   139,   141,   144,   150,   153,   156,   158,   163,
-     167,   171,   176,   180,   184,   189,   191,   193,   195,   197,
-     199,   202,   206,   208,   210,   212,   215,   219,   225,   230,
-     234,   239,   240,   242,   244,   246,   247,   249,   251,   256,
-     258,   260,   262,   264,   266,   268,   270,   272,   274,   278,
-     282,   285,   287,   290,   294,   296,   300,   305,   307,   308,
-     312,   313,   316,   321,   323,   325,   327,   329,   331,   333,
-     335,   337,   339,   341,   343,   345,   347,   349,   351,   353,
-     355,   357
+       0,     0,     3,    13,    16,    19,    22,    23,    26,    27,
+      30,    31,    35,    36,    38,    39,    41,    44,    49,    51,
+      54,    56,    58,    62,    64,    68,    70,    72,    74,    76,
+      78,    80,    82,    84,    86,    88,    90,    92,    94,    96,
+      98,   100,   102,   104,   110,   116,   122,   126,   128,   131,
+     136,   138,   142,   146,   151,   156,   158,   161,   167,   170,
+     174,   176,   177,   180,   185,   189,   194,   199,   203,   207,
+     212,   214,   216,   218,   220,   222,   225,   229,   231,   233,
+     235,   238,   242,   248,   253,   257,   262,   263,   265,   267,
+     269,   270,   272,   274,   279,   281,   283,   285,   287,   289,
+     291,   293,   295,   297,   301,   305,   308,   310,   313,   317,
+     319,   323,   328,   330,   331,   335,   336,   339,   344,   346,
+     348,   350,   352,   354,   356,   358,   360,   362,   364,   366,
+     368,   370,   372,   374,   376,   378,   380
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-      99,     0,    -1,    86,    21,   100,   101,    84,     8,   102,
-      24,    -1,    27,    70,    -1,    38,    70,    -1,     7,    70,
-      -1,    -1,    29,    39,    -1,    -1,   103,   107,    -1,    -1,
-      40,   104,    90,    -1,    -1,   105,    -1,    -1,   106,    -1,
-     105,   106,    -1,   109,    32,    86,   150,    -1,   108,    -1,
-     108,   107,    -1,   110,    -1,   142,    -1,    86,    91,   109,
-      -1,    86,    -1,    86,    84,   111,    -1,   112,    -1,   129,
-      -1,   132,    -1,   120,    -1,   113,    -1,   143,    -1,   128,
-      -1,   118,    -1,   115,    -1,   123,    -1,   121,    -1,   122,
-      -1,   124,    -1,   125,    -1,   126,    -1,   127,    -1,   138,
-      -1,    11,    -1,    92,   154,    83,   154,    93,    -1,    43,
-      -1,    43,   114,    -1,    43,    94,   116,    95,    -1,   117,
-      -1,   116,    91,   117,    -1,   116,    91,    85,    -1,    86,
-      92,   162,    93,    -1,    25,    94,   119,    95,    -1,   116,
-      -1,     9,    67,    -1,     9,    67,    94,   148,    95,    -1,
-      51,    37,    -1,    52,    67,    -1,    49,    -1,    64,    94,
-     145,    95,    -1,    64,    94,    95,    -1,    64,    53,   111,
-      -1,    65,    94,   145,    95,    -1,    65,    94,    95,    -1,
-      65,    53,   111,    -1,    14,    94,   145,    95,    -1,   130,
-      -1,   131,    -1,    86,    -1,    34,    -1,    77,    -1,   111,
-     133,    -1,    92,   134,    93,    -1,   135,    -1,   136,    -1,
-     137,    -1,    19,   111,    -1,    23,    12,   154,    -1,    19,
-     111,    23,    12,   154,    -1,    18,    12,    94,    95,    -1,
-     139,   141,   111,    -1,    96,   140,    89,    97,    -1,    -1,
-      76,    -1,     6,    -1,    60,    -1,    -1,    27,    -1,    38,
-      -1,    86,   111,    84,   154,    -1,   144,    -1,    33,    -1,
-      78,    -1,    61,    -1,    81,    -1,    36,    -1,    10,    -1,
-      79,    -1,   147,    -1,   145,    91,   147,    -1,   145,    91,
-      85,    -1,    86,   111,    -1,   146,    -1,   146,    54,    -1,
-     146,    20,   154,    -1,   149,    -1,   148,    91,   149,    -1,
-      86,    92,    89,    93,    -1,   151,    -1,    -1,    94,   152,
-      95,    -1,    -1,   153,   152,    -1,    86,    92,    89,    93,
-      -1,    86,    -1,    89,    -1,   155,    -1,   156,    -1,   160,
-      -1,   159,    -1,   161,    -1,   164,    -1,   163,    -1,   157,
-      -1,   158,    -1,    86,    -1,    88,    -1,    71,    -1,    31,
-      -1,   162,    -1,    89,    -1,    49,    -1,   151,    -1
+      99,     0,    -1,    86,   151,    21,   100,   101,    84,     8,
+     102,    24,    -1,    27,    70,    -1,    38,    70,    -1,     7,
+      70,    -1,    -1,    29,    39,    -1,    -1,   103,   107,    -1,
+      -1,    40,   104,    90,    -1,    -1,   105,    -1,    -1,   106,
+      -1,   105,   106,    -1,   109,    32,    86,   151,    -1,   108,
+      -1,   108,   107,    -1,   110,    -1,   143,    -1,    86,    91,
+     109,    -1,    86,    -1,    86,    84,   111,    -1,   112,    -1,
+     130,    -1,   133,    -1,   120,    -1,   113,    -1,   144,    -1,
+     129,    -1,   118,    -1,   115,    -1,   123,    -1,   121,    -1,
+     122,    -1,   125,    -1,   126,    -1,   127,    -1,   128,    -1,
+     139,    -1,    11,    -1,    92,   155,    83,   155,    93,    -1,
+      92,   155,    83,    46,    93,    -1,    92,    47,    83,   155,
+      93,    -1,    92,   155,    93,    -1,    43,    -1,    43,   114,
+      -1,    43,    94,   116,    95,    -1,   117,    -1,   116,    91,
+     117,    -1,   116,    91,    85,    -1,    86,    92,   163,    93,
+      -1,    25,    94,   119,    95,    -1,   116,    -1,     9,    67,
+      -1,     9,    67,    94,   149,    95,    -1,    51,    37,    -1,
+      52,    67,   124,    -1,    49,    -1,    -1,    66,   114,    -1,
+      64,    94,   146,    95,    -1,    64,    94,    95,    -1,    64,
+     124,    53,   111,    -1,    65,    94,   146,    95,    -1,    65,
+      94,    95,    -1,    65,    53,   111,    -1,    14,    94,   146,
+      95,    -1,   131,    -1,   132,    -1,    86,    -1,    34,    -1,
+      77,    -1,   111,   134,    -1,    92,   135,    93,    -1,   136,
+      -1,   137,    -1,   138,    -1,    19,   111,    -1,    23,    12,
+     155,    -1,    19,   111,    23,    12,   155,    -1,    18,    12,
+      94,    95,    -1,   140,   142,   111,    -1,    96,   141,    89,
+      97,    -1,    -1,    76,    -1,     6,    -1,    60,    -1,    -1,
+      27,    -1,    38,    -1,    86,   111,    84,   155,    -1,   145,
+      -1,    33,    -1,    78,    -1,    61,    -1,    81,    -1,    36,
+      -1,    10,    -1,    79,    -1,   148,    -1,   146,    91,   148,
+      -1,   146,    91,    85,    -1,    86,   111,    -1,   147,    -1,
+     147,    54,    -1,   147,    20,   155,    -1,   150,    -1,   149,
+      91,   150,    -1,    86,    92,    89,    93,    -1,   152,    -1,
+      -1,    94,   153,    95,    -1,    -1,   154,   153,    -1,    86,
+      92,    89,    93,    -1,    86,    -1,    89,    -1,   156,    -1,
+     157,    -1,   161,    -1,   160,    -1,   162,    -1,   165,    -1,
+     164,    -1,   158,    -1,   159,    -1,    86,    -1,    88,    -1,
+      71,    -1,    31,    -1,   163,    -1,    89,    -1,    49,    -1,
+     152,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   231,   231,   238,   239,   241,   243,   246,   248,   251,
-     252,   255,   256,   259,   260,   263,   264,   267,   278,   279,
-     282,   283,   286,   292,   300,   310,   311,   312,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-     327,   328,   331,   338,   348,   353,   360,   368,   374,   379,
-     383,   396,   404,   407,   414,   422,   428,   435,   442,   448,
-     456,   464,   470,   478,   486,   493,   494,   497,   508,   513,
-     520,   536,   542,   545,   546,   549,   555,   563,   573,   579,
-     592,   601,   604,   608,   612,   619,   622,   626,   633,   644,
-     647,   652,   657,   662,   667,   672,   677,   685,   691,   696,
-     707,   718,   724,   730,   738,   744,   751,   764,   765,   768,
-     775,   778,   789,   793,   804,   810,   811,   814,   815,   816,
-     817,   818,   821,   824,   827,   838,   846,   852,   860,   868,
-     871,   876
+       0,   233,   233,   240,   241,   243,   245,   248,   250,   253,
+     254,   257,   258,   261,   262,   265,   266,   269,   280,   281,
+     284,   285,   288,   294,   302,   312,   313,   314,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   333,   340,   350,   358,   366,   377,   382,   388,
+     396,   402,   407,   411,   424,   432,   435,   442,   450,   456,
+     465,   473,   474,   479,   485,   493,   502,   508,   516,   524,
+     531,   532,   535,   546,   551,   558,   574,   580,   583,   584,
+     587,   593,   601,   611,   617,   630,   639,   642,   646,   650,
+     657,   660,   664,   671,   682,   685,   690,   695,   700,   705,
+     710,   715,   723,   729,   734,   745,   756,   762,   768,   776,
+     782,   789,   802,   803,   806,   813,   816,   827,   831,   842,
+     848,   849,   852,   853,   854,   855,   856,   859,   862,   865,
+     876,   884,   890,   898,   906,   909,   914
 };
 #endif
 
@@ -712,7 +717,7 @@ static const char *const yytname[] =
   "TypeAssignment", "Type", "BuiltinType", "BooleanType", "range",
   "IntegerType", "NamedNumberList", "NamedNumber", "EnumeratedType",
   "Enumerations", "BitStringType", "ObjectIdentifierType",
-  "OctetStringType", "NullType", "SequenceType", "SequenceOfType",
+  "OctetStringType", "NullType", "size", "SequenceType", "SequenceOfType",
   "SetType", "SetOfType", "ChoiceType", "ReferencedType", "DefinedType",
   "UsefulType", "ConstrainedType", "Constraint", "ConstraintSpec",
   "GeneralConstraint", "ContentsConstraint", "UserDefinedConstraint",
@@ -751,35 +756,35 @@ static const yytype_uint8 yyr1[] =
      102,   103,   103,   104,   104,   105,   105,   106,   107,   107,
      108,   108,   109,   109,   110,   111,   111,   111,   112,   112,
      112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
-     112,   112,   113,   114,   115,   115,   115,   116,   116,   116,
-     117,   118,   119,   120,   120,   121,   122,   123,   124,   124,
-     125,   126,   126,   127,   128,   129,   129,   130,   131,   131,
-     132,   133,   134,   135,   135,   136,   136,   136,   137,   138,
-     139,   140,   140,   140,   140,   141,   141,   141,   142,   143,
-     144,   144,   144,   144,   144,   144,   144,   145,   145,   145,
-     146,   147,   147,   147,   148,   148,   149,   150,   150,   151,
-     152,   152,   153,   153,   153,   154,   154,   155,   155,   155,
-     155,   155,   156,   157,   158,   159,   160,   160,   161,   162,
-     163,   164
+     112,   112,   113,   114,   114,   114,   114,   115,   115,   115,
+     116,   116,   116,   117,   118,   119,   120,   120,   121,   122,
+     123,   124,   124,   125,   125,   126,   127,   127,   128,   129,
+     130,   130,   131,   132,   132,   133,   134,   135,   136,   136,
+     137,   137,   137,   138,   139,   140,   141,   141,   141,   141,
+     142,   142,   142,   143,   144,   145,   145,   145,   145,   145,
+     145,   145,   146,   146,   146,   147,   148,   148,   148,   149,
+     149,   150,   151,   151,   152,   153,   153,   154,   154,   154,
+     155,   155,   156,   156,   156,   156,   156,   157,   158,   159,
+     160,   161,   161,   162,   163,   164,   165
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     8,     2,     2,     2,     0,     2,     0,     2,
+       0,     2,     9,     2,     2,     2,     0,     2,     0,     2,
        0,     3,     0,     1,     0,     1,     2,     4,     1,     2,
        1,     1,     3,     1,     3,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     5,     1,     2,     4,     1,     3,     3,
-       4,     4,     1,     2,     5,     2,     2,     1,     4,     3,
-       3,     4,     3,     3,     4,     1,     1,     1,     1,     1,
-       2,     3,     1,     1,     1,     2,     3,     5,     4,     3,
-       4,     0,     1,     1,     1,     0,     1,     1,     4,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     3,
-       2,     1,     2,     3,     1,     3,     4,     1,     0,     3,
-       0,     2,     4,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     5,     5,     5,     3,     1,     2,     4,
+       1,     3,     3,     4,     4,     1,     2,     5,     2,     3,
+       1,     0,     2,     4,     3,     4,     4,     3,     3,     4,
+       1,     1,     1,     1,     1,     2,     3,     1,     1,     1,
+       2,     3,     5,     4,     3,     4,     0,     1,     1,     1,
+       0,     1,     1,     4,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     3,     3,     2,     1,     2,     3,     1,
+       3,     4,     1,     0,     3,     0,     2,     4,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1
+       1,     1,     1,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -787,79 +792,81 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,     0,     6,     1,     0,     0,     0,     8,     5,
-       3,     4,     0,     0,     7,     0,    10,    14,     0,     0,
-      23,     0,    13,    15,     0,     2,     0,     9,    18,    20,
-      21,     0,    11,    16,     0,     0,    95,    42,     0,     0,
-      90,    68,    94,    44,    57,     0,     0,    92,     0,     0,
-      69,    91,    96,    93,     0,    67,    81,     0,    25,    29,
-      33,    32,    28,    35,    36,    34,    37,    38,    39,    40,
-      31,    26,    65,    66,    27,    41,    85,    30,    89,    19,
-      22,   108,    53,     0,     0,     0,     0,    45,    55,    56,
-       0,     0,     0,     0,    24,    83,    84,    82,     0,     0,
-       0,    70,    86,    87,     0,   110,    17,   107,     0,     0,
-       0,   101,    97,     0,    52,    47,     0,   127,   130,   126,
-     124,   125,   129,   131,     0,   115,   116,   122,   123,   118,
-     117,   119,   128,   121,   120,     0,    60,    59,     0,    63,
-      62,     0,     0,    88,     0,     0,     0,     0,    72,    73,
-      74,    79,   113,   114,     0,   110,     0,     0,   104,   100,
-       0,    64,     0,   102,     0,     0,    51,     0,    46,    58,
-      61,    80,     0,    75,     0,    71,     0,   109,   111,     0,
-       0,    54,    99,    98,   103,     0,    49,    48,     0,     0,
-       0,    76,     0,     0,   105,    50,    43,    78,     0,   112,
-     106,    77
+       0,   113,     0,   115,     0,   112,     1,   118,   119,     0,
+     115,     6,     0,   114,   116,     0,     0,     0,     8,     0,
+       5,     3,     4,     0,     0,   117,     7,     0,    10,    14,
+       0,     0,    23,     0,    13,    15,     0,     2,     0,     9,
+      18,    20,    21,     0,    11,    16,     0,     0,   100,    42,
+       0,     0,    95,    73,    99,    47,    60,     0,     0,    97,
+      61,     0,    74,    96,   101,    98,     0,    72,    86,     0,
+      25,    29,    33,    32,    28,    35,    36,    34,    37,    38,
+      39,    40,    31,    26,    70,    71,    27,    41,    90,    30,
+      94,    19,    22,   113,    56,     0,     0,     0,     0,    48,
+      58,    61,     0,     0,     0,     0,     0,    24,    88,    89,
+      87,     0,     0,     0,    75,    91,    92,     0,    17,     0,
+       0,     0,   106,   102,     0,    55,    50,     0,   132,     0,
+     135,   131,   129,   130,   134,   136,     0,   120,   121,   127,
+     128,   123,   122,   124,   133,   126,   125,     0,    59,    62,
+      64,     0,     0,    68,    67,     0,     0,    93,     0,     0,
+       0,     0,    77,    78,    79,    84,     0,     0,   109,   105,
+       0,    69,     0,   107,     0,     0,    54,     0,     0,    46,
+      49,    63,    65,    66,    85,     0,    80,     0,    76,     0,
+       0,    57,   104,   103,   108,     0,    52,    51,     0,     0,
+       0,     0,     0,    81,     0,   110,    53,    45,    44,    43,
+      83,     0,   111,    82
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     8,    13,    18,    19,    21,    22,    23,    27,
-      28,    24,    29,    57,    58,    59,    87,    60,   114,   115,
-      61,   116,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,   101,   147,   148,   149,   150,
-      75,    76,    98,   104,    30,    77,    78,   110,   111,   112,
-     157,   158,   106,   123,   154,   155,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134
+      -1,     2,    18,    24,    30,    31,    33,    34,    35,    39,
+      40,    36,    41,    69,    70,    71,    99,    72,   125,   126,
+      73,   127,    74,    75,    76,    77,   104,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,   114,   161,   162,   163,
+     164,    87,    88,   111,   117,    42,    89,    90,   121,   122,
+     123,   167,   168,     4,   135,     9,    10,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -100
+#define YYPACT_NINF -113
 static const yytype_int16 yypact[] =
 {
-     -65,    19,    33,     5,  -100,   -29,   -17,    11,    53,  -100,
-    -100,  -100,    47,    13,  -100,    90,   -34,    18,    81,    20,
-      16,    21,    18,  -100,    76,  -100,    -7,  -100,    20,  -100,
-    -100,    18,  -100,  -100,    23,    43,  -100,  -100,    24,    25,
-    -100,  -100,  -100,    -4,  -100,    77,    46,  -100,   -48,   -45,
-    -100,  -100,  -100,  -100,    51,  -100,     4,   -64,  -100,  -100,
-    -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
-    -100,  -100,  -100,  -100,  -100,  -100,   -16,  -100,  -100,  -100,
-    -100,    26,    27,    31,    36,    52,    36,  -100,  -100,  -100,
-      51,   -71,    51,   -70,    32,  -100,  -100,  -100,    37,    52,
-      12,  -100,  -100,  -100,    51,   -39,  -100,  -100,    39,    51,
-     -78,    -6,  -100,    35,    40,  -100,    38,  -100,  -100,  -100,
-    -100,  -100,  -100,  -100,    56,  -100,  -100,  -100,  -100,  -100,
-    -100,  -100,  -100,  -100,  -100,   -72,    32,  -100,   -57,    32,
-    -100,   -36,    45,  -100,   122,    51,   123,    50,  -100,  -100,
-    -100,    32,    44,  -100,    49,   -39,    57,   -22,  -100,    32,
-     -19,  -100,    52,  -100,    59,    10,  -100,    52,  -100,  -100,
-    -100,  -100,    58,   -14,    52,  -100,    61,  -100,  -100,    62,
-      39,  -100,  -100,  -100,  -100,    60,  -100,  -100,    63,    64,
-     133,  -100,    65,    67,  -100,  -100,  -100,  -100,    52,  -100,
-    -100,  -100
+     -74,   -67,    38,   -69,    23,  -113,  -113,   -44,  -113,   -41,
+     -69,     4,   -26,  -113,  -113,    -3,     1,    10,    52,   -10,
+    -113,  -113,  -113,    45,    13,  -113,  -113,    77,   -35,    15,
+      64,    19,    17,    20,    15,  -113,    85,  -113,    25,  -113,
+      19,  -113,  -113,    15,  -113,  -113,    27,    47,  -113,  -113,
+      26,    29,  -113,  -113,  -113,   -30,  -113,    89,    61,  -113,
+     -57,   -47,  -113,  -113,  -113,  -113,    82,  -113,    -4,   -68,
+    -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,
+    -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,   -17,  -113,
+    -113,  -113,  -113,   -67,    35,    33,    46,    51,    46,  -113,
+    -113,    69,    44,   -73,    88,    82,   -72,    56,  -113,  -113,
+    -113,    49,    93,     7,  -113,  -113,  -113,    82,  -113,    58,
+      82,   -76,   -13,  -113,    57,    59,  -113,    60,  -113,    68,
+    -113,  -113,  -113,  -113,  -113,  -113,   -75,  -113,  -113,  -113,
+    -113,  -113,  -113,  -113,  -113,  -113,  -113,   -63,  -113,  -113,
+    -113,   -62,    82,    56,  -113,   -46,    65,  -113,   141,    82,
+     142,    63,  -113,  -113,  -113,    56,    66,   -38,  -113,    56,
+     -16,  -113,    93,  -113,    76,    -7,  -113,    93,    81,  -113,
+    -113,  -113,    56,  -113,  -113,    72,   -19,    93,  -113,    83,
+      58,  -113,  -113,  -113,  -113,    78,  -113,  -113,    80,    84,
+      87,    62,   162,  -113,    90,  -113,  -113,  -113,  -113,  -113,
+    -113,    93,  -113,  -113
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,   132,   127,
-    -100,   126,  -100,   -53,  -100,  -100,  -100,  -100,    75,    -3,
-    -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
-    -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,  -100,
-    -100,  -100,  -100,  -100,  -100,  -100,  -100,     0,  -100,     3,
-    -100,   -15,  -100,    83,    14,  -100,   -99,  -100,  -100,  -100,
-    -100,  -100,  -100,  -100,     2,  -100,  -100
+    -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,   150,   136,
+    -113,   143,  -113,   -65,  -113,  -113,    86,  -113,    91,    16,
+    -113,  -113,  -113,  -113,  -113,  -113,    92,  -113,  -113,  -113,
+    -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,
+    -113,  -113,  -113,  -113,  -113,  -113,  -113,  -113,   -60,  -113,
+      22,  -113,    -5,    97,     2,   184,  -113,  -112,  -113,  -113,
+    -113,  -113,  -113,  -113,  -113,    21,  -113,  -113
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -869,71 +876,78 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -13
 static const yytype_int16 yytable[] =
 {
-     143,    94,    35,    36,    37,    90,    17,    38,    92,   190,
-      95,   102,     5,   160,   162,   109,   109,   161,    39,   165,
-      99,     1,   103,   168,   137,   140,    40,    41,   100,    42,
-     144,   145,     6,     4,   160,   146,    43,   136,   169,   139,
-       3,     9,    44,     7,    45,    46,    91,   152,   163,    93,
-     153,   151,   -12,    10,    47,   160,   159,    48,    49,   170,
-      35,    36,    37,   184,    96,    38,   182,   109,   188,   180,
-      50,    51,    52,   181,    53,   191,    39,    54,   100,    55,
-      97,    11,    12,   117,    40,    41,    14,    42,    85,    56,
-      86,   138,   173,   141,    43,   186,   113,    15,    16,   201,
-      44,   118,    45,    46,    20,    25,    26,    31,    34,    81,
-      82,    32,    47,    89,    88,    48,    49,   109,    83,    84,
-     105,   108,   113,   119,   100,   156,   142,   164,    50,    51,
-      52,   165,    53,   166,   172,   174,   176,    55,   120,   167,
-     121,   122,   171,   175,   177,   198,   105,    56,   122,   179,
-     192,   193,   189,   195,    33,    79,   196,    80,   199,   197,
-     200,   135,   187,   183,   107,   194,   185,     0,     0,   178
+     157,   107,   108,     5,   202,    29,   105,   172,   178,   102,
+     115,    15,     1,   120,   120,   170,   112,     7,   179,   171,
+       8,   116,   150,   154,   113,   158,   159,     3,   175,   170,
+     160,    16,   180,   181,    47,    48,    49,   103,     6,    50,
+     153,   173,    17,   151,    11,   170,   155,   106,    12,   183,
+      51,   -12,   165,   190,    13,   169,   109,   191,    52,    53,
+     194,    54,    97,    19,    98,   198,   200,    20,    55,   192,
+     120,    21,   110,   113,    56,   203,    57,    58,   196,   124,
+      22,    23,   128,    25,    26,    28,    59,   182,    37,    60,
+      61,    47,    48,    49,   186,     5,    50,    27,   129,   213,
+     130,    32,    62,    63,    64,    38,    65,    51,    43,    66,
+      44,    67,   128,    93,    94,    52,    53,    46,    54,   120,
+      95,    68,   131,    96,   128,    55,   100,   199,   101,   119,
+     130,    56,   124,    57,    58,   102,    97,   132,   156,   133,
+     134,   152,   130,    59,   166,     3,    60,    61,   113,   174,
+     175,   177,   131,   185,   187,   176,   188,   210,   189,    62,
+      63,    64,   184,    65,   131,   134,   201,   132,    67,   133,
+     134,   206,   204,   207,   211,     3,    91,   208,    68,   132,
+     209,   133,   134,   212,    45,   205,    92,     3,   149,   147,
+     118,   197,   193,   148,    14,   195
 };
 
-static const yytype_int16 yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
-      99,    54,     9,    10,    11,    53,    40,    14,    53,    23,
-       6,    27,     7,    91,    20,    86,    86,    95,    25,    91,
-      84,    86,    38,    95,    95,    95,    33,    34,    92,    36,
-      18,    19,    27,     0,    91,    23,    43,    90,    95,    92,
-      21,    70,    49,    38,    51,    52,    94,    86,    54,    94,
-      89,   104,    86,    70,    61,    91,   109,    64,    65,    95,
-       9,    10,    11,   162,    60,    14,    85,    86,   167,    91,
-      77,    78,    79,    95,    81,   174,    25,    84,    92,    86,
-      76,    70,    29,    31,    33,    34,    39,    36,    92,    96,
-      94,    91,   145,    93,    43,    85,    86,    84,     8,   198,
-      49,    49,    51,    52,    86,    24,    86,    91,    32,    86,
-      67,    90,    61,    67,    37,    64,    65,    86,    94,    94,
-      94,    94,    86,    71,    92,    86,    89,    92,    77,    78,
-      79,    91,    81,    95,    12,    12,    92,    86,    86,    83,
-      88,    89,    97,    93,    95,    12,    94,    96,    89,    92,
-      89,    89,    94,    93,    22,    28,    93,    31,    93,    95,
-      93,    86,   165,   160,    81,   180,   164,    -1,    -1,   155
+     112,    66,     6,     1,    23,    40,    53,    20,    83,    66,
+      27,     7,    86,    86,    86,    91,    84,    86,    93,    95,
+      89,    38,    95,    95,    92,    18,    19,    94,    91,    91,
+      23,    27,    95,    95,     9,    10,    11,    94,     0,    14,
+     105,    54,    38,   103,    21,    91,   106,    94,    92,    95,
+      25,    86,   117,    91,    95,   120,    60,    95,    33,    34,
+     172,    36,    92,    89,    94,   177,   178,    70,    43,    85,
+      86,    70,    76,    92,    49,   187,    51,    52,    85,    86,
+      70,    29,    31,    93,    39,     8,    61,   152,    24,    64,
+      65,     9,    10,    11,   159,    93,    14,    84,    47,   211,
+      49,    86,    77,    78,    79,    86,    81,    25,    91,    84,
+      90,    86,    31,    86,    67,    33,    34,    32,    36,    86,
+      94,    96,    71,    94,    31,    43,    37,    46,    67,    94,
+      49,    49,    86,    51,    52,    66,    92,    86,    89,    88,
+      89,    53,    49,    61,    86,    94,    64,    65,    92,    92,
+      91,    83,    71,    12,    12,    95,    93,    95,    92,    77,
+      78,    79,    97,    81,    71,    89,    94,    86,    86,    88,
+      89,    93,    89,    93,    12,    94,    40,    93,    96,    86,
+      93,    88,    89,    93,    34,   190,    43,    94,   102,    98,
+      93,   175,   170,   101,    10,   174
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    86,    99,    21,     0,     7,    27,    38,   100,    70,
-      70,    70,    29,   101,    39,    84,     8,    40,   102,   103,
-      86,   104,   105,   106,   109,    24,    86,   107,   108,   110,
-     142,    91,    90,   106,    32,     9,    10,    11,    14,    25,
-      33,    34,    36,    43,    49,    51,    52,    61,    64,    65,
-      77,    78,    79,    81,    84,    86,    96,   111,   112,   113,
-     115,   118,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   138,   139,   143,   144,   107,
-     109,    86,    67,    94,    94,    92,    94,   114,    37,    67,
-      53,    94,    53,    94,   111,     6,    60,    76,   140,    84,
-      92,   133,    27,    38,   141,    94,   150,   151,    94,    86,
-     145,   146,   147,    86,   116,   117,   119,    31,    49,    71,
-      86,    88,    89,   151,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   116,   111,    95,   145,   111,
-      95,   145,    89,   154,    18,    19,    23,   134,   135,   136,
-     137,   111,    86,    89,   152,   153,    86,   148,   149,   111,
-      91,    95,    20,    54,    92,    91,    95,    83,    95,    95,
-      95,    97,    12,   111,    12,    93,    92,    95,   152,    92,
-      91,    95,    85,   147,   154,   162,    85,   117,   154,    94,
-      23,   154,    89,    89,   149,    93,    93,    95,    12,    93,
-      93,   154
+       0,    86,    99,    94,   151,   152,     0,    86,    89,   153,
+     154,    21,    92,    95,   153,     7,    27,    38,   100,    89,
+      70,    70,    70,    29,   101,    93,    39,    84,     8,    40,
+     102,   103,    86,   104,   105,   106,   109,    24,    86,   107,
+     108,   110,   143,    91,    90,   106,    32,     9,    10,    11,
+      14,    25,    33,    34,    36,    43,    49,    51,    52,    61,
+      64,    65,    77,    78,    79,    81,    84,    86,    96,   111,
+     112,   113,   115,   118,   120,   121,   122,   123,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   139,   140,   144,
+     145,   107,   109,    86,    67,    94,    94,    92,    94,   114,
+      37,    67,    66,    94,   124,    53,    94,   111,     6,    60,
+      76,   141,    84,    92,   134,    27,    38,   142,   151,    94,
+      86,   146,   147,   148,    86,   116,   117,   119,    31,    47,
+      49,    71,    86,    88,    89,   152,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   116,   124,   114,
+      95,   146,    53,   111,    95,   146,    89,   155,    18,    19,
+      23,   135,   136,   137,   138,   111,    86,   149,   150,   111,
+      91,    95,    20,    54,    92,    91,    95,    83,    83,    93,
+      95,    95,   111,    95,    97,    12,   111,    12,    93,    92,
+      91,    95,    85,   148,   155,   163,    85,   117,   155,    46,
+     155,    94,    23,   155,    89,   150,    93,    93,    93,    93,
+      95,    12,    93,   155
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1748,29 +1762,29 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 233 "parse.y"
+#line 235 "parse.y"
     {
                        checkundefined();
                }
     break;
 
   case 4:
-#line 240 "parse.y"
+#line 242 "parse.y"
     { error_message("implicit tagging is not supported"); }
     break;
 
   case 5:
-#line 242 "parse.y"
+#line 244 "parse.y"
     { error_message("automatic tagging is not supported"); }
     break;
 
   case 7:
-#line 247 "parse.y"
+#line 249 "parse.y"
     { error_message("no extensibility options supported"); }
     break;
 
   case 17:
-#line 268 "parse.y"
+#line 270 "parse.y"
     { 
                    struct string_list *sl;
                    for(sl = (yyvsp[(1) - (4)].sl); sl != NULL; sl = sl->next) {
@@ -1782,7 +1796,7 @@ yyreduce:
     break;
 
   case 22:
-#line 287 "parse.y"
+#line 289 "parse.y"
     {
                    (yyval.sl) = emalloc(sizeof(*(yyval.sl)));
                    (yyval.sl)->string = (yyvsp[(1) - (3)].name);
@@ -1791,7 +1805,7 @@ yyreduce:
     break;
 
   case 23:
-#line 293 "parse.y"
+#line 295 "parse.y"
     {
                    (yyval.sl) = emalloc(sizeof(*(yyval.sl)));
                    (yyval.sl)->string = (yyvsp[(1) - (1)].name);
@@ -1800,7 +1814,7 @@ yyreduce:
     break;
 
   case 24:
-#line 301 "parse.y"
+#line 303 "parse.y"
     {
                    Symbol *s = addsym ((yyvsp[(1) - (3)].name));
                    s->stype = Stype;
@@ -1811,7 +1825,7 @@ yyreduce:
     break;
 
   case 42:
-#line 332 "parse.y"
+#line 334 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_Boolean, 
                                     TE_EXPLICIT, new_type(TBoolean));
@@ -1819,36 +1833,70 @@ yyreduce:
     break;
 
   case 43:
-#line 339 "parse.y"
+#line 341 "parse.y"
     {
-                       if((yyvsp[(2) - (5)].value)->type != integervalue || 
-                          (yyvsp[(4) - (5)].value)->type != integervalue)
-                               error_message("Non-integer value used in range");
-                       (yyval.range).min = (yyvsp[(2) - (5)].value)->u.integervalue;
-                       (yyval.range).max = (yyvsp[(4) - (5)].value)->u.integervalue;
+                   if((yyvsp[(2) - (5)].value)->type != integervalue)
+                       error_message("Non-integer used in first part of range");
+                   if((yyvsp[(2) - (5)].value)->type != integervalue)
+                       error_message("Non-integer in second part of range");
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue;
+                   (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue;
                }
     break;
 
   case 44:
-#line 349 "parse.y"
+#line 351 "parse.y"
+    {          
+                   if((yyvsp[(2) - (5)].value)->type != integervalue)
+                       error_message("Non-integer in first part of range");
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue;
+                   (yyval.range)->max = (yyvsp[(2) - (5)].value)->u.integervalue - 1;
+               }
+    break;
+
+  case 45:
+#line 359 "parse.y"
+    {          
+                   if((yyvsp[(4) - (5)].value)->type != integervalue)
+                       error_message("Non-integer in second part of range");
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(4) - (5)].value)->u.integervalue + 2;
+                   (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue;
+               }
+    break;
+
+  case 46:
+#line 367 "parse.y"
+    {
+                   if((yyvsp[(2) - (3)].value)->type != integervalue)
+                       error_message("Non-integer used in limit");
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(2) - (3)].value)->u.integervalue;
+                   (yyval.range)->max = (yyvsp[(2) - (3)].value)->u.integervalue;
+               }
+    break;
+
+  case 47:
+#line 378 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, 
                                     TE_EXPLICIT, new_type(TInteger));
                }
     break;
 
-  case 45:
-#line 354 "parse.y"
+  case 48:
+#line 383 "parse.y"
     {
                        (yyval.type) = new_type(TInteger);
-                       (yyval.type)->range = emalloc(sizeof(*(yyval.type)->range));
-                       *((yyval.type)->range) = (yyvsp[(2) - (2)].range);
+                       (yyval.type)->range = (yyvsp[(2) - (2)].range);
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, (yyval.type));
                }
     break;
 
-  case 46:
-#line 361 "parse.y"
+  case 49:
+#line 389 "parse.y"
     {
                  (yyval.type) = new_type(TInteger);
                  (yyval.type)->members = (yyvsp[(3) - (4)].members);
@@ -1856,8 +1904,8 @@ yyreduce:
                }
     break;
 
-  case 47:
-#line 369 "parse.y"
+  case 50:
+#line 397 "parse.y"
     {
                        (yyval.members) = emalloc(sizeof(*(yyval.members)));
                        ASN1_TAILQ_INIT((yyval.members));
@@ -1865,21 +1913,21 @@ yyreduce:
                }
     break;
 
-  case 48:
-#line 375 "parse.y"
+  case 51:
+#line 403 "parse.y"
     {
                        ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
                        (yyval.members) = (yyvsp[(1) - (3)].members);
                }
     break;
 
-  case 49:
-#line 380 "parse.y"
+  case 52:
+#line 408 "parse.y"
     { (yyval.members) = (yyvsp[(1) - (3)].members); }
     break;
 
-  case 50:
-#line 384 "parse.y"
+  case 53:
+#line 412 "parse.y"
     {
                        (yyval.member) = emalloc(sizeof(*(yyval.member)));
                        (yyval.member)->name = (yyvsp[(1) - (4)].name);
@@ -1892,8 +1940,8 @@ yyreduce:
                }
     break;
 
-  case 51:
-#line 397 "parse.y"
+  case 54:
+#line 425 "parse.y"
     {
                  (yyval.type) = new_type(TInteger);
                  (yyval.type)->members = (yyvsp[(3) - (4)].members);
@@ -1901,8 +1949,8 @@ yyreduce:
                }
     break;
 
-  case 53:
-#line 408 "parse.y"
+  case 56:
+#line 436 "parse.y"
     {
                  (yyval.type) = new_type(TBitString);
                  (yyval.type)->members = emalloc(sizeof(*(yyval.type)->members));
@@ -1911,8 +1959,8 @@ yyreduce:
                }
     break;
 
-  case 54:
-#line 415 "parse.y"
+  case 57:
+#line 443 "parse.y"
     {
                  (yyval.type) = new_type(TBitString);
                  (yyval.type)->members = (yyvsp[(4) - (5)].members);
@@ -1920,32 +1968,44 @@ yyreduce:
                }
     break;
 
-  case 55:
-#line 423 "parse.y"
+  case 58:
+#line 451 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_OID, 
                                     TE_EXPLICIT, new_type(TOID));
                }
     break;
 
-  case 56:
-#line 429 "parse.y"
+  case 59:
+#line 457 "parse.y"
     {
-                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_OctetString, 
-                                    TE_EXPLICIT, new_type(TOctetString));
+                   Type *t = new_type(TOctetString);
+                   t->range = (yyvsp[(3) - (3)].range);
+                   (yyval.type) = new_tag(ASN1_C_UNIV, UT_OctetString, 
+                                TE_EXPLICIT, t);
                }
     break;
 
-  case 57:
-#line 436 "parse.y"
+  case 60:
+#line 466 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_Null, 
                                     TE_EXPLICIT, new_type(TNull));
                }
     break;
 
-  case 58:
-#line 443 "parse.y"
+  case 61:
+#line 473 "parse.y"
+    { (yyval.range) = NULL; }
+    break;
+
+  case 62:
+#line 475 "parse.y"
+    { (yyval.range) = (yyvsp[(2) - (2)].range); }
+    break;
+
+  case 63:
+#line 480 "parse.y"
     {
                  (yyval.type) = new_type(TSequence);
                  (yyval.type)->members = (yyvsp[(3) - (4)].members);
@@ -1953,8 +2013,8 @@ yyreduce:
                }
     break;
 
-  case 59:
-#line 449 "parse.y"
+  case 64:
+#line 486 "parse.y"
     {
                  (yyval.type) = new_type(TSequence);
                  (yyval.type)->members = NULL;
@@ -1962,17 +2022,18 @@ yyreduce:
                }
     break;
 
-  case 60:
-#line 457 "parse.y"
+  case 65:
+#line 494 "parse.y"
     {
                  (yyval.type) = new_type(TSequenceOf);
-                 (yyval.type)->subtype = (yyvsp[(3) - (3)].type);
+                 (yyval.type)->range = (yyvsp[(2) - (4)].range);
+                 (yyval.type)->subtype = (yyvsp[(4) - (4)].type);
                  (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type));
                }
     break;
 
-  case 61:
-#line 465 "parse.y"
+  case 66:
+#line 503 "parse.y"
     {
                  (yyval.type) = new_type(TSet);
                  (yyval.type)->members = (yyvsp[(3) - (4)].members);
@@ -1980,8 +2041,8 @@ yyreduce:
                }
     break;
 
-  case 62:
-#line 471 "parse.y"
+  case 67:
+#line 509 "parse.y"
     {
                  (yyval.type) = new_type(TSet);
                  (yyval.type)->members = NULL;
@@ -1989,8 +2050,8 @@ yyreduce:
                }
     break;
 
-  case 63:
-#line 479 "parse.y"
+  case 68:
+#line 517 "parse.y"
     {
                  (yyval.type) = new_type(TSetOf);
                  (yyval.type)->subtype = (yyvsp[(3) - (3)].type);
@@ -1998,16 +2059,16 @@ yyreduce:
                }
     break;
 
-  case 64:
-#line 487 "parse.y"
+  case 69:
+#line 525 "parse.y"
     {
                  (yyval.type) = new_type(TChoice);
                  (yyval.type)->members = (yyvsp[(3) - (4)].members);
                }
     break;
 
-  case 67:
-#line 498 "parse.y"
+  case 72:
+#line 536 "parse.y"
     {
                  Symbol *s = addsym((yyvsp[(1) - (1)].name));
                  (yyval.type) = new_type(TType);
@@ -2018,24 +2079,24 @@ yyreduce:
                }
     break;
 
-  case 68:
-#line 509 "parse.y"
+  case 73:
+#line 547 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralizedTime, 
                                     TE_EXPLICIT, new_type(TGeneralizedTime));
                }
     break;
 
-  case 69:
-#line 514 "parse.y"
+  case 74:
+#line 552 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_UTCTime, 
                                     TE_EXPLICIT, new_type(TUTCTime));
                }
     break;
 
-  case 70:
-#line 521 "parse.y"
+  case 75:
+#line 559 "parse.y"
     {
                    /* if (Constraint.type == contentConstrant) {
                       assert(Constraint.u.constraint.type == octetstring|bitstring-w/o-NamedBitList); // remember to check type reference too
@@ -2050,15 +2111,15 @@ yyreduce:
                }
     break;
 
-  case 71:
-#line 537 "parse.y"
+  case 76:
+#line 575 "parse.y"
     {
                    (yyval.constraint_spec) = (yyvsp[(2) - (3)].constraint_spec);
                }
     break;
 
-  case 75:
-#line 550 "parse.y"
+  case 80:
+#line 588 "parse.y"
     {
                    (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS);
                    (yyval.constraint_spec)->u.content.type = (yyvsp[(2) - (2)].type);
@@ -2066,8 +2127,8 @@ yyreduce:
                }
     break;
 
-  case 76:
-#line 556 "parse.y"
+  case 81:
+#line 594 "parse.y"
     {
                    if ((yyvsp[(3) - (3)].value)->type != objectidentifiervalue)
                        error_message("Non-OID used in ENCODED BY constraint");
@@ -2077,8 +2138,8 @@ yyreduce:
                }
     break;
 
-  case 77:
-#line 564 "parse.y"
+  case 82:
+#line 602 "parse.y"
     {
                    if ((yyvsp[(5) - (5)].value)->type != objectidentifiervalue)
                        error_message("Non-OID used in ENCODED BY constraint");
@@ -2088,15 +2149,15 @@ yyreduce:
                }
     break;
 
-  case 78:
-#line 574 "parse.y"
+  case 83:
+#line 612 "parse.y"
     {
                    (yyval.constraint_spec) = new_constraint_spec(CT_USER);
                }
     break;
 
-  case 79:
-#line 580 "parse.y"
+  case 84:
+#line 618 "parse.y"
     {
                        (yyval.type) = new_type(TTag);
                        (yyval.type)->tag = (yyvsp[(1) - (3)].tag);
@@ -2109,8 +2170,8 @@ yyreduce:
                }
     break;
 
-  case 80:
-#line 593 "parse.y"
+  case 85:
+#line 631 "parse.y"
     {
                        (yyval.tag).tagclass = (yyvsp[(2) - (4)].constant);
                        (yyval.tag).tagvalue = (yyvsp[(3) - (4)].constant);
@@ -2118,57 +2179,57 @@ yyreduce:
                }
     break;
 
-  case 81:
-#line 601 "parse.y"
+  case 86:
+#line 639 "parse.y"
     {
                        (yyval.constant) = ASN1_C_CONTEXT;
                }
     break;
 
-  case 82:
-#line 605 "parse.y"
+  case 87:
+#line 643 "parse.y"
     {
                        (yyval.constant) = ASN1_C_UNIV;
                }
     break;
 
-  case 83:
-#line 609 "parse.y"
+  case 88:
+#line 647 "parse.y"
     {
                        (yyval.constant) = ASN1_C_APPL;
                }
     break;
 
-  case 84:
-#line 613 "parse.y"
+  case 89:
+#line 651 "parse.y"
     {
                        (yyval.constant) = ASN1_C_PRIVATE;
                }
     break;
 
-  case 85:
-#line 619 "parse.y"
+  case 90:
+#line 657 "parse.y"
     {
                        (yyval.constant) = TE_EXPLICIT;
                }
     break;
 
-  case 86:
-#line 623 "parse.y"
+  case 91:
+#line 661 "parse.y"
     {
                        (yyval.constant) = TE_EXPLICIT;
                }
     break;
 
-  case 87:
-#line 627 "parse.y"
+  case 92:
+#line 665 "parse.y"
     {
                        (yyval.constant) = TE_IMPLICIT;
                }
     break;
 
-  case 88:
-#line 634 "parse.y"
+  case 93:
+#line 672 "parse.y"
     {
                        Symbol *s;
                        s = addsym ((yyvsp[(1) - (4)].name));
@@ -2179,64 +2240,64 @@ yyreduce:
                }
     break;
 
-  case 90:
-#line 648 "parse.y"
+  case 95:
+#line 686 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralString, 
                                     TE_EXPLICIT, new_type(TGeneralString));
                }
     break;
 
-  case 91:
-#line 653 "parse.y"
+  case 96:
+#line 691 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_UTF8String, 
                                     TE_EXPLICIT, new_type(TUTF8String));
                }
     break;
 
-  case 92:
-#line 658 "parse.y"
+  case 97:
+#line 696 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_PrintableString, 
                                     TE_EXPLICIT, new_type(TPrintableString));
                }
     break;
 
-  case 93:
-#line 663 "parse.y"
+  case 98:
+#line 701 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_VisibleString, 
                                     TE_EXPLICIT, new_type(TVisibleString));
                }
     break;
 
-  case 94:
-#line 668 "parse.y"
+  case 99:
+#line 706 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_IA5String, 
                                     TE_EXPLICIT, new_type(TIA5String));
                }
     break;
 
-  case 95:
-#line 673 "parse.y"
+  case 100:
+#line 711 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_BMPString, 
                                     TE_EXPLICIT, new_type(TBMPString));
                }
     break;
 
-  case 96:
-#line 678 "parse.y"
+  case 101:
+#line 716 "parse.y"
     {
                        (yyval.type) = new_tag(ASN1_C_UNIV, UT_UniversalString, 
                                     TE_EXPLICIT, new_type(TUniversalString));
                }
     break;
 
-  case 97:
-#line 686 "parse.y"
+  case 102:
+#line 724 "parse.y"
     {
                        (yyval.members) = emalloc(sizeof(*(yyval.members)));
                        ASN1_TAILQ_INIT((yyval.members));
@@ -2244,16 +2305,16 @@ yyreduce:
                }
     break;
 
-  case 98:
-#line 692 "parse.y"
+  case 103:
+#line 730 "parse.y"
     {
                        ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
                        (yyval.members) = (yyvsp[(1) - (3)].members);
                }
     break;
 
-  case 99:
-#line 697 "parse.y"
+  case 104:
+#line 735 "parse.y"
     {
                        struct member *m = ecalloc(1, sizeof(*m));
                        m->name = estrdup("...");
@@ -2264,8 +2325,8 @@ yyreduce:
                }
     break;
 
-  case 100:
-#line 708 "parse.y"
+  case 105:
+#line 746 "parse.y"
     {
                  (yyval.member) = emalloc(sizeof(*(yyval.member)));
                  (yyval.member)->name = (yyvsp[(1) - (2)].name);
@@ -2276,8 +2337,8 @@ yyreduce:
                }
     break;
 
-  case 101:
-#line 719 "parse.y"
+  case 106:
+#line 757 "parse.y"
     {
                        (yyval.member) = (yyvsp[(1) - (1)].member);
                        (yyval.member)->optional = 0;
@@ -2285,8 +2346,8 @@ yyreduce:
                }
     break;
 
-  case 102:
-#line 725 "parse.y"
+  case 107:
+#line 763 "parse.y"
     {
                        (yyval.member) = (yyvsp[(1) - (2)].member);
                        (yyval.member)->optional = 1;
@@ -2294,8 +2355,8 @@ yyreduce:
                }
     break;
 
-  case 103:
-#line 731 "parse.y"
+  case 108:
+#line 769 "parse.y"
     {
                        (yyval.member) = (yyvsp[(1) - (3)].member);
                        (yyval.member)->optional = 0;
@@ -2303,8 +2364,8 @@ yyreduce:
                }
     break;
 
-  case 104:
-#line 739 "parse.y"
+  case 109:
+#line 777 "parse.y"
     {
                        (yyval.members) = emalloc(sizeof(*(yyval.members)));
                        ASN1_TAILQ_INIT((yyval.members));
@@ -2312,16 +2373,16 @@ yyreduce:
                }
     break;
 
-  case 105:
-#line 745 "parse.y"
+  case 110:
+#line 783 "parse.y"
     {
                        ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
                        (yyval.members) = (yyvsp[(1) - (3)].members);
                }
     break;
 
-  case 106:
-#line 752 "parse.y"
+  case 111:
+#line 790 "parse.y"
     {
                  (yyval.member) = emalloc(sizeof(*(yyval.member)));
                  (yyval.member)->name = (yyvsp[(1) - (4)].name);
@@ -2334,27 +2395,27 @@ yyreduce:
                }
     break;
 
-  case 108:
-#line 765 "parse.y"
+  case 113:
+#line 803 "parse.y"
     { (yyval.objid) = NULL; }
     break;
 
-  case 109:
-#line 769 "parse.y"
+  case 114:
+#line 807 "parse.y"
     {
                        (yyval.objid) = (yyvsp[(2) - (3)].objid);
                }
     break;
 
-  case 110:
-#line 775 "parse.y"
+  case 115:
+#line 813 "parse.y"
     {
                        (yyval.objid) = NULL;
                }
     break;
 
-  case 111:
-#line 779 "parse.y"
+  case 116:
+#line 817 "parse.y"
     {
                        if ((yyvsp[(2) - (2)].objid)) {
                                (yyval.objid) = (yyvsp[(2) - (2)].objid);
@@ -2365,15 +2426,15 @@ yyreduce:
                }
     break;
 
-  case 112:
-#line 790 "parse.y"
+  case 117:
+#line 828 "parse.y"
     {
                        (yyval.objid) = new_objid((yyvsp[(1) - (4)].name), (yyvsp[(3) - (4)].constant));
                }
     break;
 
-  case 113:
-#line 794 "parse.y"
+  case 118:
+#line 832 "parse.y"
     {
                    Symbol *s = addsym((yyvsp[(1) - (1)].name));
                    if(s->stype != SValue ||
@@ -2386,15 +2447,15 @@ yyreduce:
                }
     break;
 
-  case 114:
-#line 805 "parse.y"
+  case 119:
+#line 843 "parse.y"
     {
                    (yyval.objid) = new_objid(NULL, (yyvsp[(1) - (1)].constant));
                }
     break;
 
-  case 124:
-#line 828 "parse.y"
+  case 129:
+#line 866 "parse.y"
     {
                        Symbol *s = addsym((yyvsp[(1) - (1)].name));
                        if(s->stype != SValue)
@@ -2405,8 +2466,8 @@ yyreduce:
                }
     break;
 
-  case 125:
-#line 839 "parse.y"
+  case 130:
+#line 877 "parse.y"
     {
                        (yyval.value) = emalloc(sizeof(*(yyval.value)));
                        (yyval.value)->type = stringvalue;
@@ -2414,8 +2475,8 @@ yyreduce:
                }
     break;
 
-  case 126:
-#line 847 "parse.y"
+  case 131:
+#line 885 "parse.y"
     {
                        (yyval.value) = emalloc(sizeof(*(yyval.value)));
                        (yyval.value)->type = booleanvalue;
@@ -2423,8 +2484,8 @@ yyreduce:
                }
     break;
 
-  case 127:
-#line 853 "parse.y"
+  case 132:
+#line 891 "parse.y"
     {
                        (yyval.value) = emalloc(sizeof(*(yyval.value)));
                        (yyval.value)->type = booleanvalue;
@@ -2432,8 +2493,8 @@ yyreduce:
                }
     break;
 
-  case 128:
-#line 861 "parse.y"
+  case 133:
+#line 899 "parse.y"
     {
                        (yyval.value) = emalloc(sizeof(*(yyval.value)));
                        (yyval.value)->type = integervalue;
@@ -2441,14 +2502,14 @@ yyreduce:
                }
     break;
 
-  case 130:
-#line 872 "parse.y"
+  case 135:
+#line 910 "parse.y"
     {
                }
     break;
 
-  case 131:
-#line 877 "parse.y"
+  case 136:
+#line 915 "parse.y"
     {
                        (yyval.value) = emalloc(sizeof(*(yyval.value)));
                        (yyval.value)->type = objectidentifiervalue;
@@ -2458,7 +2519,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2464 "parse.c"
+#line 2523 "parse.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2672,7 +2733,7 @@ yyreturn:
 }
 
 
-#line 884 "parse.y"
+#line 922 "parse.y"
 
 
 void