projects
/
cparser
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix implicit struct casts
[cparser]
/
ast_t.h
diff --git
a/ast_t.h
b/ast_t.h
index
fec671c
..
1debd43
100644
(file)
--- a/
ast_t.h
+++ b/
ast_t.h
@@
-25,10
+25,13
@@
typedef enum {
EXPR_ARRAY_ACCESS,
EXPR_SIZEOF,
EXPR_CLASSIFY_TYPE,
EXPR_ARRAY_ACCESS,
EXPR_SIZEOF,
EXPR_CLASSIFY_TYPE,
+ EXPR_ALIGNOF,
EXPR_FUNCTION,
EXPR_PRETTY_FUNCTION,
EXPR_BUILTIN_SYMBOL,
EXPR_FUNCTION,
EXPR_PRETTY_FUNCTION,
EXPR_BUILTIN_SYMBOL,
+ EXPR_BUILTIN_CONSTANT_P,
+ EXPR_BUILTIN_PREFETCH,
EXPR_OFFSETOF,
EXPR_VA_START,
EXPR_VA_ARG,
EXPR_OFFSETOF,
EXPR_VA_START,
EXPR_VA_ARG,
@@
-48,7
+51,8
@@
typedef enum {
EXPR_UNARY_CAST,
EXPR_UNARY_CAST_IMPLICIT, /**< compiler generated cast */
EXPR_UNARY_ASSUME, /**< MS __assume() */
EXPR_UNARY_CAST,
EXPR_UNARY_CAST_IMPLICIT, /**< compiler generated cast */
EXPR_UNARY_ASSUME, /**< MS __assume() */
- EXPR_UNARY_LAST = EXPR_UNARY_ASSUME,
+ EXPR_UNARY_BITFIELD_EXTRACT,
+ EXPR_UNARY_LAST = EXPR_UNARY_BITFIELD_EXTRACT,
EXPR_BINARY_FIRST,
EXPR_BINARY_ADD = EXPR_BINARY_FIRST,
EXPR_BINARY_FIRST,
EXPR_BINARY_ADD = EXPR_BINARY_FIRST,
@@
-145,20
+149,21
@@
typedef enum {
case EXPR_UNARY_PREFIX_DECREMENT: \
case EXPR_UNARY_CAST: \
case EXPR_UNARY_CAST_IMPLICIT: \
case EXPR_UNARY_PREFIX_DECREMENT: \
case EXPR_UNARY_CAST: \
case EXPR_UNARY_CAST_IMPLICIT: \
- case EXPR_UNARY_ASSUME:
+ case EXPR_UNARY_ASSUME: \
+ case EXPR_UNARY_BITFIELD_EXTRACT:
-struct
context
_t {
- declaration_t *declarations;
+struct
scope
_t {
+ declaration_t *declarations;
/**< List of declarations in this scope. */
};
struct expression_base_t {
expression_kind_t kind;
};
struct expression_base_t {
expression_kind_t kind;
- type_t *
data
type;
+ type_t *type;
source_position_t source_position;
};
struct const_expression_t {
source_position_t source_position;
};
struct const_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
union {
long long int_value;
long double float_value;
union {
long long int_value;
long double float_value;
@@
-166,22
+171,34
@@
struct const_expression_t {
};
struct string_literal_expression_t {
};
struct string_literal_expression_t {
- expression_base_t
expression
;
-
const char *
value;
+ expression_base_t
base
;
+
string_t
value;
};
struct wide_string_literal_expression_t {
};
struct wide_string_literal_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
wide_string_t value;
};
struct builtin_symbol_expression_t {
wide_string_t value;
};
struct builtin_symbol_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
symbol_t *symbol;
};
symbol_t *symbol;
};
+struct builtin_constant_expression_t {
+ expression_base_t base;
+ expression_t *value;
+};
+
+struct builtin_prefetch_expression_t {
+ expression_base_t base;
+ expression_t *adr;
+ expression_t *rw;
+ expression_t *locality;
+};
+
struct reference_expression_t {
struct reference_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
symbol_t *symbol;
declaration_t *declaration;
};
symbol_t *symbol;
declaration_t *declaration;
};
@@
-192,24
+209,24
@@
struct call_argument_t {
};
struct call_expression_t {
};
struct call_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *function;
call_argument_t *arguments;
};
struct unary_expression_t {
expression_t *function;
call_argument_t *arguments;
};
struct unary_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *value;
};
struct binary_expression_t {
expression_t *value;
};
struct binary_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *left;
expression_t *right;
};
struct select_expression_t {
expression_t *left;
expression_t *right;
};
struct select_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *compound;
symbol_t *symbol;
expression_t *compound;
symbol_t *symbol;
@@
-217,16
+234,16
@@
struct select_expression_t {
};
struct array_access_expression_t {
};
struct array_access_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *array_ref;
expression_t *index;
bool flipped; /* index/ref was written in a 5[a] way */
};
expression_t *array_ref;
expression_t *index;
bool flipped; /* index/ref was written in a 5[a] way */
};
-struct
sizeof
_expression_t {
- expression_base_t
expression
;
+struct
typeprop
_expression_t {
+ expression_base_t
base
;
type_t *type;
type_t *type;
- expression_t *
size
_expression;
+ expression_t *
tp
_expression;
};
struct designator_t {
};
struct designator_t {
@@
-236,36
+253,36
@@
struct designator_t {
};
struct offsetof_expression_t {
};
struct offsetof_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
type_t *type;
designator_t *designator;
};
struct va_start_expression_t {
type_t *type;
designator_t *designator;
};
struct va_start_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *ap;
declaration_t *parameter;
};
struct va_arg_expression_t {
expression_t *ap;
declaration_t *parameter;
};
struct va_arg_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *ap;
};
struct conditional_expression_t {
expression_t *ap;
};
struct conditional_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *condition;
expression_t *true_expression;
expression_t *false_expression;
};
struct statement_expression_t {
expression_t *condition;
expression_t *true_expression;
expression_t *false_expression;
};
struct statement_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
statement_t *statement;
};
struct classify_type_expression_t {
statement_t *statement;
};
struct classify_type_expression_t {
- expression_base_t
expression
;
+ expression_base_t
base
;
expression_t *type_expression;
};
expression_t *type_expression;
};
@@
-276,13
+293,15
@@
union expression_t {
string_literal_expression_t string;
wide_string_literal_expression_t wide_string;
builtin_symbol_expression_t builtin_symbol;
string_literal_expression_t string;
wide_string_literal_expression_t wide_string;
builtin_symbol_expression_t builtin_symbol;
+ builtin_constant_expression_t builtin_constant;
+ builtin_prefetch_expression_t builtin_prefetch;
reference_expression_t reference;
call_expression_t call;
unary_expression_t unary;
binary_expression_t binary;
select_expression_t select;
array_access_expression_t array_access;
reference_expression_t reference;
call_expression_t call;
unary_expression_t unary;
binary_expression_t binary;
select_expression_t select;
array_access_expression_t array_access;
-
sizeof_expression_t sizeofe
;
+
typeprop_expression_t typeprop
;
offsetof_expression_t offsetofe;
va_start_expression_t va_starte;
va_arg_expression_t va_arge;
offsetof_expression_t offsetofe;
va_start_expression_t va_starte;
va_arg_expression_t va_arge;
@@
-317,10
+336,10
@@
typedef enum {
INITIALIZER_LIST,
INITIALIZER_STRING,
INITIALIZER_WIDE_STRING
INITIALIZER_LIST,
INITIALIZER_STRING,
INITIALIZER_WIDE_STRING
-} initializer_
type
_t;
+} initializer_
kind
_t;
struct initializer_base_t {
struct initializer_base_t {
- initializer_
type_t type
;
+ initializer_
kind_t kind
;
};
struct initializer_value_t {
};
struct initializer_value_t {
@@
-335,8
+354,8
@@
struct initializer_list_t {
};
struct initializer_string_t {
};
struct initializer_string_t {
- initializer_base_t
initializer;
-
const char *
string;
+ initializer_base_t initializer;
+
string_t
string;
};
struct initializer_wide_string_t {
};
struct initializer_wide_string_t {
@@
-345,7
+364,7
@@
struct initializer_wide_string_t {
};
union initializer_t {
};
union initializer_t {
- initializer_
type_t type
;
+ initializer_
kind_t kind
;
initializer_base_t base;
initializer_value_t value;
initializer_list_t list;
initializer_base_t base;
initializer_value_t value;
initializer_list_t list;
@@
-369,9
+388,10
@@
typedef unsigned short decl_modifiers_t;
struct declaration_t {
unsigned char namespc;
unsigned char storage_class;
struct declaration_t {
unsigned char namespc;
unsigned char storage_class;
- decl_modifiers_t
decl_
modifiers;
+ decl_modifiers_t modifiers;
unsigned int address_taken : 1;
unsigned int is_inline : 1;
unsigned int address_taken : 1;
unsigned int is_inline : 1;
+ unsigned int used : 1; /**< Set if the declaration is used. */
type_t *type;
symbol_t *symbol;
source_position_t source_position;
type_t *type;
symbol_t *symbol;
source_position_t source_position;
@@
-381,16
+401,16
@@
struct declaration_t {
initializer_t *initializer;
expression_t *enum_value;
} init;
initializer_t *initializer;
expression_t *enum_value;
} init;
-
context_t context
;
-
context_t *parent_context
;
+
scope_t scope
;
+
scope_t *parent_scope
;
- /** next declaration in a
context
*/
+ /** next declaration in a
scope
*/
declaration_t *next;
/** next declaration with same symbol */
declaration_t *symbol_next;
/* the following fields are used in ast2firm module */
declaration_t *next;
/** next declaration with same symbol */
declaration_t *symbol_next;
/* the following fields are used in ast2firm module */
- unsigned char declaration_
type
;
+ unsigned char declaration_
kind
;
union {
unsigned int value_number;
ir_entity *entity;
union {
unsigned int value_number;
ir_entity *entity;
@@
-425,93
+445,97
@@
struct statement_base_t {
};
struct return_statement_t {
};
struct return_statement_t {
- statement_base_t
statement
;
- expression_t *
return_
value;
+ statement_base_t
base
;
+ expression_t *value;
};
struct compound_statement_t {
};
struct compound_statement_t {
- statement_base_t
statement
;
+ statement_base_t
base
;
statement_t *statements;
statement_t *statements;
-
context_t context
;
+
scope_t scope
;
};
struct declaration_statement_t {
};
struct declaration_statement_t {
- statement_base_t
statement
;
+ statement_base_t
base
;
declaration_t *declarations_begin;
declaration_t *declarations_end;
};
struct if_statement_t {
declaration_t *declarations_begin;
declaration_t *declarations_end;
};
struct if_statement_t {
- statement_base_t
statement
;
+ statement_base_t
base
;
expression_t *condition;
statement_t *true_statement;
statement_t *false_statement;
};
struct switch_statement_t {
expression_t *condition;
statement_t *true_statement;
statement_t *false_statement;
};
struct switch_statement_t {
- statement_base_t statement;
- expression_t *expression;
- statement_t *body;
+ statement_base_t base;
+ expression_t *expression;
+ statement_t *body;
+ case_label_statement_t *first_case, *last_case;
};
struct goto_statement_t {
};
struct goto_statement_t {
- statement_base_t statement;
- declaration_t *label;
+ statement_base_t base;
+ declaration_t *label; /**< The destination label. */
+ goto_statement_t *next; /**< links all goto statements of a function */
};
struct case_label_statement_t {
};
struct case_label_statement_t {
- statement_base_t statement;
- expression_t *expression;
- statement_t *label_statement;
+ statement_base_t base;
+ expression_t *expression;
+ statement_t *statement;
+ case_label_statement_t *next; /**< link to the next case label in switch */
};
struct label_statement_t {
};
struct label_statement_t {
- statement_base_t statement;
- declaration_t *label;
- statement_t *label_statement;
+ statement_base_t base;
+ declaration_t *label;
+ statement_t *statement;
+ label_statement_t *next; /**< links all label statements of a function */
};
struct expression_statement_t {
};
struct expression_statement_t {
- statement_base_t
statement
;
+ statement_base_t
base
;
expression_t *expression;
};
struct while_statement_t {
expression_t *expression;
};
struct while_statement_t {
- statement_base_t
statement
;
+ statement_base_t
base
;
expression_t *condition;
statement_t *body;
};
struct do_while_statement_t {
expression_t *condition;
statement_t *body;
};
struct do_while_statement_t {
- statement_base_t
statement
;
+ statement_base_t
base
;
expression_t *condition;
statement_t *body;
};
struct for_statement_t {
expression_t *condition;
statement_t *body;
};
struct for_statement_t {
- statement_base_t
statement
;
+ statement_base_t
base
;
expression_t *initialisation;
expression_t *condition;
expression_t *step;
statement_t *body;
expression_t *initialisation;
expression_t *condition;
expression_t *step;
statement_t *body;
-
context_t context
;
+
scope_t scope
;
};
struct asm_constraint_t {
};
struct asm_constraint_t {
-
const char *
constraints;
+
string_t
constraints;
expression_t *expression;
symbol_t *symbol;
asm_constraint_t *next;
};
struct asm_clobber_t {
expression_t *expression;
symbol_t *symbol;
asm_constraint_t *next;
};
struct asm_clobber_t {
-
const char *
clobber;
+
string_t
clobber;
asm_clobber_t *next;
};
struct asm_statement_t {
asm_clobber_t *next;
};
struct asm_statement_t {
- statement_base_t
statement
;
-
const char *
asm_text;
+ statement_base_t
base
;
+
string_t
asm_text;
asm_constraint_t *inputs;
asm_constraint_t *outputs;
asm_clobber_t *clobbers;
asm_constraint_t *inputs;
asm_constraint_t *outputs;
asm_clobber_t *clobbers;
@@
-537,7
+561,7
@@
union statement_t {
};
struct translation_unit_t {
};
struct translation_unit_t {
-
context_t context
;
+
scope_t scope
;
};
static inline
};
static inline