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