bool parseValueMultiplicativeExpression(CSSParserValueList* tokens, int depth, unsigned* index, Value* result) { if (checkDepthAndIndex(&depth, *index, tokens) != OK) return false; if (!parseValueTerm(tokens, depth, index, result)) return false; while (*index < tokens->size() - 1) { char operatorCharacter = operatorValue(tokens, *index); if (operatorCharacter != CalcMultiply && operatorCharacter != CalcDivide) break; ++*index; Value rhs; if (!parseValueTerm(tokens, depth, index, &rhs)) return false; result->value = CSSCalcBinaryOperation::create(result->value, rhs.value, static_cast<CalcOperator>(operatorCharacter)); if (!result->value) return false; } ASSERT(*index <= tokens->size()); return true; }
bool parseValueMultiplicativeExpression(CSSParserTokenRange& tokens, int depth, Value* result) { if (checkDepthAndIndex(&depth, tokens) != OK) return false; if (!parseValueTerm(tokens, depth, result)) return false; while (!tokens.atEnd()) { char operatorCharacter = operatorValue(tokens.peek()); if (operatorCharacter != CalcMultiply && operatorCharacter != CalcDivide) break; tokens.consumeIncludingWhitespace(); Value rhs; if (!parseValueTerm(tokens, depth, &rhs)) return false; result->value = CSSCalcBinaryOperation::createSimplified(result->value, rhs.value, static_cast<CalcOperator>(operatorCharacter)); if (!result->value) return false; } return true; }