diff --git a/uppsrc/TCore/CalcNode.cpp b/uppsrc/TCore/CalcNode.cpp index f02eda156..e5df8d077 100644 --- a/uppsrc/TCore/CalcNode.cpp +++ b/uppsrc/TCore/CalcNode.cpp @@ -579,22 +579,22 @@ Value CalcContext::Get(String name) const return Value(); } -Value CalcContext::Evaluate(String expr) +Value CalcContext::TryEvaluate(String expr) { - CalcParser parser; - try - { - CalcNodePtr cn = parser.ScanVoid(expr); - if(!cn) - return Value(); - return cn->Calc(*this); + try { + return Evaluate(expr); } - catch(Exc e) - { + catch(Exc e) { return ErrorValue(e); } } +Value CalcContext::Evaluate(String expr) +{ + CalcNodePtr node = CalcParser().ScanVoid(expr); + return !!node ? node->Calc(*this) : Value(); +} + double CalcContext::EvaluateDouble(String expr) { CalcNodePtr node = CalcParser().ScanVoid(expr); diff --git a/uppsrc/TCore/CalcNode.h b/uppsrc/TCore/CalcNode.h index af9aed940..0f1da2bd4 100644 --- a/uppsrc/TCore/CalcNode.h +++ b/uppsrc/TCore/CalcNode.h @@ -342,6 +342,8 @@ public: CalcContext(const CalcContext& context, int); virtual ~CalcContext(); + Value TryEvaluate(String expr); + Value Evaluate(String expr); double EvaluateDouble(String expr); String EvaluateString(String expr);