void VM::PrintUnhandledError(Thread *const thread) { Value &error = thread->currentError; PrintInternal(stderr, L"Unhandled error: %ls: ", error.type->fullName); String *message = nullptr; // If the member exists and is a readable instance property, // we can actually try to invoke the 'message' getter! Member *msgMember = error.type->FindMember(strings->members.message, nullptr); if (msgMember && !msgMember->IsStatic() && msgMember->IsProperty()) { Property *msgProp = static_cast<Property*>(msgMember); if (msgProp->getter != nullptr) { thread->Push(&error); Value result; int r = thread->InvokeMethod(msgProp->getter, 0, &result); if (r == OVUM_SUCCESS && result.type == types.String) message = result.v.string; } } if (message == nullptr) message = error.v.error->message; if (message != nullptr) PrintErrLn(message); if (error.v.error->stackTrace) PrintErrLn(error.v.error->stackTrace); }