string value compatibility


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@817 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/ChangeLog b/ChangeLog
index 5e2953d..54ee870 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
 
 	* Added extra const qualifiers into the support code.
 	* More RFC variations supported in crfc2asn1.pl.
+	* Refined string values compatibility. (Test cases 77, 78).
 
 0.9.12:	2005-Mar-10
 
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 70d1a10..82e1509 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -261,12 +261,12 @@
    204,   208,   210,   214,   216,   218,   219,   221,   223,   227,
    231,   235,   237,   239,   243,   246,   248,   254,   255,   257,
    259,   263,   266,   271,   276,   277,   279,   280,   287,   289,
-   292,   294,   296,   298,   302,   306,   310,   312,   314,   319,
-   324,   329,   336,   343,   345,   350,   355,   357,   361,   363,
-   367,   371,   375,   377,   381,   383,   387,   389,   391,   393,
-   395,   400,   404,   405,   409,   411,   413,   415,   417,   419,
-   421,   423,   425,   427,   431,   433,   436,   438,   440,   442,
-   444,   447,   450,   452,   454,   457,   460,   462,   464,   466,
+   292,   294,   296,   298,   302,   306,   310,   312,   317,   322,
+   327,   334,   341,   343,   348,   353,   355,   359,   361,   365,
+   369,   373,   375,   379,   381,   385,   387,   389,   391,   393,
+   398,   402,   403,   407,   409,   411,   413,   415,   417,   419,
+   421,   423,   425,   429,   431,   434,   436,   438,   440,   442,
+   445,   448,   450,   452,   455,   458,   460,   462,   464,   466,
    468,   471,   473,   476,   478,   480,   482,   484,   486,   488,
    490,   492,   494,   496,   498,   500,   502,   504,   506,   508,
    510,   512,   514,   515,   517,   519,   524,   528,   533,   535,
@@ -312,22 +312,22 @@
     82,   103,   159,   160,   104,     0,   161,     0,   160,   161,
      0,     4,     0,   168,     0,   102,     0,   102,   110,   173,
      0,   102,   110,   207,     0,   208,   164,   182,     0,   177,
-     0,   178,     0,    27,   103,   151,   104,     0,    78,   103,
-   148,   104,     0,    79,   103,   148,   104,     0,    78,   182,
-    68,   215,   208,   164,     0,    79,   182,    68,   215,   208,
-   164,     0,    18,     0,    18,    35,    25,   216,     0,   213,
-   103,   146,   104,     0,   165,     0,    56,    68,   165,     0,
-    11,     0,    11,   111,   213,     0,   214,   111,   213,     0,
-    11,   111,   216,     0,   214,     0,   214,   111,   166,     0,
-   167,     0,   166,   111,   167,     0,   169,     0,   169,     0,
-    13,     0,    14,     0,   216,   139,     3,   171,     0,   216,
-   109,   171,     0,     0,   103,   172,   174,     0,    63,     0,
-    45,     0,    86,     0,     5,     0,     7,     0,     6,     0,
-   207,     0,   173,     0,   216,     0,   213,   111,   216,     0,
-     4,     0,   174,     4,     0,    24,     0,    63,     0,    76,
-     0,   176,     0,    67,    81,     0,    65,    51,     0,    77,
-     0,    44,     0,    36,    71,     0,    26,    81,     0,    91,
-     0,    47,     0,    58,     0,    40,     0,    22,    81,     0,
+     0,    27,   103,   151,   104,     0,    78,   103,   148,   104,
+     0,    79,   103,   148,   104,     0,    78,   182,    68,   215,
+   208,   164,     0,    79,   182,    68,   215,   208,   164,     0,
+    18,     0,    18,    35,    25,   216,     0,   213,   103,   146,
+   104,     0,   165,     0,    56,    68,   165,     0,    11,     0,
+    11,   111,   213,     0,   214,   111,   213,     0,    11,   111,
+   216,     0,   214,     0,   214,   111,   166,     0,   167,     0,
+   166,   111,   167,     0,   169,     0,   169,     0,    13,     0,
+    14,     0,   216,   139,     3,   171,     0,   216,   109,   171,
+     0,     0,   103,   172,   174,     0,    63,     0,    45,     0,
+    86,     0,     5,     0,     7,     0,     6,     0,   207,     0,
+   173,     0,   216,     0,   213,   111,   216,     0,     4,     0,
+   174,     4,     0,    24,     0,    63,     0,    76,     0,   176,
+     0,    67,    81,     0,    65,    51,     0,    77,     0,    44,
+     0,    36,    71,     0,    26,    81,     0,    91,     0,    47,
+     0,   178,     0,    58,     0,    40,     0,    22,    81,     0,
    175,     0,   176,   204,     0,    23,     0,    48,     0,    49,
      0,    50,     0,    59,     0,    64,     0,    74,     0,    83,
      0,    85,     0,    90,     0,    92,     0,    93,     0,    94,
@@ -374,22 +374,22 @@
    898,   905,   910,   916,   922,   928,   933,   943,   945,   948,
    956,   962,   971,   977,   994,   996,  1001,  1005,  1010,  1015,
   1021,  1025,  1036,  1045,  1054,  1065,  1087,  1091,  1097,  1103,
-  1109,  1115,  1125,  1135,  1141,  1155,  1179,  1186,  1200,  1209,
-  1219,  1229,  1239,  1247,  1268,  1277,  1286,  1287,  1289,  1296,
-  1308,  1318,  1326,  1326,  1331,  1336,  1341,  1346,  1350,  1354,
-  1358,  1361,  1366,  1378,  1394,  1405,  1419,  1421,  1422,  1423,
-  1424,  1425,  1426,  1427,  1428,  1429,  1430,  1431,  1437,  1439,
-  1440,  1443,  1450,  1462,  1464,  1468,  1472,  1473,  1474,  1475,
-  1476,  1480,  1481,  1482,  1483,  1487,  1488,  1495,  1495,  1496,
-  1496,  1497,  1499,  1501,  1506,  1510,  1519,  1523,  1528,  1532,
-  1538,  1548,  1552,  1555,  1558,  1563,  1572,  1580,  1586,  1593,
-  1601,  1609,  1618,  1621,  1626,  1628,  1629,  1630,  1633,  1637,
-  1642,  1648,  1653,  1656,  1660,  1671,  1684,  1690,  1694,  1699,
-  1705,  1717,  1719,  1722,  1726,  1729,  1734,  1738,  1746,  1761,
-  1767,  1774,  1787,  1799,  1814,  1818,  1835,  1840,  1843,  1848,
-  1870,  1875,  1880,  1886,  1892,  1900,  1908,  1916,  1923,  1933,
-  1938,  1968,  1970,  1973,  1980,  1986,  1988,  1989,  1990,  1993,
-  1995,  1996,  1999,  2004,  2011,  2018,  2020,  2024
+  1109,  1119,  1129,  1135,  1149,  1173,  1180,  1194,  1203,  1213,
+  1223,  1233,  1241,  1262,  1271,  1280,  1281,  1283,  1290,  1302,
+  1312,  1320,  1320,  1325,  1330,  1335,  1340,  1344,  1348,  1352,
+  1355,  1360,  1372,  1388,  1399,  1413,  1415,  1416,  1417,  1418,
+  1419,  1420,  1421,  1422,  1423,  1424,  1425,  1426,  1432,  1434,
+  1435,  1438,  1445,  1457,  1459,  1463,  1467,  1468,  1469,  1470,
+  1471,  1475,  1476,  1477,  1478,  1482,  1483,  1490,  1490,  1491,
+  1491,  1492,  1494,  1496,  1501,  1505,  1514,  1518,  1523,  1527,
+  1533,  1543,  1547,  1550,  1553,  1558,  1567,  1575,  1581,  1588,
+  1596,  1604,  1613,  1616,  1621,  1623,  1624,  1625,  1628,  1632,
+  1637,  1643,  1648,  1651,  1655,  1666,  1679,  1685,  1689,  1694,
+  1700,  1712,  1714,  1717,  1721,  1724,  1729,  1733,  1741,  1756,
+  1762,  1769,  1782,  1794,  1809,  1813,  1830,  1835,  1838,  1843,
+  1865,  1870,  1875,  1881,  1887,  1895,  1903,  1911,  1918,  1928,
+  1933,  1963,  1965,  1968,  1975,  1981,  1983,  1984,  1985,  1988,
+  1990,  1991,  1994,  1999,  2006,  2013,  2015,  2019
 };
 #endif
 
@@ -453,10 +453,10 @@
    150,   150,   151,   151,   152,   152,   153,   154,   154,   155,
    155,   156,   156,   156,   157,   157,   159,   158,   160,   160,
    161,   161,   162,   162,   162,   163,   164,   164,   164,   164,
-   164,   164,   164,   164,   164,   164,   164,   164,   165,   165,
-   165,   165,   165,   165,   166,   166,   167,   168,   169,   169,
-   170,   171,   172,   171,   171,   171,   171,   171,   171,   171,
-   171,   171,   173,   173,   174,   174,   175,   175,   175,   175,
+   164,   164,   164,   164,   164,   164,   164,   165,   165,   165,
+   165,   165,   165,   166,   166,   167,   168,   169,   169,   170,
+   171,   172,   171,   171,   171,   171,   171,   171,   171,   171,
+   171,   173,   173,   174,   174,   175,   175,   175,   175,   175,
    175,   175,   175,   175,   175,   175,   175,   175,   176,   176,
    176,   177,   177,   178,   178,   178,   178,   178,   178,   178,
    178,   178,   178,   178,   178,   178,   178,   179,   179,   180,
@@ -482,12 +482,12 @@
      3,     1,     3,     1,     1,     0,     1,     1,     3,     3,
      3,     1,     1,     3,     2,     1,     5,     0,     1,     1,
      3,     2,     4,     4,     0,     1,     0,     6,     1,     2,
-     1,     1,     1,     3,     3,     3,     1,     1,     4,     4,
-     4,     6,     6,     1,     4,     4,     1,     3,     1,     3,
-     3,     3,     1,     3,     1,     3,     1,     1,     1,     1,
-     4,     3,     0,     3,     1,     1,     1,     1,     1,     1,
-     1,     1,     1,     3,     1,     2,     1,     1,     1,     1,
-     2,     2,     1,     1,     2,     2,     1,     1,     1,     1,
+     1,     1,     1,     3,     3,     3,     1,     4,     4,     4,
+     6,     6,     1,     4,     4,     1,     3,     1,     3,     3,
+     3,     1,     3,     1,     3,     1,     1,     1,     1,     4,
+     3,     0,     3,     1,     1,     1,     1,     1,     1,     1,
+     1,     1,     3,     1,     2,     1,     1,     1,     1,     2,
+     2,     1,     1,     2,     2,     1,     1,     1,     1,     1,
      2,     1,     2,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     0,     1,     1,     4,     3,     4,     1,     3,
@@ -510,235 +510,251 @@
    173,   174,   175,   176,     0,    24,    25,    27,    28,    31,
     29,    30,    34,     0,     0,    32,     0,    47,     0,    48,
     50,    52,    36,     0,    37,     0,    40,    42,    44,     4,
-    26,   252,   119,   265,     0,   147,     0,     0,   160,   154,
-   158,   159,   148,     0,     0,   149,   153,   157,     0,     0,
-    54,    55,   150,   123,     0,    33,    46,    45,     0,     0,
-    35,    38,     0,     0,     0,     0,   256,    64,    63,     0,
-   253,   260,     0,   161,   156,   155,   152,   151,     0,    66,
-     0,    68,     0,     0,     0,    49,    51,     5,    41,    43,
-     0,   258,   259,   257,     0,   119,   265,   114,     0,     0,
-   183,   183,    62,   183,   117,   162,   150,   107,   108,     0,
-   262,   261,   254,   120,   122,     0,     0,     0,     0,    56,
-   129,   130,   124,   125,   127,   121,   138,   140,   139,   250,
-   251,   136,   135,   137,   133,   131,   142,   141,     0,   143,
-    39,     0,    90,   252,   128,     0,     0,     0,     0,     0,
+    26,   252,   118,   265,     0,   146,     0,     0,   160,   153,
+   157,   159,   147,     0,     0,   148,   152,   156,     0,     0,
+    54,    55,   149,   158,   122,     0,    33,    46,    45,     0,
+     0,    35,    38,     0,     0,     0,     0,   256,    64,    63,
+     0,   253,   260,     0,   161,   155,   154,   151,   150,     0,
+    66,     0,    68,     0,     0,     0,    49,    51,     5,    41,
+    43,     0,   258,   259,   257,     0,   118,   265,   113,     0,
+     0,   183,   183,    62,   183,   116,   162,   149,   107,     0,
+   262,   261,   254,   119,   121,     0,     0,     0,     0,    56,
+   128,   129,   123,   124,   126,   120,   137,   139,   138,   250,
+   251,   135,   134,   136,   132,   130,   141,   140,     0,   142,
+    39,     0,    90,   252,   127,     0,     0,     0,     0,     0,
     76,     0,     0,   184,   185,    76,     0,   106,     0,   163,
    252,   252,    67,    71,    70,    69,   214,   211,   210,     0,
    209,   212,     0,    60,     0,     0,     0,    57,    58,    61,
    192,     0,   198,   204,   203,   227,   228,   213,   216,   215,
      0,     0,     0,     0,    95,     0,     0,   239,    88,    88,
     92,   238,     0,   255,     0,   103,     0,    83,    86,   252,
-   118,     0,     0,     0,    77,    78,    82,   252,     0,   189,
+   117,     0,     0,     0,    77,    78,    82,   252,     0,   189,
    266,     0,     0,   266,   249,   241,     0,   243,   248,   245,
      0,    72,    74,    75,    65,   205,     0,     0,     0,     0,
      0,    53,     0,   180,   181,   178,   179,     0,     0,   182,
-     0,     0,     0,     0,   126,   145,   134,   144,   132,     0,
-    87,    96,    91,   240,    89,   237,   237,   115,     0,   109,
-     0,    85,     0,   252,   110,     0,   237,   187,     0,   252,
-   267,     0,   111,   252,   242,     0,     0,   116,   252,   206,
+     0,     0,     0,     0,   125,   144,   133,   143,   131,     0,
+    87,    96,    91,   240,    89,   237,   237,   114,     0,   108,
+     0,    85,     0,   252,   109,     0,   237,   187,     0,   252,
+   267,     0,   110,   252,   242,     0,     0,   115,   252,   206,
    207,   202,   200,     0,   229,   197,    59,   193,   194,   195,
-     0,   201,   199,     0,     0,   231,   146,     0,    93,    94,
-   104,   105,   143,    84,   186,    81,    79,    80,   190,     0,
+     0,   201,   199,     0,     0,   231,   145,     0,    93,    94,
+   104,   105,   142,    84,   186,    81,    79,    80,   190,     0,
    188,     0,   244,     0,     0,    73,   208,   220,     0,   218,
-   183,   196,     0,   233,   235,   230,     0,    97,     0,   112,
-   113,   247,   246,   217,     0,   222,   234,     0,   232,     0,
+   183,   196,     0,   233,   235,   230,     0,    97,     0,   111,
+   112,   247,   246,   217,     0,   222,   234,     0,   232,     0,
    191,   219,   225,   226,   224,   221,   223,   236,   101,     0,
     99,   102,    98,   100,     0,     0,     0
 };
 
 static const short yydefgoto[] = {   415,
      3,     4,     8,     9,    13,    14,    25,    26,    27,    55,
-    56,    57,   106,    58,    74,    75,    76,    77,    59,    69,
-    70,    60,   100,   227,   228,   229,    61,   129,   130,   281,
-   282,   264,   265,   266,   257,   258,   118,   316,   192,   193,
-   311,   312,   400,   410,   411,   267,   283,   154,   155,   173,
-   174,   194,   195,    62,   186,   242,   187,   307,   156,   103,
-   158,   159,   298,   299,   301,   203,   204,   205,   269,   270,
+    56,    57,   107,    58,    74,    75,    76,    77,    59,    69,
+    70,    60,   100,   227,   228,   229,    61,   130,   131,   281,
+   282,   264,   265,   266,   257,   258,   119,   316,   192,   193,
+   311,   312,   400,   410,   411,   267,   283,   155,   156,   173,
+   174,   194,   195,    62,   186,   242,   187,   307,   157,   103,
+   159,   104,   298,   299,   301,   203,   204,   205,   269,   270,
    231,   288,   232,   233,   234,   379,   380,   406,   407,   235,
    236,   237,   355,   356,   384,   251,   252,   210,   277,   278,
-   238,   253,   121,   122,   145,   163,   239,   104,   330,   240
+   238,   253,   122,   123,   146,   163,   239,   105,   330,   240
 };
 
-static const short yypact[] = {   148,
--32768,-32768,   148,-32768,   -58,-32768,    45,    43,-32768,-32768,
--32768,-32768,    53,-32768,   -13,   144,-32768,-32768,    97,    68,
-    59,    83,    84,    95,   189,   144,-32768,    89,-32768,-32768,
--32768,-32768,-32768,   180,-32768,-32768,   367,-32768,   191,    35,
--32768,-32768,-32768,   201,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   167,   367,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   257,   581,-32768,   108,-32768,    69,-32768,
-   114,-32768,-32768,    16,-32768,   -23,-32768,   122,-32768,-32768,
--32768,   -10,   133,-32768,   160,-32768,   165,   181,-32768,-32768,
--32768,-32768,-32768,   214,   190,-32768,-32768,-32768,   598,   271,
--32768,-32768,-32768,   171,   277,-32768,-32768,-32768,   231,   183,
--32768,-32768,   148,   231,   194,   182,     1,-32768,-32768,   444,
--32768,    28,   231,-32768,-32768,-32768,-32768,-32768,    82,-32768,
-   185,   186,   196,   350,   163,-32768,-32768,   -58,-32768,-32768,
-   170,-32768,-32768,-32768,   291,    -8,   199,   275,   208,   245,
-   -17,    75,-32768,   -55,-32768,-32768,   213,-32768,-32768,   215,
--32768,-32768,-32768,-32768,-32768,   314,   598,   313,   231,   297,
--32768,-32768,   212,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   216,   217,
--32768,   127,-32768,    27,-32768,   220,   303,     7,   221,   226,
-    51,   102,   268,-32768,   233,    51,   273,-32768,    48,-32768,
-     6,   225,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   -12,
--32768,-32768,   315,-32768,   148,   102,   240,   238,-32768,   272,
-   253,   251,   -12,-32768,-32768,   254,-32768,-32768,-32768,-32768,
-   170,   355,   313,   163,   270,   170,   163,-32768,   279,   279,
--32768,-32768,   521,-32768,   313,   263,   153,-32768,-32768,   225,
--32768,   102,   306,   276,   274,-32768,-32768,   225,   278,   130,
-   313,   102,   281,   313,-32768,-32768,   154,-32768,-32768,   282,
-   155,-32768,-32768,-32768,-32768,   269,   285,   210,   286,   289,
-   288,-32768,   297,-32768,-32768,-32768,-32768,   102,   102,-32768,
-   102,   102,   280,   283,-32768,-32768,   391,-32768,-32768,   316,
--32768,-32768,-32768,-32768,-32768,     9,     9,-32768,   343,-32768,
-     7,-32768,   298,   225,-32768,    51,     9,-32768,   295,   225,
--32768,   300,-32768,   225,-32768,    56,   343,-32768,     6,-32768,
-   296,-32768,-32768,    30,-32768,-32768,-32768,-32768,-32768,-32768,
-   301,-32768,-32768,    11,   168,-32768,-32768,   307,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   304,   521,
--32768,   521,-32768,   305,   308,-32768,-32768,-32768,   169,-32768,
-   -55,-32768,   313,   302,-32768,-32768,   283,-32768,   102,-32768,
--32768,-32768,-32768,-32768,    30,    24,   302,   313,-32768,   125,
-   272,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    22,
--32768,-32768,-32768,-32768,   418,   419,-32768
+static const short yypact[] = {   152,
+-32768,-32768,   152,-32768,   -74,-32768,    12,     5,-32768,-32768,
+-32768,-32768,    38,-32768,   -16,    54,-32768,-32768,    44,    56,
+    47,    72,    85,    81,   141,    54,-32768,    64,-32768,-32768,
+-32768,-32768,-32768,   132,-32768,-32768,   407,-32768,   161,    33,
+-32768,-32768,-32768,    53,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   156,   407,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   331,   636,-32768,   118,-32768,   105,-32768,
+   124,-32768,-32768,    16,-32768,   -23,-32768,   147,-32768,-32768,
+-32768,    -3,   140,-32768,   176,-32768,   182,   203,-32768,-32768,
+-32768,-32768,-32768,   225,   198,-32768,-32768,-32768,   711,   278,
+-32768,-32768,-32768,-32768,   171,   283,-32768,-32768,-32768,    65,
+   189,-32768,-32768,   152,    65,   194,   200,     3,-32768,-32768,
+   484,-32768,    84,    65,-32768,-32768,-32768,-32768,-32768,    67,
+-32768,   192,   195,   204,   248,   210,-32768,-32768,   -74,-32768,
+-32768,   163,-32768,-32768,-32768,   306,   -10,   213,   282,   215,
+   253,    -1,    69,-32768,   -42,-32768,-32768,   219,-32768,   223,
+-32768,-32768,-32768,-32768,-32768,   320,   711,   319,    65,   197,
+-32768,-32768,   217,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   222,   226,
+-32768,    82,-32768,    29,-32768,   216,   311,     7,   235,   233,
+    10,   279,   271,-32768,   236,    10,   276,-32768,    46,-32768,
+     1,   231,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    27,
+-32768,-32768,   318,-32768,   152,   279,   245,   243,-32768,   211,
+   256,   251,    27,-32768,-32768,   255,-32768,-32768,-32768,-32768,
+   163,   356,   319,   210,   266,   163,   210,-32768,   274,   274,
+-32768,-32768,   561,-32768,   319,   254,    88,-32768,-32768,   231,
+-32768,   279,   295,   262,   261,-32768,-32768,   231,   264,    60,
+   319,   279,   268,   319,-32768,-32768,    93,-32768,-32768,   272,
+   130,-32768,-32768,-32768,-32768,   273,   285,   220,   270,   288,
+   277,-32768,   197,-32768,-32768,-32768,-32768,   279,   279,-32768,
+   279,   279,   260,   280,-32768,-32768,   383,-32768,-32768,   317,
+-32768,-32768,-32768,-32768,-32768,    19,    19,-32768,   173,-32768,
+     7,-32768,   294,   231,-32768,    10,    19,-32768,   300,   231,
+-32768,   298,-32768,   231,-32768,    49,   173,-32768,     1,-32768,
+   297,-32768,-32768,    52,-32768,-32768,-32768,-32768,-32768,-32768,
+   304,-32768,-32768,    11,   131,-32768,-32768,   303,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   305,   561,
+-32768,   561,-32768,   314,   321,-32768,-32768,-32768,   137,-32768,
+   -42,-32768,   319,   301,-32768,-32768,   280,-32768,   279,-32768,
+-32768,-32768,-32768,-32768,    52,    17,   301,   319,-32768,   165,
+   211,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    22,
+-32768,-32768,-32768,-32768,   411,   417,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,   417,   284,-32768,-32768,   410,-32768,-32768,   398,-32768,
--32768,   369,-32768,-32768,-32768,   353,-32768,   318,-32768,-32768,
-   319,-32768,   364,-32768,-32768,   137,-32768,-32768,   267,-32768,
-    96,   230,-32768,   111,-32768,   117,-32768,   192,-32768,   193,
--32768,-32768,-32768,-32768,    33,  -185,   -79,  -300,   -53,-32768,
-   203,  -186,  -124,-32768,  -165,-32768,  -246,-32768,   -48,  -119,
--32768,    18,-32768,-32768,-32768,  -147,-32768,-32768,  -178,  -166,
-  -200,   207,-32768,  -259,-32768,-32768,    50,-32768,-32768,-32768,
--32768,-32768,-32768,    60,    63,  -295,-32768,-32768,-32768,   112,
-  -126,   -80,-32768,-32768,-32768,-32768,    31,-32768,   175,    -7
+-32768,   423,   289,-32768,-32768,   416,-32768,-32768,   405,-32768,
+-32768,   376,-32768,-32768,-32768,   359,-32768,   322,-32768,-32768,
+   325,-32768,   371,-32768,-32768,   145,-32768,-32768,   275,-32768,
+   100,   234,-32768,   115,-32768,   122,-32768,   196,-32768,   201,
+-32768,-32768,-32768,-32768,    34,  -187,   -80,  -183,   -52,-32768,
+   207,  -186,  -121,-32768,  -137,-32768,  -237,-32768,   -48,  -118,
+-32768,    35,-32768,-32768,-32768,  -148,-32768,-32768,  -178,  -166,
+    -4,   218,-32768,  -207,-32768,-32768,    55,-32768,-32768,-32768,
+-32768,-32768,-32768,    66,    71,  -247,-32768,-32768,-32768,   116,
+  -126,   -81,-32768,-32768,-32768,-32768,    31,-32768,   184,    -7
 };
 
 
-#define	YYLAST		689
+#define	YYLAST		805
 
 
 static const short yytable[] = {    15,
-   157,   120,   119,   230,   207,    15,   208,   250,   188,   175,
-   101,   101,   259,    10,    10,   102,   102,   116,    10,   142,
-   359,   360,   113,    10,   200,   409,     1,     2,   343,    65,
-     5,   368,    72,     5,   171,   172,    79,    10,   403,   171,
-   172,   247,    10,   353,     7,     1,     2,   291,    65,   202,
-   131,    67,    10,    11,    63,    10,   180,   181,    10,   247,
-    10,    11,   200,    10,   180,   181,    79,    64,   161,   390,
-    71,   391,   361,    63,    78,   143,    16,   248,   309,   162,
-   263,   314,   279,   323,   114,   201,    64,   202,   286,   144,
-   374,    19,   404,   332,  -263,   248,   405,   348,   349,   287,
-   350,    72,   123,   117,    78,    28,    79,   217,   256,    10,
-   180,   181,     1,     2,   249,   165,   175,   188,   131,   117,
-   188,   383,   111,   351,    29,   413,   230,   190,   409,   132,
-  -237,   378,   285,   157,  -237,   259,    32,   171,   172,    71,
-   117,    68,    30,   138,    78,   261,   218,   219,    12,   275,
-   160,   276,   256,   164,   200,    20,    17,   275,     1,     2,
-   214,   216,   220,    21,   176,   189,    31,   177,   178,   179,
-    10,   180,   181,     1,     2,   108,   109,   206,    33,   202,
-   322,   221,   171,   172,    22,   166,    23,   222,   327,   167,
-   260,    34,   362,   268,    36,    24,   223,   132,   268,   215,
-    37,   280,    66,   284,   225,    80,   226,   182,    10,   279,
-   375,     1,     2,   412,   107,   217,   110,    10,   180,   181,
-     1,     2,   401,   412,   115,   183,   294,   295,   296,   297,
-   245,    83,    84,   396,   246,   308,   190,   329,    10,   190,
-   124,     1,     2,   123,   366,   125,    73,   318,   184,   370,
-   157,   126,   157,   372,   218,   290,   320,   335,   338,    82,
-   321,   336,   339,   331,   127,   185,   331,    83,    84,   342,
-   128,   386,   394,   133,   189,   387,   395,   189,    85,   135,
-    86,   134,    87,   160,   141,   217,   137,    10,   180,   181,
-     1,     2,    88,   168,   169,   222,    89,   140,   170,   196,
-    90,  -264,   217,    91,    10,   180,   181,     1,     2,   197,
-   198,   363,   199,   260,    92,   209,   212,   211,   268,    93,
-    10,    94,   241,    95,   218,   244,   243,   255,   280,   363,
-   262,   284,    96,    97,   254,   271,   381,   272,   117,   352,
-   274,   218,   219,   292,   289,   293,   385,    98,   300,   189,
-    10,   180,   181,     1,     2,   302,   304,   220,   306,    99,
-     1,     2,   171,   172,   310,   222,   315,   189,   294,   295,
-   296,   297,   319,   324,    10,   385,   221,     1,     2,   325,
-   340,   326,   222,   328,   333,   341,   337,   381,   344,    38,
-   408,   223,   345,   346,   357,   354,   369,   358,   224,   225,
-   160,   226,   160,   365,    39,   371,   382,   377,    40,   388,
-   392,   389,   398,   393,    41,    42,    43,   416,   417,     6,
-    44,   191,    18,    35,    81,    45,   112,   136,   105,   347,
-    46,   139,    47,   213,   376,   273,   367,   364,   313,   303,
-    48,   317,   414,   305,   402,   397,   399,   373,   334,    49,
-     0,    50,     0,     0,   146,   147,    51,     0,    52,    53,
-    54,   148,     0,     0,     0,    85,    38,    86,     0,    87,
-   149,     0,     0,     0,     0,     0,     0,     0,     0,    88,
+   121,   120,   158,   230,   207,    15,   208,   250,    10,   188,
+   259,   101,   101,   175,    10,   102,   102,    10,    10,    10,
+    11,   143,   114,    10,   117,   409,     1,     2,     7,    65,
+     5,   403,    72,     5,   171,   172,    79,   200,    16,   263,
+    10,   171,   172,     1,     2,    10,    11,   291,    65,    67,
+   132,   247,    28,    10,   180,   181,    10,   180,   181,    10,
+    10,   247,   202,     1,     2,    20,    79,    64,   359,   360,
+    71,    63,    10,    21,    78,     1,     2,   144,   200,   368,
+   343,   361,   279,   323,   115,   404,    64,   248,    19,   405,
+    63,   145,  -263,   332,    22,   353,    23,   248,    73,   374,
+   124,   201,    72,   202,    78,    24,   309,    79,   256,   314,
+   118,   256,    29,   249,   118,    12,   165,   188,   132,   175,
+   188,   383,   112,   351,   161,   413,   230,   286,   190,   133,
+    30,   285,  -237,   259,   158,   162,  -237,    32,   287,    68,
+    71,    17,   118,    34,   139,    78,   261,   275,   200,   276,
+   275,   160,    37,   378,   164,    31,   294,   295,   296,   297,
+   214,   216,     1,     2,    33,   176,   189,   329,   409,    36,
+   166,   206,    66,   202,   167,   171,   172,   171,   172,   322,
+    10,   180,   181,     1,     2,   245,   390,   327,   391,   246,
+   260,   320,   362,   268,    80,   321,   335,   133,   268,   215,
+   336,   280,   217,   284,    10,   180,   181,     1,     2,   279,
+   375,   109,   110,   412,   177,   178,   179,    10,   180,   181,
+     1,     2,   401,   412,   108,   217,   111,    10,   180,   181,
+     1,     2,   396,   338,   386,   308,   190,   339,   387,   190,
+   394,   218,   219,   366,   395,    83,    84,   318,   370,   116,
+   124,   158,   372,   158,   182,   290,   125,   220,     1,     2,
+   171,   172,   126,   331,   218,   217,   331,    10,   180,   181,
+     1,     2,   183,   127,   189,   128,   221,   189,   129,   342,
+   134,   135,   222,   160,   217,   136,    10,   180,   181,     1,
+     2,   223,   138,   348,   349,   184,   350,   141,   224,   225,
+   168,   226,   142,   169,   218,   222,   170,   294,   295,   296,
+   297,   363,   185,   260,   196,  -264,   197,   198,   268,   352,
+   199,   209,   212,   218,   219,   211,    10,   241,   280,   363,
+   254,   284,   243,    82,   244,   255,   381,   262,   271,   220,
+   272,    83,    84,   274,   118,   222,   385,   289,   292,   189,
+   293,   300,    85,    38,    86,   302,    87,   304,   221,   306,
+   310,   315,   324,   319,   222,   325,    88,   189,   326,   328,
+    89,   333,   344,   223,    90,   385,   337,    91,    41,    42,
+    43,   225,   346,   226,   340,   341,   357,   381,    92,    45,
+   408,   345,   354,    93,    46,    94,    47,    95,   358,   365,
+   160,   369,   160,   371,    48,   388,    96,    97,   377,   382,
+   416,   398,   389,    49,    10,    50,   417,     1,     2,   392,
+    51,    98,    52,    53,    54,     6,   393,   191,    18,    38,
+    35,    81,   113,    99,   137,   106,   140,   347,   376,   273,
+   367,   213,   364,   414,    39,   317,   313,   305,    40,   402,
+   303,   373,   399,   397,    41,    42,    43,   334,     0,     0,
+    44,     0,     0,     0,     0,    45,     0,     0,     0,     0,
+    46,     0,    47,     0,     0,     0,     0,     0,     0,     0,
+    48,     0,     0,     0,     0,     0,     0,     0,     0,    49,
+     0,    50,     0,     0,   147,   148,    51,     0,    52,    53,
+    54,   149,     0,     0,     0,    85,    38,    86,     0,    87,
+   150,     0,     0,     0,     0,     0,     0,     0,     0,    88,
      0,     0,     0,    89,     0,     0,     0,    90,     0,     0,
-    91,    41,    42,    43,     0,     0,     0,     0,     0,   150,
+    91,    41,    42,    43,     0,     0,     0,     0,     0,   151,
      0,    92,    45,     0,     0,     0,    93,    46,    94,    47,
     95,     0,     0,     0,     0,     0,     0,    48,     0,    96,
-    97,   151,   152,     0,     0,     0,    49,     0,    50,     0,
-   153,   146,   147,    51,    98,    52,    53,    54,   148,     0,
-     0,     0,    85,    38,    86,     0,    87,   149,     0,     0,
+    97,   152,   153,     0,     0,     0,    49,     0,    50,     0,
+   154,   147,   148,    51,    98,    52,    53,    54,   149,     0,
+     0,     0,    85,    38,    86,     0,    87,   150,     0,     0,
      0,     0,     0,     0,     0,     0,    88,     0,     0,     0,
     89,     0,     0,     0,    90,     0,     0,    91,    41,    42,
-    43,     0,     0,     0,     0,     0,   150,     0,    92,    45,
+    43,     0,     0,     0,     0,     0,   151,     0,    92,    45,
      0,     0,     0,    93,    46,    94,    47,    95,     0,     0,
-     0,    83,    84,     0,    48,     0,    96,    97,   151,   152,
-     0,     0,    85,    49,    86,    50,    87,     0,     1,     2,
-    51,    98,    52,    53,    54,     0,    88,     0,     0,    85,
-    89,    86,     0,    87,    90,     0,     0,    91,     0,     0,
-     0,     0,     0,    88,     0,     0,     0,    89,    92,     0,
-     0,    90,     0,    93,    91,    94,     0,    95,     0,     0,
-     0,     0,     0,     0,     0,    92,    96,    97,     0,     0,
-    93,     0,    94,     0,    95,     0,     0,     0,     0,     0,
-     0,    98,     0,    96,    97,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    98
+     0,     0,     0,     0,    48,     0,    96,    97,   152,   153,
+     0,     0,     0,    49,     0,    50,    83,    84,     0,     0,
+    51,    98,    52,    53,    54,     0,     0,    85,    38,    86,
+     0,    87,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    88,     0,     0,     0,    89,     0,     0,     0,    90,
+     0,     0,    91,    41,    42,    43,     0,     0,     0,     0,
+     0,     0,     0,    92,    45,     0,     0,     0,    93,    46,
+    94,    47,    95,     0,     0,     0,     0,     0,     0,    48,
+     0,    96,    97,     0,     0,     0,     0,     0,    49,     0,
+    50,     1,     2,     0,     0,    51,    98,    52,    53,    54,
+     0,     0,    85,    38,    86,     0,    87,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    88,     0,     0,     0,
+    89,     0,     0,     0,    90,     0,     0,    91,    41,    42,
+    43,     0,     0,     0,     0,     0,     0,     0,    92,    45,
+     0,     0,     0,    93,    46,    94,    47,    95,     0,     0,
+     0,     0,     0,     0,    48,     0,    96,    97,     0,     0,
+     0,     0,     0,    49,     0,    50,     0,     0,     0,     0,
+    51,    98,    52,    53,    54
 };
 
 static const short yycheck[] = {     7,
-   120,    82,    82,   170,   152,    13,   154,   194,   135,   134,
-    64,    65,   198,     8,     8,    64,    65,    28,     8,    19,
-   316,   317,    46,     8,    80,     4,    11,    12,   288,    37,
-     0,   327,    40,     3,    13,    14,    44,     8,    15,    13,
-    14,    33,     8,   303,   103,    11,    12,   226,    56,   105,
-    99,    17,     8,     9,    37,     8,     9,    10,     8,    33,
-     8,     9,    80,     8,     9,    10,    74,    37,    41,   370,
-    40,   372,   319,    56,    44,    75,    34,    69,   244,    52,
-    30,   247,   209,   262,   108,   103,    56,   105,   101,    89,
-   337,   105,    69,   272,   103,    69,    73,   298,   299,   112,
-   301,   109,   111,   114,    74,     9,   114,     6,   102,     8,
-     9,    10,    11,    12,   194,   123,   241,   244,   167,   114,
-   247,   111,   107,   302,    57,   104,   293,   135,     4,    99,
-   104,   102,   212,   253,   108,   321,    53,    13,    14,   109,
-   114,   107,    84,   113,   114,   199,    45,    46,   104,   102,
-   120,   104,   102,   123,    80,    12,   104,   102,    11,    12,
-   168,   169,    61,    20,   134,   135,    84,     5,     6,     7,
-     8,     9,    10,    11,    12,   107,   108,   103,    84,   105,
-   260,    80,    13,    14,    41,   104,    43,    86,   268,   108,
-   198,     3,   319,   201,   106,    52,    95,   167,   206,   169,
-    21,   209,    12,   211,   103,    39,   105,    45,     8,   336,
-   337,    11,    12,   400,   107,     6,   103,     8,     9,    10,
-    11,    12,   389,   410,   103,    63,    97,    98,    99,   100,
-   104,    11,    12,   381,   108,   243,   244,   108,     8,   247,
-    81,    11,    12,   111,   324,    81,    46,   255,    86,   330,
-   370,    71,   372,   334,    45,   225,   104,   104,   104,     3,
-   108,   108,   108,   271,    51,   103,   274,    11,    12,    60,
-    81,   104,   104,     3,   244,   108,   108,   247,    22,     3,
-    24,   111,    26,   253,   103,     6,   104,     8,     9,    10,
-    11,    12,    36,   109,   109,    86,    40,   104,   103,     9,
-    44,   103,     6,    47,     8,     9,    10,    11,    12,    35,
-   103,   319,    68,   321,    58,   103,     3,   103,   326,    63,
-     8,    65,   111,    67,    45,   109,   111,    25,   336,   337,
-   105,   339,    76,    77,   115,    68,   344,   105,   114,    60,
-    68,    45,    46,   104,    30,   108,   354,    91,    96,   319,
-     8,     9,    10,    11,    12,   105,   103,    61,     4,   103,
-    11,    12,    13,    14,    95,    86,    88,   337,    97,    98,
-    99,   100,   110,    68,     8,   383,    80,    11,    12,   104,
-   112,   108,    86,   106,   104,   101,   105,   395,   103,    23,
-   398,    95,   104,   106,     4,   113,   102,    82,   102,   103,
-   370,   105,   372,   106,    38,   106,   106,   112,    42,   103,
-   106,   108,   111,   106,    48,    49,    50,     0,     0,     3,
-    54,   138,    13,    26,    56,    59,    74,   109,    65,   293,
-    64,   114,    66,   167,   339,   206,   326,   321,   246,   233,
-    74,   250,   410,   241,   395,   383,   387,   336,   274,    83,
+    82,    82,   121,   170,   153,    13,   155,   194,     8,   136,
+   198,    64,    65,   135,     8,    64,    65,     8,     8,     8,
+     9,    19,    46,     8,    28,     4,    11,    12,   103,    37,
+     0,    15,    40,     3,    13,    14,    44,    80,    34,    30,
+     8,    13,    14,    11,    12,     8,     9,   226,    56,    17,
+    99,    33,     9,     8,     9,    10,     8,     9,    10,     8,
+     8,    33,   105,    11,    12,    12,    74,    37,   316,   317,
+    40,    37,     8,    20,    44,    11,    12,    75,    80,   327,
+   288,   319,   209,   262,   108,    69,    56,    69,   105,    73,
+    56,    89,   103,   272,    41,   303,    43,    69,    46,   337,
+   111,   103,   110,   105,    74,    52,   244,   115,   102,   247,
+   114,   102,    57,   194,   114,   104,   124,   244,   167,   241,
+   247,   111,   107,   302,    41,   104,   293,   101,   136,    99,
+    84,   212,   104,   321,   253,    52,   108,    53,   112,   107,
+   110,   104,   114,     3,   114,   115,   199,   102,    80,   104,
+   102,   121,    21,   102,   124,    84,    97,    98,    99,   100,
+   168,   169,    11,    12,    84,   135,   136,   108,     4,   106,
+   104,   103,    12,   105,   108,    13,    14,    13,    14,   260,
+     8,     9,    10,    11,    12,   104,   370,   268,   372,   108,
+   198,   104,   319,   201,    39,   108,   104,   167,   206,   169,
+   108,   209,     6,   211,     8,     9,    10,    11,    12,   336,
+   337,   107,   108,   400,     5,     6,     7,     8,     9,    10,
+    11,    12,   389,   410,   107,     6,   103,     8,     9,    10,
+    11,    12,   381,   104,   104,   243,   244,   108,   108,   247,
+   104,    45,    46,   324,   108,    11,    12,   255,   330,   103,
+   111,   370,   334,   372,    45,   225,    81,    61,    11,    12,
+    13,    14,    81,   271,    45,     6,   274,     8,     9,    10,
+    11,    12,    63,    71,   244,    51,    80,   247,    81,    60,
+     3,   111,    86,   253,     6,     3,     8,     9,    10,    11,
+    12,    95,   104,   298,   299,    86,   301,   104,   102,   103,
+   109,   105,   103,   109,    45,    86,   103,    97,    98,    99,
+   100,   319,   103,   321,     9,   103,    35,   103,   326,    60,
+    68,   103,     3,    45,    46,   103,     8,   111,   336,   337,
+   115,   339,   111,     3,   109,    25,   344,   105,    68,    61,
+   105,    11,    12,    68,   114,    86,   354,    30,   104,   319,
+   108,    96,    22,    23,    24,   105,    26,   103,    80,     4,
+    95,    88,    68,   110,    86,   104,    36,   337,   108,   106,
+    40,   104,   103,    95,    44,   383,   105,    47,    48,    49,
+    50,   103,   106,   105,   112,   101,     4,   395,    58,    59,
+   398,   104,   113,    63,    64,    65,    66,    67,    82,   106,
+   370,   102,   372,   106,    74,   103,    76,    77,   112,   106,
+     0,   111,   108,    83,     8,    85,     0,    11,    12,   106,
+    90,    91,    92,    93,    94,     3,   106,   139,    13,    23,
+    26,    56,    74,   103,   110,    65,   115,   293,   339,   206,
+   326,   167,   321,   410,    38,   250,   246,   241,    42,   395,
+   233,   336,   387,   383,    48,    49,    50,   274,    -1,    -1,
+    54,    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
+    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
     -1,    85,    -1,    -1,    11,    12,    90,    -1,    92,    93,
     94,    18,    -1,    -1,    -1,    22,    23,    24,    -1,    26,
     27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    36,
@@ -753,16 +769,24 @@
     40,    -1,    -1,    -1,    44,    -1,    -1,    47,    48,    49,
     50,    -1,    -1,    -1,    -1,    -1,    56,    -1,    58,    59,
     -1,    -1,    -1,    63,    64,    65,    66,    67,    -1,    -1,
-    -1,    11,    12,    -1,    74,    -1,    76,    77,    78,    79,
-    -1,    -1,    22,    83,    24,    85,    26,    -1,    11,    12,
-    90,    91,    92,    93,    94,    -1,    36,    -1,    -1,    22,
-    40,    24,    -1,    26,    44,    -1,    -1,    47,    -1,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    -1,    40,    58,    -1,
-    -1,    44,    -1,    63,    47,    65,    -1,    67,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    58,    76,    77,    -1,    -1,
-    63,    -1,    65,    -1,    67,    -1,    -1,    -1,    -1,    -1,
-    -1,    91,    -1,    76,    77,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91
+    -1,    -1,    -1,    -1,    74,    -1,    76,    77,    78,    79,
+    -1,    -1,    -1,    83,    -1,    85,    11,    12,    -1,    -1,
+    90,    91,    92,    93,    94,    -1,    -1,    22,    23,    24,
+    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    36,    -1,    -1,    -1,    40,    -1,    -1,    -1,    44,
+    -1,    -1,    47,    48,    49,    50,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
+    65,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,
+    -1,    76,    77,    -1,    -1,    -1,    -1,    -1,    83,    -1,
+    85,    11,    12,    -1,    -1,    90,    91,    92,    93,    94,
+    -1,    -1,    22,    23,    24,    -1,    26,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
+    40,    -1,    -1,    -1,    44,    -1,    -1,    47,    48,    49,
+    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    58,    59,
+    -1,    -1,    -1,    63,    64,    65,    66,    67,    -1,    -1,
+    -1,    -1,    -1,    -1,    74,    -1,    76,    77,    -1,    -1,
+    -1,    -1,    -1,    83,    -1,    85,    -1,    -1,    -1,    -1,
+    90,    91,    92,    93,    94
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/share/bison.simple"
@@ -2183,9 +2207,9 @@
 case 108:
 #line 1091 "asn1p_y.y"
 {
-		yyval.a_expr = asn1p_expr_new(yylineno);
-		checkmem(yyval.a_expr);
-		yyval.a_expr->expr_type = yyvsp[0].a_type;
+		yyval.a_expr = yyvsp[-1].a_expr;
+		assert(yyval.a_expr->expr_type == A1TC_INVALID);
+		yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
@@ -2194,7 +2218,7 @@
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
-		yyval.a_expr->expr_type = ASN_CONSTR_CHOICE;
+		yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
@@ -2203,22 +2227,13 @@
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 		assert(yyval.a_expr->expr_type == A1TC_INVALID);
-		yyval.a_expr->expr_type = ASN_CONSTR_SEQUENCE;
+		yyval.a_expr->expr_type = ASN_CONSTR_SET;
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
 case 111:
 #line 1109 "asn1p_y.y"
 {
-		yyval.a_expr = yyvsp[-1].a_expr;
-		assert(yyval.a_expr->expr_type == A1TC_INVALID);
-		yyval.a_expr->expr_type = ASN_CONSTR_SET;
-		yyval.a_expr->meta_type = AMT_TYPE;
-	;
-    break;}
-case 112:
-#line 1115 "asn1p_y.y"
-{
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 		yyval.a_expr->constraints = yyvsp[-4].a_constr;
@@ -2229,8 +2244,8 @@
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
-case 113:
-#line 1125 "asn1p_y.y"
+case 112:
+#line 1119 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2242,8 +2257,8 @@
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
-case 114:
-#line 1135 "asn1p_y.y"
+case 113:
+#line 1129 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2251,8 +2266,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 115:
-#line 1141 "asn1p_y.y"
+case 114:
+#line 1135 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2265,8 +2280,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 116:
-#line 1155 "asn1p_y.y"
+case 115:
+#line 1149 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_expr = yyvsp[-1].a_expr;
@@ -2282,8 +2297,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 117:
-#line 1179 "asn1p_y.y"
+case 116:
+#line 1173 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2292,8 +2307,8 @@
 		yyval.a_expr->meta_type = AMT_TYPEREF;
 	;
     break;}
-case 118:
-#line 1186 "asn1p_y.y"
+case 117:
+#line 1180 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2302,8 +2317,8 @@
 		yyval.a_expr->meta_type = AMT_TYPE;
 	;
     break;}
-case 119:
-#line 1201 "asn1p_y.y"
+case 118:
+#line 1195 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2313,8 +2328,21 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
+case 119:
+#line 1203 "asn1p_y.y"
+{
+		int ret;
+		yyval.a_ref = asn1p_ref_new(yylineno);
+		checkmem(yyval.a_ref);
+		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
+		checkmem(ret == 0);
+		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
+		checkmem(ret == 0);
+		free(yyvsp[-2].tv_str);
+	;
+    break;}
 case 120:
-#line 1209 "asn1p_y.y"
+#line 1213 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2327,20 +2355,7 @@
 	;
     break;}
 case 121:
-#line 1219 "asn1p_y.y"
-{
-		int ret;
-		yyval.a_ref = asn1p_ref_new(yylineno);
-		checkmem(yyval.a_ref);
-		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[-2].tv_str, RLT_UNKNOWN);
-		checkmem(ret == 0);
-		ret = asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_UNKNOWN);
-		checkmem(ret == 0);
-		free(yyvsp[-2].tv_str);
-	;
-    break;}
-case 122:
-#line 1229 "asn1p_y.y"
+#line 1223 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2352,8 +2367,8 @@
 		free(yyvsp[-2].tv_str);
 	;
     break;}
-case 123:
-#line 1239 "asn1p_y.y"
+case 122:
+#line 1233 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2363,8 +2378,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 124:
-#line 1247 "asn1p_y.y"
+case 123:
+#line 1241 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[0].a_ref;
@@ -2385,8 +2400,8 @@
 		}
 	;
     break;}
-case 125:
-#line 1269 "asn1p_y.y"
+case 124:
+#line 1263 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2396,8 +2411,8 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 126:
-#line 1277 "asn1p_y.y"
+case 125:
+#line 1271 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_ref = yyvsp[-2].a_ref;
@@ -2406,22 +2421,22 @@
 		checkmem(ret == 0);
 	;
     break;}
-case 129:
-#line 1291 "asn1p_y.y"
+case 128:
+#line 1285 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_AmpUppercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 130:
-#line 1296 "asn1p_y.y"
+case 129:
+#line 1290 "asn1p_y.y"
 {
 		yyval.a_refcomp.lex_type = RLT_Amplowercase;
 		yyval.a_refcomp.name = yyvsp[0].tv_str;
 	;
     break;}
-case 131:
-#line 1309 "asn1p_y.y"
+case 130:
+#line 1303 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		assert(yyval.a_expr->Identifier == NULL);
@@ -2430,8 +2445,8 @@
 		yyval.a_expr->value = yyvsp[0].a_value;
 	;
     break;}
-case 132:
-#line 1319 "asn1p_y.y"
+case 131:
+#line 1313 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -2440,65 +2455,71 @@
 		yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
 	;
     break;}
-case 133:
-#line 1326 "asn1p_y.y"
+case 132:
+#line 1320 "asn1p_y.y"
 { asn1p_lexer_hack_push_opaque_state(); ;
     break;}
-case 134:
-#line 1326 "asn1p_y.y"
+case 133:
+#line 1320 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_UNPARSED;
 	;
     break;}
-case 135:
-#line 1331 "asn1p_y.y"
+case 134:
+#line 1325 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_NULL;
 	;
     break;}
-case 136:
-#line 1336 "asn1p_y.y"
+case 135:
+#line 1330 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_FALSE;
 	;
     break;}
-case 137:
-#line 1341 "asn1p_y.y"
+case 136:
+#line 1335 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
 		yyval.a_value->type = ATV_TRUE;
 	;
     break;}
-case 138:
-#line 1346 "asn1p_y.y"
+case 137:
+#line 1340 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 139:
-#line 1350 "asn1p_y.y"
+case 138:
+#line 1344 "asn1p_y.y"
 {
 		yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
 		checkmem(yyval.a_value);
 	;
     break;}
-case 140:
-#line 1354 "asn1p_y.y"
+case 139:
+#line 1348 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
+case 140:
+#line 1352 "asn1p_y.y"
+{
+		yyval.a_value = yyvsp[0].a_value;
+	;
+    break;}
 case 141:
-#line 1358 "asn1p_y.y"
+#line 1355 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
@@ -2506,12 +2527,6 @@
 case 142:
 #line 1361 "asn1p_y.y"
 {
-		yyval.a_value = yyvsp[0].a_value;
-	;
-    break;}
-case 143:
-#line 1367 "asn1p_y.y"
-{
 		asn1p_ref_t *ref;
 		int ret;
 		ref = asn1p_ref_new(yylineno);
@@ -2523,8 +2538,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 144:
-#line 1378 "asn1p_y.y"
+case 143:
+#line 1372 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2540,8 +2555,8 @@
 		free(yyvsp[0].tv_str);
 	;
     break;}
-case 145:
-#line 1395 "asn1p_y.y"
+case 144:
+#line 1389 "asn1p_y.y"
 {
 		yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 2;
 		yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -2553,8 +2568,8 @@
 		free(yyvsp[0].tv_opaque.buf);
 	;
     break;}
-case 146:
-#line 1405 "asn1p_y.y"
+case 145:
+#line 1399 "asn1p_y.y"
 {
 		int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
 		char *p = malloc(newsize + 1);
@@ -2568,68 +2583,72 @@
 		yyval.tv_opaque.len = newsize;
 	;
     break;}
-case 147:
-#line 1420 "asn1p_y.y"
+case 146:
+#line 1414 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BOOLEAN; ;
     break;}
-case 148:
-#line 1421 "asn1p_y.y"
+case 147:
+#line 1415 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_NULL; ;
     break;}
-case 149:
-#line 1422 "asn1p_y.y"
+case 148:
+#line 1416 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_REAL; ;
     break;}
-case 150:
-#line 1423 "asn1p_y.y"
+case 149:
+#line 1417 "asn1p_y.y"
 { yyval.a_type = yyvsp[0].a_type; ;
     break;}
-case 151:
-#line 1424 "asn1p_y.y"
+case 150:
+#line 1418 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OCTET_STRING; ;
     break;}
-case 152:
-#line 1425 "asn1p_y.y"
+case 151:
+#line 1419 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
     break;}
-case 153:
-#line 1426 "asn1p_y.y"
+case 152:
+#line 1420 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
     break;}
-case 154:
-#line 1427 "asn1p_y.y"
+case 153:
+#line 1421 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EXTERNAL; ;
     break;}
-case 155:
-#line 1428 "asn1p_y.y"
+case 154:
+#line 1422 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
     break;}
-case 156:
-#line 1429 "asn1p_y.y"
+case 155:
+#line 1423 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
     break;}
-case 157:
-#line 1430 "asn1p_y.y"
+case 156:
+#line 1424 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_UTCTime; ;
     break;}
-case 158:
-#line 1431 "asn1p_y.y"
+case 157:
+#line 1425 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_GeneralizedTime; ;
     break;}
+case 158:
+#line 1426 "asn1p_y.y"
+{ yyval.a_type = yyvsp[0].a_type; ;
+    break;}
 case 159:
-#line 1438 "asn1p_y.y"
+#line 1433 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_INTEGER; ;
     break;}
 case 160:
-#line 1439 "asn1p_y.y"
+#line 1434 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_ENUMERATED; ;
     break;}
 case 161:
-#line 1440 "asn1p_y.y"
+#line 1435 "asn1p_y.y"
 { yyval.a_type = ASN_BASIC_BIT_STRING; ;
     break;}
 case 162:
-#line 1444 "asn1p_y.y"
+#line 1439 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -2638,7 +2657,7 @@
 	;
     break;}
 case 163:
-#line 1450 "asn1p_y.y"
+#line 1445 "asn1p_y.y"
 {
 		if(yyvsp[0].a_expr) {
 			yyval.a_expr = yyvsp[0].a_expr;
@@ -2651,91 +2670,91 @@
 	;
     break;}
 case 164:
-#line 1463 "asn1p_y.y"
+#line 1458 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_BMPString; ;
     break;}
 case 165:
-#line 1464 "asn1p_y.y"
+#line 1459 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GeneralString;
 		fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
 	;
     break;}
 case 166:
-#line 1468 "asn1p_y.y"
+#line 1463 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_GraphicString;
 		fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
 	;
     break;}
 case 167:
-#line 1472 "asn1p_y.y"
+#line 1467 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_IA5String; ;
     break;}
 case 168:
-#line 1473 "asn1p_y.y"
+#line 1468 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ISO646String; ;
     break;}
 case 169:
-#line 1474 "asn1p_y.y"
+#line 1469 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_NumericString; ;
     break;}
 case 170:
-#line 1475 "asn1p_y.y"
+#line 1470 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_PrintableString; ;
     break;}
 case 171:
-#line 1476 "asn1p_y.y"
+#line 1471 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_T61String;
 		fprintf(stderr, "WARNING: T61String is not fully supported\n");
 	;
     break;}
 case 172:
-#line 1480 "asn1p_y.y"
+#line 1475 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_TeletexString; ;
     break;}
 case 173:
-#line 1481 "asn1p_y.y"
+#line 1476 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UniversalString; ;
     break;}
 case 174:
-#line 1482 "asn1p_y.y"
+#line 1477 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_UTF8String; ;
     break;}
 case 175:
-#line 1483 "asn1p_y.y"
+#line 1478 "asn1p_y.y"
 {
 		yyval.a_type = ASN_STRING_VideotexString;
 		fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
 	;
     break;}
 case 176:
-#line 1487 "asn1p_y.y"
+#line 1482 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_VisibleString; ;
     break;}
 case 177:
-#line 1488 "asn1p_y.y"
+#line 1483 "asn1p_y.y"
 { yyval.a_type = ASN_STRING_ObjectDescriptor; ;
     break;}
 case 183:
-#line 1500 "asn1p_y.y"
+#line 1495 "asn1p_y.y"
 { yyval.a_constr = 0; ;
     break;}
 case 184:
-#line 1501 "asn1p_y.y"
+#line 1496 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 185:
-#line 1507 "asn1p_y.y"
+#line 1502 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
 	;
     break;}
 case 186:
-#line 1510 "asn1p_y.y"
+#line 1505 "asn1p_y.y"
 {
 		/*
 		 * This is a special case, for compatibility purposes.
@@ -2745,25 +2764,25 @@
 	;
     break;}
 case 187:
-#line 1520 "asn1p_y.y"
+#line 1515 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[-1].a_constr;
 	;
     break;}
 case 188:
-#line 1523 "asn1p_y.y"
+#line 1518 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
 case 189:
-#line 1529 "asn1p_y.y"
+#line 1524 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 190:
-#line 1532 "asn1p_y.y"
+#line 1527 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2772,7 +2791,7 @@
 	;
     break;}
 case 191:
-#line 1538 "asn1p_y.y"
+#line 1533 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -2783,31 +2802,31 @@
 	;
     break;}
 case 192:
-#line 1549 "asn1p_y.y"
+#line 1544 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 193:
-#line 1552 "asn1p_y.y"
+#line 1547 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
 case 194:
-#line 1555 "asn1p_y.y"
+#line 1550 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
 case 195:
-#line 1558 "asn1p_y.y"
+#line 1553 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
 case 196:
-#line 1564 "asn1p_y.y"
+#line 1559 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2818,7 +2837,7 @@
 	;
     break;}
 case 197:
-#line 1572 "asn1p_y.y"
+#line 1567 "asn1p_y.y"
 {
 		int ret;
 		yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2829,7 +2848,7 @@
 	;
     break;}
 case 198:
-#line 1580 "asn1p_y.y"
+#line 1575 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2838,7 +2857,7 @@
 	;
     break;}
 case 199:
-#line 1586 "asn1p_y.y"
+#line 1581 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2848,7 +2867,7 @@
 	;
     break;}
 case 200:
-#line 1593 "asn1p_y.y"
+#line 1588 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2859,7 +2878,7 @@
 	;
     break;}
 case 201:
-#line 1601 "asn1p_y.y"
+#line 1596 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2870,7 +2889,7 @@
 	;
     break;}
 case 202:
-#line 1609 "asn1p_y.y"
+#line 1604 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -2882,47 +2901,47 @@
 	;
     break;}
 case 203:
-#line 1618 "asn1p_y.y"
+#line 1613 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 204:
-#line 1621 "asn1p_y.y"
+#line 1616 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 205:
-#line 1627 "asn1p_y.y"
+#line 1622 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_RANGE; ;
     break;}
 case 206:
-#line 1628 "asn1p_y.y"
+#line 1623 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_RLRANGE; ;
     break;}
 case 207:
-#line 1629 "asn1p_y.y"
+#line 1624 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_LLRANGE; ;
     break;}
 case 208:
-#line 1630 "asn1p_y.y"
+#line 1625 "asn1p_y.y"
 { yyval.a_ctype = ACT_EL_ULRANGE; ;
     break;}
 case 209:
-#line 1634 "asn1p_y.y"
+#line 1629 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_SIZE;
 	;
     break;}
 case 210:
-#line 1637 "asn1p_y.y"
+#line 1632 "asn1p_y.y"
 {
 		yyval.a_ctype = ACT_CT_FROM;
 	;
     break;}
 case 211:
-#line 1643 "asn1p_y.y"
+#line 1638 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(0);
 		checkmem(yyval.a_value);
@@ -2930,7 +2949,7 @@
 	;
     break;}
 case 212:
-#line 1648 "asn1p_y.y"
+#line 1643 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(1);
 		checkmem(yyval.a_value);
@@ -2938,20 +2957,20 @@
 	;
     break;}
 case 213:
-#line 1653 "asn1p_y.y"
+#line 1648 "asn1p_y.y"
 {
 		yyval.a_value = yyvsp[0].a_value;
 	;
     break;}
 case 214:
-#line 1656 "asn1p_y.y"
+#line 1651 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
 		checkmem(yyval.a_value);
 	;
     break;}
 case 215:
-#line 1660 "asn1p_y.y"
+#line 1655 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2965,7 +2984,7 @@
 	;
     break;}
 case 216:
-#line 1671 "asn1p_y.y"
+#line 1666 "asn1p_y.y"
 {
 		asn1p_ref_t *ref;
 		int ret;
@@ -2979,25 +2998,25 @@
 	;
     break;}
 case 217:
-#line 1685 "asn1p_y.y"
+#line 1680 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
 	;
     break;}
 case 218:
-#line 1691 "asn1p_y.y"
+#line 1686 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 219:
-#line 1694 "asn1p_y.y"
+#line 1689 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
 	;
     break;}
 case 220:
-#line 1700 "asn1p_y.y"
+#line 1695 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3005,7 +3024,7 @@
 	;
     break;}
 case 221:
-#line 1705 "asn1p_y.y"
+#line 1700 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3015,45 +3034,45 @@
 	;
     break;}
 case 222:
-#line 1718 "asn1p_y.y"
+#line 1713 "asn1p_y.y"
 { yyval.a_pres = ACPRES_DEFAULT; ;
     break;}
 case 223:
-#line 1719 "asn1p_y.y"
+#line 1714 "asn1p_y.y"
 { yyval.a_pres = yyvsp[0].a_pres; ;
     break;}
 case 224:
-#line 1723 "asn1p_y.y"
+#line 1718 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_PRESENT;
 	;
     break;}
 case 225:
-#line 1726 "asn1p_y.y"
+#line 1721 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_ABSENT;
 	;
     break;}
 case 226:
-#line 1729 "asn1p_y.y"
+#line 1724 "asn1p_y.y"
 {
 		yyval.a_pres = ACPRES_OPTIONAL;
 	;
     break;}
 case 227:
-#line 1735 "asn1p_y.y"
+#line 1730 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 228:
-#line 1738 "asn1p_y.y"
+#line 1733 "asn1p_y.y"
 {
 		yyval.a_constr = yyvsp[0].a_constr;
 	;
     break;}
 case 229:
-#line 1747 "asn1p_y.y"
+#line 1742 "asn1p_y.y"
 {
 		asn1p_ref_t *ref = asn1p_ref_new(yylineno);
 		asn1p_constraint_t *ct;
@@ -3068,13 +3087,13 @@
 	;
     break;}
 case 230:
-#line 1762 "asn1p_y.y"
+#line 1757 "asn1p_y.y"
 {
 		CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
 	;
     break;}
 case 231:
-#line 1768 "asn1p_y.y"
+#line 1763 "asn1p_y.y"
 {
 		yyval.a_constr = asn1p_constraint_new(yylineno);
 		checkmem(yyval.a_constr);
@@ -3083,7 +3102,7 @@
 	;
     break;}
 case 232:
-#line 1774 "asn1p_y.y"
+#line 1769 "asn1p_y.y"
 {
 		asn1p_constraint_t *ct;
 		ct = asn1p_constraint_new(yylineno);
@@ -3094,7 +3113,7 @@
 	;
     break;}
 case 233:
-#line 1788 "asn1p_y.y"
+#line 1783 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
 		int ret;
@@ -3108,7 +3127,7 @@
 	;
     break;}
 case 234:
-#line 1799 "asn1p_y.y"
+#line 1794 "asn1p_y.y"
 {
 		char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
 		int ret;
@@ -3123,13 +3142,13 @@
 	;
     break;}
 case 235:
-#line 1815 "asn1p_y.y"
+#line 1810 "asn1p_y.y"
 {
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 236:
-#line 1818 "asn1p_y.y"
+#line 1813 "asn1p_y.y"
 {
 		int l1 = strlen(yyvsp[-2].tv_str);
 		int l3 = strlen(yyvsp[0].tv_str);
@@ -3141,45 +3160,45 @@
 	;
     break;}
 case 237:
-#line 1836 "asn1p_y.y"
+#line 1831 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_NOMARK;
 		yyval.a_marker.default_value = 0;
 	;
     break;}
 case 238:
-#line 1840 "asn1p_y.y"
+#line 1835 "asn1p_y.y"
 { yyval.a_marker = yyvsp[0].a_marker; ;
     break;}
 case 239:
-#line 1844 "asn1p_y.y"
+#line 1839 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_OPTIONAL;
 		yyval.a_marker.default_value = 0;
 	;
     break;}
 case 240:
-#line 1848 "asn1p_y.y"
+#line 1843 "asn1p_y.y"
 {
 		yyval.a_marker.flags = EM_DEFAULT;
 		yyval.a_marker.default_value = yyvsp[0].a_value;
 	;
     break;}
 case 241:
-#line 1871 "asn1p_y.y"
+#line 1866 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
 	;
     break;}
 case 242:
-#line 1875 "asn1p_y.y"
+#line 1870 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-1].a_expr;
 	;
     break;}
 case 243:
-#line 1881 "asn1p_y.y"
+#line 1876 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3187,14 +3206,14 @@
 	;
     break;}
 case 244:
-#line 1886 "asn1p_y.y"
+#line 1881 "asn1p_y.y"
 {
 		yyval.a_expr = yyvsp[-2].a_expr;
 		asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
 	;
     break;}
 case 245:
-#line 1893 "asn1p_y.y"
+#line 1888 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3204,7 +3223,7 @@
 	;
     break;}
 case 246:
-#line 1900 "asn1p_y.y"
+#line 1895 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3215,7 +3234,7 @@
 	;
     break;}
 case 247:
-#line 1908 "asn1p_y.y"
+#line 1903 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3226,7 +3245,7 @@
 	;
     break;}
 case 248:
-#line 1916 "asn1p_y.y"
+#line 1911 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3236,7 +3255,7 @@
 	;
     break;}
 case 249:
-#line 1923 "asn1p_y.y"
+#line 1918 "asn1p_y.y"
 {
 		yyval.a_expr = asn1p_expr_new(yylineno);
 		checkmem(yyval.a_expr);
@@ -3247,102 +3266,102 @@
 	;
     break;}
 case 250:
-#line 1934 "asn1p_y.y"
+#line 1929 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
 	;
     break;}
 case 251:
-#line 1938 "asn1p_y.y"
+#line 1933 "asn1p_y.y"
 {
 		yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
 		checkmem(yyval.a_value);
 	;
     break;}
 case 252:
-#line 1969 "asn1p_y.y"
+#line 1964 "asn1p_y.y"
 { memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
     break;}
 case 253:
-#line 1970 "asn1p_y.y"
+#line 1965 "asn1p_y.y"
 { yyval.a_tag = yyvsp[0].a_tag; ;
     break;}
 case 254:
-#line 1974 "asn1p_y.y"
+#line 1969 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-1].a_tag;
 		yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
 	;
     break;}
 case 255:
-#line 1981 "asn1p_y.y"
+#line 1976 "asn1p_y.y"
 {
 		yyval.a_tag = yyvsp[-2].a_tag;
 		yyval.a_tag.tag_value = yyvsp[-1].a_int;
 	;
     break;}
 case 256:
-#line 1987 "asn1p_y.y"
+#line 1982 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
     break;}
 case 257:
-#line 1988 "asn1p_y.y"
+#line 1983 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_UNIVERSAL; ;
     break;}
 case 258:
-#line 1989 "asn1p_y.y"
+#line 1984 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_APPLICATION; ;
     break;}
 case 259:
-#line 1990 "asn1p_y.y"
+#line 1985 "asn1p_y.y"
 { yyval.a_tag.tag_class = TC_PRIVATE; ;
     break;}
 case 260:
-#line 1994 "asn1p_y.y"
+#line 1989 "asn1p_y.y"
 { yyval.a_tag.tag_mode = TM_DEFAULT; ;
     break;}
 case 261:
-#line 1995 "asn1p_y.y"
+#line 1990 "asn1p_y.y"
 { yyval.a_tag.tag_mode = TM_IMPLICIT; ;
     break;}
 case 262:
-#line 1996 "asn1p_y.y"
+#line 1991 "asn1p_y.y"
 { yyval.a_tag.tag_mode = TM_EXPLICIT; ;
     break;}
 case 263:
-#line 2000 "asn1p_y.y"
+#line 1995 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 264:
-#line 2004 "asn1p_y.y"
+#line 1999 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 265:
-#line 2012 "asn1p_y.y"
+#line 2007 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 266:
-#line 2019 "asn1p_y.y"
+#line 2014 "asn1p_y.y"
 { yyval.tv_str = 0; ;
     break;}
 case 267:
-#line 2020 "asn1p_y.y"
+#line 2015 "asn1p_y.y"
 {
 		yyval.tv_str = yyvsp[0].tv_str;
 	;
     break;}
 case 268:
-#line 2025 "asn1p_y.y"
+#line 2020 "asn1p_y.y"
 {
 		checkmem(yyvsp[0].tv_str);
 		yyval.tv_str = yyvsp[0].tv_str;
@@ -3570,7 +3589,7 @@
     }
   return 1;
 }
-#line 2031 "asn1p_y.y"
+#line 2026 "asn1p_y.y"
 
 
 
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index e316119..9ae5017 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -1088,12 +1088,6 @@
 	BasicType {
 		$$ = $1;
 	}
-	| BasicString {
-		$$ = asn1p_expr_new(yylineno);
-		checkmem($$);
-		$$->expr_type = $1;
-		$$->meta_type = AMT_TYPE;
-	}
 	| TOK_CHOICE '{' AlternativeTypeLists '}'	{
 		$$ = $3;
 		assert($$->expr_type == A1TC_INVALID);
@@ -1429,6 +1423,7 @@
 	| TOK_CHARACTER TOK_STRING { $$ = ASN_BASIC_CHARACTER_STRING; }
 	| TOK_UTCTime { $$ = ASN_BASIC_UTCTime; }
 	| TOK_GeneralizedTime { $$ = ASN_BASIC_GeneralizedTime; }
+	| BasicString { $$ = $1; }
 	;
 
 /*