bool as_value::abstract_equality_comparison( const as_value & first, const as_value & second ) { if (first.type_of() == second.type_of()) { if( first.is_undefined() ) return true; if( first.is_null() ) return true; if( first.is_number() ) { double first_number = first.to_number(); double second_number = second.to_number(); if( first_number == get_nan() || second_number == get_nan() ) { return false; } return first_number == second_number; } else if( first.is_string() ) { return first.to_tu_string() == second.to_tu_string(); } else if( first.is_bool() ) { return first.to_bool() == second.to_bool(); } //13.Return true if x and y refer to the same object or if they refer to objects joined to each other (see //13.1.2). Otherwise, return false. // TODO: treat joined object return first.to_object() == second.to_object(); } else { if( first.is_null() && second.is_undefined() ) return true; if( second.is_null() && first.is_undefined() ) return true; if( ( first.is_number() && second.is_string() ) || (second.is_number() && first.is_string() ) ) { return first.to_number() == second.to_number(); } if( first.is_bool() || second.is_bool() ) return first.to_number() == second.to_number(); // TODO:20.If Type(x) is either String or Number and Type(y) is Object, //return the result of the comparison x == ToPrimitive(y). //21.If Type(x) is Object and Type(y) is either String or Number, //return the result of the comparison ToPrimitive(x) == y. return false; } }
/// Convert an AS object to an XML string. std::string ExternalInterface::_toXML(const as_value &val) { // GNASH_REPORT_FUNCTION; std::stringstream ss; if (val.is_string()) { ss << "<string>" << val.to_string() << "</string>"; } else if (val.is_number()) { ss << "<number>" << val.to_string() << "</number>"; } else if (val.is_undefined()) { ss << "<void/>"; } else if (val.is_null()) { ss << "<null/>"; // Exception isn't listed in any docs, but we'll use it for // marshallExceptions. } else if (val.is_exception()) { ss << "<exception>" << val.to_string()<< "</exception>"; } else if (val.is_bool()) { ss << (val.to_bool(8) ? "<true/>" : "<false/>"); // Function also isn't listed, but it's the only other type // supported by as_value, so leaving it out doesn't seem right. } else if (val.is_function()) { ss << "<function>" << val.to_string() << "</function>"; } else if (val.is_object()) { as_object *obj = val.get_object(); ss << _objectToXML(obj); } else { log_error(_("Can't convert unknown type %d"), val.to_string()); } return ss.str(); }
void test_int(as_value val) { if (val.is_number()) { runtest.pass("as_value(int)"); } else { runtest.fail("as_value(int)"); } }