[PPL-devel] [GIT] ppl/ppl(floating_point): Concrete_Expression:
Fabio Bossi
bossi at cs.unipr.it
Mon Jul 26 17:46:35 CEST 2010
Module: ppl/ppl
Branch: floating_point
Commit: e9ad67116f5f290c8e4d83d3eeae7051aa549302
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=e9ad67116f5f290c8e4d83d3eeae7051aa549302
Author: Fabio Bossi <bossi at cs.unipr.it>
Date: Mon Jul 26 17:45:17 2010 +0200
Concrete_Expression:
- Added two methods.
C_Expr:
- Some progress in the implementation.
---
src/Concrete_Expression.defs.hh | 7 ++++++
tests/Concrete_Expression/C_Expr.defs.hh | 27 +++++++++++++++++++++++++
tests/Concrete_Expression/C_Expr.inlines.hh | 29 +++++++++++++++++++++++++++
3 files changed, 63 insertions(+), 0 deletions(-)
diff --git a/src/Concrete_Expression.defs.hh b/src/Concrete_Expression.defs.hh
index f6777cd..217e239 100644
--- a/src/Concrete_Expression.defs.hh
+++ b/src/Concrete_Expression.defs.hh
@@ -150,6 +150,8 @@ public:
template <typename Target>
class Cast_Operator_Base : public Concrete_Expression<Target> {
+ //! Returns the casted expression.
+ const Concrete_Expression<Target>* argument() const;
};
template <typename Target>
@@ -158,6 +160,11 @@ class Integer_Constant_Base : public Concrete_Expression<Target> {
template <typename Target>
class Floating_Point_Constant_Base : public Concrete_Expression<Target> {
+ /*! \brief
+ Returns a string for the floating point constant as written
+ in the analyzed program.
+ */
+ const char* get_value_as_string() const;
};
template <typename Target>
diff --git a/tests/Concrete_Expression/C_Expr.defs.hh b/tests/Concrete_Expression/C_Expr.defs.hh
index 073e9a8..fb94904 100644
--- a/tests/Concrete_Expression/C_Expr.defs.hh
+++ b/tests/Concrete_Expression/C_Expr.defs.hh
@@ -141,6 +141,10 @@ template <>
class Cast_Operator<C_Expr>
: public Cast_Operator_Base<C_Expr> {
public:
+ //! Constructor from cast type and argument.
+ Cast_Operator<C_Expr>(Concrete_Expression_Type c_type,
+ const Concrete_Expression<C_Expr>* ar);
+
//! Do-nothing destructor.
~Cast_Operator<C_Expr>();
@@ -150,8 +154,18 @@ public:
//! Returns the kind of \p *this.
Concrete_Expression_Kind kind() const;
+ //! Returns the casted expression.
+ const Concrete_Expression<C_Expr>* argument() const;
+
//! Constant identifying cast nodes.
enum { KIND = 3 };
+
+private:
+ //! The type of the cast expression.
+ Concrete_Expression_Type cast_type;
+
+ //! The casted expression.
+ const Concrete_Expression<C_Expr>* arg;
};
template <>
@@ -175,6 +189,9 @@ template <>
class Floating_Point_Constant<C_Expr>
: public Floating_Point_Constant_Base<C_Expr> {
public:
+ //! Constructor from value.
+ Floating_Point_Constant<C_Expr>(const char* value_string);
+
//! Do-nothing destructor.
~Floating_Point_Constant<C_Expr>();
@@ -184,8 +201,18 @@ public:
//! Returns the kind of \p *this.
Concrete_Expression_Kind kind() const;
+ /*! \brief
+ Returns a string for the floating point constant as written
+ in the analyzed program.
+ */
+ const char* get_value_as_string() const;
+
//! Constant identifying floating constant nodes.
enum { KIND = 5 };
+
+private:
+ //! The floating point constant as written.
+ const char* value;
};
// We currently only consider variable references.
diff --git a/tests/Concrete_Expression/C_Expr.inlines.hh b/tests/Concrete_Expression/C_Expr.inlines.hh
index 900e90f..7263eae 100644
--- a/tests/Concrete_Expression/C_Expr.inlines.hh
+++ b/tests/Concrete_Expression/C_Expr.inlines.hh
@@ -87,14 +87,32 @@ Unary_Operator<C_Expr>::argument() const {
}
inline
+Cast_Operator<C_Expr>::
+Cast_Operator(Concrete_Expression_Type c_type,
+ const Concrete_Expression<C_Expr>* ar)
+ : cast_type(c_type),
+ arg(ar) {
+}
+
+inline
Cast_Operator<C_Expr>::~Cast_Operator<C_Expr>() {
}
+inline Concrete_Expression_Type
+Cast_Operator<C_Expr>::type() const {
+ return cast_type;
+}
+
inline Concrete_Expression_Kind
Cast_Operator<C_Expr>::kind() const {
return KIND;
}
+inline const Concrete_Expression<C_Expr>*
+Cast_Operator<C_Expr>::argument() const {
+ return arg;
+}
+
inline
Integer_Constant<C_Expr>::~Integer_Constant<C_Expr>() {
}
@@ -105,6 +123,12 @@ Integer_Constant<C_Expr>::kind() const {
}
inline
+Floating_Point_Constant<C_Expr>::
+Floating_Point_Constant(const char* value_string)
+ : value(value_string) {
+}
+
+inline
Floating_Point_Constant<C_Expr>::~Floating_Point_Constant<C_Expr>() {
}
@@ -113,6 +137,11 @@ Floating_Point_Constant<C_Expr>::kind() const {
return KIND;
}
+inline const char*
+Floating_Point_Constant<C_Expr>::get_value_as_string() const {
+ return value;
+}
+
inline
Approximable_Reference<C_Expr>::
Approximable_Reference(dimension_type var_index)
More information about the PPL-devel
mailing list