#include "core/css/MediaValues.h"
#include "core/css/parser/MediaQueryToken.h"
-namespace WebCore {
+namespace blink {
-bool SizesCalcParser::parse(MediaQueryTokenIterator start, MediaQueryTokenIterator end, PassRefPtr<MediaValues> mediaValues, unsigned& result)
+SizesCalcParser::SizesCalcParser(MediaQueryTokenIterator start, MediaQueryTokenIterator end, PassRefPtr<MediaValues> mediaValues)
+ : m_mediaValues(mediaValues)
+ , m_viewportDependant(false)
+ , m_result(0)
{
- SizesCalcParser parser(mediaValues);
- if (!parser.calcToReversePolishNotation(start, end))
- return false;
- return parser.calculate(result);
+ m_isValid = calcToReversePolishNotation(start, end) && calculate();
+}
+
+unsigned SizesCalcParser::result() const
+{
+ ASSERT(m_isValid);
+ return m_result;
}
static bool operatorPriority(UChar cc, bool& highPriority)
appendNumber(*it);
break;
case DimensionToken:
+ m_viewportDependant = m_viewportDependant || CSSPrimitiveValue::isViewportPercentageLength(it->unitType());
if (!CSSPrimitiveValue::isLength(it->unitType()) || !appendLength(*it))
return false;
break;
return true;
}
-bool SizesCalcParser::calculate(unsigned& result)
+bool SizesCalcParser::calculate()
{
Vector<SizesCalcValue> stack;
for (Vector<SizesCalcValue>::iterator it = m_valueList.begin(); it != m_valueList.end(); ++it) {
}
}
if (stack.size() == 1 && stack.last().isLength) {
- result = clampTo<unsigned>(stack.last().value);
+ m_result = clampTo<unsigned>(stack.last().value);
return true;
}
return false;
}
-} // namespace WebCore
+} // namespace blink