Changeset 40 in dev for BasicCompiler_Common/Object.cpp


Ignore:
Timestamp:
Jan 28, 2007, 3:48:22 AM (17 years ago)
Author:
dai_9181
Message:

ByRef修飾子を関数戻り値とDimステートメントで指定可能にした。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/Object.cpp

    r34 r40  
    1717
    1818    for(i=0;i<pobj_c->iMemberNum;i++){
    19         if(pobj_c->ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
     19        CMember *pMember = pobj_c->ppobj_Member[i];
     20
     21        if(pMember->TypeInfo.type==DEF_OBJECT && pMember->IsRef() == false){
    2022            //メンバクラスのアラインメントを取得
    21             member_size=GetAlignment(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class);
     23            member_size=GetAlignment(pMember->TypeInfo.u.pobj_Class);
    2224        }
    2325        else{
    2426            //メンバサイズを取得
    25             member_size=GetTypeSize(pobj_c->ppobj_Member[i]->TypeInfo.type,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
     27            member_size = pMember->GetSize();
    2628        }
    2729
     
    4951    int iMaxAlign=0;
    5052    for(i=0;i<pobj_c->iMemberNum;i++){
    51         //メンバ変数の型サイズを取得
    52         i2=GetTypeSize(pobj_c->ppobj_Member[i]->TypeInfo.type,pobj_c->ppobj_Member[i]->TypeInfo.u.lpIndex);
    53         if(i2==-1) return -1;
     53        CMember *pMember = pobj_c->ppobj_Member[i];
     54
     55        i2 = pMember->GetSize();
    5456
    5557        //アラインメントを算出
    5658        int member_size;
    57         if(pobj_c->ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){
     59        if(pMember->TypeInfo.type==DEF_OBJECT){
    5860            //メンバクラスのアラインメントを取得
    59             member_size=GetAlignment(pobj_c->ppobj_Member[i]->TypeInfo.u.pobj_Class);
     61            member_size=GetAlignment(pMember->TypeInfo.u.pobj_Class);
    6062        }
    6163        else{
     
    8385        if(pMemberName){
    8486            //メンバ指定がある場合は、オフセットを返す
    85             if(lstrcmp(pobj_c->ppobj_Member[i]->name,pMemberName)==0){
     87            if(lstrcmp(pMember->name,pMemberName)==0){
    8688                if(pMemberNum) *pMemberNum=i;
    8789                return offset;
     
    9092
    9193        //配列を考慮したメンバサイズを取得
    92         member_size=i2 * JumpSubScripts(pobj_c->ppobj_Member[i]->SubScripts);
     94        member_size=i2 * JumpSubScripts(pMember->SubScripts);
    9395
    9496        //メンバサイズを加算
Note: See TracChangeset for help on using the changeset viewer.