Bug 1454591 part 5 - Generate subproperty lists from Servo data. r=heycam
authorXidorn Quan <me@upsuper.org>
Fri, 04 May 2018 15:17:05 +1000
changeset 473196 9f38c38a66cc7ef461284f4f80c8811f335723b8
parent 473195 d8252b50ec6c19fbf077db94763396ce7aa107dc
child 473197 881670154df07ef8253a9597c5826d30ffe0c00d
push id1728
push userjlund@mozilla.com
push dateMon, 18 Jun 2018 21:12:27 +0000
treeherdermozilla-release@c296fde26f5f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersheycam
bugs1454591
milestone61.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1454591 part 5 - Generate subproperty lists from Servo data. r=heycam I manually diffed the generated lists and the original ones from in nsCSSProps.cpp. All generated lists seem to contain the same set of subproperties as their old correspondents. There are still some differences: Order of subproperties of many shorthands is changed. There are many comments in the old lists stating that the order is important, but they are mostly for serialization. I auditted all users of the subproperty lists, and it doesn't seem to me any of them relies on the order. gOutlineRadiusSubpropTable is renamed to gMozOutlineRadiusSubpropTable which I don't think is a problem at all, but maybe worth mentioning. MozReview-Commit-ID: 190SBZfxVOW
devtools/shared/css/generated/properties-db.js
layout/style/GenerateCSSPropsGenerated.py
layout/style/ServoCSSPropList.mako.py
layout/style/nsCSSProps.cpp
--- a/devtools/shared/css/generated/properties-db.js
+++ b/devtools/shared/css/generated/properties-db.js
@@ -13,24 +13,24 @@
 
 /**
  * A list of CSS Properties and their various characteristics.
  */
 exports.CSS_PROPERTIES = {
   "-moz-animation": {
     "isInherited": false,
     "subproperties": [
+      "animation-name",
       "animation-duration",
       "animation-timing-function",
       "animation-delay",
+      "animation-iteration-count",
       "animation-direction",
       "animation-fill-mode",
-      "animation-iteration-count",
-      "animation-play-state",
-      "animation-name"
+      "animation-play-state"
     ],
     "supports": [
       10
     ],
     "values": [
       "alternate",
       "alternate-reverse",
       "backwards",
@@ -341,19 +341,19 @@ exports.CSS_PROPERTIES = {
       "none",
       "unset",
       "url"
     ]
   },
   "-moz-border-end": {
     "isInherited": false,
     "subproperties": [
-      "border-inline-end-width",
+      "border-inline-end-color",
       "border-inline-end-style",
-      "border-inline-end-color"
+      "border-inline-end-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -435,21 +435,21 @@ exports.CSS_PROPERTIES = {
       "thick",
       "thin",
       "unset"
     ]
   },
   "-moz-border-image": {
     "isInherited": false,
     "subproperties": [
-      "border-image-source",
+      "border-image-outset",
+      "border-image-repeat",
       "border-image-slice",
-      "border-image-width",
-      "border-image-outset",
-      "border-image-repeat"
+      "border-image-source",
+      "border-image-width"
     ],
     "supports": [
       4
     ],
     "values": [
       "-moz-element",
       "-moz-image-rect",
       "-moz-linear-gradient",
@@ -476,19 +476,19 @@ exports.CSS_PROPERTIES = {
       "stretch",
       "unset",
       "url"
     ]
   },
   "-moz-border-start": {
     "isInherited": false,
     "subproperties": [
-      "border-inline-start-width",
+      "border-inline-start-color",
       "border-inline-start-style",
-      "border-inline-start-color"
+      "border-inline-start-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -818,18 +818,18 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "-moz-columns": {
     "isInherited": false,
     "subproperties": [
-      "column-count",
-      "column-width"
+      "column-width",
+      "column-count"
     ],
     "supports": [],
     "values": [
       "auto",
       "inherit",
       "initial",
       "unset"
     ]
@@ -1531,24 +1531,24 @@ exports.CSS_PROPERTIES = {
       "stretch",
       "unsafe",
       "unset"
     ]
   },
   "-webkit-animation": {
     "isInherited": false,
     "subproperties": [
+      "animation-name",
       "animation-duration",
       "animation-timing-function",
       "animation-delay",
+      "animation-iteration-count",
       "animation-direction",
       "animation-fill-mode",
-      "animation-iteration-count",
-      "animation-play-state",
-      "animation-name"
+      "animation-play-state"
     ],
     "supports": [
       10
     ],
     "values": [
       "alternate",
       "alternate-reverse",
       "backwards",
@@ -1777,21 +1777,21 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "-webkit-border-image": {
     "isInherited": false,
     "subproperties": [
-      "border-image-source",
+      "border-image-outset",
+      "border-image-repeat",
       "border-image-slice",
-      "border-image-width",
-      "border-image-outset",
-      "border-image-repeat"
+      "border-image-source",
+      "border-image-width"
     ],
     "supports": [
       4
     ],
     "values": [
       "-moz-element",
       "-moz-image-rect",
       "-moz-linear-gradient",
@@ -2144,25 +2144,25 @@ exports.CSS_PROPERTIES = {
       "stretch",
       "unsafe",
       "unset"
     ]
   },
   "-webkit-mask": {
     "isInherited": false,
     "subproperties": [
-      "mask-image",
+      "mask-mode",
       "mask-repeat",
+      "mask-clip",
+      "mask-origin",
+      "mask-composite",
       "mask-position-x",
       "mask-position-y",
-      "mask-clip",
-      "mask-origin",
       "mask-size",
-      "mask-composite",
-      "mask-mode"
+      "mask-image"
     ],
     "supports": [
       4
     ],
     "values": [
       "-moz-element",
       "-moz-image-rect",
       "-moz-linear-gradient",
@@ -2775,351 +2775,347 @@ exports.CSS_PROPERTIES = {
       "stretch",
       "unsafe",
       "unset"
     ]
   },
   "all": {
     "isInherited": false,
     "subproperties": [
-      "align-content",
-      "align-items",
-      "align-self",
-      "animation-delay",
-      "animation-direction",
-      "animation-duration",
-      "animation-fill-mode",
-      "animation-iteration-count",
-      "animation-name",
-      "animation-play-state",
-      "animation-timing-function",
-      "-moz-appearance",
-      "backface-visibility",
-      "background-attachment",
-      "background-blend-mode",
-      "background-clip",
+      "border-block-start-color",
+      "border-block-start-style",
+      "border-block-start-width",
+      "border-block-end-color",
+      "border-block-end-style",
+      "border-block-end-width",
+      "border-inline-start-color",
+      "border-inline-start-style",
+      "border-inline-start-width",
+      "border-inline-end-color",
+      "border-inline-end-style",
+      "border-inline-end-width",
+      "margin-block-start",
+      "margin-block-end",
+      "margin-inline-start",
+      "margin-inline-end",
+      "padding-block-start",
+      "padding-block-end",
+      "padding-inline-start",
+      "padding-inline-end",
+      "offset-block-start",
+      "offset-block-end",
+      "offset-inline-start",
+      "offset-inline-end",
+      "block-size",
+      "min-block-size",
+      "max-block-size",
+      "inline-size",
+      "min-inline-size",
+      "max-inline-size",
       "background-color",
       "background-image",
-      "background-origin",
       "background-position-x",
       "background-position-y",
       "background-repeat",
+      "background-attachment",
+      "background-clip",
+      "background-origin",
       "background-size",
-      "-moz-binding",
-      "block-size",
-      "border-block-end-color",
-      "border-block-end-style",
-      "border-block-end-width",
-      "border-block-start-color",
-      "border-block-start-style",
-      "border-block-start-width",
-      "border-bottom-color",
-      "border-bottom-left-radius",
-      "border-bottom-right-radius",
-      "border-bottom-style",
-      "border-bottom-width",
-      "border-collapse",
-      "border-image-outset",
-      "border-image-repeat",
-      "border-image-slice",
-      "border-image-source",
-      "border-image-width",
-      "border-inline-end-color",
-      "border-inline-end-style",
-      "border-inline-end-width",
-      "border-inline-start-color",
-      "border-inline-start-style",
-      "border-inline-start-width",
-      "border-left-color",
-      "border-left-style",
-      "border-left-width",
+      "background-blend-mode",
+      "border-top-color",
+      "border-top-style",
+      "border-top-width",
       "border-right-color",
       "border-right-style",
       "border-right-width",
-      "border-spacing",
-      "border-top-color",
+      "border-bottom-color",
+      "border-bottom-style",
+      "border-bottom-width",
+      "border-left-color",
+      "border-left-style",
+      "border-left-width",
       "border-top-left-radius",
       "border-top-right-radius",
-      "border-top-style",
-      "border-top-width",
-      "bottom",
-      "-moz-box-align",
+      "border-bottom-right-radius",
+      "border-bottom-left-radius",
       "box-decoration-break",
-      "-moz-box-direction",
-      "-moz-box-flex",
-      "-moz-box-ordinal-group",
-      "-moz-box-orient",
-      "-moz-box-pack",
-      "box-shadow",
-      "box-sizing",
-      "caption-side",
-      "caret-color",
+      "-moz-float-edge",
+      "border-image-source",
+      "border-image-outset",
+      "border-image-repeat",
+      "border-image-width",
+      "border-image-slice",
+      "display",
+      "position",
+      "float",
       "clear",
-      "clip",
-      "clip-path",
-      "clip-rule",
+      "vertical-align",
+      "overflow-clip-box-inline",
+      "overflow-clip-box-block",
+      "overflow-x",
+      "overflow-y",
+      "transition-duration",
+      "transition-timing-function",
+      "transition-property",
+      "transition-delay",
+      "animation-name",
+      "animation-duration",
+      "animation-timing-function",
+      "animation-iteration-count",
+      "animation-direction",
+      "animation-play-state",
+      "animation-fill-mode",
+      "animation-delay",
+      "scroll-snap-points-x",
+      "scroll-snap-points-y",
+      "scroll-snap-destination",
+      "scroll-snap-coordinate",
+      "transform",
+      "rotate",
+      "scale",
+      "translate",
+      "scroll-behavior",
+      "scroll-snap-type-x",
+      "scroll-snap-type-y",
+      "overscroll-behavior-x",
+      "overscroll-behavior-y",
+      "isolation",
+      "page-break-after",
+      "page-break-before",
+      "page-break-inside",
+      "resize",
+      "perspective",
+      "perspective-origin",
+      "backface-visibility",
+      "transform-box",
+      "transform-style",
+      "transform-origin",
+      "contain",
+      "-moz-appearance",
+      "-moz-binding",
+      "-moz-orient",
+      "will-change",
+      "shape-image-threshold",
+      "shape-margin",
+      "shape-outside",
+      "touch-action",
       "color",
-      "color-adjust",
-      "color-interpolation",
-      "color-interpolation-filters",
+      "column-width",
       "column-count",
       "column-fill",
-      "column-gap",
+      "column-rule-width",
       "column-rule-color",
-      "column-rule-style",
-      "column-rule-width",
       "column-span",
-      "column-width",
-      "contain",
+      "column-rule-style",
       "content",
-      "-moz-context-properties",
-      "-moz-control-character-visibility",
       "counter-increment",
       "counter-reset",
-      "cursor",
-      "display",
-      "dominant-baseline",
-      "empty-cells",
-      "fill",
-      "fill-opacity",
-      "fill-rule",
+      "opacity",
+      "box-shadow",
+      "clip",
       "filter",
-      "flex-basis",
-      "flex-direction",
-      "flex-grow",
-      "flex-shrink",
-      "flex-wrap",
-      "float",
-      "-moz-float-edge",
-      "flood-color",
-      "flood-opacity",
+      "mix-blend-mode",
       "font-family",
-      "font-feature-settings",
-      "font-kerning",
-      "font-language-override",
-      "font-optical-sizing",
+      "font-style",
+      "font-variant-caps",
+      "font-weight",
       "font-size",
       "font-size-adjust",
-      "-moz-font-smoothing-background-color",
+      "font-synthesis",
       "font-stretch",
-      "font-style",
-      "font-synthesis",
+      "font-kerning",
       "font-variant-alternates",
-      "font-variant-caps",
       "font-variant-east-asian",
       "font-variant-ligatures",
       "font-variant-numeric",
       "font-variant-position",
+      "font-feature-settings",
       "font-variation-settings",
-      "font-weight",
-      "-moz-force-broken-image-icon",
-      "grid-auto-columns",
-      "grid-auto-flow",
-      "grid-auto-rows",
-      "grid-column-end",
-      "grid-column-start",
-      "grid-row-end",
-      "grid-row-start",
-      "grid-template-areas",
-      "grid-template-columns",
-      "grid-template-rows",
-      "height",
+      "font-language-override",
+      "font-optical-sizing",
+      "-moz-osx-font-smoothing",
+      "visibility",
+      "writing-mode",
+      "text-orientation",
+      "color-adjust",
+      "image-rendering",
+      "image-orientation",
+      "border-collapse",
+      "empty-cells",
+      "caption-side",
+      "border-spacing",
+      "line-height",
+      "text-transform",
       "hyphens",
-      "image-orientation",
-      "-moz-image-region",
-      "image-rendering",
-      "ime-mode",
-      "initial-letter",
-      "inline-size",
-      "isolation",
-      "justify-content",
-      "justify-items",
-      "justify-self",
-      "left",
+      "-moz-text-size-adjust",
+      "text-indent",
+      "overflow-wrap",
+      "word-break",
+      "text-justify",
+      "text-align-last",
+      "text-align",
       "letter-spacing",
-      "lighting-color",
-      "line-height",
-      "list-style-image",
+      "word-spacing",
+      "white-space",
+      "text-shadow",
+      "text-emphasis-style",
+      "text-emphasis-position",
+      "text-emphasis-color",
+      "-moz-tab-size",
+      "-webkit-text-fill-color",
+      "-webkit-text-stroke-color",
+      "-webkit-text-stroke-width",
+      "ruby-align",
+      "ruby-position",
+      "text-combine-upright",
+      "text-rendering",
+      "-moz-control-character-visibility",
       "list-style-position",
       "list-style-type",
-      "margin-block-end",
-      "margin-block-start",
-      "margin-bottom",
-      "margin-inline-end",
-      "margin-inline-start",
-      "margin-left",
-      "margin-right",
+      "list-style-image",
+      "quotes",
+      "-moz-image-region",
       "margin-top",
-      "marker-end",
-      "marker-mid",
-      "marker-start",
-      "mask-clip",
-      "mask-composite",
-      "mask-image",
-      "mask-mode",
-      "mask-origin",
-      "mask-position-x",
-      "mask-position-y",
-      "mask-repeat",
-      "mask-size",
-      "mask-type",
-      "max-block-size",
+      "margin-right",
+      "margin-bottom",
+      "margin-left",
+      "outline-color",
+      "outline-style",
+      "outline-width",
+      "-moz-outline-radius-topleft",
+      "-moz-outline-radius-topright",
+      "-moz-outline-radius-bottomright",
+      "-moz-outline-radius-bottomleft",
+      "outline-offset",
+      "padding-top",
+      "padding-right",
+      "padding-bottom",
+      "padding-left",
+      "cursor",
+      "pointer-events",
+      "-moz-user-input",
+      "-moz-user-modify",
+      "-moz-user-focus",
+      "caret-color",
+      "top",
+      "right",
+      "bottom",
+      "left",
+      "z-index",
+      "flex-direction",
+      "flex-wrap",
+      "justify-content",
+      "align-content",
+      "align-items",
+      "justify-items",
+      "flex-grow",
+      "flex-shrink",
+      "align-self",
+      "justify-self",
+      "order",
+      "flex-basis",
+      "width",
+      "min-width",
+      "max-width",
+      "height",
+      "min-height",
       "max-height",
-      "max-inline-size",
-      "max-width",
-      "min-block-size",
-      "-moz-min-font-size-ratio",
-      "min-height",
-      "min-inline-size",
-      "min-width",
-      "mix-blend-mode",
+      "box-sizing",
       "object-fit",
       "object-position",
-      "offset-block-end",
-      "offset-block-start",
-      "offset-inline-end",
-      "offset-inline-start",
-      "opacity",
-      "order",
-      "-moz-orient",
-      "-moz-osx-font-smoothing",
-      "outline-color",
-      "outline-offset",
-      "-moz-outline-radius-bottomleft",
-      "-moz-outline-radius-bottomright",
-      "-moz-outline-radius-topleft",
-      "-moz-outline-radius-topright",
-      "outline-style",
-      "outline-width",
-      "overflow-clip-box-block",
-      "overflow-clip-box-inline",
-      "overflow-wrap",
-      "overflow-x",
-      "overflow-y",
-      "overscroll-behavior-x",
-      "overscroll-behavior-y",
-      "padding-block-end",
-      "padding-block-start",
-      "padding-bottom",
-      "padding-inline-end",
-      "padding-inline-start",
-      "padding-left",
-      "padding-right",
-      "padding-top",
-      "page-break-after",
-      "page-break-before",
-      "page-break-inside",
-      "paint-order",
-      "perspective",
-      "perspective-origin",
-      "pointer-events",
-      "position",
-      "quotes",
-      "resize",
-      "right",
-      "rotate",
+      "grid-row-start",
+      "grid-row-end",
+      "grid-auto-rows",
+      "grid-template-rows",
+      "grid-column-start",
+      "grid-column-end",
+      "grid-auto-columns",
+      "grid-template-columns",
+      "grid-auto-flow",
+      "grid-template-areas",
+      "column-gap",
       "row-gap",
-      "ruby-align",
-      "ruby-position",
-      "scale",
-      "scroll-behavior",
-      "scroll-snap-coordinate",
-      "scroll-snap-destination",
-      "scroll-snap-points-x",
-      "scroll-snap-points-y",
-      "scroll-snap-type-x",
-      "scroll-snap-type-y",
-      "shape-image-threshold",
-      "shape-margin",
-      "shape-outside",
+      "table-layout",
+      "text-overflow",
+      "text-decoration-line",
+      "text-decoration-style",
+      "text-decoration-color",
+      "initial-letter",
+      "ime-mode",
+      "-moz-user-select",
+      "-moz-window-dragging",
+      "-moz-window-opacity",
+      "-moz-window-transform",
+      "-moz-window-transform-origin",
+      "-moz-force-broken-image-icon",
+      "text-anchor",
+      "color-interpolation",
+      "color-interpolation-filters",
+      "fill",
+      "fill-opacity",
+      "fill-rule",
       "shape-rendering",
-      "-moz-stack-sizing",
-      "stop-color",
-      "stop-opacity",
       "stroke",
-      "stroke-dasharray",
-      "stroke-dashoffset",
+      "stroke-width",
       "stroke-linecap",
       "stroke-linejoin",
       "stroke-miterlimit",
       "stroke-opacity",
-      "stroke-width",
-      "-moz-tab-size",
-      "table-layout",
-      "text-align",
-      "text-align-last",
-      "text-anchor",
-      "text-combine-upright",
-      "text-decoration-color",
-      "text-decoration-line",
-      "text-decoration-style",
-      "text-emphasis-color",
-      "text-emphasis-position",
-      "text-emphasis-style",
-      "-webkit-text-fill-color",
-      "text-indent",
-      "text-justify",
-      "text-orientation",
-      "text-overflow",
-      "text-rendering",
-      "text-shadow",
-      "-moz-text-size-adjust",
-      "-webkit-text-stroke-color",
-      "-webkit-text-stroke-width",
-      "text-transform",
-      "top",
-      "-moz-top-layer",
-      "touch-action",
-      "transform",
-      "transform-box",
-      "transform-origin",
-      "transform-style",
-      "transition-delay",
-      "transition-duration",
-      "transition-property",
-      "transition-timing-function",
-      "translate",
-      "-moz-user-focus",
-      "-moz-user-input",
-      "-moz-user-modify",
-      "-moz-user-select",
+      "stroke-dasharray",
+      "stroke-dashoffset",
+      "clip-rule",
+      "marker-start",
+      "marker-mid",
+      "marker-end",
+      "paint-order",
+      "-moz-context-properties",
+      "dominant-baseline",
       "vector-effect",
-      "vertical-align",
-      "visibility",
-      "white-space",
-      "width",
-      "will-change",
-      "-moz-window-dragging",
-      "-moz-window-opacity",
-      "-moz-window-shadow",
-      "-moz-window-transform",
-      "-moz-window-transform-origin",
-      "word-break",
-      "word-spacing",
-      "writing-mode",
-      "z-index"
+      "stop-color",
+      "stop-opacity",
+      "flood-color",
+      "flood-opacity",
+      "lighting-color",
+      "mask-type",
+      "clip-path",
+      "mask-mode",
+      "mask-repeat",
+      "mask-position-x",
+      "mask-position-y",
+      "mask-clip",
+      "mask-origin",
+      "mask-size",
+      "mask-composite",
+      "mask-image",
+      "-moz-box-align",
+      "-moz-box-direction",
+      "-moz-box-flex",
+      "-moz-box-orient",
+      "-moz-box-pack",
+      "-moz-stack-sizing",
+      "-moz-box-ordinal-group"
     ],
     "supports": [],
     "values": [
       "inherit",
       "initial",
       "unset"
     ]
   },
   "animation": {
     "isInherited": false,
     "subproperties": [
+      "animation-name",
       "animation-duration",
       "animation-timing-function",
       "animation-delay",
+      "animation-iteration-count",
       "animation-direction",
       "animation-fill-mode",
-      "animation-iteration-count",
-      "animation-play-state",
-      "animation-name"
+      "animation-play-state"
     ],
     "supports": [
       10
     ],
     "values": [
       "alternate",
       "alternate-reverse",
       "backwards",
@@ -3279,24 +3275,24 @@ exports.CSS_PROPERTIES = {
       "unset",
       "visible"
     ]
   },
   "background": {
     "isInherited": false,
     "subproperties": [
       "background-color",
-      "background-image",
+      "background-position-x",
+      "background-position-y",
       "background-repeat",
       "background-attachment",
-      "background-clip",
+      "background-image",
+      "background-size",
       "background-origin",
-      "background-position-x",
-      "background-position-y",
-      "background-size"
+      "background-clip"
     ],
     "supports": [
       2,
       4
     ],
     "values": [
       "COLOR",
       "-moz-element",
@@ -3570,33 +3566,33 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "border": {
     "isInherited": false,
     "subproperties": [
+      "border-top-color",
+      "border-top-style",
       "border-top-width",
+      "border-right-color",
+      "border-right-style",
       "border-right-width",
+      "border-bottom-color",
+      "border-bottom-style",
       "border-bottom-width",
-      "border-left-width",
-      "border-top-style",
-      "border-right-style",
-      "border-bottom-style",
+      "border-left-color",
       "border-left-style",
-      "border-top-color",
-      "border-right-color",
-      "border-bottom-color",
-      "border-left-color",
+      "border-left-width",
+      "border-image-outset",
+      "border-image-repeat",
+      "border-image-slice",
       "border-image-source",
-      "border-image-slice",
-      "border-image-width",
-      "border-image-outset",
-      "border-image-repeat"
+      "border-image-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -3620,19 +3616,19 @@ exports.CSS_PROPERTIES = {
       "thin",
       "transparent",
       "unset"
     ]
   },
   "border-block-end": {
     "isInherited": false,
     "subproperties": [
-      "border-block-end-width",
+      "border-block-end-color",
       "border-block-end-style",
-      "border-block-end-color"
+      "border-block-end-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -3714,19 +3710,19 @@ exports.CSS_PROPERTIES = {
       "thick",
       "thin",
       "unset"
     ]
   },
   "border-block-start": {
     "isInherited": false,
     "subproperties": [
-      "border-block-start-width",
+      "border-block-start-color",
       "border-block-start-style",
-      "border-block-start-color"
+      "border-block-start-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -3808,19 +3804,19 @@ exports.CSS_PROPERTIES = {
       "thick",
       "thin",
       "unset"
     ]
   },
   "border-bottom": {
     "isInherited": false,
     "subproperties": [
-      "border-bottom-width",
+      "border-bottom-color",
       "border-bottom-style",
-      "border-bottom-color"
+      "border-bottom-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -3964,21 +3960,21 @@ exports.CSS_PROPERTIES = {
       "rgba",
       "transparent",
       "unset"
     ]
   },
   "border-image": {
     "isInherited": false,
     "subproperties": [
-      "border-image-source",
+      "border-image-outset",
+      "border-image-repeat",
       "border-image-slice",
-      "border-image-width",
-      "border-image-outset",
-      "border-image-repeat"
+      "border-image-source",
+      "border-image-width"
     ],
     "supports": [
       4
     ],
     "values": [
       "-moz-element",
       "-moz-image-rect",
       "-moz-linear-gradient",
@@ -4090,19 +4086,19 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "border-inline-end": {
     "isInherited": false,
     "subproperties": [
-      "border-inline-end-width",
+      "border-inline-end-color",
       "border-inline-end-style",
-      "border-inline-end-color"
+      "border-inline-end-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -4184,19 +4180,19 @@ exports.CSS_PROPERTIES = {
       "thick",
       "thin",
       "unset"
     ]
   },
   "border-inline-start": {
     "isInherited": false,
     "subproperties": [
-      "border-inline-start-width",
+      "border-inline-start-color",
       "border-inline-start-style",
-      "border-inline-start-color"
+      "border-inline-start-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -4278,19 +4274,19 @@ exports.CSS_PROPERTIES = {
       "thick",
       "thin",
       "unset"
     ]
   },
   "border-left": {
     "isInherited": false,
     "subproperties": [
-      "border-left-width",
+      "border-left-color",
       "border-left-style",
-      "border-left-color"
+      "border-left-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -4387,19 +4383,19 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "border-right": {
     "isInherited": false,
     "subproperties": [
-      "border-right-width",
+      "border-right-color",
       "border-right-style",
-      "border-right-color"
+      "border-right-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -4518,19 +4514,19 @@ exports.CSS_PROPERTIES = {
       "ridge",
       "solid",
       "unset"
     ]
   },
   "border-top": {
     "isInherited": false,
     "subproperties": [
-      "border-top-width",
+      "border-top-color",
       "border-top-style",
-      "border-top-color"
+      "border-top-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "currentColor",
       "dashed",
@@ -5041,18 +5037,18 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "columns": {
     "isInherited": false,
     "subproperties": [
-      "column-count",
-      "column-width"
+      "column-width",
+      "column-count"
     ],
     "supports": [],
     "values": [
       "auto",
       "inherit",
       "initial",
       "unset"
     ]
@@ -5502,34 +5498,34 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "font": {
     "isInherited": true,
     "subproperties": [
-      "font-family",
       "font-style",
+      "font-variant-caps",
       "font-weight",
+      "font-stretch",
       "font-size",
       "line-height",
+      "font-family",
       "font-size-adjust",
-      "font-stretch",
-      "font-feature-settings",
-      "font-language-override",
       "font-kerning",
       "font-optical-sizing",
-      "font-variation-settings",
       "font-variant-alternates",
-      "font-variant-caps",
       "font-variant-east-asian",
       "font-variant-ligatures",
       "font-variant-numeric",
-      "font-variant-position"
+      "font-variant-position",
+      "font-language-override",
+      "font-feature-settings",
+      "font-variation-settings"
     ],
     "supports": [],
     "values": [
       "-moz-button",
       "-moz-desktop",
       "-moz-dialog",
       "-moz-document",
       "-moz-field",
@@ -5727,18 +5723,18 @@ exports.CSS_PROPERTIES = {
       "style",
       "unset",
       "weight"
     ]
   },
   "font-variant": {
     "isInherited": true,
     "subproperties": [
+      "font-variant-caps",
       "font-variant-alternates",
-      "font-variant-caps",
       "font-variant-east-asian",
       "font-variant-ligatures",
       "font-variant-numeric",
       "font-variant-position"
     ],
     "supports": [],
     "values": [
       "all-petite-caps",
@@ -5948,22 +5944,22 @@ exports.CSS_PROPERTIES = {
       "initial",
       "normal",
       "unset"
     ]
   },
   "grid": {
     "isInherited": false,
     "subproperties": [
-      "grid-template-areas",
       "grid-template-rows",
       "grid-template-columns",
-      "grid-auto-flow",
+      "grid-template-areas",
       "grid-auto-rows",
-      "grid-auto-columns"
+      "grid-auto-columns",
+      "grid-auto-flow"
     ],
     "supports": [],
     "values": [
       "auto",
       "column",
       "dense",
       "fit-content",
       "inherit",
@@ -5976,18 +5972,18 @@ exports.CSS_PROPERTIES = {
       "row",
       "unset"
     ]
   },
   "grid-area": {
     "isInherited": false,
     "subproperties": [
       "grid-row-start",
+      "grid-row-end",
       "grid-column-start",
-      "grid-row-end",
       "grid-column-end"
     ],
     "supports": [],
     "values": [
       "inherit",
       "initial",
       "unset"
     ]
@@ -6153,19 +6149,19 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "grid-template": {
     "isInherited": false,
     "subproperties": [
-      "grid-template-areas",
       "grid-template-rows",
-      "grid-template-columns"
+      "grid-template-columns",
+      "grid-template-areas"
     ],
     "supports": [],
     "values": [
       "auto",
       "fit-content",
       "inherit",
       "initial",
       "max-content",
@@ -6480,19 +6476,19 @@ exports.CSS_PROPERTIES = {
       "initial",
       "normal",
       "unset"
     ]
   },
   "list-style": {
     "isInherited": true,
     "subproperties": [
-      "list-style-type",
+      "list-style-position",
       "list-style-image",
-      "list-style-position"
+      "list-style-type"
     ],
     "supports": [],
     "values": [
       "arabic-indic",
       "armenian",
       "bengali",
       "cambodian",
       "circle",
@@ -6772,18 +6768,18 @@ exports.CSS_PROPERTIES = {
       "initial",
       "unset"
     ]
   },
   "marker": {
     "isInherited": true,
     "subproperties": [
       "marker-start",
-      "marker-mid",
-      "marker-end"
+      "marker-end",
+      "marker-mid"
     ],
     "supports": [],
     "values": [
       "inherit",
       "initial",
       "none",
       "unset",
       "url"
@@ -6829,25 +6825,25 @@ exports.CSS_PROPERTIES = {
       "none",
       "unset",
       "url"
     ]
   },
   "mask": {
     "isInherited": false,
     "subproperties": [
-      "mask-image",
+      "mask-mode",
       "mask-repeat",
+      "mask-clip",
+      "mask-origin",
+      "mask-composite",
       "mask-position-x",
       "mask-position-y",
-      "mask-clip",
-      "mask-origin",
       "mask-size",
-      "mask-composite",
-      "mask-mode"
+      "mask-image"
     ],
     "supports": [
       4
     ],
     "values": [
       "-moz-element",
       "-moz-image-rect",
       "-moz-linear-gradient",
@@ -7364,19 +7360,19 @@ exports.CSS_PROPERTIES = {
       "inherit",
       "initial",
       "unset"
     ]
   },
   "outline": {
     "isInherited": false,
     "subproperties": [
-      "outline-width",
+      "outline-color",
       "outline-style",
-      "outline-color"
+      "outline-width"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "auto",
       "currentColor",
@@ -8439,19 +8435,19 @@ exports.CSS_PROPERTIES = {
       "initial",
       "none",
       "unset"
     ]
   },
   "text-decoration": {
     "isInherited": false,
     "subproperties": [
-      "text-decoration-color",
       "text-decoration-line",
-      "text-decoration-style"
+      "text-decoration-style",
+      "text-decoration-color"
     ],
     "supports": [
       2
     ],
     "values": [
       "COLOR",
       "-moz-none",
       "blink",
--- a/layout/style/GenerateCSSPropsGenerated.py
+++ b/layout/style/GenerateCSSPropsGenerated.py
@@ -53,14 +53,34 @@ def generate(output, dataFile):
     ps = [(p, position) for position, p in enumerate(ps)]
     ps.sort(key=lambda (p, position): p.index)
     output.write("const int32_t nsCSSProps::"
                  "kIDLNameSortPositionTable[eCSSProperty_COUNT] = {\n")
     for (p, position) in ps:
         output.write("  {},\n".format(position))
     output.write("};\n\n")
 
+    # Generate shorthand subprop tables
+    names = []
+    for p in properties:
+        if p.type() != "shorthand":
+            continue
+        name = "g{}SubpropTable".format(p.method)
+        names.append(name)
+        output.write("static const nsCSSPropertyID {}[] = {{\n".format(name))
+        for subprop in p.subprops:
+            output.write("  eCSSProperty_{},\n".format(subprop))
+        output.write("  eCSSProperty_UNKNOWN\n")
+        output.write("};\n\n")
+    output.write("const nsCSSPropertyID* const\n")
+    output.write("nsCSSProps::kSubpropertyTable["
+                 "eCSSProperty_COUNT - eCSSProperty_COUNT_no_shorthands"
+                 "] = {\n")
+    for name in names:
+        output.write("  {},\n".format(name))
+    output.write("};\n\n")
+
     # Generate assertions
     msg = ("GenerateCSSPropsGenerated.py did not list properties "
            "in nsCSSPropertyID order")
     for p in properties:
         output.write('static_assert(eCSSProperty_{} == {}, "{}");\n'
                      .format(p.id, p.index, msg))
--- a/layout/style/ServoCSSPropList.mako.py
+++ b/layout/style/ServoCSSPropList.mako.py
@@ -14,17 +14,17 @@ class Longhand(object):
         _assign_slots(self, args)
 
     @staticmethod
     def type():
         return "longhand"
 
 
 class Shorthand(object):
-    __slots__ = ["name", "method", "id", "flags", "pref"]
+    __slots__ = ["name", "method", "id", "flags", "pref", "subprops"]
 
     def __init__(self, *args):
         _assign_slots(self, args)
 
     @staticmethod
     def type():
         return "shorthand"
 
@@ -86,23 +86,27 @@ def flags(prop):
     if "CAN_ANIMATE_ON_COMPOSITOR" in prop.flags:
         result.append("CanAnimateOnCompositor")
     return ", ".join('"CSSPropFlags::{}"'.format(flag) for flag in result)
 
 def pref(prop):
     if prop.gecko_pref:
         return '"' + prop.gecko_pref + '"'
     return '""'
+
+def sub_properties(prop):
+    return ", ".join('"{}"'.format(p.ident) for p in prop.sub_properties)
 %>
 
 data = [
     % for prop in sorted(data.longhands, key=order_key):
     Longhand("${prop.name}", "${method(prop)}", "${prop.ident}", [${flags(prop)}], ${pref(prop)}),
     % endfor
 
     % for prop in sorted(data.shorthands, key=order_key):
-    Shorthand("${prop.name}", "${prop.camel_case}", "${prop.ident}", [${flags(prop)}], ${pref(prop)}),
+    Shorthand("${prop.name}", "${prop.camel_case}", "${prop.ident}", [${flags(prop)}], ${pref(prop)},
+              [${sub_properties(prop)}]),
     % endfor
 
     % for prop in sorted(data.all_aliases(), key=lambda x: x.name):
     Alias("${prop.name}", "${prop.camel_case}", "${prop.ident}", "${prop.original.ident}", [], ${pref(prop)}),
     % endfor
 ]
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -1732,462 +1732,16 @@ nsCSSProps::ValueToKeyword(int32_t aValu
 const CSSPropFlags nsCSSProps::kFlagsTable[eCSSProperty_COUNT] = {
 #define CSS_PROP_LONGHAND(name_, id_, method_, flags_, ...) flags_,
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, ...) flags_,
 #include "mozilla/ServoCSSPropList.h"
 #undef CSS_PROP_SHORTHAND
 #undef CSS_PROP_LONGHAND
 };
 
-static const nsCSSPropertyID gAllSubpropTable[] = {
-#define CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
-#define CSS_PROP_LONGHAND(name_, id_, ...) eCSSProperty_##id_,
-#include "mozilla/ServoCSSPropList.h"
-#undef CSS_PROP_LONGHAND
-#undef CSS_PROP_LIST_ONLY_COMPONENTS_OF_ALL_SHORTHAND
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gAnimationSubpropTable[] = {
-  eCSSProperty_animation_duration,
-  eCSSProperty_animation_timing_function,
-  eCSSProperty_animation_delay,
-  eCSSProperty_animation_direction,
-  eCSSProperty_animation_fill_mode,
-  eCSSProperty_animation_iteration_count,
-  eCSSProperty_animation_play_state,
-  // List animation-name last so we serialize it last, in case it has
-  // a value that conflicts with one of the other properties.  (See
-  // how Declaration::GetValue serializes 'animation'.
-  eCSSProperty_animation_name,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderRadiusSubpropTable[] = {
-  // Code relies on these being in topleft-topright-bottomright-bottomleft
-  // order.
-  eCSSProperty_border_top_left_radius,
-  eCSSProperty_border_top_right_radius,
-  eCSSProperty_border_bottom_right_radius,
-  eCSSProperty_border_bottom_left_radius,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gOutlineRadiusSubpropTable[] = {
-  // Code relies on these being in topleft-topright-bottomright-bottomleft
-  // order.
-  eCSSProperty__moz_outline_radius_topleft,
-  eCSSProperty__moz_outline_radius_topright,
-  eCSSProperty__moz_outline_radius_bottomright,
-  eCSSProperty__moz_outline_radius_bottomleft,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBackgroundSubpropTable[] = {
-  eCSSProperty_background_color,
-  eCSSProperty_background_image,
-  eCSSProperty_background_repeat,
-  eCSSProperty_background_attachment,
-  eCSSProperty_background_clip,
-  eCSSProperty_background_origin,
-  eCSSProperty_background_position_x,
-  eCSSProperty_background_position_y,
-  eCSSProperty_background_size,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBackgroundPositionSubpropTable[] = {
-  eCSSProperty_background_position_x,
-  eCSSProperty_background_position_y,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderSubpropTable[] = {
-  eCSSProperty_border_top_width,
-  eCSSProperty_border_right_width,
-  eCSSProperty_border_bottom_width,
-  eCSSProperty_border_left_width,
-  eCSSProperty_border_top_style,
-  eCSSProperty_border_right_style,
-  eCSSProperty_border_bottom_style,
-  eCSSProperty_border_left_style,
-  eCSSProperty_border_top_color,
-  eCSSProperty_border_right_color,
-  eCSSProperty_border_bottom_color,
-  eCSSProperty_border_left_color,
-  eCSSProperty_border_image_source,
-  eCSSProperty_border_image_slice,
-  eCSSProperty_border_image_width,
-  eCSSProperty_border_image_outset,
-  eCSSProperty_border_image_repeat,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderBlockEndSubpropTable[] = {
-  // Declaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_block_end_width,
-  eCSSProperty_border_block_end_style,
-  eCSSProperty_border_block_end_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderBlockStartSubpropTable[] = {
-  // Declaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_block_start_width,
-  eCSSProperty_border_block_start_style,
-  eCSSProperty_border_block_start_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderBottomSubpropTable[] = {
-  // Declaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_bottom_width,
-  eCSSProperty_border_bottom_style,
-  eCSSProperty_border_bottom_color,
-  eCSSProperty_UNKNOWN
-};
-
-static_assert(eSideTop == 0 && eSideRight == 1 &&
-              eSideBottom == 2 && eSideLeft == 3,
-              "box side constants not top/right/bottom/left == 0/1/2/3");
-static const nsCSSPropertyID gBorderColorSubpropTable[] = {
-  // Code relies on these being in top-right-bottom-left order.
-  // Code relies on these matching the enum Side constants.
-  eCSSProperty_border_top_color,
-  eCSSProperty_border_right_color,
-  eCSSProperty_border_bottom_color,
-  eCSSProperty_border_left_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderInlineEndSubpropTable[] = {
-  // Declaration.cpp output the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_inline_end_width,
-  eCSSProperty_border_inline_end_style,
-  eCSSProperty_border_inline_end_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderLeftSubpropTable[] = {
-  // Declaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_left_width,
-  eCSSProperty_border_left_style,
-  eCSSProperty_border_left_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderRightSubpropTable[] = {
-  // Declaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_right_width,
-  eCSSProperty_border_right_style,
-  eCSSProperty_border_right_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderInlineStartSubpropTable[] = {
-  // Declaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_inline_start_width,
-  eCSSProperty_border_inline_start_style,
-  eCSSProperty_border_inline_start_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderStyleSubpropTable[] = {
-  // Code relies on these being in top-right-bottom-left order.
-  eCSSProperty_border_top_style,
-  eCSSProperty_border_right_style,
-  eCSSProperty_border_bottom_style,
-  eCSSProperty_border_left_style,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderTopSubpropTable[] = {
-  // Declaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_border_top_width,
-  eCSSProperty_border_top_style,
-  eCSSProperty_border_top_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderWidthSubpropTable[] = {
-  // Code relies on these being in top-right-bottom-left order.
-  eCSSProperty_border_top_width,
-  eCSSProperty_border_right_width,
-  eCSSProperty_border_bottom_width,
-  eCSSProperty_border_left_width,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gFontSubpropTable[] = {
-  eCSSProperty_font_family,
-  eCSSProperty_font_style,
-  eCSSProperty_font_weight,
-  eCSSProperty_font_size,
-  eCSSProperty_line_height,
-  eCSSProperty_font_size_adjust,
-  eCSSProperty_font_stretch,
-  eCSSProperty_font_feature_settings,
-  eCSSProperty_font_language_override,
-  eCSSProperty_font_kerning,
-  eCSSProperty_font_optical_sizing,
-  eCSSProperty_font_variation_settings,
-  eCSSProperty_font_variant_alternates,
-  eCSSProperty_font_variant_caps,
-  eCSSProperty_font_variant_east_asian,
-  eCSSProperty_font_variant_ligatures,
-  eCSSProperty_font_variant_numeric,
-  eCSSProperty_font_variant_position,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gFontVariantSubpropTable[] = {
-  eCSSProperty_font_variant_alternates,
-  eCSSProperty_font_variant_caps,
-  eCSSProperty_font_variant_east_asian,
-  eCSSProperty_font_variant_ligatures,
-  eCSSProperty_font_variant_numeric,
-  eCSSProperty_font_variant_position,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gListStyleSubpropTable[] = {
-  eCSSProperty_list_style_type,
-  eCSSProperty_list_style_image,
-  eCSSProperty_list_style_position,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gMarginSubpropTable[] = {
-  // Code relies on these being in top-right-bottom-left order.
-  eCSSProperty_margin_top,
-  eCSSProperty_margin_right,
-  eCSSProperty_margin_bottom,
-  eCSSProperty_margin_left,
-  eCSSProperty_UNKNOWN
-};
-
-
-static const nsCSSPropertyID gOutlineSubpropTable[] = {
-  // nsCSSDeclaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_outline_width,
-  eCSSProperty_outline_style,
-  eCSSProperty_outline_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gColumnsSubpropTable[] = {
-  eCSSProperty_column_count,
-  eCSSProperty_column_width,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gColumnRuleSubpropTable[] = {
-  // nsCSSDeclaration.cpp outputs the subproperties in this order.
-  // It also depends on the color being third.
-  eCSSProperty_column_rule_width,
-  eCSSProperty_column_rule_style,
-  eCSSProperty_column_rule_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gFlexSubpropTable[] = {
-  eCSSProperty_flex_grow,
-  eCSSProperty_flex_shrink,
-  eCSSProperty_flex_basis,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gFlexFlowSubpropTable[] = {
-  eCSSProperty_flex_direction,
-  eCSSProperty_flex_wrap,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gGridTemplateSubpropTable[] = {
-  eCSSProperty_grid_template_areas,
-  eCSSProperty_grid_template_rows,
-  eCSSProperty_grid_template_columns,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gGridSubpropTable[] = {
-  eCSSProperty_grid_template_areas,
-  eCSSProperty_grid_template_rows,
-  eCSSProperty_grid_template_columns,
-  eCSSProperty_grid_auto_flow,
-  eCSSProperty_grid_auto_rows,
-  eCSSProperty_grid_auto_columns,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gGridColumnSubpropTable[] = {
-  eCSSProperty_grid_column_start,
-  eCSSProperty_grid_column_end,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gGridRowSubpropTable[] = {
-  eCSSProperty_grid_row_start,
-  eCSSProperty_grid_row_end,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gGridAreaSubpropTable[] = {
-  eCSSProperty_grid_row_start,
-  eCSSProperty_grid_column_start,
-  eCSSProperty_grid_row_end,
-  eCSSProperty_grid_column_end,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gGapSubpropTable[] = {
-  eCSSProperty_row_gap,
-  eCSSProperty_column_gap,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gOverflowSubpropTable[] = {
-  eCSSProperty_overflow_x,
-  eCSSProperty_overflow_y,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gOverflowClipBoxSubpropTable[] = {
-  eCSSProperty_overflow_clip_box_block,
-  eCSSProperty_overflow_clip_box_inline,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gPaddingSubpropTable[] = {
-  // Code relies on these being in top-right-bottom-left order.
-  eCSSProperty_padding_top,
-  eCSSProperty_padding_right,
-  eCSSProperty_padding_bottom,
-  eCSSProperty_padding_left,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gTextDecorationSubpropTable[] = {
-  eCSSProperty_text_decoration_color,
-  eCSSProperty_text_decoration_line,
-  eCSSProperty_text_decoration_style,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gTextEmphasisSubpropTable[] = {
-  eCSSProperty_text_emphasis_style,
-  eCSSProperty_text_emphasis_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gWebkitTextStrokeSubpropTable[] = {
-  eCSSProperty__webkit_text_stroke_width,
-  eCSSProperty__webkit_text_stroke_color,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gTransitionSubpropTable[] = {
-  eCSSProperty_transition_property,
-  eCSSProperty_transition_duration,
-  eCSSProperty_transition_timing_function,
-  eCSSProperty_transition_delay,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gBorderImageSubpropTable[] = {
-  eCSSProperty_border_image_source,
-  eCSSProperty_border_image_slice,
-  eCSSProperty_border_image_width,
-  eCSSProperty_border_image_outset,
-  eCSSProperty_border_image_repeat,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gMarkerSubpropTable[] = {
-  eCSSProperty_marker_start,
-  eCSSProperty_marker_mid,
-  eCSSProperty_marker_end,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gPlaceContentSubpropTable[] = {
-  eCSSProperty_align_content,
-  eCSSProperty_justify_content,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gPlaceItemsSubpropTable[] = {
-  eCSSProperty_align_items,
-  eCSSProperty_justify_items,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gPlaceSelfSubpropTable[] = {
-  eCSSProperty_align_self,
-  eCSSProperty_justify_self,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gOverscrollBehaviorSubpropTable[] = {
-  eCSSProperty_overscroll_behavior_x,
-  eCSSProperty_overscroll_behavior_y,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gScrollSnapTypeSubpropTable[] = {
-  eCSSProperty_scroll_snap_type_x,
-  eCSSProperty_scroll_snap_type_y,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gMaskSubpropTable[] = {
-  eCSSProperty_mask_image,
-  eCSSProperty_mask_repeat,
-  eCSSProperty_mask_position_x,
-  eCSSProperty_mask_position_y,
-  eCSSProperty_mask_clip,
-  eCSSProperty_mask_origin,
-  eCSSProperty_mask_size,
-  eCSSProperty_mask_composite,
-  eCSSProperty_mask_mode,
-  eCSSProperty_UNKNOWN
-};
-
-static const nsCSSPropertyID gMaskPositionSubpropTable[] = {
-  eCSSProperty_mask_position_x,
-  eCSSProperty_mask_position_y,
-  eCSSProperty_UNKNOWN
-};
-
-// FIXME: mask-border tables should be added when we implement
-// mask-border properties.
-
-const nsCSSPropertyID *const
-nsCSSProps::kSubpropertyTable[eCSSProperty_COUNT - eCSSProperty_COUNT_no_shorthands] = {
-#define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) privatename_
-// Need an extra level of macro nesting to force expansion of method_
-// params before they get pasted.
-#define NSCSSPROPS_INNER_MACRO(method_) g##method_##SubpropTable,
-#define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) \
-  NSCSSPROPS_INNER_MACRO(method_)
-#include "mozilla/ServoCSSPropList.h"
-#undef CSS_PROP_SHORTHAND
-#undef NSCSSPROPS_INNER_MACRO
-#undef CSS_PROP_PUBLIC_OR_PRIVATE
-};
-
 /* static */ bool
 nsCSSProps::gPropertyEnabled[eCSSProperty_COUNT_with_aliases] = {
   // If the property has any "ENABLED_IN" flag set, it is disabled by
   // default. Note that, if a property has pref, whatever its default
   // value is, it will later be changed in nsCSSProps::AddRefTable().
   // If the property has "ENABLED_IN" flags but doesn't have a pref,
   // it is an internal property which is disabled elsewhere.
   #define IS_ENABLED_BY_DEFAULT(flags_) \