int main(int argc, const char * argv[]) { // Object *obj = new Object(); // delete obj; // 执行默认函数,会自动调用析构函数[在作用域内,代码块] // Object obj; runObject(); return 0; }
void runVoid(CppiaCtx *ctx) { if (FUNC==afSort) { ArrayBase *thisVal = (ArrayBase *)thisExpr->runObject(ctx); BCR_VCHECK; Dynamic a0 = args[0]->runObject(ctx); BCR_VCHECK; thisVal->__sort(a0); return; } if (FUNC==afInsert) { ArrayBase *thisVal = (ArrayBase *)thisExpr->runObject(ctx); BCR_VCHECK; Dynamic pos = args[0]->runObject(ctx); BCR_VCHECK; Dynamic val = args[1]->runObject(ctx); BCR_VCHECK; thisVal->__insert(pos, val); return; } if (FUNC==afUnshift) { ArrayBase *thisVal = (ArrayBase *)thisExpr->runObject(ctx); BCR_VCHECK; Dynamic val = args[0]->runObject(ctx); BCR_VCHECK; thisVal->__unshift(val); return; } switch(inlineGetType()) { case etString: runString(ctx); return; case etInt: runInt(ctx); return; default: runObject(ctx); } }
void runVoid(CppiaCtx *ctx) { if (FUNC==afPop) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; thisVal->pop(); } if (FUNC==afShift) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; thisVal->shift(); } if (FUNC==af__set) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; int i = args[0]->runInt(ctx); BCR_VCHECK; ELEM elem; thisVal->Item(i) = runValue(elem,ctx,args[1]); } if (FUNC==af__crement) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; int idx = args[0]->runInt(ctx); BCR_VCHECK; ELEM &elem = thisVal->Item(idx); CREMENT::run(elem); } if (FUNC==afPush || FUNC==afRemove) runInt(ctx); if (FUNC==afConcat || FUNC==afCopy || FUNC==afReverse || FUNC==afSplice || FUNC==afSlice || FUNC==afMap || FUNC==afFilter) runObject(ctx); if (FUNC==afReverse) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; thisVal->reverse(); } if (FUNC==afSort) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; hx::Object * func = args[0]->runObject(ctx); BCR_VCHECK; thisVal->sort(func); } if (FUNC==afInsert) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; int pos = args[0]->runInt(ctx); BCR_VCHECK; ELEM elem; runValue(elem,ctx,args[1]); BCR_VCHECK; thisVal->insert(pos,elem); } if (FUNC==afUnshift) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_VCHECK; ELEM elem; runValue(elem,ctx,args[0]); BCR_VCHECK; thisVal->unshift(elem); } }
::String runString(CppiaCtx *ctx) { if (FUNC==afPop) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_CHECK; return ValToString(thisVal->pop()); } if (FUNC==afShift) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_CHECK; return ValToString(thisVal->shift()); } if (FUNC==af__get) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_CHECK; int idx = args[0]->runInt(ctx); BCR_CHECK; return ValToString(thisVal->__get(idx)); } if (FUNC==af__set) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_CHECK; int i = args[0]->runInt(ctx); BCR_CHECK; ELEM elem; runValue(elem,ctx,args[1]); BCR_CHECK; return ValToString( thisVal->Item(i) = elem); } if (FUNC==af__crement) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_CHECK; int idx = args[0]->runInt(ctx); BCR_CHECK; ELEM &elem = thisVal->Item(idx); return ValToString(CREMENT::run(elem)); } if (FUNC==afJoin) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_CHECK; String space = args[0]->runString(ctx); BCR_CHECK; return thisVal->join(space); } if (FUNC==afToString) { Array_obj<ELEM> *thisVal = (Array_obj<ELEM>*)thisExpr->runObject(ctx); BCR_CHECK; return thisVal->toString(); } if (FUNC==afPush) return Dynamic(runInt(ctx))->toString(); return runObject(ctx)->toString(); }