/*\
||| This file a part of Pike, and is copyright by Fredrik Hubinette
||| Pike is distributed as GPL (General Public License)
||| See the files COPYING and DISCLAIMER for more information.
\*/

/*
 * $Id: docode.h,v 1.12 2001/02/25 17:41:10 hubbe Exp $
 */
#ifndef DOCODE_H
#define DOCODE_H

#define DO_LVALUE 1
#define DO_NOT_COPY 2
#define DO_POP 4
#define DO_INDIRECT 8
#define DO_LVALUE_IF_POSSIBLE 16
#define DO_NOT_COPY_TOPLEVEL 32

#define WANT_LVALUE (DO_LVALUE | DO_INDIRECT)

extern int store_linenumbers;

#define emit0(X)     insert_opcode0((X),lex.current_line, lex.current_file)
#define emit1(X,Y)   insert_opcode1((X),(Y),lex.current_line, lex.current_file)
#define emit2(X,Y,Z) insert_opcode2((X),(Y),(Z),lex.current_line, lex.current_file)

/* Prototypes begin here */
void upd_int(int offset, INT32 tmp);
INT32 read_int(int offset);
void push_address(void);
void push_explicit(INT32 address);
INT32 pop_address(void);
int alloc_label(void);
int do_jump(int token,INT32 lbl);
void do_pop(int x);
int do_docode(node *n, INT16 flags);
void do_cond_jump(node *n, int label, int iftrue, int flags);
void do_code_block(node *n);
int docode(node *n);
/* Prototypes end here */

#endif