/*  $VER: vbcc (vbc.h) $Revision: 1.23 $    */

#include "supp.h"

#define eval_constn(a) eval_const(&a->val,a->ntyp->flags)

typedef struct identifier_list{
    char *identifier;
    int length;
    struct identifier_list *next;
} identifier_list;
typedef struct struct_identifier{
/*    int flags;*/
  char *identifier;
  struct struct_declaration *sd;
  struct struct_identifier *next;
} struct_identifier;

#ifndef NODES
#error wrong node
typedef struct node{
    int flags,lvalue,sidefx;
    type *ntyp;
    struct node *left;
    struct node *right;
    struct argument_list *alist;
    char *identifier;
    union atyps val;
    struct obj o;
} node;

typedef node *np;

#define NODES sizeof(node)
#endif

typedef struct argument_list{
  np  arg;
  struct argument_list *next;
  struct IC *pushic;
} argument_list;


#define MAXI 512 /* maximale Laenge von Identifiers in Bytes    */
#define MAXN 128 /* maximale Verschachtelung von Bloecken */

extern struct tunit *first_tunit,*last_tunit;
extern type *arith_typ(type*,type *);
extern void insert_constn(np);
extern int int_erw(int);
extern type *andcomp(np,np);
extern void simple_alg_opt(np);
extern int type_expression(np,type *),
  compatible_types(type *,type *,int),
  compare_sd(struct struct_declaration *,struct struct_declaration *);
#if HAVE_AOS4
extern int aos4_attr(type *,char *);
#endif
extern np identifier_expression(void),constant_expression(void),string_expression(void),
   postfix_expression(void),unary_expression(void),cast_expression(void),
   multiplicative_expression(void),additive_expression(void),
   shift_expression(void),relational_expression(void),equality_expression(void),
   and_expression(void),exclusive_or_expression(void),
   inclusive_or_expression(void),logical_and_expression(void),
   logical_or_expression(void),conditional_expression(void),
   assignment_expression(void),expression(void),primary_expression(void);
extern struct argument_list *argument_list_expression(void);
extern struct const_list *cl_from_string(char *start, char *end);

extern np new_node(void);

/* puh  */
extern int is_keyword(char *);
extern void pre(FILE *,np),pra(FILE *,struct argument_list *);
extern void free_expression(np),free_alist(struct argument_list *);
extern void cpbez(char *m,int ckw),cpnum(char *m),killsp(void);
extern void copy_token(/*no prototype because cpp.h not always included*/);
extern void push_token(/*no prototype because cpp.h not always included*/);
extern void next_token(void);
extern struct struct_declaration *add_sd(struct struct_declaration *,int);
extern void add_sl(struct struct_declaration *,struct struct_list (*)[]);
extern void free_sd(struct struct_declaration *);
extern void prl(FILE *,struct struct_declaration *);
extern char *add_identifier(char *,int);
extern type *declarator(type *),*direct_declarator(type *),
           *pointer(type *),*declaration_specifiers(void);
extern int declaration(int),type_uncomplete(type *);
extern struct const_list *initialization(type *,int,int,int,struct struct_declaration *,struct const_list *);
extern void init_local_compound(struct Var *);
extern zmax init_dyn_sz,init_const_sz;
extern int init_dyn_cnt,init_const_cnt;
extern struct struct_declaration *find_struct(char *,int);
extern void add_struct_identifier(char *,struct struct_declaration *);
extern void free_si(struct struct_identifier *);
extern char *ident;
extern char number[MAXI],buff[MAXI];
extern struct struct_declaration *first_sd[MAXN],*last_sd[MAXN],*merk_sdf,*merk_sdl;
extern struct struct_identifier *first_si[MAXN],*last_si[MAXN],*merk_sif,*merk_sil;
extern struct identifier_list *first_ilist[MAXN],*last_ilist[MAXN],*merk_ilistf,*merk_ilistl;
extern void free_ilist(struct identifier_list *);
extern int nesting;
extern hashtable *hash_ext;
extern struct Var *first_var[MAXN],*last_var[MAXN],*merk_varf,*merk_varl,*first_ext,*last_ext;
extern struct Var *block_vla[MAXN];
extern struct llist *vladeflabels[MAXN],*vlajmplabels[MAXN];
extern struct vlaadjust_list *vlaadjusts[MAXN];
extern void freevl(void);
extern void clearvl(void);
extern void free_var(struct Var *);
extern void var_declaration(void);
extern int storage_class_specifiers(void);
extern void enter_block(void),leave_block(void);
extern struct Var *find_var(char *,int);
extern struct Var *find_ext_var(char *);
extern struct Var *add_var(char *,type *,int,struct const_list *);
extern void fi_from_attr(struct Var *);
extern void needs(char *s);


extern int usz;

extern int c99;
extern int opencl;
extern int merge_strings;
extern int mask_opt;
extern int disallow_statics;
extern int header_cnt;
extern int softfloat;
#define MAGIC_WPO 123
extern int wpo,wpo_key;
extern FILE *input_wpo;

extern void gen_IC(np,int,int),convert(np,int),gen_label(int);
extern void gen_test(struct obj *,int,int,int);
extern void savescratch(int,struct IC *,int,struct obj *);
typedef struct regargs_list{
  struct regargs_list *next;
  struct argument_list *al;
  int reg;
  struct Var *v;
  int rsaved;
} regargs_list;
#ifdef HAVE_REGPARMS
extern zmax push_args(struct argument_list *,struct struct_declaration *,int,struct regargs_list **,struct reg_handle *,struct obj *,type *,int,type *);
#else
extern zmax push_args(struct argument_list *,struct struct_declaration *,int,struct regargs_list **);
#endif
extern int allocreg(int,int);
extern void free_reg(int),alloc_hardreg(int);

extern FILE *out,*ic1,*ic2,*ppout,*cmdfile;

extern void statement(void),labeled_statement(void),if_statement(void);
extern void switch_statement(void),while_statement(void),for_statement(void);
extern void do_statement(void),goto_statement(void),continue_statement(void);
extern void break_statement(void),return_statement(void);
extern void expression_statement(void),compound_statement(void);
extern void translation_unit(void);
extern int main(int, char *[]);
extern int nocode,dontdelete,registerpri,looppri,currentpri;
extern int no_cast_free;

extern np makepointer(np);

typedef struct vlaadjust_list {
  struct IC *branch,*first;
  struct vlaadjust_list *next;
} vlaadjust_list;

extern int switch_typ,switch_count,switch_act;
typedef struct llist{
    char *identifier;
    int label,flags,switch_count;
    struct llist *next;
    union atyps val;
} llist;
#define LABELDEFINED 1
#define LABELUSED 2
#define LABELDEFAULT 4
#define LSIZE sizeof(struct llist)
extern struct llist *first_llist,*last_llist;
extern struct llist *find_label(char *),*add_label(char *);
extern void free_llist(struct llist *);

extern int endok,return_label,return_value,break_label;
extern int const_expr,for_decl;
extern struct Var *return_var;
extern type *return_typ;
extern zmax local_offset[MAXN];

extern void scratch_var(struct obj *,int,type *);
extern void get_scratch(struct obj *,int,int,type *);
extern void gen_cond(struct obj *,int,int,int);

#define MAXCF 70
extern int c_flags[MAXCF];
extern char *c_flags_name[MAXCF];
extern union ppi c_flags_val[MAXCF];

extern FILE *open_out(char *,char *);

extern char *inname;

extern void gen_vars(struct Var *);

/*  Format der Tabelle fuer Fehlermeldungen */
typedef struct err_out{
    char *text;
    int  flags;
} terr_out;


/*  Flags fuer err_out.flags    */
#define ERROR       1
#define WARNING     2
#define ANSIV       4
#define INTERNAL    8
#define FATAL      16
#define MESSAGE    32
#define DONTWARN   64
#define PREPROC   128
#define NOLINE    256
#define INFUNC    512
#define INIC     1024
#define NORAUS   2048

extern struct err_out err_out[];
extern int err_num;

typedef struct misra_err_out{
		int chapter;
		int rule;
		char *text;
		int flags;
} tmisra_err_out;

extern struct misra_err_out misra_err_out[];

#define MISRA								1
#define	MISRA_PREPROC				2
#define MISRA_2004					4
#define MISRA_1998					8

#ifdef HAVE_ECPP
typedef struct ecpp_dtor_list {
  struct Var *var;
  struct ecpp_dtor_list *next;
} ecpp_dtor_list;
extern struct struct_declaration *current_class;
extern type *current_func;
extern struct ecpp_dtor_list *ecpp_dlist[MAXN];
struct Var *ecpp_find_ext_var(char *identifier);
struct Var *ecpp_find_var(char *identifier);
struct struct_declaration *ecpp_find_scope(char* nested_name,char** identifier);
struct struct_list *ecpp_find_member(char* identifier,struct struct_declaration *scope,struct struct_declaration** ret_scope,int search_flag);
void ecpp_auto_call_dtors();
int ecpp_is_friend(struct struct_declaration *class);
#endif

extern int afterlabel;

extern int errors;

extern int float_used;
extern char *cur_func;
extern Var *cur_funcv;
extern int line;
extern void free_clist(struct const_list *);
extern struct const_list *first_clist,*last_clist;
extern struct Var *regsbuf[MAXR+1];
extern int regbnesting[MAXR+1];


