diff options
Diffstat (limited to 'awk.h')
-rw-r--r-- | awk.h | 30 |
1 files changed, 23 insertions, 7 deletions
@@ -259,6 +259,7 @@ typedef enum nodevals { Node_var_array, /* array is ptr to elements, table_size num of eles */ Node_var_new, /* newly created variable, may become an array */ Node_param_list, /* lnode is a variable, rnode is more list */ + Node_alias, /* entry in alias_table */ Node_func, /* lnode is param. list, rnode is body */ Node_ext_func, /* extension function, code_ptr is builtin code */ Node_builtin_func, /* built-in function, main use is for FUNCTAB */ @@ -362,7 +363,10 @@ typedef struct exp_node { } x; char *name; size_t reserved; - struct exp_node *rn; + union { + struct exp_node *rn; + struct exp_node **rpn; + } n; unsigned long cnt; enum reflagvals { CONSTANT = 1, @@ -480,12 +484,19 @@ typedef struct exp_node { /* Node_param_list */ #define param vname #define dup_ent sub.nodep.r.rptr +#define nxparam sub.nodep.x.extra /* Compile-time linked list of lexicals */ /* Node_param_list, Node_func */ -#define param_cnt sub.nodep.l.ll +#define param_cnt sub.nodep.l.ll /* Number of locals that are params */ + +/* Node_alias */ +#define let_alias sub.nodep.l.lptr /* Alias in alias table */ + +/* Node_func */ +#define frame_cnt sub.nodep.reserved /* No locals allocated at run-time */ /* Node_func */ -#define fparms sub.nodep.rn +#define fparms sub.nodep.n.rpn #define code_ptr sub.nodep.r.iptr /* Node_regex, Node_dynregex */ @@ -533,7 +544,7 @@ typedef struct exp_node { #define for_list sub.nodep.r.av #define for_list_size sub.nodep.reflags #define cur_idx sub.nodep.l.ll -#define for_array sub.nodep.rn +#define for_array sub.nodep.n.rn /* Node_frame: */ #define stack sub.nodep.r.av @@ -554,7 +565,7 @@ typedef struct exp_node { #define table_size sub.nodep.reflags #define array_size sub.nodep.cnt #define array_capacity sub.nodep.reserved -#define xarray sub.nodep.rn +#define xarray sub.nodep.n.rn #define parent_array sub.nodep.x.extra #define ainit array_funcs->init @@ -628,6 +639,7 @@ typedef enum opcodeval { /* assignments */ Op_assign, Op_store_var, /* simple variable assignment optimization */ + Op_clear_var, /* clear simple var to undefined state */ Op_store_sub, /* array[subscript] assignment optimization */ Op_store_field, /* $n assignment optimization */ Op_assign_times, @@ -1777,9 +1789,13 @@ extern void destroy_symbol(NODE *r); extern void release_symbols(NODE *symlist, int keep_globals); extern void append_symbol(NODE *r); extern NODE *lookup(const char *name); -extern NODE *make_params(char **pnames, int pcount); +extern NODE **make_params(char **pnames, int pcount); +NODE **extend_locals(NODE **parms, const char *pname, int lcount); extern void install_params(NODE *func); -extern void remove_params(NODE *func); +extern void remove_locals(NODE *func); +extern void install_let(NODE *let, const char *alias); +extern NODE *install_global_let(const char *alias, NODE *anon_global); +extern void remove_let(NODE *let); extern void release_all_vars(void); extern int foreach_func(NODE **table, int (*)(INSTRUCTION *, void *), void *); extern INSTRUCTION *bcalloc(OPCODE op, int size, int srcline); |