#ifndef AST_T_H
#define AST_T_H
+#include <libfirm/firm_types.h>
+
#include "ast.h"
#include "symbol.h"
#include "token_t.h"
struct call_expression_t {
expression_t expression;
- expression_t *method;
+ expression_t *function;
call_argument_t *arguments;
};
NAMESPACE_NORMAL,
NAMESPACE_STRUCT,
NAMESPACE_UNION,
- NAMESPACE_ENUM
+ NAMESPACE_ENUM,
+ NAMESPACE_LABEL
} namespace_t;
typedef enum {
};
struct declaration_t {
- unsigned short namespace;
- unsigned short storage_class;
+ unsigned char namespace;
+ unsigned char storage_class;
+ unsigned int address_taken : 1;
type_t *type;
symbol_t *symbol;
source_position_t source_position;
context_t *parent_context;
/** next declaration in a context */
- declaration_t *context_next;
- /** next declaration with same symbol */
declaration_t *next;
+ /** next declaration with same symbol */
+ declaration_t *symbol_next;
+
+ unsigned char declaration_type; /* used in ast2firm module */
+ union {
+ unsigned int value_number; /* used in ast2firm module */
+ ir_entity *entity; /* used in ast2firm module */
+ ir_node *block; /* used in ast2firm module */
+ } v;
};
typedef enum {
statement_t statement;
declaration_t *declarations_begin;
declaration_t *declarations_end;
-
- int value_number; /**< filled in by semantic phase */
- int refs;
};
struct if_statement_t {
};
struct goto_statement_t {
- statement_t statement;
- symbol_t *label_symbol;
- label_statement_t *label;
+ statement_t statement;
+ declaration_t *label;
};
struct case_label_statement_t {
};
struct label_statement_t {
- statement_t statement;
- symbol_t *symbol;
+ statement_t statement;
+ declaration_t *label;
+ statement_t *label_statement;
};
struct expression_statement_t {