mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Support declaring keyword property Gecko coverage as inexhaustive.
This allows us to control whether the catchall case in the match expression that maps Gecko const to Servo enum will be generated. MozReview-Commit-ID: L65IjTONdfl
This commit is contained in:
parent
75418b7005
commit
0ff7b5f2de
9 changed files with 21 additions and 4 deletions
|
@ -28,7 +28,9 @@ def to_camel_case(ident):
|
|||
class Keyword(object):
|
||||
def __init__(self, name, values, gecko_constant_prefix=None,
|
||||
gecko_enum_prefix=None, custom_consts=None,
|
||||
extra_gecko_values=None, extra_servo_values=None):
|
||||
extra_gecko_values=None, extra_servo_values=None,
|
||||
gecko_strip_moz_prefix=True,
|
||||
gecko_inexhaustive=None):
|
||||
self.name = name
|
||||
self.values = values.split()
|
||||
if gecko_constant_prefix and gecko_enum_prefix:
|
||||
|
@ -39,6 +41,8 @@ class Keyword(object):
|
|||
self.extra_gecko_values = (extra_gecko_values or "").split()
|
||||
self.extra_servo_values = (extra_servo_values or "").split()
|
||||
self.consts_map = {} if custom_consts is None else custom_consts
|
||||
self.gecko_strip_moz_prefix = gecko_strip_moz_prefix
|
||||
self.gecko_inexhaustive = gecko_inexhaustive or (gecko_enum_prefix is None)
|
||||
|
||||
def gecko_values(self):
|
||||
return self.values + self.extra_gecko_values
|
||||
|
@ -55,7 +59,7 @@ class Keyword(object):
|
|||
raise Exception("Bad product: " + product)
|
||||
|
||||
def gecko_constant(self, value):
|
||||
moz_stripped = value.replace("-moz-", '')
|
||||
moz_stripped = value.replace("-moz-", '') if self.gecko_strip_moz_prefix else value
|
||||
parts = moz_stripped.split('-')
|
||||
if self.gecko_enum_prefix:
|
||||
parts = [p.title() for p in parts]
|
||||
|
|
|
@ -255,7 +255,9 @@ def set_gecko_property(ffi_name, expr):
|
|||
% for value in keyword.values_for('gecko'):
|
||||
structs::${keyword.gecko_constant(value)} => Keyword::${to_rust_ident(value)},
|
||||
% endfor
|
||||
% if keyword.gecko_inexhaustive:
|
||||
x => panic!("Found unexpected value in style struct for ${ident} property: {:?}", x),
|
||||
% endif
|
||||
}
|
||||
}
|
||||
</%def>
|
||||
|
@ -1027,7 +1029,8 @@ fn static_assert() {
|
|||
"table-header-group table-footer-group table-row table-column-group " +
|
||||
"table-column table-cell table-caption list-item flex none " +
|
||||
"-moz-box -moz-inline-box",
|
||||
gecko_enum_prefix="StyleDisplay") %>
|
||||
gecko_enum_prefix="StyleDisplay",
|
||||
gecko_inexhaustive=True) %>
|
||||
${impl_keyword('display', 'mDisplay', display_keyword, True)}
|
||||
|
||||
// overflow-y is implemented as a newtype of overflow-x, so we need special handling.
|
||||
|
|
|
@ -329,7 +329,7 @@
|
|||
keyword_kwargs = {a: kwargs.pop(a, None) for a in [
|
||||
'gecko_constant_prefix', 'gecko_enum_prefix',
|
||||
'extra_gecko_values', 'extra_servo_values',
|
||||
'custom_consts',
|
||||
'custom_consts', 'gecko_inexhaustive',
|
||||
]}
|
||||
%>
|
||||
|
||||
|
|
|
@ -58,11 +58,13 @@
|
|||
|
||||
${helpers.single_keyword("box-decoration-break", "slice clone",
|
||||
gecko_enum_prefix="StyleBoxDecorationBreak",
|
||||
gecko_inexhaustive=True,
|
||||
products="gecko", animatable=False)}
|
||||
|
||||
${helpers.single_keyword("-moz-float-edge", "content-box margin-box",
|
||||
gecko_ffi_name="mFloatEdge",
|
||||
gecko_enum_prefix="StyleFloatEdge",
|
||||
gecko_inexhaustive=True,
|
||||
products="gecko",
|
||||
animatable=False)}
|
||||
|
||||
|
|
|
@ -92,6 +92,7 @@ ${helpers.single_keyword("position", "static absolute relative fixed",
|
|||
animatable="False"
|
||||
need_clone="True"
|
||||
gecko_enum_prefix="StyleFloat"
|
||||
gecko_inexhaustive="True"
|
||||
gecko_ffi_name="mFloat">
|
||||
use values::NoViewportPercentage;
|
||||
impl NoViewportPercentage for SpecifiedValue {}
|
||||
|
|
|
@ -35,6 +35,7 @@ ${helpers.predefined_type("fill-opacity", "Opacity", "1.0",
|
|||
|
||||
${helpers.single_keyword("fill-rule", "nonzero evenodd",
|
||||
gecko_enum_prefix="StyleFillRule",
|
||||
gecko_inexhaustive=True,
|
||||
products="gecko", animatable=False)}
|
||||
|
||||
${helpers.single_keyword("shape-rendering",
|
||||
|
@ -60,4 +61,5 @@ ${helpers.predefined_type("stroke-opacity", "Opacity", "1.0",
|
|||
${helpers.single_keyword("clip-rule", "nonzero evenodd",
|
||||
products="gecko",
|
||||
gecko_enum_prefix="StyleFillRule",
|
||||
gecko_inexhaustive=True,
|
||||
animatable=False)}
|
||||
|
|
|
@ -151,15 +151,18 @@ ${helpers.single_keyword("pointer-events", "auto none", animatable=False)}
|
|||
${helpers.single_keyword("-moz-user-input", "none enabled disabled",
|
||||
products="gecko", gecko_ffi_name="mUserInput",
|
||||
gecko_enum_prefix="StyleUserInput",
|
||||
gecko_inexhaustive=True,
|
||||
animatable=False)}
|
||||
|
||||
${helpers.single_keyword("-moz-user-modify", "read-only read-write write-only",
|
||||
products="gecko", gecko_ffi_name="mUserModify",
|
||||
gecko_enum_prefix="StyleUserModify",
|
||||
gecko_inexhaustive=True,
|
||||
animatable=False)}
|
||||
|
||||
${helpers.single_keyword("-moz-user-focus",
|
||||
"ignore normal select-after select-before select-menu select-same select-all none",
|
||||
products="gecko", gecko_ffi_name="mUserFocus",
|
||||
gecko_enum_prefix="StyleUserFocus",
|
||||
gecko_inexhaustive=True,
|
||||
animatable=False)}
|
||||
|
|
|
@ -16,4 +16,5 @@ ${helpers.single_keyword("ime-mode", "normal auto active disabled inactive",
|
|||
${helpers.single_keyword("-moz-user-select", "auto text none all", products="gecko",
|
||||
gecko_ffi_name="mUserSelect",
|
||||
gecko_enum_prefix="StyleUserSelect",
|
||||
gecko_inexhaustive=True,
|
||||
animatable=False)}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
${helpers.single_keyword("-moz-box-align", "stretch start center baseline end",
|
||||
products="gecko", gecko_ffi_name="mBoxAlign",
|
||||
gecko_enum_prefix="StyleBoxAlign",
|
||||
gecko_inexhaustive=True,
|
||||
animatable=False)}
|
||||
|
||||
${helpers.predefined_type("-moz-box-flex", "Number", "0.0", "parse_non_negative",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue