Changeset 64 in dev for BasicCompiler64/Compile_Calc.cpp
- Timestamp:
- Mar 8, 2007, 2:49:34 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/Compile_Calc.cpp
r62 r64 11 11 SetBooleanVariable(CalcType,pRelativeVar); 12 12 } 13 else if(VarType==DEF_SBYTE||VarType==DEF_BYTE || (isUnicode==false&&VarType==DEF_CHAR)){ 14 //8ビット変数へalレジスタの内容を格納する 15 SetWholeVariable(sizeof(char),CalcType,pRelativeVar); 16 } 17 else if(VarType==DEF_INTEGER||VarType==DEF_WORD || (isUnicode&&VarType==DEF_CHAR)){ 18 //16ビット変数へaxレジスタの内容を格納する 19 SetWholeVariable(sizeof(short),CalcType,pRelativeVar); 20 } 21 else if(VarType==DEF_LONG||VarType==DEF_DWORD){ 22 //32ビット変数へeaxレジスタの内容を格納する 23 SetWholeVariable(sizeof(long),CalcType,pRelativeVar); 24 } 25 else if(VarType==DEF_INT64||VarType==DEF_QWORD||IsPtrType(VarType)){ 26 //64ビット変数へraxレジスタの内容を格納する 27 SetWholeVariable(sizeof(_int64),CalcType,pRelativeVar); 28 } 29 else if(VarType==DEF_DOUBLE){ 30 //Double型変数へスタックの内容を格納する 31 SetDoubleVariable(CalcType,pRelativeVar); 32 } 33 else if(VarType==DEF_SINGLE){ 34 //Single型変数へスタックの内容を格納する 35 SetSingleVariable(CalcType,pRelativeVar); 13 else if( IsRealNumberType( VarType ) ){ 14 // Double/Single型変数へレジスタの値を代入 15 SetRealVariable(VarType, CalcType, pRelativeVar); 16 } 17 else if( IsWholeNumberType( VarType ) || VarType == DEF_OBJECT ){ 18 int typeSize = GetTypeSize( VarType, -1 ); 19 20 //整数変数へraxの値を格納する 21 SetWholeVariable( typeSize, CalcType, pRelativeVar ); 36 22 } 37 23 else{ … … 165 151 166 152 153 if( lstrcmpi( variable, "This" ) == 0 ){ 154 SetError(133,NULL,cp); 155 return; 156 } 157 167 158 168 159 //////////////////////////////////////// … … 195 186 CalcType=NumOpe(®,Command+i+1,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap); 196 187 188 if(reg!=REG_RAX&&IsWholeNumberType(CalcType)){ 189 SetError(300,NULL,cp); 190 } 191 192 if(VarType==-1||CalcType==-1) return; 193 197 194 //結果を格納しているレジスタをブロッキング 198 195 pobj_BlockReg->lock(reg); 199 200 if(VarType==-1||CalcType==-1) return;201 196 202 197 //変数アドレスを取得 … … 206 201 &VarType, 207 202 &VarRelativeVar, 208 &lpVarIndex)) return; 203 &lpVarIndex, 204 NULL)) return; 209 205 210 206 //レジスタのブロッキングを解除 … … 216 212 } 217 213 218 if(VarType==DEF_ OBJECT){219 // オブジェクトインスタンスへの代入220 Set ObjectVariableFromRax(lpVarIndex,CalcType,lpCalcIndex,&VarRelativeVar,bCalcUseHeap);221 return; 222 } 223 224 if(CalcType==DEF_OBJECT ){214 if(VarType==DEF_STRUCT ){ 215 //構造体インスタンスへの代入 216 SetStructVariableFromRax(lpVarIndex,CalcType,lpCalcIndex,&VarRelativeVar,bCalcUseHeap); 217 return; 218 } 219 220 if(CalcType==DEF_OBJECT && (CalcType!=VarType || lpCalcIndex!=lpVarIndex) ){ 225 221 //キャスト演算子のオーバーロードに対応する 226 222 CallCastOperatorProc(REG_RAX,CalcType,lpCalcIndex,bCalcUseHeap,VarType,lpVarIndex); … … 241 237 } 242 238 239 // TODO: 消す 240 /* 243 241 void SetRefVariable( const char *varname, const char *expression ){ 244 242 //////////////////////////////////////// … … 320 318 SetVariableFromRax(VarType,CalcType,&VarRelativeVar); 321 319 } 320 */
Note:
See TracChangeset
for help on using the changeset viewer.