aboutsummaryrefslogtreecommitdiff
path: root/gcc/go/go-gcc.cc
diff options
context:
space:
mode:
authorChris Manghane <cmang@google.com>2014-05-06 19:28:03 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2014-05-06 19:28:03 +0000
commit6f7e0b570ab9ab1c6bbc2cb598284e2e5202e027 (patch)
treed260b1bb70995d642f35a870ceae7f566c5f052a /gcc/go/go-gcc.cc
parent3379b71f51c36c499ca5ce4ec877bd70b96a580e (diff)
downloadgcc-6f7e0b570ab9ab1c6bbc2cb598284e2e5202e027.zip
gcc-6f7e0b570ab9ab1c6bbc2cb598284e2e5202e027.tar.gz
gcc-6f7e0b570ab9ab1c6bbc2cb598284e2e5202e027.tar.bz2
compiler: Use backend interface for expressions.
* go-gcc.cc (Gcc_backend::nil_pointer_expression): New method. (Gcc_backend::boolean_constant_expression): New method. (Gcc_backend::zero_expression): Use this->make_expression rather than tree_to_expr. (Gcc_backend::var_expression): Likewise. (Gcc_backend::integer_constant_expression): Likewise. (Gcc_backend::float_constant_expression): Likewise. (Gcc_backend::complex_constant_expression): Likewise. (Gcc_backend::struct_field_expression): Likewise. (tree_to_type, tree_to_expr, tree_to_stat): Remove functions. (tree_to_function, tree_to_block): Remove functions. (type_to_tree, expr_to_tree, stat_to_tree): Remove functions. (block_to_tree, var_to_tree, function_to_tree): Remove functions. From-SVN: r210122
Diffstat (limited to 'gcc/go/go-gcc.cc')
-rw-r--r--gcc/go/go-gcc.cc98
1 files changed, 22 insertions, 76 deletions
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index f4c242f..fc100e2 100644
--- a/gcc/go/go-gcc.cc
+++ b/gcc/go/go-gcc.cc
@@ -226,6 +226,10 @@ class Gcc_backend : public Backend
{ return this->make_expression(error_mark_node); }
Bexpression*
+ nil_pointer_expression()
+ { return this->make_expression(null_pointer_node); }
+
+ Bexpression*
var_expression(Bvariable* var, Location);
Bexpression*
@@ -248,6 +252,9 @@ class Gcc_backend : public Backend
string_constant_expression(const std::string& val);
Bexpression*
+ boolean_constant_expression(bool val);
+
+ Bexpression*
real_part_expression(Bexpression* bcomplex, Location);
Bexpression*
@@ -1129,7 +1136,7 @@ Gcc_backend::zero_expression(Btype* btype)
ret = error_mark_node;
else
ret = build_zero_cst(t);
- return tree_to_expr(ret);
+ return this->make_expression(ret);
}
// An expression that references a variable.
@@ -1140,7 +1147,7 @@ Gcc_backend::var_expression(Bvariable* var, Location)
tree ret = var->get_tree();
if (ret == error_mark_node)
return this->error_expression();
- return tree_to_expr(ret);
+ return this->make_expression(ret);
}
// An expression that indirectly references an expression.
@@ -1201,7 +1208,7 @@ Gcc_backend::integer_constant_expression(Btype* btype, mpz_t val)
return this->error_expression();
tree ret = double_int_to_tree(t, mpz_get_double_int(t, val, true));
- return tree_to_expr(ret);
+ return this->make_expression(ret);
}
// Return a typed value as a constant floating-point number.
@@ -1219,7 +1226,7 @@ Gcc_backend::float_constant_expression(Btype* btype, mpfr_t val)
REAL_VALUE_TYPE r2;
real_convert(&r2, TYPE_MODE(t), &r1);
ret = build_real(t, r2);
- return tree_to_expr(ret);
+ return this->make_expression(ret);
}
// Return a typed real and imaginary value as a constant complex number.
@@ -1244,7 +1251,7 @@ Gcc_backend::complex_constant_expression(Btype* btype, mpfr_t real, mpfr_t imag)
ret = build_complex(t, build_real(TREE_TYPE(t), r2),
build_real(TREE_TYPE(t), r4));
- return tree_to_expr(ret);
+ return this->make_expression(ret);
}
// Make a constant string expression.
@@ -1264,6 +1271,15 @@ Gcc_backend::string_constant_expression(const std::string& val)
return this->make_expression(string_val);
}
+// Make a constant boolean expression.
+
+Bexpression*
+Gcc_backend::boolean_constant_expression(bool val)
+{
+ tree bool_cst = val ? boolean_true_node : boolean_false_node;
+ return this->make_expression(bool_cst);
+}
+
// Return the real part of a complex expression.
Bexpression*
@@ -1407,7 +1423,7 @@ Gcc_backend::struct_field_expression(Bexpression* bstruct, size_t index,
NULL_TREE);
if (TREE_CONSTANT(struct_tree))
TREE_CONSTANT(ret) = 1;
- return tree_to_expr(ret);
+ return this->make_expression(ret);
}
// Return an expression that executes BSTAT before BEXPR.
@@ -2923,73 +2939,3 @@ go_get_backend()
{
return new Gcc_backend();
}
-
-// FIXME: Temporary functions while converting to the new backend
-// interface.
-
-Btype*
-tree_to_type(tree t)
-{
- return new Btype(t);
-}
-
-Bexpression*
-tree_to_expr(tree t)
-{
- return new Bexpression(t);
-}
-
-Bstatement*
-tree_to_stat(tree t)
-{
- return new Bstatement(t);
-}
-
-Bfunction*
-tree_to_function(tree t)
-{
- return new Bfunction(t);
-}
-
-Bblock*
-tree_to_block(tree t)
-{
- gcc_assert(TREE_CODE(t) == BIND_EXPR);
- return new Bblock(t);
-}
-
-tree
-type_to_tree(Btype* bt)
-{
- return bt->get_tree();
-}
-
-tree
-expr_to_tree(Bexpression* be)
-{
- return be->get_tree();
-}
-
-tree
-stat_to_tree(Bstatement* bs)
-{
- return bs->get_tree();
-}
-
-tree
-block_to_tree(Bblock* bb)
-{
- return bb->get_tree();
-}
-
-tree
-var_to_tree(Bvariable* bv)
-{
- return bv->get_tree();
-}
-
-tree
-function_to_tree(Bfunction* bf)
-{
- return bf->get_tree();
-}