diff options
author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2001-11-18 06:24:45 +0000 |
---|---|---|
committer | Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org> | 2001-11-18 06:24:45 +0000 |
commit | 873ff98777cfd6685aae1aac33d2bc4d52bcd781 (patch) | |
tree | 088f153453be5db54057e007758e8f560c599b5d /gcc/cp | |
parent | 6f684b536827ea2e00d45fa88b8be9b301bfd8e0 (diff) | |
download | gcc-873ff98777cfd6685aae1aac33d2bc4d52bcd781.zip gcc-873ff98777cfd6685aae1aac33d2bc4d52bcd781.tar.gz gcc-873ff98777cfd6685aae1aac33d2bc4d52bcd781.tar.bz2 |
mangle.c (write_expression): Handle CAST_EXPR, STATIC_CAST_EXPR, CONST_CAST_EXPR.
* mangle.c (write_expression): Handle CAST_EXPR, STATIC_CAST_EXPR,
CONST_CAST_EXPR.
* operators.def: Add CAST_EXPR, STATIC_CAST_EXPR, CONST_CAST_EXPR.
From-SVN: r47135
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 24 | ||||
-rw-r--r-- | gcc/cp/operators.def | 3 |
3 files changed, 28 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e2d2fbe..6503ad8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2001-11-17 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + * mangle.c (write_expression): Handle CAST_EXPR, STATIC_CAST_EXPR, + CONST_CAST_EXPR. + * operators.def: Add CAST_EXPR, STATIC_CAST_EXPR, CONST_CAST_EXPR. + 2001-11-16 Neil Booth <neil@daikokuya.demon.co.uk> * cp-tree.h (print_class_statistics): Restore. diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 0f6500e..5466ca9 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -1818,18 +1818,32 @@ write_expression (expr) /* If it wasn't any of those, recursively expand the expression. */ write_string (operator_name_info[(int) code].mangled_name); - /* Handle pointers-to-members specially. */ - if (code == SCOPE_REF) + switch (code) { + case CAST_EXPR: + write_type (TREE_TYPE (expr)); + write_expression (TREE_VALUE (TREE_OPERAND (expr, 0))); + break; + + case STATIC_CAST_EXPR: + case CONST_CAST_EXPR: + write_type (TREE_TYPE (expr)); + write_expression (TREE_OPERAND (expr, 0)); + break; + + /* Handle pointers-to-members specially. */ + case SCOPE_REF: write_type (TREE_OPERAND (expr, 0)); if (TREE_CODE (TREE_OPERAND (expr, 1)) == IDENTIFIER_NODE) write_source_name (TREE_OPERAND (expr, 1)); else write_encoding (TREE_OPERAND (expr, 1)); + break; + + default: + for (i = 0; i < TREE_CODE_LENGTH (code); ++i) + write_expression (TREE_OPERAND (expr, i)); } - else - for (i = 0; i < TREE_CODE_LENGTH (code); ++i) - write_expression (TREE_OPERAND (expr, i)); } } diff --git a/gcc/cp/operators.def b/gcc/cp/operators.def index ddae93a..8e0f7b2 100644 --- a/gcc/cp/operators.def +++ b/gcc/cp/operators.def @@ -102,6 +102,9 @@ DEF_SIMPLE_OPERATOR ("alignof", ALIGNOF_EXPR, "v17alignof", 1) /* The cast operator. */ DEF_SIMPLE_OPERATOR ("", TYPE_EXPR, "cv", 1) +DEF_SIMPLE_OPERATOR ("", CAST_EXPR, "cv", 1) +DEF_SIMPLE_OPERATOR ("", CONST_CAST_EXPR, "cv", 1) +DEF_SIMPLE_OPERATOR ("", STATIC_CAST_EXPR, "cv", 1) /* Binary operators. */ DEF_SIMPLE_OPERATOR ("+", PLUS_EXPR, "pl", 2) |