aboutsummaryrefslogtreecommitdiffstats
path: root/awk.h
diff options
context:
space:
mode:
Diffstat (limited to 'awk.h')
-rw-r--r--awk.h30
1 files changed, 23 insertions, 7 deletions
diff --git a/awk.h b/awk.h
index 732aec04..df00f99f 100644
--- a/awk.h
+++ b/awk.h
@@ -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);