From aef7bbdf629cd8efb8ca5e29d4985ad18ebc62c2 Mon Sep 17 00:00:00 2001 From: Eivind Kvedalen Date: Thu, 3 Dec 2015 21:41:50 +0100 Subject: [PATCH] Spreadsheet: AggregateFunctionExpression missed its own implementation of copy(). This causes a crash during undo if this class is used. --- src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp | 13 +++++++++++++ src/Mod/Spreadsheet/App/SpreadsheetExpression.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp b/src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp index 807ed22d24..a25199624c 100644 --- a/src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp +++ b/src/Mod/Spreadsheet/App/SpreadsheetExpression.cpp @@ -87,6 +87,19 @@ AggregateFunctionExpression::~AggregateFunctionExpression() { } +Expression *AggregateFunctionExpression::copy() const +{ + std::vector::const_iterator i = args.begin(); + std::vector a; + + while (i != args.end()) { + a.push_back((*i)->copy()); + ++i; + } + + return new AggregateFunctionExpression(owner, f, a); +} + /** * Evaluate function. Returns a NumberExpression if evaluation is successfuly. * Throws an exception if something fails. diff --git a/src/Mod/Spreadsheet/App/SpreadsheetExpression.h b/src/Mod/Spreadsheet/App/SpreadsheetExpression.h index a7f0be9124..d2848cd879 100644 --- a/src/Mod/Spreadsheet/App/SpreadsheetExpression.h +++ b/src/Mod/Spreadsheet/App/SpreadsheetExpression.h @@ -90,6 +90,8 @@ public: virtual ~AggregateFunctionExpression(); + virtual Expression * copy() const; + virtual App::Expression * eval() const; virtual std::string toString() const;