Ignore:
Timestamp:
Mar 24, 2007, 9:08:34 PM (18 years ago)
Author:
cinc
Message:

Rewrote symbol handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/idl-compiler/c/token.c

    r264 r265  
    4646  is e.g. a typespec or just a var name.
    4747 */
    48 void setSymbolInfo(GTokenType token)
     48void setCurSymbolInfo(void)
    4949{
    5050  PSYMBOLINFO psi;
     
    5252  psi=(PSYMBOLINFO)gScanner->user_data;
    5353
    54   switch(token)
     54  switch(curToken)
    5555    {
    5656    case G_TOKEN_IDENTIFIER:
     
    6161      break;
    6262    }
    63   if(token>G_TOKEN_LAST)
    64     {
    65       psi->uiCurSymbolKind=psi->pSymbols[token-G_TOKEN_LAST-1].uiKind;
     63  if(curToken==G_TOKEN_SYMBOL)
     64    {
     65      GTokenValue value;
     66      PSYMBOL pCurSymbol;
     67     
     68      value=gScanner->value;
     69      pCurSymbol=value.v_symbol;
     70
     71      psi->uiCurSymbolKind=pCurSymbol->uiKind;
    6672    }
    6773}
     
    7581}
    7682
    77 static guint getKindFromTokenType(GTokenType token)
    78 {
    79   if(token>G_TOKEN_LAST)
    80     {
    81       PSYMBOLINFO psi;
     83/* This token is not necessarily the current token! */
     84static guint getKindOfNextToken()
     85{
     86  /* Load info into gScanner */
     87  g_scanner_peek_next_token(gScanner);
     88
     89  if(gScanner->next_token==G_TOKEN_SYMBOL)
     90    {
     91      GTokenValue value;
     92      PSYMBOL pCurSymbol;
     93
     94      value=gScanner->next_value;
     95      pCurSymbol=value.v_symbol;
    8296     
    83       psi=(PSYMBOLINFO)gScanner->user_data;
    84       return psi->pSymbols[token-G_TOKEN_LAST-1].uiKind;
    85     }
    86   switch(token)
     97      return pCurSymbol->uiKind;
     98    }
     99  switch(gScanner->next_token)
    87100    {
    88101    case G_TOKEN_IDENTIFIER:
     
    98111}
    99112
     113#if 0
    100114guint queryNextTokensKind(void)
    101115{
    102116  return getKindFromTokenType(gScanner->next_token);
    103117}
    104 
     118#endif
    105119
    106120/* Well, the name says all... */
     
    108122{
    109123  curToken = g_scanner_get_next_token(gScanner);
    110   setSymbolInfo(curToken);
     124  setCurSymbolInfo();
    111125}
    112126
    113127gboolean matchNextKind(guint uiKind)
    114128{
    115   GTokenType token;
    116 
    117   token=g_scanner_peek_next_token(gScanner);
    118   if(uiKind==getKindFromTokenType(token))
     129  if(uiKind==getKindOfNextToken())
    119130    {
    120131      getNextToken();
     
    158169  switch(token)
    159170    {
    160     case IDL_SYMBOL_INTERFACE:
    161       g_message("Token: %d (IDL_SYMBOL_INTERFACE)\t\t\t (LINE %d)", token, g_scanner_cur_line(gScanner));
    162       break;
     171    case G_TOKEN_SYMBOL:
     172      {
     173        PSYMBOL pCurSymbol=value.v_symbol;
     174
     175        switch(pCurSymbol->uiSymbolToken)
     176          {
     177          case IDL_SYMBOL_INTERFACE:
     178            g_message("Token: %d (IDL_SYMBOL_INTERFACE)\t\t\t (LINE %d)",
     179                      pCurSymbol->uiSymbolToken, g_scanner_cur_line(gScanner));
     180            break;
     181          case IDL_SYMBOL_DEFINE:
     182            g_message("Token: %d (IDL_SYMBOL_DEFINE)\t\t\t", pCurSymbol->uiSymbolToken);
     183            break;
     184          case IDL_SYMBOL_IFDEF:
     185            g_message("Token: %d (IDL_SYMBOL_IFDEF)\t\t\t", pCurSymbol->uiSymbolToken);
     186            break;
     187          case IDL_SYMBOL_ENDIF:
     188            g_message("Token: %d (IDL_SYMBOL_ENDIF)\t\t\t", pCurSymbol->uiSymbolToken);
     189            break;
     190          default:
     191            {
     192              PSYMBOLINFO psi;
     193              psi=(PSYMBOLINFO)gScanner->user_data;         
     194           
     195              g_message("Token: %d (%s)\t\t\t (LINE %d)", pCurSymbol->uiSymbolToken,
     196                        pCurSymbol->chrSymbolName, g_scanner_cur_line(gScanner));
     197
     198            break;
     199            }
     200          }/* switch */
     201        break;
     202      }
    163203    case G_TOKEN_IDENTIFIER:
    164204      g_message("Token: %d (G_TOKEN_IDENTIFIER)\t\t%s (LINE %d)",
     
    198238      g_message("Token: %d (G_TOKEN_INT)\t\t\t%ld", token, value.v_int);
    199239      break;
    200     case IDL_SYMBOL_DEFINE:
    201       g_message("Token: %d (IDL_SYMBOL_DEFINE)\t\t\t", token);
    202       break;
    203     case IDL_SYMBOL_IFDEF:
    204       g_message("Token: %d (IDL_SYMBOL_IFDEF)\t\t\t", token);
    205       break;
    206     case IDL_SYMBOL_ENDIF:
    207       g_message("Token: %d (IDL_SYMBOL_ENDIF)\t\t\t", token);
    208       break;
    209240    default:
    210       {
    211         PSYMBOLINFO psi;
    212         psi=(PSYMBOLINFO)gScanner->user_data;
    213 
    214         if(token>G_TOKEN_LAST)
    215           g_message("Token: %d (%s)\t\t\t (LINE %d)", token,
    216                     psi->pSymbols[token-G_TOKEN_LAST-1].chrSymbolName, g_scanner_cur_line(gScanner));
    217         else
    218           g_message("Token: %d (---)\t\t\t (LINE %d)", token, g_scanner_cur_line(gScanner));
     241      {       
     242        g_message("Token: %d (---)\t\t\t (LINE %d)", token, g_scanner_cur_line(gScanner));
    219243        break;
    220244      } /* default */
Note: See TracChangeset for help on using the changeset viewer.