Closed Bug 1155793 Opened 9 years ago Closed 9 years ago

Add a way to have DOM methods that are not allowed to be moved but are allowed to be DCEd

Categories

(Core :: DOM: Core & HTML, defect)

x86
macOS
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla40
Tracking Status
firefox40 --- fixed

People

(Reporter: bzbarsky, Assigned: bzbarsky)

Details

Attachments

(2 files)

Right now we conflate these two things, which is not necessarily correct going forward.
Assignee: nobody → bzbarsky
Status: NEW → ASSIGNED
Comment on attachment 8594091 [details] [diff] [review]
part 1.  Make it possible to safely change the number of bits in the slotIndex field in jitinfo

Review of attachment 8594091 [details] [diff] [review]:
-----------------------------------------------------------------

This seems fine, modulo the minor confusion about alignment in Codegen.py.

::: dom/bindings/Codegen.py
@@ +8261,4 @@
>                  """,
>                  argTypesDecl=argTypesDecl,
>                  infoName=infoName,
> +                jitInfo=indent(jitInfoInitializer(True)),

nit: why is it important to indent this string and dedent it in the template?

::: js/src/jsfriendapi.h
@@ +2398,3 @@
>  };
>  
>  static_assert(sizeof(JSJitInfo) == (sizeof(void*) + 2 * sizeof(uint32_t)),

hah! I was just gonna say "we need an assert to say we don't increase the total size." Luckily, Nathan is a wise man, and left it here many moons ago.
Attachment #8594091 - Flags: review?(efaustbmo) → review+
Comment on attachment 8594094 [details] [diff] [review]
part 2.  Split apart the concepts of movability and eliminatability in jitinfo, since some things are not movable but are eliminatable

Review of attachment 8594094 [details] [diff] [review]:
-----------------------------------------------------------------

r=me with comment enhanced to handle reviewer confusion.

::: dom/bindings/Codegen.py
@@ +8406,5 @@
> +        affects = self.member.affects
> +        dependsOn = self.member.dependsOn
> +        assert affects in IDLInterfaceMember.AffectsValues
> +        assert dependsOn in IDLInterfaceMember.DependsOnValues
> +        return affects == "Nothing" and dependsOn != "Everything"

I'm not sure I follow this comment. Why can't we get that in the WebIDL? I agree we struggle to encode it n the jitinfo, but this bit gets encoded on this side, no?
Attachment #8594094 - Flags: review?(efaustbmo) → review+
> nit: why is it important to indent this string and dedent it in the template?

Just to make the generated code look the way handwritten code would.  The old code was kinda whitespace-ugly: only the first line of the JSJitInfo inside JSTypedMethodJitInfo was properly indented.
> Why can't we get that in the WebIDL? 

We can.  The problem is that jitinfo can only express 3 different alias sets: None, Load(DOMProperty), and Store(Any) (in the terms the JIT thinks in).  So when we have DependsOn=Everything that ends up being encoded as Store(Any), which means it looks just like we have Affects=Everything.  This is basically what bug 1155796 is about.

I'll clarify the comment.
https://hg.mozilla.org/mozilla-central/rev/f8b866119def
https://hg.mozilla.org/mozilla-central/rev/c503b0418516
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla40
Component: DOM → DOM: Core & HTML
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: