This commit is contained in:
parent
df755c2bd1
commit
3b82e5c00f
@ -2366,15 +2366,19 @@ static ase_awk_nde_t* parse_concat (ase_awk_t* awk, ase_size_t line)
|
|||||||
{
|
{
|
||||||
if (MATCH(awk,TOKEN_PERIOD))
|
if (MATCH(awk,TOKEN_PERIOD))
|
||||||
{
|
{
|
||||||
if ((awk->option & ASE_AWK_EXPLICIT) == 0) break;
|
if (!(awk->option & ASE_AWK_EXPLICIT)) break;
|
||||||
if (get_token(awk) == -1) return ASE_NULL;
|
if (get_token(awk) == -1) return ASE_NULL;
|
||||||
}
|
}
|
||||||
else if (MATCH(awk,TOKEN_LPAREN) ||
|
else if (MATCH(awk,TOKEN_LPAREN) ||
|
||||||
MATCH(awk,TOKEN_DOLLAR) ||
|
MATCH(awk,TOKEN_DOLLAR) ||
|
||||||
|
MATCH(awk,TOKEN_PLUS) ||
|
||||||
|
MATCH(awk,TOKEN_MINUS) ||
|
||||||
|
MATCH(awk,TOKEN_PLUSPLUS) ||
|
||||||
|
MATCH(awk,TOKEN_MINUSMINUS) ||
|
||||||
awk->token.type >= TOKEN_GETLINE)
|
awk->token.type >= TOKEN_GETLINE)
|
||||||
{
|
{
|
||||||
/* TODO: is the check above sufficient? */
|
/* TODO: is the check above sufficient? */
|
||||||
if ((awk->option & ASE_AWK_IMPLICIT) == 0) break;
|
if (!(awk->option & ASE_AWK_IMPLICIT)) break;
|
||||||
}
|
}
|
||||||
else break;
|
else break;
|
||||||
|
|
||||||
@ -2558,6 +2562,16 @@ static ase_awk_nde_t* parse_increment (ase_awk_t* awk, ase_size_t line)
|
|||||||
left = parse_primary (awk, line);
|
left = parse_primary (awk, line);
|
||||||
if (left == ASE_NULL) return ASE_NULL;
|
if (left == ASE_NULL) return ASE_NULL;
|
||||||
|
|
||||||
|
if (awk->option & ASE_AWK_IMPLICIT)
|
||||||
|
{
|
||||||
|
/* concatenation operation by whitepaces are allowed
|
||||||
|
* if this option is set. the ++/-- operator following
|
||||||
|
* the primary should be treated specially.
|
||||||
|
* for example, "abc" ++ 10 => "abc" . ++10
|
||||||
|
*/
|
||||||
|
if (!is_var(left)) return left;
|
||||||
|
}
|
||||||
|
|
||||||
/* check for postfix increment operator */
|
/* check for postfix increment operator */
|
||||||
opcode2 = MATCH(awk,TOKEN_PLUSPLUS)? ASE_AWK_INCOP_PLUS:
|
opcode2 = MATCH(awk,TOKEN_PLUSPLUS)? ASE_AWK_INCOP_PLUS:
|
||||||
MATCH(awk,TOKEN_MINUSMINUS)? ASE_AWK_INCOP_MINUS: -1;
|
MATCH(awk,TOKEN_MINUSMINUS)? ASE_AWK_INCOP_MINUS: -1;
|
||||||
@ -5374,12 +5388,14 @@ static int deparse (ase_awk_t* awk)
|
|||||||
if (ase_awk_putsrcstr (awk, ASE_T(" ")) == -1) EXIT_DEPARSE ();
|
if (ase_awk_putsrcstr (awk, ASE_T(" ")) == -1) EXIT_DEPARSE ();
|
||||||
if (ase_awk_prnpt (awk, nde) == -1) EXIT_DEPARSE ();
|
if (ase_awk_prnpt (awk, nde) == -1) EXIT_DEPARSE ();
|
||||||
|
|
||||||
|
/*
|
||||||
if (awk->option & ASE_AWK_CRLF)
|
if (awk->option & ASE_AWK_CRLF)
|
||||||
{
|
{
|
||||||
if (put_char (awk, ASE_T('\r')) == -1) EXIT_DEPARSE ();
|
if (put_char (awk, ASE_T('\r')) == -1) EXIT_DEPARSE ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (put_char (awk, ASE_T('\n')) == -1) EXIT_DEPARSE ();
|
if (put_char (awk, ASE_T('\n')) == -1) EXIT_DEPARSE ();
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flush_out (awk) == -1) EXIT_DEPARSE ();
|
if (flush_out (awk) == -1) EXIT_DEPARSE ();
|
||||||
|
@ -18,37 +18,37 @@ static const ase_char_t* assop_str[] =
|
|||||||
ASE_T("**=")
|
ASE_T("**=")
|
||||||
};
|
};
|
||||||
|
|
||||||
static const ase_char_t* binop_str[] =
|
static const ase_char_t* binop_str[][2] =
|
||||||
{
|
{
|
||||||
ASE_T("||"),
|
{ ASE_T("||"), ASE_T("||") },
|
||||||
ASE_T("&&"),
|
{ ASE_T("&&"), ASE_T("&&") },
|
||||||
ASE_T("in"),
|
{ ASE_T("in"), ASE_T("in") },
|
||||||
|
|
||||||
ASE_T("|"),
|
{ ASE_T("|"), ASE_T("|") },
|
||||||
ASE_T("^"),
|
{ ASE_T("^"), ASE_T("^") },
|
||||||
ASE_T("&"),
|
{ ASE_T("&"), ASE_T("&") },
|
||||||
|
|
||||||
ASE_T("=="),
|
{ ASE_T("=="), ASE_T("==") },
|
||||||
ASE_T("!="),
|
{ ASE_T("!="), ASE_T("!=") },
|
||||||
ASE_T(">"),
|
{ ASE_T(">"), ASE_T(">") },
|
||||||
ASE_T(">="),
|
{ ASE_T(">="), ASE_T(">=") },
|
||||||
ASE_T("<"),
|
{ ASE_T("<"), ASE_T("<") },
|
||||||
ASE_T("<="),
|
{ ASE_T("<="), ASE_T("<=") },
|
||||||
|
|
||||||
ASE_T("<<"),
|
{ ASE_T("<<"), ASE_T("<<") },
|
||||||
ASE_T(">>"),
|
{ ASE_T(">>"), ASE_T(">>") },
|
||||||
|
|
||||||
ASE_T("+"),
|
{ ASE_T("+"), ASE_T("+") },
|
||||||
ASE_T("-"),
|
{ ASE_T("-"), ASE_T("-") },
|
||||||
ASE_T("*"),
|
{ ASE_T("*"), ASE_T("*") },
|
||||||
ASE_T("/"),
|
{ ASE_T("/"), ASE_T("/") },
|
||||||
ASE_T("//"),
|
{ ASE_T("//"), ASE_T("//") },
|
||||||
ASE_T("%"),
|
{ ASE_T("%"), ASE_T("%") },
|
||||||
ASE_T("**"),
|
{ ASE_T("**"), ASE_T("**") },
|
||||||
|
|
||||||
ASE_T(" "),
|
{ ASE_T(" "), ASE_T(".") },
|
||||||
ASE_T("~"),
|
{ ASE_T("~"), ASE_T("~") },
|
||||||
ASE_T("!~")
|
{ ASE_T("!~"), ASE_T("!~") }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const ase_char_t* unrop_str[] =
|
static const ase_char_t* unrop_str[] =
|
||||||
@ -167,7 +167,7 @@ static int print_expression (ase_awk_t* awk, ase_awk_nde_t* nde)
|
|||||||
ASE_ASSERT (px->left->next == ASE_NULL);
|
ASE_ASSERT (px->left->next == ASE_NULL);
|
||||||
|
|
||||||
PUT_SRCSTR (awk, ASE_T(" "));
|
PUT_SRCSTR (awk, ASE_T(" "));
|
||||||
PUT_SRCSTR (awk, binop_str[px->opcode]);
|
PUT_SRCSTR (awk, binop_str[px->opcode][(awk->option & ASE_AWK_IMPLICIT)? 0: 1]);
|
||||||
PUT_SRCSTR (awk, ASE_T(" "));
|
PUT_SRCSTR (awk, ASE_T(" "));
|
||||||
|
|
||||||
if (px->right->type == ASE_AWK_NDE_ASS)
|
if (px->right->type == ASE_AWK_NDE_ASS)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
OPTION=-explicit
|
OPTION="-explicit -implicit"
|
||||||
|
|
||||||
run_script_for_init()
|
run_script_for_init()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user