[Libreoffice-commits] core.git: 8 commits - idlc/inc idlc/source solenv/bin
Stephan Bergmann
sbergman at redhat.com
Sun Sep 27 23:12:33 PDT 2015
idlc/inc/idlc/astexpression.hxx | 16 -
idlc/source/astexpression.cxx | 406 ++++++++++++++----------------
solenv/bin/macosx-change-install-names.pl | 2
3 files changed, 205 insertions(+), 219 deletions(-)
New commits:
commit 262b5e0b3e870ea51c590de8d6cc34111c34ad0f
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sun Sep 27 19:27:35 2015 +0200
SDK apps actually find URE libs via DYLD_LIBRARY_PATH
Change-Id: I29c8177ee0c79f7e2b1834d4c181289cccfab17a
diff --git a/solenv/bin/macosx-change-install-names.pl b/solenv/bin/macosx-change-install-names.pl
index 0322872..ee8320c 100644
--- a/solenv/bin/macosx-change-install-names.pl
+++ b/solenv/bin/macosx-change-install-names.pl
@@ -49,7 +49,7 @@ sub action($$$)
('app/UREBIN/URELIB' => '@executable_path/../Frameworks',
'app/OOO/URELIB' => '@executable_path/../Frameworks',
'app/OOO/OOO' => '@executable_path/../Frameworks',
- 'app/SDKBIN/URELIB' => '@executable_path/../Frameworks',
+ 'app/SDKBIN/URELIB' => '@__VIA_LIBRARY_PATH__',
'app/NONE/URELIB' => '@__VIA_LIBRARY_PATH__',
'app/NONE/OOO' => '@__VIA_LIBRARY_PATH__',
'app/NONE/NONE' => '@__VIA_LIBRARY_PATH__',
commit a5bb6eff8672f5a6e7ed1f885f69ca8434db6ce7
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sun Sep 27 19:23:05 2015 +0200
Return unique_ptr from AstExpression::eval_* functions
...generally, idlc leaks most memory, and e.g. trying to turn
AstExpression::m_exprValue into a unique_ptr would fail because
AstExpression::eval_symbol returns a pointer to an object "owned" elsewhere (but
never actually deleted by its owner). So improvement of idlc ends here---for
one, it does not improve anything to try and make idlc not leak memory, and for
another, idlc is doomed to go away anyway.
Change-Id: I36f54130c8bfd1933126ae7f8a982e50d9bc616e
diff --git a/idlc/inc/idlc/astexpression.hxx b/idlc/inc/idlc/astexpression.hxx
index deb0da4..6723297 100644
--- a/idlc/inc/idlc/astexpression.hxx
+++ b/idlc/inc/idlc/astexpression.hxx
@@ -19,6 +19,10 @@
#ifndef INCLUDED_IDLC_INC_IDLC_ASTEXPRESSION_HXX
#define INCLUDED_IDLC_INC_IDLC_ASTEXPRESSION_HXX
+#include <sal/config.h>
+
+#include <memory>
+
#include <idlc/idlc.hxx>
// Enum to define all the different operators to combine expressions
@@ -120,9 +124,9 @@ private:
// Fill out the lineno, filename and definition scope details
void fillDefinitionDetails();
// Evaluate different sets of operators
- AstExprValue* eval_bin_op();
- AstExprValue* eval_bit_op();
- AstExprValue* eval_un_op();
+ std::unique_ptr<AstExprValue> eval_bin_op();
+ std::unique_ptr<AstExprValue> eval_bit_op();
+ std::unique_ptr<AstExprValue> eval_un_op();
AstExprValue* eval_symbol();
AstScope* m_pScope; // scope defined in
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index 3798b7a..593cdb6 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -885,19 +885,19 @@ void AstExpression::evaluate()
case EC_mul:
case EC_div:
case EC_mod:
- m_exprValue = eval_bin_op();
+ m_exprValue = eval_bin_op().release();
break;
case EC_or:
case EC_xor:
case EC_and:
case EC_left:
case EC_right:
- m_exprValue = eval_bit_op();
+ m_exprValue = eval_bit_op().release();
break;
case EC_u_plus:
case EC_u_minus:
case EC_bit_neg:
- m_exprValue = eval_un_op();
+ m_exprValue = eval_un_op().release();
break;
case EC_symbol:
m_exprValue = eval_symbol();
@@ -907,7 +907,7 @@ void AstExpression::evaluate()
}
}
-AstExprValue* AstExpression::eval_bin_op()
+std::unique_ptr<AstExprValue> AstExpression::eval_bin_op()
{
ExprType eType = ET_double;
@@ -955,10 +955,10 @@ AstExprValue* AstExpression::eval_bin_op()
return NULL;
}
- return retval.release();
+ return retval;
}
-AstExprValue* AstExpression::eval_bit_op()
+std::unique_ptr<AstExprValue> AstExpression::eval_bit_op()
{
if (m_subExpr1 == NULL || m_subExpr2 == NULL)
return NULL;
@@ -997,10 +997,10 @@ AstExprValue* AstExpression::eval_bit_op()
return NULL;
}
- return retval.release();
+ return retval;
}
-AstExprValue* AstExpression::eval_un_op()
+std::unique_ptr<AstExprValue> AstExpression::eval_un_op()
{
if (m_subExpr1 == NULL)
return NULL;
@@ -1030,7 +1030,7 @@ AstExprValue* AstExpression::eval_un_op()
return NULL;
}
- return retval.release();
+ return retval;
}
AstExprValue* AstExpression::eval_symbol()
commit 1f8723bf91bd48d432f1d2b930d0908ff28f44df
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Sep 26 22:55:04 2015 +0200
m_exprValue cannot be non-null here
...as, like the other private AstExpression::eval_* functions, eval_un_op is
only called from AstExpression::evaluate if m_exprValue is null
Change-Id: I812ea249d33a72f95b9692dc72ba6631ffbd4884
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index 3927a3f..3798b7a 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -1002,9 +1002,6 @@ AstExprValue* AstExpression::eval_bit_op()
AstExprValue* AstExpression::eval_un_op()
{
- if (m_exprValue != NULL)
- return m_exprValue;
-
if (m_subExpr1 == NULL)
return NULL;
m_subExpr1->evaluate();
commit 84001596c9ee3d616ba9f0afffb5b1e959278f6c
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Sep 26 22:37:12 2015 +0200
AstExpression::coerce always returned m_exprValue, so simplify its signature
Change-Id: I4fa380bc7e8d5b3581468cb0e6417b99587a1e9f
diff --git a/idlc/inc/idlc/astexpression.hxx b/idlc/inc/idlc/astexpression.hxx
index 1bd6f96..deb0da4 100644
--- a/idlc/inc/idlc/astexpression.hxx
+++ b/idlc/inc/idlc/astexpression.hxx
@@ -104,11 +104,9 @@ public:
{ return m_combOperator; }
AstExprValue* getExprValue()
{ return m_exprValue; }
- void setExprValue(AstExprValue *pEv)
- { m_exprValue = pEv; }
// Evaluation and value coercion
- AstExprValue* coerce(ExprType type);
+ bool coerce(ExprType type);
// Evaluate then store value inside this AstExpression
void evaluate();
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index c796ed5..3927a3f 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -685,7 +685,7 @@ coerce_value(AstExprValue *ev, ExprType t)
}
}
-AstExprValue* AstExpression::coerce(ExprType t)
+bool AstExpression::coerce(ExprType t)
{
AstExprValue *copy;
@@ -693,7 +693,7 @@ AstExprValue* AstExpression::coerce(ExprType t)
* Is it already of the right type?
*/
if (m_exprValue != NULL && m_exprValue->et == t)
- return m_exprValue;
+ return true;
/*
* OK, must coerce
*
@@ -702,7 +702,7 @@ AstExprValue* AstExpression::coerce(ExprType t)
*/
evaluate();
if (m_exprValue == NULL)
- return NULL;
+ return false;
/*
* Create a copy to contain coercion result
@@ -755,7 +755,7 @@ AstExprValue* AstExpression::coerce(ExprType t)
m_exprValue = copy;
- return copy;
+ return m_exprValue != nullptr;
}
bool AstExpression::operator==(AstExpression *pExpr)
@@ -919,14 +919,12 @@ AstExprValue* AstExpression::eval_bin_op()
m_subExpr1->evaluate();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
- m_subExpr1->setExprValue(m_subExpr1->coerce(eType));
- if (m_subExpr1->getExprValue() == NULL)
+ if (!m_subExpr1->coerce(eType))
return NULL;
m_subExpr2->evaluate();
if (m_subExpr2->getExprValue() == NULL)
return NULL;
- m_subExpr2->setExprValue(m_subExpr2->coerce(eType));
- if (m_subExpr2->getExprValue() == NULL)
+ if (!m_subExpr2->coerce(eType))
return NULL;
std::unique_ptr< AstExprValue > retval(new AstExprValue());
@@ -967,14 +965,12 @@ AstExprValue* AstExpression::eval_bit_op()
m_subExpr1->evaluate();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
- m_subExpr1->setExprValue(m_subExpr1->coerce(ET_long));
- if (m_subExpr1->getExprValue() == NULL)
+ if (!m_subExpr1->coerce(ET_long))
return NULL;
m_subExpr2->evaluate();
if (m_subExpr2->getExprValue() == NULL)
return NULL;
- m_subExpr2->setExprValue(m_subExpr2->coerce(ET_long));
- if (m_subExpr2->getExprValue() == NULL)
+ if (!m_subExpr2->coerce(ET_long))
return NULL;
std::unique_ptr< AstExprValue > retval(new AstExprValue());
@@ -1014,8 +1010,7 @@ AstExprValue* AstExpression::eval_un_op()
m_subExpr1->evaluate();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
- m_subExpr1->setExprValue(m_subExpr1->coerce(ET_double));
- if (m_subExpr1->getExprValue() == NULL)
+ if (!m_subExpr1->coerce(ET_double))
return NULL;
std::unique_ptr< AstExprValue > retval(new AstExprValue());
@@ -1030,8 +1025,7 @@ AstExprValue* AstExpression::eval_un_op()
retval->u.lval = -(m_subExpr1->getExprValue()->u.lval);
break;
case EC_bit_neg:
- m_subExpr1->setExprValue(m_subExpr1->coerce(ET_long));
- if (m_subExpr1->getExprValue() == NULL)
+ if (!m_subExpr1->coerce(ET_long))
return NULL;
retval->u.lval = ~m_subExpr1->getExprValue()->u.lval;
break;
commit b085d55e5546c94d4e6e0f8cb6ff6d9f28c9d2e6
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Sep 26 22:30:59 2015 +0200
Remove redundant AstExpression::eval_internal
Change-Id: I27c067adb2b09ad65a8449f2d88a9cdde149d4be
diff --git a/idlc/inc/idlc/astexpression.hxx b/idlc/inc/idlc/astexpression.hxx
index 32364fa..1bd6f96 100644
--- a/idlc/inc/idlc/astexpression.hxx
+++ b/idlc/inc/idlc/astexpression.hxx
@@ -121,8 +121,6 @@ public:
private:
// Fill out the lineno, filename and definition scope details
void fillDefinitionDetails();
- // Internal evaluation
- void eval_internal();
// Evaluate different sets of operators
AstExprValue* eval_bin_op();
AstExprValue* eval_bit_op();
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index 9e0469a..c796ed5 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -700,7 +700,7 @@ AstExprValue* AstExpression::coerce(ExprType t)
* First, evaluate it, then try to coerce result type
* If already evaluated, return the result
*/
- eval_internal();
+ evaluate();
if (m_exprValue == NULL)
return NULL;
@@ -758,11 +758,6 @@ AstExprValue* AstExpression::coerce(ExprType t)
return copy;
}
-void AstExpression::evaluate()
-{
- eval_internal();
-}
-
bool AstExpression::operator==(AstExpression *pExpr)
{
bool bRet = false;
@@ -873,7 +868,7 @@ void AstExpression::fillDefinitionDetails()
m_fileName = idlc()->getFileName();
}
-void AstExpression::eval_internal()
+void AstExpression::evaluate()
{
/*
* Already evaluated?
@@ -921,13 +916,13 @@ AstExprValue* AstExpression::eval_bin_op()
if (m_subExpr1 == NULL || m_subExpr2 == NULL)
return NULL;
- m_subExpr1->eval_internal();
+ m_subExpr1->evaluate();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
m_subExpr1->setExprValue(m_subExpr1->coerce(eType));
if (m_subExpr1->getExprValue() == NULL)
return NULL;
- m_subExpr2->eval_internal();
+ m_subExpr2->evaluate();
if (m_subExpr2->getExprValue() == NULL)
return NULL;
m_subExpr2->setExprValue(m_subExpr2->coerce(eType));
@@ -969,13 +964,13 @@ AstExprValue* AstExpression::eval_bit_op()
{
if (m_subExpr1 == NULL || m_subExpr2 == NULL)
return NULL;
- m_subExpr1->eval_internal();
+ m_subExpr1->evaluate();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
m_subExpr1->setExprValue(m_subExpr1->coerce(ET_long));
if (m_subExpr1->getExprValue() == NULL)
return NULL;
- m_subExpr2->eval_internal();
+ m_subExpr2->evaluate();
if (m_subExpr2->getExprValue() == NULL)
return NULL;
m_subExpr2->setExprValue(m_subExpr2->coerce(ET_long));
@@ -1016,7 +1011,7 @@ AstExprValue* AstExpression::eval_un_op()
if (m_subExpr1 == NULL)
return NULL;
- m_subExpr1->eval_internal();
+ m_subExpr1->evaluate();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
m_subExpr1->setExprValue(m_subExpr1->coerce(ET_double));
@@ -1097,7 +1092,7 @@ AstExprValue* AstExpression::eval_symbol()
* OK, now evaluate the constant we just got, to produce its value
*/
pConst = static_cast< AstConstant* >(pDecl);
- pConst->getConstValue()->eval_internal();
+ pConst->getConstValue()->evaluate();
return pConst->getConstValue()->getExprValue();
}
commit cb31ea6981a336c16bc29ef2f0d323da9fb2dda4
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Sep 26 22:29:24 2015 +0200
AstExpression::eval_internal always returns m_exprValue
Change-Id: I214fb3d14cef07357860a88fae1652a7d1a282b0
diff --git a/idlc/inc/idlc/astexpression.hxx b/idlc/inc/idlc/astexpression.hxx
index 32c8bc7..32364fa 100644
--- a/idlc/inc/idlc/astexpression.hxx
+++ b/idlc/inc/idlc/astexpression.hxx
@@ -122,7 +122,7 @@ private:
// Fill out the lineno, filename and definition scope details
void fillDefinitionDetails();
// Internal evaluation
- AstExprValue* eval_internal();
+ void eval_internal();
// Evaluate different sets of operators
AstExprValue* eval_bin_op();
AstExprValue* eval_bit_op();
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index 0fec297..9e0469a 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -700,7 +700,7 @@ AstExprValue* AstExpression::coerce(ExprType t)
* First, evaluate it, then try to coerce result type
* If already evaluated, return the result
*/
- m_exprValue = eval_internal();
+ eval_internal();
if (m_exprValue == NULL)
return NULL;
@@ -760,7 +760,7 @@ AstExprValue* AstExpression::coerce(ExprType t)
void AstExpression::evaluate()
{
- m_exprValue = eval_internal();
+ eval_internal();
}
bool AstExpression::operator==(AstExpression *pExpr)
@@ -873,13 +873,13 @@ void AstExpression::fillDefinitionDetails()
m_fileName = idlc()->getFileName();
}
-AstExprValue* AstExpression::eval_internal()
+void AstExpression::eval_internal()
{
/*
* Already evaluated?
*/
if ( m_exprValue != NULL )
- return m_exprValue;
+ return;
/*
* OK, must evaluate operator
*/
@@ -891,27 +891,25 @@ AstExprValue* AstExpression::eval_internal()
case EC_div:
case EC_mod:
m_exprValue = eval_bin_op();
- return m_exprValue;
+ break;
case EC_or:
case EC_xor:
case EC_and:
case EC_left:
case EC_right:
m_exprValue = eval_bit_op();
- return m_exprValue;
+ break;
case EC_u_plus:
case EC_u_minus:
case EC_bit_neg:
m_exprValue = eval_un_op();
- return m_exprValue;
+ break;
case EC_symbol:
m_exprValue = eval_symbol();
- return m_exprValue;
+ break;
case EC_none:
- return NULL;
+ break;
}
-
- return NULL;
}
AstExprValue* AstExpression::eval_bin_op()
@@ -923,13 +921,13 @@ AstExprValue* AstExpression::eval_bin_op()
if (m_subExpr1 == NULL || m_subExpr2 == NULL)
return NULL;
- m_subExpr1->setExprValue(m_subExpr1->eval_internal());
+ m_subExpr1->eval_internal();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
m_subExpr1->setExprValue(m_subExpr1->coerce(eType));
if (m_subExpr1->getExprValue() == NULL)
return NULL;
- m_subExpr2->setExprValue(m_subExpr2->eval_internal());
+ m_subExpr2->eval_internal();
if (m_subExpr2->getExprValue() == NULL)
return NULL;
m_subExpr2->setExprValue(m_subExpr2->coerce(eType));
@@ -971,13 +969,13 @@ AstExprValue* AstExpression::eval_bit_op()
{
if (m_subExpr1 == NULL || m_subExpr2 == NULL)
return NULL;
- m_subExpr1->setExprValue(m_subExpr1->eval_internal());
+ m_subExpr1->eval_internal();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
m_subExpr1->setExprValue(m_subExpr1->coerce(ET_long));
if (m_subExpr1->getExprValue() == NULL)
return NULL;
- m_subExpr2->setExprValue(m_subExpr2->eval_internal());
+ m_subExpr2->eval_internal();
if (m_subExpr2->getExprValue() == NULL)
return NULL;
m_subExpr2->setExprValue(m_subExpr2->coerce(ET_long));
@@ -1018,7 +1016,7 @@ AstExprValue* AstExpression::eval_un_op()
if (m_subExpr1 == NULL)
return NULL;
- m_subExpr1->setExprValue(m_subExpr1->eval_internal());
+ m_subExpr1->eval_internal();
if (m_subExpr1->getExprValue() == NULL)
return NULL;
m_subExpr1->setExprValue(m_subExpr1->coerce(ET_double));
@@ -1099,7 +1097,8 @@ AstExprValue* AstExpression::eval_symbol()
* OK, now evaluate the constant we just got, to produce its value
*/
pConst = static_cast< AstConstant* >(pDecl);
- return pConst->getConstValue()->eval_internal();
+ pConst->getConstValue()->eval_internal();
+ return pConst->getConstValue()->getExprValue();
}
OString AstExpression::toString()
commit 6b3feb91b8c0d78e49c0b0bcb969879c980505be
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Sep 26 22:22:08 2015 +0200
AstExpression::coerce is always called with bAssign = true
Change-Id: I883b8319fde0bd3cc65efe64eb2faf53e2344cfc
diff --git a/idlc/inc/idlc/astexpression.hxx b/idlc/inc/idlc/astexpression.hxx
index 327cbe9..32c8bc7 100644
--- a/idlc/inc/idlc/astexpression.hxx
+++ b/idlc/inc/idlc/astexpression.hxx
@@ -108,7 +108,7 @@ public:
{ m_exprValue = pEv; }
// Evaluation and value coercion
- AstExprValue* coerce(ExprType type, bool bAssign=true);
+ AstExprValue* coerce(ExprType type);
// Evaluate then store value inside this AstExpression
void evaluate();
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index 785e228..0fec297 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -685,7 +685,7 @@ coerce_value(AstExprValue *ev, ExprType t)
}
}
-AstExprValue* AstExpression::coerce(ExprType t, bool bAssign)
+AstExprValue* AstExpression::coerce(ExprType t)
{
AstExprValue *copy;
@@ -753,8 +753,7 @@ AstExprValue* AstExpression::coerce(ExprType t, bool bAssign)
copy = nullptr;
}
- if (bAssign)
- m_exprValue = copy;
+ m_exprValue = copy;
return copy;
}
commit 2b19fd857043c6c6b5150b71ab42361494172d5e
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Sat Sep 26 22:19:57 2015 +0200
Simplify coerce_value signature
Change-Id: I0791600a5cc8600ea80233afba07724dd7f565e1
diff --git a/idlc/source/astexpression.cxx b/idlc/source/astexpression.cxx
index 3bde391..785e228 100644
--- a/idlc/source/astexpression.cxx
+++ b/idlc/source/astexpression.cxx
@@ -133,11 +133,11 @@ AstExpression::~AstExpression()
* ExprType. Return an AstExprValue if successful, NULL if failed.
* must be done for hyper, uhyper
*/
-static AstExprValue *
+static bool
coerce_value(AstExprValue *ev, ExprType t)
{
if (ev == NULL)
- return NULL;
+ return false;
switch (t)
{
@@ -145,119 +145,119 @@ coerce_value(AstExprValue *ev, ExprType t)
switch (ev->et)
{
case ET_short:
- return ev;
+ return true;
case ET_ushort:
if (ev->u.usval > SAL_MAX_INT16)
- return NULL;
+ return false;
ev->u.sval = (sal_Int16)ev->u.usval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_long:
if (ev->u.lval < SAL_MIN_INT16 || ev->u.lval > SAL_MAX_INT16)
- return NULL;
+ return false;
ev->u.sval = (sal_Int16)ev->u.lval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_ulong:
if (ev->u.ulval > SAL_MAX_INT16)
- return NULL;
+ return false;
ev->u.sval = (sal_Int16)ev->u.ulval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_hyper:
if (ev->u.hval < SAL_MIN_INT16 || ev->u.hval > SAL_MAX_INT16)
- return NULL;
+ return false;
ev->u.sval = (sal_Int16)ev->u.hval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_uhyper:
if (ev->u.uhval > SAL_MAX_INT16)
- return NULL;
+ return false;
ev->u.sval = (sal_Int16)ev->u.uhval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_boolean:
ev->u.sval = (sal_Int16)ev->u.bval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_float:
if (ev->u.fval < SAL_MIN_INT16 || ev->u.fval > SAL_MAX_INT16)
- return NULL;
+ return false;
ev->u.sval = (sal_Int16)ev->u.fval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_double:
if (ev->u.dval < SAL_MIN_INT16 || ev->u.dval > SAL_MAX_INT16)
- return NULL;
+ return false;
ev->u.sval = (sal_Int16)ev->u.dval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_byte:
ev->u.sval = (sal_Int16)ev->u.byval;
ev->et = ET_short;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_ushort:
switch (ev->et)
{
case ET_short:
if (ev->u.sval < 0)
- return NULL;
+ return false;
ev->u.usval = (sal_uInt16)ev->u.sval;
ev->et = ET_ushort;
- return ev;
+ return true;
case ET_ushort:
- return ev;
+ return true;
case ET_long:
if (ev->u.lval < 0 || ev->u.lval > SAL_MAX_UINT16)
- return NULL;
+ return false;
ev->u.usval = (sal_uInt16)ev->u.lval;
ev->et = ET_ushort;
- return ev;
+ return true;
case ET_ulong:
if (ev->u.ulval > SAL_MAX_UINT16)
- return NULL;
+ return false;
ev->u.usval = (sal_uInt16)ev->u.ulval;
ev->et = ET_ushort;
- return ev;
+ return true;
case ET_hyper:
if (ev->u.hval < 0 || ev->u.hval > SAL_MAX_UINT16)
- return NULL;
+ return false;
ev->u.usval = (sal_uInt16)ev->u.hval;
ev->et = ET_ushort;
- return ev;
+ return true;
case ET_uhyper:
if (ev->u.uhval > SAL_MAX_UINT16)
- return NULL;
+ return false;
ev->u.usval = (sal_uInt16)ev->u.uhval;
ev->et = ET_ushort;
- return ev;
+ return true;
case ET_boolean:
ev->u.usval = (sal_uInt16)ev->u.bval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_float:
if (ev->u.fval < 0.0 || ev->u.fval > SAL_MAX_UINT16)
- return NULL;
+ return false;
ev->u.usval = (sal_uInt16)ev->u.fval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_double:
if (ev->u.dval < 0.0 || ev->u.dval > SAL_MAX_UINT16)
- return NULL;
+ return false;
ev->u.usval = (sal_uInt16)ev->u.dval;
ev->et = ET_short;
- return ev;
+ return true;
case ET_byte:
ev->u.usval = (sal_uInt16)ev->u.byval;
ev->et = ET_ushort;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_long:
switch (ev->et)
@@ -265,111 +265,111 @@ coerce_value(AstExprValue *ev, ExprType t)
case ET_short:
ev->u.lval = (sal_Int32)ev->u.sval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_ushort:
ev->u.lval = (sal_Int32)ev->u.usval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_long:
- return ev;
+ return true;
case ET_ulong:
if (ev->u.ulval > SAL_MAX_INT32)
- return NULL;
+ return false;
ev->u.lval = (sal_Int32)ev->u.ulval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_hyper:
if (ev->u.hval < SAL_MIN_INT32 || ev->u.hval > SAL_MAX_INT32)
- return NULL;
+ return false;
ev->u.lval = (sal_Int32)ev->u.hval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_uhyper:
if (ev->u.uhval > SAL_MAX_INT32)
- return NULL;
+ return false;
ev->u.lval = (sal_Int32)ev->u.uhval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_boolean:
ev->u.lval = (sal_Int32)ev->u.bval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_float:
if (ev->u.fval < SAL_MIN_INT32 || ev->u.fval > SAL_MAX_INT32)
- return NULL;
+ return false;
ev->u.lval = (sal_Int32)ev->u.fval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_double:
if (ev->u.dval < SAL_MIN_INT32 || ev->u.dval > SAL_MAX_INT32)
- return NULL;
+ return false;
ev->u.lval = (sal_Int32)ev->u.dval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_byte:
ev->u.lval = (sal_Int32) ev->u.byval;
ev->et = ET_long;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_ulong:
switch (ev->et)
{
case ET_short:
if (ev->u.sval < 0)
- return NULL;
+ return false;
ev->u.ulval = (sal_uInt32)ev->u.sval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_ushort:
ev->u.ulval = (sal_uInt32)ev->u.usval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_long:
if (ev->u.lval < 0)
- return NULL;
+ return false;
ev->u.ulval = (sal_uInt32)ev->u.lval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_ulong:
- return ev;
+ return true;
case ET_hyper:
if (ev->u.hval < 0 || ev->u.hval > SAL_MAX_UINT32)
- return NULL;
+ return false;
ev->u.lval = (sal_uInt32)ev->u.hval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_uhyper:
if (ev->u.uhval > SAL_MAX_UINT32)
- return NULL;
+ return false;
ev->u.ulval = (sal_uInt32)ev->u.uhval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_boolean:
ev->u.ulval = (sal_uInt32)ev->u.bval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_float:
if (ev->u.fval < 0.0 || ev->u.fval > SAL_MAX_UINT32)
- return NULL;
+ return false;
ev->u.ulval = (sal_uInt32)ev->u.fval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_double:
if (ev->u.dval < 0.0 || ev->u.dval > SAL_MAX_UINT32)
- return NULL;
+ return false;
ev->u.ulval = (sal_uInt32)ev->u.dval;
ev->et = ET_ulong;
- return ev;
+ return true;
case ET_byte:
ev->u.ulval = (sal_uInt32)ev->u.byval;
ev->et = ET_ulong;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_hyper:
switch (ev->et)
@@ -377,105 +377,105 @@ coerce_value(AstExprValue *ev, ExprType t)
case ET_short:
ev->u.hval = (sal_Int64)ev->u.sval;
ev->et = ET_hyper;
- return ev;
+ return true;
case ET_ushort:
ev->u.hval = (sal_Int64)ev->u.usval;
ev->et = ET_hyper;
- return ev;
+ return true;
case ET_long:
ev->u.hval = (sal_Int64)ev->u.lval;
ev->et = ET_hyper;
- return ev;
+ return true;
case ET_ulong:
ev->u.hval = (sal_Int64)ev->u.ulval;
ev->et = ET_hyper;
- return ev;
+ return true;
case ET_hyper:
- return ev;
+ return true;
case ET_uhyper:
if (ev->u.uhval > SAL_MAX_INT64)
- return NULL;
+ return false;
ev->u.hval = (sal_Int64)ev->u.uhval;
ev->et = ET_long;
- return ev;
+ return true;
case ET_boolean:
ev->u.hval = (sal_Int64)ev->u.bval;
ev->et = ET_hyper;
- return ev;
+ return true;
case ET_float:
if (ev->u.fval < SAL_MIN_INT64 || ev->u.fval > SAL_MAX_INT64)
- return NULL;
+ return false;
ev->u.hval = (sal_Int64)ev->u.fval;
ev->et = ET_hyper;
- return ev;
+ return true;
case ET_double:
if (ev->u.dval < SAL_MIN_INT64 || ev->u.dval > SAL_MAX_INT64)
- return NULL;
+ return false;
ev->u.hval = (sal_Int64)ev->u.dval;
ev->et = ET_hyper;
- return ev;
+ return true;
case ET_byte:
ev->u.hval = (sal_Int64)ev->u.byval;
ev->et = ET_hyper;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_uhyper:
switch (ev->et)
{
case ET_short:
if (ev->u.sval < 0)
- return NULL;
+ return false;
ev->u.uhval = (sal_uInt64)ev->u.sval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_ushort:
ev->u.uhval = (sal_uInt64)ev->u.usval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_long:
if (ev->u.lval < 0)
- return NULL;
+ return false;
ev->u.uhval = (sal_uInt64)ev->u.lval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_ulong:
ev->u.uhval = (sal_uInt64)ev->u.ulval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_hyper:
if (ev->u.hval < 0)
- return NULL;
+ return false;
ev->u.uhval = (sal_uInt64)ev->u.hval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_uhyper:
- return ev;
+ return true;
case ET_boolean:
ev->u.uhval = (sal_uInt64)ev->u.bval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_float:
if (ev->u.fval < 0.0 || ev->u.fval > SAL_MAX_UINT64)
- return NULL;
+ return false;
ev->u.uhval = (sal_uInt64)ev->u.fval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_double:
if (ev->u.dval < 0.0 || ev->u.dval > SAL_MAX_UINT64)
- return NULL;
+ return false;
ev->u.uhval = (sal_uInt64)ev->u.dval;
ev->et = ET_uhyper;
- return ev;
+ return true;
case ET_byte:
ev->u.uhval = (sal_uInt64)ev->u.byval;
ev->et = ET_uhyper;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_boolean:
switch (ev->et)
@@ -483,44 +483,44 @@ coerce_value(AstExprValue *ev, ExprType t)
case ET_short:
ev->u.bval = ev->u.sval != 0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_ushort:
ev->u.bval = ev->u.usval != 0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_long:
ev->u.bval = ev->u.lval != 0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_ulong:
ev->u.bval = ev->u.ulval != 0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_hyper:
ev->u.bval = ev->u.hval != 0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_uhyper:
ev->u.bval = ev->u.uhval != 0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_boolean:
- return ev;
+ return true;
case ET_float:
ev->u.bval = ev->u.fval != 0.0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_double:
ev->u.bval = ev->u.dval != 0.0;
ev->et = ET_boolean;
- return ev;
+ return true;
case ET_byte:
ev->u.bval = ev->u.byval != 0;
ev->et = ET_boolean;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_float:
switch (ev->et)
@@ -528,48 +528,48 @@ coerce_value(AstExprValue *ev, ExprType t)
case ET_short:
ev->u.fval = (float)ev->u.sval;
ev->et = ET_float;
- return ev;
+ return true;
case ET_ushort:
ev->u.fval = (float)ev->u.usval;
ev->et = ET_float;
- return ev;
+ return true;
case ET_long:
ev->u.fval = (float)ev->u.lval;
ev->et = ET_float;
- return ev;
+ return true;
case ET_ulong:
ev->u.fval = (float)ev->u.ulval;
ev->et = ET_float;
- return ev;
+ return true;
case ET_hyper:
ev->u.fval = (float)ev->u.hval;
ev->et = ET_float;
- return ev;
+ return true;
case ET_uhyper:
if ((float)ev->u.ulval > FLT_MAX)
- return NULL;
+ return false;
ev->u.fval = (float)ev->u.ulval;
ev->et = ET_float;
- return ev;
+ return true;
case ET_boolean:
ev->u.fval = ev->u.bval ? 1.0f : 0.0f;
ev->et = ET_float;
- return ev;
+ return true;
case ET_float:
- return ev;
+ return true;
case ET_double:
if ((float)ev->u.dval > FLT_MAX || (float)ev->u.dval < -FLT_MAX)
- return NULL;
+ return false;
ev->u.fval = (float)ev->u.dval;
ev->et = ET_float;
- return ev;
+ return true;
case ET_byte:
ev->u.fval = (float)ev->u.byval;
ev->et = ET_float;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_double:
switch (ev->et)
@@ -577,111 +577,111 @@ coerce_value(AstExprValue *ev, ExprType t)
case ET_short:
ev->u.dval = (double)ev->u.sval;
ev->et = ET_double;
- return ev;
+ return true;
case ET_ushort:
ev->u.dval = (double)ev->u.usval;
ev->et = ET_double;
- return ev;
+ return true;
case ET_long:
ev->u.dval = (double)ev->u.lval;
ev->et = ET_double;
- return ev;
+ return true;
case ET_ulong:
ev->u.dval = (double)ev->u.ulval;
ev->et = ET_double;
- return ev;
+ return true;
case ET_hyper:
ev->u.dval = (double)ev->u.hval;
ev->et = ET_double;
- return ev;
+ return true;
case ET_uhyper:
if ((double)ev->u.dval > FLT_MAX || (double)ev->u.dval < -FLT_MAX)
- return NULL;
+ return false;
ev->u.dval = (double)ev->u.ulval;
ev->et = ET_double;
- return ev;
+ return true;
case ET_boolean:
ev->u.dval = ev->u.bval ? 1.0 : 0.0;
ev->et = ET_double;
- return ev;
+ return true;
case ET_float:
ev->u.dval = (double)ev->u.fval;
ev->et = ET_double;
- return ev;
+ return true;
case ET_double:
- return ev;
+ return true;
case ET_byte:
ev->u.dval = (double)ev->u.byval;
ev->et = ET_double;
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
case ET_byte:
switch (ev->et)
{
case ET_short:
if (ev->u.sval < SAL_MIN_INT8 || ev->u.sval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char)ev->u.sval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_ushort:
if (ev->u.usval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char)ev->u.usval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_long:
if (ev->u.lval < SAL_MIN_INT8 || ev->u.lval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char) ev->u.lval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_ulong:
if (ev->u.ulval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char) ev->u.ulval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_hyper:
if (ev->u.hval < SAL_MIN_INT8 || ev->u.hval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char) ev->u.hval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_uhyper:
if (ev->u.uhval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char) ev->u.uhval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_boolean:
ev->u.byval = ev->u.bval ? 1 : 0;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_float:
if (ev->u.fval < SAL_MIN_INT8 || ev->u.fval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char) ev->u.fval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_double:
if (ev->u.dval < SAL_MIN_INT8 || ev->u.dval > SAL_MAX_UINT8)
- return NULL;
+ return false;
ev->u.byval = (unsigned char) ev->u.dval;
ev->et = ET_byte;
- return ev;
+ return true;
case ET_byte:
- return ev;
+ return true;
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
default:
OSL_ASSERT(false);
- return NULL;
+ return false;
}
}
@@ -747,14 +747,16 @@ AstExprValue* AstExpression::coerce(ExprType t, bool bAssign)
break;
}
- AstExprValue* const coerced(coerce_value(copy, t));
- if (!coerced)
+ if (!coerce_value(copy, t))
+ {
delete copy;
+ copy = nullptr;
+ }
if (bAssign)
- m_exprValue = coerced;
+ m_exprValue = copy;
- return coerced;
+ return copy;
}
void AstExpression::evaluate()
More information about the Libreoffice-commits
mailing list