Changeset 265 for trunk/idl-compiler/c/nom-idl-compiler.c
- Timestamp:
- Mar 24, 2007, 9:08:34 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/idl-compiler/c/nom-idl-compiler.c
r264 r265 78 78 /* Symbols defined for our IDL language. 79 79 Keep this in synch with the defined enums! */ 80 constSYMBOL idlSymbols[]={80 SYMBOL idlSymbols[]={ 81 81 {"interface", IDL_SYMBOL_INTERFACE, KIND_UNKNOWN}, /* 71 */ 82 82 {"NOMCLASSVERSION", IDL_SYMBOL_CLSVERSION, KIND_UNKNOWN}, … … 103 103 SYMBOLINFO curSymbol; 104 104 105 /* Holding the current state of parsing and pointers to necessary lists. */ 106 PARSEINFO parseInfo={0}; 105 107 106 108 PINTERFACE findInterfaceFromName(gchar* chrName) … … 123 125 GTokenValue value; 124 126 125 if(G_TOKEN_IDENTIFIER==curToken) 126 return g_strdup(value.v_identifier); 127 else 128 { 129 /* It's one of our symbols. */ 130 PSYMBOLINFO psi; 131 132 if(curToken<=G_TOKEN_LAST) 133 g_scanner_unexp_token(gScanner, 134 G_TOKEN_SYMBOL, 135 NULL, 136 NULL, 137 NULL, 138 "Error in NOMINSTANCEVAR()", 139 TRUE); /* is_error */ 140 141 psi=(PSYMBOLINFO)gScanner->user_data; 142 return psi->pSymbols[curToken-G_TOKEN_LAST-1].chrSymbolName; 143 } 127 value=gScanner->value; 128 129 switch(curToken) 130 { 131 case G_TOKEN_IDENTIFIER: 132 return g_strdup(value.v_identifier); 133 break; 134 case G_TOKEN_SYMBOL: 135 { 136 /* It's one of our symbols. */ 137 PSYMBOL pCurSymbol; 138 139 pCurSymbol=value.v_symbol; 140 return g_strdup(pCurSymbol->chrSymbolName); 141 break; 142 } 143 default: 144 g_scanner_unexp_token(gScanner, 145 G_TOKEN_SYMBOL, 146 NULL, 147 NULL, 148 NULL, 149 "", 150 TRUE); /* is_error */ 151 152 break; 153 } 154 return "unknown"; 144 155 } 145 156 … … 159 170 switch(curToken) 160 171 { 161 case IDL_SYMBOL_INTERFACE:162 parseInterface(token);163 break;164 172 case '#': 165 173 parseHash(); 166 174 break; 167 175 case G_TOKEN_SYMBOL: 176 { 177 PSYMBOL pCurSymbol=value.v_symbol; 178 switch(pCurSymbol->uiSymbolToken) 179 { 180 case IDL_SYMBOL_INTERFACE: 181 parseInterface(token); 182 break; 183 default: 184 break; 185 } 186 break; 187 } 168 188 #if 0 169 189 case G_TOKEN_IDENTIFIER: … … 226 246 } 227 247 248 static gint funcSymbolCompare(gconstpointer a, gconstpointer b) 249 { 250 if(a==b) 251 return 0; 252 253 if(a<b) 254 return -1; 255 256 return 1; 257 }; 228 258 /* 229 259 … … 291 321 g_printf("\n"); 292 322 323 324 293 325 gScanner=g_scanner_new(NULL); 294 326 gScanner->user_data=(gpointer)&curSymbol; … … 306 338 g_scanner_set_scope(gScanner, idScope); 307 339 /* Load our own symbols into the scanner. We use the default scope for now. */ 340 parseInfo.pSymbolTree=g_tree_new((GCompareFunc) funcSymbolCompare); 308 341 while(pSymbols->chrSymbolName) 309 342 { 310 g_scanner_scope_add_symbol(gScanner, idScope, pSymbols->chrSymbolName, GINT_TO_POINTER(pSymbols->uiSymbolToken)); 343 g_scanner_scope_add_symbol(gScanner, idScope, pSymbols->chrSymbolName, 344 pSymbols); 345 g_tree_insert(parseInfo.pSymbolTree, pSymbols, pSymbols->chrSymbolName); 311 346 pSymbols++; 312 347 } 313 gScanner->config->symbol_2_token=TRUE;348 // gScanner->config->symbol_2_token=TRUE; 314 349 315 350 parseIt(); 316 351 317 //if(pInterfaceArray->len)318 //printInterface();352 if(pInterfaceArray->len) 353 printInterface(); 319 354 320 355 g_scanner_destroy(gScanner);
Note:
See TracChangeset
for help on using the changeset viewer.