EncodedTiValue JSC_HOST_CALL errorProtoFuncToString(TiExcState* exec) { TiObject* thisObj = exec->hostThisValue().toThisObject(exec); StringRecursionChecker checker(exec, thisObj); if (EncodedTiValue earlyReturnValue = checker.earlyReturnValue()) return earlyReturnValue; TiValue name = thisObj->get(exec, exec->propertyNames().name); TiValue message = thisObj->get(exec, exec->propertyNames().message); // Mozilla-compatible format. if (!name.isUndefined()) { if (!message.isUndefined()) return TiValue::encode(jsMakeNontrivialString(exec, name.toString(exec), ": ", message.toString(exec))); return TiValue::encode(jsNontrivialString(exec, name.toString(exec))); } if (!message.isUndefined()) return TiValue::encode(jsMakeNontrivialString(exec, "Error: ", message.toString(exec))); return TiValue::encode(jsNontrivialString(exec, "Error")); }
bool TiValueIsInstanceOfConstructor(TiContextRef ctx, TiValueRef value, TiObjectRef constructor, TiValueRef* exception) { TiExcState* exec = toJS(ctx); APIEntryShim entryShim(exec); TiValue jsValue = toJS(exec, value); TiObject* jsConstructor = toJS(constructor); if (!jsConstructor->structure()->typeInfo().implementsHasInstance()) return false; bool result = jsConstructor->hasInstance(exec, jsValue, jsConstructor->get(exec, exec->propertyNames().prototype)); // false if an exception is thrown if (exec->hadException()) { if (exception) *exception = toRef(exec, exec->exception()); exec->clearException(); } return result; }