From: Peep P. <so...@us...> - 2004-07-21 12:08:29
|
Update of /cvsroot/agd/server/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10223 Modified Files: dfparse.y Log Message: Uses a much simpler and smarter system; arrays Index: dfparse.y =================================================================== RCS file: /cvsroot/agd/server/src/dfparse.y,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- dfparse.y 8 Jun 2004 20:36:41 -0000 1.10 +++ dfparse.y 21 Jul 2004 12:08:17 -0000 1.11 @@ -75,7 +75,7 @@ %token <s> L_IDENTIFIER %token <i> L_DATA_TYPE -%type <i> type +%type <i> type arg_type optional_star %type <a> arguments argument_and_another %% @@ -88,11 +88,7 @@ dfdecl: type L_IDENTIFIER '(' arguments ')' { -/* int i, j, index;*/ dfdecl_t decl; - -/* int find_linear_len(struct arr_t *a);*/ - decl.ret = $1; decl.name = $2; decl.num_arg = $4.len; @@ -103,64 +99,42 @@ dfdecl = xrealloc(dfdecl, sizeof(dfdecl_t) * ++numdecl); dfdecl[numdecl-1] = decl; -/* - decl.arglen = find_linear_len(&$4); - if(decl.arglen > maxarglen) - maxarglen = decl.arglen; - if(decl.arglen) - decl.args = xmalloc(sizeof(int) * decl.arglen); - for(index=i=0;i<$4.length;i++) { - struct arr_t *var = (struct arr_t *) $4.data[i]; - decl.args[index++] = var->length; - for(j=0;j<var->length;j++) - decl.args[index++] = (int) var->data[j]; - } - dfdecl = xrealloc(dfdecl, sizeof(dfdecl_t) * ++numdecl); - dfdecl[numdecl-1] = decl; -*/ - } ; -type: - L_DATA_TYPE /* optional_star */ +optional_star: + '*' { $$ = T_ARRAY; } + | /* empty */ { $$ = 0; } ; +type: + L_DATA_TYPE optional_star + { $$ = $1|$2; } + ; + +arg_type: + type + | '*' { $$ = T_ARRAY; } + ; + arguments: /* empty */ { $$.len = 0; } | argument_and_another ; argument_and_another: - type + arg_type { $$.len = 1; $$.data = xmalloc(sizeof(arr_t)); $$.data[0] = $1; } - | argument_and_another ',' type + | argument_and_another ',' arg_type { $$ = $1; $$.len++; $$.data = xrealloc($$.data, $$.len * sizeof(arr_t)); $$.data[$$.len-1] = $3; -/* - int i, foo; - - foo = $1.length ? 1 : 0; - $$.length = $2.length + foo; - $$.data = xmalloc(sizeof(struct arr_t*) * $$.length); - - if($1.length) { - struct arr_t *a = xmalloc(sizeof(struct arr_t)); - *a = $1; - $$.data[0] = (int) a; - } - - for(i=foo;i<$$.length;i++) { - $$.data[i] = $2.data[i-foo]; - } -*/ } ; @@ -174,21 +148,14 @@ return 0; } -#if 0 -int find_linear_len(struct arr_t *a) -{ - int len; - int i, j; - for(len=i=0;i<a->length;i++,len++) { - struct arr_t *p = (struct arr_t *) a->data[i]; - for(j=0;j<p->length;j++,len++); - } - return len; -} -#endif - void write_type(int t) { + if(t & T_ARRAY) { + write_type(t & ~T_ARRAY); + printf("|T_ARRAY"); + return; + } + /* Just for readability. */ switch(t) { case T_INT: @@ -211,7 +178,7 @@ void print_declarations(void) { - int i, j/*, k*/; + int i, j; printf("dfdecl_t decl[] = {\n"); for(i=0;i<numdecl;i++) { @@ -232,31 +199,7 @@ putchar(','); else putchar(' '); - -#if 0 - int len = dfdecl[i].args[j]; - printf(" %d,", len); - for(k=j+1;k-j<=len;k++) { - putchar(' '); - /* Just for readability. */ - switch(dfdecl[i].args[k]) { - case T_INT: printf("T_INT"); break; - case T_STRING: printf("T_STRING"); break; - case T_OBJECT: printf("T_OBJECT"); break; - case T_VOID: printf("T_VOID"); break; - default: printf("%d", dfdecl[i].args[k]); break; - } - if(k+j<=len && k+j+1 < dfdecl[i].arglen) - putchar(','); - else - putchar(' '); - } - j += len; -#endif } - -/* if(!j) - printf("0");*/ if(j) putchar('}'); printf(" }"); |