aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2006-03-16 10:03:35 +0000
committerLev Walkin <vlm@lionet.info>2006-03-16 10:03:35 +0000
commitd370e9f57ecc00836b18bee44af026421bd9d63a (patch)
treeaa0270b48a6b915337d34cb1664eac0ab017d5a0
parent57074f10d3e9b089582dde25e0d3ae33be913302 (diff)
parsing WITH SYNTAX clauses
-rw-r--r--ChangeLog2
-rw-r--r--asn1c/asn1c.c5
-rw-r--r--libasn1fix/asn1fix.c13
-rw-r--r--libasn1fix/asn1fix_cws.c219
-rw-r--r--libasn1fix/asn1fix_cws.h5
-rw-r--r--libasn1parser/asn1p_class.c81
-rw-r--r--libasn1parser/asn1p_class.h24
-rw-r--r--libasn1parser/asn1p_expr.h7
-rw-r--r--libasn1parser/asn1p_l.c359
-rw-r--r--libasn1parser/asn1p_l.l43
-rw-r--r--libasn1parser/asn1p_y.c1480
-rw-r--r--libasn1parser/asn1p_y.y19
-rw-r--r--libasn1parser/asn1parser.c19
-rw-r--r--libasn1parser/asn1parser.h2
-rw-r--r--libasn1print/asn1print.c43
-rw-r--r--libasn1print/asn1print.h7
-rw-r--r--tests/34-class-OK.asn14
-rw-r--r--tests/34-class-OK.asn1.-EF6
-rw-r--r--tests/34-class-OK.asn1.-EFprint-class-matrix43
19 files changed, 1357 insertions, 1024 deletions
diff --git a/ChangeLog b/ChangeLog
index b140053f..4766cb72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,9 +2,9 @@
0.9.21: 2006-Mar-14
* skeletons/standard-modules directory is now used for standard types.
- * Refactored system for parsing Information Object Classes.
* Fixed class field access problem (Test case 98)
(Severity: medim; Security impact: none)
+ * Refactored system for parsing Information Object Classes.
0.9.20: 2006-Mar-06
diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
index c097d556..cf1ecb9c 100644
--- a/asn1c/asn1c.c
+++ b/asn1c/asn1c.c
@@ -129,8 +129,10 @@ main(int ac, char **av) {
exit(EX_USAGE);
}
asn1_compiler_flags |= A1C_PDU_AUTO;
+ } else if(strcmp(optarg, "rint-class-matrix") == 0) {
+ asn1_printer_flags |= APF_PRINT_CLASS_MATRIX;
} else if(strcmp(optarg, "rint-constraints") == 0) {
- asn1_printer_flags |= APF_DEBUG_CONSTRAINTS;
+ asn1_printer_flags |= APF_PRINT_CONSTRAINTS;
} else if(strcmp(optarg, "rint-lines") == 0) {
asn1_printer_flags |= APF_LINE_COMMENTS;
} else {
@@ -459,6 +461,7 @@ usage(const char *av0) {
"\n"
" -print-constraints Explain subtype constraints (debug)\n"
+" -print-class-matrix Print out the collected object class matrix (debug)\n"
" -print-lines Generate \"-- #line\" comments in -E output\n"
,
diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c
index dbe18c21..21a5621f 100644
--- a/libasn1fix/asn1fix.c
+++ b/libasn1fix/asn1fix.c
@@ -188,8 +188,9 @@ asn1f_fix_module__phase_1(arg_t *arg) {
/* Do not process the parametrized type just yet */
continue;
- DEBUG("=== Now processing \"%s\" at line %d ===",
- expr->Identifier, expr->_lineno);
+ DEBUG("=== Now processing \"%s\" (%d/0x%x) at line %d ===",
+ expr->Identifier, expr->meta_type, expr->expr_type,
+ expr->_lineno);
assert(expr->meta_type != AMT_INVALID);
/*
@@ -223,9 +224,10 @@ asn1f_fix_module__phase_1(arg_t *arg) {
RET2RVAL(ret, rvalue);
/*
- * Parse WITH SYNTAX in CLASSes.
+ * Parse class objects and fill up the object class with data.
*/
- ret = asn1f_parse_class_with_syntax(arg);
+ ret = asn1f_parse_class_object(arg);
+ RET2RVAL(ret, rvalue);
/*
* Resolve references in constraints.
@@ -294,6 +296,9 @@ asn1f_fix_module__phase_2(arg_t *arg) {
int ret;
TQ_FOR(expr, &(arg->mod->members), next) {
+ }
+
+ TQ_FOR(expr, &(arg->mod->members), next) {
arg->expr = expr;
if(expr->meta_type == AMT_PARAMTYPE)
diff --git a/libasn1fix/asn1fix_cws.c b/libasn1fix/asn1fix_cws.c
index a605c246..3d7b8aa7 100644
--- a/libasn1fix/asn1fix_cws.c
+++ b/libasn1fix/asn1fix_cws.c
@@ -1,15 +1,226 @@
#include "asn1fix_internal.h"
#include "asn1fix_cws.h"
+static int _asn1f_parse_class_object_data(arg_t *, asn1p_expr_t *eclass,
+ struct asn1p_ioc_row_s *row, asn1p_wsyntx_t *syntax,
+ uint8_t *buf, const uint8_t *bend,
+ int optional_mode, uint8_t **newpos);
+static int _asn1f_assign_cell_value(arg_t *arg, struct asn1p_ioc_row_s *row, struct asn1p_ioc_cell_s *cell, uint8_t *buf, const uint8_t *bend);
+
int
-asn1f_parse_class_with_syntax(arg_t *arg) {
+asn1f_parse_class_object(arg_t *arg) {
asn1p_expr_t *expr = arg->expr;
+ asn1p_expr_t *eclass;
+ asn1p_ioc_row_t *row;
+ void *new_rows_ptr;
+ int ret;
+
+ if(expr->meta_type != AMT_VALUE
+ || expr->expr_type != A1TC_REFERENCE
+ || !expr->value
+ || expr->value->type != ATV_UNPARSED)
+ return 0;
- if(expr->expr_type != A1TC_CLASSDEF
- || expr->with_syntax == NULL)
+ /*
+ * Find the governing class.
+ */
+ eclass = asn1f_find_terminal_type(arg, expr);
+ if(!eclass
+ || eclass->meta_type != AMT_OBJECTCLASS
+ || eclass->expr_type != A1TC_CLASSDEF) {
return 0;
+ }
+
+ DEBUG("Value %s of CLASS %s found at line %d",
+ expr->Identifier, eclass->Identifier, expr->_lineno);
+
+ if(!eclass->with_syntax) {
+ DEBUG("Can't process classes without WITH SYNTAX just yet");
+ return 0;
+ }
+
+ row = asn1p_ioc_row_new(eclass);
+ assert(row);
+
+ ret = _asn1f_parse_class_object_data(arg, eclass, row,
+ eclass->with_syntax,
+ expr->value->value.string.buf + 1,
+ expr->value->value.string.buf
+ + expr->value->value.string.size - 1,
+ 0, 0);
+ if(ret) {
+ LOG((ret < 0),
+ "Cannot parse %s of CLASS %s found at line %d",
+ expr->Identifier, eclass->Identifier, expr->_lineno);
+ asn1p_ioc_row_delete(row);
+ return ret;
+ }
+
+ new_rows_ptr = realloc(eclass->object_class_matrix.row,
+ (eclass->object_class_matrix.rows + 1)
+ * sizeof(eclass->object_class_matrix.row[0]));
+ assert(new_rows_ptr);
+ eclass->object_class_matrix.row = new_rows_ptr;
+ eclass->object_class_matrix.row[eclass->object_class_matrix.rows] = row;
+ eclass->object_class_matrix.rows++;
+ /* Propagate max identifier length */
+ if(eclass->object_class_matrix.max_identifier_length
+ < row->max_identifier_length)
+ eclass->object_class_matrix.max_identifier_length
+ = row->max_identifier_length;
+
+ return 0;
+}
+
+#define SKIPSPACES for(; buf < bend && isspace(*buf); buf++)
+
+static int
+_asn1f_parse_class_object_data(arg_t *arg, asn1p_expr_t *eclass,
+ struct asn1p_ioc_row_s *row, asn1p_wsyntx_t *syntax,
+ uint8_t *buf, const uint8_t *bend,
+ int optional_mode, uint8_t **newpos) {
+ struct asn1p_wsyntx_chunk_s *chunk;
+ int ret;
- DEBUG("Class %s: checking WITH SYNTAX", expr->Identifier);
+ TQ_FOR(chunk, (&syntax->chunks), next) {
+ switch(chunk->type) {
+ case WC_LITERAL: {
+ int token_len = strlen(chunk->content.token);
+ SKIPSPACES;
+ if(bend - buf < token_len
+ || memcmp(buf, chunk->content.token, token_len)) {
+ if(!optional_mode) {
+ FATAL("While parsing object class value %s at line %d: Expected: \"%s\", found: \"%s\"",
+ arg->expr->Identifier, arg->expr->_lineno, chunk->content.token, buf);
+ }
+ if(newpos) *newpos = buf;
+ return -1;
+ }
+ buf += token_len;
+ } break;
+ case WC_WHITESPACE: break; /* Ignore whitespace */
+ case WC_FIELD: {
+ struct asn1p_ioc_cell_s *cell;
+ uint8_t *p;
+ SKIPSPACES;
+ int lbraces = 0;
+ p = buf;
+ if(p < bend && *p == '{')
+ lbraces = 1, p++;
+ for(; p < bend; p++) {
+ if(lbraces) {
+ /* Search the terminating brace */
+ switch(*p) {
+ case '}': lbraces--; break;
+ case '{': lbraces++; break;
+ }
+ } else if(isspace(*p)) {
+ break;
+ }
+ }
+ if(lbraces) {
+ FATAL("Field reference %s found in class value definition for %s at line %d can not be satisfied by broken value \"%s\"",
+ chunk->content.token,
+ arg->expr->Identifier, arg->expr->_lineno, buf);
+ if(newpos) *newpos = buf;
+ return -1;
+ }
+ cell = asn1p_ioc_row_cell_fetch(row,
+ chunk->content.token);
+ if(cell == NULL) {
+ FATAL("Field reference %s found in WITH SYNAX {} clause does not match actual field in Object Class %s",
+ chunk->content.token,
+ eclass->Identifier, eclass->_lineno);
+ if(newpos) *newpos = buf;
+ return -1;
+ }
+ DEBUG("Reference %s satisfied by %s (%d)",
+ chunk->content.token,
+ buf, p - buf);
+ ret = _asn1f_assign_cell_value(arg, row, cell, buf, p);
+ if(ret) {
+ if(newpos) *newpos = buf;
+ return ret;
+ }
+ buf = p;
+ } break;
+ case WC_OPTIONALGROUP: {
+ uint8_t *np = 0;
+ SKIPSPACES;
+ ret = _asn1f_parse_class_object_data(arg, eclass, row,
+ chunk->content.syntax, buf, bend, 1, &np);
+ if(newpos) *newpos = np;
+ if(ret && np != buf)
+ return ret;
+ } break;
+ }
+ }
+
+
+ if(newpos) *newpos = buf;
+ return 0;
+}
+
+
+static int
+_asn1f_assign_cell_value(arg_t *arg, struct asn1p_ioc_row_s *row, struct asn1p_ioc_cell_s *cell,
+ uint8_t *buf, const uint8_t *bend) {
+ asn1p_expr_t *expr;
+ asn1p_ref_t *ref;
+ char *p;
+
+ if((bend - buf) <= 0) {
+ FATAL("Assignment warning: empty string is being assigned into %s for %s at line %d",
+ cell->field->Identifier,
+ arg->expr->Identifier, arg->expr->_lineno);
+ return -1;
+ }
+
+ p = malloc(bend - buf + 1);
+ assert(p);
+ memcpy(p, buf, bend - buf);
+ p[bend - buf] = '\0';
+
+ if(!isalpha(*p)) {
+
+ if(isdigit(*p)) {
+ asn1c_integer_t value;
+ if(asn1p_atoi(p, &value)) {
+ FATAL("Value %s at line %d is too large for this compiler! Please contact the asn1c author.\n", p, arg->expr->_lineno);
+ return -1;
+ }
+ expr = asn1p_expr_new(arg->expr->_lineno);
+ expr->Identifier = p;
+ expr->meta_type = AMT_VALUE;
+ expr->expr_type = ASN_BASIC_INTEGER;
+ expr->value = asn1p_value_fromint(value);
+ } else {
+ WARNING("asn1c is not yet able to parse arbitrary direct values; please convert %s at line %d to a reference.", p, arg->expr->_lineno);
+ free(p);
+ return 1;
+ }
+ } else {
+ ref = asn1p_ref_new(arg->expr->_lineno);
+ asn1p_ref_add_component(ref, p, RLT_UNKNOWN);
+ assert(ref);
+
+ expr = asn1f_lookup_symbol(arg, arg->mod, ref);
+ if(!expr) {
+ FATAL("Cannot find %s referenced by %s at line %d",
+ p, arg->expr->Identifier,
+ arg->expr->_lineno);
+ return -1;
+ }
+ }
+
+ DEBUG("Field %s assignment of %s got %s",
+ cell->field->Identifier, p, expr->Identifier);
+
+ cell->value = expr;
+
+ if(row->max_identifier_length < strlen(expr->Identifier))
+ row->max_identifier_length = strlen(expr->Identifier);
return 0;
}
+
diff --git a/libasn1fix/asn1fix_cws.h b/libasn1fix/asn1fix_cws.h
index 25fd2088..aa76b49c 100644
--- a/libasn1fix/asn1fix_cws.h
+++ b/libasn1fix/asn1fix_cws.h
@@ -2,9 +2,8 @@
#define _ASN1FIX_CLASS_WITH_SYNTAX_H_
/*
- * CLASS may contain the "WITH SYNTAX" clause, in which case we are
- * going to parse it.
+ * Parse class objects
*/
-int asn1f_parse_class_with_syntax(arg_t *arg);
+int asn1f_parse_class_object(arg_t *arg);
#endif /* _ASN1FIX_CLASS_WITH_SYNTAX_H_ */
diff --git a/libasn1parser/asn1p_class.c b/libasn1parser/asn1p_class.c
index c9065f66..585ec93c 100644
--- a/libasn1parser/asn1p_class.c
+++ b/libasn1parser/asn1p_class.c
@@ -6,6 +6,61 @@
#include "asn1parser.h"
+asn1p_ioc_row_t *
+asn1p_ioc_row_new(asn1p_expr_t *oclass) {
+ asn1p_ioc_row_t *row;
+ asn1p_expr_t *field;
+ int columns = 0;
+
+ assert(oclass->expr_type == A1TC_CLASSDEF);
+
+ row = calloc(1, sizeof *row);
+ if(!row) return NULL;
+
+ TQ_FOR(field, &oclass->members, next)
+ columns++;
+
+ row->column = calloc(columns, sizeof *row->column);
+ if(!row->column) {
+ free(row);
+ return NULL;
+ }
+ row->columns = columns;
+
+ columns = 0;
+ TQ_FOR(field, &oclass->members, next) {
+ int fieldIdLen = strlen(field->Identifier);
+ if(fieldIdLen > row->max_identifier_length)
+ row->max_identifier_length = fieldIdLen;
+ row->column[columns].field = field;
+ row->column[columns].value = NULL;
+ columns++;
+ }
+
+ return row;
+}
+
+void
+asn1p_ioc_row_delete(asn1p_ioc_row_t *row) {
+ if(row) {
+ if(row->column) {
+ free(row->column);
+ }
+ free(row);
+ }
+}
+
+struct asn1p_ioc_cell_s *
+asn1p_ioc_row_cell_fetch(asn1p_ioc_row_t *row, const char *fieldname) {
+ int i;
+ for(i = 0; i < row->columns; i++) {
+ if(strcmp(row->column[i].field->Identifier, fieldname) == 0)
+ return &row->column[i];
+ }
+ errno = ESRCH;
+ return NULL;
+}
+
asn1p_wsyntx_chunk_t *
asn1p_wsyntx_chunk_new() {
asn1p_wsyntx_chunk_t *wc;
@@ -21,8 +76,8 @@ asn1p_wsyntx_chunk_free(asn1p_wsyntx_chunk_t *wc) {
switch(wc->type) {
case WC_LITERAL:
case WC_WHITESPACE:
+ case WC_FIELD:
free(wc->content.token); break;
- case WC_REFERENCE: asn1p_ref_free(wc->content.ref); break;
case WC_OPTIONALGROUP:
asn1p_wsyntx_free(wc->content.syntax);
break;
@@ -41,12 +96,10 @@ asn1p_wsyntx_chunk_clone(asn1p_wsyntx_chunk_t *wc) {
switch(wc->type) {
case WC_LITERAL:
case WC_WHITESPACE:
+ case WC_FIELD:
nc->content.token = malloc(strlen(wc->content.token)+1);
strcpy(nc->content.token, wc->content.token);
break;
- case WC_REFERENCE:
- nc->content.ref = asn1p_ref_clone(wc->content.ref);
- break;
case WC_OPTIONALGROUP:
nc->content.syntax = asn1p_wsyntx_clone(wc->content.syntax);
break;
@@ -101,26 +154,6 @@ asn1p_wsyntx_clone(asn1p_wsyntx_t *wx) {
}
asn1p_wsyntx_chunk_t *
-asn1p_wsyntx_chunk_fromref(asn1p_ref_t *ref, int do_copy) {
- asn1p_wsyntx_chunk_t *wc;
-
- if(do_copy) {
- static asn1p_wsyntx_chunk_t tmp;
- tmp.type = WC_REFERENCE;
- tmp.content.ref = ref;
- wc = asn1p_wsyntx_chunk_clone(&tmp);
- } else {
- wc = asn1p_wsyntx_chunk_new();
- if(wc) {
- wc->type = WC_REFERENCE;
- wc->content.ref = ref;
- }
- }
-
- return wc;
-}
-
-asn1p_wsyntx_chunk_t *
asn1p_wsyntx_chunk_frombuf(char *buf, int len, int do_copy) {
asn1p_wsyntx_chunk_t *wc;
diff --git a/libasn1parser/asn1p_class.h b/libasn1parser/asn1p_class.h
index 06db2d12..5d55a73b 100644
--- a/libasn1parser/asn1p_class.h
+++ b/libasn1parser/asn1p_class.h
@@ -6,6 +6,22 @@
#include "asn1p_ref.h"
+struct asn1p_expr_s; /* Forward declaration */
+
+typedef struct asn1p_ioc_row_s {
+ struct asn1p_ioc_cell_s {
+ struct asn1p_expr_s *field; /* may never be NULL */
+ struct asn1p_expr_s *value; /* may be left uninitialized */
+ } *column;
+ int columns;
+ int max_identifier_length;
+} asn1p_ioc_row_t;
+
+asn1p_ioc_row_t *asn1p_ioc_row_new(struct asn1p_expr_s *oclass);
+void asn1p_ioc_row_delete(asn1p_ioc_row_t *);
+struct asn1p_ioc_cell_s *asn1p_ioc_row_cell_fetch(asn1p_ioc_row_t *,
+ const char *fieldname);
+
/*
* WITH SYNTAX free-form chunks.
*/
@@ -13,18 +29,17 @@ typedef struct asn1p_wsyntx_chunk_s {
enum {
WC_LITERAL,
WC_WHITESPACE,
- WC_REFERENCE,
+ WC_FIELD,
WC_OPTIONALGROUP
} type;
/*
* WC_LITERAL -> {token}
* WC_WHITESPACE -> {token}
- * WC_REFERENCE -> {ref}
+ * WC_FIELD -> {token}
* WC_OPTIONALGROUP -> {syntax}
*/
union {
- char *token;
- asn1p_ref_t *ref;
+ char *token;
struct asn1p_wsyntx_s *syntax;
} content;
@@ -54,7 +69,6 @@ asn1p_wsyntx_t *asn1p_wsyntx_clone(asn1p_wsyntx_t *);
* 0: Component has been added
* -1: Failure to add component (refer to errno)
*/
-asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromref(asn1p_ref_t *ref, int do_copy);
asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_frombuf(char *buf, int len, int _copy);
asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromsyntax(asn1p_wsyntx_t *syntax);
diff --git a/libasn1parser/asn1p_expr.h b/libasn1parser/asn1p_expr.h
index 6bcaa589..bc5abf78 100644
--- a/libasn1parser/asn1p_expr.h
+++ b/libasn1parser/asn1p_expr.h
@@ -163,6 +163,13 @@ typedef struct asn1p_expr_s {
*/
asn1p_wsyntx_t *with_syntax;
+ /* Information Object Class matrix, specific for this class */
+ struct asn1p_ioc_matrix_s {
+ asn1p_ioc_row_t **row;
+ int rows;
+ int max_identifier_length;
+ } object_class_matrix;
+
/*
* A tag.
*/
diff --git a/libasn1parser/asn1p_l.c b/libasn1parser/asn1p_l.c
index 569bc73d..d4f152ff 100644
--- a/libasn1parser/asn1p_l.c
+++ b/libasn1parser/asn1p_l.c
@@ -1763,21 +1763,21 @@ int yy_flex_debug = 1;
static yyconst short int yy_rule_linenum[137] =
{ 0,
- 94, 95, 97, 100, 102, 105, 107, 108, 109, 112,
- 114, 115, 116, 128, 135, 142, 148, 157, 165, 173,
- 174, 176, 195, 201, 202, 203, 204, 205, 208, 214,
- 221, 228, 235, 242, 243, 244, 252, 253, 254, 255,
- 256, 261, 262, 263, 264, 265, 266, 267, 268, 269,
- 270, 271, 280, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
- 318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
-
- 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
- 342, 343, 348, 349, 350, 353, 358, 364, 372, 382,
- 387, 389, 390, 394, 399, 404, 410, 411, 413, 419,
- 432, 435, 460, 504, 506, 517
+ 95, 96, 98, 101, 103, 106, 108, 109, 110, 113,
+ 115, 116, 117, 129, 136, 143, 149, 158, 166, 174,
+ 175, 177, 196, 202, 203, 204, 205, 206, 209, 215,
+ 222, 229, 236, 243, 244, 245, 253, 254, 255, 256,
+ 257, 262, 263, 264, 265, 266, 267, 268, 269, 270,
+ 271, 272, 281, 282, 283, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
+ 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
+
+ 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 343, 344, 349, 350, 351, 354, 359, 365, 373, 383,
+ 388, 390, 391, 395, 400, 405, 411, 412, 414, 420,
+ 433, 436, 461, 505, 507, 518
} ;
static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
@@ -1821,10 +1821,11 @@ void asn1p_lexer_hack_push_encoding_control(void); /* Used in .y */
int asn1p_lexer_pedantic_1990 = 0;
int asn1p_lexer_types_year = 0;
int asn1p_lexer_constructs_year = 0;
-static asn1c_integer_t asn1p_atoi(char *ptr); /* errno is either 0 or ERANGE */
int asn1p_as_pointer;
+static asn1c_integer_t _lex_atoi(const char *ptr);
+
/*
* Check that the type is defined in the year of the standard choosen.
*/
@@ -1883,7 +1884,7 @@ int asn1p_as_pointer;
/* Newline */
/* White-space */
-#line 1887 "asn1p_l.c"
+#line 1888 "asn1p_l.c"
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -2034,10 +2035,10 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 92 "asn1p_l.l"
+#line 93 "asn1p_l.l"
-#line 2041 "asn1p_l.c"
+#line 2042 "asn1p_l.c"
if ( yy_init )
{
@@ -2148,7 +2149,7 @@ case 1:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 94 "asn1p_l.l"
+#line 95 "asn1p_l.l"
/* Immediately terminated long comment */
YY_BREAK
case 2:
@@ -2156,67 +2157,67 @@ case 2:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 95 "asn1p_l.l"
+#line 96 "asn1p_l.l"
yy_push_state(idash_comment); /* Incorrect, but acceptable */
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 97 "asn1p_l.l"
+#line 98 "asn1p_l.l"
yy_pop_state(); /* Acceptable end of comment */
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 100 "asn1p_l.l"
+#line 101 "asn1p_l.l"
asn1p_as_pointer = 1;
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 102 "asn1p_l.l"
+#line 103 "asn1p_l.l"
yy_push_state(dash_comment);
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 105 "asn1p_l.l"
+#line 106 "asn1p_l.l"
yy_pop_state();
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 107 "asn1p_l.l"
+#line 108 "asn1p_l.l"
yy_pop_state(); /* End of comment */
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 108 "asn1p_l.l"
+#line 109 "asn1p_l.l"
/* Eat single dash */
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 109 "asn1p_l.l"
+#line 110 "asn1p_l.l"
/* Eat */
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 112 "asn1p_l.l"
+#line 113 "asn1p_l.l"
yy_push_state(cpp_comment);
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 114 "asn1p_l.l"
+#line 115 "asn1p_l.l"
/* Eat */
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 115 "asn1p_l.l"
+#line 116 "asn1p_l.l"
yy_pop_state();
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 116 "asn1p_l.l"
+#line 117 "asn1p_l.l"
/* Eat */
YY_BREAK
@@ -2229,7 +2230,7 @@ YY_RULE_SETUP
case 14:
YY_RULE_SETUP
-#line 128 "asn1p_l.l"
+#line 129 "asn1p_l.l"
{
yy_push_state(opaque);
asn1p_lval.tv_opaque.buf = strdup(yytext);
@@ -2239,7 +2240,7 @@ YY_RULE_SETUP
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 135 "asn1p_l.l"
+#line 136 "asn1p_l.l"
{
yy_pop_state();
asn1p_lval.tv_opaque.buf = strdup(yytext);
@@ -2249,7 +2250,7 @@ YY_RULE_SETUP
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 142 "asn1p_l.l"
+#line 143 "asn1p_l.l"
{
asn1p_lval.tv_opaque.buf = strdup(yytext);
asn1p_lval.tv_opaque.len = yyleng;
@@ -2258,7 +2259,7 @@ YY_RULE_SETUP
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 148 "asn1p_l.l"
+#line 149 "asn1p_l.l"
{
fprintf(stderr,
"ASN.1 Parser syncronization failure: "
@@ -2270,7 +2271,7 @@ YY_RULE_SETUP
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 157 "asn1p_l.l"
+#line 158 "asn1p_l.l"
{
asn1p_lval.tv_opaque.buf = strdup(yytext);
asn1p_lval.tv_opaque.len = yyleng;
@@ -2280,7 +2281,7 @@ YY_RULE_SETUP
case 19:
YY_RULE_SETUP
-#line 165 "asn1p_l.l"
+#line 166 "asn1p_l.l"
{
asn1p_lval.tv_opaque.buf = 0;
asn1p_lval.tv_opaque.len = 0;
@@ -2291,17 +2292,17 @@ YY_RULE_SETUP
case 20:
YY_RULE_SETUP
-#line 173 "asn1p_l.l"
+#line 174 "asn1p_l.l"
{ QAPPEND(yytext, yyleng-1); } /* Add a single quote */
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 174 "asn1p_l.l"
+#line 175 "asn1p_l.l"
{ QAPPEND(yytext, yyleng); }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 176 "asn1p_l.l"
+#line 177 "asn1p_l.l"
{
yy_pop_state();
/* Do not append last quote:
@@ -2322,7 +2323,7 @@ YY_RULE_SETUP
case 23:
YY_RULE_SETUP
-#line 195 "asn1p_l.l"
+#line 196 "asn1p_l.l"
{
const char *s = "ENCODING-CONTROL";
const char *p = s + sizeof("ENCODING-CONTROL") - 2;
@@ -2332,33 +2333,33 @@ YY_RULE_SETUP
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 201 "asn1p_l.l"
+#line 202 "asn1p_l.l"
unput('D'); unput('N'); unput('E'); yy_pop_state();
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 202 "asn1p_l.l"
+#line 203 "asn1p_l.l"
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 203 "asn1p_l.l"
+#line 204 "asn1p_l.l"
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 204 "asn1p_l.l"
+#line 205 "asn1p_l.l"
/* Eat everything else */
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 205 "asn1p_l.l"
+#line 206 "asn1p_l.l"
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 208 "asn1p_l.l"
+#line 209 "asn1p_l.l"
{
/* " \t\r\n" weren't allowed in ASN.1:1990. */
asn1p_lval.tv_str = yytext;
@@ -2367,7 +2368,7 @@ YY_RULE_SETUP
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 214 "asn1p_l.l"
+#line 215 "asn1p_l.l"
{
/* " \t\r\n" weren't allowed in ASN.1:1990. */
asn1p_lval.tv_str = strdup(yytext);
@@ -2376,9 +2377,9 @@ YY_RULE_SETUP
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 221 "asn1p_l.l"
+#line 222 "asn1p_l.l"
{
- asn1p_lval.a_int = asn1p_atoi(yytext);
+ asn1p_lval.a_int = _lex_atoi(yytext);
if(errno == ERANGE)
return -1;
return TOK_number_negative;
@@ -2386,9 +2387,9 @@ YY_RULE_SETUP
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 228 "asn1p_l.l"
+#line 229 "asn1p_l.l"
{
- asn1p_lval.a_int = asn1p_atoi(yytext);
+ asn1p_lval.a_int = _lex_atoi(yytext);
if(errno == ERANGE)
return -1;
return TOK_number;
@@ -2396,9 +2397,9 @@ YY_RULE_SETUP
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 235 "asn1p_l.l"
+#line 236 "asn1p_l.l"
{
- asn1p_lval.a_int = asn1p_atoi(yytext);
+ asn1p_lval.a_int = _lex_atoi(yytext);
if(errno == ERANGE)
return -1;
return TOK_number;
@@ -2406,17 +2407,17 @@ YY_RULE_SETUP
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 242 "asn1p_l.l"
+#line 243 "asn1p_l.l"
return TOK_ABSENT;
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 243 "asn1p_l.l"
+#line 244 "asn1p_l.l"
return TOK_ALL;
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 244 "asn1p_l.l"
+#line 245 "asn1p_l.l"
{
/* Appeared in 1990, removed in 1997 */
if(TYPE_LIFETIME(1990, 1997))
@@ -2428,27 +2429,27 @@ YY_RULE_SETUP
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 252 "asn1p_l.l"
+#line 253 "asn1p_l.l"
return TOK_APPLICATION;
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 253 "asn1p_l.l"
+#line 254 "asn1p_l.l"
return TOK_AUTOMATIC;
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 254 "asn1p_l.l"
+#line 255 "asn1p_l.l"
return TOK_BEGIN;
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 255 "asn1p_l.l"
+#line 256 "asn1p_l.l"
return TOK_BIT;
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 256 "asn1p_l.l"
+#line 257 "asn1p_l.l"
{
if(TYPE_LIFETIME(1994, 0))
return TOK_BMPString;
@@ -2457,57 +2458,57 @@ YY_RULE_SETUP
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 261 "asn1p_l.l"
+#line 262 "asn1p_l.l"
return TOK_BOOLEAN;
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 262 "asn1p_l.l"
+#line 263 "asn1p_l.l"
return TOK_BY;
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 263 "asn1p_l.l"
+#line 264 "asn1p_l.l"
return TOK_CHARACTER;
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 264 "asn1p_l.l"
+#line 265 "asn1p_l.l"
return TOK_CHOICE;
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 265 "asn1p_l.l"
+#line 266 "asn1p_l.l"
return TOK_CLASS;
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 266 "asn1p_l.l"
+#line 267 "asn1p_l.l"
return TOK_COMPONENT;
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 267 "asn1p_l.l"
+#line 268 "asn1p_l.l"
return TOK_COMPONENTS;
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 268 "asn1p_l.l"
+#line 269 "asn1p_l.l"
return TOK_CONSTRAINED;
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 269 "asn1p_l.l"
+#line 270 "asn1p_l.l"
return TOK_CONTAINING;
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 270 "asn1p_l.l"
+#line 271 "asn1p_l.l"
return TOK_DEFAULT;
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 271 "asn1p_l.l"
+#line 272 "asn1p_l.l"
{
/* Appeared in 1990, removed in 1997 */
if(TYPE_LIFETIME(1990, 1997))
@@ -2520,292 +2521,292 @@ YY_RULE_SETUP
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 280 "asn1p_l.l"
+#line 281 "asn1p_l.l"
return TOK_DEFINITIONS;
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 281 "asn1p_l.l"
+#line 282 "asn1p_l.l"
return TOK_EMBEDDED;
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 282 "asn1p_l.l"
+#line 283 "asn1p_l.l"
return TOK_ENCODED;
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 283 "asn1p_l.l"
+#line 284 "asn1p_l.l"
return TOK_ENCODING_CONTROL;
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 284 "asn1p_l.l"
+#line 285 "asn1p_l.l"
return TOK_END;
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 285 "asn1p_l.l"
+#line 286 "asn1p_l.l"
return TOK_ENUMERATED;
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 286 "asn1p_l.l"
+#line 287 "asn1p_l.l"
return TOK_EXCEPT;
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 287 "asn1p_l.l"
+#line 288 "asn1p_l.l"
return TOK_EXPLICIT;
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 288 "asn1p_l.l"
+#line 289 "asn1p_l.l"
return TOK_EXPORTS;
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 289 "asn1p_l.l"
+#line 290 "asn1p_l.l"
return TOK_EXTENSIBILITY;
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 290 "asn1p_l.l"
+#line 291 "asn1p_l.l"
return TOK_EXTERNAL;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 291 "asn1p_l.l"
+#line 292 "asn1p_l.l"
return TOK_FALSE;
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 292 "asn1p_l.l"
+#line 293 "asn1p_l.l"
return TOK_FROM;
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 293 "asn1p_l.l"
+#line 294 "asn1p_l.l"
return TOK_GeneralizedTime;
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 294 "asn1p_l.l"
+#line 295 "asn1p_l.l"
return TOK_GeneralString;
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 295 "asn1p_l.l"
+#line 296 "asn1p_l.l"
return TOK_GraphicString;
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 296 "asn1p_l.l"
+#line 297 "asn1p_l.l"
return TOK_IA5String;
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 297 "asn1p_l.l"
+#line 298 "asn1p_l.l"
return TOK_IDENTIFIER;
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 298 "asn1p_l.l"
+#line 299 "asn1p_l.l"
return TOK_IMPLICIT;
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 299 "asn1p_l.l"
+#line 300 "asn1p_l.l"
return TOK_IMPLIED;
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 300 "asn1p_l.l"
+#line 301 "asn1p_l.l"
return TOK_IMPORTS;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 301 "asn1p_l.l"
+#line 302 "asn1p_l.l"
return TOK_INCLUDES;
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 302 "asn1p_l.l"
+#line 303 "asn1p_l.l"
return TOK_INSTANCE;
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 303 "asn1p_l.l"
+#line 304 "asn1p_l.l"
return TOK_INSTRUCTIONS;
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 304 "asn1p_l.l"
+#line 305 "asn1p_l.l"
return TOK_INTEGER;
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 305 "asn1p_l.l"
+#line 306 "asn1p_l.l"
return TOK_INTERSECTION;
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 306 "asn1p_l.l"
+#line 307 "asn1p_l.l"
return TOK_ISO646String;
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 307 "asn1p_l.l"
+#line 308 "asn1p_l.l"
return TOK_MAX;
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 308 "asn1p_l.l"
+#line 309 "asn1p_l.l"
return TOK_MIN;
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 309 "asn1p_l.l"
+#line 310 "asn1p_l.l"
return TOK_MINUS_INFINITY;
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 310 "asn1p_l.l"
+#line 311 "asn1p_l.l"
return TOK_NULL;
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 311 "asn1p_l.l"
+#line 312 "asn1p_l.l"
return TOK_NumericString;
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 312 "asn1p_l.l"
+#line 313 "asn1p_l.l"
return TOK_OBJECT;
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 313 "asn1p_l.l"
+#line 314 "asn1p_l.l"
return TOK_ObjectDescriptor;
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 314 "asn1p_l.l"
+#line 315 "asn1p_l.l"
return TOK_OCTET;
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 315 "asn1p_l.l"
+#line 316 "asn1p_l.l"
return TOK_OF;
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 316 "asn1p_l.l"
+#line 317 "asn1p_l.l"
return TOK_OPTIONAL;
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 317 "asn1p_l.l"
+#line 318 "asn1p_l.l"
return TOK_PATTERN;
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 318 "asn1p_l.l"
+#line 319 "asn1p_l.l"
return TOK_PDV;
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 319 "asn1p_l.l"
+#line 320 "asn1p_l.l"
return TOK_PLUS_INFINITY;
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 320 "asn1p_l.l"
+#line 321 "asn1p_l.l"
return TOK_PRESENT;
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 321 "asn1p_l.l"
+#line 322 "asn1p_l.l"
return TOK_PrintableString;
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 322 "asn1p_l.l"
+#line 323 "asn1p_l.l"
return TOK_PRIVATE;
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 323 "asn1p_l.l"
+#line 324 "asn1p_l.l"
return TOK_REAL;
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 324 "asn1p_l.l"
+#line 325 "asn1p_l.l"
return TOK_RELATIVE_OID;
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 325 "asn1p_l.l"
+#line 326 "asn1p_l.l"
return TOK_SEQUENCE;
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 326 "asn1p_l.l"
+#line 327 "asn1p_l.l"
return TOK_SET;
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 327 "asn1p_l.l"
+#line 328 "asn1p_l.l"
return TOK_SIZE;
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 328 "asn1p_l.l"
+#line 329 "asn1p_l.l"
return TOK_STRING;
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 329 "asn1p_l.l"
+#line 330 "asn1p_l.l"
return TOK_SYNTAX;
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 330 "asn1p_l.l"
+#line 331 "asn1p_l.l"
return TOK_T61String;
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 331 "asn1p_l.l"
+#line 332 "asn1p_l.l"
return TOK_TAGS;
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 332 "asn1p_l.l"
+#line 333 "asn1p_l.l"
return TOK_TeletexString;
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 333 "asn1p_l.l"
+#line 334 "asn1p_l.l"
return TOK_TRUE;
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 334 "asn1p_l.l"
+#line 335 "asn1p_l.l"
return TOK_UNION;
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 335 "asn1p_l.l"
+#line 336 "asn1p_l.l"
return TOK_UNIQUE;
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 336 "asn1p_l.l"
+#line 337 "asn1p_l.l"
return TOK_UNIVERSAL;
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 337 "asn1p_l.l"
+#line 338 "asn1p_l.l"
{
if(TYPE_LIFETIME(1994, 0))
return TOK_UniversalString;
@@ -2814,12 +2815,12 @@ YY_RULE_SETUP
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 342 "asn1p_l.l"
+#line 343 "asn1p_l.l"
return TOK_UTCTime;
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 343 "asn1p_l.l"
+#line 344 "asn1p_l.l"
{
if(TYPE_LIFETIME(1994, 0))
return TOK_UTF8String;
@@ -2828,22 +2829,22 @@ YY_RULE_SETUP
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 348 "asn1p_l.l"
+#line 349 "asn1p_l.l"
return TOK_VideotexString;
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 349 "asn1p_l.l"
+#line 350 "asn1p_l.l"
return TOK_VisibleString;
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 350 "asn1p_l.l"
+#line 351 "asn1p_l.l"
return TOK_WITH;
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 353 "asn1p_l.l"
+#line 354 "asn1p_l.l"
{
asn1p_lval.tv_str = strdup(yytext);
return TOK_typefieldreference;
@@ -2851,7 +2852,7 @@ YY_RULE_SETUP
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 358 "asn1p_l.l"
+#line 359 "asn1p_l.l"
{
asn1p_lval.tv_str = strdup(yytext);
return TOK_valuefieldreference;
@@ -2859,7 +2860,7 @@ YY_RULE_SETUP
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 364 "asn1p_l.l"
+#line 365 "asn1p_l.l"
{
asn1p_lval.tv_str = strdup(yytext);
return TOK_identifier;
@@ -2870,7 +2871,7 @@ YY_RULE_SETUP
*/
case 119:
YY_RULE_SETUP
-#line 372 "asn1p_l.l"
+#line 373 "asn1p_l.l"
{
asn1p_lval.tv_str = strdup(yytext);
return TOK_capitalreference;
@@ -2883,7 +2884,7 @@ YY_RULE_SETUP
*/
case 120:
YY_RULE_SETUP
-#line 382 "asn1p_l.l"
+#line 383 "asn1p_l.l"
{
asn1p_lval.tv_str = strdup(yytext);
return TOK_typereference;
@@ -2891,23 +2892,23 @@ YY_RULE_SETUP
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 387 "asn1p_l.l"
+#line 388 "asn1p_l.l"
return TOK_PPEQ;
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 389 "asn1p_l.l"
+#line 390 "asn1p_l.l"
return TOK_ThreeDots;
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 390 "asn1p_l.l"
+#line 391 "asn1p_l.l"
return TOK_TwoDots;
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 394 "asn1p_l.l"
+#line 395 "asn1p_l.l"
{
asn1p_lval.tv_str = strdup(yytext);
return TOK_Literal;
@@ -2915,7 +2916,7 @@ YY_RULE_SETUP
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 399 "asn1p_l.l"
+#line 400 "asn1p_l.l"
{
asn1p_lval.tv_str = strdup(yytext);
return TOK_Literal;
@@ -2923,7 +2924,7 @@ YY_RULE_SETUP
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 404 "asn1p_l.l"
+#line 405 "asn1p_l.l"
{
yy_push_state(with_syntax);
asn1p_lval.tv_str = strdup(yytext);
@@ -2932,17 +2933,17 @@ YY_RULE_SETUP
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 410 "asn1p_l.l"
+#line 411 "asn1p_l.l"
return '[';
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 411 "asn1p_l.l"
+#line 412 "asn1p_l.l"
return ']';
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 413 "asn1p_l.l"
+#line 414 "asn1p_l.l"
{
asn1p_lval.tv_opaque.buf = strdup(yytext);
asn1p_lval.tv_opaque.len = yyleng;
@@ -2951,7 +2952,7 @@ YY_RULE_SETUP
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 419 "asn1p_l.l"
+#line 420 "asn1p_l.l"
{
yy_pop_state();
if(YYSTATE == with_syntax) {
@@ -2965,21 +2966,21 @@ YY_RULE_SETUP
case 131:
YY_RULE_SETUP
-#line 432 "asn1p_l.l"
+#line 433 "asn1p_l.l"
/* Ignore whitespace */
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 435 "asn1p_l.l"
+#line 436 "asn1p_l.l"
{
asn1c_integer_t v1 = -1, v2 = -1;
char *p;
for(p = yytext; *p; p++)
if(*p >= '0' && *p <= '9')
- { v1 = asn1p_atoi(p); break; }
+ { v1 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++; /* Skip digits */
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v2 = asn1p_atoi(p); break; }
+ { v2 = _lex_atoi(p); break; }
if(v1 < 0 || v1 > 7) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
"mandates 0..7 range for Tuple's TableColumn\n",
@@ -2998,22 +2999,22 @@ YY_RULE_SETUP
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 460 "asn1p_l.l"
+#line 461 "asn1p_l.l"
{
asn1c_integer_t v1 = -1, v2 = -1, v3 = -1, v4 = -1;
char *p;
for(p = yytext; *p; p++)
if(*p >= '0' && *p <= '9')
- { v1 = asn1p_atoi(p); break; }
+ { v1 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++; /* Skip digits */
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v2 = asn1p_atoi(p); break; }
+ { v2 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++;
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v3 = asn1p_atoi(p); break; }
+ { v3 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++;
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v4 = asn1p_atoi(p); break; }
+ { v4 = _lex_atoi(p); break; }
if(v1 < 0 || v1 > 127) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
"mandates 0..127 range for Quadruple's Group\n",
@@ -3044,12 +3045,12 @@ YY_RULE_SETUP
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 504 "asn1p_l.l"
+#line 505 "asn1p_l.l"
return yytext[0];
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 506 "asn1p_l.l"
+#line 507 "asn1p_l.l"
{
if(TYPE_LIFETIME(1994, 0))
fprintf(stderr, "ERROR: ");
@@ -3063,7 +3064,7 @@ YY_RULE_SETUP
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 517 "asn1p_l.l"
+#line 518 "asn1p_l.l"
{
fprintf(stderr,
"Unexpected token at line %d: \"%s\"\n",
@@ -3085,7 +3086,7 @@ case YY_STATE_EOF(quoted):
case YY_STATE_EOF(opaque):
case YY_STATE_EOF(encoding_control):
case YY_STATE_EOF(with_syntax):
-#line 530 "asn1p_l.l"
+#line 531 "asn1p_l.l"
{
while(YYSTATE != INITIAL)
yy_pop_state();
@@ -3094,10 +3095,10 @@ case YY_STATE_EOF(with_syntax):
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 537 "asn1p_l.l"
+#line 538 "asn1p_l.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 3101 "asn1p_l.c"
+#line 3102 "asn1p_l.c"
case YY_END_OF_BUFFER:
{
@@ -3979,7 +3980,7 @@ int main()
return 0;
}
#endif
-#line 537 "asn1p_l.l"
+#line 538 "asn1p_l.l"
/*
@@ -3998,30 +3999,14 @@ void asn1p_lexer_hack_push_encoding_control() {
}
static asn1c_integer_t
-asn1p_atoi(char *ptr) {
+_lex_atoi(const char *ptr) {
asn1c_integer_t value;
- errno = 0; /* Clear the error code */
-
- if(sizeof(value) <= sizeof(int)) {
- value = strtol(ptr, 0, 10);
- } else {
-#ifdef HAVE_STRTOIMAX
- value = strtoimax(ptr, 0, 10);
-#elif HAVE_STRTOLL
- value = strtoll(ptr, 0, 10);
-#else
- value = strtol(ptr, 0, 10);
-#endif
- }
-
- if(errno == ERANGE) {
+ if(asn1p_atoi(ptr, &value)) {
fprintf(stderr,
"Value \"%s\" at line %d is too large "
"for this compiler! Please contact the asn1c author.\n",
ptr, yylineno);
- errno = ERANGE; /* Restore potentially clobbered errno */
+ errno = ERANGE;
}
-
return value;
}
-
diff --git a/libasn1parser/asn1p_l.l b/libasn1parser/asn1p_l.l
index e440d421..2594b556 100644
--- a/libasn1parser/asn1p_l.l
+++ b/libasn1parser/asn1p_l.l
@@ -23,10 +23,11 @@ void asn1p_lexer_hack_push_encoding_control(void); /* Used in .y */
int asn1p_lexer_pedantic_1990 = 0;
int asn1p_lexer_types_year = 0;
int asn1p_lexer_constructs_year = 0;
-static asn1c_integer_t asn1p_atoi(char *ptr); /* errno is either 0 or ERANGE */
int asn1p_as_pointer;
+static asn1c_integer_t _lex_atoi(const char *ptr);
+
/*
* Check that the type is defined in the year of the standard choosen.
*/
@@ -219,21 +220,21 @@ WSP [\t\r\v\f\n ]
-[1-9][0-9]* {
- asn1p_lval.a_int = asn1p_atoi(yytext);
+ asn1p_lval.a_int = _lex_atoi(yytext);
if(errno == ERANGE)
return -1;
return TOK_number_negative;
}
[1-9][0-9]* {
- asn1p_lval.a_int = asn1p_atoi(yytext);
+ asn1p_lval.a_int = _lex_atoi(yytext);
if(errno == ERANGE)
return -1;
return TOK_number;
}
"0" {
- asn1p_lval.a_int = asn1p_atoi(yytext);
+ asn1p_lval.a_int = _lex_atoi(yytext);
if(errno == ERANGE)
return -1;
return TOK_number;
@@ -437,10 +438,10 @@ WITH return TOK_WITH;
char *p;
for(p = yytext; *p; p++)
if(*p >= '0' && *p <= '9')
- { v1 = asn1p_atoi(p); break; }
+ { v1 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++; /* Skip digits */
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v2 = asn1p_atoi(p); break; }
+ { v2 = _lex_atoi(p); break; }
if(v1 < 0 || v1 > 7) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
"mandates 0..7 range for Tuple's TableColumn\n",
@@ -462,16 +463,16 @@ WITH return TOK_WITH;
char *p;
for(p = yytext; *p; p++)
if(*p >= '0' && *p <= '9')
- { v1 = asn1p_atoi(p); break; }
+ { v1 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++; /* Skip digits */
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v2 = asn1p_atoi(p); break; }
+ { v2 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++;
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v3 = asn1p_atoi(p); break; }
+ { v3 = _lex_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++;
for(; *p; p++) if(*p >= '0' && *p <= '9')
- { v4 = asn1p_atoi(p); break; }
+ { v4 = _lex_atoi(p); break; }
if(v1 < 0 || v1 > 127) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
"mandates 0..127 range for Quadruple's Group\n",
@@ -552,30 +553,14 @@ void asn1p_lexer_hack_push_encoding_control() {
}
static asn1c_integer_t
-asn1p_atoi(char *ptr) {
+_lex_atoi(const char *ptr) {
asn1c_integer_t value;
- errno = 0; /* Clear the error code */
-
- if(sizeof(value) <= sizeof(int)) {
- value = strtol(ptr, 0, 10);
- } else {
-#ifdef HAVE_STRTOIMAX
- value = strtoimax(ptr, 0, 10);
-#elif HAVE_STRTOLL
- value = strtoll(ptr, 0, 10);
-#else
- value = strtol(ptr, 0, 10);
-#endif
- }
-
- if(errno == ERANGE) {
+ if(asn1p_atoi(ptr, &value)) {
fprintf(stderr,
"Value \"%s\" at line %d is too large "
"for this compiler! Please contact the asn1c author.\n",
ptr, yylineno);
- errno = ERANGE; /* Restore potentially clobbered errno */
+ errno = ERANGE;
}
-
return value;
}
-
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index b00f051d..02e0ba99 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -223,11 +223,11 @@ typedef union {
-#define YYFINAL 446
+#define YYFINAL 445
#define YYFLAG -32768
#define YYNTBASE 120
-#define YYTRANSLATE(x) ((unsigned)(x) <= 358 ? yytranslate[x] : 227)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 358 ? yytranslate[x] : 226)
static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -283,141 +283,140 @@ static const short yyprhs[] = { 0,
293, 295, 298, 300, 302, 304, 308, 310, 314, 318,
322, 323, 326, 328, 333, 338, 343, 350, 357, 359,
364, 369, 371, 375, 377, 381, 385, 389, 391, 395,
- 397, 401, 403, 405, 407, 409, 411, 415, 419, 421,
- 426, 430, 431, 435, 437, 439, 441, 443, 445, 447,
- 449, 451, 453, 457, 459, 461, 463, 465, 468, 470,
- 472, 474, 476, 479, 482, 484, 486, 489, 492, 494,
- 496, 498, 500, 502, 505, 507, 510, 512, 514, 516,
+ 397, 401, 403, 405, 407, 409, 413, 417, 419, 424,
+ 428, 429, 433, 435, 437, 439, 441, 443, 445, 447,
+ 449, 451, 455, 457, 459, 461, 463, 466, 468, 470,
+ 472, 474, 477, 480, 482, 484, 487, 490, 492, 494,
+ 496, 498, 500, 503, 505, 508, 510, 512, 514, 516,
518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
- 538, 540, 542, 544, 546, 548, 549, 551, 553, 558,
- 562, 567, 569, 573, 579, 581, 585, 589, 593, 597,
- 602, 606, 608, 610, 614, 618, 622, 626, 628, 630,
- 631, 637, 639, 642, 645, 649, 651, 653, 655, 657,
- 659, 661, 663, 665, 669, 675, 677, 681, 683, 687,
- 688, 690, 692, 694, 696, 698, 700, 704, 709, 711,
- 715, 718, 722, 724, 728, 729, 731, 733, 736, 739,
- 743, 745, 749, 751, 756, 761, 763, 765, 767, 769,
- 770, 772, 775, 780, 781, 783, 785, 787, 788, 790,
- 792, 794, 796, 798, 799, 801
+ 538, 540, 542, 544, 546, 547, 549, 551, 556, 560,
+ 565, 567, 571, 577, 579, 583, 587, 591, 595, 600,
+ 604, 606, 608, 612, 616, 620, 624, 626, 628, 629,
+ 635, 637, 640, 643, 647, 649, 651, 653, 655, 657,
+ 659, 661, 663, 667, 673, 675, 679, 681, 685, 686,
+ 688, 690, 692, 694, 696, 698, 702, 707, 709, 713,
+ 716, 720, 722, 726, 727, 729, 731, 734, 737, 741,
+ 743, 747, 749, 754, 759, 761, 763, 765, 767, 768,
+ 770, 773, 778, 779, 781, 783, 785, 786, 788, 790,
+ 792, 794, 796, 797, 799
};
static const short yyrhs[] = { 121,
- 0, 122, 0, 121, 122, 0, 223, 123, 38, 127,
+ 0, 122, 0, 121, 122, 0, 222, 123, 38, 127,
3, 25, 130, 43, 0, 0, 124, 0, 107, 125,
108, 0, 107, 108, 0, 126, 0, 125, 126, 0,
- 226, 0, 226, 109, 10, 110, 0, 10, 0, 0,
+ 225, 0, 225, 109, 10, 110, 0, 10, 0, 0,
128, 0, 129, 0, 128, 129, 0, 45, 88, 0,
56, 88, 0, 24, 88, 0, 47, 57, 0, 15,
61, 0, 0, 131, 0, 132, 0, 131, 132, 0,
- 134, 0, 140, 0, 146, 0, 177, 0, 143, 0,
- 0, 42, 15, 133, 0, 186, 0, 58, 135, 111,
+ 134, 0, 140, 0, 146, 0, 176, 0, 143, 0,
+ 0, 42, 15, 133, 0, 185, 0, 58, 135, 111,
0, 58, 50, 0, 137, 0, 135, 137, 0, 0,
- 124, 0, 138, 50, 223, 136, 0, 139, 0, 138,
- 112, 139, 0, 223, 0, 223, 107, 108, 0, 226,
+ 124, 0, 138, 50, 222, 136, 0, 139, 0, 138,
+ 112, 139, 0, 222, 0, 222, 107, 108, 0, 225,
0, 46, 141, 111, 0, 46, 21, 111, 0, 46,
- 111, 0, 142, 0, 141, 112, 142, 0, 223, 0,
- 223, 107, 108, 0, 226, 0, 0, 223, 145, 3,
- 107, 144, 182, 0, 170, 0, 183, 0, 223, 3,
- 166, 0, 223, 3, 156, 0, 223, 107, 147, 108,
- 3, 166, 0, 148, 0, 147, 112, 148, 0, 223,
- 0, 223, 113, 226, 0, 223, 113, 223, 0, 183,
- 113, 226, 0, 150, 0, 149, 112, 150, 0, 166,
- 0, 226, 0, 0, 152, 0, 153, 0, 152, 112,
- 153, 0, 226, 166, 212, 0, 166, 212, 0, 34,
+ 111, 0, 142, 0, 141, 112, 142, 0, 222, 0,
+ 222, 107, 108, 0, 225, 0, 0, 222, 145, 3,
+ 107, 144, 181, 0, 170, 0, 182, 0, 222, 3,
+ 166, 0, 222, 3, 156, 0, 222, 107, 147, 108,
+ 3, 166, 0, 148, 0, 147, 112, 148, 0, 222,
+ 0, 222, 113, 225, 0, 222, 113, 222, 0, 182,
+ 113, 225, 0, 150, 0, 149, 112, 150, 0, 166,
+ 0, 225, 0, 0, 152, 0, 153, 0, 152, 112,
+ 153, 0, 225, 166, 211, 0, 166, 211, 0, 34,
72, 166, 0, 165, 0, 155, 0, 154, 112, 155,
- 0, 226, 166, 0, 165, 0, 166, 0, 32, 107,
+ 0, 225, 166, 0, 165, 0, 166, 0, 32, 107,
158, 108, 160, 0, 0, 92, 0, 159, 0, 158,
- 112, 159, 0, 16, 212, 0, 17, 166, 157, 212,
- 0, 17, 175, 212, 0, 17, 176, 212, 0, 16,
- 175, 212, 0, 16, 166, 212, 0, 16, 176, 212,
+ 112, 159, 0, 16, 211, 0, 17, 166, 157, 211,
+ 0, 17, 174, 211, 0, 17, 175, 211, 0, 16,
+ 174, 211, 0, 16, 166, 211, 0, 16, 175, 211,
0, 0, 161, 0, 0, 99, 86, 107, 162, 163,
108, 0, 164, 0, 163, 164, 0, 4, 0, 18,
0, 173, 0, 114, 163, 115, 0, 106, 0, 106,
- 116, 180, 0, 106, 116, 217, 0, 218, 168, 190,
- 0, 0, 167, 169, 0, 185, 0, 31, 107, 154,
+ 116, 179, 0, 106, 116, 216, 0, 217, 168, 189,
+ 0, 0, 167, 169, 0, 184, 0, 31, 107, 154,
108, 0, 82, 107, 151, 108, 0, 83, 107, 151,
- 108, 0, 82, 190, 72, 225, 218, 168, 0, 83,
- 190, 72, 225, 218, 168, 0, 22, 0, 22, 39,
- 29, 226, 0, 223, 107, 149, 108, 0, 170, 0,
- 60, 72, 170, 0, 14, 0, 14, 117, 223, 0,
- 224, 117, 223, 0, 14, 117, 226, 0, 224, 0,
- 224, 117, 171, 0, 172, 0, 171, 117, 172, 0,
- 174, 0, 174, 0, 16, 0, 17, 0, 16, 0,
- 175, 117, 16, 0, 175, 117, 17, 0, 15, 0,
- 226, 145, 3, 178, 0, 226, 113, 178, 0, 0,
- 107, 179, 182, 0, 67, 0, 49, 0, 90, 0,
- 6, 0, 8, 0, 181, 0, 217, 0, 180, 0,
- 226, 0, 223, 117, 226, 0, 7, 0, 11, 0,
- 12, 0, 5, 0, 182, 5, 0, 28, 0, 67,
- 0, 80, 0, 184, 0, 71, 85, 0, 69, 55,
- 0, 81, 0, 48, 0, 40, 75, 0, 30, 85,
- 0, 95, 0, 51, 0, 186, 0, 62, 0, 44,
- 0, 26, 85, 0, 183, 0, 184, 214, 0, 27,
- 0, 52, 0, 53, 0, 54, 0, 63, 0, 68,
- 0, 78, 0, 87, 0, 89, 0, 94, 0, 96,
- 0, 97, 0, 98, 0, 70, 0, 103, 0, 104,
- 0, 101, 0, 102, 0, 100, 0, 0, 191, 0,
- 192, 0, 84, 109, 193, 110, 0, 109, 193, 110,
- 0, 192, 109, 193, 110, 0, 194, 0, 194, 112,
- 106, 0, 194, 112, 106, 112, 194, 0, 195, 0,
- 21, 100, 195, 0, 194, 187, 195, 0, 194, 188,
- 195, 0, 195, 189, 195, 0, 198, 109, 193, 110,
- 0, 109, 193, 110, 0, 199, 0, 200, 0, 199,
- 197, 199, 0, 65, 197, 199, 0, 199, 197, 64,
- 0, 65, 197, 64, 0, 206, 0, 201, 0, 0,
- 35, 29, 107, 196, 182, 0, 105, 0, 105, 118,
- 0, 118, 105, 0, 118, 105, 118, 0, 84, 0,
- 50, 0, 49, 0, 90, 0, 217, 0, 181, 0,
- 226, 0, 223, 0, 99, 33, 192, 0, 99, 34,
- 107, 202, 108, 0, 203, 0, 202, 112, 203, 0,
- 106, 0, 226, 190, 204, 0, 0, 205, 0, 77,
- 0, 19, 0, 73, 0, 207, 0, 208, 0, 107,
- 223, 108, 0, 207, 107, 209, 108, 0, 210, 0,
- 209, 112, 210, 0, 119, 211, 0, 119, 117, 211,
- 0, 226, 0, 211, 117, 226, 0, 0, 213, 0,
- 73, 0, 37, 178, 0, 107, 108, 0, 107, 215,
- 108, 0, 216, 0, 215, 112, 216, 0, 226, 0,
- 226, 109, 217, 110, 0, 226, 109, 180, 110, 0,
- 217, 0, 106, 0, 10, 0, 13, 0, 0, 219,
- 0, 220, 222, 0, 114, 221, 10, 115, 0, 0,
- 93, 0, 23, 0, 79, 0, 0, 56, 0, 45,
- 0, 14, 0, 15, 0, 15, 0, 0, 226, 0,
- 9, 0
+ 108, 0, 82, 189, 72, 224, 217, 168, 0, 83,
+ 189, 72, 224, 217, 168, 0, 22, 0, 22, 39,
+ 29, 225, 0, 222, 107, 149, 108, 0, 170, 0,
+ 60, 72, 170, 0, 14, 0, 14, 117, 222, 0,
+ 223, 117, 222, 0, 14, 117, 225, 0, 223, 0,
+ 223, 117, 171, 0, 172, 0, 171, 117, 172, 0,
+ 173, 0, 16, 0, 17, 0, 16, 0, 174, 117,
+ 16, 0, 174, 117, 17, 0, 15, 0, 225, 145,
+ 3, 177, 0, 225, 113, 177, 0, 0, 107, 178,
+ 181, 0, 67, 0, 49, 0, 90, 0, 6, 0,
+ 8, 0, 180, 0, 216, 0, 179, 0, 225, 0,
+ 222, 117, 225, 0, 7, 0, 11, 0, 12, 0,
+ 5, 0, 181, 5, 0, 28, 0, 67, 0, 80,
+ 0, 183, 0, 71, 85, 0, 69, 55, 0, 81,
+ 0, 48, 0, 40, 75, 0, 30, 85, 0, 95,
+ 0, 51, 0, 185, 0, 62, 0, 44, 0, 26,
+ 85, 0, 182, 0, 183, 213, 0, 27, 0, 52,
+ 0, 53, 0, 54, 0, 63, 0, 68, 0, 78,
+ 0, 87, 0, 89, 0, 94, 0, 96, 0, 97,
+ 0, 98, 0, 70, 0, 103, 0, 104, 0, 101,
+ 0, 102, 0, 100, 0, 0, 190, 0, 191, 0,
+ 84, 109, 192, 110, 0, 109, 192, 110, 0, 191,
+ 109, 192, 110, 0, 193, 0, 193, 112, 106, 0,
+ 193, 112, 106, 112, 193, 0, 194, 0, 21, 100,
+ 194, 0, 193, 186, 194, 0, 193, 187, 194, 0,
+ 194, 188, 194, 0, 197, 109, 192, 110, 0, 109,
+ 192, 110, 0, 198, 0, 199, 0, 198, 196, 198,
+ 0, 65, 196, 198, 0, 198, 196, 64, 0, 65,
+ 196, 64, 0, 205, 0, 200, 0, 0, 35, 29,
+ 107, 195, 181, 0, 105, 0, 105, 118, 0, 118,
+ 105, 0, 118, 105, 118, 0, 84, 0, 50, 0,
+ 49, 0, 90, 0, 216, 0, 180, 0, 225, 0,
+ 222, 0, 99, 33, 191, 0, 99, 34, 107, 201,
+ 108, 0, 202, 0, 201, 112, 202, 0, 106, 0,
+ 225, 189, 203, 0, 0, 204, 0, 77, 0, 19,
+ 0, 73, 0, 206, 0, 207, 0, 107, 222, 108,
+ 0, 206, 107, 208, 108, 0, 209, 0, 208, 112,
+ 209, 0, 119, 210, 0, 119, 117, 210, 0, 225,
+ 0, 210, 117, 225, 0, 0, 212, 0, 73, 0,
+ 37, 177, 0, 107, 108, 0, 107, 214, 108, 0,
+ 215, 0, 214, 112, 215, 0, 225, 0, 225, 109,
+ 216, 110, 0, 225, 109, 179, 110, 0, 216, 0,
+ 106, 0, 10, 0, 13, 0, 0, 218, 0, 219,
+ 221, 0, 114, 220, 10, 115, 0, 0, 93, 0,
+ 23, 0, 79, 0, 0, 56, 0, 45, 0, 14,
+ 0, 15, 0, 15, 0, 0, 225, 0, 9, 0
};
#endif
#if YYDEBUG != 0
static const short yyrline[] = { 0,
- 324, 330, 336, 352, 377, 379, 382, 386, 391, 398,
- 406, 411, 415, 424, 426, 434, 438, 446, 450, 453,
- 456, 460, 480, 482, 490, 494, 526, 530, 539, 546,
- 559, 566, 568, 580, 592, 603, 608, 614, 620, 622,
- 625, 636, 642, 648, 655, 661, 669, 673, 676, 683,
- 689, 695, 702, 708, 717, 719, 728, 736, 750, 760,
- 776, 785, 795, 805, 810, 817, 824, 834, 840, 846,
- 850, 873, 875, 877, 883, 889, 897, 903, 910, 915,
- 921, 927, 933, 936, 942, 952, 954, 957, 965, 972,
- 985, 996, 1006, 1017, 1027, 1038, 1049, 1051, 1056, 1060,
- 1065, 1070, 1076, 1081, 1084, 1093, 1098, 1107, 1116, 1127,
- 1149, 1156, 1175, 1179, 1185, 1191, 1197, 1207, 1217, 1223,
- 1237, 1261, 1268, 1282, 1291, 1301, 1311, 1321, 1329, 1350,
- 1359, 1368, 1369, 1371, 1378, 1385, 1391, 1395, 1401, 1421,
- 1431, 1439, 1439, 1444, 1449, 1454, 1459, 1463, 1467, 1470,
- 1473, 1478, 1490, 1507, 1512, 1517, 1550, 1560, 1574, 1576,
- 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586,
- 1587, 1593, 1595, 1596, 1599, 1606, 1618, 1620, 1624, 1628,
- 1629, 1630, 1631, 1632, 1636, 1637, 1638, 1639, 1643, 1644,
- 1651, 1651, 1652, 1652, 1653, 1655, 1657, 1662, 1666, 1675,
- 1679, 1684, 1688, 1694, 1704, 1708, 1711, 1714, 1717, 1722,
- 1731, 1739, 1745, 1751, 1758, 1766, 1774, 1783, 1786, 1789,
- 1790, 1800, 1802, 1803, 1804, 1807, 1811, 1816, 1822, 1827,
- 1830, 1833, 1846, 1860, 1864, 1869, 1873, 1878, 1885, 1898,
- 1900, 1903, 1907, 1910, 1915, 1919, 1927, 1942, 1948, 1955,
- 1968, 1980, 1995, 1999, 2016, 2021, 2024, 2029, 2051, 2056,
- 2061, 2067, 2073, 2081, 2089, 2097, 2104, 2114, 2119, 2149,
- 2151, 2154, 2161, 2167, 2169, 2170, 2171, 2174, 2176, 2177,
- 2180, 2185, 2192, 2199, 2201, 2206
+ 323, 329, 335, 351, 376, 378, 381, 385, 390, 397,
+ 405, 410, 414, 423, 425, 433, 437, 445, 449, 452,
+ 455, 459, 479, 481, 489, 493, 525, 529, 538, 545,
+ 558, 565, 567, 579, 591, 602, 607, 613, 619, 621,
+ 624, 635, 641, 647, 654, 660, 668, 672, 675, 682,
+ 688, 694, 701, 707, 716, 718, 727, 735, 749, 759,
+ 775, 784, 794, 804, 809, 816, 823, 833, 839, 845,
+ 849, 872, 874, 876, 882, 888, 896, 902, 909, 914,
+ 920, 926, 932, 935, 941, 951, 953, 956, 964, 971,
+ 984, 995, 1005, 1016, 1026, 1037, 1048, 1050, 1055, 1059,
+ 1064, 1069, 1075, 1080, 1083, 1087, 1092, 1101, 1110, 1121,
+ 1143, 1150, 1169, 1173, 1179, 1185, 1191, 1201, 1211, 1217,
+ 1231, 1255, 1262, 1276, 1285, 1295, 1305, 1315, 1323, 1344,
+ 1353, 1362, 1364, 1371, 1378, 1384, 1388, 1394, 1414, 1424,
+ 1432, 1432, 1437, 1442, 1447, 1452, 1456, 1460, 1463, 1466,
+ 1471, 1483, 1500, 1505, 1510, 1543, 1553, 1567, 1569, 1570,
+ 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580,
+ 1586, 1588, 1589, 1592, 1599, 1611, 1613, 1617, 1621, 1622,
+ 1623, 1624, 1625, 1629, 1630, 1631, 1632, 1636, 1637, 1644,
+ 1644, 1645, 1645, 1646, 1648, 1650, 1655, 1659, 1668, 1672,
+ 1677, 1681, 1687, 1697, 1701, 1704, 1707, 1710, 1715, 1724,
+ 1732, 1738, 1744, 1751, 1759, 1767, 1776, 1779, 1782, 1783,
+ 1793, 1795, 1796, 1797, 1800, 1804, 1809, 1815, 1820, 1823,
+ 1826, 1839, 1853, 1857, 1862, 1866, 1871, 1878, 1891, 1893,
+ 1896, 1900, 1903, 1908, 1912, 1920, 1935, 1941, 1948, 1961,
+ 1973, 1988, 1992, 2009, 2014, 2017, 2022, 2044, 2049, 2054,
+ 2060, 2066, 2074, 2082, 2090, 2097, 2107, 2112, 2142, 2144,
+ 2147, 2154, 2160, 2162, 2163, 2164, 2167, 2169, 2170, 2173,
+ 2178, 2185, 2192, 2194, 2199
};
#endif
@@ -457,7 +456,7 @@ static const char * const yytname[] = { "$","error","$undefined.","TOK_PPEQ",
"FieldSpec","ClassField","optWithSyntax","WithSyntax","@3","WithSyntaxList",
"WithSyntaxToken","ExtensionAndException","Type","NSTD_IndirectMarker","TypeDeclaration",
"TypeDeclarationSet","ComplexTypeReference","ComplexTypeReferenceAmpList","ComplexTypeReferenceElement",
-"ClassFieldIdentifier","ClassFieldName","FieldName","DefinedObjectClass","ValueDefinition",
+"PrimitiveFieldReference","FieldName","DefinedObjectClass","ValueDefinition",
"Value","@4","DefinedValue","RestrictedCharacterStringValue","Opaque","BasicTypeId",
"BasicTypeId_UniverationCompatible","BasicType","BasicString","Union","Intersection",
"Except","optConstraints","Constraints","SetOfConstraints","ElementSetSpecs",
@@ -485,22 +484,22 @@ static const short yyr1[] = { 0,
163, 163, 164, 164, 164, 164, 165, 165, 165, 166,
167, 168, 169, 169, 169, 169, 169, 169, 169, 169,
169, 169, 169, 170, 170, 170, 170, 170, 170, 171,
- 171, 172, 173, 174, 174, 175, 175, 175, 176, 177,
- 178, 179, 178, 178, 178, 178, 178, 178, 178, 178,
- 178, 180, 180, 181, 181, 181, 182, 182, 183, 183,
- 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
- 183, 184, 184, 184, 185, 185, 186, 186, 186, 186,
- 186, 186, 186, 186, 186, 186, 186, 186, 186, 186,
- 187, 187, 188, 188, 189, 190, 190, 191, 191, 192,
- 192, 193, 193, 193, 194, 194, 194, 194, 194, 195,
- 195, 195, 195, 195, 195, 195, 195, 195, 195, 196,
- 195, 197, 197, 197, 197, 198, 198, 199, 199, 199,
- 199, 199, 200, 201, 201, 202, 202, 203, 203, 204,
- 204, 205, 205, 205, 206, 206, 207, 208, 209, 209,
- 210, 210, 211, 211, 212, 212, 213, 213, 214, 214,
- 215, 215, 216, 216, 216, 216, 216, 217, 217, 218,
- 218, 219, 220, 221, 221, 221, 221, 222, 222, 222,
- 223, 223, 224, 225, 225, 226
+ 171, 172, 173, 173, 174, 174, 174, 175, 176, 177,
+ 178, 177, 177, 177, 177, 177, 177, 177, 177, 177,
+ 179, 179, 180, 180, 180, 181, 181, 182, 182, 182,
+ 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+ 183, 183, 183, 184, 184, 185, 185, 185, 185, 185,
+ 185, 185, 185, 185, 185, 185, 185, 185, 185, 186,
+ 186, 187, 187, 188, 189, 189, 190, 190, 191, 191,
+ 192, 192, 192, 193, 193, 193, 193, 193, 194, 194,
+ 194, 194, 194, 194, 194, 194, 194, 194, 195, 194,
+ 196, 196, 196, 196, 197, 197, 198, 198, 198, 198,
+ 198, 199, 200, 200, 201, 201, 202, 202, 203, 203,
+ 204, 204, 204, 205, 205, 206, 207, 208, 208, 209,
+ 209, 210, 210, 211, 211, 212, 212, 213, 213, 214,
+ 214, 215, 215, 215, 215, 215, 216, 216, 217, 217,
+ 218, 219, 220, 220, 220, 220, 221, 221, 221, 222,
+ 222, 223, 224, 224, 225
};
static const short yyr2[] = { 0,
@@ -517,146 +516,146 @@ static const short yyr2[] = { 0,
1, 2, 1, 1, 1, 3, 1, 3, 3, 3,
0, 2, 1, 4, 4, 4, 6, 6, 1, 4,
4, 1, 3, 1, 3, 3, 3, 1, 3, 1,
- 3, 1, 1, 1, 1, 1, 3, 3, 1, 4,
- 3, 0, 3, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 3, 1, 1, 1, 1, 2, 1, 1,
- 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
- 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
+ 3, 1, 1, 1, 1, 3, 3, 1, 4, 3,
+ 0, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 3, 1, 1, 1, 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, 1, 0, 1, 1, 4, 3,
- 4, 1, 3, 5, 1, 3, 3, 3, 3, 4,
- 3, 1, 1, 3, 3, 3, 3, 1, 1, 0,
- 5, 1, 2, 2, 3, 1, 1, 1, 1, 1,
- 1, 1, 1, 3, 5, 1, 3, 1, 3, 0,
- 1, 1, 1, 1, 1, 1, 3, 4, 1, 3,
- 2, 3, 1, 3, 0, 1, 1, 2, 2, 3,
- 1, 3, 1, 4, 4, 1, 1, 1, 1, 0,
- 1, 2, 4, 0, 1, 1, 1, 0, 1, 1,
- 1, 1, 1, 0, 1, 1
+ 1, 1, 1, 1, 0, 1, 1, 4, 3, 4,
+ 1, 3, 5, 1, 3, 3, 3, 3, 4, 3,
+ 1, 1, 3, 3, 3, 3, 1, 1, 0, 5,
+ 1, 2, 2, 3, 1, 1, 1, 1, 1, 1,
+ 1, 1, 3, 5, 1, 3, 1, 3, 0, 1,
+ 1, 1, 1, 1, 1, 3, 4, 1, 3, 2,
+ 3, 1, 3, 0, 1, 1, 2, 2, 3, 1,
+ 3, 1, 4, 4, 1, 1, 1, 1, 0, 1,
+ 2, 4, 0, 1, 1, 1, 0, 1, 1, 1,
+ 1, 1, 0, 1, 1
};
static const short yydefact[] = { 0,
- 281, 282, 1, 2, 5, 3, 0, 0, 6, 286,
+ 280, 281, 1, 2, 5, 3, 0, 0, 6, 285,
13, 8, 0, 9, 11, 14, 7, 10, 0, 0,
0, 0, 0, 0, 0, 15, 16, 0, 22, 20,
- 18, 21, 19, 0, 17, 12, 23, 177, 0, 0,
- 178, 179, 180, 0, 181, 182, 190, 183, 184, 185,
- 186, 187, 188, 189, 0, 24, 25, 27, 28, 31,
+ 18, 21, 19, 0, 17, 12, 23, 176, 0, 0,
+ 177, 178, 179, 0, 180, 181, 189, 182, 183, 184,
+ 185, 186, 187, 188, 0, 24, 25, 27, 28, 31,
29, 30, 34, 0, 0, 32, 0, 49, 0, 50,
52, 54, 36, 0, 37, 0, 42, 44, 46, 4,
- 26, 270, 124, 283, 0, 159, 0, 0, 173, 166,
- 170, 172, 160, 0, 0, 161, 165, 169, 0, 0,
- 57, 58, 162, 171, 128, 0, 33, 48, 47, 0,
- 0, 35, 38, 0, 0, 0, 0, 274, 60, 59,
- 111, 271, 278, 0, 174, 168, 167, 164, 163, 0,
+ 26, 269, 124, 282, 0, 158, 0, 0, 172, 165,
+ 169, 171, 159, 0, 0, 160, 164, 168, 0, 0,
+ 57, 58, 161, 170, 128, 0, 33, 48, 47, 0,
+ 0, 35, 38, 0, 0, 0, 0, 273, 60, 59,
+ 111, 270, 277, 0, 173, 167, 166, 163, 162, 0,
62, 0, 64, 0, 0, 0, 51, 53, 39, 43,
- 45, 0, 276, 277, 275, 0, 0, 196, 280, 279,
- 272, 125, 127, 0, 0, 0, 0, 55, 134, 135,
- 129, 130, 132, 126, 147, 154, 148, 268, 155, 156,
- 269, 145, 144, 146, 142, 140, 151, 149, 150, 0,
- 152, 40, 41, 270, 270, 0, 88, 0, 124, 283,
- 119, 0, 0, 196, 196, 112, 122, 175, 162, 113,
- 0, 0, 0, 110, 197, 198, 270, 63, 67, 66,
- 65, 0, 0, 0, 0, 0, 139, 136, 0, 257,
- 255, 255, 255, 90, 256, 86, 255, 255, 97, 0,
- 273, 0, 270, 0, 270, 0, 270, 0, 0, 176,
- 270, 0, 0, 0, 228, 227, 0, 226, 229, 0,
- 0, 0, 231, 0, 202, 205, 0, 212, 213, 219,
- 218, 245, 246, 230, 233, 232, 0, 61, 157, 56,
- 131, 143, 153, 141, 258, 95, 0, 94, 96, 87,
- 255, 92, 93, 0, 85, 98, 89, 0, 107, 0,
- 80, 83, 84, 270, 123, 0, 0, 73, 74, 79,
- 255, 270, 284, 0, 284, 267, 259, 0, 261, 266,
- 263, 0, 68, 70, 71, 0, 0, 0, 222, 0,
- 0, 0, 0, 0, 0, 200, 193, 194, 191, 192,
- 0, 0, 0, 195, 0, 0, 0, 0, 0, 158,
- 137, 138, 91, 0, 120, 0, 114, 270, 82, 270,
- 115, 270, 77, 255, 270, 285, 116, 270, 260, 0,
- 0, 121, 270, 199, 206, 220, 223, 224, 217, 215,
- 234, 0, 247, 211, 203, 207, 208, 209, 0, 216,
- 214, 0, 0, 249, 201, 99, 108, 109, 152, 81,
- 78, 75, 76, 111, 111, 262, 0, 0, 69, 0,
- 225, 238, 0, 236, 196, 0, 210, 0, 251, 253,
- 248, 0, 0, 117, 118, 265, 264, 221, 235, 0,
- 240, 204, 252, 0, 250, 103, 104, 0, 0, 101,
- 105, 133, 237, 243, 244, 242, 239, 241, 254, 0,
- 100, 102, 106, 0, 0, 0
+ 45, 0, 275, 276, 274, 0, 0, 195, 279, 278,
+ 271, 125, 127, 0, 0, 0, 0, 55, 133, 134,
+ 129, 130, 132, 126, 146, 153, 147, 267, 154, 155,
+ 268, 144, 143, 145, 141, 139, 150, 148, 149, 0,
+ 151, 40, 41, 269, 269, 0, 88, 0, 124, 282,
+ 119, 0, 0, 195, 195, 112, 122, 174, 161, 113,
+ 0, 0, 0, 110, 196, 197, 269, 63, 67, 66,
+ 65, 0, 0, 0, 0, 0, 138, 135, 0, 256,
+ 254, 254, 254, 90, 255, 86, 254, 254, 97, 0,
+ 272, 0, 269, 0, 269, 0, 269, 0, 0, 175,
+ 269, 0, 0, 0, 227, 226, 0, 225, 228, 0,
+ 0, 0, 230, 0, 201, 204, 0, 211, 212, 218,
+ 217, 244, 245, 229, 232, 231, 0, 61, 156, 56,
+ 131, 142, 152, 140, 257, 95, 0, 94, 96, 87,
+ 254, 92, 93, 0, 85, 98, 89, 0, 107, 0,
+ 80, 83, 84, 269, 123, 0, 0, 73, 74, 79,
+ 254, 269, 283, 0, 283, 266, 258, 0, 260, 265,
+ 262, 0, 68, 70, 71, 0, 0, 0, 221, 0,
+ 0, 0, 0, 0, 0, 199, 192, 193, 190, 191,
+ 0, 0, 0, 194, 0, 0, 0, 0, 0, 157,
+ 136, 137, 91, 0, 120, 0, 114, 269, 82, 269,
+ 115, 269, 77, 254, 269, 284, 116, 269, 259, 0,
+ 0, 121, 269, 198, 205, 219, 222, 223, 216, 214,
+ 233, 0, 246, 210, 202, 206, 207, 208, 0, 215,
+ 213, 0, 0, 248, 200, 99, 108, 109, 151, 81,
+ 78, 75, 76, 111, 111, 261, 0, 0, 69, 0,
+ 224, 237, 0, 235, 195, 0, 209, 0, 250, 252,
+ 247, 0, 0, 117, 118, 264, 263, 220, 234, 0,
+ 239, 203, 251, 0, 249, 103, 104, 0, 0, 101,
+ 105, 236, 242, 243, 241, 238, 240, 253, 0, 100,
+ 102, 106, 0, 0, 0
};
-static const short yydefgoto[] = { 444,
+static const short yydefgoto[] = { 443,
3, 4, 8, 9, 13, 14, 25, 26, 27, 55,
56, 57, 107, 58, 74, 183, 75, 76, 77, 59,
69, 70, 60, 212, 100, 61, 130, 131, 312, 313,
297, 298, 299, 290, 291, 119, 281, 186, 187, 285,
286, 413, 429, 430, 300, 301, 147, 148, 196, 101,
- 161, 162, 431, 432, 222, 223, 62, 176, 214, 177,
- 253, 270, 102, 103, 200, 104, 332, 333, 335, 204,
- 205, 206, 254, 255, 256, 400, 321, 257, 258, 259,
- 260, 403, 404, 437, 438, 261, 262, 263, 383, 384,
- 409, 224, 225, 240, 308, 309, 264, 121, 122, 123,
- 146, 151, 265, 105, 355, 266
+ 161, 162, 431, 222, 223, 62, 176, 214, 177, 253,
+ 270, 102, 103, 200, 104, 332, 333, 335, 204, 205,
+ 206, 254, 255, 256, 400, 321, 257, 258, 259, 260,
+ 403, 404, 436, 437, 261, 262, 263, 383, 384, 409,
+ 224, 225, 240, 308, 309, 264, 121, 122, 123, 146,
+ 151, 265, 105, 355, 266
};
static const short yypact[] = { 223,
-32768,-32768, 223,-32768, -76,-32768, 30, 24,-32768,-32768,
-32768,-32768, 34,-32768, -61, 247,-32768,-32768, 61, 27,
- 52, 71, 55, 77, 99, 247,-32768, 76,-32768,-32768,
--32768,-32768,-32768, 181,-32768,-32768, 428,-32768, 187, 49,
+ 71, 84, 145, 118, 210, 247,-32768, 109,-32768,-32768,
+-32768,-32768,-32768, 199,-32768,-32768, 428,-32768, 212, 49,
-32768,-32768,-32768, 154,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768, 176, 428,-32768,-32768,-32768,-32768,
--32768,-32768,-32768, 352, 581,-32768, 102,-32768, 199,-32768,
- 117,-32768,-32768, 59,-32768, -26,-32768, 120,-32768,-32768,
--32768, -15, 112,-32768, 179,-32768, 193, 165,-32768,-32768,
--32768,-32768,-32768, 211, 208,-32768,-32768,-32768, 657, 266,
--32768,-32768,-32768,-32768, 169, 299,-32768,-32768,-32768, 286,
- 200,-32768,-32768, 223, 286, 206, 210, 3,-32768,-32768,
+-32768,-32768,-32768,-32768, 186, 428,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768, 352, 581,-32768, 129,-32768, 174,-32768,
+ 157,-32768,-32768, 59,-32768, -26,-32768, 159,-32768,-32768,
+-32768, -15, 152,-32768, 193,-32768, 204, 218,-32768,-32768,
+-32768,-32768,-32768, 262, 217,-32768,-32768,-32768, 657, 337,
+-32768,-32768,-32768,-32768, 220, 343,-32768,-32768,-32768, 286,
+ 244,-32768,-32768, 223, 286, 249, 256, 3,-32768,-32768,
-32768,-32768, 45, 286,-32768,-32768,-32768,-32768,-32768, -23,
--32768, 224, 227, 239, 319, 184,-32768,-32768, -76,-32768,
--32768, 312,-32768,-32768,-32768, 340, 505, 57,-32768,-32768,
--32768,-32768,-32768, 354, 657, 355, 286,-32768,-32768,-32768,
- 246,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 259,
- 264,-32768,-32768, 168, 37, 35,-32768, 268, 65, 274,
+-32768, 251, 255, 263, 294, 184,-32768,-32768, -76,-32768,
+-32768, 297,-32768,-32768,-32768, 359, 505, 57,-32768,-32768,
+-32768,-32768,-32768, 368, 657, 363, 286,-32768,-32768,-32768,
+ 259,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 260,
+ 268,-32768,-32768, 168, 37, 32,-32768, 258, 48, 276,
345, 278, 314, 116, 170,-32768,-32768,-32768, 280,-32768,
281, 282, 166,-32768,-32768, 285, 275,-32768,-32768,-32768,
--32768, 385, 326, 385, 355, 184,-32768,-32768, 184,-32768,
- 98, 94, 98,-32768,-32768, 303, 94, 98, 298, 312,
--32768, 369, 7, 334, 16, 330, 16, 335, 56,-32768,
- 14, 166, 310, 380,-32768,-32768, -25,-32768,-32768, 318,
+-32768, 385, 312, 385, 363, 184,-32768,-32768, 184,-32768,
+ 98, 94, 98,-32768,-32768, 303, 94, 98, 298, 297,
+-32768, 369, 7, 328, 16, 330, 16, 335, 56,-32768,
+ 14, 166, 310, 380,-32768,-32768, -25,-32768,-32768, 315,
223, 166,-32768, 301, 203, 324, 316, -25,-32768,-32768,
-32768, 305,-32768,-32768,-32768,-32768, 166,-32768,-32768, 421,
--32768, 421,-32768,-32768,-32768,-32768, 344,-32768,-32768,-32768,
- 98,-32768,-32768, 341,-32768,-32768,-32768, 355, 313, 131,
+-32768, 421,-32768,-32768,-32768,-32768, 334,-32768,-32768,-32768,
+ 98,-32768,-32768, 341,-32768,-32768,-32768, 363, 313, 35,
-32768,-32768,-32768, 275,-32768, 356, 323, 322,-32768,-32768,
- 98, 275, 355, 327, 355,-32768,-32768, 141,-32768,-32768,
- 329, 155,-32768,-32768,-32768, 342, 309, 333, 336, 331,
- 235, 347, 337, 343, 348,-32768,-32768,-32768,-32768,-32768,
- 339, 309, 309,-32768, 309, 166, 248, 338, 350,-32768,
--32768,-32768,-32768, 346,-32768, 317,-32768, 7,-32768, 275,
+ 98, 275, 363, 327, 363,-32768,-32768, 74,-32768,-32768,
+ 329, 131,-32768,-32768,-32768, 326, 309, 333, 336, 339,
+ 235, 342, 338, 344, 346,-32768,-32768,-32768,-32768,-32768,
+ 347, 309, 309,-32768, 309, 166, 248, 348, 350,-32768,
+-32768,-32768,-32768, 351,-32768, 317,-32768, 7,-32768, 275,
-32768, 12,-32768, 98, 275,-32768,-32768, 275,-32768, 68,
- 317,-32768, 14,-32768,-32768,-32768,-32768, 349,-32768,-32768,
- 285, 0,-32768,-32768, 351,-32768,-32768,-32768, 358,-32768,
--32768, 6, 177,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768, 359, 361,-32768, 385,
--32768,-32768, 201,-32768, 57, 166,-32768, 355, 360,-32768,
--32768, 338, 43,-32768,-32768,-32768,-32768, 421,-32768, 0,
- 10, 267, 360, 355,-32768,-32768,-32768, 43, 38,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 18,
--32768,-32768,-32768, 461, 462,-32768
+ 317,-32768, 14,-32768,-32768,-32768,-32768, 353,-32768,-32768,
+ 285, 0,-32768,-32768, 349,-32768,-32768,-32768, 354,-32768,
+-32768, 6, 141,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768, 355, 358,-32768, 385,
+-32768,-32768, 155,-32768, 57, 166,-32768, 363, 340,-32768,
+-32768, 348, 43,-32768,-32768,-32768,-32768, 421,-32768, 0,
+ 10, 232, 340, 363,-32768,-32768,-32768, 43, 38,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 18,-32768,
+-32768,-32768, 462, 463,-32768
};
static const short yypgoto[] = {-32768,
--32768, 463,-32768, 325,-32768, 452,-32768,-32768, 446,-32768,
--32768, 417,-32768,-32768,-32768,-32768, 401,-32768, 363,-32768,
--32768, 366,-32768,-32768, 414,-32768,-32768, 328,-32768, 121,
- 250,-32768, 133,-32768, 140,-32768,-32768,-32768, 260,-32768,
--32768,-32768, 64, -285, -228, -80,-32768, -22,-32768, -137,
--32768, 276,-32768, -115, 308, 315,-32768, -31,-32768, -207,
- -109, -211, -71, 357,-32768, -5,-32768,-32768,-32768, -187,
--32768, 172, -133, 89, -45,-32768, 241,-32768, -242,-32768,
--32768,-32768, 81,-32768,-32768,-32768,-32768,-32768,-32768, 85,
- 95, -209,-32768,-32768,-32768, 142, -125, -148,-32768,-32768,
--32768,-32768, 1,-32768, 202, -7
+-32768, 466,-32768, 360,-32768, 453,-32768,-32768, 446,-32768,
+-32768, 417,-32768,-32768,-32768,-32768, 401,-32768, 361,-32768,
+-32768, 367,-32768,-32768, 413,-32768,-32768, 332,-32768, 120,
+ 242,-32768, 132,-32768, 137,-32768,-32768,-32768, 264,-32768,
+-32768,-32768, 60, -327, -228, -80,-32768, -34,-32768, -137,
+-32768, 277, -115, 304, 307,-32768, -31,-32768, -207, -109,
+ -211, -71, 357,-32768, -5,-32768,-32768,-32768, -187,-32768,
+ 171, -133, 89, -45,-32768, 239,-32768, -242,-32768,-32768,
+-32768, 80,-32768,-32768,-32768,-32768,-32768,-32768, 90, 93,
+ -209,-32768,-32768,-32768, 143, -125, -148,-32768,-32768,-32768,
+-32768, 1,-32768, 200, -7
};
@@ -666,55 +665,55 @@ static const short yypgoto[] = {-32768,
static const short yytable[] = { 15,
5, 120, 272, 5, 292, 15, 236, 238, 10, 197,
179, 276, 278, 279, 10, 10, 117, 282, 283, 163,
- 10, 426, 10, 114, 10, 143, 178, 132, 434, 65,
+ 10, 426, 10, 114, 10, 143, 178, 132, 433, 65,
7, 63, 72, 159, 160, 427, 79, 64, 10, 11,
71, 426, 10, 11, 78, 296, 426, 19, 65, 296,
63, 217, 218, 159, 160, 427, 64, 10, 159, 160,
427, 16, 1, 2, 10, 168, 79, 10, 171, 67,
28, 343, 1, 2, 78, 198, 10, 168, 370, 319,
- 171, 144, 435, 132, 154, 115, 436, 29, 155, 149,
+ 171, 144, 434, 132, 154, 115, 435, 29, 155, 149,
179, 353, 320, 179, 381, 145, 295, 163, 118, 133,
- 150, 34, 72, 221, 226, 402, 178, 79, 316, 178,
- 71, 32, 289, 310, 139, 78, 153, 289, 325, 292,
+ 150, 441, 72, 221, 226, 402, 178, 79, 316, 178,
+ 71, 441, 289, 310, 139, 78, 153, 289, 325, 292,
118, 289, 408, -72, 152, 118, 268, 118, 181, 118,
- 219, 428, 443, 339, 219, 164, 180, 12, 387, 30,
- 202, 17, 229, 442, 393, 441, 230, 201, 209, 211,
- 118, 428, 293, 397, 442, 133, 428, 210, 31, 68,
- 314, 306, 10, 307, 33, 203, 220, 1, 2, 112,
- 220, -281, 166, 306, 10, 168, 169, 170, 171, 1,
- 2, 124, 217, 218, 274, 36, 243, 275, 418, 165,
+ 219, 428, 442, 339, 219, 164, 180, 12, 387, 229,
+ 202, 17, 347, 230, 393, 440, 348, 201, 209, 211,
+ 118, 428, 293, 397, -280, 133, 428, 210, 30, 68,
+ 314, 306, 10, 307, 124, 203, 220, 1, 2, 112,
+ 220, 31, 166, 306, 10, 168, 169, 170, 171, 1,
+ 2, 359, 217, 218, 274, 360, 243, 275, 418, 165,
166, 167, 10, 168, 169, 170, 171, 1, 2, 202,
- 244, 66, 379, 73, 219, 37, 394, 273, 181, 395,
- 277, 181, 108, 349, 245, 246, 180, 421, 80, 180,
- 388, 354, 235, 111, 203, 294, 116, 302, 124, 302,
- 247, 311, 172, 315, 310, 398, 1, 2, 347, 127,
- 220, 166, 348, 10, 168, 169, 170, 171, 359, 248,
- 173, 324, 360, 202, 166, 249, 10, 168, 169, 170,
- 171, 20, 362, 125, 250, 128, 363, 293, 134, 391,
- 21, 365, 251, 174, 252, -255, 237, 126, 203, -255,
- 345, 118, 314, 245, 411, 135, 376, 377, 412, 378,
- 175, 22, 129, 23, 10, 356, 245, 356, 369, 1,
- 2, 136, 24, 327, 328, 329, 330, 138, 419, 109,
- 110, 380, 420, 141, 331, 166, 142, 10, 168, 169,
- 170, 171, 1, 2, 249, 10, 168, 184, 185, 171,
- 1, 2, 1, 2, 159, 160, 156, 249, 389, 157,
- 294, 159, 160, 244, 302, 158, 180, 83, 84, 188,
- 322, 323, 311, 389, 82, 315, 207, 245, 246, 341,
- 342, 180, 213, 10, 405, 83, 84, 327, 328, 329,
- 330, 414, 415, 247, 410, 215, 216, 85, 38, 86,
- -282, 87, 231, 232, 233, 234, 239, 241, 118, 269,
+ 244, 32, 379, 73, 219, 33, 394, 273, 181, 395,
+ 277, 181, 34, 349, 245, 246, 180, 421, 36, 180,
+ 388, 354, 235, 37, 203, 294, 66, 302, 80, 302,
+ 247, 311, 172, 315, 310, 398, 1, 2, 362, 108,
+ 220, 166, 363, 10, 168, 169, 170, 171, 411, 248,
+ 173, 324, 412, 202, 166, 249, 10, 168, 169, 170,
+ 171, 20, 419, 111, 250, 116, 420, 293, 124, 391,
+ 21, 365, 251, 174, 252, -254, 237, 125, 203, -254,
+ 345, 118, 314, 245, 109, 110, 376, 377, 126, 378,
+ 175, 22, 127, 23, 10, 356, 245, 356, 369, 1,
+ 2, 129, 24, 327, 328, 329, 330, 1, 2, 159,
+ 160, 380, 184, 185, 331, 166, 128, 10, 168, 169,
+ 170, 171, 1, 2, 249, 10, 168, 159, 160, 171,
+ 1, 2, 327, 328, 329, 330, 135, 249, 389, 134,
+ 294, 83, 84, 244, 302, 136, 180, 322, 323, 341,
+ 342, 138, 311, 389, 82, 315, 141, 245, 246, 414,
+ 415, 180, 142, 156, 405, 83, 84, 157, 188, 158,
+ 207, 10, 231, 247, 410, 213, 215, 85, 38, 86,
+ 216, 87, -281, 232, 233, 234, 239, 241, 118, 269,
242, 88, 248, 267, 280, 89, 284, 288, 249, 90,
410, 303, 91, 41, 42, 43, 305, 250, 318, 317,
- 326, 338, 405, 92, 45, 251, 439, 252, 93, 46,
+ 326, 338, 405, 92, 45, 251, 438, 252, 93, 46,
94, 47, 95, 334, 336, 340, 344, 350, 346, 48,
- 351, 96, 97, 352, 357, 368, 10, 361, 49, 366,
- 50, 1, 2, 372, 375, 51, 98, 52, 53, 54,
- 373, 364, 386, 367, 38, 203, 382, 374, 99, 385,
- 445, 446, 406, 182, 18, 6, 401, 407, 416, 39,
- 417, 35, 81, 40, 113, 137, 424, 140, 106, 41,
- 42, 43, 208, 399, 392, 44, 304, 390, 271, 287,
- 45, 440, 227, 371, 422, 46, 425, 47, 337, 228,
- 433, 396, 423, 199, 0, 48, 358, 0, 0, 0,
+ 351, 96, 97, 352, 357, 364, 10, 361, 49, 366,
+ 50, 1, 2, 368, 372, 51, 98, 52, 53, 54,
+ 203, 373, 375, 367, 38, 374, 424, 386, 99, 385,
+ 406, 444, 445, 407, 416, 18, 382, 417, 6, 39,
+ 401, 35, 81, 40, 113, 140, 137, 106, 304, 41,
+ 42, 43, 399, 392, 390, 44, 208, 439, 227, 271,
+ 45, 228, 371, 287, 422, 46, 337, 47, 182, 432,
+ 423, 425, 396, 199, 358, 48, 0, 0, 0, 0,
0, 0, 0, 0, 49, 0, 50, 0, 189, 190,
0, 51, 0, 52, 53, 54, 191, 0, 0, 0,
85, 38, 86, 0, 87, 192, 0, 0, 0, 0,
@@ -753,47 +752,47 @@ static const short yycheck[] = { 7,
10, 281, 14, 15, 74, 147, 9, 10, 321, 105,
13, 79, 73, 155, 108, 112, 77, 61, 112, 45,
216, 301, 118, 219, 337, 93, 234, 213, 114, 99,
- 56, 3, 110, 184, 185, 106, 216, 115, 242, 219,
- 110, 57, 106, 239, 114, 115, 124, 106, 252, 348,
+ 56, 429, 110, 184, 185, 106, 216, 115, 242, 219,
+ 110, 439, 106, 239, 114, 115, 124, 106, 252, 348,
114, 106, 117, 108, 124, 114, 207, 114, 136, 114,
- 37, 114, 115, 267, 37, 135, 136, 108, 346, 88,
- 84, 108, 108, 429, 354, 108, 112, 147, 156, 157,
- 114, 114, 233, 361, 440, 155, 114, 157, 88, 111,
- 241, 106, 9, 108, 88, 109, 73, 14, 15, 111,
- 73, 107, 7, 106, 9, 10, 11, 12, 13, 14,
- 15, 117, 15, 16, 216, 110, 21, 219, 400, 6,
+ 37, 114, 115, 267, 37, 135, 136, 108, 346, 108,
+ 84, 108, 108, 112, 354, 108, 112, 147, 156, 157,
+ 114, 114, 233, 361, 107, 155, 114, 157, 88, 111,
+ 241, 106, 9, 108, 117, 109, 73, 14, 15, 111,
+ 73, 88, 7, 106, 9, 10, 11, 12, 13, 14,
+ 15, 108, 15, 16, 216, 112, 21, 219, 400, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 84,
- 35, 15, 336, 50, 37, 25, 355, 215, 216, 358,
- 117, 219, 111, 294, 49, 50, 216, 405, 43, 219,
- 346, 302, 107, 107, 109, 233, 107, 235, 117, 237,
- 65, 239, 49, 241, 360, 361, 14, 15, 108, 75,
+ 35, 57, 336, 50, 37, 88, 355, 215, 216, 358,
+ 117, 219, 3, 294, 49, 50, 216, 405, 110, 219,
+ 346, 302, 107, 25, 109, 233, 15, 235, 43, 237,
+ 65, 239, 49, 241, 360, 361, 14, 15, 108, 111,
73, 7, 112, 9, 10, 11, 12, 13, 108, 84,
67, 251, 112, 84, 7, 90, 9, 10, 11, 12,
- 13, 15, 108, 85, 99, 55, 112, 348, 3, 350,
+ 13, 15, 108, 107, 99, 107, 112, 348, 117, 350,
24, 317, 107, 90, 109, 108, 107, 85, 109, 112,
- 288, 114, 363, 49, 108, 117, 332, 333, 112, 335,
- 107, 45, 85, 47, 9, 303, 49, 305, 64, 14,
- 15, 3, 56, 101, 102, 103, 104, 108, 108, 111,
- 112, 64, 112, 108, 112, 7, 107, 9, 10, 11,
+ 288, 114, 363, 49, 111, 112, 332, 333, 85, 335,
+ 107, 45, 75, 47, 9, 303, 49, 305, 64, 14,
+ 15, 85, 56, 101, 102, 103, 104, 14, 15, 16,
+ 17, 64, 16, 17, 112, 7, 55, 9, 10, 11,
12, 13, 14, 15, 90, 9, 10, 16, 17, 13,
- 14, 15, 14, 15, 16, 17, 113, 90, 346, 113,
- 348, 16, 17, 35, 352, 107, 346, 14, 15, 10,
- 33, 34, 360, 361, 3, 363, 3, 49, 50, 16,
- 17, 361, 117, 9, 372, 14, 15, 101, 102, 103,
- 104, 394, 395, 65, 382, 117, 113, 26, 27, 28,
- 107, 30, 115, 39, 107, 72, 107, 107, 114, 5,
+ 14, 15, 101, 102, 103, 104, 117, 90, 346, 3,
+ 348, 14, 15, 35, 352, 3, 346, 33, 34, 16,
+ 17, 108, 360, 361, 3, 363, 108, 49, 50, 394,
+ 395, 361, 107, 113, 372, 14, 15, 113, 10, 107,
+ 3, 9, 115, 65, 382, 117, 117, 26, 27, 28,
+ 113, 30, 107, 39, 107, 72, 107, 107, 114, 5,
109, 40, 84, 109, 92, 44, 99, 29, 90, 48,
408, 72, 51, 52, 53, 54, 72, 99, 29, 100,
110, 107, 420, 62, 63, 107, 424, 109, 67, 68,
69, 70, 71, 100, 109, 5, 86, 72, 116, 78,
- 108, 80, 81, 112, 108, 105, 9, 109, 87, 107,
- 89, 14, 15, 107, 106, 94, 95, 96, 97, 98,
- 108, 110, 107, 118, 27, 109, 119, 110, 107, 110,
- 0, 0, 112, 139, 13, 3, 118, 110, 110, 42,
- 110, 26, 56, 46, 74, 110, 117, 115, 65, 52,
- 53, 54, 155, 363, 352, 58, 237, 348, 213, 230,
- 63, 428, 185, 322, 406, 68, 412, 70, 258, 185,
- 420, 360, 408, 147, -1, 78, 305, -1, -1, -1,
+ 108, 80, 81, 112, 108, 110, 9, 109, 87, 107,
+ 89, 14, 15, 105, 107, 94, 95, 96, 97, 98,
+ 109, 108, 106, 118, 27, 110, 117, 107, 107, 110,
+ 112, 0, 0, 110, 110, 13, 119, 110, 3, 42,
+ 118, 26, 56, 46, 74, 115, 110, 65, 237, 52,
+ 53, 54, 363, 352, 348, 58, 155, 428, 185, 213,
+ 63, 185, 322, 230, 406, 68, 258, 70, 139, 420,
+ 408, 412, 360, 147, 305, 78, -1, -1, -1, -1,
-1, -1, -1, -1, 87, -1, 89, -1, 14, 15,
-1, 94, -1, 96, 97, 98, 22, -1, -1, -1,
26, 27, 28, -1, 30, 31, -1, -1, -1, -1,
@@ -1364,13 +1363,13 @@ yyreduce:
switch (yyn) {
case 1:
-#line 325 "asn1p_y.y"
+#line 324 "asn1p_y.y"
{
*(void **)param = yyvsp[0].a_grammar;
;
break;}
case 2:
-#line 331 "asn1p_y.y"
+#line 330 "asn1p_y.y"
{
yyval.a_grammar = asn1p_new();
checkmem(yyval.a_grammar);
@@ -1378,14 +1377,14 @@ case 2:
;
break;}
case 3:
-#line 336 "asn1p_y.y"
+#line 335 "asn1p_y.y"
{
yyval.a_grammar = yyvsp[-1].a_grammar;
TQ_ADD(&(yyval.a_grammar->modules), yyvsp[0].a_module, mod_next);
;
break;}
case 4:
-#line 357 "asn1p_y.y"
+#line 356 "asn1p_y.y"
{
if(yyvsp[-1].a_module) {
@@ -1402,27 +1401,27 @@ case 4:
;
break;}
case 5:
-#line 378 "asn1p_y.y"
+#line 377 "asn1p_y.y"
{ yyval.a_oid = 0; ;
break;}
case 6:
-#line 379 "asn1p_y.y"
+#line 378 "asn1p_y.y"
{ yyval.a_oid = yyvsp[0].a_oid; ;
break;}
case 7:
-#line 383 "asn1p_y.y"
+#line 382 "asn1p_y.y"
{
yyval.a_oid = yyvsp[-1].a_oid;
;
break;}
case 8:
-#line 386 "asn1p_y.y"
+#line 385 "asn1p_y.y"
{
yyval.a_oid = 0;
;
break;}
case 9:
-#line 392 "asn1p_y.y"
+#line 391 "asn1p_y.y"
{
yyval.a_oid = asn1p_oid_new();
asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1431,7 +1430,7 @@ case 9:
;
break;}
case 10:
-#line 398 "asn1p_y.y"
+#line 397 "asn1p_y.y"
{
yyval.a_oid = yyvsp[-1].a_oid;
asn1p_oid_add_arc(yyval.a_oid, &yyvsp[0].a_oid_arc);
@@ -1440,74 +1439,74 @@ case 10:
;
break;}
case 11:
-#line 407 "asn1p_y.y"
+#line 406 "asn1p_y.y"
{ /* iso */
yyval.a_oid_arc.name = yyvsp[0].tv_str;
yyval.a_oid_arc.number = -1;
;
break;}
case 12:
-#line 411 "asn1p_y.y"
+#line 410 "asn1p_y.y"
{ /* iso(1) */
yyval.a_oid_arc.name = yyvsp[-3].tv_str;
yyval.a_oid_arc.number = yyvsp[-1].a_int;
;
break;}
case 13:
-#line 415 "asn1p_y.y"
+#line 414 "asn1p_y.y"
{ /* 1 */
yyval.a_oid_arc.name = 0;
yyval.a_oid_arc.number = yyvsp[0].a_int;
;
break;}
case 14:
-#line 425 "asn1p_y.y"
+#line 424 "asn1p_y.y"
{ yyval.a_module_flags = MSF_NOFLAGS; ;
break;}
case 15:
-#line 426 "asn1p_y.y"
+#line 425 "asn1p_y.y"
{
yyval.a_module_flags = yyvsp[0].a_module_flags;
;
break;}
case 16:
-#line 435 "asn1p_y.y"
+#line 434 "asn1p_y.y"
{
yyval.a_module_flags = yyvsp[0].a_module_flags;
;
break;}
case 17:
-#line 438 "asn1p_y.y"
+#line 437 "asn1p_y.y"
{
yyval.a_module_flags = yyvsp[-1].a_module_flags | yyvsp[0].a_module_flags;
;
break;}
case 18:
-#line 447 "asn1p_y.y"
+#line 446 "asn1p_y.y"
{
yyval.a_module_flags = MSF_EXPLICIT_TAGS;
;
break;}
case 19:
-#line 450 "asn1p_y.y"
+#line 449 "asn1p_y.y"
{
yyval.a_module_flags = MSF_IMPLICIT_TAGS;
;
break;}
case 20:
-#line 453 "asn1p_y.y"
+#line 452 "asn1p_y.y"
{
yyval.a_module_flags = MSF_AUTOMATIC_TAGS;
;
break;}
case 21:
-#line 456 "asn1p_y.y"
+#line 455 "asn1p_y.y"
{
yyval.a_module_flags = MSF_EXTENSIBILITY_IMPLIED;
;
break;}
case 22:
-#line 460 "asn1p_y.y"
+#line 459 "asn1p_y.y"
{
/* X.680Amd1 specifies TAG and XER */
if(strcmp(yyvsp[-1].tv_str, "TAG") == 0) {
@@ -1525,23 +1524,23 @@ case 22:
;
break;}
case 23:
-#line 481 "asn1p_y.y"
+#line 480 "asn1p_y.y"
{ yyval.a_module = 0; ;
break;}
case 24:
-#line 482 "asn1p_y.y"
+#line 481 "asn1p_y.y"
{
yyval.a_module = yyvsp[0].a_module;
;
break;}
case 25:
-#line 491 "asn1p_y.y"
+#line 490 "asn1p_y.y"
{
yyval.a_module = yyvsp[0].a_module;
;
break;}
case 26:
-#line 494 "asn1p_y.y"
+#line 493 "asn1p_y.y"
{
yyval.a_module = yyvsp[-1].a_module;
@@ -1571,13 +1570,13 @@ case 26:
;
break;}
case 27:
-#line 527 "asn1p_y.y"
+#line 526 "asn1p_y.y"
{
yyval.a_module = yyvsp[0].a_module;
;
break;}
case 28:
-#line 530 "asn1p_y.y"
+#line 529 "asn1p_y.y"
{
yyval.a_module = asn1p_module_new();
checkmem(yyval.a_module);
@@ -1589,7 +1588,7 @@ case 28:
;
break;}
case 29:
-#line 539 "asn1p_y.y"
+#line 538 "asn1p_y.y"
{
yyval.a_module = asn1p_module_new();
checkmem(yyval.a_module);
@@ -1599,7 +1598,7 @@ case 29:
;
break;}
case 30:
-#line 546 "asn1p_y.y"
+#line 545 "asn1p_y.y"
{
yyval.a_module = asn1p_module_new();
checkmem(yyval.a_module);
@@ -1609,7 +1608,7 @@ case 30:
;
break;}
case 31:
-#line 559 "asn1p_y.y"
+#line 558 "asn1p_y.y"
{
yyval.a_module = asn1p_module_new();
checkmem(yyval.a_module);
@@ -1619,11 +1618,11 @@ case 31:
;
break;}
case 32:
-#line 567 "asn1p_y.y"
+#line 566 "asn1p_y.y"
{ asn1p_lexer_hack_push_encoding_control(); ;
break;}
case 33:
-#line 568 "asn1p_y.y"
+#line 567 "asn1p_y.y"
{
fprintf(stderr,
"WARNING: ENCODING-CONTROL %s "
@@ -1634,7 +1633,7 @@ case 33:
;
break;}
case 34:
-#line 580 "asn1p_y.y"
+#line 579 "asn1p_y.y"
{
return yyerror(
"Attempt to redefine a standard basic string type, "
@@ -1642,7 +1641,7 @@ case 34:
;
break;}
case 35:
-#line 593 "asn1p_y.y"
+#line 592 "asn1p_y.y"
{
if(!saved_aid && 0)
return yyerror("Unterminated IMPORTS FROM, "
@@ -1652,13 +1651,13 @@ case 35:
;
break;}
case 36:
-#line 603 "asn1p_y.y"
+#line 602 "asn1p_y.y"
{
return yyerror("Empty IMPORTS list");
;
break;}
case 37:
-#line 609 "asn1p_y.y"
+#line 608 "asn1p_y.y"
{
yyval.a_module = asn1p_module_new();
checkmem(yyval.a_module);
@@ -1666,22 +1665,22 @@ case 37:
;
break;}
case 38:
-#line 614 "asn1p_y.y"
+#line 613 "asn1p_y.y"
{
yyval.a_module = yyvsp[-1].a_module;
TQ_ADD(&(yyval.a_module->imports), yyvsp[0].a_xports, xp_next);
;
break;}
case 39:
-#line 621 "asn1p_y.y"
+#line 620 "asn1p_y.y"
{ memset(&yyval.a_aid, 0, sizeof(yyval.a_aid)); ;
break;}
case 40:
-#line 622 "asn1p_y.y"
+#line 621 "asn1p_y.y"
{ yyval.a_aid.oid = yyvsp[0].a_oid; ;
break;}
case 41:
-#line 626 "asn1p_y.y"
+#line 625 "asn1p_y.y"
{
yyval.a_xports = yyvsp[-3].a_xports;
yyval.a_xports->fromModuleName = yyvsp[-1].tv_str;
@@ -1692,7 +1691,7 @@ case 41:
;
break;}
case 42:
-#line 637 "asn1p_y.y"
+#line 636 "asn1p_y.y"
{
yyval.a_xports = asn1p_xports_new();
checkmem(yyval.a_xports);
@@ -1700,14 +1699,14 @@ case 42:
;
break;}
case 43:
-#line 642 "asn1p_y.y"
+#line 641 "asn1p_y.y"
{
yyval.a_xports = yyvsp[-2].a_xports;
TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
;
break;}
case 44:
-#line 649 "asn1p_y.y"
+#line 648 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1716,7 +1715,7 @@ case 44:
;
break;}
case 45:
-#line 655 "asn1p_y.y"
+#line 654 "asn1p_y.y"
{ /* Completely equivalent to above */
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1725,7 +1724,7 @@ case 45:
;
break;}
case 46:
-#line 661 "asn1p_y.y"
+#line 660 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1734,19 +1733,19 @@ case 46:
;
break;}
case 47:
-#line 670 "asn1p_y.y"
+#line 669 "asn1p_y.y"
{
yyval.a_xports = yyvsp[-1].a_xports;
;
break;}
case 48:
-#line 673 "asn1p_y.y"
+#line 672 "asn1p_y.y"
{
yyval.a_xports = 0;
;
break;}
case 49:
-#line 676 "asn1p_y.y"
+#line 675 "asn1p_y.y"
{
/* Empty EXPORTS clause effectively prohibits export. */
yyval.a_xports = asn1p_xports_new();
@@ -1754,7 +1753,7 @@ case 49:
;
break;}
case 50:
-#line 684 "asn1p_y.y"
+#line 683 "asn1p_y.y"
{
yyval.a_xports = asn1p_xports_new();
assert(yyval.a_xports);
@@ -1762,14 +1761,14 @@ case 50:
;
break;}
case 51:
-#line 689 "asn1p_y.y"
+#line 688 "asn1p_y.y"
{
yyval.a_xports = yyvsp[-2].a_xports;
TQ_ADD(&(yyval.a_xports->members), yyvsp[0].a_expr, next);
;
break;}
case 52:
-#line 696 "asn1p_y.y"
+#line 695 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1778,7 +1777,7 @@ case 52:
;
break;}
case 53:
-#line 702 "asn1p_y.y"
+#line 701 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1787,7 +1786,7 @@ case 53:
;
break;}
case 54:
-#line 708 "asn1p_y.y"
+#line 707 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1796,11 +1795,11 @@ case 54:
;
break;}
case 55:
-#line 719 "asn1p_y.y"
+#line 718 "asn1p_y.y"
{ asn1p_lexer_hack_push_opaque_state(); ;
break;}
case 56:
-#line 719 "asn1p_y.y"
+#line 718 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-4].a_expr;
assert(yyval.a_expr->Identifier == 0);
@@ -1810,7 +1809,7 @@ case 56:
;
break;}
case 57:
-#line 729 "asn1p_y.y"
+#line 728 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1820,7 +1819,7 @@ case 57:
;
break;}
case 58:
-#line 736 "asn1p_y.y"
+#line 735 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1829,7 +1828,7 @@ case 58:
;
break;}
case 59:
-#line 754 "asn1p_y.y"
+#line 753 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -1838,7 +1837,7 @@ case 59:
;
break;}
case 60:
-#line 760 "asn1p_y.y"
+#line 759 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -1847,7 +1846,7 @@ case 60:
;
break;}
case 61:
-#line 776 "asn1p_y.y"
+#line 775 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
assert(yyval.a_expr->Identifier == 0);
@@ -1857,7 +1856,7 @@ case 61:
;
break;}
case 62:
-#line 786 "asn1p_y.y"
+#line 785 "asn1p_y.y"
{
int ret;
yyval.a_plist = asn1p_paramlist_new(yylineno);
@@ -1869,7 +1868,7 @@ case 62:
;
break;}
case 63:
-#line 795 "asn1p_y.y"
+#line 794 "asn1p_y.y"
{
int ret;
yyval.a_plist = yyvsp[-2].a_plist;
@@ -1880,14 +1879,14 @@ case 63:
;
break;}
case 64:
-#line 806 "asn1p_y.y"
+#line 805 "asn1p_y.y"
{
yyval.a_parg.governor = NULL;
yyval.a_parg.argument = yyvsp[0].tv_str;
;
break;}
case 65:
-#line 810 "asn1p_y.y"
+#line 809 "asn1p_y.y"
{
int ret;
yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1897,7 +1896,7 @@ case 65:
;
break;}
case 66:
-#line 817 "asn1p_y.y"
+#line 816 "asn1p_y.y"
{
int ret;
yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1907,7 +1906,7 @@ case 66:
;
break;}
case 67:
-#line 824 "asn1p_y.y"
+#line 823 "asn1p_y.y"
{
int ret;
yyval.a_parg.governor = asn1p_ref_new(yylineno);
@@ -1918,7 +1917,7 @@ case 67:
;
break;}
case 68:
-#line 835 "asn1p_y.y"
+#line 834 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1926,20 +1925,20 @@ case 68:
;
break;}
case 69:
-#line 840 "asn1p_y.y"
+#line 839 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-2].a_expr;
asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
;
break;}
case 70:
-#line 847 "asn1p_y.y"
+#line 846 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
;
break;}
case 71:
-#line 850 "asn1p_y.y"
+#line 849 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1949,15 +1948,15 @@ case 71:
;
break;}
case 72:
-#line 874 "asn1p_y.y"
+#line 873 "asn1p_y.y"
{ yyval.a_expr = asn1p_expr_new(yylineno); ;
break;}
case 73:
-#line 875 "asn1p_y.y"
+#line 874 "asn1p_y.y"
{ yyval.a_expr = yyvsp[0].a_expr; ;
break;}
case 74:
-#line 878 "asn1p_y.y"
+#line 877 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -1965,14 +1964,14 @@ case 74:
;
break;}
case 75:
-#line 883 "asn1p_y.y"
+#line 882 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-2].a_expr;
asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
;
break;}
case 76:
-#line 890 "asn1p_y.y"
+#line 889 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-1].a_expr;
assert(yyval.a_expr->Identifier == 0);
@@ -1982,7 +1981,7 @@ case 76:
;
break;}
case 77:
-#line 897 "asn1p_y.y"
+#line 896 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-1].a_expr;
yyvsp[0].a_marker.flags |= yyval.a_expr->marker.flags;
@@ -1991,7 +1990,7 @@ case 77:
;
break;}
case 78:
-#line 903 "asn1p_y.y"
+#line 902 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2001,13 +2000,13 @@ case 78:
;
break;}
case 79:
-#line 910 "asn1p_y.y"
+#line 909 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
;
break;}
case 80:
-#line 916 "asn1p_y.y"
+#line 915 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2015,14 +2014,14 @@ case 80:
;
break;}
case 81:
-#line 921 "asn1p_y.y"
+#line 920 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-2].a_expr;
asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
;
break;}
case 82:
-#line 928 "asn1p_y.y"
+#line 927 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
assert(yyval.a_expr->Identifier == 0);
@@ -2030,20 +2029,20 @@ case 82:
;
break;}
case 83:
-#line 933 "asn1p_y.y"
+#line 932 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
;
break;}
case 84:
-#line 936 "asn1p_y.y"
+#line 935 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
_fixup_anonymous_identifier(yyval.a_expr);
;
break;}
case 85:
-#line 943 "asn1p_y.y"
+#line 942 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-2].a_expr;
checkmem(yyval.a_expr);
@@ -2053,15 +2052,15 @@ case 85:
;
break;}
case 86:
-#line 953 "asn1p_y.y"
+#line 952 "asn1p_y.y"
{ yyval.a_int = 0; ;
break;}
case 87:
-#line 954 "asn1p_y.y"
+#line 953 "asn1p_y.y"
{ yyval.a_int = 1; ;
break;}
case 88:
-#line 958 "asn1p_y.y"
+#line 957 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2071,14 +2070,14 @@ case 88:
;
break;}
case 89:
-#line 965 "asn1p_y.y"
+#line 964 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-2].a_expr;
asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
;
break;}
case 90:
-#line 975 "asn1p_y.y"
+#line 974 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2089,7 +2088,7 @@ case 90:
;
break;}
case 91:
-#line 985 "asn1p_y.y"
+#line 984 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
yyval.a_expr->Identifier = yyvsp[-3].tv_str;
@@ -2101,7 +2100,7 @@ case 91:
;
break;}
case 92:
-#line 996 "asn1p_y.y"
+#line 995 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2112,7 +2111,7 @@ case 92:
;
break;}
case 93:
-#line 1006 "asn1p_y.y"
+#line 1005 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2124,7 +2123,7 @@ case 93:
;
break;}
case 94:
-#line 1017 "asn1p_y.y"
+#line 1016 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
yyval.a_expr->Identifier = yyvsp[-2].tv_str;
@@ -2135,7 +2134,7 @@ case 94:
;
break;}
case 95:
-#line 1027 "asn1p_y.y"
+#line 1026 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2147,7 +2146,7 @@ case 95:
;
break;}
case 96:
-#line 1038 "asn1p_y.y"
+#line 1037 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2159,72 +2158,67 @@ case 96:
;
break;}
case 97:
-#line 1050 "asn1p_y.y"
+#line 1049 "asn1p_y.y"
{ yyval.a_wsynt = 0; ;
break;}
case 98:
-#line 1051 "asn1p_y.y"
+#line 1050 "asn1p_y.y"
{
yyval.a_wsynt = yyvsp[0].a_wsynt;
;
break;}
case 99:
-#line 1058 "asn1p_y.y"
+#line 1057 "asn1p_y.y"
{ asn1p_lexer_hack_enable_with_syntax(); ;
break;}
case 100:
-#line 1060 "asn1p_y.y"
+#line 1059 "asn1p_y.y"
{
yyval.a_wsynt = yyvsp[-1].a_wsynt;
;
break;}
case 101:
-#line 1066 "asn1p_y.y"
+#line 1065 "asn1p_y.y"
{
yyval.a_wsynt = asn1p_wsyntx_new();
TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
;
break;}
case 102:
-#line 1070 "asn1p_y.y"
+#line 1069 "asn1p_y.y"
{
yyval.a_wsynt = yyvsp[-1].a_wsynt;
TQ_ADD(&(yyval.a_wsynt->chunks), yyvsp[0].a_wchunk, next);
;
break;}
case 103:
-#line 1077 "asn1p_y.y"
+#line 1076 "asn1p_y.y"
{
yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_opaque.buf, yyvsp[0].tv_opaque.len, 0);
yyval.a_wchunk->type = WC_WHITESPACE;
;
break;}
case 104:
-#line 1081 "asn1p_y.y"
+#line 1080 "asn1p_y.y"
{
yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].tv_str, strlen(yyvsp[0].tv_str), 0);
;
break;}
case 105:
-#line 1084 "asn1p_y.y"
+#line 1083 "asn1p_y.y"
{
- asn1p_ref_t *ref;
- int ret;
- ref = asn1p_ref_new(yylineno);
- checkmem(ref);
- ret = asn1p_ref_add_component(ref, yyvsp[0].a_refcomp.name, yyvsp[0].a_refcomp.lex_type);
- checkmem(ret == 0);
- yyval.a_wchunk = asn1p_wsyntx_chunk_fromref(ref, 0);
+ yyval.a_wchunk = asn1p_wsyntx_chunk_frombuf(yyvsp[0].a_refcomp.name, strlen(yyvsp[0].a_refcomp.name), 0);
+ yyval.a_wchunk->type = WC_FIELD;
;
break;}
case 106:
-#line 1093 "asn1p_y.y"
+#line 1087 "asn1p_y.y"
{
yyval.a_wchunk = asn1p_wsyntx_chunk_fromsyntax(yyvsp[-1].a_wsynt);
;
break;}
case 107:
-#line 1099 "asn1p_y.y"
+#line 1093 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2235,7 +2229,7 @@ case 107:
;
break;}
case 108:
-#line 1107 "asn1p_y.y"
+#line 1101 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2247,7 +2241,7 @@ case 108:
;
break;}
case 109:
-#line 1116 "asn1p_y.y"
+#line 1110 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2259,7 +2253,7 @@ case 109:
;
break;}
case 110:
-#line 1128 "asn1p_y.y"
+#line 1122 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-1].a_expr;
yyval.a_expr->tag = yyvsp[-2].a_tag;
@@ -2281,14 +2275,14 @@ case 110:
;
break;}
case 111:
-#line 1150 "asn1p_y.y"
+#line 1144 "asn1p_y.y"
{
yyval.a_int = asn1p_as_pointer ? EM_INDIRECT : 0;
asn1p_as_pointer = 0;
;
break;}
case 112:
-#line 1157 "asn1p_y.y"
+#line 1151 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
yyval.a_expr->marker.flags |= yyvsp[-1].a_int;
@@ -2307,13 +2301,13 @@ case 112:
;
break;}
case 113:
-#line 1176 "asn1p_y.y"
+#line 1170 "asn1p_y.y"
{
yyval.a_expr = yyvsp[0].a_expr;
;
break;}
case 114:
-#line 1179 "asn1p_y.y"
+#line 1173 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-1].a_expr;
assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2322,7 +2316,7 @@ case 114:
;
break;}
case 115:
-#line 1185 "asn1p_y.y"
+#line 1179 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-1].a_expr;
assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2331,7 +2325,7 @@ case 115:
;
break;}
case 116:
-#line 1191 "asn1p_y.y"
+#line 1185 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-1].a_expr;
assert(yyval.a_expr->expr_type == A1TC_INVALID);
@@ -2340,7 +2334,7 @@ case 116:
;
break;}
case 117:
-#line 1197 "asn1p_y.y"
+#line 1191 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2353,7 +2347,7 @@ case 117:
;
break;}
case 118:
-#line 1207 "asn1p_y.y"
+#line 1201 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2366,7 +2360,7 @@ case 118:
;
break;}
case 119:
-#line 1217 "asn1p_y.y"
+#line 1211 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2375,7 +2369,7 @@ case 119:
;
break;}
case 120:
-#line 1223 "asn1p_y.y"
+#line 1217 "asn1p_y.y"
{
int ret;
yyval.a_expr = asn1p_expr_new(yylineno);
@@ -2389,7 +2383,7 @@ case 120:
;
break;}
case 121:
-#line 1237 "asn1p_y.y"
+#line 1231 "asn1p_y.y"
{
int ret;
yyval.a_expr = yyvsp[-1].a_expr;
@@ -2406,7 +2400,7 @@ case 121:
;
break;}
case 122:
-#line 1261 "asn1p_y.y"
+#line 1255 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2416,7 +2410,7 @@ case 122:
;
break;}
case 123:
-#line 1268 "asn1p_y.y"
+#line 1262 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2426,7 +2420,7 @@ case 123:
;
break;}
case 124:
-#line 1283 "asn1p_y.y"
+#line 1277 "asn1p_y.y"
{
int ret;
yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2437,7 +2431,7 @@ case 124:
;
break;}
case 125:
-#line 1291 "asn1p_y.y"
+#line 1285 "asn1p_y.y"
{
int ret;
yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2450,7 +2444,7 @@ case 125:
;
break;}
case 126:
-#line 1301 "asn1p_y.y"
+#line 1295 "asn1p_y.y"
{
int ret;
yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2463,7 +2457,7 @@ case 126:
;
break;}
case 127:
-#line 1311 "asn1p_y.y"
+#line 1305 "asn1p_y.y"
{
int ret;
yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2476,7 +2470,7 @@ case 127:
;
break;}
case 128:
-#line 1321 "asn1p_y.y"
+#line 1315 "asn1p_y.y"
{
int ret;
yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2487,7 +2481,7 @@ case 128:
;
break;}
case 129:
-#line 1329 "asn1p_y.y"
+#line 1323 "asn1p_y.y"
{
int ret;
yyval.a_ref = yyvsp[0].a_ref;
@@ -2509,7 +2503,7 @@ case 129:
;
break;}
case 130:
-#line 1351 "asn1p_y.y"
+#line 1345 "asn1p_y.y"
{
int ret;
yyval.a_ref = asn1p_ref_new(yylineno);
@@ -2520,7 +2514,7 @@ case 130:
;
break;}
case 131:
-#line 1359 "asn1p_y.y"
+#line 1353 "asn1p_y.y"
{
int ret;
yyval.a_ref = yyvsp[-2].a_ref;
@@ -2529,50 +2523,50 @@ case 131:
checkmem(ret == 0);
;
break;}
-case 134:
-#line 1373 "asn1p_y.y"
+case 133:
+#line 1366 "asn1p_y.y"
{
yyval.a_refcomp.lex_type = RLT_AmpUppercase;
yyval.a_refcomp.name = yyvsp[0].tv_str;
;
break;}
-case 135:
-#line 1378 "asn1p_y.y"
+case 134:
+#line 1371 "asn1p_y.y"
{
yyval.a_refcomp.lex_type = RLT_Amplowercase;
yyval.a_refcomp.name = yyvsp[0].tv_str;
;
break;}
-case 136:
-#line 1387 "asn1p_y.y"
+case 135:
+#line 1380 "asn1p_y.y"
{
yyval.a_ref = asn1p_ref_new(yylineno);
asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
;
break;}
-case 137:
-#line 1391 "asn1p_y.y"
+case 136:
+#line 1384 "asn1p_y.y"
{
yyval.a_ref = yyval.a_ref;
asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_AmpUppercase);
;
break;}
-case 138:
-#line 1395 "asn1p_y.y"
+case 137:
+#line 1388 "asn1p_y.y"
{
yyval.a_ref = yyval.a_ref;
asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_Amplowercase);
;
break;}
-case 139:
-#line 1402 "asn1p_y.y"
+case 138:
+#line 1395 "asn1p_y.y"
{
yyval.a_ref = asn1p_ref_new(yylineno);
asn1p_ref_add_component(yyval.a_ref, yyvsp[0].tv_str, RLT_CAPITALS);
;
break;}
-case 140:
-#line 1422 "asn1p_y.y"
+case 139:
+#line 1415 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-2].a_expr;
assert(yyval.a_expr->Identifier == NULL);
@@ -2581,8 +2575,8 @@ case 140:
yyval.a_expr->value = yyvsp[0].a_value;
;
break;}
-case 141:
-#line 1432 "asn1p_y.y"
+case 140:
+#line 1425 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(0);
checkmem(yyval.a_value);
@@ -2591,76 +2585,76 @@ case 141:
yyval.a_value->value.choice_identifier.value = yyvsp[0].a_value;
;
break;}
-case 142:
-#line 1439 "asn1p_y.y"
+case 141:
+#line 1432 "asn1p_y.y"
{ asn1p_lexer_hack_push_opaque_state(); ;
break;}
-case 143:
-#line 1439 "asn1p_y.y"
+case 142:
+#line 1432 "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 144:
-#line 1444 "asn1p_y.y"
+case 143:
+#line 1437 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(0);
checkmem(yyval.a_value);
yyval.a_value->type = ATV_NULL;
;
break;}
-case 145:
-#line 1449 "asn1p_y.y"
+case 144:
+#line 1442 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(0);
checkmem(yyval.a_value);
yyval.a_value->type = ATV_FALSE;
;
break;}
-case 146:
-#line 1454 "asn1p_y.y"
+case 145:
+#line 1447 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(0);
checkmem(yyval.a_value);
yyval.a_value->type = ATV_TRUE;
;
break;}
-case 147:
-#line 1459 "asn1p_y.y"
+case 146:
+#line 1452 "asn1p_y.y"
{
yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'B');
checkmem(yyval.a_value);
;
break;}
-case 148:
-#line 1463 "asn1p_y.y"
+case 147:
+#line 1456 "asn1p_y.y"
{
yyval.a_value = _convert_bitstring2binary(yyvsp[0].tv_str, 'H');
checkmem(yyval.a_value);
;
break;}
-case 149:
-#line 1467 "asn1p_y.y"
+case 148:
+#line 1460 "asn1p_y.y"
{
yyval.a_value = yyval.a_value;
;
break;}
-case 150:
-#line 1470 "asn1p_y.y"
+case 149:
+#line 1463 "asn1p_y.y"
{
yyval.a_value = yyvsp[0].a_value;
;
break;}
-case 151:
-#line 1473 "asn1p_y.y"
+case 150:
+#line 1466 "asn1p_y.y"
{
yyval.a_value = yyvsp[0].a_value;
;
break;}
-case 152:
-#line 1479 "asn1p_y.y"
+case 151:
+#line 1472 "asn1p_y.y"
{
asn1p_ref_t *ref;
int ret;
@@ -2673,8 +2667,8 @@ case 152:
free(yyvsp[0].tv_str);
;
break;}
-case 153:
-#line 1490 "asn1p_y.y"
+case 152:
+#line 1483 "asn1p_y.y"
{
asn1p_ref_t *ref;
int ret;
@@ -2690,31 +2684,31 @@ case 153:
free(yyvsp[0].tv_str);
;
break;}
-case 154:
-#line 1508 "asn1p_y.y"
+case 153:
+#line 1501 "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 155:
-#line 1512 "asn1p_y.y"
+case 154:
+#line 1505 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
checkmem(yyval.a_value);
yyval.a_value->type = ATV_TUPLE;
;
break;}
-case 156:
-#line 1517 "asn1p_y.y"
+case 155:
+#line 1510 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
checkmem(yyval.a_value);
yyval.a_value->type = ATV_QUADRUPLE;
;
break;}
-case 157:
-#line 1551 "asn1p_y.y"
+case 156:
+#line 1544 "asn1p_y.y"
{
yyval.tv_opaque.len = yyvsp[0].tv_opaque.len + 1;
yyval.tv_opaque.buf = malloc(yyval.tv_opaque.len + 1);
@@ -2725,8 +2719,8 @@ case 157:
free(yyvsp[0].tv_opaque.buf);
;
break;}
-case 158:
-#line 1560 "asn1p_y.y"
+case 157:
+#line 1553 "asn1p_y.y"
{
int newsize = yyvsp[-1].tv_opaque.len + yyvsp[0].tv_opaque.len;
char *p = malloc(newsize + 1);
@@ -2740,72 +2734,72 @@ case 158:
yyval.tv_opaque.len = newsize;
;
break;}
-case 159:
-#line 1575 "asn1p_y.y"
+case 158:
+#line 1568 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_BOOLEAN; ;
break;}
-case 160:
-#line 1576 "asn1p_y.y"
+case 159:
+#line 1569 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_NULL; ;
break;}
-case 161:
-#line 1577 "asn1p_y.y"
+case 160:
+#line 1570 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_REAL; ;
break;}
-case 162:
-#line 1578 "asn1p_y.y"
+case 161:
+#line 1571 "asn1p_y.y"
{ yyval.a_type = yyvsp[0].a_type; ;
break;}
-case 163:
-#line 1579 "asn1p_y.y"
+case 162:
+#line 1572 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_OCTET_STRING; ;
break;}
-case 164:
-#line 1580 "asn1p_y.y"
+case 163:
+#line 1573 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_OBJECT_IDENTIFIER; ;
break;}
-case 165:
-#line 1581 "asn1p_y.y"
+case 164:
+#line 1574 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_RELATIVE_OID; ;
break;}
-case 166:
-#line 1582 "asn1p_y.y"
+case 165:
+#line 1575 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_EXTERNAL; ;
break;}
-case 167:
-#line 1583 "asn1p_y.y"
+case 166:
+#line 1576 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_EMBEDDED_PDV; ;
break;}
-case 168:
-#line 1584 "asn1p_y.y"
+case 167:
+#line 1577 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_CHARACTER_STRING; ;
break;}
-case 169:
-#line 1585 "asn1p_y.y"
+case 168:
+#line 1578 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_UTCTime; ;
break;}
-case 170:
-#line 1586 "asn1p_y.y"
+case 169:
+#line 1579 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_GeneralizedTime; ;
break;}
-case 171:
-#line 1587 "asn1p_y.y"
+case 170:
+#line 1580 "asn1p_y.y"
{ yyval.a_type = yyvsp[0].a_type; ;
break;}
-case 172:
-#line 1594 "asn1p_y.y"
+case 171:
+#line 1587 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_INTEGER; ;
break;}
-case 173:
-#line 1595 "asn1p_y.y"
+case 172:
+#line 1588 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_ENUMERATED; ;
break;}
-case 174:
-#line 1596 "asn1p_y.y"
+case 173:
+#line 1589 "asn1p_y.y"
{ yyval.a_type = ASN_BASIC_BIT_STRING; ;
break;}
-case 175:
-#line 1600 "asn1p_y.y"
+case 174:
+#line 1593 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -2813,8 +2807,8 @@ case 175:
yyval.a_expr->meta_type = AMT_TYPE;
;
break;}
-case 176:
-#line 1606 "asn1p_y.y"
+case 175:
+#line 1599 "asn1p_y.y"
{
if(yyvsp[0].a_expr) {
yyval.a_expr = yyvsp[0].a_expr;
@@ -2826,92 +2820,92 @@ case 176:
yyval.a_expr->meta_type = AMT_TYPE;
;
break;}
-case 177:
-#line 1619 "asn1p_y.y"
+case 176:
+#line 1612 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_BMPString; ;
break;}
-case 178:
-#line 1620 "asn1p_y.y"
+case 177:
+#line 1613 "asn1p_y.y"
{
yyval.a_type = ASN_STRING_GeneralString;
fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
;
break;}
-case 179:
-#line 1624 "asn1p_y.y"
+case 178:
+#line 1617 "asn1p_y.y"
{
yyval.a_type = ASN_STRING_GraphicString;
fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
;
break;}
-case 180:
-#line 1628 "asn1p_y.y"
+case 179:
+#line 1621 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_IA5String; ;
break;}
-case 181:
-#line 1629 "asn1p_y.y"
+case 180:
+#line 1622 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_ISO646String; ;
break;}
-case 182:
-#line 1630 "asn1p_y.y"
+case 181:
+#line 1623 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_NumericString; ;
break;}
-case 183:
-#line 1631 "asn1p_y.y"
+case 182:
+#line 1624 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_PrintableString; ;
break;}
-case 184:
-#line 1632 "asn1p_y.y"
+case 183:
+#line 1625 "asn1p_y.y"
{
yyval.a_type = ASN_STRING_T61String;
fprintf(stderr, "WARNING: T61String is not fully supported\n");
;
break;}
-case 185:
-#line 1636 "asn1p_y.y"
+case 184:
+#line 1629 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_TeletexString; ;
break;}
-case 186:
-#line 1637 "asn1p_y.y"
+case 185:
+#line 1630 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_UniversalString; ;
break;}
-case 187:
-#line 1638 "asn1p_y.y"
+case 186:
+#line 1631 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_UTF8String; ;
break;}
-case 188:
-#line 1639 "asn1p_y.y"
+case 187:
+#line 1632 "asn1p_y.y"
{
yyval.a_type = ASN_STRING_VideotexString;
fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
;
break;}
-case 189:
-#line 1643 "asn1p_y.y"
+case 188:
+#line 1636 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_VisibleString; ;
break;}
-case 190:
-#line 1644 "asn1p_y.y"
+case 189:
+#line 1637 "asn1p_y.y"
{ yyval.a_type = ASN_STRING_ObjectDescriptor; ;
break;}
-case 196:
-#line 1656 "asn1p_y.y"
+case 195:
+#line 1649 "asn1p_y.y"
{ yyval.a_constr = 0; ;
break;}
-case 197:
-#line 1657 "asn1p_y.y"
+case 196:
+#line 1650 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 198:
-#line 1663 "asn1p_y.y"
+case 197:
+#line 1656 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[0].a_constr, 0);
;
break;}
-case 199:
-#line 1666 "asn1p_y.y"
+case 198:
+#line 1659 "asn1p_y.y"
{
/*
* This is a special case, for compatibility purposes.
@@ -2920,26 +2914,26 @@ case 199:
CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_SIZE, yyvsp[-1].a_constr, 0);
;
break;}
-case 200:
-#line 1676 "asn1p_y.y"
+case 199:
+#line 1669 "asn1p_y.y"
{
yyval.a_constr = yyvsp[-1].a_constr;
;
break;}
-case 201:
-#line 1679 "asn1p_y.y"
+case 200:
+#line 1672 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_SET, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
;
break;}
-case 202:
-#line 1685 "asn1p_y.y"
+case 201:
+#line 1678 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 203:
-#line 1688 "asn1p_y.y"
+case 202:
+#line 1681 "asn1p_y.y"
{
asn1p_constraint_t *ct;
ct = asn1p_constraint_new(yylineno);
@@ -2947,8 +2941,8 @@ case 203:
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
;
break;}
-case 204:
-#line 1694 "asn1p_y.y"
+case 203:
+#line 1687 "asn1p_y.y"
{
asn1p_constraint_t *ct;
ct = asn1p_constraint_new(yylineno);
@@ -2958,38 +2952,38 @@ case 204:
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, ct, yyvsp[0].a_constr);
;
break;}
-case 205:
-#line 1705 "asn1p_y.y"
+case 204:
+#line 1698 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 206:
-#line 1708 "asn1p_y.y"
+case 205:
+#line 1701 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_AEX, yyvsp[0].a_constr, 0);
;
break;}
-case 207:
-#line 1711 "asn1p_y.y"
+case 206:
+#line 1704 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_UNI, yyvsp[-2].a_constr, yyvsp[0].a_constr);
;
break;}
-case 208:
-#line 1714 "asn1p_y.y"
+case 207:
+#line 1707 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_INT, yyvsp[-2].a_constr, yyvsp[0].a_constr);
;
break;}
-case 209:
-#line 1717 "asn1p_y.y"
+case 208:
+#line 1710 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_EXC, yyvsp[-2].a_constr, yyvsp[0].a_constr);
;
break;}
-case 210:
-#line 1723 "asn1p_y.y"
+case 209:
+#line 1716 "asn1p_y.y"
{
int ret;
yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -2999,8 +2993,8 @@ case 210:
checkmem(ret == 0);
;
break;}
-case 211:
-#line 1731 "asn1p_y.y"
+case 210:
+#line 1724 "asn1p_y.y"
{
int ret;
yyval.a_constr = asn1p_constraint_new(yylineno);
@@ -3010,8 +3004,8 @@ case 211:
checkmem(ret == 0);
;
break;}
-case 212:
-#line 1739 "asn1p_y.y"
+case 211:
+#line 1732 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3019,8 +3013,8 @@ case 212:
yyval.a_constr->value = yyvsp[0].a_value;
;
break;}
-case 213:
-#line 1745 "asn1p_y.y"
+case 212:
+#line 1738 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3028,8 +3022,8 @@ case 213:
yyval.a_constr->containedSubtype = yyvsp[0].a_value;
;
break;}
-case 214:
-#line 1751 "asn1p_y.y"
+case 213:
+#line 1744 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3038,8 +3032,8 @@ case 214:
yyval.a_constr->range_stop = yyvsp[0].a_value;
;
break;}
-case 215:
-#line 1758 "asn1p_y.y"
+case 214:
+#line 1751 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3049,8 +3043,8 @@ case 215:
yyval.a_constr->range_start->type = ATV_MIN;
;
break;}
-case 216:
-#line 1766 "asn1p_y.y"
+case 215:
+#line 1759 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3060,8 +3054,8 @@ case 216:
yyval.a_constr->range_stop->type = ATV_MAX;
;
break;}
-case 217:
-#line 1774 "asn1p_y.y"
+case 216:
+#line 1767 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3072,24 +3066,24 @@ case 217:
yyval.a_constr->range_stop->type = ATV_MAX;
;
break;}
-case 218:
-#line 1783 "asn1p_y.y"
+case 217:
+#line 1776 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 219:
-#line 1786 "asn1p_y.y"
+case 218:
+#line 1779 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 220:
-#line 1790 "asn1p_y.y"
+case 219:
+#line 1783 "asn1p_y.y"
{ asn1p_lexer_hack_push_opaque_state(); ;
break;}
-case 221:
-#line 1790 "asn1p_y.y"
+case 220:
+#line 1783 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3099,64 +3093,64 @@ case 221:
yyval.a_constr->value->type = ATV_UNPARSED;
;
break;}
-case 222:
-#line 1801 "asn1p_y.y"
+case 221:
+#line 1794 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_RANGE; ;
break;}
-case 223:
-#line 1802 "asn1p_y.y"
+case 222:
+#line 1795 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_RLRANGE; ;
break;}
-case 224:
-#line 1803 "asn1p_y.y"
+case 223:
+#line 1796 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_LLRANGE; ;
break;}
-case 225:
-#line 1804 "asn1p_y.y"
+case 224:
+#line 1797 "asn1p_y.y"
{ yyval.a_ctype = ACT_EL_ULRANGE; ;
break;}
-case 226:
-#line 1808 "asn1p_y.y"
+case 225:
+#line 1801 "asn1p_y.y"
{
yyval.a_ctype = ACT_CT_SIZE;
;
break;}
-case 227:
-#line 1811 "asn1p_y.y"
+case 226:
+#line 1804 "asn1p_y.y"
{
yyval.a_ctype = ACT_CT_FROM;
;
break;}
-case 228:
-#line 1817 "asn1p_y.y"
+case 227:
+#line 1810 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(0);
checkmem(yyval.a_value);
yyval.a_value->type = ATV_FALSE;
;
break;}
-case 229:
-#line 1822 "asn1p_y.y"
+case 228:
+#line 1815 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(1);
checkmem(yyval.a_value);
yyval.a_value->type = ATV_TRUE;
;
break;}
-case 230:
-#line 1827 "asn1p_y.y"
+case 229:
+#line 1820 "asn1p_y.y"
{
yyval.a_value = yyvsp[0].a_value;
;
break;}
-case 231:
-#line 1830 "asn1p_y.y"
+case 230:
+#line 1823 "asn1p_y.y"
{
yyval.a_value = yyvsp[0].a_value;
;
break;}
-case 232:
-#line 1833 "asn1p_y.y"
+case 231:
+#line 1826 "asn1p_y.y"
{
asn1p_ref_t *ref;
int ret;
@@ -3169,8 +3163,8 @@ case 232:
free(yyvsp[0].tv_str);
;
break;}
-case 233:
-#line 1847 "asn1p_y.y"
+case 232:
+#line 1840 "asn1p_y.y"
{
asn1p_ref_t *ref;
int ret;
@@ -3183,32 +3177,32 @@ case 233:
free(yyvsp[0].tv_str);
;
break;}
-case 234:
-#line 1861 "asn1p_y.y"
+case 233:
+#line 1854 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMP, yyvsp[0].a_constr, 0);
;
break;}
-case 235:
-#line 1864 "asn1p_y.y"
+case 234:
+#line 1857 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-1].a_constr, 0);
;
break;}
-case 236:
-#line 1870 "asn1p_y.y"
+case 235:
+#line 1863 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 237:
-#line 1873 "asn1p_y.y"
+case 236:
+#line 1866 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CT_WCOMPS, yyvsp[-2].a_constr, yyvsp[0].a_constr);
;
break;}
-case 238:
-#line 1879 "asn1p_y.y"
+case 237:
+#line 1872 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3216,8 +3210,8 @@ case 238:
yyval.a_constr->value = asn1p_value_frombuf("...", 3, 0);
;
break;}
-case 239:
-#line 1885 "asn1p_y.y"
+case 238:
+#line 1878 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3227,46 +3221,46 @@ case 239:
if(yyvsp[-1].a_constr) asn1p_constraint_insert(yyval.a_constr, yyvsp[-1].a_constr);
;
break;}
-case 240:
-#line 1899 "asn1p_y.y"
+case 239:
+#line 1892 "asn1p_y.y"
{ yyval.a_pres = ACPRES_DEFAULT; ;
break;}
-case 241:
-#line 1900 "asn1p_y.y"
+case 240:
+#line 1893 "asn1p_y.y"
{ yyval.a_pres = yyvsp[0].a_pres; ;
break;}
-case 242:
-#line 1904 "asn1p_y.y"
+case 241:
+#line 1897 "asn1p_y.y"
{
yyval.a_pres = ACPRES_PRESENT;
;
break;}
-case 243:
-#line 1907 "asn1p_y.y"
+case 242:
+#line 1900 "asn1p_y.y"
{
yyval.a_pres = ACPRES_ABSENT;
;
break;}
-case 244:
-#line 1910 "asn1p_y.y"
+case 243:
+#line 1903 "asn1p_y.y"
{
yyval.a_pres = ACPRES_OPTIONAL;
;
break;}
-case 245:
-#line 1916 "asn1p_y.y"
+case 244:
+#line 1909 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 246:
-#line 1919 "asn1p_y.y"
+case 245:
+#line 1912 "asn1p_y.y"
{
yyval.a_constr = yyvsp[0].a_constr;
;
break;}
-case 247:
-#line 1928 "asn1p_y.y"
+case 246:
+#line 1921 "asn1p_y.y"
{
asn1p_ref_t *ref = asn1p_ref_new(yylineno);
asn1p_constraint_t *ct;
@@ -3280,14 +3274,14 @@ case 247:
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, ct, 0);
;
break;}
-case 248:
-#line 1943 "asn1p_y.y"
+case 247:
+#line 1936 "asn1p_y.y"
{
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CRC, yyvsp[-3].a_constr, yyvsp[-1].a_constr);
;
break;}
-case 249:
-#line 1949 "asn1p_y.y"
+case 248:
+#line 1942 "asn1p_y.y"
{
yyval.a_constr = asn1p_constraint_new(yylineno);
checkmem(yyval.a_constr);
@@ -3295,8 +3289,8 @@ case 249:
yyval.a_constr->value = asn1p_value_fromref(yyvsp[0].a_ref, 0);
;
break;}
-case 250:
-#line 1955 "asn1p_y.y"
+case 249:
+#line 1948 "asn1p_y.y"
{
asn1p_constraint_t *ct;
ct = asn1p_constraint_new(yylineno);
@@ -3306,8 +3300,8 @@ case 250:
CONSTRAINT_INSERT(yyval.a_constr, ACT_CA_CSV, yyvsp[-2].a_constr, ct);
;
break;}
-case 251:
-#line 1969 "asn1p_y.y"
+case 250:
+#line 1962 "asn1p_y.y"
{
char *p = malloc(strlen(yyvsp[0].tv_str) + 2);
int ret;
@@ -3320,8 +3314,8 @@ case 251:
free(yyvsp[0].tv_str);
;
break;}
-case 252:
-#line 1980 "asn1p_y.y"
+case 251:
+#line 1973 "asn1p_y.y"
{
char *p = malloc(strlen(yyvsp[0].tv_str) + 3);
int ret;
@@ -3335,14 +3329,14 @@ case 252:
free(yyvsp[0].tv_str);
;
break;}
-case 253:
-#line 1996 "asn1p_y.y"
+case 252:
+#line 1989 "asn1p_y.y"
{
yyval.tv_str = yyvsp[0].tv_str;
;
break;}
-case 254:
-#line 1999 "asn1p_y.y"
+case 253:
+#line 1992 "asn1p_y.y"
{
int l1 = strlen(yyvsp[-2].tv_str);
int l3 = strlen(yyvsp[0].tv_str);
@@ -3353,61 +3347,61 @@ case 254:
yyval.tv_str[l1 + 1 + l3] = '\0';
;
break;}
-case 255:
-#line 2017 "asn1p_y.y"
+case 254:
+#line 2010 "asn1p_y.y"
{
yyval.a_marker.flags = EM_NOMARK;
yyval.a_marker.default_value = 0;
;
break;}
-case 256:
-#line 2021 "asn1p_y.y"
+case 255:
+#line 2014 "asn1p_y.y"
{ yyval.a_marker = yyvsp[0].a_marker; ;
break;}
-case 257:
-#line 2025 "asn1p_y.y"
+case 256:
+#line 2018 "asn1p_y.y"
{
yyval.a_marker.flags = EM_OPTIONAL | EM_INDIRECT;
yyval.a_marker.default_value = 0;
;
break;}
-case 258:
-#line 2029 "asn1p_y.y"
+case 257:
+#line 2022 "asn1p_y.y"
{
yyval.a_marker.flags = EM_DEFAULT;
yyval.a_marker.default_value = yyvsp[0].a_value;
;
break;}
-case 259:
-#line 2052 "asn1p_y.y"
+case 258:
+#line 2045 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
;
break;}
-case 260:
-#line 2056 "asn1p_y.y"
+case 259:
+#line 2049 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-1].a_expr;
;
break;}
-case 261:
-#line 2062 "asn1p_y.y"
+case 260:
+#line 2055 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
;
break;}
-case 262:
-#line 2067 "asn1p_y.y"
+case 261:
+#line 2060 "asn1p_y.y"
{
yyval.a_expr = yyvsp[-2].a_expr;
asn1p_expr_add(yyval.a_expr, yyvsp[0].a_expr);
;
break;}
-case 263:
-#line 2074 "asn1p_y.y"
+case 262:
+#line 2067 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -3416,8 +3410,8 @@ case 263:
yyval.a_expr->Identifier = yyvsp[0].tv_str;
;
break;}
-case 264:
-#line 2081 "asn1p_y.y"
+case 263:
+#line 2074 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -3427,8 +3421,8 @@ case 264:
yyval.a_expr->value = yyvsp[-1].a_value;
;
break;}
-case 265:
-#line 2089 "asn1p_y.y"
+case 264:
+#line 2082 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -3438,8 +3432,8 @@ case 265:
yyval.a_expr->value = yyvsp[-1].a_value;
;
break;}
-case 266:
-#line 2097 "asn1p_y.y"
+case 265:
+#line 2090 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -3448,8 +3442,8 @@ case 266:
yyval.a_expr->value = yyvsp[0].a_value;
;
break;}
-case 267:
-#line 2104 "asn1p_y.y"
+case 266:
+#line 2097 "asn1p_y.y"
{
yyval.a_expr = asn1p_expr_new(yylineno);
checkmem(yyval.a_expr);
@@ -3459,103 +3453,103 @@ case 267:
yyval.a_expr->meta_type = AMT_VALUE;
;
break;}
-case 268:
-#line 2115 "asn1p_y.y"
+case 267:
+#line 2108 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
checkmem(yyval.a_value);
;
break;}
-case 269:
-#line 2119 "asn1p_y.y"
+case 268:
+#line 2112 "asn1p_y.y"
{
yyval.a_value = asn1p_value_fromint(yyvsp[0].a_int);
checkmem(yyval.a_value);
;
break;}
-case 270:
-#line 2150 "asn1p_y.y"
+case 269:
+#line 2143 "asn1p_y.y"
{ memset(&yyval.a_tag, 0, sizeof(yyval.a_tag)); ;
break;}
-case 271:
-#line 2151 "asn1p_y.y"
+case 270:
+#line 2144 "asn1p_y.y"
{ yyval.a_tag = yyvsp[0].a_tag; ;
break;}
-case 272:
-#line 2155 "asn1p_y.y"
+case 271:
+#line 2148 "asn1p_y.y"
{
yyval.a_tag = yyvsp[-1].a_tag;
yyval.a_tag.tag_mode = yyvsp[0].a_tag.tag_mode;
;
break;}
-case 273:
-#line 2162 "asn1p_y.y"
+case 272:
+#line 2155 "asn1p_y.y"
{
yyval.a_tag = yyvsp[-2].a_tag;
yyval.a_tag.tag_value = yyvsp[-1].a_int;
;
break;}
-case 274:
-#line 2168 "asn1p_y.y"
+case 273:
+#line 2161 "asn1p_y.y"
{ yyval.a_tag.tag_class = TC_CONTEXT_SPECIFIC; ;
break;}
-case 275:
-#line 2169 "asn1p_y.y"
+case 274:
+#line 2162 "asn1p_y.y"
{ yyval.a_tag.tag_class = TC_UNIVERSAL; ;
break;}
-case 276:
-#line 2170 "asn1p_y.y"
+case 275:
+#line 2163 "asn1p_y.y"
{ yyval.a_tag.tag_class = TC_APPLICATION; ;
break;}
-case 277:
-#line 2171 "asn1p_y.y"
+case 276:
+#line 2164 "asn1p_y.y"
{ yyval.a_tag.tag_class = TC_PRIVATE; ;
break;}
-case 278:
-#line 2175 "asn1p_y.y"
+case 277:
+#line 2168 "asn1p_y.y"
{ yyval.a_tag.tag_mode = TM_DEFAULT; ;
break;}
-case 279:
-#line 2176 "asn1p_y.y"
+case 278:
+#line 2169 "asn1p_y.y"
{ yyval.a_tag.tag_mode = TM_IMPLICIT; ;
break;}
-case 280:
-#line 2177 "asn1p_y.y"
+case 279:
+#line 2170 "asn1p_y.y"
{ yyval.a_tag.tag_mode = TM_EXPLICIT; ;
break;}
-case 281:
-#line 2181 "asn1p_y.y"
+case 280:
+#line 2174 "asn1p_y.y"
{
checkmem(yyvsp[0].tv_str);
yyval.tv_str = yyvsp[0].tv_str;
;
break;}
-case 282:
-#line 2185 "asn1p_y.y"
+case 281:
+#line 2178 "asn1p_y.y"
{
checkmem(yyvsp[0].tv_str);
yyval.tv_str = yyvsp[0].tv_str;
;
break;}
-case 283:
-#line 2193 "asn1p_y.y"
+case 282:
+#line 2186 "asn1p_y.y"
{
checkmem(yyvsp[0].tv_str);
yyval.tv_str = yyvsp[0].tv_str;
;
break;}
-case 284:
-#line 2200 "asn1p_y.y"
+case 283:
+#line 2193 "asn1p_y.y"
{ yyval.tv_str = 0; ;
break;}
-case 285:
-#line 2201 "asn1p_y.y"
+case 284:
+#line 2194 "asn1p_y.y"
{
yyval.tv_str = yyvsp[0].tv_str;
;
break;}
-case 286:
-#line 2207 "asn1p_y.y"
+case 285:
+#line 2200 "asn1p_y.y"
{
checkmem(yyvsp[0].tv_str);
yyval.tv_str = yyvsp[0].tv_str;
@@ -3783,7 +3777,7 @@ yyerrhandle:
}
return 1;
}
-#line 2213 "asn1p_y.y"
+#line 2206 "asn1p_y.y"
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 323ebe79..a3d055c6 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -242,8 +242,7 @@ static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
%type <a_ref> ComplexTypeReference
%type <a_ref> ComplexTypeReferenceAmpList
%type <a_refcomp> ComplexTypeReferenceElement
-%type <a_refcomp> ClassFieldIdentifier
-%type <a_refcomp> ClassFieldName
+%type <a_refcomp> PrimitiveFieldReference
%type <a_expr> FieldSpec
%type <a_ref> FieldName
%type <a_ref> DefinedObjectClass
@@ -1081,14 +1080,9 @@ WithSyntaxToken:
| TOK_Literal {
$$ = asn1p_wsyntx_chunk_frombuf($1, strlen($1), 0);
}
- | ClassFieldIdentifier {
- asn1p_ref_t *ref;
- int ret;
- ref = asn1p_ref_new(yylineno);
- checkmem(ref);
- ret = asn1p_ref_add_component(ref, $1.name, $1.lex_type);
- checkmem(ret == 0);
- $$ = asn1p_wsyntx_chunk_fromref(ref, 0);
+ | PrimitiveFieldReference {
+ $$ = asn1p_wsyntx_chunk_frombuf($1.name, strlen($1.name), 0);
+ $$->type = WC_FIELD;
}
| '[' WithSyntaxList ']' {
$$ = asn1p_wsyntx_chunk_fromsyntax($2);
@@ -1365,10 +1359,9 @@ ComplexTypeReferenceAmpList:
}
;
-ComplexTypeReferenceElement: ClassFieldName;
-ClassFieldIdentifier: ClassFieldName;
+ComplexTypeReferenceElement: PrimitiveFieldReference;
-ClassFieldName:
+PrimitiveFieldReference:
/* "&Type1" */
TOK_typefieldreference {
$$.lex_type = RLT_AmpUppercase;
diff --git a/libasn1parser/asn1parser.c b/libasn1parser/asn1parser.c
index f59d1afe..bd712b3c 100644
--- a/libasn1parser/asn1parser.c
+++ b/libasn1parser/asn1parser.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
@@ -184,3 +185,21 @@ _asn1p_fix_modules(asn1p_t *a, const char *fname) {
}
+int
+asn1p_atoi(const char *ptr, asn1c_integer_t *value) {
+ errno = 0; /* Clear the error code */
+
+ if(sizeof(*value) <= sizeof(int)) {
+ *value = strtol(ptr, 0, 10);
+ } else {
+#ifdef HAVE_STRTOIMAX
+ *value = strtoimax(ptr, 0, 10);
+#elif HAVE_STRTOLL
+ *value = strtoll(ptr, 0, 10);
+#else
+ *value = strtol(ptr, 0, 10);
+#endif
+ }
+
+ return errno == 0 ? 0 : -1;
+}
diff --git a/libasn1parser/asn1parser.h b/libasn1parser/asn1parser.h
index fc8de37e..ceb099e7 100644
--- a/libasn1parser/asn1parser.h
+++ b/libasn1parser/asn1parser.h
@@ -69,4 +69,6 @@ asn1p_t *asn1p_parse_file(const char *filename,
asn1p_t *asn1p_parse_buffer(const char *buffer, int size /* = -1 */,
enum asn1p_flags);
+int asn1p_atoi(const char *ptr, asn1c_integer_t *r_value);
+
#endif /* ASN1PARSER_H */
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
index 865d90b1..ced31db3 100644
--- a/libasn1print/asn1print.c
+++ b/libasn1print/asn1print.c
@@ -106,7 +106,7 @@ asn1print_module(asn1p_t *asn, asn1p_module_t *mod, enum asn1print_flags flags)
TQ_FOR(tc, &(mod->members), next) {
asn1print_expr(asn, mod, tc, flags, 0);
- if(flags & APF_DEBUG_CONSTRAINTS)
+ if(flags & APF_PRINT_CONSTRAINTS)
printf("\n");
else
printf("\n\n");
@@ -416,11 +416,9 @@ asn1print_with_syntax(asn1p_wsyntx_t *wx, enum asn1print_flags flags) {
switch(wc->type) {
case WC_LITERAL:
case WC_WHITESPACE:
+ case WC_FIELD:
printf("%s", wc->content.token);
break;
- case WC_REFERENCE:
- asn1print_ref(wc->content.ref, flags);
- break;
case WC_OPTIONALGROUP:
printf("[");
asn1print_with_syntax(wc->content.syntax,flags);
@@ -690,7 +688,7 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri
/*
* The following section exists entirely for debugging.
*/
- if(flags & APF_DEBUG_CONSTRAINTS
+ if(flags & APF_PRINT_CONSTRAINTS
&& tc->expr_type != A1TC_EXTENSIBLE) {
asn1p_expr_t *top_parent;
@@ -713,6 +711,41 @@ asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1pri
printf("\n");
}
+ if(flags & APF_PRINT_CLASS_MATRIX
+ && tc->expr_type == A1TC_CLASSDEF) do {
+ int r, col, maxidlen;
+ if(tc->object_class_matrix.rows == 0) {
+ printf("\n-- Class matrix is empty");
+ break;
+ }
+ printf("\n-- Class matrix has %d entr%s:\n",
+ tc->object_class_matrix.rows,
+ tc->object_class_matrix.rows==1 ? "y" : "ies");
+ maxidlen = tc->object_class_matrix.max_identifier_length;
+ for(r = -1; r < tc->object_class_matrix.rows; r++) {
+ struct asn1p_ioc_row_s *row;
+ row = tc->object_class_matrix.row[r<0?0:r];
+ if(r < 0) printf("-- %s", r > 9 ? " " : "");
+ else printf("-- [%*d]", r > 9 ? 2 : 1, r+1);
+ for(col = 0; col < row->columns; col++) {
+ struct asn1p_ioc_cell_s *cell;
+ cell = &row->column[col];
+ if(r < 0) {
+ printf("[%*s]", maxidlen,
+ cell->field->Identifier);
+ continue;
+ }
+ if(!cell->value) {
+ printf(" %*s ", maxidlen, "<no entry>");
+ continue;
+ }
+ printf(" %*s ", maxidlen,
+ cell->value->Identifier);
+ }
+ printf("\n");
+ }
+ } while(0);
+
return 0;
}
diff --git a/libasn1print/asn1print.h b/libasn1print/asn1print.h
index 336ba1eb..c24fa0cb 100644
--- a/libasn1print/asn1print.h
+++ b/libasn1print/asn1print.h
@@ -3,10 +3,11 @@
enum asn1print_flags {
APF_NOFLAGS,
- APF_LINE_COMMENTS = 0x01, /* Include line comments */
- APF_DEBUG_CONSTRAINTS = 0x02, /* Explain constraints */
+ APF_NOINDENT = 0x01, /* Disable indentation */
+ APF_LINE_COMMENTS = 0x02, /* Include line comments */
APF_PRINT_XML_DTD = 0x04, /* Generate XML DTD */
- APF_NOINDENT = 0x08, /* Disable indentation */
+ APF_PRINT_CONSTRAINTS = 0x08, /* Explain constraints */
+ APF_PRINT_CLASS_MATRIX = 0x10, /* Dump class matrix */
};
/*
diff --git a/tests/34-class-OK.asn1 b/tests/34-class-OK.asn1
index 48437fba..2ea89011 100644
--- a/tests/34-class-OK.asn1
+++ b/tests/34-class-OK.asn1
@@ -14,7 +14,7 @@ BEGIN
-- First CLASS
EXTENSION ::= CLASS {
- &id [PRIVATE 0] OBJECT IDENTIFIER UNIQUE,
+ &id [PRIVATE 0] INTEGER UNIQUE,
&ExtnType
} WITH SYNTAX {
SYNTAX &ExtnType
@@ -35,6 +35,8 @@ BEGIN
terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23}
+ TerminalType ::= INTEGER { terminal(0) }
+
-- Advanced CLASS extraction
ExtensionAttribute ::= SEQUENCE {
diff --git a/tests/34-class-OK.asn1.-EF b/tests/34-class-OK.asn1.-EF
index 8cc56eee..8af80a86 100644
--- a/tests/34-class-OK.asn1.-EF
+++ b/tests/34-class-OK.asn1.-EF
@@ -4,7 +4,7 @@ DEFINITIONS IMPLICIT TAGS ::=
BEGIN
EXTENSION ::= CLASS {
- &id [PRIVATE 0] OBJECT IDENTIFIER UNIQUE,
+ &id [PRIVATE 0] INTEGER UNIQUE,
&ExtnType
} WITH SYNTAX {
SYNTAX &ExtnType
@@ -24,6 +24,10 @@ EXTENSION-ATTRIBUTE ::= CLASS {
terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23}
+TerminalType ::= INTEGER {
+ terminal(0)
+}
+
ExtensionAttribute ::= SEQUENCE {
extension-attribute-type [0] IMPLICIT EXTENSION-ATTRIBUTE.&id ({ExtensionAttributeTable}),
extension-attribute-value [1] EXPLICIT EXTENSION-ATTRIBUTE.&Type ({ExtensionAttributeTable}{@extension-attribute-type})
diff --git a/tests/34-class-OK.asn1.-EFprint-class-matrix b/tests/34-class-OK.asn1.-EFprint-class-matrix
new file mode 100644
index 00000000..f97de09d
--- /dev/null
+++ b/tests/34-class-OK.asn1.-EFprint-class-matrix
@@ -0,0 +1,43 @@
+ModuleTestClassSimple { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+ spelio(9363) software(1) asn1c(5) test(1) 34 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+EXTENSION ::= CLASS {
+ &id [PRIVATE 0] INTEGER UNIQUE,
+ &ExtnType
+} WITH SYNTAX {
+ SYNTAX &ExtnType
+ IDENTIFIED BY &id
+ }
+
+-- Class matrix is empty
+
+Ext1 ::= SEQUENCE {
+ extnId EXTENSION.&id
+}
+
+EXTENSION-ATTRIBUTE ::= CLASS {
+ &id INTEGER (0..256) UNIQUE,
+ &Type ANY
+} WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+-- Class matrix has 1 entry:
+-- [ &id][ &Type]
+-- [1] 23 TerminalType
+
+
+terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23}
+
+TerminalType ::= INTEGER {
+ terminal(0)
+}
+
+ExtensionAttribute ::= SEQUENCE {
+ extension-attribute-type [0] IMPLICIT EXTENSION-ATTRIBUTE.&id ({ExtensionAttributeTable}),
+ extension-attribute-value [1] EXPLICIT EXTENSION-ATTRIBUTE.&Type ({ExtensionAttributeTable}{@extension-attribute-type})
+}
+
+ub-extension-attributes INTEGER ::= 256
+
+END