Skip to content

Commit 69d22a4

Browse files
committed
added +,- operators so user can do -a;
1 parent 3ff3763 commit 69d22a4

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

include/pythonic/pythonicVars.hpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff 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

0 commit comments

Comments
 (0)