Changeset 299 in dev for trunk/abdev/BasicCompiler32


Ignore:
Timestamp:
Aug 23, 2007, 6:17:00 PM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler32
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/CParameter.cpp

    r292 r299  
    214214            bByVal = ( params[i2]->IsRef() == false ) ? TRUE:FALSE;
    215215
    216 
    217             /////////////////////////////////////////////////////////
    218             // ☆★☆ ジェネリクスサポート ☆★☆
    219 
    220             if( dummyType.IsTypeParameter() )
    221             {
    222                 // 型パラメータだったとき
    223 
    224                 int ptrLevel = PTR_LEVEL( dummyType.GetBasicType() );
    225 
    226                 if( leftType.HasActualGenericType() )
    227                 {
    228                     // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
    229                     dummyType = leftType.GetDummyActualGenericType();
    230                 }
    231                 else
    232                 {
    233                     // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
    234                     dummyType.SetBasicType( DEF_OBJECT );
    235                 }
    236 
    237                 for( int i=0; i<ptrLevel; i++ )
    238                 {
    239                     dummyType.PtrLevelUp();
    240                 }
    241             }
    242 
    243             //
    244             /////////////////////////////////////////////////////////
     216            // 型パラメータを解決
     217            ResolveFormalGenericTypeParameter( dummyType, leftType );
    245218        }
    246219
  • trunk/abdev/BasicCompiler32/Compile_Func.cpp

    r290 r299  
    324324void Opcode_Func_SizeOf( const string &typeName ){
    325325    Type tempType;
    326     if( !Compiler::StringToType( typeName, tempType ) ){
     326    if( !compiler.StringToType( typeName, tempType ) ){
    327327        SetError(3,typeName,cp);
    328328        return;
  • trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp

    r294 r299  
    388388        else{
    389389            if( pUserProc->ReturnType().IsObject() ){
    390                 sprintf(temporary,"%s=Nothing%c%c%s",temp,1,ESC_AS, Compiler::TypeToString( pUserProc->ReturnType() ).c_str() );
     390                sprintf(temporary,"%s=Nothing%c%c%s",temp,1,ESC_AS, compiler.TypeToString( pUserProc->ReturnType() ).c_str() );
    391391            }
    392392            else{
    393393                //戻り値用の変数の定義
    394                 sprintf(temporary,"%s%c%c%s",temp,1,ESC_AS, Compiler::TypeToString( pUserProc->ReturnType() ).c_str() );
     394                sprintf(temporary,"%s%c%c%s",temp,1,ESC_AS, compiler.TypeToString( pUserProc->ReturnType() ).c_str() );
    395395            }
    396396
  • trunk/abdev/BasicCompiler32/Compile_Var.cpp

    r292 r299  
    223223    resultType = pMember->GetType();
    224224
    225 
    226     /////////////////////////////////////////////////////////
    227     // ☆★☆ ジェネリクスサポート ☆★☆
    228 
    229     if( resultType.IsTypeParameter() )
    230     {
    231         // 型パラメータだったとき
    232 
    233         int ptrLevel = PTR_LEVEL( resultType.GetBasicType() );
    234 
    235         if( classType.HasActualGenericType() )
    236         {
    237             // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
    238             resultType = classType.GetDummyActualGenericType();
    239         }
    240         else
    241         {
    242             // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
    243             resultType.SetBasicType( DEF_OBJECT );
    244         }
    245 
    246         for( int i=0; i<ptrLevel; i++ )
    247         {
    248             resultType.PtrLevelUp();
    249         }
    250     }
    251 
    252     //
    253     /////////////////////////////////////////////////////////
     225    // 型パラメータを解決
     226    ResolveFormalGenericTypeParameter( resultType, classType );
    254227
    255228
     
    11211094}
    11221095
    1123 void dim( char *VarName, const Subscripts &subscripts, Type &type,const char *InitBuf,const char *ConstractParameter,DWORD dwFlags){
     1096void dim( char *VarName, const Subscripts &subscripts, const Type &type,const char *InitBuf,const char *ConstractParameter,DWORD dwFlags){
    11241097    if( UserProc::IsGlobalAreaCompiling() ){
    11251098        /////////////////////////
  • trunk/abdev/BasicCompiler32/NumOpe.cpp

    r293 r299  
    221221                //SetUseRegFromRax(resultType.GetBasicType(),UseReg,XmmReg);
    222222
    223 
    224                 /////////////////////////////////////////////////////////
    225                 // ☆★☆ ジェネリクスサポート ☆★☆
    226 
    227                 if( resultType.IsTypeParameter() )
    228                 {
    229                     // 型パラメータだったとき
    230 
    231                     int ptrLevel = PTR_LEVEL( resultType.GetBasicType() );
    232 
    233                     if( leftType.HasActualGenericType() )
    234                     {
    235                         // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
    236                         resultType = leftType.GetDummyActualGenericType();
    237                     }
    238                     else
    239                     {
    240                         // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
    241                         resultType.SetBasicType( DEF_OBJECT );
    242                     }
    243 
    244                     for( int i=0; i<ptrLevel; i++ )
    245                     {
    246                         resultType.PtrLevelUp();
    247                     }
    248                 }
    249 
    250                 //
    251                 /////////////////////////////////////////////////////////
     223                // 型パラメータを解決
     224                ResolveFormalGenericTypeParameter( resultType, leftType, pUserProc );
    252225            }
    253226           
     
    780753                    // As演算子の右辺値
    781754                    //型名
    782                     if( Compiler::StringToType( term, resultType ) ){
     755                    if( compiler.StringToType( term, resultType ) ){
    783756                        resultType.SetBasicType( resultType.GetBasicType() | FLAG_CAST );
    784757                    }
  • trunk/abdev/BasicCompiler32/Opcode.h

    r293 r299  
    164164#define DIMFLAG_STATIC                  4
    165165#define DIMFLAG_CONST                   8
    166 void dim( char *VarName, const Subscripts &subscripts, Type &type, const char *InitBuf,const char *ConstractParameter,DWORD dwFlags);
     166void dim( char *VarName, const Subscripts &subscripts, const Type &type, const char *InitBuf,const char *ConstractParameter,DWORD dwFlags);
    167167void SetVarPtrToEax(RELATIVE_VAR *pRelativeVar);
    168168void SetVarPtrToReg(int reg,RELATIVE_VAR *pRelativeVar);
  • trunk/abdev/BasicCompiler32/OperatorProc.cpp

    r293 r299  
    259259    }
    260260
    261     Opcode_CallProc(Parameter,subs[0],0,ObjectName);
    262     resultType = subs[0]->ReturnType();
    263 
    264 
    265     /////////////////////////////////////////////////////////
    266     // ☆★☆ ジェネリクスサポート ☆★☆
    267 
    268     if( resultType.IsTypeParameter() )
    269     {
    270         // 型パラメータだったとき
    271 
    272         int ptrLevel = PTR_LEVEL( resultType.GetBasicType() );
    273 
    274         if( classType.HasActualGenericType() )
    275         {
    276             // TODO: GetDummyActualGenericTypeを適切な形に実装し直す
    277             resultType = classType.GetDummyActualGenericType();
    278         }
    279         else
    280         {
    281             // TODO: ベースオブジェクト(指定されていないときはObjectクラス)にセットする
    282             resultType.SetBasicType( DEF_OBJECT );
    283         }
    284 
    285         for( int i=0; i<ptrLevel; i++ )
    286         {
    287             resultType.PtrLevelUp();
    288         }
    289     }
    290 
    291     //
    292     /////////////////////////////////////////////////////////
    293 }
     261    const UserProc *pUserProc = subs[0];
     262
     263    Opcode_CallProc(Parameter,pUserProc,0,ObjectName);
     264    resultType = pUserProc->ReturnType();
     265
     266    // 型パラメータを解決
     267    ResolveFormalGenericTypeParameter( resultType, classType, pUserProc );
     268}
  • trunk/abdev/BasicCompiler32/stdafx.h

    r288 r299  
    1717#include <boost/foreach.hpp>
    1818
     19#include <jenga/include/common/String.h>
     20
    1921#include "../BasicCompiler_Common/common.h"
    2022
Note: See TracChangeset for help on using the changeset viewer.