Bug 576044 (6/12): remove vestiges of nsCSSType. r=dbaron a2.0=dbaron
authorZack Weinberg <zweinberg@mozilla.com>
Thu, 19 Aug 2010 15:33:44 -0400
changeset 50932 f09c1638d3c17cb59e29becfa47ddb45191187dd
parent 50931 b88472b0af90512e2880920159569666df05020b
child 50933 980f0170d98217045592698e0f361e31581cf04b
push idunknown
push userunknown
push dateunknown
reviewersdbaron
bugs576044
milestone2.0b5pre
Bug 576044 (6/12): remove vestiges of nsCSSType. r=dbaron a2.0=dbaron
content/canvas/src/nsCanvasRenderingContext2D.cpp
js/src/xpconnect/src/nsCSSPropertiesQS.h
layout/style/Declaration.cpp
layout/style/Declaration.h
layout/style/nsCSSDataBlock.cpp
layout/style/nsCSSDataBlock.h
layout/style/nsCSSParser.cpp
layout/style/nsCSSPropList.h
layout/style/nsCSSProperty.h
layout/style/nsCSSProps.cpp
layout/style/nsCSSProps.h
layout/style/nsDOMCSSDeclaration.cpp
layout/style/nsRuleData.cpp
layout/style/nsRuleData.h
layout/style/nsRuleNode.cpp
layout/style/nsStyleAnimation.cpp
layout/style/nsStyleAnimation.h
layout/style/nsTransitionManager.cpp
layout/style/test/ListCSSProperties.cpp
--- a/content/canvas/src/nsCanvasRenderingContext2D.cpp
+++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp
@@ -2322,18 +2322,17 @@ nsCanvasRenderingContext2D::SetFont(cons
     css::Declaration *declaration = rule->GetDeclaration();
     // The easiest way to see whether we got a syntax error or whether
     // we got 'inherit' or 'initial' is to look at font-size-adjust,
     // which the shorthand resets to either 'none' or
     // '-moz-system-font'.
     // We know the declaration is not !important, so we can use
     // GetNormalBlock().
     const nsCSSValue *fsaVal =
-      declaration->GetNormalBlock()->
-        ValueStorageFor(eCSSProperty_font_size_adjust);
+      declaration->GetNormalBlock()->ValueFor(eCSSProperty_font_size_adjust);
     if (!fsaVal || (fsaVal->GetUnit() != eCSSUnit_None &&
                     fsaVal->GetUnit() != eCSSUnit_System_Font)) {
         // We got an all-property value or a syntax error.  The spec says
         // this value must be ignored.
         return NS_OK;
     }
 
     rules.AppendObject(rule);
--- a/js/src/xpconnect/src/nsCSSPropertiesQS.h
+++ b/js/src/xpconnect/src/nsCSSPropertiesQS.h
@@ -34,30 +34,30 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
 #ifndef nsCSSPropertiesQS_h__
 #define nsCSSPropertiesQS_h__
 
 #include "nsICSSDeclaration.h"
 
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,     \
-                 kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,     \
+                 kwtable_, stylestruct_, stylestructoffset_, animtype_) \
 static const nsCSSProperty QS_CSS_PROP_##method_ = eCSSProperty_##id_;
 
 #define CSS_PROP_LIST_EXCLUDE_INTERNAL
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_) \
-  CSS_PROP(name_, id_, method_, flags_, X, X, X, X, X, X, X)
+  CSS_PROP(name_, id_, method_, flags_, X, X, X, X, X, X)
 #include "nsCSSPropList.h"
 
 // Aliases
-CSS_PROP(X, opacity, MozOpacity, 0, X, X, X, X, X, X, X)
-CSS_PROP(X, outline, MozOutline, 0, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_color, MozOutlineColor, 0, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_style, MozOutlineStyle, 0, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_width, MozOutlineWidth, 0, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_offset, MozOutlineOffset, 0, X, X, X, X, X, X, X)
+CSS_PROP(X, opacity, MozOpacity, X, X, X, X, X, X, X)
+CSS_PROP(X, outline, MozOutline, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_color, MozOutlineColor, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_style, MozOutlineStyle, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_width, MozOutlineWidth, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_offset, MozOutlineOffset, X, X, X, X, X, X, X)
 
 #undef CSS_PROP_SHORTHAND
 #undef CSS_PROP_LIST_EXCLUDE_INTERNAL
 #undef CSS_PROP
 
 #endif /* nsCSSPropertiesQS_h__ */
--- a/layout/style/Declaration.cpp
+++ b/layout/style/Declaration.cpp
@@ -124,27 +124,22 @@ PRBool Declaration::AppendValueToString(
                                         nsAString& aResult) const
 {
   NS_ABORT_IF_FALSE(0 <= aProperty &&
                     aProperty < eCSSProperty_COUNT_no_shorthands,
                     "property ID out of range");
 
   nsCSSCompressedDataBlock *data = GetValueIsImportant(aProperty)
                                       ? mImportantData : mData;
-  const void *storage = data->StorageFor(aProperty);
-  if (!storage) {
+  const nsCSSValue *val = data->ValueFor(aProperty);
+  if (!val) {
     return PR_FALSE;
   }
 
-  switch (nsCSSProps::kTypeTable[aProperty]) {
-    case eCSSType_Value:
-      static_cast<const nsCSSValue*>(storage)->
-        AppendToString(aProperty, aResult);
-      break;
-  }
+  val->AppendToString(aProperty, aResult);
   return PR_TRUE;
 }
 
 void
 Declaration::GetValue(nsCSSProperty aProperty, nsAString& aValue) const
 {
   aValue.Truncate(0);
 
@@ -179,37 +174,30 @@ Declaration::GetValue(nsCSSProperty aPro
            initialCount = 0, inheritCount = 0;
   CSSPROPS_FOR_SHORTHAND_SUBPROPERTIES(p, aProperty) {
     if (*p == eCSSProperty__x_system_font ||
          nsCSSProps::PropHasFlags(*p, CSS_PROPERTY_DIRECTIONAL_SOURCE)) {
       // The system-font subproperty and the *-source properties don't count.
       continue;
     }
     ++totalCount;
-    const void *storage = mData->StorageFor(*p);
-    NS_ASSERTION(!storage || !mImportantData || !mImportantData->StorageFor(*p),
+    const nsCSSValue *val = mData->ValueFor(*p);
+    NS_ASSERTION(!val || !mImportantData || !mImportantData->ValueFor(*p),
                  "can't be in both blocks");
-    if (!storage && mImportantData) {
+    if (!val && mImportantData) {
       ++importantCount;
-      storage = mImportantData->StorageFor(*p);
+      val = mImportantData->ValueFor(*p);
     }
-    if (!storage) {
+    if (!val) {
       // Case (1) above: some subproperties not specified.
       return;
     }
-    nsCSSUnit unit;
-    switch (nsCSSProps::kTypeTable[*p]) {
-      case eCSSType_Value: {
-        const nsCSSValue *val = static_cast<const nsCSSValue*>(storage);
-        unit = val->GetUnit();
-      } break;
-    }
-    if (unit == eCSSUnit_Inherit) {
+    if (val->GetUnit() == eCSSUnit_Inherit) {
       ++inheritCount;
-    } else if (unit == eCSSUnit_Initial) {
+    } else if (val->GetUnit() == eCSSUnit_Initial) {
       ++initialCount;
     }
   }
   if (importantCount != 0 && importantCount != totalCount) {
     // Case (3), no consistent importance.
     return;
   }
   if (initialCount == totalCount) {
@@ -231,33 +219,28 @@ Declaration::GetValue(nsCSSProperty aPro
   switch (aProperty) {
     case eCSSProperty_margin: 
     case eCSSProperty_padding: 
     case eCSSProperty_border_color: 
     case eCSSProperty_border_style: 
     case eCSSProperty_border_width: {
       const nsCSSProperty* subprops =
         nsCSSProps::SubpropertyEntryFor(aProperty);
-      NS_ASSERTION(nsCSSProps::kTypeTable[subprops[0]] == eCSSType_Value &&
-                   nsCSSProps::kTypeTable[subprops[1]] == eCSSType_Value &&
-                   nsCSSProps::kTypeTable[subprops[2]] == eCSSType_Value &&
-                   nsCSSProps::kTypeTable[subprops[3]] == eCSSType_Value,
-                   "type mismatch");
       NS_ASSERTION(nsCSSProps::GetStringValue(subprops[0]).Find("-top") !=
                      kNotFound, "first subprop must be top");
       NS_ASSERTION(nsCSSProps::GetStringValue(subprops[1]).Find("-right") !=
                      kNotFound, "second subprop must be right");
       NS_ASSERTION(nsCSSProps::GetStringValue(subprops[2]).Find("-bottom") !=
                      kNotFound, "third subprop must be bottom");
       NS_ASSERTION(nsCSSProps::GetStringValue(subprops[3]).Find("-left") !=
                      kNotFound, "fourth subprop must be left");
-      const nsCSSValue &topValue = *data->ValueStorageFor(subprops[0]);
-      const nsCSSValue &rightValue = *data->ValueStorageFor(subprops[1]);
-      const nsCSSValue &bottomValue = *data->ValueStorageFor(subprops[2]);
-      const nsCSSValue &leftValue = *data->ValueStorageFor(subprops[3]);
+      const nsCSSValue &topValue = *data->ValueFor(subprops[0]);
+      const nsCSSValue &rightValue = *data->ValueFor(subprops[1]);
+      const nsCSSValue &bottomValue = *data->ValueFor(subprops[2]);
+      const nsCSSValue &leftValue = *data->ValueFor(subprops[3]);
 
       NS_ASSERTION(topValue.GetUnit() != eCSSUnit_Null, "null top");
       topValue.AppendToString(subprops[0], aValue);
       if (topValue != rightValue || topValue != leftValue ||
           topValue != bottomValue) {
         aValue.Append(PRUnichar(' '));
         NS_ASSERTION(rightValue.GetUnit() != eCSSUnit_Null, "null right");
         rightValue.AppendToString(subprops[1], aValue);
@@ -274,20 +257,20 @@ Declaration::GetValue(nsCSSProperty aPro
       }
       break;
     }
     case eCSSProperty__moz_border_radius:
     case eCSSProperty__moz_outline_radius: {
       const nsCSSProperty* subprops =
         nsCSSProps::SubpropertyEntryFor(aProperty);
       const nsCSSValue* vals[4] = {
-        data->ValueStorageFor(subprops[0]),
-        data->ValueStorageFor(subprops[1]),
-        data->ValueStorageFor(subprops[2]),
-        data->ValueStorageFor(subprops[3])
+        data->ValueFor(subprops[0]),
+        data->ValueFor(subprops[1]),
+        data->ValueFor(subprops[2]),
+        data->ValueFor(subprops[3])
       };
 
       // For compatibility, only write a slash and the y-values
       // if they're not identical to the x-values.
       PRBool needY = PR_FALSE;
       for (int i = 0; i < 4; i++) {
         if (vals[i]->GetUnit() == eCSSUnit_Pair) {
           needY = PR_TRUE;
@@ -320,20 +303,20 @@ Declaration::GetValue(nsCSSProperty aPro
         nsCSSProps::SubpropertyEntryFor(eCSSProperty_border_width)
       };
       PRBool match = PR_TRUE;
       for (const nsCSSProperty** subprops = subproptables,
                **subprops_end = subproptables + NS_ARRAY_LENGTH(subproptables);
            subprops < subprops_end; ++subprops) {
         // Check only the first four subprops in each table, since the
         // others are extras for dimensional box properties.
-        const nsCSSValue *firstSide = data->ValueStorageFor((*subprops)[0]);
+        const nsCSSValue *firstSide = data->ValueFor((*subprops)[0]);
         for (PRInt32 side = 1; side < 4; ++side) {
           const nsCSSValue *otherSide =
-            data->ValueStorageFor((*subprops)[side]);
+            data->ValueFor((*subprops)[side]);
           if (*firstSide != *otherSide)
             match = PR_FALSE;
         }
       }
       if (!match) {
         // We can't express what we have in the border shorthand
         break;
       }
@@ -345,26 +328,22 @@ Declaration::GetValue(nsCSSProperty aPro
     case eCSSProperty_border_bottom:
     case eCSSProperty_border_left:
     case eCSSProperty_border_start:
     case eCSSProperty_border_end:
     case eCSSProperty__moz_column_rule:
     case eCSSProperty_outline: {
       const nsCSSProperty* subprops =
         nsCSSProps::SubpropertyEntryFor(aProperty);
-      NS_ASSERTION(nsCSSProps::kTypeTable[subprops[0]] == eCSSType_Value &&
-                   nsCSSProps::kTypeTable[subprops[1]] == eCSSType_Value &&
-                   nsCSSProps::kTypeTable[subprops[2]] == eCSSType_Value,
-                   "type mismatch");
       NS_ASSERTION(StringEndsWith(nsCSSProps::GetStringValue(subprops[2]),
                                   NS_LITERAL_CSTRING("-color")) ||
                    StringEndsWith(nsCSSProps::GetStringValue(subprops[2]),
                                   NS_LITERAL_CSTRING("-color-value")),
                    "third subprop must be the color property");
-      const nsCSSValue *colorValue = data->ValueStorageFor(subprops[2]);
+      const nsCSSValue *colorValue = data->ValueFor(subprops[2]);
       PRBool isMozUseTextColor =
         colorValue->GetUnit() == eCSSUnit_Enumerated &&
         colorValue->GetIntValue() == NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR;
       if (!AppendValueToString(subprops[0], aValue) ||
           !(aValue.Append(PRUnichar(' ')),
             AppendValueToString(subprops[1], aValue)) ||
           // Don't output a third value when it's -moz-use-text-color.
           !(isMozUseTextColor ||
@@ -405,35 +384,35 @@ Declaration::GetValue(nsCSSProperty aPro
       // We know from above that all subproperties were specified.
       // However, we still can't represent that in the shorthand unless
       // they're all lists of the same length.  So if they're different
       // lengths, we need to bail out.
       // We also need to bail out if an item has background-clip and
       // background-origin that are different and not the default
       // values.  (We omit them if they're both default.)
       const nsCSSValueList *image =
-        data->ValueStorageFor(eCSSProperty_background_image)->
+        data->ValueFor(eCSSProperty_background_image)->
         GetListValue();
       const nsCSSValueList *repeat =
-        data->ValueStorageFor(eCSSProperty_background_repeat)->
+        data->ValueFor(eCSSProperty_background_repeat)->
         GetListValue();
       const nsCSSValueList *attachment =
-        data->ValueStorageFor(eCSSProperty_background_attachment)->
+        data->ValueFor(eCSSProperty_background_attachment)->
         GetListValue();
       const nsCSSValuePairList *position =
-        data->ValueStorageFor(eCSSProperty_background_position)->
+        data->ValueFor(eCSSProperty_background_position)->
         GetPairListValue();
       const nsCSSValueList *clip =
-        data->ValueStorageFor(eCSSProperty_background_clip)->
+        data->ValueFor(eCSSProperty_background_clip)->
         GetListValue();
       const nsCSSValueList *origin =
-        data->ValueStorageFor(eCSSProperty_background_origin)->
+        data->ValueFor(eCSSProperty_background_origin)->
         GetListValue();
       const nsCSSValuePairList *size =
-        data->ValueStorageFor(eCSSProperty_background_size)->
+        data->ValueFor(eCSSProperty_background_size)->
         GetPairListValue();
       for (;;) {
         if (size->mXValue.GetUnit() != eCSSUnit_Auto ||
             size->mYValue.GetUnit() != eCSSUnit_Auto) {
           // Non-default background-size, so can't be serialized as shorthand.
           aValue.Truncate();
           return;
         }
@@ -510,37 +489,37 @@ Declaration::GetValue(nsCSSProperty aPro
           aValue.Truncate();
       }
       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
       const nsCSSValue *systemFont =
-        data->ValueStorageFor(eCSSProperty__x_system_font);
+        data->ValueFor(eCSSProperty__x_system_font);
       const nsCSSValue &style =
-        *data->ValueStorageFor(eCSSProperty_font_style);
+        *data->ValueFor(eCSSProperty_font_style);
       const nsCSSValue &variant =
-        *data->ValueStorageFor(eCSSProperty_font_variant);
+        *data->ValueFor(eCSSProperty_font_variant);
       const nsCSSValue &weight =
-        *data->ValueStorageFor(eCSSProperty_font_weight);
+        *data->ValueFor(eCSSProperty_font_weight);
       const nsCSSValue &size =
-        *data->ValueStorageFor(eCSSProperty_font_size);
+        *data->ValueFor(eCSSProperty_font_size);
       const nsCSSValue &lh =
-        *data->ValueStorageFor(eCSSProperty_line_height);
+        *data->ValueFor(eCSSProperty_line_height);
       const nsCSSValue &family =
-        *data->ValueStorageFor(eCSSProperty_font_family);
+        *data->ValueFor(eCSSProperty_font_family);
       const nsCSSValue &stretch =
-        *data->ValueStorageFor(eCSSProperty_font_stretch);
+        *data->ValueFor(eCSSProperty_font_stretch);
       const nsCSSValue &sizeAdjust =
-        *data->ValueStorageFor(eCSSProperty_font_size_adjust);
+        *data->ValueFor(eCSSProperty_font_size_adjust);
       const nsCSSValue &featureSettings =
-        *data->ValueStorageFor(eCSSProperty_font_feature_settings);
+        *data->ValueFor(eCSSProperty_font_feature_settings);
       const nsCSSValue &languageOverride =
-        *data->ValueStorageFor(eCSSProperty_font_language_override);
+        *data->ValueFor(eCSSProperty_font_language_override);
 
       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 ||
@@ -596,40 +575,40 @@ Declaration::GetValue(nsCSSProperty aPro
       if (AppendValueToString(eCSSProperty_list_style_type, aValue))
         aValue.Append(PRUnichar(' '));
       if (AppendValueToString(eCSSProperty_list_style_position, aValue))
         aValue.Append(PRUnichar(' '));
       AppendValueToString(eCSSProperty_list_style_image, aValue);
       break;
     case eCSSProperty_overflow: {
       const nsCSSValue &xValue =
-        *data->ValueStorageFor(eCSSProperty_overflow_x);
+        *data->ValueFor(eCSSProperty_overflow_x);
       const nsCSSValue &yValue =
-        *data->ValueStorageFor(eCSSProperty_overflow_y);
+        *data->ValueFor(eCSSProperty_overflow_y);
       if (xValue == yValue)
         xValue.AppendToString(eCSSProperty_overflow_x, aValue);
       break;
     }
     case eCSSProperty_pause: {
       if (AppendValueToString(eCSSProperty_pause_before, aValue)) {
         aValue.Append(PRUnichar(' '));
         if (!AppendValueToString(eCSSProperty_pause_after, aValue))
           aValue.Truncate();
       }
       break;
     }
     case eCSSProperty_transition: {
       const nsCSSValue &transProp =
-        *data->ValueStorageFor(eCSSProperty_transition_property);
+        *data->ValueFor(eCSSProperty_transition_property);
       const nsCSSValue &transDuration =
-        *data->ValueStorageFor(eCSSProperty_transition_duration);
+        *data->ValueFor(eCSSProperty_transition_duration);
       const nsCSSValue &transTiming =
-        *data->ValueStorageFor(eCSSProperty_transition_timing_function);
+        *data->ValueFor(eCSSProperty_transition_timing_function);
       const nsCSSValue &transDelay =
-        *data->ValueStorageFor(eCSSProperty_transition_delay);
+        *data->ValueFor(eCSSProperty_transition_delay);
 
       NS_ABORT_IF_FALSE(transDuration.GetUnit() == eCSSUnit_List ||
                         transDuration.GetUnit() == eCSSUnit_ListDep,
                         nsPrintfCString(32, "bad t-duration unit %d",
                                         transDuration.GetUnit()).get());
       NS_ABORT_IF_FALSE(transTiming.GetUnit() == eCSSUnit_List ||
                         transTiming.GetUnit() == eCSSUnit_ListDep,
                         nsPrintfCString(32, "bad t-timing unit %d",
@@ -691,21 +670,21 @@ Declaration::GetValue(nsCSSProperty aPro
           aValue.Truncate();
         }
       }
       break;
     }
 
     case eCSSProperty_marker: {
       const nsCSSValue &endValue =
-        *data->ValueStorageFor(eCSSProperty_marker_end);
+        *data->ValueFor(eCSSProperty_marker_end);
       const nsCSSValue &midValue =
-        *data->ValueStorageFor(eCSSProperty_marker_mid);
+        *data->ValueFor(eCSSProperty_marker_mid);
       const nsCSSValue &startValue =
-        *data->ValueStorageFor(eCSSProperty_marker_start);
+        *data->ValueFor(eCSSProperty_marker_start);
       if (endValue == midValue && midValue == startValue)
         AppendValueToString(eCSSProperty_marker_end, aValue);
       break;
     }
     default:
       NS_NOTREACHED("no other shorthands");
       break;
   }
@@ -719,33 +698,32 @@ Declaration::GetValueIsImportant(const n
 }
 
 PRBool
 Declaration::GetValueIsImportant(nsCSSProperty aProperty) const
 {
   if (!mImportantData)
     return PR_FALSE;
 
-  // Calling StorageFor is inefficient, but we can assume '!important'
-  // is rare.
+  // Calling ValueFor is inefficient, but we can assume '!important' is rare.
 
   if (nsCSSProps::IsShorthand(aProperty)) {
     CSSPROPS_FOR_SHORTHAND_SUBPROPERTIES(p, aProperty) {
       if (*p == eCSSProperty__x_system_font) {
         // The system_font subproperty doesn't count.
         continue;
       }
-      if (!mImportantData->StorageFor(*p)) {
+      if (!mImportantData->ValueFor(*p)) {
         return PR_FALSE;
       }
     }
     return PR_TRUE;
   }
 
-  return mImportantData->StorageFor(aProperty) != nsnull;
+  return mImportantData->ValueFor(aProperty) != nsnull;
 }
 
 /* static */ void
 Declaration::AppendImportanceToString(PRBool aIsImportant,
                                       nsAString& aString)
 {
   if (aIsImportant) {
    aString.AppendLiteral(" ! important");
@@ -777,18 +755,18 @@ void
 Declaration::ToString(nsAString& aString) const
 {
   // Someone cares about this declaration's contents, so don't let it
   // change from under them.  See e.g. bug 338679.
   SetImmutable();
 
   nsCSSCompressedDataBlock *systemFontData =
     GetValueIsImportant(eCSSProperty__x_system_font) ? mImportantData : mData;
-  const nsCSSValue *systemFont = 
-    systemFontData->ValueStorageFor(eCSSProperty__x_system_font);
+  const nsCSSValue *systemFont =
+    systemFontData->ValueFor(eCSSProperty__x_system_font);
   const PRBool haveSystemFont = systemFont &&
                                 systemFont->GetUnit() != eCSSUnit_None &&
                                 systemFont->GetUnit() != eCSSUnit_Null;
   PRBool didSystemFont = PR_FALSE;
 
   PRInt32 count = mOrder.Length();
   PRInt32 index;
   nsAutoTArray<nsCSSProperty, 16> shorthandsUsed;
@@ -845,20 +823,18 @@ Declaration::ToString(nsAString& aString
         }
 
         // That we output the system font is enough for this property if:
         //   (1) it's the hidden system font subproperty (which either
         //       means we output it or we don't have it), or
         //   (2) its value is the hidden system font value and it matches
         //       the hidden system font subproperty in importance, and
         //       we output the system font subproperty.
-        NS_ASSERTION(nsCSSProps::kTypeTable[property] == eCSSType_Value,
-                     "not a value typed subproperty");
         const nsCSSValue *val =
-          systemFontData->ValueStorageFor(property);
+          systemFontData->ValueFor(property);
         if (property == eCSSProperty__x_system_font ||
             (haveSystemFont && val && val->GetUnit() == eCSSUnit_System_Font)) {
           doneProperty = PR_TRUE;
         }
       }
     }
     if (doneProperty)
       continue;
--- a/layout/style/Declaration.h
+++ b/layout/style/Declaration.h
@@ -159,43 +159,43 @@ public:
   /**
    * Return a pointer to our current value for this property.
    * Only returns non-null if the property is longhand, set, and
    * has the indicated importance level.
    *
    * May only be called when not expanded, and the caller must call
    * EnsureMutable first.
    */
-  void* SlotForValue(nsCSSProperty aProperty, PRBool aIsImportant) {
+  nsCSSValue* SlotForValue(nsCSSProperty aProperty, PRBool aIsImportant) {
     AssertMutable();
     NS_ABORT_IF_FALSE(mData, "called while expanded");
 
     if (nsCSSProps::IsShorthand(aProperty)) {
       return nsnull;
     }
     nsCSSCompressedDataBlock *block = aIsImportant ? mImportantData : mData;
     // mImportantData might be null
     if (!block) {
       return nsnull;
     }
 
-    void *slot = block->SlotForValue(aProperty);
+    nsCSSValue *slot = block->SlotForValue(aProperty);
 #ifdef DEBUG
     {
       nsCSSCompressedDataBlock *other = aIsImportant ? mData : mImportantData;
-      NS_ABORT_IF_FALSE(!slot || !other || !other->StorageFor(aProperty),
+      NS_ABORT_IF_FALSE(!slot || !other || !other->ValueFor(aProperty),
                         "Property both important and not?");
     }
 #endif
     return slot;
   }
 
   PRBool HasNonImportantValueFor(nsCSSProperty aProperty) const {
     NS_ABORT_IF_FALSE(!nsCSSProps::IsShorthand(aProperty), "must be longhand");
-    return !!mData->StorageFor(aProperty);
+    return !!mData->ValueFor(aProperty);
   }
 
   /**
    * Return whether |this| may be modified.
    */
   bool IsMutable() const {
     return !mImmutable;
   }
--- a/layout/style/nsCSSDataBlock.cpp
+++ b/layout/style/nsCSSDataBlock.cpp
@@ -47,28 +47,18 @@
 #include "nsRuleNode.h"
 #include "nsStyleSet.h"
 #include "nsStyleContext.h"
 
 namespace css = mozilla::css;
 
 /*
  * nsCSSCompressedDataBlock holds property-value pairs corresponding
- * to CSS declaration blocks.  The value is stored in one of the three
- * CSS data types: nsCSSValue, nsCSSValueList, and nsCSSValuePairList,
- * which each correspond to a value of the nsCSSType enumeration.
- *
- * The storage strategy uses the CDB*Storage structs below to help
- * ensure that all the types remain properly aligned.  nsCSSValue's
- * alignment requirements cannot be weaker than any others, since it
- * contains a pointer and an enumeration.
- *
- * nsCSSValue objects are stored directly in the block; list types
- * have only a pointer to the first element in the list stored in the
- * block.
+ * to CSS declaration blocks.  Each pair is stored in a CDBValueStorage
+ * object; these objects form an array at the end of the data block.
  */
 
 struct CDBValueStorage {
     nsCSSProperty property;
     nsCSSValue value;
 };
 
 enum {
@@ -174,65 +164,53 @@ nsCSSCompressedDataBlock::MapRuleInfoInt
     const char* cursor = Block();
     const char* cursor_end = BlockEnd();
     while (cursor < cursor_end) {
         nsCSSProperty iProp = PropertyAtCursor(cursor);
         NS_ASSERTION(0 <= iProp && iProp < eCSSProperty_COUNT_no_shorthands,
                      "out of range");
         if (nsCachedStyleData::GetBitForSID(nsCSSProps::kSIDTable[iProp]) &
             aRuleData->mSIDs) {
-            void *prop = aRuleData->StorageFor(iProp);
-            switch (nsCSSProps::kTypeTable[iProp]) {
-                case eCSSType_Value: {
-                    nsCSSValue* target = static_cast<nsCSSValue*>(prop);
-                    if (target->GetUnit() == eCSSUnit_Null) {
-                        const nsCSSValue *val = ValueAtCursor(cursor);
-                        NS_ASSERTION(val->GetUnit() != eCSSUnit_Null, "oops");
-                        if (ShouldStartImageLoads(aRuleData, iProp)) {
-                            TryToStartImageLoad(*val, doc, iProp);
-                        }
-                        *target = *val;
-                        if (iProp == eCSSProperty_font_family) {
-                            // XXX Are there other things like this?
-                            aRuleData->mFontData->mFamilyFromHTML = PR_FALSE;
+            nsCSSValue* target = aRuleData->ValueFor(iProp);
+            if (target->GetUnit() == eCSSUnit_Null) {
+                const nsCSSValue *val = ValueAtCursor(cursor);
+                NS_ASSERTION(val->GetUnit() != eCSSUnit_Null, "oops");
+                if (ShouldStartImageLoads(aRuleData, iProp)) {
+                    TryToStartImageLoad(*val, doc, iProp);
+                }
+                *target = *val;
+                if (iProp == eCSSProperty_font_family) {
+                    // XXX Are there other things like this?
+                    aRuleData->mFontData->mFamilyFromHTML = PR_FALSE;
+                }
+                if (nsCSSProps::PropHasFlags(iProp,
+                        CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED) &&
+                    ShouldIgnoreColors(aRuleData))
+                {
+                    if (iProp == eCSSProperty_background_color) {
+                        // Force non-'transparent' background
+                        // colors to the user's default.
+                        if (target->IsNonTransparentColor()) {
+                            target->SetColorValue(aRuleData->mPresContext->
+                                                  DefaultBackgroundColor());
                         }
-                        if (nsCSSProps::PropHasFlags(iProp,
-                                CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED) &&
-                            ShouldIgnoreColors(aRuleData))
-                        {
-                            if (iProp == eCSSProperty_background_color) {
-                                // Force non-'transparent' background
-                                // colors to the user's default.
-                                if (target->IsNonTransparentColor()) {
-                                    target->SetColorValue(aRuleData->
-                                        mPresContext->
-                                        DefaultBackgroundColor());
-                                }
-                            } else {
-                                // Ignore 'color', 'border-*-color', etc.
-                                *target = nsCSSValue();
-                            }
-                        }
+                    } else {
+                        // Ignore 'color', 'border-*-color', etc.
+                        *target = nsCSSValue();
                     }
-                    cursor += CDBValueStorage_advance;
-                } break;
-            }
-        } else {
-            switch (nsCSSProps::kTypeTable[iProp]) {
-                case eCSSType_Value: {
-                    cursor += CDBValueStorage_advance;
-                } break;
+                }
             }
         }
+        cursor += CDBValueStorage_advance;
     }
     NS_ASSERTION(cursor == cursor_end, "inconsistent data");
 }
 
-const void*
-nsCSSCompressedDataBlock::StorageFor(nsCSSProperty aProperty) const
+const nsCSSValue*
+nsCSSCompressedDataBlock::ValueFor(nsCSSProperty aProperty) const
 {
     NS_PRECONDITION(!nsCSSProps::IsShorthand(aProperty),
                     "Don't call for shorthands");
 
     // If we have no data for this struct, then return immediately.
     // This optimization should make us return most of the time, so we
     // have to worry much less (although still some) about the speed of
     // the rest of the function.
@@ -242,27 +220,19 @@ nsCSSCompressedDataBlock::StorageFor(nsC
 
     const char* cursor = Block();
     const char* cursor_end = BlockEnd();
     while (cursor < cursor_end) {
         nsCSSProperty iProp = PropertyAtCursor(cursor);
         NS_ASSERTION(0 <= iProp && iProp < eCSSProperty_COUNT_no_shorthands,
                      "out of range");
         if (iProp == aProperty) {
-            switch (nsCSSProps::kTypeTable[iProp]) {
-                case eCSSType_Value: {
-                    return ValueAtCursor(cursor);
-                }
-            }
+            return ValueAtCursor(cursor);
         }
-        switch (nsCSSProps::kTypeTable[iProp]) {
-            case eCSSType_Value: {
-                cursor += CDBValueStorage_advance;
-            } break;
-        }
+        cursor += CDBValueStorage_advance;
     }
     NS_ASSERTION(cursor == cursor_end, "inconsistent data");
 
     return nsnull;
 }
 
 nsCSSCompressedDataBlock*
 nsCSSCompressedDataBlock::Clone() const
@@ -277,26 +247,21 @@ nsCSSCompressedDataBlock::Clone() const
     result_cursor = result->Block();
 
     while (cursor < cursor_end) {
         nsCSSProperty iProp = PropertyAtCursor(cursor);
         NS_ASSERTION(0 <= iProp && iProp < eCSSProperty_COUNT_no_shorthands,
                      "out of range");
         PropertyAtCursor(result_cursor) = iProp;
 
-        switch (nsCSSProps::kTypeTable[iProp]) {
-            case eCSSType_Value: {
-                const nsCSSValue* val = ValueAtCursor(cursor);
-                NS_ASSERTION(val->GetUnit() != eCSSUnit_Null, "oops");
-                nsCSSValue *result_val = ValueAtCursor(result_cursor);
-                new (result_val) nsCSSValue(*val);
-                cursor += CDBValueStorage_advance;
-                result_cursor +=  CDBValueStorage_advance;
-            } break;
-        }
+        const nsCSSValue* val = ValueAtCursor(cursor);
+        nsCSSValue *result_val = ValueAtCursor(result_cursor);
+        new (result_val) nsCSSValue(*val);
+        cursor += CDBValueStorage_advance;
+        result_cursor +=  CDBValueStorage_advance;
     }
     NS_ASSERTION(cursor == cursor_end, "inconsistent data");
 
     result->mBlockEnd = result_cursor;
     result->mStyleBits = mStyleBits;
     NS_ASSERTION(result->DataSize() == DataSize(), "wrong size");
 
     return result.forget();
@@ -306,69 +271,57 @@ nsCSSCompressedDataBlock::~nsCSSCompress
 {
     const char* cursor = Block();
     const char* cursor_end = BlockEnd();
     while (cursor < cursor_end) {
         nsCSSProperty iProp = PropertyAtCursor(cursor);
         NS_ASSERTION(0 <= iProp && iProp < eCSSProperty_COUNT_no_shorthands,
                      "out of range");
 
-        switch (nsCSSProps::kTypeTable[iProp]) {
-            case eCSSType_Value: {
-                const nsCSSValue* val = ValueAtCursor(cursor);
-                NS_ASSERTION(val->GetUnit() != eCSSUnit_Null, "oops");
-                val->~nsCSSValue();
-                cursor += CDBValueStorage_advance;
-            } break;
-        }
+        const nsCSSValue* val = ValueAtCursor(cursor);
+        NS_ASSERTION(val->GetUnit() != eCSSUnit_Null, "oops");
+        val->~nsCSSValue();
+        cursor += CDBValueStorage_advance;
     }
     NS_ASSERTION(cursor == cursor_end, "inconsistent data");
 }
 
 /* static */ nsCSSCompressedDataBlock*
 nsCSSCompressedDataBlock::CreateEmptyBlock()
 {
     nsCSSCompressedDataBlock *result = new(0) nsCSSCompressedDataBlock();
     result->mBlockEnd = result->Block();
     return result;
 }
 
-/* static */ void
-nsCSSCompressedDataBlock::MoveValue(void *aSource, void *aDest,
-                                    nsCSSProperty aPropID,
-                                    PRBool* aChanged)
+/* static */ PRBool
+nsCSSCompressedDataBlock::MoveValue(nsCSSValue *aSource, nsCSSValue *aDest)
 {
-  switch (nsCSSProps::kTypeTable[aPropID]) {
-    case eCSSType_Value: {
-      nsCSSValue *source = static_cast<nsCSSValue*>(aSource);
-      nsCSSValue *dest = static_cast<nsCSSValue*>(aDest);
-      if (*source != *dest)
-        *aChanged = PR_TRUE;
-      dest->~nsCSSValue();
-      memcpy(dest, source, sizeof(nsCSSValue));
-      new (source) nsCSSValue();
-    } break;
-  }
+    PRBool changed = (*aSource != *aDest);
+    aDest->~nsCSSValue();
+    memcpy(aDest, aSource, sizeof(nsCSSValue));
+    new (aSource) nsCSSValue();
+    return changed;
 }
 
 /*****************************************************************************/
 
 nsCSSExpandedDataBlock::nsCSSExpandedDataBlock()
 {
     AssertInitialState();
 }
 
 nsCSSExpandedDataBlock::~nsCSSExpandedDataBlock()
 {
     AssertInitialState();
 }
 
 const size_t
 nsCSSExpandedDataBlock::kOffsetTable[] = {
-    #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, \
+    #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,        \
                      kwtable_, stylestruct_, stylestructoffset_, animtype_)    \
         offsetof(nsCSSExpandedDataBlock, m##datastruct_.member_),
     #include "nsCSSPropList.h"
     #undef CSS_PROP
 };
 
 void
 nsCSSExpandedDataBlock::DoExpand(nsCSSCompressedDataBlock *aBlock,
@@ -384,32 +337,27 @@ nsCSSExpandedDataBlock::DoExpand(nsCSSCo
         nsCSSProperty iProp = PropertyAtCursor(cursor);
         NS_ASSERTION(0 <= iProp && iProp < eCSSProperty_COUNT_no_shorthands,
                      "out of range");
         NS_ASSERTION(!HasPropertyBit(iProp),
                      "compressed block has property multiple times");
         SetPropertyBit(iProp);
         if (aImportant)
             SetImportantBit(iProp);
-        void *prop = PropertyAt(iProp);
 
-        switch (nsCSSProps::kTypeTable[iProp]) {
-            case eCSSType_Value: {
-                const nsCSSValue* val = ValueAtCursor(cursor);
-                nsCSSValue* dest = static_cast<nsCSSValue*>(prop);
-                NS_ASSERTION(val->GetUnit() != eCSSUnit_Null, "oops");
-                NS_ASSERTION(dest->GetUnit() == eCSSUnit_Null,
-                             "expanding into non-empty block");
+        const nsCSSValue* val = ValueAtCursor(cursor);
+        nsCSSValue* dest = PropertyAt(iProp);
+        NS_ASSERTION(val->GetUnit() != eCSSUnit_Null, "oops");
+        NS_ASSERTION(dest->GetUnit() == eCSSUnit_Null,
+                     "expanding into non-empty block");
 #ifdef NS_BUILD_REFCNT_LOGGING
-                dest->~nsCSSValue();
+        dest->~nsCSSValue();
 #endif
-                memcpy(dest, val, sizeof(nsCSSValue));
-                cursor += CDBValueStorage_advance;
-            } break;
-        }
+        memcpy(dest, val, sizeof(nsCSSValue));
+        cursor += CDBValueStorage_advance;
     }
     NS_ASSERTION(cursor == cursor_end, "inconsistent data");
 
     // Don't destroy remnants of what we just copied
     aBlock->mBlockEnd = aBlock->Block();
     delete aBlock;
 }
 
@@ -434,34 +382,22 @@ nsCSSExpandedDataBlock::ComputeSize()
         if (!mPropertiesSet.HasPropertyInChunk(iHigh))
             continue;
         for (size_t iLow = 0; iLow < nsCSSPropertySet::kBitsInChunk; ++iLow) {
             if (!mPropertiesSet.HasPropertyAt(iHigh, iLow))
                 continue;
             nsCSSProperty iProp = nsCSSPropertySet::CSSPropertyAt(iHigh, iLow);
             NS_ASSERTION(0 <= iProp && iProp < eCSSProperty_COUNT_no_shorthands,
                          "out of range");
-#ifdef DEBUG
-            void *prop = PropertyAt(iProp);
-#endif
-            PRUint32 increment = 0;
-            switch (nsCSSProps::kTypeTable[iProp]) {
-                case eCSSType_Value: {
-#ifdef DEBUG
-                    nsCSSValue* val = static_cast<nsCSSValue*>(prop);
-                    NS_ASSERTION(val->GetUnit() != eCSSUnit_Null,
-                                 "null value while computing size");
-#endif
-                    increment = CDBValueStorage_advance;
-                } break;
-            }
+            NS_ASSERTION(PropertyAt(iProp)->GetUnit() != eCSSUnit_Null,
+                         "null value while computing size");
             if (mPropertiesImportant.HasPropertyAt(iHigh, iLow))
-                result.important += increment;
+                result.important += CDBValueStorage_advance;
             else
-                result.normal += increment;
+                result.normal += CDBValueStorage_advance;
         }
     }
     return result;
 }
 
 void
 nsCSSExpandedDataBlock::Compress(nsCSSCompressedDataBlock **aNormalBlock,
                                  nsCSSCompressedDataBlock **aImportantBlock)
@@ -500,35 +436,30 @@ nsCSSExpandedDataBlock::Compress(nsCSSCo
         if (!mPropertiesSet.HasPropertyInChunk(iHigh))
             continue;
         for (size_t iLow = 0; iLow < nsCSSPropertySet::kBitsInChunk; ++iLow) {
             if (!mPropertiesSet.HasPropertyAt(iHigh, iLow))
                 continue;
             nsCSSProperty iProp = nsCSSPropertySet::CSSPropertyAt(iHigh, iLow);
             NS_ASSERTION(0 <= iProp && iProp < eCSSProperty_COUNT_no_shorthands,
                          "out of range");
-            void *prop = PropertyAt(iProp);
             PRBool important =
                 mPropertiesImportant.HasPropertyAt(iHigh, iLow);
             char *&cursor = important ? cursor_important : cursor_normal;
             nsCSSCompressedDataBlock *result =
                 important ? result_important : result_normal;
-            switch (nsCSSProps::kTypeTable[iProp]) {
-                case eCSSType_Value: {
-                    nsCSSValue* val = static_cast<nsCSSValue*>(prop);
-                    NS_ASSERTION(val->GetUnit() != eCSSUnit_Null,
-                                 "Null value while compressing");
-                    CDBValueStorage *storage =
-                        reinterpret_cast<CDBValueStorage*>(cursor);
-                    storage->property = iProp;
-                    memcpy(&storage->value, val, sizeof(nsCSSValue));
-                    new (val) nsCSSValue();
-                    cursor += CDBValueStorage_advance;
-                } break;
-            }
+            nsCSSValue* val = PropertyAt(iProp);
+            NS_ASSERTION(val->GetUnit() != eCSSUnit_Null,
+                         "Null value while compressing");
+            CDBValueStorage *storage =
+                reinterpret_cast<CDBValueStorage*>(cursor);
+            storage->property = iProp;
+            memcpy(&storage->value, val, sizeof(nsCSSValue));
+            new (val) nsCSSValue();
+            cursor += CDBValueStorage_advance;
             result->mStyleBits |=
                 nsCachedStyleData::GetBitForSID(nsCSSProps::kSIDTable[iProp]);
         }
     }
 
     result_normal->mBlockEnd = cursor_normal;
     NS_ASSERTION(result_normal->DataSize() == ptrdiff_t(size.normal),
                  "size miscalculation");
@@ -577,104 +508,94 @@ void
 nsCSSExpandedDataBlock::ClearLonghandProperty(nsCSSProperty aPropID)
 {
     NS_ABORT_IF_FALSE(0 <= aPropID &&
                       aPropID < eCSSProperty_COUNT_no_shorthands,
                       "out of range");
 
     ClearPropertyBit(aPropID);
     ClearImportantBit(aPropID);
-
-    void *prop = PropertyAt(aPropID);
-    switch (nsCSSProps::kTypeTable[aPropID]) {
-        case eCSSType_Value: {
-            nsCSSValue* val = static_cast<nsCSSValue*>(prop);
-            val->Reset();
-        } break;
-    }
+    PropertyAt(aPropID)->Reset();
 }
 
-void
+PRBool
 nsCSSExpandedDataBlock::TransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
                                           nsCSSProperty aPropID,
                                           PRBool aIsImportant,
                                           PRBool aOverrideImportant,
                                           PRBool aMustCallValueAppended,
-                                          css::Declaration* aDeclaration,
-                                          PRBool* aChanged)
+                                          css::Declaration* aDeclaration)
 {
-  if (nsCSSProps::IsShorthand(aPropID)) {
+    if (!nsCSSProps::IsShorthand(aPropID)) {
+        return DoTransferFromBlock(aFromBlock, aPropID,
+                                   aIsImportant, aOverrideImportant,
+                                   aMustCallValueAppended, aDeclaration);
+    }
+
+    PRBool changed = PR_FALSE;
     CSSPROPS_FOR_SHORTHAND_SUBPROPERTIES(p, aPropID) {
-      DoTransferFromBlock(aFromBlock, *p, aIsImportant, aOverrideImportant,
-                          aMustCallValueAppended, aDeclaration, aChanged);
+        changed |= DoTransferFromBlock(aFromBlock, *p,
+                                       aIsImportant, aOverrideImportant,
+                                       aMustCallValueAppended, aDeclaration);
     }
-  } else {
-    DoTransferFromBlock(aFromBlock, aPropID, aIsImportant, aOverrideImportant,
-                        aMustCallValueAppended, aDeclaration, aChanged);
-  }
+    return changed;
 }
 
-void
+PRBool
 nsCSSExpandedDataBlock::DoTransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
                                             nsCSSProperty aPropID,
                                             PRBool aIsImportant,
                                             PRBool aOverrideImportant,
                                             PRBool aMustCallValueAppended,
-                                            css::Declaration* aDeclaration,
-                                            PRBool* aChanged)
+                                            css::Declaration* aDeclaration)
 {
+  PRBool changed = PR_FALSE;
   NS_ASSERTION(aFromBlock.HasPropertyBit(aPropID), "oops");
   if (aIsImportant) {
     if (!HasImportantBit(aPropID))
-      *aChanged = PR_TRUE;
+      changed = PR_TRUE;
     SetImportantBit(aPropID);
   } else {
     if (HasImportantBit(aPropID)) {
       // When parsing a declaration block, an !important declaration
       // is not overwritten by an ordinary declaration of the same
       // property later in the block.  However, CSSOM manipulations
       // come through here too, and in that case we do want to
       // overwrite the property.
       if (!aOverrideImportant) {
         aFromBlock.ClearLonghandProperty(aPropID);
-        return;
+        return PR_FALSE;
       }
-      *aChanged = PR_TRUE;
+      changed = PR_TRUE;
       ClearImportantBit(aPropID);
     }
   }
 
   if (aMustCallValueAppended || !HasPropertyBit(aPropID)) {
     aDeclaration->ValueAppended(aPropID);
   }
 
   SetPropertyBit(aPropID);
   aFromBlock.ClearPropertyBit(aPropID);
 
   /*
    * Save needless copying and allocation by calling the destructor in
    * the destination, copying memory directly, and then using placement
    * new.
    */
-  void *v_source = aFromBlock.PropertyAt(aPropID);
-  void *v_dest = PropertyAt(aPropID);
-  nsCSSCompressedDataBlock::MoveValue(v_source, v_dest, aPropID, aChanged);
+  changed |= nsCSSCompressedDataBlock::MoveValue(aFromBlock.PropertyAt(aPropID),
+                                                 PropertyAt(aPropID));
+  return changed;
 }
 
 #ifdef DEBUG
 void
 nsCSSExpandedDataBlock::DoAssertInitialState()
 {
     mPropertiesSet.AssertIsEmpty("not initial state");
     mPropertiesImportant.AssertIsEmpty("not initial state");
 
     for (PRUint32 i = 0; i < eCSSProperty_COUNT_no_shorthands; ++i) {
-        void *prop = PropertyAt(nsCSSProperty(i));
-        switch (nsCSSProps::kTypeTable[i]) {
-            case eCSSType_Value: {
-                nsCSSValue* val = static_cast<nsCSSValue*>(prop);
-                NS_ASSERTION(val->GetUnit() == eCSSUnit_Null,
-                             "not initial state");
-            } break;
-        }
+        NS_ASSERTION(PropertyAt(nsCSSProperty(i))->GetUnit() == eCSSUnit_Null,
+                     "not initial state");
     }
 }
 #endif
--- a/layout/style/nsCSSDataBlock.h
+++ b/layout/style/nsCSSDataBlock.h
@@ -77,64 +77,49 @@ public:
      * Do what |nsIStyleRule::MapRuleInfoInto| needs to do for a style
      * rule using this block for storage.
      */
     void MapRuleInfoInto(nsRuleData *aRuleData) const;
 
     /**
      * Return the location at which the *value* for the property is
      * stored, or null if the block does not contain a value for the
-     * property.  This is either an |nsCSSValue*|, |nsCSSRect*|, or an
-     * |nsCSSValueList**|, etc.
+     * property.
      *
      * Inefficient (by design).
      *
      * Must not be called for shorthands.
      */
-    const void* StorageFor(nsCSSProperty aProperty) const;
+    const nsCSSValue* ValueFor(nsCSSProperty aProperty) const;
 
     /**
      * As above, but provides mutable access to a value slot.
      */
-    void* SlotForValue(nsCSSProperty aProperty) {
-      return const_cast<void*>(StorageFor(aProperty));
-    }
-
-    /**
-     * A set of slightly more typesafe helpers for the above.  All
-     * return null if the value is not present.
-     */
-    const nsCSSValue* ValueStorageFor(nsCSSProperty aProperty) const {
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      return static_cast<const nsCSSValue*>(StorageFor(aProperty));
+    nsCSSValue* SlotForValue(nsCSSProperty aProperty) {
+      return const_cast<nsCSSValue*>(ValueFor(aProperty));
     }
 
     /**
      * Clone this block, or return null on out-of-memory.
      */
     nsCSSCompressedDataBlock* Clone() const;
 
     /**
      * Create a new nsCSSCompressedDataBlock holding no declarations.
      */
     static nsCSSCompressedDataBlock* CreateEmptyBlock();
 
     /**
      * Does a fast move of aSource to aDest.  The previous value in
-     * aDest is cleanly destroyed, and aSource is cleared.  *aChanged
-     * is set true if, before the copy, the value at aSource compares
-     * unequal to the value at aDest.
-     *
-     * This can only be used for non-shorthand properties.  The caller
-     * must make sure that the source and destination locations point
-     * to the right kind of objects for the property id.
+     * aDest is cleanly destroyed, and aSource is cleared.  Returns
+     * true if, before the copy, the value at aSource compared unequal
+     * to the value at aDest; false otherwise.
      */
-    static void MoveValue(void *aSource, void *aDest, nsCSSProperty aPropID,
-                          PRBool* aChanged);
+    static PRBool MoveValue(nsCSSValue* aSource, nsCSSValue* aDest);
+
 
 private:
     PRInt32 mStyleBits; // the structs for which we have data, according to
                         // |nsCachedStyleData::GetBitForSID|.
 
     enum { block_chars = 4 }; // put 4 chars in the definition of the class
                               // to ensure size not inflated by alignment
 
@@ -223,28 +208,26 @@ public:
 
     /**
      * Transfer the state for |aPropID| (which may be a shorthand)
      * from |aFromBlock| to this block.  The property being transferred
      * is !important if |aIsImportant| is true, and should replace an
      * existing !important property regardless of its own importance
      * if |aOverrideImportant| is true.
      *
-     * Sets |*aChanged| to true if something changed, leaves it
-     * unmodified otherwise.  Calls |ValueAppended| on |aDeclaration|
-     * if the property was not previously set, or in any case if
-     * |aMustCallValueAppended| is true.
+     * Returns true if something changed, false otherwise.  Calls
+     * |ValueAppended| on |aDeclaration| if the property was not
+     * previously set, or in any case if |aMustCallValueAppended| is true.
      */
-    void TransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
-                           nsCSSProperty aPropID,
-                           PRBool aIsImportant,
-                           PRBool aOverrideImportant,
-                           PRBool aMustCallValueAppended,
-                           mozilla::css::Declaration* aDeclaration,
-                           PRBool* aChanged);
+    PRBool TransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
+                             nsCSSProperty aPropID,
+                             PRBool aIsImportant,
+                             PRBool aOverrideImportant,
+                             PRBool aMustCallValueAppended,
+                             mozilla::css::Declaration* aDeclaration);
 
     void AssertInitialState() {
 #ifdef DEBUG
         DoAssertInitialState();
 #endif
     }
 
 private:
@@ -257,23 +240,22 @@ private:
     };
     ComputeSizeResult ComputeSize();
 
     void DoExpand(nsCSSCompressedDataBlock *aBlock, PRBool aImportant);
 
     /**
      * Worker for TransferFromBlock; cannot be used with shorthands.
      */
-    void DoTransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
-                             nsCSSProperty aPropID,
-                             PRBool aIsImportant,
-                             PRBool aOverrideImportant,
-                             PRBool aMustCallValueAppended,
-                             mozilla::css::Declaration* aDeclaration,
-                             PRBool* aChanged);
+    PRBool DoTransferFromBlock(nsCSSExpandedDataBlock& aFromBlock,
+                               nsCSSProperty aPropID,
+                               PRBool aIsImportant,
+                               PRBool aOverrideImportant,
+                               PRBool aMustCallValueAppended,
+                               mozilla::css::Declaration* aDeclaration);
 
 #ifdef DEBUG
     void DoAssertInitialState();
 #endif
 
     // XXX These could probably be pointer-to-member, if the casting can
     // be done correctly.
     static const size_t kOffsetTable[];
@@ -288,22 +270,22 @@ private:
     /*
      * mPropertiesImportant indicates which properties are '!important'.
      */
     nsCSSPropertySet mPropertiesImportant;
 
 public:
     /*
      * Return the storage location within |this| of the value of the
-     * property (i.e., either an |nsCSSValue*|, |nsCSSRect*|, or
-     * |nsCSSValueList**| (etc.).
+     * property |aProperty|.
      */
-    void* PropertyAt(nsCSSProperty aProperty) {
+    nsCSSValue* PropertyAt(nsCSSProperty aProperty) {
         size_t offset = nsCSSExpandedDataBlock::kOffsetTable[aProperty];
-        return reinterpret_cast<void*>(reinterpret_cast<char*>(this) + offset);
+        return reinterpret_cast<nsCSSValue*>(reinterpret_cast<char*>(this) +
+                                             offset);
     }
 
     void SetPropertyBit(nsCSSProperty aProperty) {
         mPropertiesSet.AddProperty(aProperty);
     }
 
     void ClearPropertyBit(nsCSSProperty aProperty) {
         mPropertiesSet.RemoveProperty(aProperty);
--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -1119,25 +1119,25 @@ CSSParserImpl::ParseProperty(const nsCSS
   } else {
 
     // We know we don't need to force a ValueAppended call for the new
     // value.  So if we are not processing a shorthand, and there's
     // already a value for this property in the declaration at the
     // same importance level, then we can just copy our parsed value
     // directly into the declaration without going through the whole
     // expand/compress thing.
-    void* valueSlot = aDeclaration->SlotForValue(aPropID, aIsImportant);
+    nsCSSValue* valueSlot = aDeclaration->SlotForValue(aPropID, aIsImportant);
     if (valueSlot) {
-      nsCSSCompressedDataBlock::MoveValue(mTempData.PropertyAt(aPropID),
-                                          valueSlot, aPropID, aChanged);
+      *aChanged = nsCSSCompressedDataBlock::
+        MoveValue(mTempData.PropertyAt(aPropID), valueSlot);
       mTempData.ClearPropertyBit(aPropID);
     } else {
       aDeclaration->ExpandTo(&mData);
-      mData.TransferFromBlock(mTempData, aPropID, aIsImportant, PR_TRUE,
-                              PR_FALSE, aDeclaration, aChanged);
+      *aChanged = mData.TransferFromBlock(mTempData, aPropID, aIsImportant,
+                                          PR_TRUE, PR_FALSE, aDeclaration);
       aDeclaration->CompressFrom(&mData);
     }
     CLEAR_ERROR();
   }
 
   mTempData.AssertInitialState();
 
   nsresult result = mScanner.GetLowLevelError();
@@ -4026,19 +4026,20 @@ CSSParserImpl::ParseDeclaration(css::Dec
     }
     REPORT_UNEXPECTED(PEDeclDropped);
     OUTPUT_ERROR();
     mTempData.ClearProperty(propID);
     mTempData.AssertInitialState();
     return PR_FALSE;
   }
 
-  mData.TransferFromBlock(mTempData, propID, status == ePriority_Important,
-                          PR_FALSE, aMustCallValueAppended,
-                          aDeclaration, aChanged);
+  *aChanged |= mData.TransferFromBlock(mTempData, propID,
+                                       status == ePriority_Important,
+                                       PR_FALSE, aMustCallValueAppended,
+                                       aDeclaration);
   return PR_TRUE;
 }
 
 static const nsCSSProperty kBorderTopIDs[] = {
   eCSSProperty_border_top_width,
   eCSSProperty_border_top_style,
   eCSSProperty_border_top_color
 };
@@ -4992,19 +4993,16 @@ CSSParserImpl::ParseChoice(nsCSSValue aV
   return found;
 }
 
 void
 CSSParserImpl::AppendValue(nsCSSProperty aPropID, const nsCSSValue& aValue)
 {
   NS_ASSERTION(0 <= aPropID && aPropID < eCSSProperty_COUNT_no_shorthands,
                "property out of range");
-  NS_ASSERTION(nsCSSProps::kTypeTable[aPropID] == eCSSType_Value,
-               nsPrintfCString(64, "type error (property=\'%s\')",
-                             nsCSSProps::GetStringValue(aPropID).get()).get());
   nsCSSValue& storage =
       *static_cast<nsCSSValue*>(mTempData.PropertyAt(aPropID));
   storage = aValue;
   mTempData.SetPropertyBit(aPropID);
 }
 
 /**
  * Parse a "box" property. Box properties have 1 to 4 values. When less
--- a/layout/style/nsCSSPropList.h
+++ b/layout/style/nsCSSPropList.h
@@ -68,33 +68,30 @@
 
   4. 'flags', a bitfield containing CSS_PROPERTY_* flags.
 
   5. 'datastruct' says which nsRuleData* struct this property goes in.
 
   6. 'member' gives the name of the member variable in the nsRuleData
   struct.
 
-  7. 'type' gives the |nsCSSType| of the data in the nsRuleData struct
-  and in the css::Declaration backend.
-
-  8. 'kwtable', which is either nsnull or the name of the appropriate
+  7. 'kwtable', which is either nsnull or the name of the appropriate
   keyword table member of class nsCSSProps, for use in
   nsCSSProps::LookupPropertyValue.
 
-  9. 'stylestruct_' [used only for CSS_PROP, not CSS_PROP_*] gives the
+  8. 'stylestruct_' [used only for CSS_PROP, not CSS_PROP_*] gives the
   name of the style struct.  Can be used to make nsStyle##stylestruct_
   and eStyleStruct_##stylestruct_
 
-  10. 'stylestructoffset_' [not used for CSS_PROP_BACKENDONLY] gives the
+  9. 'stylestructoffset_' [not used for CSS_PROP_BACKENDONLY] gives the
   result of offsetof(nsStyle*, member).  Ignored (and generally
   CSS_PROP_NO_OFFSET, or -1) for properties whose animtype_ is
   eStyleAnimType_None.
 
-  11. 'animtype_' [not used for CSS_PROP_BACKENDONLY] gives the
+  10. 'animtype_' [not used for CSS_PROP_BACKENDONLY] gives the
   animation type (see nsStyleAnimType) of this property.
 
   CSS_PROP_SHORTHAND only takes 1-4.
 
  ******/
 
 
 /*************************************************************************/
@@ -113,149 +110,149 @@
 // exclude internal properties that are not represented in the DOM (only
 // the DOM style code defines this).
 
 // A caller who wants all the properties can define the |CSS_PROP|
 // macro.
 #ifdef CSS_PROP
 
 #define USED_CSS_PROP
-#define CSS_PROP_FONT(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Font, stylestructoffset_, animtype_)
-#define CSS_PROP_COLOR(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Color, stylestructoffset_, animtype_)
-#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Background, stylestructoffset_, animtype_)
-#define CSS_PROP_LIST(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, List, stylestructoffset_, animtype_)
-#define CSS_PROP_POSITION(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Position, stylestructoffset_, animtype_)
-#define CSS_PROP_TEXT(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Text, stylestructoffset_, animtype_)
-#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, TextReset, stylestructoffset_, animtype_)
-#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Display, stylestructoffset_, animtype_)
-#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Visibility, stylestructoffset_, animtype_)
-#define CSS_PROP_CONTENT(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Content, stylestructoffset_, animtype_)
-#define CSS_PROP_QUOTES(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Quotes, stylestructoffset_, animtype_)
-#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, UserInterface, stylestructoffset_, animtype_)
-#define CSS_PROP_UIRESET(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, UIReset, stylestructoffset_, animtype_)
-#define CSS_PROP_TABLE(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Table, stylestructoffset_, animtype_)
-#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, TableBorder, stylestructoffset_, animtype_)
-#define CSS_PROP_MARGIN(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Margin, stylestructoffset_, animtype_)
-#define CSS_PROP_PADDING(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Padding, stylestructoffset_, animtype_)
-#define CSS_PROP_BORDER(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Border, stylestructoffset_, animtype_)
-#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Outline, stylestructoffset_, animtype_)
-#define CSS_PROP_XUL(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, XUL, stylestructoffset_, animtype_)
-#define CSS_PROP_COLUMN(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, Column, stylestructoffset_, animtype_)
-#define CSS_PROP_SVG(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, SVG, stylestructoffset_, animtype_)
-#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, SVGReset, stylestructoffset_, animtype_)
+#define CSS_PROP_FONT(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Font, stylestructoffset_, animtype_)
+#define CSS_PROP_COLOR(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Color, stylestructoffset_, animtype_)
+#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Background, stylestructoffset_, animtype_)
+#define CSS_PROP_LIST(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, List, stylestructoffset_, animtype_)
+#define CSS_PROP_POSITION(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Position, stylestructoffset_, animtype_)
+#define CSS_PROP_TEXT(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Text, stylestructoffset_, animtype_)
+#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, TextReset, stylestructoffset_, animtype_)
+#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Display, stylestructoffset_, animtype_)
+#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Visibility, stylestructoffset_, animtype_)
+#define CSS_PROP_CONTENT(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Content, stylestructoffset_, animtype_)
+#define CSS_PROP_QUOTES(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Quotes, stylestructoffset_, animtype_)
+#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, UserInterface, stylestructoffset_, animtype_)
+#define CSS_PROP_UIRESET(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, UIReset, stylestructoffset_, animtype_)
+#define CSS_PROP_TABLE(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Table, stylestructoffset_, animtype_)
+#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, TableBorder, stylestructoffset_, animtype_)
+#define CSS_PROP_MARGIN(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Margin, stylestructoffset_, animtype_)
+#define CSS_PROP_PADDING(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Padding, stylestructoffset_, animtype_)
+#define CSS_PROP_BORDER(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Border, stylestructoffset_, animtype_)
+#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Outline, stylestructoffset_, animtype_)
+#define CSS_PROP_XUL(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, XUL, stylestructoffset_, animtype_)
+#define CSS_PROP_COLUMN(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, Column, stylestructoffset_, animtype_)
+#define CSS_PROP_SVG(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, SVG, stylestructoffset_, animtype_)
+#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, SVGReset, stylestructoffset_, animtype_)
 
 // For properties that are stored in the CSS backend but are not
 // computed.  An includer may define this in addition to CSS_PROP, but
 // otherwise we treat it as the same.
 #ifndef CSS_PROP_BACKENDONLY
-#define CSS_PROP_BACKENDONLY(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, BackendOnly, CSS_PROP_NO_OFFSET, eStyleAnimType_None)
+#define CSS_PROP_BACKENDONLY(name_, id_, method_, flags_, datastruct_, member_, kwtable_) CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, kwtable_, BackendOnly, CSS_PROP_NO_OFFSET, eStyleAnimType_None)
 #define DEFINED_CSS_PROP_BACKENDONLY
 #endif
 
 #else /* !defined(CSS_PROP) */
 
 // An includer who does not define CSS_PROP can define any or all of the
 // per-struct macros that are equivalent to it, and the rest will be
 // ignored.
 
 #ifndef CSS_PROP_FONT
-#define CSS_PROP_FONT(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_FONT(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_FONT
 #endif
 #ifndef CSS_PROP_COLOR
-#define CSS_PROP_COLOR(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_COLOR(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_COLOR
 #endif
 #ifndef CSS_PROP_BACKGROUND
-#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_BACKGROUND(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_BACKGROUND
 #endif
 #ifndef CSS_PROP_LIST
-#define CSS_PROP_LIST(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_LIST(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_LIST
 #endif
 #ifndef CSS_PROP_POSITION
-#define CSS_PROP_POSITION(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_POSITION(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_POSITION
 #endif
 #ifndef CSS_PROP_TEXT
-#define CSS_PROP_TEXT(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TEXT(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TEXT
 #endif
 #ifndef CSS_PROP_TEXTRESET
-#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TEXTRESET(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TEXTRESET
 #endif
 #ifndef CSS_PROP_DISPLAY
-#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_DISPLAY(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_DISPLAY
 #endif
 #ifndef CSS_PROP_VISIBILITY
-#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_VISIBILITY(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_VISIBILITY
 #endif
 #ifndef CSS_PROP_CONTENT
-#define CSS_PROP_CONTENT(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_CONTENT(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_CONTENT
 #endif
 #ifndef CSS_PROP_QUOTES
-#define CSS_PROP_QUOTES(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_QUOTES(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_QUOTES
 #endif
 #ifndef CSS_PROP_USERINTERFACE
-#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_USERINTERFACE(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_USERINTERFACE
 #endif
 #ifndef CSS_PROP_UIRESET
-#define CSS_PROP_UIRESET(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_UIRESET(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_UIRESET
 #endif
 #ifndef CSS_PROP_TABLE
-#define CSS_PROP_TABLE(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TABLE(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TABLE
 #endif
 #ifndef CSS_PROP_TABLEBORDER
-#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_TABLEBORDER(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_TABLEBORDER
 #endif
 #ifndef CSS_PROP_MARGIN
-#define CSS_PROP_MARGIN(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_MARGIN(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_MARGIN
 #endif
 #ifndef CSS_PROP_PADDING
-#define CSS_PROP_PADDING(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_PADDING(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_PADDING
 #endif
 #ifndef CSS_PROP_BORDER
-#define CSS_PROP_BORDER(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_BORDER(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_BORDER
 #endif
 #ifndef CSS_PROP_OUTLINE
-#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_OUTLINE(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_OUTLINE
 #endif
 #ifndef CSS_PROP_XUL
-#define CSS_PROP_XUL(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_XUL(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_XUL
 #endif
 #ifndef CSS_PROP_COLUMN
-#define CSS_PROP_COLUMN(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_COLUMN(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_COLUMN
 #endif
 #ifndef CSS_PROP_SVG
-#define CSS_PROP_SVG(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_SVG(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_SVG
 #endif
 #ifndef CSS_PROP_SVGRESET
-#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) /* nothing */
+#define CSS_PROP_SVGRESET(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) /* nothing */
 #define DEFINED_CSS_PROP_SVGRESET
 #endif
 
 #ifndef CSS_PROP_BACKENDONLY
-#define CSS_PROP_BACKENDONLY(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_) /* nothing */
+#define CSS_PROP_BACKENDONLY(name_, id_, method_, flags_, datastruct_, member_, kwtable_) /* nothing */
 #define DEFINED_CSS_PROP_BACKENDONLY
 #endif
 
 #endif /* !defined(CSS_PROP) */
 
 /*************************************************************************/
 
 // For notes XXX bug 3935 below, the names being parsed do not correspond
@@ -292,273 +289,251 @@
 
 CSS_PROP_DISPLAY(
     -moz-appearance,
     appearance,
     MozAppearance,
     0,
     Display,
     mAppearance,
-    eCSSType_Value,
     kAppearanceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     -moz-border-radius,
     _moz_border_radius,
     MozBorderRadius,
     0)
 CSS_PROP_BORDER(
     -moz-border-radius-topleft,
     _moz_border_radius_topLeft,
     MozBorderRadiusTopleft,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderRadius.mTopLeft,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_TopLeft)
 CSS_PROP_BORDER(
     -moz-border-radius-topright,
     _moz_border_radius_topRight,
     MozBorderRadiusTopright,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderRadius.mTopRight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_TopRight)
 CSS_PROP_BORDER(
     -moz-border-radius-bottomright,
     _moz_border_radius_bottomRight,
     MozBorderRadiusBottomright,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderRadius.mBottomRight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_BottomRight)
 CSS_PROP_BORDER(
     -moz-border-radius-bottomleft,
     _moz_border_radius_bottomLeft,
     MozBorderRadiusBottomleft,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderRadius.mBottomLeft,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleBorder, mBorderRadius),
     eStyleAnimType_Corner_BottomLeft)
 CSS_PROP_SHORTHAND(
     -moz-outline-radius,
     _moz_outline_radius,
     MozOutlineRadius,
     0)
 CSS_PROP_OUTLINE(
     -moz-outline-radius-topleft,
     _moz_outline_radius_topLeft,
     MozOutlineRadiusTopleft,
     0,
     Margin,
     mOutlineRadius.mTopLeft,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_TopLeft)
 CSS_PROP_OUTLINE(
     -moz-outline-radius-topright,
     _moz_outline_radius_topRight,
     MozOutlineRadiusTopright,
     0,
     Margin,
     mOutlineRadius.mTopRight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_TopRight)
 CSS_PROP_OUTLINE(
     -moz-outline-radius-bottomright,
     _moz_outline_radius_bottomRight,
     MozOutlineRadiusBottomright,
     0,
     Margin,
     mOutlineRadius.mBottomRight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_BottomRight)
 CSS_PROP_OUTLINE(
     -moz-outline-radius-bottomleft,
     _moz_outline_radius_bottomLeft,
     MozOutlineRadiusBottomleft,
     0,
     Margin,
     mOutlineRadius.mBottomLeft,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleOutline, mOutlineRadius),
     eStyleAnimType_Corner_BottomLeft)
 CSS_PROP_TEXT(
     -moz-tab-size,
     _moz_tab_size,
     MozTabSize,
     0,
     Text,
     mTabSize,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleText, mTabSize),
     eStyleAnimType_None)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -x-system-font,
     _x_system_font,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mSystemFont,
-    eCSSType_Value,
     kFontKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_BACKENDONLY(
     azimuth,
     azimuth,
     Azimuth,
     0,
     Aural,
     mAzimuth,
-    eCSSType_Value,
     kAzimuthKTable)
 CSS_PROP_SHORTHAND(
     background,
     background,
     Background,
     0)
 CSS_PROP_BACKGROUND(
     background-attachment,
     background_attachment,
     BackgroundAttachment,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Color,
     mBackAttachment,
-    eCSSType_Value,
     kBackgroundAttachmentKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKGROUND(
     background-clip,
     background_clip,
     BackgroundClip,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Color,
     mBackClip,
-    eCSSType_Value,
     kBackgroundOriginKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKGROUND(
     background-color,
     background_color,
     BackgroundColor,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Color,
     mBackColor,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleBackground, mBackgroundColor),
     eStyleAnimType_Color)
 CSS_PROP_BACKGROUND(
     background-image,
     background_image,
     BackgroundImage,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
         CSS_PROPERTY_START_IMAGE_LOADS,
     Color,
     mBackImage,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKGROUND(
     -moz-background-inline-policy,
     _moz_background_inline_policy,
     MozBackgroundInlinePolicy,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Color,
     mBackInlinePolicy,
-    eCSSType_Value,
     kBackgroundInlinePolicyKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKGROUND(
     background-origin,
     background_origin,
     BackgroundOrigin,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Color,
     mBackOrigin,
-    eCSSType_Value,
     kBackgroundOriginKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKGROUND(
     background-position,
     background_position,
     BackgroundPosition,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Color,
     mBackPosition,
-    eCSSType_Value,
     kBackgroundPositionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BACKGROUND(
     background-repeat,
     background_repeat,
     BackgroundRepeat,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Color,
     mBackRepeat,
-    eCSSType_Value,
     kBackgroundRepeatKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKGROUND(
     background-size,
     background_size,
     BackgroundSize,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Color,
     mBackSize,
-    eCSSType_Value,
     kBackgroundSizeKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_DISPLAY(
     -moz-binding,
     binding,
     MozBinding,
     0,
     Display,
     mBinding,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_SHORTHAND(
     border,
     border,
     Border,
     0)
@@ -570,62 +545,57 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_BORDER(
     border-bottom-color,
     border_bottom_color,
     BorderBottomColor,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderColor.mBottom,
-    eCSSType_Value,
     kBorderColorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BORDER(
     -moz-border-bottom-colors,
     border_bottom_colors,
     MozBorderBottomColors,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderColors.mBottom,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-bottom-style,
     border_bottom_style,
     BorderBottomStyle,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderStyle.mBottom,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)  // on/off will need reflow
 CSS_PROP_BORDER(
     border-bottom-width,
     border_bottom_width,
     BorderBottomWidth,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderWidth.mBottom,
-    eCSSType_Value,
     kBorderWidthKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_TABLEBORDER(
     border-collapse,
     border_collapse,
     BorderCollapse,
     0,
     Table,
     mBorderCollapse,
-    eCSSType_Value,
     kBorderCollapseKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-color,
     border_color,
     BorderColor,
     0)
@@ -642,17 +612,16 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_BORDER(
     border-end-color-value,
     border_end_color_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderEndColor,
-    eCSSType_Value,
     kBorderColorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     -moz-border-end-style,
     border_end_style,
     MozBorderEndStyle,
@@ -660,17 +629,16 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_BORDER(
     border-end-style-value,
     border_end_style_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderEndStyle,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     -moz-border-end-width,
     border_end_width,
     MozBorderEndWidth,
@@ -678,31 +646,29 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_BORDER(
     border-end-width-value,
     border_end_width_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderEndWidth,
-    eCSSType_Value,
     kBorderWidthKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_BORDER(
     -moz-border-image,
     border_image,
     MozBorderImage,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_START_IMAGE_LOADS |
         CSS_PROPERTY_IMAGE_IS_IN_ARRAY_0,
     Margin,
     mBorderImage,
-    eCSSType_Value,
     kBorderImageKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-left,
     border_left,
     BorderLeft,
     0)
@@ -716,56 +682,52 @@ CSS_PROP_BORDER(
     border-left-color-value,
     border_left_color_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mBorderColor.mLeft,
-    eCSSType_Value,
     kBorderColorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BORDER(
     border-left-color-ltr-source,
     border_left_color_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderLeftColorLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-left-color-rtl-source,
     border_left_color_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderLeftColorRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_BORDER(
     -moz-border-left-colors,
     border_left_colors,
     MozBorderLeftColors,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderColors.mLeft,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-left-style,
     border_left_style,
     BorderLeftStyle,
     0) // on/off will need reflow
@@ -773,41 +735,38 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_BORDER(
     border-left-style-value,
     border_left_style_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mBorderStyle.mLeft,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-left-style-ltr-source,
     border_left_style_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderLeftStyleLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-left-style-rtl-source,
     border_left_style_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderLeftStyleRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     border-left-width,
     border_left_width,
     BorderLeftWidth,
@@ -816,41 +775,38 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_BORDER(
     border-left-width-value,
     border_left_width_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mBorderWidth.mLeft,
-    eCSSType_Value,
     kBorderWidthKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BORDER(
     border-left-width-ltr-source,
     border_left_width_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderLeftWidthLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-left-width-rtl-source,
     border_left_width_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderLeftWidthRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     border-right,
     border_right,
     BorderRight,
@@ -865,56 +821,52 @@ CSS_PROP_BORDER(
     border-right-color-value,
     border_right_color_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mBorderColor.mRight,
-    eCSSType_Value,
     kBorderColorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BORDER(
     border-right-color-ltr-source,
     border_right_color_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderRightColorLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-right-color-rtl-source,
     border_right_color_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderRightColorRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_BORDER(
     -moz-border-right-colors,
     border_right_colors,
     MozBorderRightColors,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderColors.mRight,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     border-right-style,
     border_right_style,
     BorderRightStyle,
     0) // on/off will need reflow
@@ -922,41 +874,38 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_BORDER(
     border-right-style-value,
     border_right_style_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mBorderStyle.mRight,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-right-style-ltr-source,
     border_right_style_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderRightStyleLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-right-style-rtl-source,
     border_right_style_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderRightStyleRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     border-right-width,
     border_right_width,
     BorderRightWidth,
@@ -965,53 +914,49 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_BORDER(
     border-right-width-value,
     border_right_width_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mBorderWidth.mRight,
-    eCSSType_Value,
     kBorderWidthKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BORDER(
     border-right-width-ltr-source,
     border_right_width_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderRightWidthLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-right-width-rtl-source,
     border_right_width_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mBorderRightWidthRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_TABLEBORDER(
     border-spacing,
     border_spacing,
     BorderSpacing,
     0,
     Table,
     mBorderSpacing,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom) // XXX bug 3935
 CSS_PROP_SHORTHAND(
     -moz-border-start,
     border_start,
     MozBorderStart,
     0)
@@ -1023,17 +968,16 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_BORDER(
     border-start-color-value,
     border_start_color_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderStartColor,
-    eCSSType_Value,
     kBorderColorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     -moz-border-start-style,
     border_start_style,
     MozBorderStartStyle,
@@ -1041,17 +985,16 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_BORDER(
     border-start-style-value,
     border_start_style_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderStartStyle,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     -moz-border-start-width,
     border_start_width,
     MozBorderStartWidth,
@@ -1059,17 +1002,16 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_BORDER(
     border-start-width-value,
     border_start_width_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderStartWidth,
-    eCSSType_Value,
     kBorderWidthKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     border-style,
     border_style,
     BorderStyle,
@@ -1082,594 +1024,544 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_BORDER(
     border-top-color,
     border_top_color,
     BorderTopColor,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderColor.mTop,
-    eCSSType_Value,
     kBorderColorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_BORDER(
     -moz-border-top-colors,
     border_top_colors,
     MozBorderTopColors,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBorderColors.mTop,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     border-top-style,
     border_top_style,
     BorderTopStyle,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderStyle.mTop,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)  // on/off will need reflow
 CSS_PROP_BORDER(
     border-top-width,
     border_top_width,
     BorderTopWidth,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mBorderWidth.mTop,
-    eCSSType_Value,
     kBorderWidthKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_SHORTHAND(
     border-width,
     border_width,
     BorderWidth,
     0)
 CSS_PROP_POSITION(
     bottom,
     bottom,
     Bottom,
     0,
     Position,
     mOffset.mBottom,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Bottom)
 CSS_PROP_BORDER(
     -moz-box-shadow,
     box_shadow,
     MozBoxShadow,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mBoxShadow,
-    eCSSType_Value,
     kBoxShadowTypeKTable,
     offsetof(nsStyleBorder, mBoxShadow),
     eStyleAnimType_Shadow)
 CSS_PROP_POSITION(
     -moz-box-sizing,
     box_sizing,
     MozBoxSizing,
     0,
     Position,
     mBoxSizing,
-    eCSSType_Value,
     kBoxSizingKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_TABLEBORDER(
     caption-side,
     caption_side,
     CaptionSide,
     0,
     Table,
     mCaptionSide,
-    eCSSType_Value,
     kCaptionSideKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     clear,
     clear,
     Clear,
     0,
     Display,
     mClear,
-    eCSSType_Value,
     kClearKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     clip,
     clip,
     Clip,
     0,
     Display,
     mClip,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleDisplay, mClip),
     eStyleAnimType_Custom)
 CSS_PROP_COLOR(
     color,
     color,
     Color,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Color,
     mColor,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleColor, mColor),
     eStyleAnimType_Color)
 CSS_PROP_COLUMN(
     -moz-column-count,
     _moz_column_count,
     MozColumnCount,
     0,
     Column,
     mColumnCount,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleColumn, mColumnCount),
     eStyleAnimType_Custom)
 CSS_PROP_COLUMN(
     -moz-column-width,
     _moz_column_width,
     MozColumnWidth,
     0,
     Column,
     mColumnWidth,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleColumn, mColumnWidth),
     eStyleAnimType_Coord)
 CSS_PROP_COLUMN(
     -moz-column-gap,
     _moz_column_gap,
     MozColumnGap,
     0,
     Column,
     mColumnGap,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleColumn, mColumnGap),
     eStyleAnimType_Coord)
 CSS_PROP_SHORTHAND(
     -moz-column-rule,
     _moz_column_rule,
     MozColumnRule,
     0)
 CSS_PROP_COLUMN(
     -moz-column-rule-color,
     _moz_column_rule_color,
     MozColumnRuleColor,
     CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Column,
     mColumnRuleColor,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_COLUMN(
     -moz-column-rule-style,
     _moz_column_rule_style,
     MozColumnRuleStyle,
     0,
     Column,
     mColumnRuleStyle,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_COLUMN(
     -moz-column-rule-width,
     _moz_column_rule_width,
     MozColumnRuleWidth,
     0,
     Column,
     mColumnRuleWidth,
-    eCSSType_Value,
     kBorderWidthKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_CONTENT(
     content,
     content,
     Content,
     CSS_PROPERTY_START_IMAGE_LOADS,
     Content,
     mContent,
-    eCSSType_Value,
     kContentKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_CONTENT(
     counter-increment,
     counter_increment,
     CounterIncrement,
     0,
     Content,
     mCounterIncrement,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 137285
 CSS_PROP_CONTENT(
     counter-reset,
     counter_reset,
     CounterReset,
     0,
     Content,
     mCounterReset,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 137285
 CSS_PROP_SHORTHAND(
     cue,
     cue,
     Cue,
     0)
 CSS_PROP_BACKENDONLY(
     cue-after,
     cue_after,
     CueAfter,
     0,
     Aural,
     mCueAfter,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_BACKENDONLY(
     cue-before,
     cue_before,
     CueBefore,
     0,
     Aural,
     mCueBefore,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_USERINTERFACE(
     cursor,
     cursor,
     Cursor,
     CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
         CSS_PROPERTY_START_IMAGE_LOADS |
         CSS_PROPERTY_IMAGE_IS_IN_ARRAY_0,
     UserInterface,
     mCursor,
-    eCSSType_Value,
     kCursorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_VISIBILITY(
     direction,
     direction,
     Direction,
     0,
     Display,
     mDirection,
-    eCSSType_Value,
     kDirectionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     display,
     display,
     Display,
     0,
     Display,
     mDisplay,
-    eCSSType_Value,
     kDisplayKTable,
     offsetof(nsStyleDisplay, mDisplay),
     eStyleAnimType_EnumU8)
 CSS_PROP_BACKENDONLY(
     elevation,
     elevation,
     Elevation,
     0,
     Aural,
     mElevation,
-    eCSSType_Value,
     kElevationKTable)
 CSS_PROP_TABLEBORDER(
     empty-cells,
     empty_cells,
     EmptyCells,
     0,
     Table,
     mEmptyCells,
-    eCSSType_Value,
     kEmptyCellsKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     float,
     float,
     CssFloat,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Display,
     mFloat,
-    eCSSType_Value,
     kFloatKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BORDER(
     -moz-float-edge,
     float_edge,
     MozFloatEdge,
     0,
     Margin,
     mFloatEdge,
-    eCSSType_Value,
     kFloatEdgeKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_SHORTHAND(
     font,
     font,
     Font,
     0)
 CSS_PROP_FONT(
     font-family,
     font_family,
     FontFamily,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mFamily,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     -moz-font-feature-settings,
     font_feature_settings,
     MozFontFeatureSettings,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mFontFeatureSettings,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     -moz-font-language-override,
     font_language_override,
     MozFontLanguageOverride,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mFontLanguageOverride,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     font-size,
     font_size,
     FontSize,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mSize,
-    eCSSType_Value,
     kFontSizeKTable,
     // Note that mSize is the correct place for *reading* the computed value,
     // but setting it requires setting mFont.size as well.
     offsetof(nsStyleFont, mSize),
     eStyleAnimType_nscoord)
 CSS_PROP_FONT(
     font-size-adjust,
     font_size_adjust,
     FontSizeAdjust,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mSizeAdjust,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleFont, mFont.sizeAdjust),
     eStyleAnimType_float)
 CSS_PROP_FONT(
     font-stretch,
     font_stretch,
     FontStretch,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mStretch,
-    eCSSType_Value,
     kFontStretchKTable,
     offsetof(nsStyleFont, mFont.stretch),
     eStyleAnimType_Custom)
 CSS_PROP_FONT(
     font-style,
     font_style,
     FontStyle,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mStyle,
-    eCSSType_Value,
     kFontStyleKTable,
     offsetof(nsStyleFont, mFont.style),
     eStyleAnimType_EnumU8)
 CSS_PROP_FONT(
     font-variant,
     font_variant,
     FontVariant,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mVariant,
-    eCSSType_Value,
     kFontVariantKTable,
     offsetof(nsStyleFont, mFont.variant),
     eStyleAnimType_EnumU8)
 CSS_PROP_FONT(
     font-weight,
     font_weight,
     FontWeight,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Font,
     mWeight,
-    eCSSType_Value,
     kFontWeightKTable,
     offsetof(nsStyleFont, mFont.weight),
     eStyleAnimType_Custom)
 CSS_PROP_UIRESET(
     -moz-force-broken-image-icon,
     force_broken_image_icon,
     MozForceBrokenImageIcon,
     0,
     UserInterface,
     mForceBrokenImageIcon,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // bug 58646
 CSS_PROP_POSITION(
     height,
     height,
     Height,
     0,
     Position,
     mHeight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mHeight),
     eStyleAnimType_Coord)
 CSS_PROP_LIST(
     -moz-image-region,
     image_region,
     MozImageRegion,
     0,
     List,
     mImageRegion,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleList, mImageRegion),
     eStyleAnimType_Custom)
 CSS_PROP_UIRESET(
     ime-mode,
     ime_mode,
     ImeMode,
     0,
     UserInterface,
     mIMEMode,
-    eCSSType_Value,
     kIMEModeKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_POSITION(
     left,
     left,
     Left,
     0,
     Position,
     mOffset.mLeft,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Left)
 CSS_PROP_TEXT(
     letter-spacing,
     letter_spacing,
     LetterSpacing,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Text,
     mLetterSpacing,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleText, mLetterSpacing),
     eStyleAnimType_Coord)
 CSS_PROP_TEXT(
     line-height,
     line_height,
     LineHeight,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Text,
     mLineHeight,
-    eCSSType_Value,
     kLineHeightKTable,
     offsetof(nsStyleText, mLineHeight),
     eStyleAnimType_Coord)
 CSS_PROP_SHORTHAND(
     list-style,
     list_style,
     ListStyle,
     0)
 CSS_PROP_LIST(
     list-style-image,
     list_style_image,
     ListStyleImage,
     CSS_PROPERTY_START_IMAGE_LOADS,
     List,
     mImage,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LIST(
     list-style-position,
     list_style_position,
     ListStylePosition,
     0,
     List,
     mPosition,
-    eCSSType_Value,
     kListStylePositionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_LIST(
     list-style-type,
     list_style_type,
     ListStyleType,
     0,
     List,
     mType,
-    eCSSType_Value,
     kListStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     margin,
     margin,
     Margin,
     0)
 CSS_PROP_MARGIN(
     margin-bottom,
     margin_bottom,
     MarginBottom,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mMargin.mBottom,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Bottom)
 CSS_PROP_SHORTHAND(
     -moz-margin-end,
     margin_end,
     MozMarginEnd,
     0)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_MARGIN(
     margin-end-value,
     margin_end_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mMarginEnd,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     margin-left,
     margin_left,
     MarginLeft,
@@ -1678,41 +1570,38 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_MARGIN(
     margin-left-value,
     margin_left_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mMargin.mLeft,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Left)
 CSS_PROP_MARGIN(
     margin-left-ltr-source,
     margin_left_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mMarginLeftLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_MARGIN(
     margin-left-rtl-source,
     margin_left_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mMarginLeftRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     margin-right,
     margin_right,
     MarginRight,
@@ -1721,41 +1610,38 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_MARGIN(
     margin-right-value,
     margin_right_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mMargin.mRight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Right)
 CSS_PROP_MARGIN(
     margin-right-ltr-source,
     margin_right_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mMarginRightLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_MARGIN(
     margin-right-rtl-source,
     margin_right_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mMarginRightRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     -moz-margin-start,
     margin_start,
     MozMarginStart,
@@ -1763,222 +1649,204 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_MARGIN(
     margin-start-value,
     margin_start_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mMarginStart,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_MARGIN(
     margin-top,
     margin_top,
     MarginTop,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mMargin.mTop,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleMargin, mMargin),
     eStyleAnimType_Sides_Top)
 CSS_PROP_CONTENT(
     marker-offset,
     marker_offset,
     MarkerOffset,
     0,
     Content,
     mMarkerOffset,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleContent, mMarkerOffset),
     eStyleAnimType_Coord)
 CSS_PROP_BACKENDONLY(
     marks,
     marks,
     Marks,
     0,
     Page,
     mMarks,
-    eCSSType_Value,
     kPageMarksKTable)
 CSS_PROP_POSITION(
     max-height,
     max_height,
     MaxHeight,
     0,
     Position,
     mMaxHeight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mMaxHeight),
     eStyleAnimType_Coord)
 CSS_PROP_POSITION(
     max-width,
     max_width,
     MaxWidth,
     0,
     Position,
     mMaxWidth,
-    eCSSType_Value,
     kWidthKTable,
     offsetof(nsStylePosition, mMaxWidth),
     eStyleAnimType_Coord)
 CSS_PROP_POSITION(
     min-height,
     min_height,
     MinHeight,
     0,
     Position,
     mMinHeight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mMinHeight),
     eStyleAnimType_Coord)
 CSS_PROP_POSITION(
     min-width,
     min_width,
     MinWidth,
     0,
     Position,
     mMinWidth,
-    eCSSType_Value,
     kWidthKTable,
     offsetof(nsStylePosition, mMinWidth),
     eStyleAnimType_Coord)
 CSS_PROP_DISPLAY(
     opacity,
     opacity,
     Opacity,
     0,
     Display,
     mOpacity,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleDisplay, mOpacity),
     eStyleAnimType_float) // XXX bug 3935
 CSS_PROP_BACKENDONLY(
     orphans,
     orphans,
     Orphans,
     0,
     Breaks,
     mOrphans,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_SHORTHAND(
     outline,
     outline,
     Outline,
     0)
 CSS_PROP_OUTLINE(
     outline-color,
     outline_color,
     OutlineColor,
     CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Margin,
     mOutlineColor,
-    eCSSType_Value,
     kOutlineColorKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_OUTLINE(
     outline-style,
     outline_style,
     OutlineStyle,
     0,
     Margin,
     mOutlineStyle,
-    eCSSType_Value,
     kBorderStyleKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_OUTLINE(
     outline-width,
     outline_width,
     OutlineWidth,
     0,
     Margin,
     mOutlineWidth,
-    eCSSType_Value,
     kBorderWidthKTable,
     offsetof(nsStyleOutline, mOutlineWidth),
     eStyleAnimType_Coord)
 CSS_PROP_OUTLINE(
     outline-offset,
     outline_offset,
     OutlineOffset,
     0,
     Margin,
     mOutlineOffset,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleOutline, mOutlineOffset),
     eStyleAnimType_nscoord)
 CSS_PROP_SHORTHAND(
     overflow,
     overflow,
     Overflow,
     0)
 CSS_PROP_DISPLAY(
     overflow-x,
     overflow_x,
     OverflowX,
     0,
     Display,
     mOverflowX,
-    eCSSType_Value,
     kOverflowSubKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     overflow-y,
     overflow_y,
     OverflowY,
     0,
     Display,
     mOverflowY,
-    eCSSType_Value,
     kOverflowSubKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SHORTHAND(
     padding,
     padding,
     Padding,
     0)
 CSS_PROP_PADDING(
     padding-bottom,
     padding_bottom,
     PaddingBottom,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mPadding.mBottom,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Bottom)
 CSS_PROP_SHORTHAND(
     -moz-padding-end,
     padding_end,
     MozPaddingEnd,
     0)
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_PADDING(
     padding-end-value,
     padding_end_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mPaddingEnd,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     padding-left,
     padding_left,
     PaddingLeft,
@@ -1987,41 +1855,38 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_PADDING(
     padding-left-value,
     padding_left_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mPadding.mLeft,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Left)
 CSS_PROP_PADDING(
     padding-left-ltr-source,
     padding_left_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mPaddingLeftLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_PADDING(
     padding-left-rtl-source,
     padding_left_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mPaddingLeftRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     padding-right,
     padding_right,
     PaddingRight,
@@ -2030,41 +1895,38 @@ CSS_PROP_SHORTHAND(
 CSS_PROP_PADDING(
     padding-right-value,
     padding_right_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_REPORT_OTHER_NAME,
     Margin,
     mPadding.mRight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Right)
 CSS_PROP_PADDING(
     padding-right-ltr-source,
     padding_right_ltr_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mPaddingRightLTRSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_PADDING(
     padding-right-rtl-source,
     padding_right_rtl_source,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER |
         CSS_PROPERTY_DIRECTIONAL_SOURCE,
     Margin,
     mPaddingRightRTLSource,
-    eCSSType_Value,
     kBoxPropSourceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_SHORTHAND(
     -moz-padding-start,
     padding_start,
     MozPaddingStart,
@@ -2072,1011 +1934,919 @@ CSS_PROP_SHORTHAND(
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_PADDING(
     padding-start-value,
     padding_start_value,
     X,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mPaddingStart,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 CSS_PROP_PADDING(
     padding-top,
     padding_top,
     PaddingTop,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER,
     Margin,
     mPadding.mTop,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePadding, mPadding),
     eStyleAnimType_Sides_Top)
 CSS_PROP_BACKENDONLY(
     page,
     page,
     Page,
     0,
     Breaks,
     mPage,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_DISPLAY(
     page-break-after,
     page_break_after,
     PageBreakAfter,
     0,
     Display,
     mBreakAfter,
-    eCSSType_Value,
     kPageBreakKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // temp fix for bug 24000
 CSS_PROP_DISPLAY(
     page-break-before,
     page_break_before,
     PageBreakBefore,
     0,
     Display,
     mBreakBefore,
-    eCSSType_Value,
     kPageBreakKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // temp fix for bug 24000
 CSS_PROP_BACKENDONLY(
     page-break-inside,
     page_break_inside,
     PageBreakInside,
     0,
     Breaks,
     mPageBreakInside,
-    eCSSType_Value,
     kPageBreakInsideKTable)
 CSS_PROP_SHORTHAND(
     pause,
     pause,
     Pause,
     0)
 CSS_PROP_BACKENDONLY(
     pause-after,
     pause_after,
     PauseAfter,
     0,
     Aural,
     mPauseAfter,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_BACKENDONLY(
     pause-before,
     pause_before,
     PauseBefore,
     0,
     Aural,
     mPauseBefore,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_BACKENDONLY(
     pitch,
     pitch,
     Pitch,
     0,
     Aural,
     mPitch,
-    eCSSType_Value,
     kPitchKTable)
 CSS_PROP_BACKENDONLY(
     pitch-range,
     pitch_range,
     PitchRange,
     0,
     Aural,
     mPitchRange,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_VISIBILITY(
     pointer-events,
     pointer_events,
     PointerEvents,
     0,
     Display,
     mPointerEvents,
-    eCSSType_Value,
     kPointerEventsKTable,
     offsetof(nsStyleVisibility, mPointerEvents),
     eStyleAnimType_EnumU8)
 CSS_PROP_DISPLAY(
     position,
     position,
     Position,
     0,
     Display,
     mPosition,
-    eCSSType_Value,
     kPositionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_QUOTES(
     quotes,
     quotes,
     Quotes,
     0,
     Content,
     mQuotes,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     resize,
     resize,
     Resize,
     0,
     Display,
     mResize,
-    eCSSType_Value,
     kResizeKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKENDONLY(
     richness,
     richness,
     Richness,
     0,
     Aural,
     mRichness,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_POSITION(
     right,
     right,
     Right,
     0,
     Position,
     mOffset.mRight,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Right)
 CSS_PROP_BACKENDONLY(
     size,
     size,
     Size,
     0,
     Page,
     mSize,
-    eCSSType_Value,
     kPageSizeKTable)
 CSS_PROP_BACKENDONLY(
     speak,
     speak,
     Speak,
     0,
     Aural,
     mSpeak,
-    eCSSType_Value,
     kSpeakKTable)
 CSS_PROP_BACKENDONLY(
     speak-header,
     speak_header,
     SpeakHeader,
     0,
     Aural,
     mSpeakHeader,
-    eCSSType_Value,
     kSpeakHeaderKTable)
 CSS_PROP_BACKENDONLY(
     speak-numeral,
     speak_numeral,
     SpeakNumeral,
     0,
     Aural,
     mSpeakNumeral,
-    eCSSType_Value,
     kSpeakNumeralKTable)
 CSS_PROP_BACKENDONLY(
     speak-punctuation,
     speak_punctuation,
     SpeakPunctuation,
     0,
     Aural,
     mSpeakPunctuation,
-    eCSSType_Value,
     kSpeakPunctuationKTable)
 CSS_PROP_BACKENDONLY(
     speech-rate,
     speech_rate,
     SpeechRate,
     0,
     Aural,
     mSpeechRate,
-    eCSSType_Value,
     kSpeechRateKTable)
 CSS_PROP_BACKENDONLY(
     stress,
     stress,
     Stress,
     0,
     Aural,
     mStress,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_TABLE(
     table-layout,
     table_layout,
     TableLayout,
     0,
     Table,
     mLayout,
-    eCSSType_Value,
     kTableLayoutKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_TEXT(
     text-align,
     text_align,
     TextAlign,
     0,
     Text,
     mTextAlign,
-    eCSSType_Value,
     kTextAlignKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_TEXTRESET(
     text-decoration,
     text_decoration,
     TextDecoration,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Text,
     mDecoration,
-    eCSSType_Value,
     kTextDecorationKTable,
     offsetof(nsStyleTextReset, mTextDecoration),
     eStyleAnimType_EnumU8)
 CSS_PROP_TEXT(
     text-indent,
     text_indent,
     TextIndent,
     0,
     Text,
     mTextIndent,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleText, mTextIndent),
     eStyleAnimType_Coord)
 CSS_PROP_TEXT(
     text-shadow,
     text_shadow,
     TextShadow,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE |
         CSS_PROPERTY_VALUE_LIST_USES_COMMAS |
         CSS_PROPERTY_IGNORED_WHEN_COLORS_DISABLED,
     Text,
     mTextShadow,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleText, mTextShadow),
     eStyleAnimType_Shadow)
 CSS_PROP_TEXT(
     text-transform,
     text_transform,
     TextTransform,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Text,
     mTextTransform,
-    eCSSType_Value,
     kTextTransformKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     -moz-transform,
     _moz_transform,
     MozTransform,
     0,
     Display,
     mTransform,
-    eCSSType_Value,
     kDisplayKTable,
     offsetof(nsStyleDisplay, mSpecifiedTransform),
     eStyleAnimType_Custom)
 CSS_PROP_DISPLAY(
     -moz-transform-origin,
     _moz_transform_origin,
     MozTransformOrigin,
     0,
     Display,
     mTransformOrigin,
-    eCSSType_Value,
     kBackgroundPositionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_Custom)
 CSS_PROP_POSITION(
     top,
     top,
     Top,
     0,
     Position,
     mOffset.mTop,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mOffset),
     eStyleAnimType_Sides_Top)
 CSS_PROP_SHORTHAND(
     -moz-transition,
     transition,
     MozTransition,
     0)
 CSS_PROP_DISPLAY(
     -moz-transition-delay,
     transition_delay,
     MozTransitionDelay,
     CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Display,
     mTransitionDelay,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     -moz-transition-duration,
     transition_duration,
     MozTransitionDuration,
     CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Display,
     mTransitionDuration,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     -moz-transition-property,
     transition_property,
     MozTransitionProperty,
     CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Display,
     mTransitionProperty,
-    eCSSType_Value /* list of CSS properties that have transitions ? */,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_DISPLAY(
     -moz-transition-timing-function,
     transition_timing_function,
     MozTransitionTimingFunction,
     CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     Display,
     mTransitionTimingFunction,
-    eCSSType_Value,
     kTransitionTimingFunctionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_TEXTRESET(
     unicode-bidi,
     unicode_bidi,
     UnicodeBidi,
     0,
     Text,
     mUnicodeBidi,
-    eCSSType_Value,
     kUnicodeBidiKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_USERINTERFACE(
     -moz-user-focus,
     user_focus,
     MozUserFocus,
     0,
     UserInterface,
     mUserFocus,
-    eCSSType_Value,
     kUserFocusKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_USERINTERFACE(
     -moz-user-input,
     user_input,
     MozUserInput,
     0,
     UserInterface,
     mUserInput,
-    eCSSType_Value,
     kUserInputKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX ??? // XXX bug 3935
 CSS_PROP_USERINTERFACE(
     -moz-user-modify,
     user_modify,
     MozUserModify,
     0,
     UserInterface,
     mUserModify,
-    eCSSType_Value,
     kUserModifyKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_UIRESET(
     -moz-user-select,
     user_select,
     MozUserSelect,
     0,
     UserInterface,
     mUserSelect,
-    eCSSType_Value,
     kUserSelectKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 // NOTE: vertical-align is only supposed to apply to :first-letter when
 // 'float' is 'none', but we don't worry about that since it has no
 // effect otherwise
 CSS_PROP_TEXTRESET(
     vertical-align,
     vertical_align,
     VerticalAlign,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Text,
     mVerticalAlign,
-    eCSSType_Value,
     kVerticalAlignKTable,
     offsetof(nsStyleTextReset, mVerticalAlign),
     eStyleAnimType_Coord)
 CSS_PROP_VISIBILITY(
     visibility,
     visibility,
     Visibility,
     0,
     Display,
     mVisibility,
-    eCSSType_Value,
     kVisibilityKTable,
     offsetof(nsStyleVisibility, mVisible),
     eStyleAnimType_EnumU8)  // reflow for collapse
 CSS_PROP_BACKENDONLY(
     voice-family,
     voice_family,
     VoiceFamily,
     0,
     Aural,
     mVoiceFamily,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_BACKENDONLY(
     volume,
     volume,
     Volume,
     0,
     Aural,
     mVolume,
-    eCSSType_Value,
     kVolumeKTable)
 CSS_PROP_TEXT(
     white-space,
     white_space,
     WhiteSpace,
     0,
     Text,
     mWhiteSpace,
-    eCSSType_Value,
     kWhitespaceKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_BACKENDONLY(
     widows,
     widows,
     Widows,
     0,
     Breaks,
     mWidows,
-    eCSSType_Value,
     nsnull)
 CSS_PROP_POSITION(
     width,
     width,
     Width,
     0,
     Position,
     mWidth,
-    eCSSType_Value,
     kWidthKTable,
     offsetof(nsStylePosition, mWidth),
     eStyleAnimType_Coord)
 CSS_PROP_UIRESET(
     -moz-window-shadow,
     _moz_window_shadow,
     MozWindowShadow,
     0,
     UserInterface,
     mWindowShadow,
-    eCSSType_Value,
     kWindowShadowKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_TEXT(
     word-spacing,
     word_spacing,
     WordSpacing,
     CSS_PROPERTY_APPLIES_TO_FIRST_LETTER_AND_FIRST_LINE,
     Text,
     mWordSpacing,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleText, mWordSpacing),
     eStyleAnimType_nscoord)
 CSS_PROP_TEXT(
     word-wrap,
     word_wrap,
     WordWrap,
     0,
     Text,
     mWordWrap,
-    eCSSType_Value,
     kWordwrapKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_POSITION(
     z-index,
     z_index,
     ZIndex,
     0,
     Position,
     mZIndex,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStylePosition, mZIndex),
     eStyleAnimType_Coord)
 CSS_PROP_XUL(
     -moz-box-align,
     box_align,
     MozBoxAlign,
     0,
     XUL,
     mBoxAlign,
-    eCSSType_Value,
     kBoxAlignKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-direction,
     box_direction,
     MozBoxDirection,
     0,
     XUL,
     mBoxDirection,
-    eCSSType_Value,
     kBoxDirectionKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-flex,
     box_flex,
     MozBoxFlex,
     0,
     XUL,
     mBoxFlex,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleXUL, mBoxFlex),
     eStyleAnimType_float) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-orient,
     box_orient,
     MozBoxOrient,
     0,
     XUL,
     mBoxOrient,
-    eCSSType_Value,
     kBoxOrientKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-pack,
     box_pack,
     MozBoxPack,
     0,
     XUL,
     mBoxPack,
-    eCSSType_Value,
     kBoxPackKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None) // XXX bug 3935
 CSS_PROP_XUL(
     -moz-box-ordinal-group,
     box_ordinal_group,
     MozBoxOrdinalGroup,
     0,
     XUL,
     mBoxOrdinal,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_XUL(
     -moz-stack-sizing,
     stack_sizing,
     MozStackSizing,
     0,
     XUL,
     mStackSizing,
-    eCSSType_Value,
     kStackSizingKTable,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 
 #ifdef MOZ_MATHML
 #ifndef CSS_PROP_LIST_EXCLUDE_INTERNAL
 CSS_PROP_FONT(
     -moz-script-level,
     script_level,
     ScriptLevel,
     0,
     Font,
     mScriptLevel,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     -moz-script-size-multiplier,
     script_size_multiplier,
     ScriptSizeMultiplier,
     0,
     Font,
     mScriptSizeMultiplier,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_FONT(
     -moz-script-min-size,
     script_min_size,
     ScriptMinSize,
     0,
     Font,
     mScriptMinSize,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif
 #endif
 
 CSS_PROP_SVGRESET(
     clip-path,
     clip_path,
     ClipPath,
     0,
     SVG,
     mClipPath,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SVG(
     clip-rule,
     clip_rule,
     ClipRule,
     0,
     SVG,
     mClipRule,
-    eCSSType_Value,
     kFillRuleKTable,
     offsetof(nsStyleSVG, mClipRule),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVG(
     color-interpolation,
     color_interpolation,
     ColorInterpolation,
     0,
     SVG,
     mColorInterpolation,
-    eCSSType_Value,
     kColorInterpolationKTable,
     offsetof(nsStyleSVG, mColorInterpolation),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVG(
     color-interpolation-filters,
     color_interpolation_filters,
     ColorInterpolationFilters,
     0,
     SVG,
     mColorInterpolationFilters,
-    eCSSType_Value,
     kColorInterpolationKTable,
     offsetof(nsStyleSVG, mColorInterpolationFilters),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVGRESET(
     dominant-baseline,
     dominant_baseline,
     DominantBaseline,
     0,
     SVG,
     mDominantBaseline,
-    eCSSType_Value,
     kDominantBaselineKTable,
     offsetof(nsStyleSVGReset, mDominantBaseline),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVG(
     fill,
     fill,
     Fill,
     0,
     SVG,
     mFill,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVG, mFill),
     eStyleAnimType_PaintServer)
 CSS_PROP_SVG(
     fill-opacity,
     fill_opacity,
     FillOpacity,
     0,
     SVG,
     mFillOpacity,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVG, mFillOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     fill-rule,
     fill_rule,
     FillRule,
     0,
     SVG,
     mFillRule,
-    eCSSType_Value,
     kFillRuleKTable,
     offsetof(nsStyleSVG, mFillRule),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVGRESET(
     filter,
     filter,
     Filter,
     0,
     SVG,
     mFilter,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SVGRESET(
     flood-color,
     flood_color,
     FloodColor,
     0,
     SVG,
     mFloodColor,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVGReset, mFloodColor),
     eStyleAnimType_Color)
 CSS_PROP_SVGRESET(
     flood-opacity,
     flood_opacity,
     FloodOpacity,
     0,
     SVG,
     mFloodOpacity,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVGReset, mFloodOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     image-rendering,
     image_rendering,
     ImageRendering,
     0,
     SVG,
     mImageRendering,
-    eCSSType_Value,
     kImageRenderingKTable,
     offsetof(nsStyleSVG, mImageRendering),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVGRESET(
     lighting-color,
     lighting_color,
     LightingColor,
     0,
     SVG,
     mLightingColor,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVGReset, mLightingColor),
     eStyleAnimType_Color)
 CSS_PROP_SHORTHAND(
     marker,
     marker,
     Marker,
     0)
 CSS_PROP_SVG(
     marker-end,
     marker_end,
     MarkerEnd,
     0,
     SVG,
     mMarkerEnd,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SVG(
     marker-mid,
     marker_mid,
     MarkerMid,
     0,
     SVG,
     mMarkerMid,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SVG(
     marker-start,
     marker_start,
     MarkerStart,
     0,
     SVG,
     mMarkerStart,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SVGRESET(
     mask,
     mask,
     Mask,
     0,
     SVG,
     mMask,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_SVG(
     shape-rendering,
     shape_rendering,
     ShapeRendering,
     0,
     SVG,
     mShapeRendering,
-    eCSSType_Value,
     kShapeRenderingKTable,
     offsetof(nsStyleSVG, mShapeRendering),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVGRESET(
     stop-color,
     stop_color,
     StopColor,
     0,
     SVG,
     mStopColor,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVGReset, mStopColor),
     eStyleAnimType_Color)
 CSS_PROP_SVGRESET(
     stop-opacity,
     stop_opacity,
     StopOpacity,
     0,
     SVG,
     mStopOpacity,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVGReset, mStopOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke,
     stroke,
     Stroke,
     0,
     SVG,
     mStroke,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVG, mStroke),
     eStyleAnimType_PaintServer)
 CSS_PROP_SVG(
     stroke-dasharray,
     stroke_dasharray,
     StrokeDasharray,
     CSS_PROPERTY_VALUE_LIST_USES_COMMAS,
     SVG,
     mStrokeDasharray,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET, /* property stored in 2 separate members */
     eStyleAnimType_Custom)
 CSS_PROP_SVG(
     stroke-dashoffset,
     stroke_dashoffset,
     StrokeDashoffset,
     0,
     SVG,
     mStrokeDashoffset,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVG, mStrokeDashoffset),
     eStyleAnimType_Coord)
 CSS_PROP_SVG(
     stroke-linecap,
     stroke_linecap,
     StrokeLinecap,
     0,
     SVG,
     mStrokeLinecap,
-    eCSSType_Value,
     kStrokeLinecapKTable,
     offsetof(nsStyleSVG, mStrokeLinecap),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVG(
     stroke-linejoin,
     stroke_linejoin,
     StrokeLinejoin,
     0,
     SVG,
     mStrokeLinejoin,
-    eCSSType_Value,
     kStrokeLinejoinKTable,
     offsetof(nsStyleSVG, mStrokeLinejoin),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVG(
     stroke-miterlimit,
     stroke_miterlimit,
     StrokeMiterlimit,
     0,
     SVG,
     mStrokeMiterlimit,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVG, mStrokeMiterlimit),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke-opacity,
     stroke_opacity,
     StrokeOpacity,
     0,
     SVG,
     mStrokeOpacity,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVG, mStrokeOpacity),
     eStyleAnimType_float)
 CSS_PROP_SVG(
     stroke-width,
     stroke_width,
     StrokeWidth,
     0,
     SVG,
     mStrokeWidth,
-    eCSSType_Value,
     nsnull,
     offsetof(nsStyleSVG, mStrokeWidth),
     eStyleAnimType_Coord)
 CSS_PROP_SVG(
     text-anchor,
     text_anchor,
     TextAnchor,
     0,
     SVG,
     mTextAnchor,
-    eCSSType_Value,
     kTextAnchorKTable,
     offsetof(nsStyleSVG, mTextAnchor),
     eStyleAnimType_EnumU8)
 CSS_PROP_SVG(
     text-rendering,
     text_rendering,
     TextRendering,
     0,
     SVG,
     mTextRendering,
-    eCSSType_Value,
     kTextRenderingKTable,
     offsetof(nsStyleSVG, mTextRendering),
     eStyleAnimType_EnumU8)
 
 // Callers that want information on the properties that are in
 // the style structs but not in the nsCSS* structs should define
 // |CSS_PROP_INCLUDE_NOT_CSS|.  (Some of these are also in nsRuleData*,
 // and a distinction might be needed at some point.)
@@ -3085,39 +2855,36 @@ CSS_PROP_SVG(
 #ifdef CSS_PROP_INCLUDE_NOT_CSS
 CSS_PROP_VISIBILITY(
     X,
     X,
     X,
     0,
     Display,
     mLang,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_TABLE(
     X,
     X,
     X,
     0,
     Table,
     mCols,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 CSS_PROP_TABLE(
     X,
     X,
     X,
     0,
     Table,
     mSpan,
-    eCSSType_Value,
     nsnull,
     CSS_PROP_NO_OFFSET,
     eStyleAnimType_None)
 #endif /* defined(CSS_PROP_INCLUDE_NOT_CSS) */
 
 #ifdef USED_CSS_PROP
 
 #undef USED_CSS_PROP
--- a/layout/style/nsCSSProperty.h
+++ b/layout/style/nsCSSProperty.h
@@ -46,18 +46,18 @@
    enum values are "eCSSProperty_foo" (where foo is the property)
 
    To change the list of properties, see nsCSSPropList.h
 
  */
 enum nsCSSProperty {
   eCSSProperty_UNKNOWN = -1,
 
-  #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,   \
-                   kwtable_, stylestruct_, stylestructoffset_, animtype_)      \
+  #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,     \
+                   kwtable_, stylestruct_, stylestructoffset_, animtype_) \
     eCSSProperty_##id_,
   #include "nsCSSPropList.h"
   #undef CSS_PROP
 
   eCSSProperty_COUNT_no_shorthands,
   // Make the count continue where it left off:
   eCSSProperty_COUNT_DUMMY = eCSSProperty_COUNT_no_shorthands - 1,
 
@@ -74,22 +74,16 @@ enum nsCSSProperty {
   // property.
   eCSSPropertyExtra_no_properties,
   eCSSPropertyExtra_all_properties,
 
   // Extra dummy values for nsCSSParser internal use.
   eCSSPropertyExtra_x_none_value
 };
 
-// The types of values that can be in the nsCSS*/nsRuleData* structs.
-// See nsCSSPropList.h for uses.
-enum nsCSSType {
-  eCSSType_Value
-};
-
 // The "descriptors" that can appear in a @font-face rule.
 // They have the syntax of properties but different value rules.
 // Keep in sync with kCSSRawFontDescs in nsCSSProps.cpp and
 // nsCSSFontFaceStyleDecl::Fields in nsCSSRules.cpp.
 enum nsCSSFontDesc {
   eCSSFontDesc_UNKNOWN = -1,
   eCSSFontDesc_Family,
   eCSSFontDesc_Style,
--- a/layout/style/nsCSSProps.cpp
+++ b/layout/style/nsCSSProps.cpp
@@ -55,17 +55,17 @@
 #include "nsStaticNameTable.h"
 #include "prlog.h" // for PR_STATIC_ASSERT
 
 // required to make the symbol external, so that TestCSSPropertyLookup.cpp can link with it
 extern const char* const kCSSRawProperties[];
 
 // define an array of all CSS properties
 const char* const kCSSRawProperties[] = {
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,     \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,            \
                  kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
   #name_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_) #name_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP_SHORTHAND
 };
@@ -1475,17 +1475,17 @@ nsCSSProps::ValueToKeyword(PRInt32 aValu
     return sNullStr;
   } else {
     return nsCSSKeywords::GetStringValue(keyword);
   }
 }
 
 /* static */ const PRInt32* const
 nsCSSProps::kKeywordTableTable[eCSSProperty_COUNT_no_shorthands] = {
-  #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,   \
+  #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,          \
                    kwtable_, stylestruct_, stylestructoffset_, animtype_)      \
     kwtable_,
   #include "nsCSSPropList.h"
   #undef CSS_PROP
 };
 
 const nsAFlatCString&
 nsCSSProps::LookupPropertyValue(nsCSSProperty aProp, PRInt32 aValue)
@@ -1515,58 +1515,49 @@ PRBool nsCSSProps::GetColorName(PRInt32 
     nsCSSKeywords::AddRefTable();
     aStr = nsCSSKeywords::GetStringValue(keyword);
     nsCSSKeywords::ReleaseTable();
     rv = PR_TRUE;
   }
   return rv;
 }
 
-// define array of all CSS property types
-const nsCSSType nsCSSProps::kTypeTable[eCSSProperty_COUNT_no_shorthands] = {
-    #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, \
-                     kwtable_, stylestruct_, stylestructoffset_, animtype_)    \
-        type_,
-    #include "nsCSSPropList.h"
-    #undef CSS_PROP
-};
-
 const nsStyleStructID nsCSSProps::kSIDTable[eCSSProperty_COUNT_no_shorthands] = {
     // Note that this uses the special BackendOnly style struct ID
     // (which does need to be valid for storing in the
     // nsCSSCompressedDataBlock::mStyleBits bitfield).
-    #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, \
+    #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,        \
                      kwtable_, stylestruct_, stylestructoffset_, animtype_)    \
         eStyleStruct_##stylestruct_,
 
     #include "nsCSSPropList.h"
 
     #undef CSS_PROP
 };
 
 const nsStyleAnimType
 nsCSSProps::kAnimTypeTable[eCSSProperty_COUNT_no_shorthands] = {
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,     \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,            \
                  kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
   animtype_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP
 };
 
 const ptrdiff_t
 nsCSSProps::kStyleStructOffsetTable[eCSSProperty_COUNT_no_shorthands] = {
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,     \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,            \
                  kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
   stylestructoffset_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP
 };
 
 const PRUint32 nsCSSProps::kFlagsTable[eCSSProperty_COUNT] = {
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,     \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,            \
                  kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
   flags_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_) flags_,
 #include "nsCSSPropList.h"
 #undef CSS_PROP_SHORTHAND
 };
--- a/layout/style/nsCSSProps.h
+++ b/layout/style/nsCSSProps.h
@@ -179,17 +179,16 @@ public:
   // If not found, return PR_FALSE and do not set |aValue|.
   static PRBool FindKeyword(nsCSSKeyword aKeyword, const PRInt32 aTable[], PRInt32& aValue);
   // Return the first keyword in |aTable| that has the corresponding value |aValue|.
   // Return |eCSSKeyword_UNKNOWN| if not found.
   static nsCSSKeyword ValueToKeywordEnum(PRInt32 aValue, const PRInt32 aTable[]);
   // Ditto but as a string, return "" when not found.
   static const nsAFlatCString& ValueToKeyword(PRInt32 aValue, const PRInt32 aTable[]);
 
-  static const nsCSSType       kTypeTable[eCSSProperty_COUNT_no_shorthands];
   static const nsStyleStructID kSIDTable[eCSSProperty_COUNT_no_shorthands];
   static const PRInt32* const  kKeywordTableTable[eCSSProperty_COUNT_no_shorthands];
   static const nsStyleAnimType kAnimTypeTable[eCSSProperty_COUNT_no_shorthands];
   static const ptrdiff_t
     kStyleStructOffsetTable[eCSSProperty_COUNT_no_shorthands];
 
 private:
   static const PRUint32        kFlagsTable[eCSSProperty_COUNT];
--- a/layout/style/nsDOMCSSDeclaration.cpp
+++ b/layout/style/nsDOMCSSDeclaration.cpp
@@ -332,38 +332,38 @@ nsDOMCSSDeclaration::RemoveProperty(cons
 
   decl = decl->EnsureMutable();
   decl->RemoveProperty(aPropID);
   return SetCSSDeclaration(decl);
 }
 
 // nsIDOMCSS2Properties
 
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,   \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,          \
                  kwtable_, stylestruct_, stylestructoffset_, animtype_)      \
   NS_IMETHODIMP                                                              \
   nsDOMCSSDeclaration::Get##method_(nsAString& aValue)                       \
   {                                                                          \
     return GetPropertyValue(eCSSProperty_##id_, aValue);                     \
   }                                                                          \
                                                                              \
   NS_IMETHODIMP                                                              \
   nsDOMCSSDeclaration::Set##method_(const nsAString& aValue)                 \
   {                                                                          \
     return SetPropertyValue(eCSSProperty_##id_, aValue);                     \
   }
 
 #define CSS_PROP_LIST_EXCLUDE_INTERNAL
 #define CSS_PROP_SHORTHAND(name_, id_, method_, flags_) \
-  CSS_PROP(name_, id_, method_, flags_, X, X, X, X, X, X, X)
+  CSS_PROP(name_, id_, method_, flags_, X, X, X, X, X, X)
 #include "nsCSSPropList.h"
 
 // Aliases
-CSS_PROP(X, opacity, MozOpacity, X, X, X, X, X, X, X, X)
-CSS_PROP(X, outline, MozOutline, X, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_color, MozOutlineColor, X, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_style, MozOutlineStyle, X, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_width, MozOutlineWidth, X, X, X, X, X, X, X, X)
-CSS_PROP(X, outline_offset, MozOutlineOffset, X, X, X, X, X, X, X, X)
+CSS_PROP(X, opacity, MozOpacity, X, X, X, X, X, X, X)
+CSS_PROP(X, outline, MozOutline, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_color, MozOutlineColor, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_style, MozOutlineStyle, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_width, MozOutlineWidth, X, X, X, X, X, X, X)
+CSS_PROP(X, outline_offset, MozOutlineOffset, X, X, X, X, X, X, X)
 
 #undef CSS_PROP_SHORTHAND
 #undef CSS_PROP_LIST_EXCLUDE_INTERNAL
 #undef CSS_PROP
--- a/layout/style/nsRuleData.cpp
+++ b/layout/style/nsRuleData.cpp
@@ -45,37 +45,37 @@ struct PropertyOffsetInfo {
   // XXX These could probably be pointer-to-member, if the casting can
   // be done correctly.
   size_t struct_offset; // offset of nsRuleDataThing* in nsRuleData
   size_t member_offset; // offset of value in nsRuleDataThing
 };
 
 const PropertyOffsetInfo kOffsetTable[eCSSProperty_COUNT_no_shorthands] = {
   #define CSS_PROP_BACKENDONLY(name_, id_, method_, flags_, datastruct_,     \
-                               member_, type_, kwtable_)                     \
+                               member_, kwtable_)                            \
       { size_t(-1), size_t(-1) },
-  #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_, \
+  #define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,        \
                    kwtable_, stylestruct_, stylestructoffset_, animtype_)    \
       { offsetof(nsRuleData, m##datastruct_##Data),                          \
         offsetof(nsRuleData##datastruct_, member_) },
   #include "nsCSSPropList.h"
   #undef CSS_PROP
   #undef CSS_PROP_BACKENDONLY
 };
 
 } // anon namespace
 
-void*
-nsRuleData::StorageFor(nsCSSProperty aProperty)
+nsCSSValue*
+nsRuleData::ValueFor(nsCSSProperty aProperty)
 {
   NS_ABORT_IF_FALSE(aProperty < eCSSProperty_COUNT_no_shorthands,
                     "invalid or shorthand property");
 
   const PropertyOffsetInfo& offsets = kOffsetTable[aProperty];
   NS_ABORT_IF_FALSE(offsets.struct_offset != size_t(-1),
                     "backend-only property");
 
   char* cssstruct = *reinterpret_cast<char**>
     (reinterpret_cast<char*>(this) + offsets.struct_offset);
   NS_ABORT_IF_FALSE(cssstruct, "substructure pointer should never be null");
 
-  return reinterpret_cast<void*>(cssstruct + offsets.member_offset);
+  return reinterpret_cast<nsCSSValue*>(cssstruct + offsets.member_offset);
 }
--- a/layout/style/nsRuleData.h
+++ b/layout/style/nsRuleData.h
@@ -99,15 +99,16 @@ struct nsRuleData
       mUserInterfaceData(nsnull),
       mXULData(nsnull),
       mSVGData(nsnull),
       mColumnData(nsnull)
   {}
   ~nsRuleData() {}
 
   /**
-   * Non-typesafe worker routine for the above five value retrieval
-   * functions.  Avoid using.
+   * Return a pointer to the value object within |this| corresponding
+   * to property |aProperty|, or null if storage for that property has
+   * not been allocated.
    */
-  void* StorageFor(nsCSSProperty aProperty);
+  nsCSSValue* ValueFor(nsCSSProperty aProperty);
 };
 
 #endif
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -1360,20 +1360,18 @@ nsRuleNode::PropagateDependentBit(PRUint
  * sharing can be used for the data on this rule node.  MORE HERE...
  */
 
 /* the information for a property (or in some cases, a rect group of
    properties) */
 
 struct PropertyCheckData {
   size_t offset;
-  // These duplicate the same data in nsCSSProps::kTypeTable and
-  // kFlagsTable, except that we have some extra entries for
-  // CSS_PROP_INCLUDE_NOT_CSS.
-  nsCSSType type;
+  // These duplicate the data in nsCSSProps::kFlagsTable, except that
+  // we have some extra entries for CSS_PROP_INCLUDE_NOT_CSS.
   PRUint32 flags;
 };
 
 /*
  * a callback function that that can revise the result of
  * CheckSpecifiedProperties before finishing; aResult is the current
  * result, and it returns the revised one.
  */
@@ -1489,18 +1487,18 @@ CheckTextCallback(const nsRuleDataStruct
 
   return aResult;
 }
 
 // for nsCSSPropList.h, so we get information on things in the style
 // structs but not nsCSS*
 #define CSS_PROP_INCLUDE_NOT_CSS
 
-#define CHECK_DATA_FOR_PROPERTY(name_, id_, method_, flags_, datastruct_, member_, type_, kwtable_, stylestructoffset_, animtype_) \
-  { offsetof(nsRuleData##datastruct_, member_), type_, flags_ },
+#define CHECK_DATA_FOR_PROPERTY(name_, id_, method_, flags_, datastruct_, member_, kwtable_, stylestructoffset_, animtype_) \
+  { offsetof(nsRuleData##datastruct_, member_), flags_ },
 
 static const PropertyCheckData FontCheckProperties[] = {
 #define CSS_PROP_FONT CHECK_DATA_FOR_PROPERTY
 #include "nsCSSPropList.h"
 #undef CSS_PROP_FONT
 };
 
 static const PropertyCheckData DisplayCheckProperties[] = {
@@ -1730,30 +1728,22 @@ nsRuleNode::CheckSpecifiedProperties(con
   PRUint32 total = 0,      // total number of props in the struct
            specified = 0,  // number that were specified for this node
            inherited = 0;  // number that were 'inherit' (and not
                            //   eCSSUnit_Inherit) for this node
 
   for (const PropertyCheckData *prop = structData->props,
                            *prop_end = prop + structData->nprops;
        prop != prop_end;
-       ++prop)
-    switch (prop->type) {
-
-      case eCSSType_Value:
-        ++total;
-        ExamineCSSValue(ValueAtOffset(aRuleDataStruct, prop->offset),
-                        specified, inherited);
-        break;
-
-      default:
-        NS_NOTREACHED("unknown type");
-        break;
-
-    }
+       ++prop) {
+
+    ++total;
+    ExamineCSSValue(ValueAtOffset(aRuleDataStruct, prop->offset),
+                    specified, inherited);
+  }
 
 #if 0
   printf("CheckSpecifiedProperties: SID=%d total=%d spec=%d inh=%d.\n",
          aSID, total, specified, inherited);
 #endif
 
 #ifdef MOZ_MATHML
   NS_ASSERTION(aSID != eStyleStruct_Font ||
@@ -2058,28 +2048,18 @@ UnsetPropertiesWithoutFlags(const nsStyl
 {
   NS_ASSERTION(aFlags != 0, "aFlags must be nonzero");
   const StructCheckData *structData = gCheckProperties + aSID;
 
   for (const PropertyCheckData *prop = structData->props,
                            *prop_end = prop + structData->nprops;
        prop != prop_end;
        ++prop) {
-    if ((prop->flags & aFlags) == aFlags)
-      // Don't unset the property.
-      continue;
-
-    switch (prop->type) {
-      case eCSSType_Value:
-        ValueAtOffset(aRuleDataStruct, prop->offset).Reset();
-        break;
-      default:
-        NS_NOTREACHED("unknown type");
-        break;
-    }
+    if ((prop->flags & aFlags) != aFlags)
+      ValueAtOffset(aRuleDataStruct, prop->offset).Reset();
   }
 }
 
 const void*
 nsRuleNode::WalkRuleTree(const nsStyleStructID aSID,
                          nsStyleContext* aContext,
                          nsRuleData* aRuleData,
                          nsRuleDataStruct* aSpecificData)
--- a/layout/style/nsStyleAnimation.cpp
+++ b/layout/style/nsStyleAnimation.cpp
@@ -1733,103 +1733,77 @@ nsStyleAnimation::ComputeValue(nsCSSProp
   // Extract computed value of our property from the temporary style rule
   return ExtractComputedValue(aProperty, tmpStyleContext, aComputedValue);
 }
 
 PRBool
 nsStyleAnimation::UncomputeValue(nsCSSProperty aProperty,
                                  nsPresContext* aPresContext,
                                  const Value& aComputedValue,
-                                 void* aSpecifiedValue)
+                                 nsCSSValue& aSpecifiedValue)
 {
   NS_ABORT_IF_FALSE(aPresContext, "null pres context");
 
   switch (aComputedValue.GetUnit()) {
     case eUnit_Normal:
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->SetNormalValue();
+      aSpecifiedValue.SetNormalValue();
       break;
     case eUnit_Auto:
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->SetAutoValue();
+      aSpecifiedValue.SetAutoValue();
       break;
     case eUnit_None:
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->SetNoneValue();
+      aSpecifiedValue.SetNoneValue();
       break;
     case eUnit_Enumerated:
     case eUnit_Visibility:
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->
+      aSpecifiedValue.
         SetIntValue(aComputedValue.GetIntValue(), eCSSUnit_Enumerated);
       break;
     case eUnit_Integer:
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->
+      aSpecifiedValue.
         SetIntValue(aComputedValue.GetIntValue(), eCSSUnit_Integer);
       break;
-    case eUnit_Coord: {
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      nscoordToCSSValue(aComputedValue.GetCoordValue(),
-                        *static_cast<nsCSSValue*>(aSpecifiedValue));
+    case eUnit_Coord:
+      nscoordToCSSValue(aComputedValue.GetCoordValue(), aSpecifiedValue);
       break;
-    }
     case eUnit_Percent:
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->
-        SetPercentValue(aComputedValue.GetPercentValue());
+      aSpecifiedValue.SetPercentValue(aComputedValue.GetPercentValue());
       break;
     case eUnit_Float:
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->
+      aSpecifiedValue.
         SetFloatValue(aComputedValue.GetFloatValue(), eCSSUnit_Number);
       break;
     case eUnit_Color:
       // colors can be alone, or part of a paint server
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
-      static_cast<nsCSSValue*>(aSpecifiedValue)->
-        SetColorValue(aComputedValue.GetColorValue());
+      aSpecifiedValue.SetColorValue(aComputedValue.GetColorValue());
       break;
     case eUnit_CSSValuePair: {
-      NS_ABORT_IF_FALSE(nsCSSProps::kTypeTable[aProperty] == eCSSType_Value,
-                        "type mismatch");
       // Rule node processing expects pair values to be collapsed to a
       // single value if both halves would be equal, for most but not
       // all properties.  At present, all animatable properties that
       // use pairs do expect collapsing.
       const nsCSSValuePair* pair = aComputedValue.GetCSSValuePairValue();
       if (pair->mXValue == pair->mYValue) {
-        *static_cast<nsCSSValue*>(aSpecifiedValue) = pair->mXValue;
+        aSpecifiedValue = pair->mXValue;
       } else {
-        static_cast<nsCSSValue*>(aSpecifiedValue)->
-          SetPairValue(pair);
+        aSpecifiedValue.SetPairValue(pair);
       }
     } break;
     case eUnit_CSSRect: {
-      nsCSSRect& rect = static_cast<nsCSSValue*>(aSpecifiedValue)->
-        SetRectValue();
+      nsCSSRect& rect = aSpecifiedValue.SetRectValue();
       rect = *aComputedValue.GetCSSRectValue();
     } break;
     case eUnit_Dasharray:
     case eUnit_Shadow:
     case eUnit_Transform:
-      static_cast<nsCSSValue*>(aSpecifiedValue)->
+      aSpecifiedValue.
         SetDependentListValue(aComputedValue.GetCSSValueListValue());
       break;
     case eUnit_CSSValuePairList:
-      static_cast<nsCSSValue*>(aSpecifiedValue)->
+      aSpecifiedValue.
         SetDependentPairListValue(aComputedValue.GetCSSValuePairListValue());
       break;
     default:
       return PR_FALSE;
   }
   return PR_TRUE;
 }
 
@@ -1842,40 +1816,22 @@ nsStyleAnimation::UncomputeValue(nsCSSPr
   NS_ABORT_IF_FALSE(aPresContext, "null pres context");
   aSpecifiedValue.Truncate(); // Clear outparam, if it's not already empty
 
   if (aComputedValue.GetUnit() == eUnit_UnparsedString) {
     aComputedValue.GetStringValue(aSpecifiedValue);
     return PR_TRUE;
   }
   nsCSSValue val;
-  void *storage;
-  switch (nsCSSProps::kTypeTable[aProperty]) {
-    case eCSSType_Value:
-      storage = &val;
-      break;
-    default:
-      NS_ABORT_IF_FALSE(PR_FALSE, "unexpected case");
-      storage = nsnull;
-      break;
-  }
-
   if (!nsStyleAnimation::UncomputeValue(aProperty, aPresContext,
-                                        aComputedValue, storage)) {
+                                        aComputedValue, val)) {
     return PR_FALSE;
   }
 
-  switch (nsCSSProps::kTypeTable[aProperty]) {
-    case eCSSType_Value:
-      val.AppendToString(aProperty, aSpecifiedValue);
-      break;
-    default:
-      NS_ABORT_IF_FALSE(PR_FALSE, "unexpected case");
-      return PR_FALSE;
-  }
+  val.AppendToString(aProperty, aSpecifiedValue);
   return PR_TRUE;
 }
 
 inline const void*
 StyleDataAtOffset(const void* aStyleStruct, ptrdiff_t aOffset)
 {
   return reinterpret_cast<const char*>(aStyleStruct) + aOffset;
 }
--- a/layout/style/nsStyleAnimation.h
+++ b/layout/style/nsStyleAnimation.h
@@ -48,16 +48,17 @@
 #include "nsStringBuffer.h"
 #include "nsCSSProperty.h"
 #include "nsCoord.h"
 #include "nsColor.h"
 
 class nsIContent;
 class nsPresContext;
 class nsStyleContext;
+class nsCSSValue;
 struct nsCSSValueList;
 struct nsCSSValuePair;
 struct nsCSSValuePairList;
 struct nsCSSRect;
 
 /**
  * Utility class to handle animated style values
  */
@@ -173,36 +174,32 @@ public:
                              nsIContent* aElement,
                              const nsAString& aSpecifiedValue,
                              PRBool aUseSVGMode,
                              Value& aComputedValue);
 
   /**
    * Creates a specified value for the given computed value.
    *
-   * The first form fills in one of the nsCSSType types into the void*;
-   * for some types this means that the void* is pointing to memory
-   * owned by the nsStyleAnimation::Value.  (For all complex types, the
-   * nsStyleAnimation::Value owns the necessary objects so that the
-   * caller does not need to do anything to free them.  However, this
-   * means that callers using the void* variant must keep
-   * |aComputedValue| alive longer than the structure into which they've
-   * filled the value.)
+   * The first overload fills in an nsCSSValue object; the second
+   * produces a string.  The nsCSSValue result may depend on objects
+   * owned by the |aComputedValue| object, so users of that variant
+   * must keep |aComputedValue| alive longer than |aSpecifiedValue|.
    *
    * @param aProperty      The property whose value we're uncomputing.
    * @param aPresContext   The presentation context for the document in
    *                       which we're working.
    * @param aComputedValue The computed value to be converted.
    * @param [out] aSpecifiedValue The resulting specified value.
    * @return PR_TRUE on success, PR_FALSE on failure.
    */
   static PRBool UncomputeValue(nsCSSProperty aProperty,
                                nsPresContext* aPresContext,
                                const Value& aComputedValue,
-                               void* aSpecifiedValue);
+                               nsCSSValue& aSpecifiedValue);
   static PRBool UncomputeValue(nsCSSProperty aProperty,
                                nsPresContext* aPresContext,
                                const Value& aComputedValue,
                                nsAString& aSpecifiedValue);
 
   /**
    * Gets the computed value for the given property from the given style
    * context.
--- a/layout/style/nsTransitionManager.cpp
+++ b/layout/style/nsTransitionManager.cpp
@@ -236,22 +236,22 @@ AnimValuesStyleRule::MapRuleInfoInto(nsR
     return;
   }
 
   for (PRUint32 i = 0, i_end = mPropertyValuePairs.Length(); i < i_end; ++i) {
     PropertyValuePair &cv = mPropertyValuePairs[i];
     if (aRuleData->mSIDs & nsCachedStyleData::GetBitForSID(
                              nsCSSProps::kSIDTable[cv.mProperty]))
     {
-      void *prop = aRuleData->StorageFor(cv.mProperty);
+      nsCSSValue *prop = aRuleData->ValueFor(cv.mProperty);
 #ifdef DEBUG
       PRBool ok =
 #endif
         nsStyleAnimation::UncomputeValue(cv.mProperty, aRuleData->mPresContext,
-                                         cv.mValue, prop);
+                                         cv.mValue, *prop);
       NS_ABORT_IF_FALSE(ok, "could not store computed value");
     }
   }
 }
 
 #ifdef DEBUG
 /* virtual */ void
 AnimValuesStyleRule::List(FILE* out, PRInt32 aIndent) const
--- a/layout/style/test/ListCSSProperties.cpp
+++ b/layout/style/test/ListCSSProperties.cpp
@@ -43,17 +43,17 @@
 
 struct PropertyInfo {
     const char *propName;
     const char *domName;
 };
 
 const PropertyInfo gLonghandProperties[] = {
 
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,     \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,            \
                  kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
     { #name_, #method_ },
 
 #include "nsCSSPropList.h"
 
 #undef CSS_PROP
 
 };
@@ -61,17 +61,17 @@ const PropertyInfo gLonghandProperties[]
 /*
  * These are the properties for which domName in the above list should
  * be used.  They're in the same order as the above list, with some
  * items skipped.
  */
 const char* gLonghandPropertiesWithDOMProp[] = {
 
 #define CSS_PROP_LIST_EXCLUDE_INTERNAL
-#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_, type_,     \
+#define CSS_PROP(name_, id_, method_, flags_, datastruct_, member_,            \
                  kwtable_, stylestruct_, stylestructoffset_, animtype_)        \
     #name_,
 
 #include "nsCSSPropList.h"
 
 #undef CSS_PROP
 #undef CSS_PROP_LIST_EXCLUDE_INTERNAL