Ignore:
Timestamp:
Jul 21, 2007, 11:47:40 PM (17 years ago)
Author:
dai_9181
Message:

CodeGeneratorクラスのベースを実装

File:
1 edited

Legend:

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

    r206 r225  
    22
    33#include <jenga/include/smoothie/LexicalAnalysis.h>
     4
     5#include <Compiler.h>
    46
    57#include "../BasicCompiler_Common/common.h"
     
    1214    if( method ){
    1315        //push reg
    14         op_push(reg);
     16        compiler.codeGenerator.op_push(reg);
    1517
    1618        //call DestructorProcAddr
    17         op_call( &method->GetUserProc() );
     19        compiler.codeGenerator.op_call( &method->GetUserProc() );
    1820    }
    1921
    2022    //push reg
    21     op_push(reg);
     23    compiler.codeGenerator.op_push(reg);
    2224
    2325    //call free
    2426    extern const UserProc *pSub_free;
    25     op_call(pSub_free);
     27    compiler.codeGenerator.op_call(pSub_free);
    2628}
    2729
     
    108110
    109111        //push object_size
    110         op_push_V(object_size);
     112        compiler.codeGenerator.op_push_V(object_size);
    111113
    112114        //call calloc
    113115        extern const UserProc *pSub_calloc;
    114         op_call(pSub_calloc);
     116        compiler.codeGenerator.op_call(pSub_calloc);
    115117
    116118        //mov ebx,eax
    117         op_mov_RR(REG_EBX,REG_EAX);
     119        compiler.codeGenerator.op_mov_RR(REG_EBX,REG_EAX);
    118120    }
    119121
     
    123125        if(right_side_size==sizeof(_int64)){
    124126            //pop eax
    125             op_pop(REG_EAX);
     127            compiler.codeGenerator.op_pop(REG_EAX);
    126128
    127129            //pop edx
    128             op_pop(REG_EDX);
     130            compiler.codeGenerator.op_pop(REG_EDX);
    129131        }
    130132        else{
    131133            //pop eax
    132             op_pop(REG_EAX);
     134            compiler.codeGenerator.op_pop(REG_EAX);
    133135        }
    134136    }
    135137
    136138    //pop ecx
    137     op_pop(REG_ECX);
     139    compiler.codeGenerator.op_pop(REG_ECX);
    138140
    139141
     
    141143    if(bUseHeap[sp-1]){
    142144        //mov esi,eax
    143         op_mov_RR(REG_ESI,REG_EAX);
     145        compiler.codeGenerator.op_mov_RR(REG_ESI,REG_EAX);
    144146    }
    145147    if(bUseHeap[sp-2]){
    146148        //mov edi,ecx
    147         op_mov_RR(REG_EDI,REG_ECX);
     149        compiler.codeGenerator.op_mov_RR(REG_EDI,REG_ECX);
    148150    }
    149151
     
    153155        if(right_side_size==sizeof(_int64)){
    154156            //push edx
    155             op_push(REG_EDX);
     157            compiler.codeGenerator.op_push(REG_EDX);
    156158
    157159            //push eax
    158             op_push(REG_EAX);
     160            compiler.codeGenerator.op_push(REG_EAX);
    159161        }
    160162        else{
    161163            //push eax
    162             op_push(REG_EAX);
     164            compiler.codeGenerator.op_push(REG_EAX);
    163165        }
    164166
     
    167169
    168170            //mov eax,esp
    169             op_mov_RR( REG_EAX, REG_ESP );
     171            compiler.codeGenerator.op_mov_RR( REG_EAX, REG_ESP );
    170172
    171173            //push eax
    172             op_push( REG_EAX );
     174            compiler.codeGenerator.op_push( REG_EAX );
    173175        }
    174176    }
     
    176178    if( pUserProc->ReturnType().IsStruct() ){
    177179        //push ebx
    178         op_push(REG_EBX);
     180        compiler.codeGenerator.op_push(REG_EBX);
    179181    }
    180182
    181183    //push ecx
    182     op_push(REG_ECX);
     184    compiler.codeGenerator.op_push(REG_ECX);
    183185
    184186    //call operator_proc
    185     op_call(pUserProc);
     187    compiler.codeGenerator.op_call(pUserProc);
    186188
    187189    if(bTwoTerm){
    188190        if( pUserProc->RealParams()[1]->IsRef() ){
    189191            //一時参照を破棄
    190             op_pop( REG_NON );
     192            compiler.codeGenerator.op_pop( REG_NON );
    191193        }
    192194    }
Note: See TracChangeset for help on using the changeset viewer.