diff --git a/poincare/include/poincare/matrix_data.h b/poincare/include/poincare/matrix_data.h index f168aaf1b..53ef2fbe7 100644 --- a/poincare/include/poincare/matrix_data.h +++ b/poincare/include/poincare/matrix_data.h @@ -25,7 +25,6 @@ private: int m_numberOfRows; int m_numberOfColumns; const Expression ** m_operands; - static Complex * defaultExpression(); }; } diff --git a/poincare/src/expression_parser.y b/poincare/src/expression_parser.y index 4c989fa9c..8218558e7 100644 --- a/poincare/src/expression_parser.y +++ b/poincare/src/expression_parser.y @@ -144,7 +144,7 @@ lstData: /* MATRICES_ARE_DEFINED */ mtxData: LEFT_BRACKET lstData RIGHT_BRACKET { $$ = new Poincare::MatrixData($2, false); $2->detachOperands(); delete $2; } - | mtxData LEFT_BRACKET lstData RIGHT_BRACKET { $$ = $1; $$->pushListData($3, false); $3->detachOperands(); delete $3; } + | mtxData LEFT_BRACKET lstData RIGHT_BRACKET { if ($3->numberOfOperands() != $1->numberOfColumns()) { delete $1; delete $3; YYERROR; } ; $$ = $1; $$->pushListData($3, false); $3->detachOperands(); delete $3; } number: DIGITS { $$ = new Poincare::Rational(Poincare::Integer($1.address, false)); } diff --git a/poincare/src/matrix_data.cpp b/poincare/src/matrix_data.cpp index 8c1e31a3c..4ef93f708 100644 --- a/poincare/src/matrix_data.cpp +++ b/poincare/src/matrix_data.cpp @@ -23,10 +23,6 @@ MatrixData::MatrixData(ListData * listData, bool clone) : } } -Complex * MatrixData::defaultExpression() { - return new Complex(Complex::Float(0.0)); -} - MatrixData::~MatrixData() { if (m_operands != nullptr) { for (int i=0; inumberOfOperands() == m_numberOfColumns); for (int i = 0; i < m_numberOfRows*m_numberOfColumns; i++) { newOperands[i] = m_operands[i]; } for (int i = 0; i < m_numberOfColumns; i++) { - int max = listData->numberOfOperands(); if (clone) { - newOperands[m_numberOfRows*m_numberOfColumns+i] = i < max ? listData->operand(i)->clone() : defaultExpression(); + newOperands[m_numberOfRows*m_numberOfColumns+i] = listData->operand(i)->clone(); } else { - newOperands[m_numberOfRows*m_numberOfColumns+i] = i < max ? listData->operand(i) : defaultExpression(); + newOperands[m_numberOfRows*m_numberOfColumns+i] = listData->operand(i); } } delete[] m_operands;