Commit 76a8ecba by Gabriel Dos Reis Committed by Gabriel Dos Reis

c-pretty-print.h (struct c_pretty_print_info): Add new member.

2002-07-30  Gabriel Dos Reis  <gdr@nerim.net>

	* c-pretty-print.h (struct c_pretty_print_info): Add new member.
	(pp_initializer): New macro.
	(pp_c_initializer): Declare.
	* c-pretty-print.c (pp_c_primary_expression): HAndle TARGET_EXPR.
	(pp_c_initializer): Define.
	(pp_c_initializer_list): New function.
	(pp_c_postfix_expression): Handle ABS_EXPR, COMPLEX_CST,
	VECTOR_CST, CONSTRUCTOR.
	(pp_c_unary_expression): Handle CONJ_EXPR, REALPART_EXPR,
	IMAGPART_EXPR.
	(pp_c_cast_expression): Handle FLOAT_EXPR.
	(pp_c_assignment_expression): Handle INIT_EXPR.
	(pp_c_expression): Update.

From-SVN: r55856
parent 61fd68b4
2002-07-30 Gabriel Dos Reis <gdr@nerim.net>
* c-pretty-print.h (struct c_pretty_print_info): Add new member.
(pp_initializer): New macro.
(pp_c_initializer): Declare.
* c-pretty-print.c (pp_c_primary_expression): HAndle TARGET_EXPR.
(pp_c_initializer): Define.
(pp_c_initializer_list): New function.
(pp_c_postfix_expression): Handle ABS_EXPR, COMPLEX_CST,
VECTOR_CST, CONSTRUCTOR.
(pp_c_unary_expression): Handle CONJ_EXPR, REALPART_EXPR,
IMAGPART_EXPR.
(pp_c_cast_expression): Handle FLOAT_EXPR.
(pp_c_assignment_expression): Handle INIT_EXPR.
(pp_c_expression): Update.
2002-07-30 Neil Booth <neil@daikokuya.co.uk> 2002-07-30 Neil Booth <neil@daikokuya.co.uk>
* objc/objc-act.c (objc_init): Return immediately if filename * objc/objc-act.c (objc_init): Return immediately if filename
......
...@@ -35,6 +35,9 @@ static void pp_c_string_literal PARAMS ((c_pretty_print_info *, tree)); ...@@ -35,6 +35,9 @@ static void pp_c_string_literal PARAMS ((c_pretty_print_info *, tree));
static void pp_c_primary_expression PARAMS ((c_pretty_print_info *, tree)); static void pp_c_primary_expression PARAMS ((c_pretty_print_info *, tree));
/* postfix-expression */
static void pp_c_initializer_list PARAMS ((c_pretty_print_info *, tree));
static void pp_c_unary_expression PARAMS ((c_pretty_print_info *, tree)); static void pp_c_unary_expression PARAMS ((c_pretty_print_info *, tree));
static void pp_c_multiplicative_expression PARAMS ((c_pretty_print_info *, static void pp_c_multiplicative_expression PARAMS ((c_pretty_print_info *,
tree)); tree));
...@@ -316,6 +319,22 @@ pp_c_primary_expression (ppi, e) ...@@ -316,6 +319,22 @@ pp_c_primary_expression (ppi, e)
pp_c_literal (ppi, e); pp_c_literal (ppi, e);
break; break;
case TARGET_EXPR:
pp_c_left_paren (ppi);
pp_c_identifier (ppi, "__builtin_memcpy");
pp_c_left_paren (ppi);
pp_ampersand (ppi);
pp_c_primary_expression (ppi, TREE_OPERAND (e, 0));
pp_separate_with (ppi, ',');
pp_ampersand (ppi);
pp_initializer (ppi, TREE_OPERAND (e, 1));
if (TREE_OPERAND (e, 2))
{
pp_separate_with (ppi, ',');
pp_c_expression (ppi, TREE_OPERAND (e, 2));
}
pp_c_right_paren (ppi);
default: default:
/* Make sure this call won't cause any infinite loop. */ /* Make sure this call won't cause any infinite loop. */
pp_c_left_paren (ppi); pp_c_left_paren (ppi);
...@@ -325,6 +344,65 @@ pp_c_primary_expression (ppi, e) ...@@ -325,6 +344,65 @@ pp_c_primary_expression (ppi, e)
} }
} }
/* Print out a C initializer -- also support C compound-literals. */
void
pp_c_initializer (ppi, e)
c_pretty_print_info *ppi;
tree e;
{
if (TREE_CODE (e) == CONSTRUCTOR)
{
enum tree_code code = TREE_CODE (TREE_TYPE (e));
if (code == RECORD_TYPE || code == UNION_TYPE || code == ARRAY_TYPE)
{
pp_left_brace (ppi);
pp_c_initializer_list (ppi, e);
pp_right_brace (ppi);
}
else
pp_unsupported_tree (ppi, TREE_OPERAND (e, 1));
}
else
pp_assignment_expression (ppi, e);
}
static void
pp_c_initializer_list (ppi, e)
c_pretty_print_info *ppi;
tree e;
{
tree type = TREE_TYPE (e);
const enum tree_code code = TREE_CODE (type);
if (code == RECORD_TYPE || code == UNION_TYPE || code == ARRAY_TYPE)
{
tree init = TREE_OPERAND (e, 1);
for (; init != NULL_TREE; init = TREE_CHAIN (init))
{
if (code == RECORD_TYPE || code == UNION_TYPE)
{
pp_dot (ppi);
pp_c_primary_expression (ppi, TREE_PURPOSE (init));
}
else
{
pp_c_left_bracket (ppi);
if (TREE_PURPOSE (init))
pp_c_literal (ppi, TREE_PURPOSE (init));
pp_c_right_bracket (ppi);
}
pp_c_whitespace (ppi);
pp_equal (ppi);
pp_c_whitespace (ppi);
pp_initializer (ppi, TREE_VALUE (init));
if (TREE_CHAIN (init))
pp_separate_with (ppi, ',');
}
}
else
pp_unsupported_tree (ppi, type);
}
void void
pp_c_postfix_expression (ppi, e) pp_c_postfix_expression (ppi, e)
c_pretty_print_info *ppi; c_pretty_print_info *ppi;
...@@ -353,6 +431,13 @@ pp_c_postfix_expression (ppi, e) ...@@ -353,6 +431,13 @@ pp_c_postfix_expression (ppi, e)
pp_c_right_paren (ppi); pp_c_right_paren (ppi);
break; break;
case ABS_EXPR:
pp_c_identifier (ppi, "abs");
pp_c_left_paren (ppi);
pp_c_expression (ppi, TREE_OPERAND (e, 0));
pp_c_right_paren (ppi);
break;
case COMPONENT_REF: case COMPONENT_REF:
{ {
tree object = TREE_OPERAND (e, 0); tree object = TREE_OPERAND (e, 0);
...@@ -370,10 +455,34 @@ pp_c_postfix_expression (ppi, e) ...@@ -370,10 +455,34 @@ pp_c_postfix_expression (ppi, e)
} }
break; break;
case CONSTRUCTOR:
case COMPLEX_CST: case COMPLEX_CST:
case VECTOR_CST: case VECTOR_CST:
pp_unsupported_tree (ppi, e); case COMPLEX_EXPR:
pp_c_left_paren (ppi);
pp_type_id (ppi, TREE_TYPE (e));
pp_c_right_paren (ppi);
pp_left_brace (ppi);
if (code == COMPLEX_CST)
{
pp_c_expression (ppi, TREE_REALPART (e));
pp_separate_with (ppi, ',');
pp_c_expression (ppi, TREE_IMAGPART (e));
}
else if (code == VECTOR_CST)
pp_c_expression_list (ppi, TREE_VECTOR_CST_ELTS (e));
else if (code == COMPLEX_EXPR)
{
pp_c_expression (ppi, TREE_OPERAND (e, 0));
pp_separate_with (ppi, ',');
pp_c_expression (ppi, TREE_OPERAND (e, 1));
}
pp_right_brace (ppi);
break;
case CONSTRUCTOR:
pp_initializer (ppi, e);
break; break;
default: default:
...@@ -416,13 +525,14 @@ pp_c_unary_expression (ppi, e) ...@@ -416,13 +525,14 @@ pp_c_unary_expression (ppi, e)
case NEGATE_EXPR: case NEGATE_EXPR:
case BIT_NOT_EXPR: case BIT_NOT_EXPR:
case TRUTH_NOT_EXPR: case TRUTH_NOT_EXPR:
case CONJ_EXPR:
if (code == ADDR_EXPR) if (code == ADDR_EXPR)
pp_ampersand (ppi); pp_ampersand (ppi);
else if (code == INDIRECT_REF) else if (code == INDIRECT_REF)
pp_star (ppi); pp_star (ppi);
else if (code == NEGATE_EXPR) else if (code == NEGATE_EXPR)
pp_minus (ppi); pp_minus (ppi);
else if (code == BIT_NOT_EXPR) else if (code == BIT_NOT_EXPR || code == CONJ_EXPR)
pp_complement (ppi); pp_complement (ppi);
else if (code == TRUTH_NOT_EXPR) else if (code == TRUTH_NOT_EXPR)
pp_exclamation (ppi); pp_exclamation (ppi);
...@@ -443,6 +553,13 @@ pp_c_unary_expression (ppi, e) ...@@ -443,6 +553,13 @@ pp_c_unary_expression (ppi, e)
pp_c_unary_expression (ppi, TREE_OPERAND (e, 0)); pp_c_unary_expression (ppi, TREE_OPERAND (e, 0));
break; break;
case REALPART_EXPR:
case IMAGPART_EXPR:
pp_c_identifier (ppi, code == REALPART_EXPR ? "__real__" : "__imag__");
pp_c_whitespace (ppi);
pp_unary_expression (ppi, TREE_OPERAND (e, 0));
break;
default: default:
pp_postfix_expression (ppi, e); pp_postfix_expression (ppi, e);
break; break;
...@@ -454,7 +571,7 @@ pp_c_cast_expression (ppi, e) ...@@ -454,7 +571,7 @@ pp_c_cast_expression (ppi, e)
c_pretty_print_info *ppi; c_pretty_print_info *ppi;
tree e; tree e;
{ {
if (TREE_CODE (e) == CONVERT_EXPR) if (TREE_CODE (e) == CONVERT_EXPR || TREE_CODE (e) == FLOAT_EXPR)
{ {
pp_c_left_paren (ppi); pp_c_left_paren (ppi);
pp_type_id (ppi, TREE_TYPE (e)); pp_type_id (ppi, TREE_TYPE (e));
...@@ -710,7 +827,7 @@ pp_c_assignment_expression (ppi, e) ...@@ -710,7 +827,7 @@ pp_c_assignment_expression (ppi, e)
c_pretty_print_info *ppi; c_pretty_print_info *ppi;
tree e; tree e;
{ {
if (TREE_CODE (e) == MODIFY_EXPR) if (TREE_CODE (e) == MODIFY_EXPR || TREE_CODE (e) == INIT_EXPR)
{ {
pp_c_unary_expression (ppi, TREE_OPERAND (e, 0)); pp_c_unary_expression (ppi, TREE_OPERAND (e, 0));
pp_c_maybe_whitespace (ppi); pp_c_maybe_whitespace (ppi);
...@@ -750,6 +867,7 @@ pp_c_expression (ppi, e) ...@@ -750,6 +867,7 @@ pp_c_expression (ppi, e)
case FIELD_DECL: case FIELD_DECL:
case LABEL_DECL: case LABEL_DECL:
case ERROR_MARK: case ERROR_MARK:
case TARGET_EXPR:
pp_c_primary_expression (ppi, e); pp_c_primary_expression (ppi, e);
break; break;
...@@ -758,13 +876,31 @@ pp_c_expression (ppi, e) ...@@ -758,13 +876,31 @@ pp_c_expression (ppi, e)
case ARRAY_REF: case ARRAY_REF:
case CALL_EXPR: case CALL_EXPR:
case COMPONENT_REF: case COMPONENT_REF:
case CONSTRUCTOR:
case COMPLEX_CST: case COMPLEX_CST:
case VECTOR_CST: case VECTOR_CST:
case ABS_EXPR:
case CONSTRUCTOR:
case COMPLEX_EXPR:
pp_c_postfix_expression (ppi, e); pp_c_postfix_expression (ppi, e);
break; break;
case CONJ_EXPR:
case ADDR_EXPR:
case INDIRECT_REF:
case NEGATE_EXPR:
case BIT_NOT_EXPR:
case TRUTH_NOT_EXPR:
case PREINCREMENT_EXPR:
case PREDECREMENT_EXPR:
case SIZEOF_EXPR:
case ALIGNOF_EXPR:
case REALPART_EXPR:
case IMAGPART_EXPR:
pp_c_unary_expression (ppi, e);
break;
case CONVERT_EXPR: case CONVERT_EXPR:
case FLOAT_EXPR:
pp_c_cast_expression (ppi, e); pp_c_cast_expression (ppi, e);
break; break;
...@@ -811,6 +947,7 @@ pp_c_expression (ppi, e) ...@@ -811,6 +947,7 @@ pp_c_expression (ppi, e)
break; break;
case MODIFY_EXPR: case MODIFY_EXPR:
case INIT_EXPR:
pp_c_assignment_expression (ppi, e); pp_c_assignment_expression (ppi, e);
break; break;
......
...@@ -53,6 +53,7 @@ struct c_pretty_print_info ...@@ -53,6 +53,7 @@ struct c_pretty_print_info
c_pretty_print_fn primary_expression; c_pretty_print_fn primary_expression;
c_pretty_print_fn postfix_expression; c_pretty_print_fn postfix_expression;
c_pretty_print_fn unary_expression; c_pretty_print_fn unary_expression;
c_pretty_print_fn initializer;
c_pretty_print_fn multiplicative_expression; c_pretty_print_fn multiplicative_expression;
c_pretty_print_fn conditional_expression; c_pretty_print_fn conditional_expression;
c_pretty_print_fn assignment_expression; c_pretty_print_fn assignment_expression;
...@@ -115,6 +116,7 @@ struct c_pretty_print_info ...@@ -115,6 +116,7 @@ struct c_pretty_print_info
#define pp_primary_expression(PPI, E) (*(PPI)->primary_expression) (PPI, E) #define pp_primary_expression(PPI, E) (*(PPI)->primary_expression) (PPI, E)
#define pp_postfix_expression(PPI, E) (*(PPI)->postfix_expression) (PPI, E) #define pp_postfix_expression(PPI, E) (*(PPI)->postfix_expression) (PPI, E)
#define pp_unary_expression(PPI, E) (*(PPI)->unary_expression) (PPI, E) #define pp_unary_expression(PPI, E) (*(PPI)->unary_expression) (PPI, E)
#define pp_initializer(PPI, E) (*(PPI)->initializer) (PPI, E)
#define pp_multiplicative_expression(PPI, E)\ #define pp_multiplicative_expression(PPI, E)\
(*(PPI)->multiplicative_expression) (PPI, E) (*(PPI)->multiplicative_expression) (PPI, E)
#define pp_conditional_expession(PPI, E) \ #define pp_conditional_expession(PPI, E) \
...@@ -136,4 +138,5 @@ void pp_c_logical_or_expression PARAMS ((c_pretty_print_info *, tree)); ...@@ -136,4 +138,5 @@ void pp_c_logical_or_expression PARAMS ((c_pretty_print_info *, tree));
void pp_c_expression_list PARAMS ((c_pretty_print_info *, tree)); void pp_c_expression_list PARAMS ((c_pretty_print_info *, tree));
void pp_c_cast_expression PARAMS ((c_pretty_print_info *, tree)); void pp_c_cast_expression PARAMS ((c_pretty_print_info *, tree));
void pp_c_postfix_expression PARAMS ((c_pretty_print_info *, tree)); void pp_c_postfix_expression PARAMS ((c_pretty_print_info *, tree));
void pp_c_initializer PARAMS ((c_pretty_print_info *, tree));
void pp_c_literal PARAMS ((c_pretty_print_info *, tree)); void pp_c_literal PARAMS ((c_pretty_print_info *, tree));
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment