Ignore:
Timestamp:
Aug 23, 2007, 3:20:12 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/Compile.cpp

    r288 r296  
    3131// トークンを取得
    3232///////////////////////////////////////////////////
    33 void GetIdentifierToken( char *token, const char *source, int &pos ){
     33void GetIdentifierToken( char *token, const char *source, int &pos )
     34{
    3435    for( int i=0; ; i++, pos++ ){
    3536        if( ! IsVariableChar( source[pos] ) ){
     
    3940        token[i] = source[pos];
    4041    }
     42}
     43void GetCommandToken( char *token, const char *source, int &pos )
     44{
     45    for( int i=0; ; i++, pos++ ){
     46        if( IsCommandDelimitation( source[pos] ) ){
     47            token[i] = 0;
     48            break;
     49        }
     50        token[i] = source[pos];
     51    }
     52}
     53
     54
     55///////////////////////////////////////////////////
     56// ジェネリクスのクラス型記述を分析
     57///////////////////////////////////////////////////
     58void SplitGenericClassInstance( const char *fullName, char *className, std::vector<std::string> &typeParameters )
     59{
     60    int i = 0;
     61    typeParameters.clear();
     62
     63    //クラス名を取得
     64    GetIdentifierToken( className, fullName, i );
     65
     66
     67    /////////////////////////////////////////////////////////
     68    // ☆★☆ ジェネリクスサポート ☆★☆
     69    if( fullName[i] == '<' )
     70    {
     71        while( true )
     72        {
     73            i++;
     74
     75            // 型パラメータを取得
     76            char temporary[VN_SIZE];
     77            GetIdentifierToken( temporary, fullName, i );
     78            if( temporary[0] == '\0' )
     79            {
     80                extern int cp;
     81                SetError(1,NULL,cp);
     82            }
     83
     84            typeParameters.push_back( temporary );
     85
     86            if( fullName[i] == ',' )
     87            {
     88                continue;
     89            }
     90            else if( fullName[i] == '>' )
     91            {
     92                break;
     93            }
     94            else
     95            {
     96                extern int cp;
     97                SetError(1,NULL,cp);
     98            }
     99        }
     100    }
     101    /////////////////////////////////////////////////////////
    41102}
    42103
Note: See TracChangeset for help on using the changeset viewer.