Ignore:
Timestamp:
Mar 25, 2007, 2:35:35 PM (18 years ago)
Author:
cinc
Message:

IDL file parsing more or less working.

Location:
trunk/idl-compiler/parser_c
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/idl-compiler/parser_c/interface_parser.c

    r266 r269  
    6363  g_scanner_scope_add_symbol(gScanner, ID_SCOPE, pNewSymbol->chrSymbolName,
    6464                             pNewSymbol);
     65  /* For legacy support and convenience we automatically register a pointer type
     66     to the interface. */
     67  pNewSymbol=g_malloc0(sizeof(SYMBOL));
     68  pNewSymbol->uiKind=KIND_TYPESPEC;
     69  pNewSymbol->uiSymbolToken=IDL_SYMBOL_REGINTERFACE;
     70  pNewSymbol->chrSymbolName=g_strconcat("P", pCurInterface->chrName, NULL);
     71  g_message("%s: %s", __FUNCTION__, pNewSymbol->chrSymbolName);
     72  g_tree_insert(parseInfo.pSymbolTree, pNewSymbol, pNewSymbol->chrSymbolName);
     73  g_scanner_scope_add_symbol(gScanner, ID_SCOPE, pNewSymbol->chrSymbolName,
     74                             pNewSymbol);
    6575}
    6676
     
    98108        parseMethod();
    99109      }
     110    else if(matchNext('#'))
     111      parseHash();
    100112    else if(matchNext(G_TOKEN_SYMBOL))
    101113      {
  • trunk/idl-compiler/parser_c/method_parser.c

    r265 r269  
    119119
    120120    //pParam->chrType=getTypeSpecStringFromCurToken();
     121    //g_printf("%s %d", __FUNCTION__, __LINE__);
     122    //printToken(curToken);
    121123
    122124    if(!matchNext(G_TOKEN_IDENTIFIER))
    123125      {
    124126        getNextToken(); /* Make sure error references the correct token */
     127        //g_printf("%s %d", __FUNCTION__, __LINE__);
     128        //printToken(curToken);
    125129        g_scanner_unexp_token(gScanner,
    126130                              G_TOKEN_IDENTIFIER,
  • trunk/idl-compiler/parser_c/typespec_parser.c

    r267 r269  
    4747
    4848  TS:= TYPE_SPEC
     49    |  TYPE_SPEC TYPE_SPEC      // This is for something like 'unsigned long'
    4950    |  TYPE_SPEC '*'
     51    |  TYPE_SPEC TYPE_SPEC '*'  // This is for something like 'unsigned long*'
    5052*/
    5153void parseTypeSpec(PMETHODPARAM pMethodParam)
    5254{
    53   /* Return type  */
    54   pMethodParam->chrType=getTypeSpecStringFromCurToken();
     55  char *chrTemp;
     56
     57  /* Return type part 1 */
     58  chrTemp=getTypeSpecStringFromCurToken();
     59
     60  /* A second typespec part (e.g. 'unsigned long')? */
     61  if(matchNextKind(KIND_TYPESPEC))
     62    {
     63      char *chrTemp2=getTypeSpecStringFromCurToken();
     64      pMethodParam->chrType=g_strconcat(chrTemp, " ", chrTemp2 ,NULL);
     65      g_free(chrTemp2);
     66      g_free(chrTemp);
     67    }
     68  else{
     69    /* Return type  */
     70    pMethodParam->chrType=chrTemp;
     71  }
    5572
    5673  /* Do we return a pointer (check for '*') */
     
    6178
    6279
     80
     81
Note: See TracChangeset for help on using the changeset viewer.