diff options
Diffstat (limited to 'WebCore/css/CSSParser.cpp')
-rw-r--r-- | WebCore/css/CSSParser.cpp | 106 |
1 files changed, 48 insertions, 58 deletions
diff --git a/WebCore/css/CSSParser.cpp b/WebCore/css/CSSParser.cpp index f511507..07cd300 100644 --- a/WebCore/css/CSSParser.cpp +++ b/WebCore/css/CSSParser.cpp @@ -138,7 +138,6 @@ CSSParser::CSSParser(bool strictParsing) , m_important(false) , m_id(0) , m_styleSheet(0) - , m_mediaQuery(0) , m_valueList(0) , m_parsedProperties(static_cast<CSSProperty**>(fastMalloc(32 * sizeof(CSSProperty*)))) , m_numParsedProperties(0) @@ -160,9 +159,6 @@ CSSParser::CSSParser(bool strictParsing) , m_allowImportRules(true) , m_allowVariablesRules(true) , m_allowNamespaceDeclarations(true) - , m_floatingMediaQuery(0) - , m_floatingMediaQueryExp(0) - , m_floatingMediaQueryExpList(0) { #if YYDEBUG > 0 cssyydebug = 1; @@ -180,12 +176,8 @@ CSSParser::~CSSParser() fastFree(m_data); - if (m_floatingMediaQueryExpList) { + if (m_floatingMediaQueryExpList) deleteAllValues(*m_floatingMediaQueryExpList); - delete m_floatingMediaQueryExpList; - } - delete m_floatingMediaQueryExp; - delete m_floatingMediaQuery; fastDeleteAllValues(m_floatingSelectors); deleteAllValues(m_floatingValueLists); deleteAllValues(m_floatingFunctions); @@ -409,10 +401,15 @@ bool CSSParser::parseMediaQuery(MediaList* queries, const String& string) if (string.isEmpty()) return true; +<<<<<<< HEAD #ifdef ANDROID_INSTRUMENT android::TimeCounter::start(android::TimeCounter::CSSParseTimeCounter); #endif m_mediaQuery = 0; +======= + ASSERT(!m_mediaQuery); + +>>>>>>> webkit.org at r66666 // can't use { because tokenizer state switches from mediaquery to initial state when it sees { token. // instead insert one " " (which is WHITESPACE in CSSGrammar.y) setupParser("@-webkit-mediaquery ", string, "} "); @@ -421,8 +418,7 @@ bool CSSParser::parseMediaQuery(MediaList* queries, const String& string) bool ok = false; if (m_mediaQuery) { ok = true; - queries->appendMediaQuery(m_mediaQuery); - m_mediaQuery = 0; + queries->appendMediaQuery(m_mediaQuery.release()); } #ifdef ANDROID_INSTRUMENT @@ -466,12 +462,13 @@ void CSSParser::clearProperties() Document* CSSParser::document() const { StyleBase* root = m_styleSheet; - Document* doc = 0; while (root && root->parent()) root = root->parent(); - if (root && root->isCSSStyleSheet()) - doc = static_cast<CSSStyleSheet*>(root)->doc(); - return doc; + if (!root) + return 0; + if (!root->isCSSStyleSheet()) + return 0; + return static_cast<CSSStyleSheet*>(root)->document(); } bool CSSParser::validUnit(CSSParserValue* value, Units unitflags, bool strict) @@ -1219,14 +1216,14 @@ bool CSSParser::parseValue(int propId, bool important) case CSSPropertyBorderBottomRightRadius: { if (num != 1 && num != 2) return false; - validPrimitive = validUnit(value, FLength, m_strict); + validPrimitive = validUnit(value, FLength | FPercent, m_strict); if (!validPrimitive) return false; RefPtr<CSSPrimitiveValue> parsedValue1 = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); RefPtr<CSSPrimitiveValue> parsedValue2; if (num == 2) { value = m_valueList->next(); - validPrimitive = validUnit(value, FLength, m_strict); + validPrimitive = validUnit(value, FLength | FPercent, m_strict); if (!validPrimitive) return false; parsedValue2 = CSSPrimitiveValue::create(value->fValue, (CSSPrimitiveValue::UnitTypes)value->unit); @@ -1242,7 +1239,7 @@ bool CSSParser::parseValue(int propId, bool important) case CSSPropertyWebkitBorderRadius: return parseBorderRadius(propId, important); case CSSPropertyOutlineOffset: - validPrimitive = validUnit(value, FLength, m_strict); + validPrimitive = validUnit(value, FLength | FPercent, m_strict); break; case CSSPropertyTextShadow: // CSS2 property, dropped in CSS2.1, back in CSS3, so treat as CSS3 case CSSPropertyWebkitBoxShadow: @@ -2363,7 +2360,7 @@ bool CSSParser::parseContent(int propId, bool important) parsedValue = CSSImageValue::create(m_styleSheet->completeURL(val->string)); } else if (val->unit == CSSParserValue::Function) { // attr(X) | counter(X [,Y]) | counters(X, Y, [,Z]) | -webkit-gradient(...) - CSSParserValueList* args = val->function->args; + CSSParserValueList* args = val->function->args.get(); if (!args) return false; if (equalIgnoringCase(val->function->name, "attr(")) { @@ -2913,7 +2910,7 @@ PassRefPtr<CSSValue> CSSParser::parseAnimationTimingFunction() return 0; // The only timing function we accept for now is a cubic bezier function. 4 points must be specified. - CSSParserValueList* args = value->function->args; + CSSParserValueList* args = value->function->args.get(); if (!equalIgnoringCase(value->function->name, "cubic-bezier(") || !args || args->size() != 7) return 0; @@ -3088,7 +3085,7 @@ bool CSSParser::parseDashboardRegions(int propId, bool important) // also allow // dashboard-region(label, type) or dashboard-region(label type) // dashboard-region(label, type) or dashboard-region(label type) - CSSParserValueList* args = value->function->args; + CSSParserValueList* args = value->function->args.get(); if (!equalIgnoringCase(value->function->name, "dashboard-region(") || !args) { valid = false; break; @@ -3234,7 +3231,7 @@ PassRefPtr<CSSValue> CSSParser::parseCounterContent(CSSParserValueList* args, bo bool CSSParser::parseShape(int propId, bool important) { CSSParserValue* value = m_valueList->current(); - CSSParserValueList* args = value->function->args; + CSSParserValueList* args = value->function->args.get(); if (!equalIgnoringCase(value->function->name, "rect(") || !args) return false; @@ -3598,7 +3595,7 @@ bool CSSParser::parseFontWeight(bool important) static bool isValidFormatFunction(CSSParserValue* val) { - CSSParserValueList* args = val->function->args; + CSSParserValueList* args = val->function->args.get(); return equalIgnoringCase(val->function->name, "format(") && (args->current()->unit == CSSPrimitiveValue::CSS_STRING || args->current()->unit == CSSPrimitiveValue::CSS_IDENT); } @@ -3621,7 +3618,7 @@ bool CSSParser::parseFontFaceSrc() expectComma = true; } else if (val->unit == CSSParserValue::Function) { // There are two allowed functions: local() and format(). - CSSParserValueList* args = val->function->args; + CSSParserValueList* args = val->function->args.get(); if (args && args->size() == 1) { if (equalIgnoringCase(val->function->name, "local(") && !expectComma) { expectComma = true; @@ -3959,7 +3956,7 @@ static inline int colorIntFromValue(CSSParserValue* v) bool CSSParser::parseColorParameters(CSSParserValue* value, int* colorArray, bool parseAlpha) { - CSSParserValueList* args = value->function->args; + CSSParserValueList* args = value->function->args.get(); CSSParserValue* v = args->current(); Units unitType = FUnknown; // Get the first value and its type @@ -4000,7 +3997,7 @@ bool CSSParser::parseColorParameters(CSSParserValue* value, int* colorArray, boo // The first value, HUE, is in an angle with a value between 0 and 360 bool CSSParser::parseHSLParameters(CSSParserValue* value, double* colorArray, bool parseAlpha) { - CSSParserValueList* args = value->function->args; + CSSParserValueList* args = value->function->args.get(); CSSParserValue* v = args->current(); // Get the first value if (!validUnit(v, FNumber, true)) @@ -4549,7 +4546,7 @@ bool CSSParser::parseBorderRadius(int propId, bool important) if (i - indexAfterSlash >= 4) return false; - if (!validUnit(value, FLength, m_strict)) + if (!validUnit(value, FLength | FPercent, m_strict)) return false; RefPtr<CSSPrimitiveValue> radius = CSSPrimitiveValue::create(value->fValue, static_cast<CSSPrimitiveValue::UnitTypes>(value->unit)); @@ -4649,7 +4646,7 @@ static bool parseGradientColorStop(CSSParser* p, CSSParserValue* a, CSSGradientC !equalIgnoringCase(a->function->name, "color-stop(")) return false; - CSSParserValueList* args = a->function->args; + CSSParserValueList* args = a->function->args.get(); if (!args) return false; @@ -4708,7 +4705,7 @@ bool CSSParser::parseGradient(RefPtr<CSSValue>& gradient) RefPtr<CSSGradientValue> result = CSSGradientValue::create(); // Walk the arguments. - CSSParserValueList* args = m_valueList->current()->function->args; + CSSParserValueList* args = m_valueList->current()->function->args.get(); if (!args || args->size() == 0) return false; @@ -4829,7 +4826,7 @@ bool CSSParser::parseCanvas(RefPtr<CSSValue>& canvas) RefPtr<CSSCanvasValue> result = CSSCanvasValue::create(); // Walk the arguments. - CSSParserValueList* args = m_valueList->current()->function->args; + CSSParserValueList* args = m_valueList->current()->function->args.get(); if (!args || args->size() != 1) return false; @@ -4949,7 +4946,7 @@ PassRefPtr<CSSValueList> CSSParser::parseTransform() return 0; // Every primitive requires at least one argument. - CSSParserValueList* args = value->function->args; + CSSParserValueList* args = value->function->args.get(); if (!args) return 0; @@ -5371,52 +5368,45 @@ CSSParserValue& CSSParser::sinkFloatingValue(CSSParserValue& value) MediaQueryExp* CSSParser::createFloatingMediaQueryExp(const AtomicString& mediaFeature, CSSParserValueList* values) { - delete m_floatingMediaQueryExp; - m_floatingMediaQueryExp = new MediaQueryExp(mediaFeature, values); - return m_floatingMediaQueryExp; + m_floatingMediaQueryExp = adoptPtr(new MediaQueryExp(mediaFeature, values)); + return m_floatingMediaQueryExp.get(); } -MediaQueryExp* CSSParser::sinkFloatingMediaQueryExp(MediaQueryExp* e) +PassOwnPtr<MediaQueryExp> CSSParser::sinkFloatingMediaQueryExp(MediaQueryExp* expression) { - ASSERT(e == m_floatingMediaQueryExp); - m_floatingMediaQueryExp = 0; - return e; + ASSERT_UNUSED(expression, expression == m_floatingMediaQueryExp); + return m_floatingMediaQueryExp.release(); } Vector<MediaQueryExp*>* CSSParser::createFloatingMediaQueryExpList() { - if (m_floatingMediaQueryExpList) { + if (m_floatingMediaQueryExpList) deleteAllValues(*m_floatingMediaQueryExpList); - delete m_floatingMediaQueryExpList; - } - m_floatingMediaQueryExpList = new Vector<MediaQueryExp*>; - return m_floatingMediaQueryExpList; + m_floatingMediaQueryExpList = adoptPtr(new Vector<MediaQueryExp*>); + return m_floatingMediaQueryExpList.get(); } -Vector<MediaQueryExp*>* CSSParser::sinkFloatingMediaQueryExpList(Vector<MediaQueryExp*>* l) +PassOwnPtr<Vector<MediaQueryExp*> > CSSParser::sinkFloatingMediaQueryExpList(Vector<MediaQueryExp*>* list) { - ASSERT(l == m_floatingMediaQueryExpList); - m_floatingMediaQueryExpList = 0; - return l; + ASSERT_UNUSED(list, list == m_floatingMediaQueryExpList); + return m_floatingMediaQueryExpList.release(); } -MediaQuery* CSSParser::createFloatingMediaQuery(MediaQuery::Restrictor r, const String& mediaType, Vector<MediaQueryExp*>* exprs) +MediaQuery* CSSParser::createFloatingMediaQuery(MediaQuery::Restrictor restrictor, const String& mediaType, PassOwnPtr<Vector<MediaQueryExp*> > expressions) { - delete m_floatingMediaQuery; - m_floatingMediaQuery = new MediaQuery(r, mediaType, exprs); - return m_floatingMediaQuery; + m_floatingMediaQuery = adoptPtr(new MediaQuery(restrictor, mediaType, expressions)); + return m_floatingMediaQuery.get(); } -MediaQuery* CSSParser::createFloatingMediaQuery(Vector<MediaQueryExp*>* exprs) +MediaQuery* CSSParser::createFloatingMediaQuery(PassOwnPtr<Vector<MediaQueryExp*> > expressions) { - return createFloatingMediaQuery(MediaQuery::None, "all", exprs); + return createFloatingMediaQuery(MediaQuery::None, "all", expressions); } -MediaQuery* CSSParser::sinkFloatingMediaQuery(MediaQuery* mq) +PassOwnPtr<MediaQuery> CSSParser::sinkFloatingMediaQuery(MediaQuery* query) { - ASSERT(mq == m_floatingMediaQuery); - m_floatingMediaQuery = 0; - return mq; + ASSERT_UNUSED(query, query == m_floatingMediaQuery); + return m_floatingMediaQuery.release(); } MediaList* CSSParser::createMediaList() @@ -5678,7 +5668,7 @@ bool CSSParser::checkForVariables(CSSParserValueList* valueList) break; } - if (valueList->valueAt(i)->unit == CSSParserValue::Function && checkForVariables(valueList->valueAt(i)->function->args)) { + if (valueList->valueAt(i)->unit == CSSParserValue::Function && checkForVariables(valueList->valueAt(i)->function->args.get())) { hasVariables = true; break; } |