Bug 886691 - switch from references to pointers for values within GetValue. r=dbaron

This commit is contained in:
John Daggett 2013-07-25 15:02:15 +09:00
Родитель e2baf5a4ad
Коммит 9903bd2223
1 изменённых файлов: 132 добавлений и 129 удалений

Просмотреть файл

@ -527,72 +527,75 @@ Declaration::GetValue(nsCSSProperty aProperty, nsAString& aValue) const
break;
}
case eCSSProperty_font: {
// systemFont might not be present; the others are guaranteed to be
// based on the shorthand check at the beginning of the function
// systemFont might not be present; other values are guaranteed to be
// available based on the shorthand check at the beginning of the
// function, as long as the prop is enabled
const nsCSSValue *systemFont =
data->ValueFor(eCSSProperty__x_system_font);
const nsCSSValue &style =
*data->ValueFor(eCSSProperty_font_style);
const nsCSSValue &variant =
*data->ValueFor(eCSSProperty_font_variant);
const nsCSSValue &weight =
*data->ValueFor(eCSSProperty_font_weight);
const nsCSSValue &size =
*data->ValueFor(eCSSProperty_font_size);
const nsCSSValue &lh =
*data->ValueFor(eCSSProperty_line_height);
const nsCSSValue &family =
*data->ValueFor(eCSSProperty_font_family);
const nsCSSValue &stretch =
*data->ValueFor(eCSSProperty_font_stretch);
const nsCSSValue &sizeAdjust =
*data->ValueFor(eCSSProperty_font_size_adjust);
const nsCSSValue &featureSettings =
*data->ValueFor(eCSSProperty_font_feature_settings);
const nsCSSValue &languageOverride =
*data->ValueFor(eCSSProperty_font_language_override);
const nsCSSValue &fontKerning =
*data->ValueFor(eCSSProperty_font_kerning);
const nsCSSValue &fontSynthesis =
*data->ValueFor(eCSSProperty_font_synthesis);
const nsCSSValue &fontVariantAlternates =
*data->ValueFor(eCSSProperty_font_variant_alternates);
const nsCSSValue &fontVariantCaps =
*data->ValueFor(eCSSProperty_font_variant_caps);
const nsCSSValue &fontVariantEastAsian =
*data->ValueFor(eCSSProperty_font_variant_east_asian);
const nsCSSValue &fontVariantLigatures =
*data->ValueFor(eCSSProperty_font_variant_ligatures);
const nsCSSValue &fontVariantNumeric =
*data->ValueFor(eCSSProperty_font_variant_numeric);
const nsCSSValue &fontVariantPosition =
*data->ValueFor(eCSSProperty_font_variant_position);
const nsCSSValue *style =
data->ValueFor(eCSSProperty_font_style);
const nsCSSValue *variant =
data->ValueFor(eCSSProperty_font_variant);
const nsCSSValue *weight =
data->ValueFor(eCSSProperty_font_weight);
const nsCSSValue *size =
data->ValueFor(eCSSProperty_font_size);
const nsCSSValue *lh =
data->ValueFor(eCSSProperty_line_height);
const nsCSSValue *family =
data->ValueFor(eCSSProperty_font_family);
const nsCSSValue *stretch =
data->ValueFor(eCSSProperty_font_stretch);
const nsCSSValue *sizeAdjust =
data->ValueFor(eCSSProperty_font_size_adjust);
const nsCSSValue *featureSettings =
data->ValueFor(eCSSProperty_font_feature_settings);
const nsCSSValue *languageOverride =
data->ValueFor(eCSSProperty_font_language_override);
const nsCSSValue *fontKerning =
data->ValueFor(eCSSProperty_font_kerning);
const nsCSSValue *fontSynthesis =
data->ValueFor(eCSSProperty_font_synthesis);
const nsCSSValue *fontVariantAlternates =
data->ValueFor(eCSSProperty_font_variant_alternates);
const nsCSSValue *fontVariantCaps =
data->ValueFor(eCSSProperty_font_variant_caps);
const nsCSSValue *fontVariantEastAsian =
data->ValueFor(eCSSProperty_font_variant_east_asian);
const nsCSSValue *fontVariantLigatures =
data->ValueFor(eCSSProperty_font_variant_ligatures);
const nsCSSValue *fontVariantNumeric =
data->ValueFor(eCSSProperty_font_variant_numeric);
const nsCSSValue *fontVariantPosition =
data->ValueFor(eCSSProperty_font_variant_position);
// if font features are not enabled, pointers for fontVariant
// values above may be null since the shorthand check ignores them
bool fontFeaturesEnabled =
mozilla::Preferences::GetBool("layout.css.font-features.enabled");
if (systemFont &&
systemFont->GetUnit() != eCSSUnit_None &&
systemFont->GetUnit() != eCSSUnit_Null) {
if (style.GetUnit() != eCSSUnit_System_Font ||
variant.GetUnit() != eCSSUnit_System_Font ||
weight.GetUnit() != eCSSUnit_System_Font ||
size.GetUnit() != eCSSUnit_System_Font ||
lh.GetUnit() != eCSSUnit_System_Font ||
family.GetUnit() != eCSSUnit_System_Font ||
stretch.GetUnit() != eCSSUnit_System_Font ||
sizeAdjust.GetUnit() != eCSSUnit_System_Font ||
featureSettings.GetUnit() != eCSSUnit_System_Font ||
languageOverride.GetUnit() != eCSSUnit_System_Font ||
if (style->GetUnit() != eCSSUnit_System_Font ||
variant->GetUnit() != eCSSUnit_System_Font ||
weight->GetUnit() != eCSSUnit_System_Font ||
size->GetUnit() != eCSSUnit_System_Font ||
lh->GetUnit() != eCSSUnit_System_Font ||
family->GetUnit() != eCSSUnit_System_Font ||
stretch->GetUnit() != eCSSUnit_System_Font ||
sizeAdjust->GetUnit() != eCSSUnit_System_Font ||
featureSettings->GetUnit() != eCSSUnit_System_Font ||
languageOverride->GetUnit() != eCSSUnit_System_Font ||
(fontFeaturesEnabled &&
(fontKerning.GetUnit() != eCSSUnit_System_Font ||
fontSynthesis.GetUnit() != eCSSUnit_System_Font ||
fontVariantAlternates.GetUnit() != eCSSUnit_System_Font ||
fontVariantCaps.GetUnit() != eCSSUnit_System_Font ||
fontVariantEastAsian.GetUnit() != eCSSUnit_System_Font ||
fontVariantLigatures.GetUnit() != eCSSUnit_System_Font ||
fontVariantNumeric.GetUnit() != eCSSUnit_System_Font ||
fontVariantPosition.GetUnit() != eCSSUnit_System_Font))) {
(fontKerning->GetUnit() != eCSSUnit_System_Font ||
fontSynthesis->GetUnit() != eCSSUnit_System_Font ||
fontVariantAlternates->GetUnit() != eCSSUnit_System_Font ||
fontVariantCaps->GetUnit() != eCSSUnit_System_Font ||
fontVariantEastAsian->GetUnit() != eCSSUnit_System_Font ||
fontVariantLigatures->GetUnit() != eCSSUnit_System_Font ||
fontVariantNumeric->GetUnit() != eCSSUnit_System_Font ||
fontVariantPosition->GetUnit() != eCSSUnit_System_Font))) {
// This can't be represented as a shorthand.
return;
}
@ -600,47 +603,47 @@ Declaration::GetValue(nsCSSProperty aProperty, nsAString& aValue) const
} else {
// properties reset by this shorthand property to their
// initial values but not represented in its syntax
if (stretch.GetUnit() != eCSSUnit_Enumerated ||
stretch.GetIntValue() != NS_STYLE_FONT_STRETCH_NORMAL ||
sizeAdjust.GetUnit() != eCSSUnit_None ||
featureSettings.GetUnit() != eCSSUnit_Normal ||
languageOverride.GetUnit() != eCSSUnit_Normal ||
if (stretch->GetUnit() != eCSSUnit_Enumerated ||
stretch->GetIntValue() != NS_STYLE_FONT_STRETCH_NORMAL ||
sizeAdjust->GetUnit() != eCSSUnit_None ||
featureSettings->GetUnit() != eCSSUnit_Normal ||
languageOverride->GetUnit() != eCSSUnit_Normal ||
(fontFeaturesEnabled &&
(fontKerning.GetIntValue() != NS_FONT_KERNING_AUTO ||
fontSynthesis.GetUnit() != eCSSUnit_Enumerated ||
fontSynthesis.GetIntValue() !=
(fontKerning->GetIntValue() != NS_FONT_KERNING_AUTO ||
fontSynthesis->GetUnit() != eCSSUnit_Enumerated ||
fontSynthesis->GetIntValue() !=
(NS_FONT_SYNTHESIS_WEIGHT | NS_FONT_SYNTHESIS_STYLE) ||
fontVariantAlternates.GetUnit() != eCSSUnit_Normal ||
fontVariantCaps.GetUnit() != eCSSUnit_Normal ||
fontVariantEastAsian.GetUnit() != eCSSUnit_Normal ||
fontVariantLigatures.GetUnit() != eCSSUnit_Normal ||
fontVariantNumeric.GetUnit() != eCSSUnit_Normal ||
fontVariantPosition.GetUnit() != eCSSUnit_Normal))) {
fontVariantAlternates->GetUnit() != eCSSUnit_Normal ||
fontVariantCaps->GetUnit() != eCSSUnit_Normal ||
fontVariantEastAsian->GetUnit() != eCSSUnit_Normal ||
fontVariantLigatures->GetUnit() != eCSSUnit_Normal ||
fontVariantNumeric->GetUnit() != eCSSUnit_Normal ||
fontVariantPosition->GetUnit() != eCSSUnit_Normal))) {
return;
}
if (style.GetUnit() != eCSSUnit_Enumerated ||
style.GetIntValue() != NS_FONT_STYLE_NORMAL) {
style.AppendToString(eCSSProperty_font_style, aValue);
if (style->GetUnit() != eCSSUnit_Enumerated ||
style->GetIntValue() != NS_FONT_STYLE_NORMAL) {
style->AppendToString(eCSSProperty_font_style, aValue);
aValue.Append(PRUnichar(' '));
}
if (variant.GetUnit() != eCSSUnit_Enumerated ||
variant.GetIntValue() != NS_FONT_VARIANT_NORMAL) {
variant.AppendToString(eCSSProperty_font_variant, aValue);
if (variant->GetUnit() != eCSSUnit_Enumerated ||
variant->GetIntValue() != NS_FONT_VARIANT_NORMAL) {
variant->AppendToString(eCSSProperty_font_variant, aValue);
aValue.Append(PRUnichar(' '));
}
if (weight.GetUnit() != eCSSUnit_Enumerated ||
weight.GetIntValue() != NS_FONT_WEIGHT_NORMAL) {
weight.AppendToString(eCSSProperty_font_weight, aValue);
if (weight->GetUnit() != eCSSUnit_Enumerated ||
weight->GetIntValue() != NS_FONT_WEIGHT_NORMAL) {
weight->AppendToString(eCSSProperty_font_weight, aValue);
aValue.Append(PRUnichar(' '));
}
size.AppendToString(eCSSProperty_font_size, aValue);
if (lh.GetUnit() != eCSSUnit_Normal) {
size->AppendToString(eCSSProperty_font_size, aValue);
if (lh->GetUnit() != eCSSUnit_Normal) {
aValue.Append(PRUnichar('/'));
lh.AppendToString(eCSSProperty_line_height, aValue);
lh->AppendToString(eCSSProperty_line_height, aValue);
}
aValue.Append(PRUnichar(' '));
family.AppendToString(eCSSProperty_font_family, aValue);
family->AppendToString(eCSSProperty_font_family, aValue);
}
break;
}
@ -663,37 +666,37 @@ Declaration::GetValue(nsCSSProperty aProperty, nsAString& aValue) const
case eCSSProperty_text_decoration: {
// If text-decoration-color or text-decoration-style isn't initial value,
// we cannot serialize the text-decoration shorthand value.
const nsCSSValue &decorationColor =
*data->ValueFor(eCSSProperty_text_decoration_color);
const nsCSSValue &decorationStyle =
*data->ValueFor(eCSSProperty_text_decoration_style);
const nsCSSValue *decorationColor =
data->ValueFor(eCSSProperty_text_decoration_color);
const nsCSSValue *decorationStyle =
data->ValueFor(eCSSProperty_text_decoration_style);
NS_ABORT_IF_FALSE(decorationStyle.GetUnit() == eCSSUnit_Enumerated,
NS_ABORT_IF_FALSE(decorationStyle->GetUnit() == eCSSUnit_Enumerated,
nsPrintfCString("bad text-decoration-style unit %d",
decorationStyle.GetUnit()).get());
decorationStyle->GetUnit()).get());
if (decorationColor.GetUnit() != eCSSUnit_Enumerated ||
decorationColor.GetIntValue() != NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR ||
decorationStyle.GetIntValue() !=
if (decorationColor->GetUnit() != eCSSUnit_Enumerated ||
decorationColor->GetIntValue() != NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR ||
decorationStyle->GetIntValue() !=
NS_STYLE_TEXT_DECORATION_STYLE_SOLID) {
return;
}
const nsCSSValue &textBlink =
*data->ValueFor(eCSSProperty_text_blink);
const nsCSSValue &decorationLine =
*data->ValueFor(eCSSProperty_text_decoration_line);
const nsCSSValue *textBlink =
data->ValueFor(eCSSProperty_text_blink);
const nsCSSValue *decorationLine =
data->ValueFor(eCSSProperty_text_decoration_line);
NS_ABORT_IF_FALSE(textBlink.GetUnit() == eCSSUnit_Enumerated,
NS_ABORT_IF_FALSE(textBlink->GetUnit() == eCSSUnit_Enumerated,
nsPrintfCString("bad text-blink unit %d",
textBlink.GetUnit()).get());
NS_ABORT_IF_FALSE(decorationLine.GetUnit() == eCSSUnit_Enumerated,
textBlink->GetUnit()).get());
NS_ABORT_IF_FALSE(decorationLine->GetUnit() == eCSSUnit_Enumerated,
nsPrintfCString("bad text-decoration-line unit %d",
decorationLine.GetUnit()).get());
decorationLine->GetUnit()).get());
bool blinkNone = (textBlink.GetIntValue() == NS_STYLE_TEXT_BLINK_NONE);
bool blinkNone = (textBlink->GetIntValue() == NS_STYLE_TEXT_BLINK_NONE);
bool lineNone =
(decorationLine.GetIntValue() == NS_STYLE_TEXT_DECORATION_LINE_NONE);
(decorationLine->GetIntValue() == NS_STYLE_TEXT_DECORATION_LINE_NONE);
if (blinkNone && lineNone) {
AppendValueToString(eCSSProperty_text_decoration_line, aValue);
@ -711,38 +714,38 @@ Declaration::GetValue(nsCSSProperty aProperty, nsAString& aValue) const
break;
}
case eCSSProperty_transition: {
const nsCSSValue &transProp =
*data->ValueFor(eCSSProperty_transition_property);
const nsCSSValue &transDuration =
*data->ValueFor(eCSSProperty_transition_duration);
const nsCSSValue &transTiming =
*data->ValueFor(eCSSProperty_transition_timing_function);
const nsCSSValue &transDelay =
*data->ValueFor(eCSSProperty_transition_delay);
const nsCSSValue *transProp =
data->ValueFor(eCSSProperty_transition_property);
const nsCSSValue *transDuration =
data->ValueFor(eCSSProperty_transition_duration);
const nsCSSValue *transTiming =
data->ValueFor(eCSSProperty_transition_timing_function);
const nsCSSValue *transDelay =
data->ValueFor(eCSSProperty_transition_delay);
NS_ABORT_IF_FALSE(transDuration.GetUnit() == eCSSUnit_List ||
transDuration.GetUnit() == eCSSUnit_ListDep,
NS_ABORT_IF_FALSE(transDuration->GetUnit() == eCSSUnit_List ||
transDuration->GetUnit() == eCSSUnit_ListDep,
nsPrintfCString("bad t-duration unit %d",
transDuration.GetUnit()).get());
NS_ABORT_IF_FALSE(transTiming.GetUnit() == eCSSUnit_List ||
transTiming.GetUnit() == eCSSUnit_ListDep,
transDuration->GetUnit()).get());
NS_ABORT_IF_FALSE(transTiming->GetUnit() == eCSSUnit_List ||
transTiming->GetUnit() == eCSSUnit_ListDep,
nsPrintfCString("bad t-timing unit %d",
transTiming.GetUnit()).get());
NS_ABORT_IF_FALSE(transDelay.GetUnit() == eCSSUnit_List ||
transDelay.GetUnit() == eCSSUnit_ListDep,
transTiming->GetUnit()).get());
NS_ABORT_IF_FALSE(transDelay->GetUnit() == eCSSUnit_List ||
transDelay->GetUnit() == eCSSUnit_ListDep,
nsPrintfCString("bad t-delay unit %d",
transDelay.GetUnit()).get());
transDelay->GetUnit()).get());
const nsCSSValueList* dur = transDuration.GetListValue();
const nsCSSValueList* tim = transTiming.GetListValue();
const nsCSSValueList* del = transDelay.GetListValue();
const nsCSSValueList* dur = transDuration->GetListValue();
const nsCSSValueList* tim = transTiming->GetListValue();
const nsCSSValueList* del = transDelay->GetListValue();
if (transProp.GetUnit() == eCSSUnit_None ||
transProp.GetUnit() == eCSSUnit_All) {
if (transProp->GetUnit() == eCSSUnit_None ||
transProp->GetUnit() == eCSSUnit_All) {
// If any of the other three lists has more than one element,
// we can't use the shorthand.
if (!dur->mNext && !tim->mNext && !del->mNext) {
transProp.AppendToString(eCSSProperty_transition_property, aValue);
transProp->AppendToString(eCSSProperty_transition_property, aValue);
aValue.Append(PRUnichar(' '));
dur->mValue.AppendToString(eCSSProperty_transition_duration,aValue);
aValue.Append(PRUnichar(' '));
@ -755,11 +758,11 @@ Declaration::GetValue(nsCSSProperty aProperty, nsAString& aValue) const
aValue.Truncate();
}
} else {
NS_ABORT_IF_FALSE(transProp.GetUnit() == eCSSUnit_List ||
transProp.GetUnit() == eCSSUnit_ListDep,
NS_ABORT_IF_FALSE(transProp->GetUnit() == eCSSUnit_List ||
transProp->GetUnit() == eCSSUnit_ListDep,
nsPrintfCString("bad t-prop unit %d",
transProp.GetUnit()).get());
const nsCSSValueList* pro = transProp.GetListValue();
transProp->GetUnit()).get());
const nsCSSValueList* pro = transProp->GetListValue();
for (;;) {
pro->mValue.AppendToString(eCSSProperty_transition_property,
aValue);