aboutsummaryrefslogtreecommitdiffstats
path: root/awk.h
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2015-06-19 12:42:37 +0300
committerArnold D. Robbins <arnold@skeeve.com>2015-06-19 12:42:37 +0300
commitec58524cb5a671c18c4af1b893e599eb04c7760a (patch)
tree1d1c3d298ec82caa03c0cf5caeb0dd14b08ce247 /awk.h
parent76e1f5bfee032dbcb5c19b3e4e92f96aa05731c3 (diff)
parentf7cd8a03c09a00c4cb520f881bbe838cf76e718f (diff)
downloadegawk-ec58524cb5a671c18c4af1b893e599eb04c7760a.tar.gz
egawk-ec58524cb5a671c18c4af1b893e599eb04c7760a.tar.bz2
egawk-ec58524cb5a671c18c4af1b893e599eb04c7760a.zip
Merge branch 'master' into feature/cmake
Diffstat (limited to 'awk.h')
-rw-r--r--awk.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/awk.h b/awk.h
index b81a99b9..5acd33d8 100644
--- a/awk.h
+++ b/awk.h
@@ -277,6 +277,7 @@ typedef enum nodevals {
Node_val, /* node is a value - type in flags */
Node_regex, /* a regexp, text, compiled, flags, etc */
Node_dynregex, /* a dynamic regexp */
+ Node_typedregex, /* like Node_regex, but is a real type */
/* symbol table values */
Node_var, /* scalar variable, lnode is value */
@@ -1384,6 +1385,7 @@ extern NODE *do_dcgettext(int nargs);
extern NODE *do_dcngettext(int nargs);
extern NODE *do_bindtextdomain(int nargs);
extern NODE *do_intdiv(int nargs);
+extern NODE *do_typeof(int nargs);
extern int strncasecmpmbs(const unsigned char *,
const unsigned char *, size_t);
/* eval.c */
@@ -1763,6 +1765,9 @@ dupnode(NODE *n)
static inline NODE *
force_string(NODE *s)
{
+ if (s->type == Node_typedregex)
+ return s->re_exp;
+
if ((s->flags & STRCUR) != 0
&& (s->stfmt == -1 || s->stfmt == CONVFMTidx)
)
@@ -1785,6 +1790,9 @@ unref(NODE *r)
static inline NODE *
force_number(NODE *n)
{
+ if (n->type == Node_typedregex)
+ return Nnull_string;
+
return (n->flags & NUMCUR) != 0 ? n : str2number(n);
}