asn1: Teach template compiler about units

This commit is contained in:
Nicolas Williams
2021-01-24 21:15:30 -06:00
parent 8fde460772
commit 17b1e809ba
3 changed files with 24 additions and 15 deletions

View File

@@ -51,7 +51,7 @@ gen_files_pkcs10 = asn1_pkcs10_asn1.x
gen_files_pkcs12 = asn1_pkcs12_asn1.x
gen_files_pkcs8 = asn1_pkcs8_asn1.x
gen_files_pkcs9 = asn1_pkcs9_asn1.x
gen_files_test_template = test_template_asn1-template.x
gen_files_test_template = asn1_test_template_asn1.x
gen_files_test = asn1_test_asn1.x
gen_files_digest = asn1_digest_asn1.x
gen_files_kx509 = asn1_kx509_asn1.x
@@ -322,7 +322,7 @@ x690sample_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/x690sample.asn1
$(ASN1_COMPILE) --one-code-file $(srcdir)/x690sample.asn1 x690sample_asn1 || (rm -f x690sample_asn1_files ; exit 1)
test_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/test.asn1
$(ASN1_COMPILE) --template --sequence=TESTSeqOf $(srcdir)/test.asn1 test_template_asn1 || (rm -f test_template_asn1_files ; exit 1)
$(ASN1_COMPILE) --one-code-file --template --sequence=TESTSeqOf $(srcdir)/test.asn1 test_template_asn1 || (rm -f test_template_asn1_files ; exit 1)
test_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/test.asn1
$(ASN1_COMPILE) --one-code-file --sequence=TESTSeqOf $(srcdir)/test.asn1 test_asn1 || (rm -f test_asn1_files ; exit 1)

View File

@@ -63,7 +63,7 @@ gen_files_pkcs10 = $(OBJ)\asn1_pkcs10_asn1.x
gen_files_test = $(OBJ)\asn1_test_asn1.x
gen_files_test_template = $(OBJ)\test_template_asn1-template.x
gen_files_test_template = $(OBJ)\asn1_test_template_asn1.x
gen_files_digest = $(OBJ)\asn1_digest_asn1.x
@@ -339,7 +339,8 @@ $(gen_files_test) $(OBJ)\test_asn1.hx: $(BINDIR)\asn1_compile.exe test.asn1
$(gen_files_test_template) $(OBJ)\test_template_asn1.hx: $(BINDIR)\asn1_compile.exe test.asn1
cd $(OBJ)
$(BINDIR)\asn1_compile.exe \
--template --sequence=TESTSeqOf \
--one-code-file --template \
--sequence=TESTSeqOf \
$(SRCDIR)\test.asn1 test_template_asn1 \
|| ($(RM) $(OBJ)\test_template_asn1.h ; exit /b 1)
cd $(SRCDIR)

View File

@@ -37,6 +37,14 @@
RCSID("$Id$");
static FILE *
get_code_file(void)
{
if (!one_code_file && template_flag && templatefile)
return templatefile;
return codefile;
}
static void
generate_2int (const Type *t, const char *gen_name)
{
@@ -46,17 +54,17 @@ generate_2int (const Type *t, const char *gen_name)
"uint64_t %s2int(%s);\n",
gen_name, gen_name);
fprintf (codefile,
fprintf (get_code_file(),
"uint64_t %s2int(%s f)\n"
"{\n"
"uint64_t r = 0;\n",
gen_name, gen_name);
HEIM_TAILQ_FOREACH(m, t->members, members) {
fprintf (codefile, "if(f.%s) r |= (1ULL << %d);\n",
fprintf (get_code_file(), "if(f.%s) r |= (1ULL << %d);\n",
m->gen_name, m->val);
}
fprintf (codefile, "return r;\n"
fprintf (get_code_file(), "return r;\n"
"}\n\n");
}
@@ -69,7 +77,7 @@ generate_int2 (const Type *t, const char *gen_name)
"%s int2%s(uint64_t);\n",
gen_name, gen_name);
fprintf (codefile,
fprintf (get_code_file(),
"%s int2%s(uint64_t n)\n"
"{\n"
"\t%s flags;\n\n"
@@ -78,11 +86,11 @@ generate_int2 (const Type *t, const char *gen_name)
if(t->members) {
HEIM_TAILQ_FOREACH(m, t->members, members) {
fprintf (codefile, "\tflags.%s = (n >> %d) & 1;\n",
fprintf (get_code_file(), "\tflags.%s = (n >> %d) & 1;\n",
m->gen_name, m->val);
}
}
fprintf (codefile, "\treturn flags;\n"
fprintf (get_code_file(), "\treturn flags;\n"
"}\n\n");
}
@@ -107,27 +115,27 @@ generate_units (const Type *t, const char *gen_name)
gen_name);
}
fprintf (codefile,
fprintf (get_code_file(),
"static struct units %s_units[] = {\n",
gen_name);
if(t->members) {
HEIM_TAILQ_FOREACH_REVERSE(m, t->members, memhead, members) {
fprintf (codefile,
fprintf (get_code_file(),
"\t{\"%s\",\t1ULL << %d},\n", m->name, m->val);
}
}
fprintf (codefile,
fprintf (get_code_file(),
"\t{NULL,\t0}\n"
"};\n\n");
if (template_flag)
fprintf (codefile,
fprintf (get_code_file(),
"const struct units * asn1_%s_table_units = %s_units;\n",
gen_name, gen_name);
else
fprintf (codefile,
fprintf (get_code_file(),
"const struct units * asn1_%s_units(void){\n"
"return %s_units;\n"
"}\n\n",