This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Re: Using C++ within a backend? (contd)


Matthieu Moy <Matthieu dot Moy at imag dot fr> writes:

> OK. I did the same for cp-tree.h. 
>
> I should have done it before: it was rather trivial ! 

Hmm, not so much ;-)

Including  the file  tree.h from  a C++  file was  easy, but  using it
requires some more work, because  there are some uses of implicit cast
between enums (typically c_tree_code and tree_code).

The first thing to do is to allow comparison between them :

#ifdef __cplusplus
inline bool operator==(tree_code tc, c_tree_code ctc) {
  return (c_tree_code)tc == ctc;
}

inline bool operator==(c_tree_code ctc, tree_code tc) {
  return (c_tree_code)tc == ctc;
}

inline bool operator!=(tree_code tc, c_tree_code ctc) {
  return (c_tree_code)tc != ctc;
}

inline bool operator!=(c_tree_code ctc, tree_code tc) {
  return (c_tree_code)tc != ctc;
}
#endif

(Note that it  would probably be cleaner to add  the explicit casts in
the right places instead of defining new operators)

Then,  we have  to  add explicit  casts  when required.  For now,  the
following seems to be sufficient for me :

--- tree.h~	Mon Apr 14 19:59:14 2003
+++ tree.h	Fri Apr 18 11:04:03 2003
@@ -291,7 +291,7 @@
 #define TREE_CHECK(t, code) __extension__				\
 ({  const tree __t = (t);						\
     if (TREE_CODE(__t) != (code))					\
-      tree_check_failed (__t, code, __FILE__, __LINE__, __FUNCTION__);	\
+      tree_check_failed (__t, (tree_code)code, __FILE__, __LINE__, __FUNCTION__);	\
     __t; })
 #define TREE_CLASS_CHECK(t, class) __extension__			\
 ({  const tree __t = (t);						\

-- 
Matthieu


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]