Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix tojson unconditionally serializes #26054

Merged
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

fixed fmt

  • Loading branch information
shnmorimoto committed Mar 28, 2020
commit f7d4a37f784ad8ce5d904e125167e4e4ef6a2e2a
@@ -2977,10 +2977,14 @@ def definition_body(self):
ret += fill(
"""
let conditions = ${conditions};
if !conditions.iter().any(|c| c.is_satisfied(SafeJSContext::from_ptr(cx), HandleObject::from_raw(obj), HandleObject::from_raw(obj))) {
if !conditions.iter().any(|c|
c.is_satisfied(
SafeJSContext::from_ptr(cx),
HandleObject::from_raw(obj),
HandleObject::from_raw(obj))) {
return false;

This comment has been minimized.

@jdm

jdm Mar 28, 2020

Member

I believe the timeouts in the tests are caused by returning here if the condition is not satisfied, rather than only executing the following code if the condition is satisfied.

This comment has been minimized.

@shnmorimoto

shnmorimoto Mar 29, 2020

Author Contributor

Thanks for review and checking. Do you mean that we should skip like below instead of returning false?

if flag = conditions.iter().any(|c|
         c.is_satisfied(
           SafeJSContext::from_ptr(cx),
           HandleObject::from_raw(obj),
           HandleObject::from_raw(obj)));
if flag {
    rooted!(in(cx) let mut temp = UndefinedValue());
    if !get_timing(cx, obj, this, JSJitGetterCallArgs { _base: temp.handle_mut().into() }) {
    return false;
    }
    if !JS_DefineProperty(cx, result.handle().into(),
                          b"timing\0" as *const u8 as *const libc::c_char,
                        temp.handle(), JSPROP_ENUMERATE as u32) {
    return false;
    }
}

I've tried it. But I still got timeout.
I'll continue to look into it.

This comment has been minimized.

@jdm

jdm Mar 29, 2020

Member

Ah, another problem is that we should be passing a global object as the third argument of is_satisfied based on https://doc.servo.org/script/dom/bindings/guard/enum.Condition.html#method.is_satisfied. We should be able to use something like:

let incumbent_global = GlobalScope::incumbent().expect("no incumbent global");
let global = incumbent_global.reflector().get_jsobject();

And then you could pass global as the third argument.

This comment has been minimized.

@shnmorimoto

shnmorimoto Mar 29, 2020

Author Contributor

Oh, sorry. I got it.
I fixed it and confirmed if the timeout isn't occurred.

}
rooted!(in(cx) let mut temp = UndefinedValue());
rooted!(in(cx) let mut temp = UndefinedValue());
if !get_${name}(cx, obj, this, JSJitGetterCallArgs { _base: temp.handle_mut().into() }) {
return false;
}
@@ -376,7 +376,7 @@ pub fn is_exposed_in(object: HandleObject, globals: Globals) -> bool {
let unwrapped = UncheckedUnwrapObject(object.get(), /* stopAtWindowProxy = */ 0);
let dom_class = get_dom_class(unwrapped).unwrap();
if (dom_class.global.is_empty()) && (!globals.is_empty()) {
return false
return false;
}
globals.contains(dom_class.global)
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.