Exemplo n.º 1
0
REWRITE *RewritePackageClassTemplateMember( REWRITE *r, TOKEN_LOCN *locn )
/************************************************************************/
{
    unsigned brace_depth;
    bool first_time;
    TOKEN_LOCN start_locn;

    SrcFileGetTokenLocn( &start_locn );
    brace_depth = 0;
    first_time = TRUE;
    for(;;) {
        if( CurToken == T_EOF ) {
            templateError( r, &start_locn );
            break;
        }
        if( ! first_time ) {
            /* already been saved by YYDRIVER */
            saveToken( r, locn );
        }
        first_time = FALSE;
        switch( CurToken ) {
        case T_RIGHT_BRACE:
        case T_ALT_RIGHT_BRACE:
            if( brace_depth == 0 ) {
                return( templateError( r, &start_locn ) );
            }
            --brace_depth;
            if( brace_depth == 0 ) {
                NextToken();
                if( CurToken == T_SEMI_COLON ) {
                    saveToken( r, locn );
                    NextToken();
                }
                return( r );
            }
            break;
        case T_LEFT_BRACE:
        case T_ALT_LEFT_BRACE:
            ++brace_depth;
            break;
        case T_SEMI_COLON:
            if( brace_depth == 0 ) {
                NextToken();
                return( r );
            }
            break;
        default:
            break;
        }
        NextToken();
    }
    return( NULL );
}
Exemplo n.º 2
0
REWRITE *RewritePackageToken( void )
/**********************************/
{
    REWRITE *r;
    TOKEN_LOCN locn;

    r = newREWRITE( T_EOF, &locn );
    if( CurToken != T_EOF ) {
        if( CurToken == T_SAVED_ID ) {
            saveToken( r, &locn );
            NextToken();
        }
        saveToken( r, &locn );
    }
    return( r );
}
Exemplo n.º 3
0
void RewriteRecordToken( REWRITE *r, TOKEN_LOCN *locn )
/*****************************************************/
{
    if( CurToken != T_EOF ) {
        saveToken( r, locn );
    }
}
Exemplo n.º 4
0
/*------------------------------------------------------------------------------
| MSStringParserData::processSkip                                              |
|                                                                              |
| Parse the remaining string data as if a token was specified,except in this   |
| case the token does not exist.  If this is a reparse_ of a skip,do not save  |
| the skip marker in the token list.                                           |
------------------------------------------------------------------------------*/
MSStringParserData& MSStringParserData::processSkip(MSBoolean reparse_)
{
  reparseLastToken();
  _lastToken=0;
  _lastSkip=MSTrue;
  if (!reparse_) saveToken(0);

  return *this;
}
Exemplo n.º 5
0
/*------------------------------------------------------------------------------
| MSStringParserData::processToken                                             |
|                                                                              |
| Parse the remaining string data into the token.  If this is a token reparse  |
| then do not save the token(since it will not be parsed again).               |
------------------------------------------------------------------------------*/
MSStringParserData& MSStringParserData::processToken(MSString &aToken_,MSBoolean reparse_)
{
  reparseLastToken();
  if (_currentPosition>=_parseText.length()) aToken_=emptyString;
  else aToken_=_parseText.subString(_currentPosition);
  
  _lastToken=&aToken_;
  _lastSkip=MSFalse;
  if (reparse_==MSFalse) saveToken(_lastToken);
  return *this;
}
Exemplo n.º 6
0
REWRITE *RewritePackageMemInit( PTREE multi )
/*******************************************/
{
    REWRITE *r;
    unsigned paren_depth;
    unsigned brace_depth;
    TOKEN_LOCN locn;
    TOKEN_LOCN start_locn;

    SrcFileGetTokenLocn( &start_locn );
    r = newREWRITE( T_RIGHT_BRACE, &locn );
    captureMulti( r, multi, &locn );
    brace_depth = 0;
    paren_depth = 0;
    for(;;) {
        if( CurToken == T_EOF ) {
            memInitError( r, &start_locn );
            break;
        }
        saveToken( r, &locn );
        switch( CurToken ) {
        case T_LEFT_PAREN:
            ++paren_depth;
            break;
        case T_RIGHT_PAREN:
            if( paren_depth == 0 ) {
                return( memInitError( r, &start_locn ) );
            }
            --paren_depth;
            break;
        case T_RIGHT_BRACE:
        case T_ALT_RIGHT_BRACE:
            if( brace_depth == 0 ) {
                return( memInitError( r, &start_locn ) );
            }
            --brace_depth;
            break;
        case T_LEFT_BRACE:
        case T_ALT_LEFT_BRACE:
            if( paren_depth == 0 ) {
                return( r );
            }
            ++brace_depth;
            break;
        default:
            break;
        }
        NextToken();
    }
    return( NULL );
}
Exemplo n.º 7
0
static PTREE recoverToken( PTREE tree )
{
    switch( tree->op ) {
    case PT_INT_CONSTANT:
    case PT_FLOATING_CONSTANT:
        /* these cases are not possible in correct C++ programs */
        /* Buffer and ConstType should still be set */
        CurToken = T_CONSTANT;
        break;
    case PT_ID:
        CurToken = T_SAVED_ID;
        SavedId = tree->u.id.name;
        break;
    case PT_UNARY:
    case PT_BINARY:
        switch( tree->cgop ) {
        case CO_INDIRECT:
            CurToken = T_TIMES;
            break;
        case CO_COLON_COLON:
            CurToken = T_COLON_COLON;
            break;
        case CO_OPERATOR:
            CurToken = T_OPERATOR;
            break;
        case CO_TILDE:
            CurToken = T_TILDE;
            break;
        case CO_NEW:
            CurToken = T_NEW;
            break;
        case CO_DELETE:
            CurToken = T_DELETE;
            break;
        case CO_STORAGE:
            return( tree );
        default:
            DbgStmt( CFatal( "recoverToken: unknown tree cgop" ) );
            return( tree );
        }
        break;
    default:
        DbgStmt( CFatal( "recoverToken: unknown tree cgop" ) );
        return( tree );
    }
    saveToken( currRewrite, currLocn );
    return( tree );
}
Exemplo n.º 8
0
bool TokenScanner::hasMoreTokens() {
    std::string token = nextToken();
    saveToken(token);
    return !token.empty();
}
Exemplo n.º 9
0
REWRITE *RewritePackagePassThrough( REWRITE *r )
/****************************************/
{
    REWRITE *dummy;
    unsigned paren_depth;
    unsigned brace_depth;
    TOKEN_LOCN locn;
    TOKEN_LOCN start_locn;

    DbgAssert( CurToken == T_EQUAL );
    NextToken();
    SrcFileGetTokenLocn( &start_locn );
    dummy = newREWRITE( T_DEFARG_END, &locn );
    brace_depth = 0;
    paren_depth = 0;
    for(;;) {
        if( CurToken == T_EOF ) {
            defArgError( r, &start_locn );
            break;
        }
        switch( CurToken ) {
        case T_LEFT_PAREN:
            ++paren_depth;
            break;
        case T_RIGHT_BRACE:
        case T_ALT_RIGHT_BRACE:
            if( brace_depth == 0 ) {
                return( defArgError( r, &start_locn ) );
            }
            --brace_depth;
            break;
        case T_LEFT_BRACE:
        case T_ALT_LEFT_BRACE:
            if( paren_depth == 0 ) {
                return( defArgError( r, &start_locn ) );
            }
            ++brace_depth;
            break;
        case T_RIGHT_PAREN :
            if( paren_depth == 0 ) {
                if( brace_depth != 0 ) {
                    return( defArgError( r, &start_locn ) );
                }
                UndoNextToken();
                return( dummy );
            }
            --paren_depth;
            break;
        case T_COMMA :
        case T_DOT_DOT_DOT:
            if( brace_depth == 0 && paren_depth == 0 ) {
                UndoNextToken();
                return( dummy );
            }
            break;
        default:
            break;
        }
        saveToken( r, &locn );
        NextToken();
    }
    return( NULL );
}
Exemplo n.º 10
0
REWRITE *RewritePackageTemplateArgument( void )
/******************************************/
{
    REWRITE *r;
    unsigned angle_depth;
    unsigned brace_depth;
    unsigned bracket_depth;
    unsigned paren_depth;
    TOKEN_LOCN locn;
    TOKEN_LOCN start_locn;

    SrcFileGetTokenLocn( &start_locn );
    r = newREWRITE( T_DEFARG_END, &locn );
    angle_depth = brace_depth = bracket_depth = paren_depth = 0;
    for(;;) {
        if( CurToken == T_EOF ) {
            defArgError( r, &start_locn );
            break;
        }
        switch( CurToken ) {
        case T_LEFT_BRACE:
        case T_ALT_LEFT_BRACE:
            ++brace_depth;
            break;
        case T_LEFT_BRACKET:
        case T_ALT_LEFT_BRACKET:
            ++bracket_depth;
            break;
        case T_LEFT_PAREN:
            ++paren_depth;
            break;
        case T_RIGHT_BRACE:
        case T_ALT_RIGHT_BRACE:
            if( brace_depth == 0 ) {
                return( defArgError( r, &start_locn ) );
            }
            --brace_depth;
            break;
        case T_RIGHT_BRACKET:
        case T_ALT_RIGHT_BRACKET:
            if( bracket_depth == 0 ) {
                return( defArgError( r, &start_locn ) );
            }
            --bracket_depth;
            break;
        case T_RIGHT_PAREN:
            if( paren_depth == 0 ) {
                return( defArgError( r, &start_locn ) );
            }
            --paren_depth;
            break;
        case T_LT:
            /* for non-type template arguments this should always be
             * parsed as less-than */
            if( ( brace_depth == 0 ) && ( bracket_depth == 0 )
             && ( paren_depth == 0 ) ) {
                ++angle_depth;
            }
            break;
        case T_COMMA:
        case T_GT:
            if( ( brace_depth == 0 ) && ( bracket_depth == 0 )
             && ( paren_depth == 0 ) ) {
                if( angle_depth == 0 ) {
                    return( r );
                }
                else if( CurToken == T_GT ) {
                    --angle_depth;
                }
            }
            break;
        case T_RSHIFT:
            // see Right Angle Brackets (N1757/05-0017)
            if( CompFlags.enable_std0x
             && ( brace_depth == 0 ) && ( bracket_depth == 0 )
             && ( paren_depth == 0 ) ) {
                if( angle_depth == 1 ) {
                    CurToken = T_GT;
                    saveToken( r, &locn );
                    return( r );
                } else if( angle_depth == 0 ) {
                    return( r );
                } else {
                    angle_depth -= 2;
                }
            }
            break;
        default:
            break;
        }
        saveToken( r, &locn );
        NextToken();
    }
    return( NULL );
}
Exemplo n.º 11
0
REWRITE *RewritePackageFunction( PTREE multi )
/********************************************/
{
    ppctl_t old_ppctl;
    bool skip_first;
    REWRITE *r;
    unsigned depth;
    unsigned asm_depth;
    TOKEN_LOCN locn;
    TOKEN_LOCN *plocn;

    skip_first = FALSE;
    r = ParseGetRecordingInProgress( &plocn );
    if( r == NULL ) {
        plocn = &locn;
        r = newREWRITE( T_RIGHT_BRACE, &locn );
    } else {
        skip_first = TRUE;
    }
    captureMulti( r, multi, plocn );
    old_ppctl = PPControl;
    asm_depth = 0;
    depth = 1;          /* we've seen one '{' */
    while( CurToken != T_EOF ) {
        DbgAssert( depth != 0 );
        switch( CurToken ) {
        case T_NULL:
            DbgAssert( asm_depth != 0 );
            PPCTL_DISABLE_EOL();
            if( depth == asm_depth ) {
                PPCTL_DISABLE_ASM();
                asm_depth = 0;
            }
            break;
        case T___ASM:
            if( asm_depth == 0 ) {
                PPCTL_ENABLE_EOL();
                PPCTL_ENABLE_ASM();
                asm_depth = depth;
            }
            break;
        case T_SEMI_COLON:
            break;
        case T_LEFT_BRACE:
        case T_ALT_LEFT_BRACE:
            ++depth;
            break;
        case T_RIGHT_BRACE:
        case T_ALT_RIGHT_BRACE:
            --depth;
            if( depth == asm_depth ) {
                PPCTL_DISABLE_EOL();
                PPCTL_DISABLE_ASM();
                asm_depth = 0;
            }
            break;
        default:
            break;
        }
        if( ! skip_first ) {
            saveToken( r, plocn );
        }
        skip_first = FALSE;
        if( depth == 0 )
            break;
        NextToken();
        if( PPControl & PPCTL_ASM ) {
            PPCTL_ENABLE_EOL();
        }
    }
    PPControl = old_ppctl;
    return( r );
}
Exemplo n.º 12
0
std::string Parser::peekToken()
{
    std::string token = getToken();
    saveToken(token);
    return token;
}