Changeset 40 in dev for BasicCompiler64/Compile_Calc.cpp
- Timestamp:
- Jan 28, 2007, 3:48:22 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/Compile_Calc.cpp
r36 r40 237 237 SetVariableFromRax(VarType,CalcType,&VarRelativeVar); 238 238 } 239 240 void SetRefVariable( const char *varname, const char *expression ){ 241 //////////////////////////////////////// 242 // 変数のタイプ型を識別して、演算を行う 243 //////////////////////////////////////// 244 245 int VarType,CalcType; 246 LONG_PTR lpVarIndex,lpCalcIndex; 247 BOOL bCalcUseHeap; 248 249 //型を識別 250 VarType=GetVarType(varname,&lpVarIndex,0); 251 if(VarType==-1){ 252 SetError(300,NULL,cp); 253 return; 254 } 255 256 extern LONG_PTR ProcPtr_BaseIndex; 257 if(VarType==DEF_PTR_PROC) ProcPtr_BaseIndex=lpVarIndex; 258 else ProcPtr_BaseIndex=-1; 259 260 //NumOpe...(rax、またはxmm0に答えが格納される) 261 int reg=REG_RAX; 262 CalcType=NumOpe(®,expression,VarType,lpVarIndex,&lpCalcIndex,&bCalcUseHeap); 263 264 //結果を格納しているレジスタをブロッキング 265 pobj_BlockReg->lock(reg); 266 267 if(VarType==-1||CalcType==-1) return; 268 269 //変数アドレスを取得 270 RELATIVE_VAR VarRelativeVar; 271 if(!GetVarOffsetReadWrite( 272 varname, 273 &VarType, 274 &VarRelativeVar, 275 &lpVarIndex)) return; 276 277 //レジスタのブロッキングを解除 278 pobj_BlockReg->clear(); 279 280 if(VarType&FLAG_PTR){ 281 SetError(14,varname,cp); 282 return; 283 } 284 285 if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){ 286 // 参照型オブジェクトへの代入(初期化)はポインタ変数と同様の処理に値する 287 VarType = PTR_LEVEL_UP( VarType ); 288 289 VarRelativeVar.dwKind = VAR_LOCAL; 290 291 if( CalcType == DEF_OBJECT ){ 292 //右辺値が実体オブジェクトのときは、参照をコピー 293 CalcType = PTR_LEVEL_UP( DEF_OBJECT ); 294 } 295 } 296 else{ 297 SetError(300,NULL,cp); 298 } 299 300 301 ///////////////////////////////// 302 // 右辺、左辺の型チェックを行う 303 ///////////////////////////////// 304 305 CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0); 306 307 308 ///////////////////////////////////////////////// 309 // rax(実数はxmm0)の内容を変数にコピー 310 ///////////////////////////////////////////////// 311 SetVariableFromRax(VarType,CalcType,&VarRelativeVar); 312 }
Note:
See TracChangeset
for help on using the changeset viewer.