static int get_strtoken(void) { int ch; int len=0; if(!var_prevch) { for(;;) { ch=getch(); if(ch<0) return(V_END); if((ch==' ')||(ch=='\t')||(ch=='\n')||(ch=='\r')) continue; break; } } else { ch=var_prevch; var_prevch=0; } for(yytext[len++]=ch;;yytext[len++]=ch) { if(len==T_MAX_STR) { yytext=(char *)realloc_2(yytext, (T_MAX_STR=T_MAX_STR*2)+1); } ch=getch(); if((ch==' ')||(ch=='\t')||(ch=='\n')||(ch=='\r')||(ch<0)) break; } yytext[len]=0; /* terminator */ yylen=len; return(V_STRING); }
static void set_fac_name_1 (struct tree *t) { for (; t != NULL; t = t->next) { int prev_len = GLOBALS->fac_name_len_ghw_c_1; /* Complete the name. */ if(t->name[0]) /* originally (t->name != NULL) when using pointers */ { int len; len = strlen (t->name) + 1; if (len + GLOBALS->fac_name_len_ghw_c_1 >= GLOBALS->fac_name_max_ghw_c_1) { GLOBALS->fac_name_max_ghw_c_1 *= 2; if (GLOBALS->fac_name_max_ghw_c_1 <= len + GLOBALS->fac_name_len_ghw_c_1) GLOBALS->fac_name_max_ghw_c_1 = len + GLOBALS->fac_name_len_ghw_c_1 + 1; GLOBALS->fac_name_ghw_c_1 = realloc_2(GLOBALS->fac_name_ghw_c_1, GLOBALS->fac_name_max_ghw_c_1); } if(t->name[0] != '[') { GLOBALS->fac_name_ghw_c_1[GLOBALS->fac_name_len_ghw_c_1] = '.'; /* The NUL is copied, since LEN is 1 + strlen. */ memcpy (GLOBALS->fac_name_ghw_c_1 + GLOBALS->fac_name_len_ghw_c_1 + 1, t->name, len); GLOBALS->fac_name_len_ghw_c_1 += len; } else { memcpy (GLOBALS->fac_name_ghw_c_1 + GLOBALS->fac_name_len_ghw_c_1, t->name, len); GLOBALS->fac_name_len_ghw_c_1 += (len - 1); } } if (t->t_which >= 0) { struct symchain *sc = GLOBALS->firstnode; struct symbol *s = sc->symbol; s->name = strdup_2(GLOBALS->fac_name_ghw_c_1); s->n = GLOBALS->nxp_ghw_c_1[t->t_which]; if(!s->n->nname) s->n->nname = s->name; t->t_which = GLOBALS->sym_which_ghw_c_1++; /* patch in gtkwave "which" as node is correct */ GLOBALS->curnode = GLOBALS->firstnode->next; free_2(GLOBALS->firstnode); GLOBALS->firstnode = GLOBALS->curnode; } if (t->child) set_fac_name_1 (t->child); /* Revert name. */ GLOBALS->fac_name_len_ghw_c_1 = prev_len; GLOBALS->fac_name_ghw_c_1[GLOBALS->fac_name_len_ghw_c_1] = 0; } }
static int get_vartoken_patched(int match_kw) { int ch; int i, len=0; if(!var_prevch) { for(;;) { ch=getch_patched(); if(ch<0) { free_2(varsplit); varsplit=NULL; return(V_END); } if((ch==' ')||(ch=='\t')||(ch=='\n')||(ch=='\r')) continue; break; } } else { ch=var_prevch; var_prevch=0; } if(ch=='[') return(V_LB); if(ch==':') return(V_COLON); if(ch==']') return(V_RB); for(yytext[len++]=ch;;yytext[len++]=ch) { if(len==T_MAX_STR) { yytext=(char *)realloc_2(yytext, (T_MAX_STR=T_MAX_STR*2)+1); } ch=getch_patched(); if(ch<0) { free_2(varsplit); varsplit=NULL; break; } if((ch==':')||(ch==']')) { var_prevch=ch; break; } } yytext[len]=0; /* terminator */ if(match_kw) for(i=0;i<NUM_VTOKENS;i++) { if(!strcmp(yytext,vartypes[i])) { if(ch<0) { free_2(varsplit); varsplit=NULL; } return(varenums[i]); } } yylen=len; if(ch<0) { free_2(varsplit); varsplit=NULL; } return(V_STRING); }
static int get_vartoken(int match_kw) { int ch; int i, len=0; if(varsplit) { int rc=get_vartoken_patched(match_kw); if(rc!=V_END) return(rc); var_prevch=0; } if(!var_prevch) { for(;;) { ch=getch(); if(ch<0) return(V_END); if((ch==' ')||(ch=='\t')||(ch=='\n')||(ch=='\r')) continue; break; } } else { ch=var_prevch; var_prevch=0; } if(ch=='[') return(V_LB); if(ch==':') return(V_COLON); if(ch==']') return(V_RB); if(ch=='#') /* for MTI System Verilog '$var reg 64 >w #implicit-var###VarElem:ram_di[0.0] [63:0] $end' style declarations */ { /* debussy simply escapes until the space */ yytext[len++]= '\\'; } for(yytext[len++]=ch;;yytext[len++]=ch) { if(len==T_MAX_STR) { yytext=(char *)realloc_2(yytext, (T_MAX_STR=T_MAX_STR*2)+1); } ch=getch(); if(ch==' ') { if(match_kw) break; if(getch_peek() == '[') { ch = getch(); varsplit=yytext+len; /* keep looping so we get the *last* one */ continue; } } if((ch==' ')||(ch=='\t')||(ch=='\n')||(ch=='\r')||(ch<0)) break; if((ch=='[')&&(yytext[0]!='\\')) { varsplit=yytext+len; /* keep looping so we get the *last* one */ } else if(((ch==':')||(ch==']'))&&(!varsplit)&&(yytext[0]!='\\')) { var_prevch=ch; break; } } yytext[len]=0; /* absolute terminator */ if((varsplit)&&(yytext[len-1]==']')) { char *vst; vst=malloc_2(strlen(varsplit)+1); strcpy(vst, varsplit); *varsplit=0x00; /* zero out var name at the left bracket */ len=varsplit-yytext; varsplit=vsplitcurr=vst; var_prevch=0; } else { varsplit=NULL; } if(match_kw) for(i=0;i<NUM_VTOKENS;i++) { if(!strcmp(yytext,vartypes[i])) { return(varenums[i]); } } yylen=len; return(V_STRING); }
/* * simple tokenizer */ static int get_token(void) { int ch; int i, len=0; int is_string=0; char *yyshadow; for(;;) { ch=getch(); if(ch<0) return(T_EOF); if(ch<=' ') continue; /* val<=' ' is a quick whitespace check */ break; /* (take advantage of fact that vcd is text) */ } if(ch=='$') { yytext[len++]=ch; for(;;) { ch=getch(); if(ch<0) return(T_EOF); if(ch<=' ') continue; break; } } else { is_string=1; } for(yytext[len++]=ch;;yytext[len++]=ch) { if(len==T_MAX_STR) { yytext=(char *)realloc_2(yytext, (T_MAX_STR=T_MAX_STR*2)+1); } ch=getch(); if(ch<=' ') break; } yytext[len]=0; /* terminator */ if(is_string) { yylen=len; return(T_STRING); } yyshadow=yytext; do { yyshadow++; for(i=0;i<NUM_TOKENS;i++) { if(!strcmp(yyshadow,tokens[i])) { return(i); } } } while(*yyshadow=='$'); /* fix for RCS ids in version strings */ return(T_UNKNOWN_KEY); }