diff --git a/uppsrc/TCore/CalcNode.cpp b/uppsrc/TCore/CalcNode.cpp index 45ab11e02..3a256331d 100644 --- a/uppsrc/TCore/CalcNode.cpp +++ b/uppsrc/TCore/CalcNode.cpp @@ -613,6 +613,12 @@ int CalcContext::EvaluateInt(String expr) return !!node ? node->CalcInt(*this) : int(Null); } +int64 CalcContext::EvaluateInt64(String expr) +{ + CalcNodePtr node = CalcParser().ScanVoid(expr); + return !!node ? node->CalcInt64(*this) : int(Null); +} + Date CalcContext::EvaluateDate(String expr) { CalcNodePtr node = CalcParser().ScanVoid(expr); @@ -1047,6 +1053,16 @@ int CalcNode::CalcInt(CalcContext& context) const return v; } +int64 CalcNode::CalcInt64(CalcContext& context) const +{ + if(this == 0) + return Null; + Value v = Calc(context); + if(!IsNull(v) && !IsNumber(v)) + throw Exc(t_("Number expected, found: ") + context.FormatNull(v)); + return v; +} + Date CalcNode::CalcDate(CalcContext& context) const { if(this == 0) diff --git a/uppsrc/TCore/CalcNode.h b/uppsrc/TCore/CalcNode.h index f7e53b23b..9e5796a5b 100644 --- a/uppsrc/TCore/CalcNode.h +++ b/uppsrc/TCore/CalcNode.h @@ -27,6 +27,7 @@ public: double CalcDouble(CalcContext& context) const; String CalcString(CalcContext& context) const; int CalcInt(CalcContext& context) const; + int64 CalcInt64(CalcContext& context) const; Date CalcDate(CalcContext& context) const; Time CalcTime(CalcContext& context) const; bool CalcBool(CalcContext& context) const; @@ -348,6 +349,7 @@ public: double EvaluateDouble(String expr); String EvaluateString(String expr); int EvaluateInt(String expr); + int64 EvaluateInt64(String expr); Date EvaluateDate(String expr); Time EvaluateTime(String expr); bool EvaluateBool(String expr, bool null_value = false);