summaryrefslogtreecommitdiff
path: root/unoidl/source/sourceprovider-parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'unoidl/source/sourceprovider-parser.y')
-rw-r--r--unoidl/source/sourceprovider-parser.y20
1 files changed, 12 insertions, 8 deletions
diff --git a/unoidl/source/sourceprovider-parser.y b/unoidl/source/sourceprovider-parser.y
index 9c7e00e37b65..4d4f8e692b64 100644
--- a/unoidl/source/sourceprovider-parser.y
+++ b/unoidl/source/sourceprovider-parser.y
@@ -3078,15 +3078,19 @@ unaryExpr:
$$ = unoidl::detail::SourceProviderExpr::Int(-$2.ival);
break;
case unoidl::detail::SourceProviderExpr::TYPE_UINT:
- if ($2.uval > SAL_MAX_INT64) {
- error(
- @2, yyscanner,
- ("cannot negate out-of-range value "
- + OUString::number($2.uval)));
- YYERROR;
+ if ($2.uval == SAL_CONST_UINT64(0x8000000000000000)) {
+ $$ = unoidl::detail::SourceProviderExpr::Int(SAL_MIN_INT64);
+ } else {
+ if ($2.uval > SAL_MAX_INT64) {
+ error(
+ @2, yyscanner,
+ ("cannot negate out-of-range value "
+ + OUString::number($2.uval)));
+ YYERROR;
+ }
+ $$ = unoidl::detail::SourceProviderExpr::Int(
+ -static_cast<sal_Int64>($2.uval));
}
- $$ = unoidl::detail::SourceProviderExpr::Int(
- -static_cast<sal_Int64>($2.uval));
break;
case unoidl::detail::SourceProviderExpr::TYPE_FLOAT:
$$ = unoidl::detail::SourceProviderExpr::Float(-$2.fval);