| 5363 | return this; |
| 5364 | } |
| 5365 | hx::Object *runObject(CppiaCtx *ctx) HXCPP_OVERRIDE |
| 5366 | { |
| 5367 | hx::Object *obj = object->runObject(ctx); |
| 5368 | BCR_CHECK; |
| 5369 | CPPIA_CHECK(obj); |
| 5370 | int i = index->runInt(ctx); |
| 5371 | BCR_CHECK; |
| 5372 | if (crement==coNone && assign==aoNone) |
| 5373 | { |
| 5374 | return obj->__GetItem(i).mPtr; |
| 5375 | } |
| 5376 | |
| 5377 | if (crement!=coNone) |
| 5378 | { |
| 5379 | Dynamic val0 = obj->__GetItem(i); |
| 5380 | Dynamic val1 = val0 + (crement<=coPostInc ? 1 : -1); |
| 5381 | obj->__SetItem(i, val1); |
| 5382 | return crement & coPostInc ? val0.mPtr : val1.mPtr; |
| 5383 | } |
| 5384 | if (assign == aoSet) |
| 5385 | { |
| 5386 | hx::Object *val = value->runObject(ctx); |
| 5387 | BCR_CHECK; |
| 5388 | return obj->__SetItem(i, val).mPtr; |
| 5389 | } |
| 5390 | |
| 5391 | Dynamic val0 = obj->__GetItem(i); |
| 5392 | Dynamic val1; |
| 5393 | |
| 5394 | switch(assign) |
| 5395 | { |
| 5396 | case aoAdd: val1 = val0 + Dynamic(value->runObject(ctx)); break; |
| 5397 | case aoMult: val1 = val0 * value->runFloat(ctx); break; |
| 5398 | case aoDiv: val1 = val0 / value->runFloat(ctx); break; |
| 5399 | case aoSub: val1 = val0 - value->runFloat(ctx); break; |
| 5400 | case aoAnd: val1 = (int)val0 & value->runInt(ctx); break; |
| 5401 | case aoOr: val1 = (int)val0 | value->runInt(ctx); break; |
| 5402 | case aoXOr: val1 = (int)val0 ^ value->runInt(ctx); break; |
| 5403 | case aoShl: val1 = (int)val0 << value->runInt(ctx); break; |
| 5404 | case aoShr: val1 = (int)val0 >> value->runInt(ctx); break; |
| 5405 | case aoUShr: val1 = hx::UShr((int)val0,value->runInt(ctx)); break; |
| 5406 | case aoMod: val1 = hx::Mod(val0 ,value->runFloat(ctx)); break; |
| 5407 | default: ; |
| 5408 | } |
| 5409 | BCR_CHECK; |
| 5410 | obj->__SetItem(i,val1); |
| 5411 | return val1.mPtr; |
| 5412 | } |
| 5413 | CppiaExpr *makeSetter(AssignOp op,CppiaExpr *inValue) HXCPP_OVERRIDE |
| 5414 | { |
| 5415 | assign = op; |