Ignore:
Timestamp:
Mar 19, 2011, 10:47:28 PM (14 years ago)
Author:
イグトランス (egtra)
Message:

compilerにおいて、各クラスのコピー禁止を明確化、ならびにコピー可能なものにムーブコンストラクタ・ムーブ代入演算子を追加。

Location:
branches/egtra/ab5.0/abdev/compiler_x64
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/egtra/ab5.0/abdev/compiler_x64/Opcode.h

    r704 r817  
    11#pragma once
     2
     3#include <array>
    24
    35#include "MachineFixed.h"
     
    3739        , sourceCodePos( sourceCodePos )
    3840    {
     41    }
     42
     43    WithInfo(WithInfo&& y)
     44        : name(std::move(y.name))
     45        , sourceCodePos(std::move(y.sourceCodePos))
     46    {
     47    }
     48
     49    WithInfo(WithInfo const& y)
     50        : name(y.name)
     51        , sourceCodePos(y.sourceCodePos)
     52    {
     53    }
     54
     55    WithInfo& operator =(WithInfo&& y)
     56    {
     57        name = std::move(y.name);
     58        sourceCodePos = std::move(y.sourceCodePos);
     59        return *this;
     60    }
     61
     62    WithInfo& operator =(WithInfo const& y)
     63    {
     64        return *this = std::move(WithInfo(y));
    3965    }
    4066};
     
    75101
    76102    void error_check(void);
     103
     104private:
     105    StackFrame(StackFrame const&);
     106    StackFrame& operator =(StackFrame const&);
    77107};
    78108extern StackFrame *pobj_sf;
     
    93123    void backup();
    94124    void restore();
     125
     126private:
     127    CBlockReg(CBlockReg const&);
     128    CBlockReg& operator =(CBlockReg const&);
    95129};
    96130extern CBlockReg *pobj_BlockReg;
     
    101135
    102136    //利用可能なレジスタを列挙する関数
    103     void EnumRegister(int *pRegList,int nMaxList,int *array_reg,int *sp,int AnswerReg);
    104 
    105     int array_UseReg[16],sp_UseReg;
    106 
    107     int array_XmmReg[16];
     137    void EnumRegister(int const *pRegList,int nMaxList,int *array_reg,int *sp,int AnswerReg);
     138
     139    std::array<int, 16> array_UseReg;
     140    int sp_UseReg;
     141
     142    std::array<int, 16> array_XmmReg;
    108143    int sp_XmmReg;
    109144
     
    113148    CRegister(){};
    114149    CRegister(int AnswerReg);
     150   
     151    CRegister(CRegister const& y)
     152        : array_UseReg(y.array_UseReg)
     153        , sp_UseReg(y.sp_UseReg)
     154        , array_XmmReg(y.array_XmmReg)
     155        , sp_XmmReg(y.sp_XmmReg)
     156        , init_sp_reg(y.init_sp_reg)
     157        , init_sp_xmm_reg(y.init_sp_xmm_reg)
     158    {
     159    }
     160
     161    CRegister& operator =(CRegister const& y)
     162    {
     163        array_UseReg = y.array_UseReg;
     164        sp_UseReg = y.sp_UseReg;
     165        array_XmmReg = y.array_XmmReg;
     166        sp_XmmReg = y.sp_XmmReg;
     167        init_sp_reg = y.init_sp_reg;
     168        init_sp_xmm_reg = y.init_sp_xmm_reg;
     169        return *this;
     170    }
     171
    115172    ~CRegister(){};
    116173
     
    313370    void BackupParameter(int pi_num);
    314371    void RestoreParameter(int pi_num);
     372
     373private:
     374    ParamImpl(ParamImpl const&);
     375    ParamImpl& operator =(ParamImpl const&);
    315376};
    316377
     
    325386    void lock(int level);
    326387    void unlock(int level);
     388
     389private:
     390    CDBLockParms(CDBLockParms const&);
     391    CDBLockParms& operator =(CDBLockParms const&);
    327392};
    328393
  • branches/egtra/ab5.0/abdev/compiler_x64/Register.cpp

    r468 r817  
    112112CRegister *pobj_reg;
    113113
    114 void CRegister::EnumRegister(int *pRegList,int nMaxList,int *array_reg,int *sp,int AnswerReg){
     114void CRegister::EnumRegister(int const* pRegList,int nMaxList,int *array_reg,int *sp,int AnswerReg){
    115115    int i,i2,sw=0;
    116116
     
    161161
    162162    EnumRegister(
    163         (int *)CalculationRegister,
     163        CalculationRegister,
    164164        sizeof(CalculationRegister)/sizeof(int),
    165         array_UseReg,
     165        array_UseReg.data(),
    166166        &sp_UseReg,
    167167        AnswerReg);
     
    174174
    175175    EnumRegister(
    176         (int *)CalculationXmmRegister,
     176        CalculationXmmRegister,
    177177        sizeof(CalculationXmmRegister)/sizeof(int),
    178         array_XmmReg,
     178        array_XmmReg.data(),
    179179        &sp_XmmReg,
    180180        AnswerReg);
Note: See TracChangeset for help on using the changeset viewer.