File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -2263,6 +2263,45 @@ namespace pythonic
22632263 return addPromoted (other);
22642264 }
22652265
2266+ // Unary plus: returns a copy (Python semantics)
2267+ var operator +() const
2268+ {
2269+ if (isNumeric ())
2270+ {
2271+ return *this ;
2272+ }
2273+ throw pythonic::PythonicTypeError (" bad operand type for unary +: '" + type () + " '" );
2274+ }
2275+
2276+ // Unary minus: returns negated value (Python semantics, type-preserving)
2277+ var operator -() const
2278+ {
2279+ switch (tag_)
2280+ {
2281+ case TypeTag::INT :
2282+ return var (-var_get<int >());
2283+ case TypeTag::LONG :
2284+ return var (-var_get<long >());
2285+ case TypeTag::LONG_LONG :
2286+ return var (-var_get<long long >());
2287+ case TypeTag::FLOAT :
2288+ return var (-var_get<float >());
2289+ case TypeTag::DOUBLE :
2290+ return var (-var_get<double >());
2291+ case TypeTag::LONG_DOUBLE :
2292+ return var (-var_get<long double >());
2293+ case TypeTag::UINT :
2294+ return var (-static_cast <int >(var_get<unsigned int >()));
2295+ case TypeTag::ULONG :
2296+ return var (-static_cast <long >(var_get<unsigned long >()));
2297+ case TypeTag::ULONG_LONG :
2298+ return var (-static_cast <long long >(var_get<unsigned long long >()));
2299+ case TypeTag::BOOL :
2300+ return var (-static_cast <int >(var_get<bool >()));
2301+ default :
2302+ throw pythonic::PythonicTypeError (" bad operand type for unary -: '" + type () + " '" );
2303+ }
2304+ }
22662305 var operator -(const var &other) const
22672306 {
22682307 // Fast-path: same type
You can’t perform that action at this time.
0 commit comments