From 6959e2ab216aeb1d5d8f07ce73cd8b9894b83006 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Sun, 30 Jun 2013 20:57:03 -0400 Subject: Added first version of select extension and new API hooks needed by it. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index b9d3a1b0..7ca401a5 100644 --- a/awk.h +++ b/awk.h @@ -1517,6 +1517,7 @@ extern void set_FNR(void); extern void set_NR(void); extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg); +extern struct redirect *redirect_string(char *redir_exp_str, size_t redir_exp_len, int not_string_flag, int redirtype, int *errflg); extern NODE *do_close(int nargs); extern int flush_io(void); extern int close_io(bool *stdio_problem); -- cgit v1.2.3 From e3f20c041c078eacf648af94d9f012e4906359bb Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Thu, 6 Nov 2014 14:18:37 -0500 Subject: Enhance get_file API to return info about input and output and to enable extensions to create already-opened files or sockets. --- awk.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 1f4364ad..8ec6bccb 100644 --- a/awk.h +++ b/awk.h @@ -1524,7 +1524,7 @@ extern void set_FNR(void); extern void set_NR(void); extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg); -extern struct redirect *redirect_string(char *redir_exp_str, size_t redir_exp_len, int not_string_flag, int redirtype, int *errflg); +extern struct redirect *redirect_string(const char *redir_exp_str, size_t redir_exp_len, int not_string_flag, int redirtype, int *errflg, int extfd); extern NODE *do_close(int nargs); extern int flush_io(void); extern int close_io(bool *stdio_problem); @@ -1543,6 +1543,7 @@ extern int is_off_limits_var(const char *var); extern char *estrdup(const char *str, size_t len); extern void update_global_values(); extern long getenv_long(const char *name); +extern void after_beginfile(IOBUF **curfile); /* mpfr.c */ extern void set_PREC(void); -- cgit v1.2.3 From 8b863f8852067b0638e09dc7c82355b96381dc12 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 15 Nov 2014 18:35:45 +0200 Subject: Remove MBS_SUPPORT ifdefs. --- awk.h | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 8bc393e7..9b72a53c 100644 --- a/awk.h +++ b/awk.h @@ -95,13 +95,11 @@ extern int errno; #include "missing_d/gawkbool.h" #endif -#include "mbsupport.h" /* defines MBS_SUPPORT */ - -#if MBS_SUPPORT /* We can handle multibyte strings. */ #include #include -#endif + +#include "mbsupport.h" /* defines stuff for DJGPP to fake MBS */ #ifdef STDC_HEADERS #include @@ -395,10 +393,8 @@ typedef struct exp_node { size_t slen; long sref; int idx; -#if MBS_SUPPORT wchar_t *wsp; size_t wslen; -#endif } val; } sub; NODETYPE type; @@ -1104,11 +1100,7 @@ extern int exit_val; #define do_lint (do_flags & (DO_LINT_INVALID|DO_LINT_ALL)) #define do_lint_old (do_flags & DO_LINT_OLD) #endif -#if MBS_SUPPORT extern int gawk_mb_cur_max; -#else -#define gawk_mb_cur_max (1) -#endif #if defined (HAVE_GETGROUPS) && defined(NGROUPS_MAX) && NGROUPS_MAX > 0 extern GETGROUPS_T *groupset; @@ -1416,10 +1408,8 @@ extern AWKNUM nondec2awknum(char *str, size_t len); extern NODE *do_dcgettext(int nargs); extern NODE *do_dcngettext(int nargs); extern NODE *do_bindtextdomain(int nargs); -#if MBS_SUPPORT extern int strncasecmpmbs(const unsigned char *, const unsigned char *, size_t); -#endif /* eval.c */ extern void PUSH_CODE(INSTRUCTION *cp); extern INSTRUCTION *POP_CODE(void); @@ -1602,7 +1592,6 @@ extern NODE *r_dupnode(NODE *n); extern NODE *make_str_node(const char *s, size_t len, int flags); extern void *more_blocks(int id); extern int parse_escape(const char **string_ptr); -#if MBS_SUPPORT extern NODE *str2wstr(NODE *n, size_t **ptr); extern NODE *wstr2str(NODE *n); #define force_wstring(n) str2wstr(n, NULL) @@ -1616,9 +1605,6 @@ extern wint_t btowc_cache[]; #define btowc_cache(x) btowc_cache[(x)&0xFF] extern void init_btowc_cache(); #define is_valid_character(b) (btowc_cache[(b)&0xFF] != WEOF) -#else -#define free_wstr(NODE) /* empty */ -#endif /* re.c */ extern Regexp *make_regexp(const char *s, size_t len, bool ignorecase, bool dfa, bool canfatal); extern int research(Regexp *rp, char *str, int start, size_t len, int flags); -- cgit v1.2.3 From 624caa19ebb5b5a19046f0b0deb96b2e6c093685 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 17 Nov 2014 17:05:14 +0200 Subject: Add runtime check to run old code. Easier to debug/test. --- awk.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 9b72a53c..e788a5a8 100644 --- a/awk.h +++ b/awk.h @@ -1056,6 +1056,8 @@ extern bool field0_valid; extern int do_flags; +extern bool do_old_mem; /* XXX temporary */ + extern SRCFILE *srcfiles; /* source files */ enum do_flag_values { -- cgit v1.2.3 From a398513aadb70b98e6e0ad04e5821ea0b6eca00c Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 21 Nov 2014 10:53:34 +0200 Subject: Remove OLDMEM checks, preparatory to merging. --- awk.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index e788a5a8..9b72a53c 100644 --- a/awk.h +++ b/awk.h @@ -1056,8 +1056,6 @@ extern bool field0_valid; extern int do_flags; -extern bool do_old_mem; /* XXX temporary */ - extern SRCFILE *srcfiles; /* source files */ enum do_flag_values { -- cgit v1.2.3 From 838f65088cda84edc2df609d3e388acb3c8eb13d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 22 Nov 2014 20:38:31 +0200 Subject: Dork around with xmalloc for z/OS. --- awk.h | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 9b72a53c..84c8ca0e 100644 --- a/awk.h +++ b/awk.h @@ -1245,13 +1245,42 @@ DEREF(NODE *r) #define cant_happen() r_fatal("internal error line %d, file: %s", \ __LINE__, __FILE__) -#define emalloc(var,ty,x,str) (void)((var=(ty)malloc((size_t)(x))) ||\ - (fatal(_("%s: %s: can't allocate %ld bytes of memory (%s)"),\ - (str), #var, (long) (x), strerror(errno)),0)) -#define erealloc(var,ty,x,str) (void)((var = (ty)realloc((char *)var, (size_t)(x))) \ - ||\ - (fatal(_("%s: %s: can't allocate %ld bytes of memory (%s)"),\ - (str), #var, (long) (x), strerror(errno)),0)) +#define fatal set_loc(__FILE__, __LINE__), r_fatal + +static inline void * +emalloc_real(size_t count, const char *where, const char *var, const char *file, int line) +{ + void *ret; + + if (count == 0) + fatal("%s:%d: emalloc called with zero bytes", file, line); + + ret = (void *) malloc(count); + if (ret == NULL) + fatal(_("%s:%d:%s: %s: can't allocate %ld bytes of memory (%s)"), + file, line, where, var, (long) count, strerror(errno)); + + return ret; +} + +static inline void * +erealloc_real(void *ptr, size_t count, const char *where, const char *var, const char *file, int line) +{ + void *ret; + + if (count == 0) + fatal("%s:%d: erealloc called with zero bytes", file, line); + + ret = (void *) realloc(ptr, count); + if (ret == NULL) + fatal(_("%s:%d:%s: %s: can't reallocate %ld bytes of memory (%s)"), + file, line, where, var, (long) count, strerror(errno)); + + return ret; +} + +#define emalloc(var,ty,x,str) (void) (var = (ty) emalloc_real((size_t)(x), str, #var, __FILE__, __LINE__)) +#define erealloc(var,ty,x,str) (void) (var = (ty) erealloc_real((void *) var, (size_t)(x), str, #var, __FILE__, __LINE__)) #define efree(p) free(p) @@ -1285,8 +1314,6 @@ force_number(NODE *n) #endif /* GAWKDEBUG */ -#define fatal set_loc(__FILE__, __LINE__), r_fatal - extern jmp_buf fatal_tag; extern bool fatal_tag_valid; -- cgit v1.2.3 From 2513062a4c89b0b60c3717d506fce841d44d871e Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 23 Nov 2014 19:56:27 +0200 Subject: Fix compile problems and warnings on current GCC (4.9.2). --- awk.h | 126 +++++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 63 insertions(+), 63 deletions(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 84c8ca0e..3abad6f8 100644 --- a/awk.h +++ b/awk.h @@ -1245,74 +1245,12 @@ DEREF(NODE *r) #define cant_happen() r_fatal("internal error line %d, file: %s", \ __LINE__, __FILE__) -#define fatal set_loc(__FILE__, __LINE__), r_fatal - -static inline void * -emalloc_real(size_t count, const char *where, const char *var, const char *file, int line) -{ - void *ret; - - if (count == 0) - fatal("%s:%d: emalloc called with zero bytes", file, line); - - ret = (void *) malloc(count); - if (ret == NULL) - fatal(_("%s:%d:%s: %s: can't allocate %ld bytes of memory (%s)"), - file, line, where, var, (long) count, strerror(errno)); - - return ret; -} - -static inline void * -erealloc_real(void *ptr, size_t count, const char *where, const char *var, const char *file, int line) -{ - void *ret; - - if (count == 0) - fatal("%s:%d: erealloc called with zero bytes", file, line); - - ret = (void *) realloc(ptr, count); - if (ret == NULL) - fatal(_("%s:%d:%s: %s: can't reallocate %ld bytes of memory (%s)"), - file, line, where, var, (long) count, strerror(errno)); - - return ret; -} - #define emalloc(var,ty,x,str) (void) (var = (ty) emalloc_real((size_t)(x), str, #var, __FILE__, __LINE__)) #define erealloc(var,ty,x,str) (void) (var = (ty) erealloc_real((void *) var, (size_t)(x), str, #var, __FILE__, __LINE__)) #define efree(p) free(p) -static inline NODE * -force_string(NODE *s) -{ - if ((s->flags & STRCUR) != 0 - && (s->stfmt == -1 || s->stfmt == CONVFMTidx) - ) - return s; - return format_val(CONVFMT, CONVFMTidx, s); -} - -#ifdef GAWKDEBUG -#define unref r_unref -#define force_number str2number -#else /* not GAWKDEBUG */ - -static inline void -unref(NODE *r) -{ - if (r != NULL && --r->valref <= 0) - r_unref(r); -} - -static inline NODE * -force_number(NODE *n) -{ - return (n->flags & NUMCUR) ? n : str2number(n); -} - -#endif /* GAWKDEBUG */ +#define fatal set_loc(__FILE__, __LINE__), r_fatal extern jmp_buf fatal_tag; extern bool fatal_tag_valid; @@ -1800,3 +1738,65 @@ dupnode(NODE *n) return r_dupnode(n); } #endif + +static inline NODE * +force_string(NODE *s) +{ + if ((s->flags & STRCUR) != 0 + && (s->stfmt == -1 || s->stfmt == CONVFMTidx) + ) + return s; + return format_val(CONVFMT, CONVFMTidx, s); +} + +#ifdef GAWKDEBUG +#define unref r_unref +#define force_number str2number +#else /* not GAWKDEBUG */ + +static inline void +unref(NODE *r) +{ + if (r != NULL && --r->valref <= 0) + r_unref(r); +} + +static inline NODE * +force_number(NODE *n) +{ + return (n->flags & NUMCUR) ? n : str2number(n); +} + +#endif /* GAWKDEBUG */ + +static inline void * +emalloc_real(size_t count, const char *where, const char *var, const char *file, int line) +{ + void *ret; + + if (count == 0) + fatal("%s:%d: emalloc called with zero bytes", file, line); + + ret = (void *) malloc(count); + if (ret == NULL) + fatal(_("%s:%d:%s: %s: can't allocate %ld bytes of memory (%s)"), + file, line, where, var, (long) count, strerror(errno)); + + return ret; +} + +static inline void * +erealloc_real(void *ptr, size_t count, const char *where, const char *var, const char *file, int line) +{ + void *ret; + + if (count == 0) + fatal("%s:%d: erealloc called with zero bytes", file, line); + + ret = (void *) realloc(ptr, count); + if (ret == NULL) + fatal(_("%s:%d:%s: %s: can't reallocate %ld bytes of memory (%s)"), + file, line, where, var, (long) count, strerror(errno)); + + return ret; +} -- cgit v1.2.3 From fa9d1a09cfe9e7386746a2c6523b5503d1b4aff9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 12 Dec 2014 06:16:43 +0200 Subject: Improve comment handling in pretty printing. --- awk.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index a932b54d..41181529 100644 --- a/awk.h +++ b/awk.h @@ -530,6 +530,11 @@ typedef struct exp_node { #define adepth sub.nodep.l.ll #define alevel sub.nodep.x.xl +/* Op_comment */ +#define comment_type sub.val.idx +#define EOL_COMMENT 1 +#define FULL_COMMENT 2 + /* --------------------------------lint warning types----------------------------*/ typedef enum lintvals { LINT_illegal, -- cgit v1.2.3 From dcaab6dd8a28be8885ccc508c49b962a61ab09fe Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 20 Dec 2014 19:56:44 +0200 Subject: Start at non-fatal output via PROCINFO. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 41181529..ff3499cd 100644 --- a/awk.h +++ b/awk.h @@ -918,6 +918,7 @@ struct redirect { # define RED_PTY 512 # define RED_SOCKET 1024 # define RED_TCP 2048 +# define RED_NON_FATAL 4096 char *value; FILE *ifp; /* input fp, needed for PIPES_SIMULATED */ IOBUF *iop; -- cgit v1.2.3 From 15a1d8d213380bd99b5dfe7f4cafcd6dedb8f0dc Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sat, 27 Dec 2014 21:20:47 +0200 Subject: Make nonfatal work with stdout & stderr. Update doc more. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index ff3499cd..81a0e91f 100644 --- a/awk.h +++ b/awk.h @@ -1496,6 +1496,7 @@ extern NODE *do_getline(int intovar, IOBUF *iop); extern struct redirect *getredirect(const char *str, int len); extern bool inrec(IOBUF *iop, int *errcode); extern int nextfile(IOBUF **curfile, bool skipping); +extern bool is_non_fatal_std(FILE *fp); /* main.c */ extern int arg_assign(char *arg, bool initing); extern int is_std_var(const char *var); -- cgit v1.2.3 From 9121c3059288f36e004108e02ed4d826b84604e7 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Tue, 6 Jan 2015 14:20:19 -0500 Subject: Fix bug so that extensions can create deferred arrays PROCINFO and ENVIRON properly. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index bb63f65a..5ecc13fa 100644 --- a/awk.h +++ b/awk.h @@ -1318,6 +1318,7 @@ extern NODE *do_asorti(int nargs); extern unsigned long (*hash)(const char *s, size_t len, unsigned long hsize, size_t *code); extern void init_env_array(NODE *env_node); /* awkgram.c */ +extern NODE *variable_create(char *name, NODETYPE type); extern NODE *variable(int location, char *name, NODETYPE type); extern int parse_program(INSTRUCTION **pcode); extern void track_ext_func(const char *name); -- cgit v1.2.3 From f38a8f801496ea91cef7a8507e2919f6586d0694 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Tue, 6 Jan 2015 20:17:35 -0500 Subject: Fix bug in API deferred variable creation and add a test case. --- awk.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 5ecc13fa..f624a876 100644 --- a/awk.h +++ b/awk.h @@ -1318,7 +1318,7 @@ extern NODE *do_asorti(int nargs); extern unsigned long (*hash)(const char *s, size_t len, unsigned long hsize, size_t *code); extern void init_env_array(NODE *env_node); /* awkgram.c */ -extern NODE *variable_create(char *name, NODETYPE type); +extern NODE *variable_create(char *name, NODETYPE type, bool *is_deferred); extern NODE *variable(int location, char *name, NODETYPE type); extern int parse_program(INSTRUCTION **pcode); extern void track_ext_func(const char *name); -- cgit v1.2.3 From 41483acb1969b24e336b11aaf3bfdc1dbdfe33a8 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Thu, 8 Jan 2015 09:20:09 -0500 Subject: Revert changes to API deferred variable creation, since this should be done at lookup time. --- awk.h | 1 - 1 file changed, 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index f624a876..bb63f65a 100644 --- a/awk.h +++ b/awk.h @@ -1318,7 +1318,6 @@ extern NODE *do_asorti(int nargs); extern unsigned long (*hash)(const char *s, size_t len, unsigned long hsize, size_t *code); extern void init_env_array(NODE *env_node); /* awkgram.c */ -extern NODE *variable_create(char *name, NODETYPE type, bool *is_deferred); extern NODE *variable(int location, char *name, NODETYPE type); extern int parse_program(INSTRUCTION **pcode); extern void track_ext_func(const char *name); -- cgit v1.2.3 From f8fecb69346cbcd774a73a49322aeb8ddea73e44 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Thu, 8 Jan 2015 09:41:19 -0500 Subject: When an extension calls sym_lookup on a deferred variable, it should always succeed. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index bb63f65a..eddcb18f 100644 --- a/awk.h +++ b/awk.h @@ -1318,6 +1318,7 @@ extern NODE *do_asorti(int nargs); extern unsigned long (*hash)(const char *s, size_t len, unsigned long hsize, size_t *code); extern void init_env_array(NODE *env_node); /* awkgram.c */ +extern NODE *deferred_create(const char *name); extern NODE *variable(int location, char *name, NODETYPE type); extern int parse_program(INSTRUCTION **pcode); extern void track_ext_func(const char *name); -- cgit v1.2.3 From 0e829ea9a5062cac730f5a8368ab2062c1ef67fd Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 14 Jan 2015 19:51:49 +0200 Subject: Remove deferred variables. --- awk.h | 1 - 1 file changed, 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 3abad6f8..92baa7a7 100644 --- a/awk.h +++ b/awk.h @@ -1322,7 +1322,6 @@ extern void shadow_funcs(void); extern int check_special(const char *name); extern SRCFILE *add_srcfile(enum srctype stype, char *src, SRCFILE *curr, bool *already_included, int *errcode); extern void free_srcfile(SRCFILE *thisfile); -extern void register_deferred_variable(const char *name, NODE *(*load_func)(void)); extern int files_are_same(char *path, SRCFILE *src); extern void valinfo(NODE *n, Func_print print_func, FILE *fp); extern void negate_num(NODE *n); -- cgit v1.2.3 From 2d3f4ffebcb451da84ceb8a4be58bbb23946ee6e Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Mon, 19 Jan 2015 13:56:58 -0500 Subject: Revert "When an extension calls sym_lookup on a deferred variable, it should always succeed." This reverts commit f8fecb69346cbcd774a73a49322aeb8ddea73e44. --- awk.h | 1 - 1 file changed, 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index eddcb18f..bb63f65a 100644 --- a/awk.h +++ b/awk.h @@ -1318,7 +1318,6 @@ extern NODE *do_asorti(int nargs); extern unsigned long (*hash)(const char *s, size_t len, unsigned long hsize, size_t *code); extern void init_env_array(NODE *env_node); /* awkgram.c */ -extern NODE *deferred_create(const char *name); extern NODE *variable(int location, char *name, NODETYPE type); extern int parse_program(INSTRUCTION **pcode); extern void track_ext_func(const char *name); -- cgit v1.2.3 From 1bd1b885c7dd16b5e4ab78c040312f6f7d742784 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 30 Jan 2015 10:06:16 +0200 Subject: Disallow calling a function parameter. Check params are not function names. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 92baa7a7..cdac139a 100644 --- a/awk.h +++ b/awk.h @@ -1607,6 +1607,7 @@ extern void free_context(AWK_CONTEXT *ctxt, bool keep_globals); extern NODE **variable_list(); extern NODE **function_list(bool sort); extern void print_vars(NODE **table, Func_print print_func, FILE *fp); +extern bool check_param_names(void); /* floatcomp.c */ #ifdef HAVE_UINTMAX_T -- cgit v1.2.3 From 871e6f0348f8e6ee82a9ddcfcf8f88f4c818e4ae Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 6 Feb 2015 11:25:10 +0200 Subject: Update copyright dates. --- awk.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index cdac139a..08c6891c 100644 --- a/awk.h +++ b/awk.h @@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991-2014 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-2015 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Programming Language. -- cgit v1.2.3 From 2f9c84e82632cbce017a6d342acb3dede5e59e12 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Sun, 8 Feb 2015 19:45:44 +0200 Subject: Reset non-fatal-io to 31 December, add fixes from Andrew Schorr. --- awk.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 81a0e91f..b1272ade 100644 --- a/awk.h +++ b/awk.h @@ -918,7 +918,6 @@ struct redirect { # define RED_PTY 512 # define RED_SOCKET 1024 # define RED_TCP 2048 -# define RED_NON_FATAL 4096 char *value; FILE *ifp; /* input fp, needed for PIPES_SIMULATED */ IOBUF *iop; @@ -1484,7 +1483,7 @@ extern void register_two_way_processor(awk_two_way_processor_t *processor); extern void set_FNR(void); extern void set_NR(void); -extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg); +extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg, bool failure_fatal); extern NODE *do_close(int nargs); extern int flush_io(void); extern int close_io(bool *stdio_problem); @@ -1497,6 +1496,7 @@ extern struct redirect *getredirect(const char *str, int len); extern bool inrec(IOBUF *iop, int *errcode); extern int nextfile(IOBUF **curfile, bool skipping); extern bool is_non_fatal_std(FILE *fp); +extern bool is_non_fatal_redirect(const char *str); /* main.c */ extern int arg_assign(char *arg, bool initing); extern int is_std_var(const char *var); -- cgit v1.2.3 From 59514868fde1190f719e78d4c4b91bd14a321541 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 20 Mar 2015 10:31:49 +0200 Subject: Start on testing/fixing indirect calls of builtins. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 08c6891c..f2ef3582 100644 --- a/awk.h +++ b/awk.h @@ -1360,6 +1360,7 @@ extern NODE *do_rand(int nargs); extern NODE *do_srand(int nargs); extern NODE *do_match(int nargs); extern NODE *do_sub(int nargs, unsigned int flags); +extern NODE *call_sub_func(const char *name, int nargs); extern NODE *format_tree(const char *, size_t, NODE **, long); extern NODE *do_lshift(int nargs); extern NODE *do_rshift(int nargs); -- cgit v1.2.3 From 080694ae82635e76992158591b39a06af7363da0 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 24 Mar 2015 22:15:31 +0200 Subject: Further progress on indirect calls of builtins. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index f2ef3582..f23977fb 100644 --- a/awk.h +++ b/awk.h @@ -1331,6 +1331,7 @@ extern void install_builtins(void); extern bool is_alpha(int c); extern bool is_alnum(int c); extern bool is_identchar(int c); +extern NODE *make_regnode(int type, NODE *exp); /* builtin.c */ extern double double_to_int(double d); extern NODE *do_exp(int nargs); -- cgit v1.2.3 From 6522e5b623e083565229dc742336219a0dda1344 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 24 Mar 2015 22:58:20 +0200 Subject: General cleanups prepatory to merging. --- awk.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 101e5866..6b9ac10b 100644 --- a/awk.h +++ b/awk.h @@ -1483,7 +1483,9 @@ extern void set_FNR(void); extern void set_NR(void); extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg, bool failure_fatal); -extern struct redirect *redirect_string(const char *redir_exp_str, size_t redir_exp_len, bool not_string_flag, int redirtype, int *errflg, int extfd, bool failure_fatal); +extern struct redirect *redirect_string(const char *redir_exp_str, + size_t redir_exp_len, bool not_string_flag, int redirtype, + int *errflg, int extfd, bool failure_fatal); extern NODE *do_close(int nargs); extern int flush_io(void); extern int close_io(bool *stdio_problem); -- cgit v1.2.3 From 2ee1a928483f4fe4f594aebc5c1f8da1253c28b9 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 31 Mar 2015 06:23:04 +0300 Subject: Further improvements. sub/gsub working. --- awk.h | 1 + 1 file changed, 1 insertion(+) (limited to 'awk.h') diff --git a/awk.h b/awk.h index f23977fb..1205401b 100644 --- a/awk.h +++ b/awk.h @@ -1408,6 +1408,7 @@ extern NODE **r_get_lhs(NODE *n, bool reference); extern STACK_ITEM *grow_stack(void); extern void dump_fcall_stack(FILE *fp); extern int register_exec_hook(Func_pre_exec preh, Func_post_exec posth); +extern NODE **r_get_field(NODE *n, Func_ptr *assign, bool reference); /* ext.c */ extern NODE *do_ext(int nargs); void load_ext(const char *lib_name); /* temporary */ -- cgit v1.2.3 From a47af3141cf4a6b43e20db872e2b45ff9abb071f Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Tue, 31 Mar 2015 22:07:53 +0300 Subject: Get indirect calls working! --- awk.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 1205401b..4ac32e4a 100644 --- a/awk.h +++ b/awk.h @@ -1361,7 +1361,9 @@ extern NODE *do_rand(int nargs); extern NODE *do_srand(int nargs); extern NODE *do_match(int nargs); extern NODE *do_sub(int nargs, unsigned int flags); -extern NODE *call_sub_func(const char *name, int nargs); +extern NODE *call_sub(const char *name, int nargs); +extern NODE *call_match(int nargs); +extern NODE *call_split_func(const char *name, int nargs); extern NODE *format_tree(const char *, size_t, NODE **, long); extern NODE *do_lshift(int nargs); extern NODE *do_rshift(int nargs); -- cgit v1.2.3 From ddc290584b39bab2c1edcec935a31ea12d343246 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 3 Apr 2015 09:08:54 +0300 Subject: Rename "div()" to "intdiv()". --- awk.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'awk.h') diff --git a/awk.h b/awk.h index 384e6f16..6f812e71 100644 --- a/awk.h +++ b/awk.h @@ -1383,7 +1383,7 @@ extern AWKNUM nondec2awknum(char *str, size_t len); extern NODE *do_dcgettext(int nargs); extern NODE *do_dcngettext(int nargs); extern NODE *do_bindtextdomain(int nargs); -extern NODE *do_div(int nargs); +extern NODE *do_intdiv(int nargs); extern int strncasecmpmbs(const unsigned char *, const unsigned char *, size_t); /* eval.c */ @@ -1526,9 +1526,9 @@ extern NODE *do_mpfr_and(int); extern NODE *do_mpfr_atan2(int); extern NODE *do_mpfr_compl(int); extern NODE *do_mpfr_cos(int); -extern NODE *do_mpfr_div(int); extern NODE *do_mpfr_exp(int); extern NODE *do_mpfr_int(int); +extern NODE *do_mpfr_intdiv(int); extern NODE *do_mpfr_log(int); extern NODE *do_mpfr_lshift(int); extern NODE *do_mpfr_or(int); -- cgit v1.2.3