changed the unary bitwise negation operator to a single tilde which overlaps with the regex match operator
This commit is contained in:
parent
916da0fd59
commit
7980e12999
@ -1,13 +1,9 @@
|
|||||||
# Hawk
|
# Hawk
|
||||||
|
|
||||||
# Table of Contents
|
|
||||||
- [Language](#language)
|
- [Language](#language)
|
||||||
|
- [Basic Modules](#basic-modules)
|
||||||
- [Embedding Guide](#embedding-guide)
|
- [Embedding Guide](#embedding-guide)
|
||||||
|
|
||||||
#### TODO: unary bitwise not
|
|
||||||
#### TODO: fix -F or --field-separator to hawk.
|
|
||||||
|
|
||||||
|
|
||||||
## Language <a name="language"></a>
|
## Language <a name="language"></a>
|
||||||
|
|
||||||
Hawk implements most of the AWK programming language elements with extensions.
|
Hawk implements most of the AWK programming language elements with extensions.
|
||||||
@ -63,4 +59,12 @@ BEGIN { x[3]=99; q(x); for (i in x) print i, x[i]; }'
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
## Basic Modules <a name="basic-modules"></a>
|
||||||
|
|
||||||
|
### sys
|
||||||
|
|
||||||
|
### ffi
|
||||||
|
|
||||||
|
### mysql
|
||||||
|
|
||||||
## Embedding Guide <a name="embedding-guide"></a>
|
## Embedding Guide <a name="embedding-guide"></a>
|
||||||
|
@ -97,7 +97,7 @@ enum tok_t
|
|||||||
TOK_LT,
|
TOK_LT,
|
||||||
TOK_GE,
|
TOK_GE,
|
||||||
TOK_GT,
|
TOK_GT,
|
||||||
TOK_MA, /* ~ - match */
|
TOK_TILDE, /* ~ - match or bitwise negation */
|
||||||
TOK_NM, /* !~ - not match */
|
TOK_NM, /* !~ - not match */
|
||||||
TOK_LNOT, /* ! - logical negation */
|
TOK_LNOT, /* ! - logical negation */
|
||||||
TOK_PLUS,
|
TOK_PLUS,
|
||||||
@ -113,7 +113,6 @@ enum tok_t
|
|||||||
TOK_BOR,
|
TOK_BOR,
|
||||||
TOK_BXOR, /* ^^ - bitwise-xor */
|
TOK_BXOR, /* ^^ - bitwise-xor */
|
||||||
TOK_BAND,
|
TOK_BAND,
|
||||||
TOK_BNOT, /* ~~ - used for unary bitwise-not */
|
|
||||||
TOK_RS,
|
TOK_RS,
|
||||||
TOK_LS,
|
TOK_LS,
|
||||||
TOK_IN,
|
TOK_IN,
|
||||||
@ -4058,7 +4057,7 @@ static hawk_nde_t* parse_in (hawk_t* awk, const hawk_loc_t* xloc)
|
|||||||
if (get_token(awk) <= -1) goto oops;
|
if (get_token(awk) <= -1) goto oops;
|
||||||
|
|
||||||
rloc = awk->tok.loc;
|
rloc = awk->tok.loc;
|
||||||
right = parse_regex_match (awk, &rloc);
|
right = parse_regex_match(awk, &rloc);
|
||||||
if (right == HAWK_NULL) goto oops;
|
if (right == HAWK_NULL) goto oops;
|
||||||
|
|
||||||
if (!is_plain_var(right))
|
if (!is_plain_var(right))
|
||||||
@ -4088,7 +4087,7 @@ static hawk_nde_t* parse_regex_match (hawk_t* awk, const hawk_loc_t* xloc)
|
|||||||
{
|
{
|
||||||
static binmap_t map[] =
|
static binmap_t map[] =
|
||||||
{
|
{
|
||||||
{ TOK_MA, HAWK_BINOP_MA },
|
{ TOK_TILDE, HAWK_BINOP_MA },
|
||||||
{ TOK_NM, HAWK_BINOP_NM },
|
{ TOK_NM, HAWK_BINOP_NM },
|
||||||
{ TOK_EOF, 0 },
|
{ TOK_EOF, 0 },
|
||||||
};
|
};
|
||||||
@ -4191,7 +4190,7 @@ static hawk_nde_t* parse_concat (hawk_t* awk, const hawk_loc_t* xloc)
|
|||||||
if (MATCH(awk,TOK_LPAREN) || MATCH(awk,TOK_DOLLAR) ||
|
if (MATCH(awk,TOK_LPAREN) || MATCH(awk,TOK_DOLLAR) ||
|
||||||
/* unary operators */
|
/* unary operators */
|
||||||
MATCH(awk,TOK_PLUS) || MATCH(awk,TOK_MINUS) ||
|
MATCH(awk,TOK_PLUS) || MATCH(awk,TOK_MINUS) ||
|
||||||
MATCH(awk,TOK_LNOT) || MATCH(awk,TOK_BNOT) ||
|
MATCH(awk,TOK_LNOT) ||/* MATCH(awk,TOK_TILDE) ||*/
|
||||||
/* increment operators */
|
/* increment operators */
|
||||||
MATCH(awk,TOK_PLUSPLUS) || MATCH(awk,TOK_MINUSMINUS) ||
|
MATCH(awk,TOK_PLUSPLUS) || MATCH(awk,TOK_MINUSMINUS) ||
|
||||||
((awk->opt.trait & HAWK_TOLERANT) &&
|
((awk->opt.trait & HAWK_TOLERANT) &&
|
||||||
@ -4261,7 +4260,7 @@ static hawk_nde_t* parse_unary (hawk_t* awk, const hawk_loc_t* xloc)
|
|||||||
opcode = (MATCH(awk,TOK_PLUS))? HAWK_UNROP_PLUS:
|
opcode = (MATCH(awk,TOK_PLUS))? HAWK_UNROP_PLUS:
|
||||||
(MATCH(awk,TOK_MINUS))? HAWK_UNROP_MINUS:
|
(MATCH(awk,TOK_MINUS))? HAWK_UNROP_MINUS:
|
||||||
(MATCH(awk,TOK_LNOT))? HAWK_UNROP_LNOT:
|
(MATCH(awk,TOK_LNOT))? HAWK_UNROP_LNOT:
|
||||||
(MATCH(awk,TOK_BNOT))? HAWK_UNROP_BNOT: -1;
|
(MATCH(awk,TOK_TILDE))? HAWK_UNROP_BNOT: -1;
|
||||||
|
|
||||||
/*if (opcode <= -1) return parse_increment (awk);*/
|
/*if (opcode <= -1) return parse_increment (awk);*/
|
||||||
if (opcode <= -1) return parse_exponent (awk, xloc);
|
if (opcode <= -1) return parse_exponent (awk, xloc);
|
||||||
@ -4408,7 +4407,7 @@ static hawk_nde_t* parse_unary_exp (hawk_t* awk, const hawk_loc_t* xloc)
|
|||||||
opcode = (MATCH(awk,TOK_PLUS))? HAWK_UNROP_PLUS:
|
opcode = (MATCH(awk,TOK_PLUS))? HAWK_UNROP_PLUS:
|
||||||
(MATCH(awk,TOK_MINUS))? HAWK_UNROP_MINUS:
|
(MATCH(awk,TOK_MINUS))? HAWK_UNROP_MINUS:
|
||||||
(MATCH(awk,TOK_LNOT))? HAWK_UNROP_LNOT:
|
(MATCH(awk,TOK_LNOT))? HAWK_UNROP_LNOT:
|
||||||
(MATCH(awk,TOK_BNOT))? HAWK_UNROP_BNOT: -1;
|
(MATCH(awk,TOK_TILDE))? HAWK_UNROP_BNOT: -1; /* ~ in the unary context is a bitwise-not operator */
|
||||||
|
|
||||||
if (opcode <= -1) return parse_increment (awk, xloc);
|
if (opcode <= -1) return parse_increment (awk, xloc);
|
||||||
|
|
||||||
@ -6416,8 +6415,7 @@ static int get_symbols (hawk_t* awk, hawk_ooci_t c, hawk_tok_t* tok)
|
|||||||
{ HAWK_T("%%"), 2, TOK_CONCAT, 0 },
|
{ HAWK_T("%%"), 2, TOK_CONCAT, 0 },
|
||||||
{ HAWK_T("%="), 2, TOK_MOD_ASSN, 0 },
|
{ HAWK_T("%="), 2, TOK_MOD_ASSN, 0 },
|
||||||
{ HAWK_T("%"), 1, TOK_MOD, 0 },
|
{ HAWK_T("%"), 1, TOK_MOD, 0 },
|
||||||
{ HAWK_T("~~"), 2, TOK_BNOT, 0 },
|
{ HAWK_T("~"), 1, TOK_TILDE, 0 },
|
||||||
{ HAWK_T("~"), 1, TOK_MA, 0 },
|
|
||||||
{ HAWK_T("("), 1, TOK_LPAREN, 0 },
|
{ HAWK_T("("), 1, TOK_LPAREN, 0 },
|
||||||
{ HAWK_T(")"), 1, TOK_RPAREN, 0 },
|
{ HAWK_T(")"), 1, TOK_RPAREN, 0 },
|
||||||
{ HAWK_T("{"), 1, TOK_LBRACE, 0 },
|
{ HAWK_T("{"), 1, TOK_LBRACE, 0 },
|
||||||
|
@ -85,8 +85,7 @@ static const hawk_ooch_t* unrop_str[] =
|
|||||||
HAWK_T("+"),
|
HAWK_T("+"),
|
||||||
HAWK_T("-"),
|
HAWK_T("-"),
|
||||||
HAWK_T("!"),
|
HAWK_T("!"),
|
||||||
HAWK_T("~~"),
|
HAWK_T("~")
|
||||||
HAWK_T("`")
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const hawk_ooch_t* incop_str[] =
|
static const hawk_ooch_t* incop_str[] =
|
||||||
|
@ -64,7 +64,7 @@ function handle_bridge_eof (&brtab, fd, mx)
|
|||||||
|
|
||||||
pfd = brtab[fd];
|
pfd = brtab[fd];
|
||||||
|
|
||||||
evmask = brtab[fd,"evmask"] & ~~sys::MUX_EVT_IN;
|
evmask = brtab[fd,"evmask"] & ~sys::MUX_EVT_IN;
|
||||||
if (sys::modinmux(mx, fd, evmask) <= -1) return -1;
|
if (sys::modinmux(mx, fd, evmask) <= -1) return -1;
|
||||||
brtab[fd,"evmask"] = evmask;
|
brtab[fd,"evmask"] = evmask;
|
||||||
brtab[fd,"eof"] = 1;
|
brtab[fd,"eof"] = 1;
|
||||||
@ -100,7 +100,7 @@ function bridge_traffic (&brtab, fd, mx)
|
|||||||
x = sys::write(pfd, buf, pos);
|
x = sys::write(pfd, buf, pos);
|
||||||
if (x == sys::RC_EAGAIN)
|
if (x == sys::RC_EAGAIN)
|
||||||
{
|
{
|
||||||
evmask = brtab[fd,"evmask"] & ~~sys::MUX_EVT_IN;
|
evmask = brtab[fd,"evmask"] & ~sys::MUX_EVT_IN;
|
||||||
if (sys::modinmux(mx, fd, evmask) <= -1) return -1;
|
if (sys::modinmux(mx, fd, evmask) <= -1) return -1;
|
||||||
brtab[fd,"evmask"] = evmask;
|
brtab[fd,"evmask"] = evmask;
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ function bridge_pendind_data (&brtab, fd, mx)
|
|||||||
## sent all pending data.
|
## sent all pending data.
|
||||||
delete brtab[fd,"pending"];
|
delete brtab[fd,"pending"];
|
||||||
|
|
||||||
evmask = brtab[fd,"evmask"] & ~~sys::MUX_EVT_OUT;
|
evmask = brtab[fd,"evmask"] & ~sys::MUX_EVT_OUT;
|
||||||
if (sys::modinmux(mx, fd, evmask) <= -1) return -1;
|
if (sys::modinmux(mx, fd, evmask) <= -1) return -1;
|
||||||
brtab[fd,"evmask"] = evmask;
|
brtab[fd,"evmask"] = evmask;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user