| 4267 | |
| 4268 | #ifdef CPPIA_JIT |
| 4269 | void genCode(CppiaCompiler *compiler, const JitVal &inDest,ExprType destType) HXCPP_OVERRIDE |
| 4270 | { |
| 4271 | CrementOp op = (CrementOp)CREMENT::OP; |
| 4272 | int diff = op==coPostDec || op==coPreDec ? -1 : 1; |
| 4273 | |
| 4274 | JitVal ioPtr; |
| 4275 | |
| 4276 | switch(REFMODE) |
| 4277 | { |
| 4278 | case locObj: |
| 4279 | object->genCode(compiler, sJitTemp0.as(jtPointer), etObject); |
| 4280 | genNullReferenceExceptionCheck(compiler, sJitTemp0); |
| 4281 | ioPtr = sJitTemp0.star() + offset; |
| 4282 | break; |
| 4283 | |
| 4284 | case locThis: |
| 4285 | ioPtr = sJitThis.star() + offset; |
| 4286 | break; |
| 4287 | |
| 4288 | case locAbsolute: |
| 4289 | compiler->move( sJitTemp0, JitVal( (void *)pointer ) ); |
| 4290 | ioPtr = sJitTemp0.star(); |
| 4291 | break; |
| 4292 | |
| 4293 | case locStack: |
| 4294 | ioPtr = JitFramePos(offset,jtInt); |
| 4295 | break; |
| 4296 | } |
| 4297 | |
| 4298 | switch(getType()) |
| 4299 | { |
| 4300 | case etInt: |
| 4301 | ioPtr.type = jtInt; |
| 4302 | if ( inDest.type==jtVoid) |
| 4303 | { |
| 4304 | compiler->move( sJitTemp1.as(jtInt), ioPtr ); |
| 4305 | compiler->add( ioPtr, sJitTemp1.as(jtInt), diff ); |
| 4306 | } |
| 4307 | else if (op==coPostInc || op==coPostDec) |
| 4308 | { |
| 4309 | if (destType==etInt) |
| 4310 | { |
| 4311 | compiler->move( sJitTemp1.as(jtInt), ioPtr ); |
| 4312 | compiler->add( ioPtr, sJitTemp1.as(jtInt), diff ); |
| 4313 | compiler->move( inDest, sJitTemp1.as(jtInt) ); |
| 4314 | } |
| 4315 | else |
| 4316 | { |
| 4317 | JitTemp result(compiler, jtInt); |
| 4318 | compiler->move( result, ioPtr ); |
| 4319 | compiler->add( ioPtr, ioPtr, diff ); |
| 4320 | compiler->convert( result, etInt, inDest, destType ); |
| 4321 | } |
| 4322 | } |
| 4323 | else |
| 4324 | { |
| 4325 | if (destType==etInt) |
| 4326 | { |
nothing calls this directly
no test coverage detected