From ddb05d930db1f5732bd86f6a6ce4728f87ce2aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 2 Aug 2019 11:45:34 +0200 Subject: [PATCH] [poincare/parser] Parse one multiplication/addition for 1+1+1+1+1+1 --- poincare/src/parsing/parser.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/poincare/src/parsing/parser.cpp b/poincare/src/parsing/parser.cpp index 0deb8082e..6f23389a5 100644 --- a/poincare/src/parsing/parser.cpp +++ b/poincare/src/parsing/parser.cpp @@ -160,7 +160,12 @@ void Parser::parseNumber(Expression & leftHandSide, Token::Type stoppingType) { void Parser::parsePlus(Expression & leftHandSide, Token::Type stoppingType) { Expression rightHandSide; if (parseBinaryOperator(leftHandSide, rightHandSide, Token::Plus)) { - leftHandSide = Addition::Builder(leftHandSide, rightHandSide); + if (leftHandSide.type() == ExpressionNode::Type::Addition) { + int childrenCount = leftHandSide.numberOfChildren(); + static_cast(leftHandSide).addChildAtIndexInPlace(rightHandSide, childrenCount, childrenCount); + } else { + leftHandSide = Addition::Builder(leftHandSide, rightHandSide); + } } } @@ -191,7 +196,12 @@ void Parser::parseMinus(Expression & leftHandSide, Token::Type stoppingType) { void Parser::parseTimes(Expression & leftHandSide, Token::Type stoppingType) { Expression rightHandSide; if (parseBinaryOperator(leftHandSide, rightHandSide, Token::Times)) { - leftHandSide = MultiplicationExplicite::Builder(leftHandSide, rightHandSide); + if (leftHandSide.type() == ExpressionNode::Type::MultiplicationExplicite) { + int childrenCount = leftHandSide.numberOfChildren(); + static_cast(leftHandSide).addChildAtIndexInPlace(rightHandSide, childrenCount, childrenCount); + } else { + leftHandSide = MultiplicationExplicite::Builder(leftHandSide, rightHandSide); + } } }