EXPR_OFFSETOF,
EXPR_VA_ARG,
EXPR_STATEMENT
-} expresion_type_t;
+} expression_type_t;
struct context_t {
declaration_t *declarations;
};
struct expression_base_t {
- expresion_type_t type;
- type_t *datatype;
- source_position_t source_position;
+ expression_type_t type;
+ type_t *datatype;
+ source_position_t source_position;
};
struct const_expression_t {
UNEXPR_POSTFIX_DECREMENT,
UNEXPR_PREFIX_INCREMENT,
UNEXPR_PREFIX_DECREMENT,
- UNEXPR_CAST
+ UNEXPR_CAST,
+ UNEXPR_CAST_IMPLICIT /* compiler generated cast */
} unary_expression_type_t;
struct unary_expression_t {
};
union expression_t {
- expresion_type_t type;
+ expression_type_t type;
expression_base_t base;
const_expression_t conste;
- string_literal_expression_t string_literal;
+ string_literal_expression_t string;
builtin_symbol_expression_t builtin_symbol;
reference_expression_t reference;
call_expression_t call;
array_access_expression_t array_access;
sizeof_expression_t sizeofe;
offsetof_expression_t offsetofe;
- va_arg_expression_t va_arg;
+ va_arg_expression_t va_arge;
conditional_expression_t conditional;
statement_expression_t statement;
classify_type_expression_t classify_type;
STORAGE_CLASS_STATIC,
STORAGE_CLASS_AUTO,
STORAGE_CLASS_REGISTER,
- STORAGE_CLASS_ENUM_ENTRY
-} storage_class_t;
+ STORAGE_CLASS_ENUM_ENTRY,
+ STORAGE_CLASS_THREAD,
+ STORAGE_CLASS_THREAD_EXTERN,
+ STORAGE_CLASS_THREAD_STATIC
+} storage_class_tag_t;
typedef enum {
NAMESPACE_NORMAL,
NAMESPACE_STRUCT,
NAMESPACE_UNION,
NAMESPACE_ENUM,
- NAMESPACE_LABEL
+ NAMESPACE_LABEL,
} namespace_t;
typedef enum {
STATEMENT_CASE_LABEL,
STATEMENT_WHILE,
STATEMENT_DO_WHILE,
- STATEMENT_FOR
+ STATEMENT_FOR,
+ STATEMENT_ASM
} statement_type_t;
struct statement_base_t {
context_t context;
};
+struct asm_constraint_t {
+ const char *constraints;
+ expression_t *expression;
+ symbol_t *symbol;
+ asm_constraint_t *next;
+};
+
+struct asm_clobber_t {
+ const char *clobber;
+ asm_clobber_t *next;
+};
+
+struct asm_statement_t {
+ statement_base_t statement;
+ const char *asm_text;
+ asm_constraint_t *inputs;
+ asm_constraint_t *outputs;
+ asm_clobber_t *clobbers;
+ bool is_volatile;
+};
+
union statement_t {
statement_type_t type;
statement_base_t base;
while_statement_t whiles;
do_while_statement_t do_while;
for_statement_t fors;
+ asm_statement_t asms;
};
struct translation_unit_t {