added @pragma striprecspc on/off
This commit is contained in:
parent
b72dc3aaad
commit
c5799690b8
@ -379,7 +379,7 @@ void hawk_clear (hawk_t* awk)
|
|||||||
awk->parse.depth.loop = 0;
|
awk->parse.depth.loop = 0;
|
||||||
awk->parse.depth.expr = 0;
|
awk->parse.depth.expr = 0;
|
||||||
awk->parse.depth.incl = 0;
|
awk->parse.depth.incl = 0;
|
||||||
awk->parse.pragma.trait = (awk->opt.trait & HAWK_IMPLICIT); /* implicit on if you didn't mask it off in awk->opt.trait with hawk_setopt */
|
awk->parse.pragma.trait = (awk->opt.trait & (HAWK_IMPLICIT | HAWK_STRIPRECSPC)); /* implicit on if you didn't mask it off in awk->opt.trait with hawk_setopt */
|
||||||
awk->parse.pragma.rtx_stack_limit = 0;
|
awk->parse.pragma.rtx_stack_limit = 0;
|
||||||
awk->parse.pragma.entry[0] = '\0';
|
awk->parse.pragma.entry[0] = '\0';
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ hawk_ooch_t* hawk_rtx_strxntokbyrex (
|
|||||||
cursub.ptr++;
|
cursub.ptr++;
|
||||||
cursub.len--;
|
cursub.len--;
|
||||||
}
|
}
|
||||||
else if (rtx->gbl.striprecspc > 0 || (rtx->gbl.striprecspc < 0 && (rtx->awk->opt.trait & HAWK_STRIPRECSPC)))
|
else if (rtx->gbl.striprecspc > 0 || (rtx->gbl.striprecspc < 0 && (rtx->awk->parse.pragma.trait & HAWK_STRIPRECSPC)))
|
||||||
{
|
{
|
||||||
/* match at the beginning of the input string */
|
/* match at the beginning of the input string */
|
||||||
if (match.ptr == substr)
|
if (match.ptr == substr)
|
||||||
@ -329,7 +329,7 @@ exit_loop:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* the match is all spaces */
|
/* the match is all spaces */
|
||||||
if (rtx->gbl.striprecspc > 0 || (rtx->gbl.striprecspc < 0 && (rtx->awk->opt.trait & HAWK_STRIPRECSPC)))
|
if (rtx->gbl.striprecspc > 0 || (rtx->gbl.striprecspc < 0 && (rtx->awk->parse.pragma.trait & HAWK_STRIPRECSPC)))
|
||||||
{
|
{
|
||||||
/* if the match reached the last character in the input string,
|
/* if the match reached the last character in the input string,
|
||||||
* it returns HAWK_NULL to terminate tokenization. */
|
* it returns HAWK_NULL to terminate tokenization. */
|
||||||
|
@ -870,7 +870,7 @@ static int begin_include (hawk_t* awk, int once)
|
|||||||
arg->pragma_trait = awk->parse.pragma.trait;
|
arg->pragma_trait = awk->parse.pragma.trait;
|
||||||
/* but don't change awk->parse.pragma.trait. it means the included file inherits
|
/* but don't change awk->parse.pragma.trait. it means the included file inherits
|
||||||
* the existing progma values.
|
* the existing progma values.
|
||||||
awk->parse.pragma.trait = (awk->opt.trait & HAWK_IMPLICIT);
|
awk->parse.pragma.trait = (awk->opt.trait & (HAWK_IMPLICIT | HAWK_STRIPRECSPC));
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* i update the current pointer after opening is successful */
|
/* i update the current pointer after opening is successful */
|
||||||
@ -983,7 +983,34 @@ static int parse_progunit (hawk_t* awk)
|
|||||||
name.len = HAWK_OOECS_LEN(awk->tok.name);
|
name.len = HAWK_OOECS_LEN(awk->tok.name);
|
||||||
name.ptr = HAWK_OOECS_PTR(awk->tok.name);
|
name.ptr = HAWK_OOECS_PTR(awk->tok.name);
|
||||||
|
|
||||||
if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("implicit")) == 0)
|
if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("entry")) == 0)
|
||||||
|
{
|
||||||
|
if (get_token(awk) <= -1) return -1;
|
||||||
|
if (!MATCH(awk, TOK_IDENT))
|
||||||
|
{
|
||||||
|
hawk_seterrfmt (awk, &awk->ptok.loc, HAWK_EIDENT, HAWK_T("function name expected for 'entry'"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HAWK_OOECS_LEN(awk->tok.name) >= HAWK_COUNTOF(awk->parse.pragma.entry))
|
||||||
|
{
|
||||||
|
hawk_seterrfmt (awk, &awk->tok.loc, HAWK_EFUNNAM, HAWK_T("entry function name too long"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (awk->sio.inp == &awk->sio.arg)
|
||||||
|
{
|
||||||
|
/* only the top level source */
|
||||||
|
if (awk->parse.pragma.entry[0] != '\0')
|
||||||
|
{
|
||||||
|
hawk_seterrfmt (awk, &awk->tok.loc, HAWK_EEXIST, HAWK_T("@pragma entry already set"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hawk_copy_oochars_to_oocstr (awk->parse.pragma.entry, HAWK_COUNTOF(awk->parse.pragma.entry), HAWK_OOECS_PTR(awk->tok.name), HAWK_OOECS_LEN(awk->tok.name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("implicit")) == 0)
|
||||||
{
|
{
|
||||||
/* @pragma implicit on
|
/* @pragma implicit on
|
||||||
* @pragma implicit off */
|
* @pragma implicit off */
|
||||||
@ -1029,31 +1056,46 @@ static int parse_progunit (hawk_t* awk)
|
|||||||
if (sl > awk->parse.pragma.rtx_stack_limit) awk->parse.pragma.rtx_stack_limit = sl;
|
if (sl > awk->parse.pragma.rtx_stack_limit) awk->parse.pragma.rtx_stack_limit = sl;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("entry")) == 0)
|
else if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("striprecspc")) == 0)
|
||||||
{
|
{
|
||||||
|
/* @pragma striprecspc on
|
||||||
|
* @pragma striprecspc off
|
||||||
|
*
|
||||||
|
* Take note the global STRIPRECSPC is available for context based change.
|
||||||
|
* STRIPRECSPC takes precedence over this pragma.
|
||||||
|
*/
|
||||||
|
int is_on;
|
||||||
|
|
||||||
if (get_token(awk) <= -1) return -1;
|
if (get_token(awk) <= -1) return -1;
|
||||||
if (!MATCH(awk, TOK_IDENT))
|
if (!MATCH(awk, TOK_IDENT))
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (awk, &awk->ptok.loc, HAWK_EIDENT, HAWK_T("function name expected for 'entry'"));
|
error_ident_on_off_expected_for_striprecspc:
|
||||||
|
hawk_seterrfmt (awk, &awk->ptok.loc, HAWK_EIDENT, HAWK_T("identifier 'on' or 'off' expected for 'striprecspc'"));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HAWK_OOECS_LEN(awk->tok.name) >= HAWK_COUNTOF(awk->parse.pragma.entry))
|
name.len = HAWK_OOECS_LEN(awk->tok.name);
|
||||||
|
name.ptr = HAWK_OOECS_PTR(awk->tok.name);
|
||||||
|
if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("on")) == 0)
|
||||||
{
|
{
|
||||||
hawk_seterrfmt (awk, &awk->tok.loc, HAWK_EFUNNAM, HAWK_T("entry function name too long"));
|
is_on = 1;
|
||||||
return -1;
|
}
|
||||||
|
else if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("off")) == 0)
|
||||||
|
{
|
||||||
|
is_on = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
goto error_ident_on_off_expected_for_striprecspc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (awk->sio.inp == &awk->sio.arg)
|
if (awk->sio.inp == &awk->sio.arg)
|
||||||
{
|
{
|
||||||
/* only the top level source */
|
/* only the top level source. ignore striprecspc pragma in other levels */
|
||||||
if (awk->parse.pragma.entry[0] != '\0')
|
if (is_on)
|
||||||
{
|
awk->parse.pragma.trait |= HAWK_STRIPRECSPC;
|
||||||
hawk_seterrfmt (awk, &awk->tok.loc, HAWK_EEXIST, HAWK_T("@pragma entry already set"));
|
else
|
||||||
return -1;
|
awk->parse.pragma.trait &= ~HAWK_STRIPRECSPC;
|
||||||
}
|
|
||||||
|
|
||||||
hawk_copy_oochars_to_oocstr (awk->parse.pragma.entry, HAWK_COUNTOF(awk->parse.pragma.entry), HAWK_OOECS_PTR(awk->tok.name), HAWK_OOECS_LEN(awk->tok.name));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user