aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py12
-rw-r--r--components/script/dom/bindings/utils.rs7
2 files changed, 10 insertions, 9 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 883aeb7c8d6..076b7bd642f 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -662,11 +662,11 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
'%s' % (firstCap(sourceDescription), exceptionCode))),
post="\n")
- def onFailureInvalidEnumValue(failureCode):
+ def onFailureInvalidEnumValue(failureCode, passedVarName):
return CGGeneric(
failureCode or
- ('throw_type_error(cx, "%s is not a valid enum value."); %s'
- % (firstCap(sourceDescription), exceptionCode)))
+ ('throw_type_error(cx, &format!("\'{}\' is not a valid enum value for enumeration \'%s\'.", %s)); %s'
+ % (type.name, passedVarName, exceptionCode)))
def onFailureNotCallable(failureCode):
return CGGeneric(
@@ -873,15 +873,15 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
"yet")
enum = type.inner.identifier.name
if invalidEnumValueFatal:
- handleInvalidEnumValueCode = onFailureInvalidEnumValue(failureCode).define()
+ handleInvalidEnumValueCode = onFailureInvalidEnumValue(failureCode, 'search').define()
else:
handleInvalidEnumValueCode = "return true;"
template = (
"match find_enum_string_index(cx, ${val}, %(values)s) {\n"
" Err(_) => { %(exceptionCode)s },\n"
- " Ok(None) => { %(handleInvalidEnumValueCode)s },\n"
- " Ok(Some(index)) => {\n"
+ " Ok((None, search)) => { %(handleInvalidEnumValueCode)s },\n"
+ " Ok((Some(index), _)) => {\n"
" //XXXjdm need some range checks up in here.\n"
" mem::transmute(index)\n"
" },\n"
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index 9b9a729fe0a..cf1cf37a8b9 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -39,6 +39,7 @@ use std::ptr;
use std::slice;
use util::non_geckolib::jsstring_to_str;
use util::prefs;
+use util::str::DOMString;
/// Proxy handler for a WindowProxy.
pub struct WindowProxyHandler(pub *const libc::c_void);
@@ -182,18 +183,18 @@ pub fn get_array_index_from_id(_cx: *mut JSContext, id: HandleId) -> Option<u32>
/// Find the index of a string given by `v` in `values`.
/// Returns `Err(())` on JSAPI failure (there is a pending exception), and
-/// `Ok(None)` if there was no matching string.
+/// `Ok((None, value))` if there was no matching string.
pub unsafe fn find_enum_string_index(cx: *mut JSContext,
v: HandleValue,
values: &[&'static str])
- -> Result<Option<usize>, ()> {
+ -> Result<(Option<usize>, DOMString), ()> {
let jsstr = ToString(cx, v);
if jsstr.is_null() {
return Err(());
}
let search = jsstring_to_str(cx, jsstr);
- Ok(values.iter().position(|value| search == *value))
+ Ok((values.iter().position(|value| search == *value), search))
}
/// Returns wether `obj` is a platform object