blob: c47f0f792784cf49c48ad25bed4e4f1b98c8d65b [file] [log] [blame]
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "supp.h"
extern FILE *infile;
#define MAXLEN 1024
extern char tkname[MAXLEN];
extern int label;
extern int nesting;
extern int local_offset,parm_offset,framesize;
#define REAL DOUBLE
#define FUNCTION FUNKT
#define YYERROR_VERBOSE 1
enum nodeflags {
NVARIABLE,NNUMBER,NADD,NMUL,NSUB,NDIV,NINDEX,
NEQUALS,NLT,NGT,NLEQ,NGEQ,NNEQ,NAND,NOR,
NI2R,NR2I,NASSGN,NCALL,NARG
};
extern char *nodename[];
typedef struct Typ type;
typedef struct obj operand;
typedef struct var {
int nesting;
char *name;
struct Typ *type;
struct var *next;
int offset;
struct Var *vbccvar;
} var;
#define MAXNESTING 128
extern var *first_var[128];
typedef struct {
int flags;
char *name;
} *stype;
typedef struct mnode {
enum nodeflags flags;
struct mnode *left,*right;
type *type;
var *var;
int ivalue;
double rvalue;
} node;
void enter_block(void);
void leave_block(void);
void enter_func(char *,type *);
void leave_func(void);
var *find_var(char *,int);
var *add_var(char *,type *);
var *new_temp(int);
char *add_string(char *);
void error(int,...);
void *getmem(size_t);
node *number_node(void);
node *var_node(void);
node *conv_tree(node *,int);
node *binary_node(enum nodeflags,node *,node *);
void print_tree(node *);
void simplify_tree(node *);
void free_tree(node *);
type *new_type(int);
type *new_array(type *,node *);
void return_statement(node *);
void while_statement(node *);
void while_end(void);
void if_statement(node *);
void if_end(void);
void if_else(void);
void assign_statement(node *,node *);
void push_int(int);
int pop_int(void);
void push_name(char *);
char *pop_name(void);
operand *gen_tree(node *);
void gen_cond(node *,int,int);
void gen_label(int);
int push_arg(node *);
void gen_global(char *,int);