#include "input.h"
enum category_enum
{
token_category = 111,
production_category = 222,
parameter_category = 333
};
extern FILE* yyin;
struct token_part;
struct production_part;
struct prod_token_parm_item;
typedef struct GTY(()) prod_token_parm_item item;
struct token_part GTY(())
{
location_t location;
unsigned int charno;
unsigned int length;
unsigned char* chars;
};
#define NESTING_LEVEL(a) a->tp.pro.info[0]
#define NUMERIC_TYPE(a) a->tp.pro.info[1]
#define SUB_COUNT 5
#define SYMBOL_TABLE_NAME(a) (a->tp.pro.sub[0])
#define EXPRESSION_TYPE(a) (a->tp.pro.sub[1])
#define OP1(a) (a->tp.pro.sub[2])
#define PARAMETERS(a) (a->tp.pro.sub[2])
#define VARIABLE(a) (a->tp.pro.sub[2])
#define VAR_INIT(a) (a->tp.pro.sub[2])
#define OP2(a) (a->tp.pro.sub[3])
#define FIRST_PARMS(a) (a->tp.pro.sub[3])
#define OP3(a) (a->tp.pro.sub[4])
#define STORAGE_CLASS_TOKEN(a) (a->tp.pro.sub[4])
#define STORAGE_CLASS(a) a->tp.pro.flag1
struct production_part GTY(())
{
struct prod_token_parm_item *main_token;
unsigned int info[2];
struct prod_token_parm_item *sub[SUB_COUNT];
tree code;
struct prod_token_parm_item *next;
unsigned int flag1:2;
unsigned int flag2:1;
unsigned int flag3:1;
unsigned int flag4:1;
unsigned int flag5:1;
unsigned int flag6:1;
unsigned int flag7:1;
};
#define STATIC_STORAGE 0
#define AUTOMATIC_STORAGE 1
#define EXTERNAL_REFERENCE_STORAGE 2
#define EXTERNAL_DEFINITION_STORAGE 3
#define SIGNED_CHAR 1
#define UNSIGNED_CHAR 2
#define SIGNED_INT 3
#define UNSIGNED_INT 4
#define VOID_TYPE 5
#define EXP_PLUS 0
#define EXP_REFERENCE 1
#define EXP_ASSIGN 2
#define EXP_FUNCTION_INVOCATION 3
#define EXP_MINUS 4
#define EXP_EQUALS 5
struct parameter_part GTY(())
{
struct prod_token_parm_item *next;
unsigned char* variable_name;
tree * GTY ((length ("1"))) where_to_put_var_tree;
};
struct prod_token_parm_item GTY(())
{
enum category_enum category;
unsigned int type;
union t_or_p
{
struct token_part GTY((tag ("token_category"))) tok;
struct production_part GTY((tag ("production_category"))) pro;
struct parameter_part GTY((tag ("parameter_category"))) par;
} GTY((desc ("((item *)&%1)->category"))) tp;
};
#define YYSTYPE void *
void *my_malloc (size_t size);
int insert_tree_name (struct prod_token_parm_item *prod);
struct prod_token_parm_item *lookup_tree_name (struct prod_token_parm_item *prod);
struct prod_token_parm_item *make_production (int type, struct prod_token_parm_item *main_tok);
void mark_production_used (struct prod_token_parm_item *pp);
void mark_token_used (struct prod_token_parm_item *tt);
void treelang_debug (void);
void sanity_check (struct prod_token_parm_item *item);