Changeset 79 in dev for BasicCompiler32


Ignore:
Timestamp:
Mar 25, 2007, 5:58:57 AM (18 years ago)
Author:
dai_9181
Message:

バージョンをβ17にした。
#strictをデフォルトの状態で適用するようにした(#90)。
Dimステートメントにおいて、初期値式とAsが同時に指定されていたとき、As以降も初期値式の一部として捉えるよう、変更(#91)。
GetTypeDef関数を完全廃止。

Location:
BasicCompiler32
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/BasicCompiler.vcproj

    r78 r79  
    147147                Optimization="2"
    148148                InlineFunctionExpansion="1"
    149                 AdditionalIncludeDirectories="..\cpplibs\boost"
     149                AdditionalIncludeDirectories="..\cpplibs\boost;..\BasicCompiler_Common\include"
    150150                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN"
    151151                StringPooling="true"
     
    245245                Optimization="2"
    246246                InlineFunctionExpansion="1"
    247                 AdditionalIncludeDirectories="..\cpplibs\boost"
     247                AdditionalIncludeDirectories="..\cpplibs\boost;..\BasicCompiler_Common\include"
    248248                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;ENG"
    249249                StringPooling="true"
  • BasicCompiler32/Compile_Func.cpp

    r78 r79  
    340340    pUserProc->Using();
    341341}
    342 void Opcode_Func_SizeOf(const char *Parameter){
    343     LONG_PTR lpIndex;
    344     int type = GetTypeFixed(Parameter,&lpIndex);
    345 
    346     int size;
    347     if( type == DEF_OBJECT ){
    348         CClass *pClass = (CClass *)lpIndex;
    349         size = pClass->GetSize();
    350     }
    351     else{
    352         size=GetTypeSize(type,lpIndex);
    353     }
     342void Opcode_Func_SizeOf( const string &typeName ){
     343    Type tempType;
     344    if( !Type::StringToType( typeName, tempType ) ){
     345        SetError(3,typeName,cp);
     346        return;
     347    }
     348
     349    int typeSize = ( tempType.IsObject() ) ?
     350        tempType.GetClass().GetSize() : tempType.GetSize();
    354351
    355352    //mov eax,size
    356     op_mov_RV( REG_EAX, size );
     353    op_mov_RV( REG_EAX, typeSize );
    357354}
    358355void Opcode_Func_VarPtr( const char *Parameter, Type &resultType, bool isCallOn ){
  • BasicCompiler32/Compile_Var.cpp

    r76 r79  
    10791079}
    10801080
    1081 void dim(bool isRef, char *VarName,int *SubScripts,Type &type,char *InitBuf,char *ConstractParameter,DWORD dwFlags){
     1081void dim( char *VarName,int *SubScripts,Type &type,char *InitBuf,char *ConstractParameter,DWORD dwFlags){
    10821082    if( UserProc::IsGlobalAreaCompiling() ){
    10831083        /////////////////////////
     
    10851085        /////////////////////////
    10861086
    1087         AddGlobalVariable(isRef,VarName,SubScripts,type,InitBuf,ConstractParameter,dwFlags);
     1087        AddGlobalVariable(VarName,SubScripts,type,InitBuf,ConstractParameter,dwFlags);
    10881088    }
    10891089    else{
     
    10921092        /////////////////
    10931093
    1094         if( UserProc::CompilingUserProc().localVars.BackSearch( VarName ) ){
     1094        if( UserProc::CompilingUserProc().localVars.DuplicateCheck( VarName ) ){
    10951095            //2重定義のエラー
    10961096            SetError(15,VarName,cp);
     
    11001100        bool isConst = ( dwFlags & DIMFLAG_CONST ) ? true:false;
    11011101
    1102         Variable *pVar = new Variable( VarName, type, isConst, isRef );
     1102        Variable *pVar = new Variable( VarName, type, isConst );
    11031103
    11041104        if( SubScripts[0] != -1 ){
  • BasicCompiler32/NumOpe.cpp

    r76 r79  
    151151    int sp;
    152152    int type_stack[255];
     153    bool isNothing_stack[255];
    153154    LONG_PTR index_stack[255];
    154155    BOOL bUseHeap[255];
     
    160161        if(idCalc){
    161162            if(type_stack[sp-2]==DEF_OBJECT){
    162                 //オーバーロードされたオペレータを呼び出す
    163                 i2=CallOperatorProc(idCalc,baseType,type_stack,index_stack,bUseHeap,sp);
    164                 if(i2==0){
    165                     if(idCalc==CALC_EQUAL) lstrcpy(temp2,"==");
    166                     else GetCalcName(idCalc,temp2);
    167                     sprintf(temporary,"Operator %s",temp2);
    168                     SetError(27,temporary,cp);
    169                     goto error;
     163                if( idCalc == CALC_AS
     164                    && type_stack[sp-1] == ( DEF_OBJECT | FLAG_CAST )
     165                    && index_stack[sp-1] == index_stack[sp-2]
     166                    || isNothing_stack[sp-2] ){
     167                        // 同一の型、またはNothingに対するAsはAs演算子を呼び出さない
    170168                }
    171                 else if(i2==-1) goto error;
    172 
    173                 continue;
     169                else{
     170                    //オーバーロードされたオペレータを呼び出す
     171                    i2=CallOperatorProc(idCalc,baseType,type_stack,index_stack,bUseHeap,sp);
     172                    if(i2==0){
     173                        if(idCalc==CALC_EQUAL) lstrcpy(temp2,"==");
     174                        else GetCalcName(idCalc,temp2);
     175                        sprintf(temporary,"Operator %s",temp2);
     176                        SetError(27,temporary,cp);
     177                        goto error;
     178                    }
     179                    else if(i2==-1) goto error;
     180
     181                    continue;
     182                }
    174183            }
    175184
     
    181190            case 0:
    182191                index_stack[sp]=-1;
     192                isNothing_stack[sp] = false;
    183193                bUseHeap[sp]=0;
    184194
     
    363373                    // Nothing
    364374                    if( lstrcmp( term, "Nothing" ) == 0 ){
     375                        isNothing_stack[sp] = true;
     376
    365377                        type_stack[sp] = DEF_OBJECT;
    366378                        if( baseType.IsObject() ){
     
    489501                    // 型名の場合
    490502                    //////////////
    491 
    492                     LONG_PTR lp;
    493                     i3=GetTypeFixed(term,&lp);
    494                     if(i3!=-1){
    495                         type_stack[sp]=i3|FLAG_CAST;
    496                         index_stack[sp]=lp;
     503                    Type tempType;
     504                    if( Type::StringToType( term, tempType ) ){
     505                        type_stack[sp] = tempType.GetBasicType() | FLAG_CAST;
     506                        index_stack[sp] = tempType.GetIndex();
    497507                        sp++;
    498508                        break;
    499509                    }
    500 
    501510
    502511
  • BasicCompiler32/Opcode.h

    r78 r79  
    190190#define DIMFLAG_STATIC                  4
    191191#define DIMFLAG_CONST                   8
    192 void dim(bool isRef, char *VarName,int *SubScripts,Type &type,char *InitBuf,char *ConstractParameter,DWORD dwFlags);
     192void dim( char *VarName,int *SubScripts,Type &type,char *InitBuf,char *ConstractParameter,DWORD dwFlags);
    193193void SetVarPtrToEax(RELATIVE_VAR *pRelativeVar);
    194194
Note: See TracChangeset for help on using the changeset viewer.