Changeset 7 in dev for BasicCompiler_Common/Variable.cpp


Ignore:
Timestamp:
Dec 7, 2006, 3:09:44 AM (17 years ago)
Author:
dai_9181
Message:

Constステートメントで定数変数を宣言できるように改良。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Variable.cpp

    r5 r7  
    10101010    if(VarSize%PTR_SIZE) VarSize+=PTR_SIZE-(VarSize%PTR_SIZE);
    10111011
    1012     lstrcpy(GlobalVar[MaxGlobalVarNum].name,name);
    1013     if(SubScripts[0]==-1) GlobalVar[MaxGlobalVarNum].bArray=0;
    1014     else GlobalVar[MaxGlobalVarNum].bArray=1;
    1015     GlobalVar[MaxGlobalVarNum].type=pTypeInfo->type;
    1016     GlobalVar[MaxGlobalVarNum].u.index=pTypeInfo->u.lpIndex;
     1012    //新しいオブジェクトポインタを取得
     1013    VARIABLE *pVar = &GlobalVar[MaxGlobalVarNum];
     1014
     1015    //グローバル変数の個数を増加
     1016    MaxGlobalVarNum++;
     1017
     1018    lstrcpy(pVar->name,name);
     1019    if(dwFlag & DIMFLAG_CONST) pVar->bConst = 1;
     1020    else pVar->bConst = 0;
     1021    if(SubScripts[0]==-1) pVar->bArray=0;
     1022    else pVar->bArray=1;
     1023    pVar->type=pTypeInfo->type;
     1024    pVar->u.index=pTypeInfo->u.lpIndex;
    10171025
    10181026    //コンストラクタ用パラメータ
    1019     GlobalVar[MaxGlobalVarNum].ConstractParameter=(char *)HeapAlloc(hHeap,0,lstrlen(ConstractParameter)+1);
    1020     lstrcpy(GlobalVar[MaxGlobalVarNum].ConstractParameter,ConstractParameter);
     1027    pVar->ConstractParameter=(char *)HeapAlloc(hHeap,0,lstrlen(ConstractParameter)+1);
     1028    lstrcpy(pVar->ConstractParameter,ConstractParameter);
    10211029
    10221030    if(InitBuf[0]||dwFlag==DIMFLAG_INITDEBUGVAR){
    10231031        //初期バッファがあるとき
    1024         GlobalVar[MaxGlobalVarNum].offset=AllInitGlobalVarSize;
     1032        pVar->offset=AllInitGlobalVarSize;
    10251033        AllInitGlobalVarSize+=VarSize;
    10261034    }
    10271035    else{
    10281036        //初期バッファがないとき
    1029         GlobalVar[MaxGlobalVarNum].offset=AllGlobalVarSize | 0x80000000;
     1037        pVar->offset=AllGlobalVarSize | 0x80000000;
    10301038        AllGlobalVarSize+=VarSize;
    10311039    }
    10321040
    10331041    //レキシカルスコープ
    1034     GlobalVar[MaxGlobalVarNum].ScopeLevel=obj_LexScopes.GetNowLevel();
    1035     GlobalVar[MaxGlobalVarNum].ScopeStartAddress=obj_LexScopes.GetStartAddress();
    1036     GlobalVar[MaxGlobalVarNum].bLiving=TRUE;
     1042    pVar->ScopeLevel=obj_LexScopes.GetNowLevel();
     1043    pVar->ScopeStartAddress=obj_LexScopes.GetStartAddress();
     1044    pVar->bLiving=TRUE;
     1045
     1046    //エラー用
     1047    pVar->source_code_address=cp;
    10371048
    10381049    //初期バッファにデータをセット
     
    10421053        initGlobalBuf,
    10431054        AllInitGlobalVarSize);
    1044     if(InitBuf[0])
    1045         SetInitGlobalData(GlobalVar[MaxGlobalVarNum].offset,
    1046             GlobalVar[MaxGlobalVarNum].type,
    1047             GlobalVar[MaxGlobalVarNum].u.index,
    1048             GlobalVar[MaxGlobalVarNum].SubScripts,
     1055    if(InitBuf[0]){
     1056        int result = SetInitGlobalData(pVar->offset,
     1057            pVar->type,
     1058            pVar->u.index,
     1059            pVar->SubScripts,
    10491060            InitBuf);
    10501061
    1051 
    1052     //エラー用
    1053     GlobalVar[MaxGlobalVarNum].source_code_address=cp;
    1054 
    1055 
    1056     MaxGlobalVarNum++;
     1062        if(!result){
     1063            //動的な式だった場合は代入演算を行う
     1064            char temporary[8192];
     1065            sprintf(temporary,"%s=%s",name,InitBuf);
     1066            OpcodeCalc(temporary);
     1067        }
     1068    }
     1069
    10571070
    10581071
Note: See TracChangeset for help on using the changeset viewer.