ScriptVariant *ScriptVariant_Add(ScriptVariant * svar, ScriptVariant * rightChild) { static ScriptVariant retvar; static int flag = 1; DOUBLE dbl1, dbl2; CHAR buf[MAX_STR_VAR_LEN + 1]; if(flag) { ScriptVariant_Init(&retvar); flag = 0; } else ScriptVariant_Clear(&retvar); if(ScriptVariant_DecimalValue(svar, &dbl1) == S_OK && ScriptVariant_DecimalValue(rightChild, &dbl2) == S_OK) { if(svar->vt == VT_DECIMAL || rightChild->vt == VT_DECIMAL) { ScriptVariant_ChangeType(&retvar, VT_DECIMAL); retvar.dblVal = dbl1 + dbl2; } else { ScriptVariant_ChangeType(&retvar, VT_INTEGER); retvar.lVal = (LONG) (dbl1 + dbl2); } } else if(svar->vt == VT_STR || rightChild->vt == VT_STR) { ScriptVariant_ChangeType(&retvar, VT_STR); StrCache_Get(retvar.strVal)[0] = 0; ScriptVariant_ToString(svar, StrCache_Get(retvar.strVal)); ScriptVariant_ToString(rightChild, buf); strcat(StrCache_Get(retvar.strVal), buf); } return &retvar; }
void doTest(const char *filename) { Interpreter *interpreter = ImportCache_ImportFile(filename); if (interpreter && interpreter->functions.findByName("main")) { ScriptVariant retval; printf("\n\nRunning function 'main'...\n"); if (interpreter->runFunction(interpreter->functions.retrieve(), NULL, &retval) == CC_OK) { char buf[256]; if (retval.vt == VT_OBJECT) { printf("Returned value: "); ObjectHeap_GetObject(retval.objVal)->print(); printf("\n"); } else { ScriptVariant_ToString(&retval, buf, sizeof(buf)); printf("\nReturned value: %s\n", buf); } ScriptVariant_Unref(&retval); } } }