optimize the case with a simple type
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1371 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -239,9 +239,11 @@ encode_type (char *name, Type *t)
|
|||||||
fprintf (codefile,
|
fprintf (codefile,
|
||||||
"if(%s)\n",
|
"if(%s)\n",
|
||||||
s);
|
s);
|
||||||
|
#if 1
|
||||||
fprintf (codefile, "{\n"
|
fprintf (codefile, "{\n"
|
||||||
"int oldret = ret;\n"
|
"int oldret = ret;\n"
|
||||||
"ret = 0;\n");
|
"ret = 0;\n");
|
||||||
|
#endif
|
||||||
encode_type (s, m->type);
|
encode_type (s, m->type);
|
||||||
fprintf (codefile,
|
fprintf (codefile,
|
||||||
"l = der_put_length_and_tag (p, len, ret, CONTEXT, CONS, %d);\n"
|
"l = der_put_length_and_tag (p, len, ret, CONTEXT, CONS, %d);\n"
|
||||||
@@ -251,9 +253,11 @@ encode_type (char *name, Type *t)
|
|||||||
"len -= l;\n"
|
"len -= l;\n"
|
||||||
"ret += l;\n\n",
|
"ret += l;\n\n",
|
||||||
m->val);
|
m->val);
|
||||||
|
#if 1
|
||||||
fprintf (codefile,
|
fprintf (codefile,
|
||||||
"ret += oldret;\n"
|
"ret += oldret;\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
|
#endif
|
||||||
if (tag == -1)
|
if (tag == -1)
|
||||||
tag = m->val;
|
tag = m->val;
|
||||||
free (s);
|
free (s);
|
||||||
@@ -272,13 +276,19 @@ encode_type (char *name, Type *t)
|
|||||||
|
|
||||||
fprintf (codefile,
|
fprintf (codefile,
|
||||||
"for(i = (%s)->len - 1; i >= 0; --i) {\n"
|
"for(i = (%s)->len - 1; i >= 0; --i) {\n"
|
||||||
|
#if 1
|
||||||
"int oldret = ret;\n"
|
"int oldret = ret;\n"
|
||||||
"ret = 0;\n",
|
"ret = 0;\n",
|
||||||
|
#else
|
||||||
|
,
|
||||||
|
#endif
|
||||||
name);
|
name);
|
||||||
sprintf (n, "&(%s)->val[i]", name);
|
sprintf (n, "&(%s)->val[i]", name);
|
||||||
encode_type (n, t->subtype);
|
encode_type (n, t->subtype);
|
||||||
fprintf (codefile,
|
fprintf (codefile,
|
||||||
|
#if 1
|
||||||
"ret += oldret;\n"
|
"ret += oldret;\n"
|
||||||
|
#endif
|
||||||
"}\n"
|
"}\n"
|
||||||
"l = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence);\n"
|
"l = der_put_length_and_tag (p, len, ret, UNIV, CONS, UT_Sequence);\n"
|
||||||
"if(l < 0)\n"
|
"if(l < 0)\n"
|
||||||
@@ -320,14 +330,38 @@ generate_type_encode (Symbol *s)
|
|||||||
|
|
||||||
fprintf (codefile, "int\n"
|
fprintf (codefile, "int\n"
|
||||||
"encode_%s(unsigned char *p, int len, %s *data)\n"
|
"encode_%s(unsigned char *p, int len, %s *data)\n"
|
||||||
"{\n"
|
"{\n",
|
||||||
"int ret = 0;\n"
|
|
||||||
"int l, i;\n\n",
|
|
||||||
s->gen_name, s->gen_name);
|
s->gen_name, s->gen_name);
|
||||||
|
|
||||||
encode_type ("data", s->type);
|
switch (s->type->type) {
|
||||||
fprintf (codefile, "return ret;\n"
|
case TInteger:
|
||||||
"}\n\n");
|
fprintf (codefile, "return encode_integer (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TOctetString:
|
||||||
|
fprintf (codefile, "return encode_octet_string (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TGeneralizedTime:
|
||||||
|
fprintf (codefile, "return encode_generalized_time (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TGeneralString:
|
||||||
|
fprintf (codefile, "return encode_general_string (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TBitString:
|
||||||
|
case TSequence:
|
||||||
|
case TSequenceOf:
|
||||||
|
case TApplication:
|
||||||
|
case TType:
|
||||||
|
fprintf (codefile,
|
||||||
|
"int ret = 0;\n"
|
||||||
|
"int l, i;\n\n");
|
||||||
|
|
||||||
|
encode_type ("data", s->type);
|
||||||
|
fprintf (codefile, "return ret;\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
fprintf (codefile, "}\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -563,6 +597,50 @@ decode_type (char *name, Type *t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
generate_type_decode (Symbol *s)
|
||||||
|
{
|
||||||
|
fprintf (headerfile,
|
||||||
|
"int decode_%s(unsigned char *, int, %s *);\n",
|
||||||
|
s->gen_name, s->gen_name);
|
||||||
|
|
||||||
|
fprintf (codefile, "int\n"
|
||||||
|
"decode_%s(unsigned char *p, int len, %s *data)\n"
|
||||||
|
"{\n",
|
||||||
|
s->gen_name, s->gen_name);
|
||||||
|
|
||||||
|
switch (s->type->type) {
|
||||||
|
case TInteger:
|
||||||
|
fprintf (codefile, "return decode_integer (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TOctetString:
|
||||||
|
fprintf (codefile, "return decode_octet_string (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TGeneralizedTime:
|
||||||
|
fprintf (codefile, "return decode_generalized_time (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TGeneralString:
|
||||||
|
fprintf (codefile, "return decode_general_string (p, len, data);\n");
|
||||||
|
break;
|
||||||
|
case TBitString:
|
||||||
|
case TSequence:
|
||||||
|
case TSequenceOf:
|
||||||
|
case TApplication:
|
||||||
|
case TType:
|
||||||
|
fprintf (codefile,
|
||||||
|
"int ret = 0, reallen;\n"
|
||||||
|
"int l, i;\n\n");
|
||||||
|
|
||||||
|
decode_type ("data", s->type);
|
||||||
|
fprintf (codefile, "return ret;\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
fprintf (codefile, "}\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static void
|
static void
|
||||||
generate_type_decode (Symbol *s)
|
generate_type_decode (Symbol *s)
|
||||||
{
|
{
|
||||||
@@ -581,6 +659,7 @@ generate_type_decode (Symbol *s)
|
|||||||
fprintf (codefile, "return ret;\n"
|
fprintf (codefile, "return ret;\n"
|
||||||
"}\n\n");
|
"}\n\n");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
generate_type (Symbol *s)
|
generate_type (Symbol *s)
|
||||||
|
Reference in New Issue
Block a user