home *** CD-ROM | disk | FTP | other *** search
-
- /********************************************
- code.h
- copyright 1991, Michael D. Brennan
-
- This is a source file for mawk, an implementation of
- the AWK programming language.
-
- Mawk is distributed without warranty under the terms of
- the GNU General Public License, version 2, 1991.
- ********************************************/
-
-
- /* $Log: code.h,v $
- * Revision 1.5 1995/06/18 19:42:15 mike
- * Remove some redundant declarations and add some prototypes
- *
- * Revision 1.4 1994/12/13 00:13:01 mike
- * delete A statement to delete all of A at once
- *
- * Revision 1.3 1993/12/01 14:25:06 mike
- * reentrant array loops
- *
- * Revision 1.2 1993/07/22 00:04:01 mike
- * new op code _LJZ _LJNZ
- *
- * Revision 1.1.1.1 1993/07/03 18:58:10 mike
- * move source to cvs
- *
- * Revision 5.3 1993/01/14 13:11:11 mike
- * code2() -> xcode2()
- *
- * Revision 5.2 1993/01/07 02:50:33 mike
- * relative vs absolute code
- *
- * Revision 5.1 1991/12/05 07:59:07 brennan
- * 1.1 pre-release
- *
- */
-
-
- /* code.h */
-
- #ifndef CODE_H
- #define CODE_H
-
- #include "memory.h"
-
- #define PAGESZ 512
- /* number of code instructions allocated at one time */
- #define CODEWARN 16
-
- /* coding scope */
- #define SCOPE_MAIN 0
- #define SCOPE_BEGIN 1
- #define SCOPE_END 2
- #define SCOPE_FUNCT 3
-
-
- typedef struct {
- INST *base, *limit, *warn, *ptr ;
- } CODEBLOCK ;
-
- extern CODEBLOCK active_code ;
- extern CODEBLOCK *main_code_p, *begin_code_p, *end_code_p ;
-
- extern INST *main_start, *begin_start, *end_start ;
- extern unsigned main_size, begin_size ;
- extern INST *execution_start ;
- extern INST *next_label ; /* next statements jump to here */
- extern int dump_code_flag ;
-
- #define code_ptr active_code.ptr
- #define code_base active_code.base
- #define code_warn active_code.warn
- #define code_limit active_code.limit
- #define code_offset (code_ptr-code_base)
-
- #define INST_BYTES(x) (sizeof(INST)*(unsigned)(x))
-
- extern CELL eval_stack[] ;
- extern int exit_code ;
-
-
- #define code1(x) code_ptr++ -> op = (x)
- /* shutup picky compilers */
- #define code2(x,p) xcode2(x,(PTR)(p))
-
- void PROTO(xcode2, (int, PTR)) ;
- void PROTO(code2op, (int, int)) ;
- INST *PROTO(code_shrink, (CODEBLOCK*, unsigned*)) ;
- void PROTO(code_grow, (void)) ;
- void PROTO(set_code, (void)) ;
- void PROTO(be_setup, (int)) ;
- void PROTO(dump_code, (void)) ;
-
-
- /* the machine opcodes */
- /* to avoid confusion with a ptr FE_PUSHA must have op code 0 */
- /* unfortunately enums are less portable than defines */
-
- #define FE_PUSHA 0
- #define FE_PUSHI 1
- #define F_PUSHA 2
- #define F_PUSHI 3
- #define NF_PUSHI 4
- #define _HALT 5
- #define _STOP 6
- #define _PUSHC 7
- #define _PUSHD 8
- #define _PUSHS 9
- #define _PUSHINT 10
- #define _PUSHA 11
- #define _PUSHI 12
- #define L_PUSHA 13
- #define L_PUSHI 14
- #define AE_PUSHA 15
- #define AE_PUSHI 16
- #define A_PUSHA 17
- #define LAE_PUSHA 18
- #define LAE_PUSHI 19
- #define LA_PUSHA 20
- #define _POP 21
- #define _ADD 22
- #define _SUB 23
- #define _MUL 24
- #define _DIV 25
- #define _MOD 26
- #define _POW 27
- #define _NOT 28
- #define _TEST 29
- #define A_TEST 30
- #define A_DEL 31
- #define ALOOP 32
- #define A_CAT 33
- #define _UMINUS 34
- #define _UPLUS 35
- #define _ASSIGN 36
- #define _ADD_ASG 37
- #define _SUB_ASG 38
- #define _MUL_ASG 39
- #define _DIV_ASG 40
- #define _MOD_ASG 41
- #define _POW_ASG 42
- #define F_ASSIGN 43
- #define F_ADD_ASG 44
- #define F_SUB_ASG 45
- #define F_MUL_ASG 46
- #define F_DIV_ASG 47
- #define F_MOD_ASG 48
- #define F_POW_ASG 49
- #define _CAT 50
- #define _BUILTIN 51
- #define _PRINT 52
- #define _POST_INC 53
- #define _POST_DEC 54
- #define _PRE_INC 55
- #define _PRE_DEC 56
- #define F_POST_INC 57
- #define F_POST_DEC 58
- #define F_PRE_INC 59
- #define F_PRE_DEC 60
- #define _JMP 61
- #define _JNZ 62
- #define _JZ 63
- #define _LJZ 64
- #define _LJNZ 65
- #define _EQ 66
- #define _NEQ 67
- #define _LT 68
- #define _LTE 69
- #define _GT 70
- #define _GTE 71
- #define _MATCH0 72
- #define _MATCH1 73
- #define _MATCH2 74
- #define _EXIT 75
- #define _EXIT0 76
- #define _NEXT 77
- #define _RANGE 78
- #define _CALL 79
- #define _RET 80
- #define _RET0 81
- #define SET_ALOOP 82
- #define POP_AL 83
- #define OL_GL 84
- #define OL_GL_NR 85
- #define _OMAIN 86
- #define _JMAIN 87
- #define DEL_A 88
-
- #endif /* CODE_H */
-