version 1.1, 2003/05/11 21:36:33 |
version 1.2, 2005/10/16 18:56:35 |
|
|
#include "gen_locl.h" |
#include "gen_locl.h" |
|
|
/* |
/* |
RCSID("$KTH: gen_length.c,v 1.11 2001/09/25 13:39:26 assar Exp $"); |
RCSID("$KTH: gen_length.c,v 1.14 2004/01/19 17:54:33 lha Exp $"); |
*/ |
*/ |
|
|
static void |
static void |
|
|
variable, variable); |
variable, variable); |
|
|
fprintf (codefile, "for(i = (%s)->len - 1; i >= 0; --i){\n", name); |
fprintf (codefile, "for(i = (%s)->len - 1; i >= 0; --i){\n", name); |
|
fprintf (codefile, "int oldret = %s;\n" |
|
"%s = 0;\n", variable, variable); |
asprintf (&n, "&(%s)->val[i]", name); |
asprintf (&n, "&(%s)->val[i]", name); |
length_type(n, t->subtype, variable); |
length_type(n, t->subtype, variable); |
|
fprintf (codefile, "%s += oldret;\n", |
|
variable); |
fprintf (codefile, "}\n"); |
fprintf (codefile, "}\n"); |
|
|
fprintf (codefile, |
fprintf (codefile, |
|
|
case TGeneralString: |
case TGeneralString: |
length_primitive ("general_string", name, variable); |
length_primitive ("general_string", name, variable); |
break; |
break; |
|
case TUTF8String: |
|
length_primitive ("utf8string", name, variable); |
|
break; |
|
case TNull: |
|
fprintf (codefile, "%s += length_nulltype();\n", variable); |
|
break; |
case TApplication: |
case TApplication: |
length_type (name, t->subtype, variable); |
length_type (name, t->subtype, variable); |
fprintf (codefile, "ret += 1 + length_len (ret);\n"); |
fprintf (codefile, "ret += 1 + length_len (ret);\n"); |
|
break; |
|
case TBoolean: |
|
length_primitive ("boolean", name, variable); |
break; |
break; |
default : |
default : |
abort (); |
abort (); |