| 2645 | } |
| 2646 | |
| 2647 | hx::Object *runObject(CppiaCtx *ctx) HXCPP_OVERRIDE |
| 2648 | { |
| 2649 | hx::Object *obj = object ? object->runObject(ctx) : staticClass.mPtr ? staticClass.mPtr : ctx->getThis(false); |
| 2650 | BCR_CHECK; |
| 2651 | CPPIA_CHECK(obj); |
| 2652 | |
| 2653 | if (crement==coNone && assign==aoNone) |
| 2654 | return Dynamic(obj->__Field(name,HX_PROP_DYNAMIC)).mPtr; |
| 2655 | |
| 2656 | if (crement!=coNone) |
| 2657 | { |
| 2658 | Dynamic val0 = obj->__Field(name,HX_PROP_DYNAMIC); |
| 2659 | BCR_CHECK; |
| 2660 | Dynamic val1 = val0 + (crement<=coPostInc ? 1 : -1); |
| 2661 | obj->__SetField(name, val1,HX_PROP_DYNAMIC); |
| 2662 | BCR_CHECK; |
| 2663 | return crement & coPostInc ? val0.mPtr : val1.mPtr; |
| 2664 | } |
| 2665 | if (assign == aoSet) |
| 2666 | { |
| 2667 | hx::Object *val = value->runObject(ctx); |
| 2668 | BCR_CHECK; |
| 2669 | return Dynamic(obj->__SetField(name,val,HX_PROP_DYNAMIC)).mPtr; |
| 2670 | } |
| 2671 | |
| 2672 | Dynamic val0 = obj->__Field(name,HX_PROP_DYNAMIC); |
| 2673 | BCR_CHECK; |
| 2674 | Dynamic val1; |
| 2675 | |
| 2676 | switch(assign) |
| 2677 | { |
| 2678 | case aoAdd: val1 = val0 + Dynamic(value->runObject(ctx)); break; |
| 2679 | case aoMult: val1 = val0 * value->runFloat(ctx); break; |
| 2680 | case aoDiv: val1 = val0 / value->runFloat(ctx); break; |
| 2681 | case aoSub: val1 = val0 - value->runFloat(ctx); break; |
| 2682 | case aoAnd: val1 = (int)val0 & value->runInt(ctx); break; |
| 2683 | case aoOr: val1 = (int)val0 | value->runInt(ctx); break; |
| 2684 | case aoXOr: val1 = (int)val0 ^ value->runInt(ctx); break; |
| 2685 | case aoShl: val1 = (int)val0 << value->runInt(ctx); break; |
| 2686 | case aoShr: val1 = (int)val0 >> value->runInt(ctx); break; |
| 2687 | case aoUShr: val1 = hx::UShr((int)val0,value->runInt(ctx)); break; |
| 2688 | case aoMod: val1 = hx::Mod(val0 ,value->runFloat(ctx)); break; |
| 2689 | default: ; |
| 2690 | } |
| 2691 | BCR_CHECK; |
| 2692 | obj->__SetField(name,val1,HX_PROP_DYNAMIC); |
| 2693 | return val1.mPtr; |
| 2694 | } |
| 2695 | |
| 2696 | #ifdef CPPIA_JIT |
| 2697 | static int SLJIT_CALL getInt( hx::Object *inSrc, String *inName ) |