Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
        }
    }
}