added @pragma stripstrspc on/off
added a new global variable STRIPSTRSPC
This commit is contained in:
parent
c8e805b159
commit
fd56a19a79
@ -1795,8 +1795,8 @@ int Hawk::call (const hawk_uch_t* name, Value* ret, const Value* args, hawk_oow_
|
||||
|
||||
int Hawk::exec (Value* ret, const Value* args, hawk_oow_t nargs)
|
||||
{
|
||||
return (this->runctx.rtx->awk->parse.pragma.entry[0] != '\0')?
|
||||
this->call(this->runctx.rtx->awk->parse.pragma.entry, ret, args, nargs): this->loop(ret);
|
||||
return (this->runctx.rtx->hawk->parse.pragma.entry[0] != '\0')?
|
||||
this->call(this->runctx.rtx->hawk->parse.pragma.entry, ret, args, nargs): this->loop(ret);
|
||||
}
|
||||
|
||||
void Hawk::halt ()
|
||||
|
@ -1110,12 +1110,12 @@ static int __substitute (hawk_rtx_t* rtx, hawk_int_t max_count)
|
||||
else
|
||||
{
|
||||
s0.ptr = hawk_rtx_valtooocstrdup(rtx, a0, &s0.len);
|
||||
if (s0.ptr == HAWK_NULL) goto oops;
|
||||
if (HAWK_UNLIKELY(!s0.ptr)) goto oops;
|
||||
s0_free = (hawk_ooch_t*)s0.ptr;
|
||||
}
|
||||
|
||||
s1.ptr = hawk_rtx_getvaloocstr(rtx, a1, &s1.len);
|
||||
if (s1.ptr == HAWK_NULL) goto oops;
|
||||
if (HAWK_UNLIKELY(!s1.ptr)) goto oops;
|
||||
|
||||
if (a2 == HAWK_NULL)
|
||||
{
|
||||
@ -1126,7 +1126,7 @@ static int __substitute (hawk_rtx_t* rtx, hawk_int_t max_count)
|
||||
else
|
||||
{
|
||||
s2.ptr = hawk_rtx_valtooocstrdup(rtx, a2, &s2.len);
|
||||
if (s2.ptr == HAWK_NULL) goto oops;
|
||||
if (HAWK_UNLIKELY(!s2.ptr)) goto oops;
|
||||
s2_free = (hawk_ooch_t*)s2.ptr;
|
||||
}
|
||||
|
||||
@ -1140,7 +1140,7 @@ static int __substitute (hawk_rtx_t* rtx, hawk_int_t max_count)
|
||||
x = rtx->gbl.ignorecase?
|
||||
hawk_rtx_buildrex(rtx, s0.ptr, s0.len, HAWK_NULL, &rex):
|
||||
hawk_rtx_buildrex(rtx, s0.ptr, s0.len, &rex, HAWK_NULL);
|
||||
if (x <= -1) goto oops;
|
||||
if (HAWK_UNLIKELY(x <= -1)) goto oops;
|
||||
|
||||
rex_free = rex;
|
||||
}
|
||||
@ -1163,7 +1163,7 @@ static int __substitute (hawk_rtx_t* rtx, hawk_int_t max_count)
|
||||
if (max_count == 0 || sub_count < max_count)
|
||||
{
|
||||
n = hawk_rtx_matchrexwithoocs(rtx, rex, &s2, &cur, &mat, HAWK_NULL);
|
||||
if (n <= -1) goto oops;
|
||||
if (HAWK_UNLIKELY(n <= -1)) goto oops;
|
||||
}
|
||||
else n = 0;
|
||||
|
||||
@ -1199,7 +1199,7 @@ static int __substitute (hawk_rtx_t* rtx, hawk_int_t max_count)
|
||||
m = hawk_ooecs_ccat(&new, s1.ptr[i]);
|
||||
}
|
||||
|
||||
if (m == (hawk_oow_t)-1) goto oops;
|
||||
if (HAWK_UNLIKELY(m == (hawk_oow_t)-1)) goto oops;
|
||||
}
|
||||
|
||||
sub_count++;
|
||||
@ -1212,10 +1212,11 @@ static int __substitute (hawk_rtx_t* rtx, hawk_int_t max_count)
|
||||
{
|
||||
skip_one_char:
|
||||
/* special treatment is needed if match length is 0 */
|
||||
|
||||
if (cur.ptr < s2_end) /* $ matches at s2_end. with this check, '\0' or whatever character after the end may get appended redundantly */
|
||||
{
|
||||
m = hawk_ooecs_ncat(&new, cur.ptr, 1);
|
||||
if (m == (hawk_oow_t)-1) goto oops;
|
||||
|
||||
if (HAWK_UNLIKELY(m == (hawk_oow_t)-1)) goto oops;
|
||||
}
|
||||
cur.ptr++; cur.len--;
|
||||
}
|
||||
}
|
||||
|
@ -349,7 +349,7 @@ struct hawk_chain_t
|
||||
#define RTX_STACK_LCL(rtx,n) RTX_STACK_AT(rtx,3+(hawk_oow_t)RTX_STACK_NARGS(rtx)+1+(n))
|
||||
#define RTX_STACK_RETVAL(rtx) RTX_STACK_AT(rtx,2)
|
||||
#define RTX_STACK_GBL(rtx,n) ((rtx)->stack[(n)])
|
||||
#define RTX_STACK_RETVAL_GBL(rtx) ((rtx)->stack[(rtx)->awk->tree.ngbls+2])
|
||||
#define RTX_STACK_RETVAL_GBL(rtx) ((rtx)->stack[(rtx)->hawk->tree.ngbls+2])
|
||||
|
||||
struct hawk_rtx_t
|
||||
{
|
||||
@ -414,6 +414,7 @@ struct hawk_rtx_t
|
||||
void* fs[2];
|
||||
int ignorecase;
|
||||
int striprecspc;
|
||||
int stripstrspc;
|
||||
|
||||
hawk_int_t nr;
|
||||
hawk_int_t fnr;
|
||||
@ -493,6 +494,10 @@ struct hawk_mod_data_t
|
||||
(refval)->adr = (_adr); \
|
||||
} while(0);
|
||||
|
||||
|
||||
#define HAWK_RTX_IS_STRIPRECSPC_ON(rtx) ((rtx)->gbl.striprecspc > 0 || ((rtx)->gbl.striprecspc < 0 && ((rtx)->hawk->parse.pragma.trait & HAWK_STRIPRECSPC)))
|
||||
#define HAWK_RTX_IS_STRIPSTRSPC_ON(rtx) ((rtx)->gbl.stripstrspc > 0 || ((rtx)->gbl.stripstrspc < 0 && ((rtx)->hawk->parse.pragma.trait & HAWK_STRIPSTRSPC)))
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -379,7 +379,7 @@ void hawk_clear (hawk_t* awk)
|
||||
awk->parse.depth.loop = 0;
|
||||
awk->parse.depth.expr = 0;
|
||||
awk->parse.depth.incl = 0;
|
||||
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.trait = (awk->opt.trait & (HAWK_IMPLICIT | HAWK_STRIPRECSPC | HAWK_STRIPSTRSPC)); /* 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.entry[0] = '\0';
|
||||
|
||||
|
@ -52,18 +52,18 @@
|
||||
* AWK script as shown below:
|
||||
*
|
||||
* \code
|
||||
* hawk_t* awk;
|
||||
* hawk_t* hawk;
|
||||
* hawk_rtx_t* rtx;
|
||||
* hawk_sio_cbs_t sio; // need to initialize it with callback functions
|
||||
* hawk_rio_cbs_t rio; // need to initialize it with callback functions
|
||||
*
|
||||
* awk = hawk_open(mmgr, 0, prm); // create an interpreter
|
||||
* hawk_parse (awk, &sio); // parse a script
|
||||
* rtx = hawk_rtx_open (awk, 0, &rio); // create a runtime context
|
||||
* hawk_parse (hawk, &sio); // parse a script
|
||||
* rtx = hawk_rtx_open(hawk, 0, &rio); // create a runtime context
|
||||
* retv = hawk_rtx_loop(rtx); // run a standard AWK loop
|
||||
* if (retv) hawk_rtx_refdownval (rtx, retv); // free return value
|
||||
* hawk_rtx_close (rtx); // destroy the runtime context
|
||||
* hawk_close (awk); // destroy the interpreter
|
||||
* hawk_close (hawk); // destroy the interpreter
|
||||
* \endcode
|
||||
*
|
||||
* It provides an interface to change the conventional behavior of the
|
||||
@ -115,7 +115,7 @@ typedef struct hawk_rtx_t hawk_rtx_t;
|
||||
hawk_oow_t _instsize; \
|
||||
hawk_gem_t _gem; \
|
||||
int id; \
|
||||
hawk_t* awk
|
||||
hawk_t* hawk
|
||||
|
||||
typedef struct hawk_rtx_alt_t hawk_rtx_alt_t;
|
||||
struct hawk_rtx_alt_t
|
||||
@ -1316,6 +1316,7 @@ enum hawk_gbl_id_t
|
||||
HAWK_GBL_RSTART,
|
||||
HAWK_GBL_SCRIPTNAME,
|
||||
HAWK_GBL_STRIPRECSPC,
|
||||
HAWK_GBL_STRIPSTRSPC,
|
||||
HAWK_GBL_SUBSEP,
|
||||
|
||||
/* these are not not the actual IDs and are used internally only
|
||||
@ -2054,14 +2055,14 @@ HAWK_EXPORT void hawk_rtx_close (
|
||||
);
|
||||
|
||||
#if defined(HAWK_HAVE_INLINE)
|
||||
static HAWK_INLINE hawk_t* hawk_rtx_gethawk (hawk_rtx_t* rtx) { return ((hawk_rtx_alt_t*)rtx)->awk; }
|
||||
static HAWK_INLINE hawk_t* hawk_rtx_gethawk (hawk_rtx_t* rtx) { return ((hawk_rtx_alt_t*)rtx)->hawk; }
|
||||
static HAWK_INLINE void* hawk_rtx_getxtn (hawk_rtx_t* rtx) { return (void*)((hawk_uint8_t*)rtx + ((hawk_rtx_alt_t*)rtx)->_instsize); }
|
||||
static HAWK_INLINE hawk_gem_t* hawk_rtx_getgem (hawk_rtx_t* rtx) { return &((hawk_rtx_alt_t*)rtx)->_gem; }
|
||||
static HAWK_INLINE hawk_mmgr_t* hawk_rtx_getmmgr (hawk_rtx_t* rtx) { return ((hawk_rtx_alt_t*)rtx)->_gem.mmgr; }
|
||||
static HAWK_INLINE hawk_cmgr_t* hawk_rtx_getcmgr (hawk_rtx_t* rtx) { return ((hawk_rtx_alt_t*)rtx)->_gem.cmgr; }
|
||||
static HAWK_INLINE void hawk_rtx_setcmgr (hawk_rtx_t* rtx, hawk_cmgr_t* cmgr) { ((hawk_rtx_alt_t*)rtx)->_gem.cmgr = cmgr; }
|
||||
#else
|
||||
#define hawk_rtx_gethawk(rtx) (((hawk_rtx_alt_t*)(rtx))->awk)
|
||||
#define hawk_rtx_gethawk(rtx) (((hawk_rtx_alt_t*)(rtx))->hawk)
|
||||
#define hawk_rtx_getxtn(rtx) ((void*)((hawk_uint8_t*)rtx + ((hawk_rtx_alt_t*)rtx)->_instsize))
|
||||
#define hawk_rtx_getgem(rtx) (&((hawk_rtx_alt_t*)(rtx))->_gem)
|
||||
#define hawk_rtx_getmmgr(rtx) (((hawk_rtx_alt_t*)(rtx))->_gem.mmgr)
|
||||
|
@ -281,7 +281,7 @@ hawk_ooch_t* hawk_rtx_strxntokbyrex (
|
||||
cursub.ptr++;
|
||||
cursub.len--;
|
||||
}
|
||||
else if (rtx->gbl.striprecspc > 0 || (rtx->gbl.striprecspc < 0 && (rtx->awk->parse.pragma.trait & HAWK_STRIPRECSPC)))
|
||||
else if (HAWK_RTX_IS_STRIPRECSPC_ON(rtx))
|
||||
{
|
||||
/* match at the beginning of the input string */
|
||||
if (match.ptr == substr)
|
||||
@ -329,7 +329,7 @@ exit_loop:
|
||||
}
|
||||
|
||||
/* the match is all spaces */
|
||||
if (rtx->gbl.striprecspc > 0 || (rtx->gbl.striprecspc < 0 && (rtx->awk->parse.pragma.trait & HAWK_STRIPRECSPC)))
|
||||
if (HAWK_RTX_IS_STRIPRECSPC_ON(rtx))
|
||||
{
|
||||
/* if the match reached the last character in the input string,
|
||||
* it returns HAWK_NULL to terminate tokenization. */
|
||||
|
@ -487,7 +487,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
|
||||
|
||||
if (hawk_rtx_valtoint(rtx, a1, &base) <= -1) return -1;
|
||||
rx = hawk_bchars_to_num(
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), base),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base),
|
||||
((hawk_val_mbs_t*)a0)->val.ptr,
|
||||
((hawk_val_mbs_t*)a0)->val.len,
|
||||
&lv, &rv
|
||||
@ -502,7 +502,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
|
||||
|
||||
if (hawk_rtx_valtoint(rtx, a1, &base) <= -1) return -1;
|
||||
rx = hawk_oochars_to_num(
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), base),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base),
|
||||
((hawk_val_str_t*)a0)->val.ptr,
|
||||
((hawk_val_str_t*)a0)->val.len,
|
||||
&lv, &rv
|
||||
|
@ -375,6 +375,8 @@ static global_t gtab[] =
|
||||
* if not set, the behavior is dependent on the awk->opt.trait & HAWK_STRIPRECSPC */
|
||||
{ HAWK_T("STRIPRECSPC"), 11, 0 },
|
||||
|
||||
{ HAWK_T("STRIPSTRSPC"), 11, 0 },
|
||||
|
||||
{ HAWK_T("SUBSEP"), 6, 0 }
|
||||
};
|
||||
|
||||
@ -870,7 +872,7 @@ static int begin_include (hawk_t* awk, int once)
|
||||
arg->pragma_trait = awk->parse.pragma.trait;
|
||||
/* but don't change awk->parse.pragma.trait. it means the included file inherits
|
||||
* the existing progma values.
|
||||
awk->parse.pragma.trait = (awk->opt.trait & (HAWK_IMPLICIT | HAWK_STRIPRECSPC));
|
||||
awk->parse.pragma.trait = (awk->opt.trait & (HAWK_IMPLICIT | HAWK_STRIPRECSPC | HAWK_STRIPSTRSPC));
|
||||
*/
|
||||
|
||||
/* i update the current pointer after opening is successful */
|
||||
@ -1049,14 +1051,11 @@ static int parse_progunit (hawk_t* awk)
|
||||
return -1;
|
||||
}
|
||||
|
||||
sl = hawk_oochars_to_int(HAWK_OOECS_PTR(awk->tok.name), HAWK_OOECS_LEN(awk->tok.name),
|
||||
HAWK_OOCHARS_TO_INT_MAKE_OPTION((awk->opt.trait & HAWK_STRIPSTRSPC), (awk->opt.trait & HAWK_STRIPSTRSPC), 0),
|
||||
HAWK_NULL, HAWK_NULL);
|
||||
sl = hawk_oochars_to_int(HAWK_OOECS_PTR(awk->tok.name), HAWK_OOECS_LEN(awk->tok.name), HAWK_OOCHARS_TO_INT_MAKE_OPTION(0, 0, 0), HAWK_NULL, HAWK_NULL);
|
||||
if (sl < HAWK_MIN_RTX_STACK_LIMIT) sl = HAWK_MIN_RTX_STACK_LIMIT;
|
||||
else if (sl > HAWK_MAX_RTX_STACK_LIMIT) sl = HAWK_MAX_RTX_STACK_LIMIT;
|
||||
/* take the specified value if it's greater than the existing value */
|
||||
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("striprecspc")) == 0)
|
||||
{
|
||||
@ -1100,6 +1099,45 @@ static int parse_progunit (hawk_t* awk)
|
||||
awk->parse.pragma.trait &= ~HAWK_STRIPRECSPC;
|
||||
}
|
||||
}
|
||||
else if (hawk_comp_oochars_oocstr(name.ptr, name.len, HAWK_T("stripstrspc")) == 0)
|
||||
{
|
||||
/* @pragma stripstrspc on
|
||||
* @pragma stripstrspc off
|
||||
*/
|
||||
int is_on;
|
||||
|
||||
if (get_token(awk) <= -1) return -1;
|
||||
if (!MATCH(awk, TOK_IDENT))
|
||||
{
|
||||
error_ident_on_off_expected_for_stripstrspc:
|
||||
hawk_seterrfmt (awk, &awk->ptok.loc, HAWK_EIDENT, HAWK_T("identifier 'on' or 'off' expected for 'stripstrspc'"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
is_on = 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_stripstrspc;
|
||||
}
|
||||
|
||||
if (awk->sio.inp == &awk->sio.arg)
|
||||
{
|
||||
/* only the top level source. ignore stripstrspc pragma in other levels */
|
||||
if (is_on)
|
||||
awk->parse.pragma.trait |= HAWK_STRIPSTRSPC;
|
||||
else
|
||||
awk->parse.pragma.trait &= ~HAWK_STRIPSTRSPC;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
hawk_seterrfmt (awk, &awk->ptok.loc, HAWK_EIDENT, HAWK_T("unknown @pragma identifier - %.*js"), name.len, name.ptr);
|
||||
@ -4621,17 +4659,17 @@ static hawk_nde_t* parse_primary_int (hawk_t* hawk, const hawk_loc_t* xloc)
|
||||
/* create the node for the literal */
|
||||
nde = (hawk_nde_int_t*)new_int_node (
|
||||
hawk,
|
||||
hawk_oochars_to_int (HAWK_OOECS_PTR(hawk->tok.name), HAWK_OOECS_LEN(hawk->tok.name), HAWK_OOCHARS_TO_INT_MAKE_OPTION((hawk->opt.trait & HAWK_STRIPSTRSPC), (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), HAWK_NULL, HAWK_NULL),
|
||||
hawk_oochars_to_int (HAWK_OOECS_PTR(hawk->tok.name), HAWK_OOECS_LEN(hawk->tok.name), HAWK_OOCHARS_TO_INT_MAKE_OPTION(0, 0, 0), HAWK_NULL, HAWK_NULL),
|
||||
xloc
|
||||
);
|
||||
if (nde == HAWK_NULL) return HAWK_NULL;
|
||||
if (HAWK_UNLIKELY(!nde)) return HAWK_NULL;
|
||||
|
||||
HAWK_ASSERT (HAWK_OOECS_LEN(hawk->tok.name) == hawk_count_oocstr(HAWK_OOECS_PTR(hawk->tok.name)));
|
||||
|
||||
/* remember the literal in the original form */
|
||||
nde->len = HAWK_OOECS_LEN(hawk->tok.name);
|
||||
nde->str = hawk_dupoocs(hawk, HAWK_OOECS_OOCS(hawk->tok.name));
|
||||
if (nde->str == HAWK_NULL || get_token(hawk) <= -1) goto oops;
|
||||
if (!nde->str || get_token(hawk) <= -1) goto oops;
|
||||
|
||||
return (hawk_nde_t*)nde;
|
||||
|
||||
@ -4649,10 +4687,10 @@ static hawk_nde_t* parse_primary_flt (hawk_t* hawk, const hawk_loc_t* xloc)
|
||||
/* create the node for the literal */
|
||||
nde = (hawk_nde_flt_t*)new_flt_node(
|
||||
hawk,
|
||||
hawk_oochars_to_flt(HAWK_OOECS_PTR(hawk->tok.name), HAWK_OOECS_LEN(hawk->tok.name), HAWK_NULL, (hawk->opt.trait & HAWK_STRIPSTRSPC)),
|
||||
hawk_oochars_to_flt(HAWK_OOECS_PTR(hawk->tok.name), HAWK_OOECS_LEN(hawk->tok.name), HAWK_NULL, 0),
|
||||
xloc
|
||||
);
|
||||
if (nde == HAWK_NULL) return HAWK_NULL;
|
||||
if (HAWK_UNLIKELY(!nde)) return HAWK_NULL;
|
||||
|
||||
HAWK_ASSERT (
|
||||
HAWK_OOECS_LEN(hawk->tok.name) ==
|
||||
@ -4661,7 +4699,7 @@ static hawk_nde_t* parse_primary_flt (hawk_t* hawk, const hawk_loc_t* xloc)
|
||||
/* remember the literal in the original form */
|
||||
nde->len = HAWK_OOECS_LEN(hawk->tok.name);
|
||||
nde->str = hawk_dupoocs(hawk, HAWK_OOECS_OOCS(hawk->tok.name));
|
||||
if (nde->str == HAWK_NULL || get_token(hawk) <= -1) goto oops;
|
||||
if (!nde->str || get_token(hawk) <= -1) goto oops;
|
||||
|
||||
return (hawk_nde_t*)nde;
|
||||
|
||||
|
@ -437,7 +437,7 @@ int hawk_rtx_readio (hawk_rtx_t* rtx, int in_type, const hawk_ooch_t* name, hawk
|
||||
if (HAWK_OOECS_LASTCHAR(buf) == HAWK_T('\n'))
|
||||
{
|
||||
HAWK_OOECS_LEN(buf) -= 1;
|
||||
if (rtx->awk->opt.trait & HAWK_CRLF)
|
||||
if (rtx->hawk->opt.trait & HAWK_CRLF)
|
||||
{
|
||||
/* drop preceding CR */
|
||||
if (HAWK_OOECS_LEN(buf) > 0 && HAWK_OOECS_LASTCHAR(buf) == HAWK_T('\r')) HAWK_OOECS_LEN(buf) -= 1;
|
||||
@ -541,7 +541,7 @@ int hawk_rtx_readio (hawk_rtx_t* rtx, int in_type, const hawk_ooch_t* name, hawk
|
||||
|
||||
/* we don't drop CR from the record buffer
|
||||
* if we're in CRLF mode. POINT-X */
|
||||
if (!(rtx->awk->opt.trait & HAWK_CRLF))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_CRLF))
|
||||
HAWK_OOECS_LEN(buf) -= 1;
|
||||
}
|
||||
|
||||
@ -549,7 +549,7 @@ int hawk_rtx_readio (hawk_rtx_t* rtx, int in_type, const hawk_ooch_t* name, hawk
|
||||
{
|
||||
/* we got a blank line */
|
||||
|
||||
if (rtx->awk->opt.trait & HAWK_CRLF)
|
||||
if (rtx->hawk->opt.trait & HAWK_CRLF)
|
||||
{
|
||||
if (HAWK_OOECS_LEN(buf) > 0 && HAWK_OOECS_LASTCHAR(buf) == HAWK_T('\r'))
|
||||
{
|
||||
@ -755,7 +755,7 @@ int hawk_rtx_readiobytes (hawk_rtx_t* rtx, int in_type, const hawk_ooch_t* name,
|
||||
if (HAWK_BECS_LASTCHAR(buf) == '\n')
|
||||
{
|
||||
HAWK_BECS_LEN(buf) -= 1;
|
||||
if (rtx->awk->opt.trait & HAWK_CRLF)
|
||||
if (rtx->hawk->opt.trait & HAWK_CRLF)
|
||||
{
|
||||
/* drop preceding CR */
|
||||
if (HAWK_BECS_LEN(buf) > 0 && HAWK_BECS_LASTCHAR(buf) == '\r') HAWK_BECS_LEN(buf) -= 1;
|
||||
@ -859,7 +859,7 @@ int hawk_rtx_readiobytes (hawk_rtx_t* rtx, int in_type, const hawk_ooch_t* name,
|
||||
|
||||
/* we don't drop CR from the record buffer
|
||||
* if we're in CRLF mode. POINT-X */
|
||||
if (!(rtx->awk->opt.trait & HAWK_CRLF))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_CRLF))
|
||||
HAWK_BECS_LEN(buf) -= 1;
|
||||
}
|
||||
|
||||
@ -867,7 +867,7 @@ int hawk_rtx_readiobytes (hawk_rtx_t* rtx, int in_type, const hawk_ooch_t* name,
|
||||
{
|
||||
/* we got a blank line */
|
||||
|
||||
if (rtx->awk->opt.trait & HAWK_CRLF)
|
||||
if (rtx->hawk->opt.trait & HAWK_CRLF)
|
||||
{
|
||||
if (HAWK_BECS_LEN(buf) > 0 && HAWK_BECS_LASTCHAR(buf) == '\r')
|
||||
{
|
||||
|
171
hawk/lib/run.c
171
hawk/lib/run.c
@ -232,7 +232,7 @@ HAWK_INLINE hawk_val_t* hawk_rtx_getarg (hawk_rtx_t* rtx, hawk_oow_t idx)
|
||||
|
||||
HAWK_INLINE hawk_val_t* hawk_rtx_getgbl (hawk_rtx_t* rtx, int id)
|
||||
{
|
||||
HAWK_ASSERT (id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->awk->parse.gbls));
|
||||
HAWK_ASSERT (id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->hawk->parse.gbls));
|
||||
return RTX_STACK_GBL(rtx, id);
|
||||
}
|
||||
|
||||
@ -255,7 +255,7 @@ static int set_global (hawk_rtx_t* rtx, int idx, hawk_nde_var_t* var, hawk_val_t
|
||||
vtype = HAWK_RTX_GETVALTYPE (rtx, val);
|
||||
old_vtype = HAWK_RTX_GETVALTYPE (rtx, old);
|
||||
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
|
||||
{
|
||||
hawk_errnum_t errnum = HAWK_ENOERR;
|
||||
const hawk_ooch_t* errfmt;
|
||||
@ -619,6 +619,22 @@ static int set_global (hawk_rtx_t* rtx, int idx, hawk_nde_var_t* var, hawk_val_t
|
||||
break;
|
||||
}
|
||||
|
||||
case HAWK_GBL_STRIPSTRSPC:
|
||||
{
|
||||
hawk_int_t l;
|
||||
hawk_flt_t r;
|
||||
int vt;
|
||||
|
||||
vt = hawk_rtx_valtonum(rtx, val, &l, &r);
|
||||
if (vt <= -1) return -1;
|
||||
|
||||
if (vt == 0)
|
||||
rtx->gbl.stripstrspc = ((l > 0)? 1: (l < 0)? -1: 0);
|
||||
else
|
||||
rtx->gbl.stripstrspc = ((r > 0.0)? 1: (r < 0.0)? -1: 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case HAWK_GBL_SUBSEP:
|
||||
{
|
||||
hawk_rtx_valtostr_out_t out;
|
||||
@ -656,7 +672,7 @@ HAWK_INLINE void hawk_rtx_setretval (hawk_rtx_t* rtx, hawk_val_t* val)
|
||||
|
||||
HAWK_INLINE int hawk_rtx_setgbl (hawk_rtx_t* rtx, int id, hawk_val_t* val)
|
||||
{
|
||||
HAWK_ASSERT (id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->awk->parse.gbls));
|
||||
HAWK_ASSERT (id >= 0 && id < (int)HAWK_ARR_SIZE(rtx->hawk->parse.gbls));
|
||||
return set_global(rtx, id, HAWK_NULL, val, 0);
|
||||
}
|
||||
|
||||
@ -762,7 +778,7 @@ int hawk_rtx_setofilenamewithuchars (hawk_rtx_t* rtx, const hawk_uch_t* name, ha
|
||||
hawk_val_t* tmp;
|
||||
int n;
|
||||
|
||||
if (rtx->awk->opt.trait & HAWK_NEXTOFILE)
|
||||
if (rtx->hawk->opt.trait & HAWK_NEXTOFILE)
|
||||
{
|
||||
tmp = hawk_rtx_makestrvalwithuchars(rtx, name, len);
|
||||
if (HAWK_UNLIKELY(!tmp)) return -1;
|
||||
@ -781,7 +797,7 @@ int hawk_rtx_setofilenamewithbchars (hawk_rtx_t* rtx, const hawk_bch_t* name, ha
|
||||
hawk_val_t* tmp;
|
||||
int n;
|
||||
|
||||
if (rtx->awk->opt.trait & HAWK_NEXTOFILE)
|
||||
if (rtx->hawk->opt.trait & HAWK_NEXTOFILE)
|
||||
{
|
||||
tmp = hawk_rtx_makestrvalwithbchars(rtx, name, len);
|
||||
if (HAWK_UNLIKELY(!tmp)) return -1;
|
||||
@ -891,15 +907,15 @@ hawk_rtx_t* hawk_rtx_open (hawk_t* awk, hawk_oow_t xtnsize, hawk_rio_cbs_t* rio)
|
||||
|
||||
mic.count = 0;
|
||||
mic.rtx = rtx;
|
||||
hawk_rbt_walk (rtx->awk->modtab, init_module, &mic);
|
||||
if (mic.count != HAWK_RBT_SIZE(rtx->awk->modtab))
|
||||
hawk_rbt_walk (rtx->hawk->modtab, init_module, &mic);
|
||||
if (mic.count != HAWK_RBT_SIZE(rtx->hawk->modtab))
|
||||
{
|
||||
if (mic.count > 0)
|
||||
{
|
||||
struct module_fini_ctx_t mfc;
|
||||
mfc.limit = mic.count;
|
||||
mfc.count = 0;
|
||||
hawk_rbt_walk (rtx->awk->modtab, fini_module, &mfc);
|
||||
hawk_rbt_walk (rtx->hawk->modtab, fini_module, &mfc);
|
||||
}
|
||||
|
||||
fini_rtx (rtx, 1);
|
||||
@ -918,7 +934,7 @@ void hawk_rtx_close (hawk_rtx_t* rtx)
|
||||
mfc.limit = 0;
|
||||
mfc.count = 0;
|
||||
mfc.rtx = rtx;
|
||||
hawk_rbt_walk (rtx->awk->modtab, fini_module, &mfc);
|
||||
hawk_rbt_walk (rtx->hawk->modtab, fini_module, &mfc);
|
||||
|
||||
for (ecb = rtx->ecb; ecb; ecb = ecb->next)
|
||||
{
|
||||
@ -943,7 +959,7 @@ void hawk_rtx_halt (hawk_rtx_t* rtx)
|
||||
|
||||
int hawk_rtx_ishalt (hawk_rtx_t* rtx)
|
||||
{
|
||||
return (rtx->exit_level == EXIT_ABORT || rtx->awk->haltall);
|
||||
return (rtx->exit_level == EXIT_ABORT || rtx->hawk->haltall);
|
||||
}
|
||||
|
||||
void hawk_rtx_getrio (hawk_rtx_t* rtx, hawk_rio_cbs_t* rio)
|
||||
@ -1003,7 +1019,7 @@ static int init_rtx (hawk_rtx_t* rtx, hawk_t* awk, hawk_rio_cbs_t* rio)
|
||||
hawk_oow_t stack_limit;
|
||||
|
||||
rtx->_gem = awk->_gem;
|
||||
rtx->awk = awk;
|
||||
rtx->hawk = awk;
|
||||
|
||||
CLRERR (rtx);
|
||||
|
||||
@ -1054,11 +1070,11 @@ static int init_rtx (hawk_rtx_t* rtx, hawk_t* awk, hawk_rio_cbs_t* rio)
|
||||
rtx->formatmbs.tmp.len = 4096;
|
||||
rtx->formatmbs.tmp.inc = 4096 * 2;
|
||||
|
||||
if (rtx->awk->tree.chain_size > 0)
|
||||
if (rtx->hawk->tree.chain_size > 0)
|
||||
{
|
||||
rtx->pattern_range_state = (hawk_oob_t*)hawk_rtx_allocmem(rtx, rtx->awk->tree.chain_size * HAWK_SIZEOF(hawk_oob_t));
|
||||
rtx->pattern_range_state = (hawk_oob_t*)hawk_rtx_allocmem(rtx, rtx->hawk->tree.chain_size * HAWK_SIZEOF(hawk_oob_t));
|
||||
if (!rtx->pattern_range_state) goto oops_12;
|
||||
HAWK_MEMSET (rtx->pattern_range_state, 0, rtx->awk->tree.chain_size * HAWK_SIZEOF(hawk_oob_t));
|
||||
HAWK_MEMSET (rtx->pattern_range_state, 0, rtx->hawk->tree.chain_size * HAWK_SIZEOF(hawk_oob_t));
|
||||
}
|
||||
else rtx->pattern_range_state = HAWK_NULL;
|
||||
|
||||
@ -1075,7 +1091,8 @@ static int init_rtx (hawk_rtx_t* rtx, hawk_t* awk, hawk_rio_cbs_t* rio)
|
||||
rtx->gbl.fs[0] = HAWK_NULL;
|
||||
rtx->gbl.fs[1] = HAWK_NULL;
|
||||
rtx->gbl.ignorecase = 0;
|
||||
rtx->gbl.striprecspc = -1;
|
||||
rtx->gbl.striprecspc = -1; /* means 'not set' */
|
||||
rtx->gbl.stripstrspc = -1; /* means 'not set' */
|
||||
|
||||
return 0;
|
||||
|
||||
@ -1280,7 +1297,7 @@ static int prepare_globals (hawk_rtx_t* rtx)
|
||||
hawk_oow_t ngbls;
|
||||
|
||||
saved_stack_top = rtx->stack_top;
|
||||
ngbls = rtx->awk->tree.ngbls;
|
||||
ngbls = rtx->hawk->tree.ngbls;
|
||||
|
||||
/* initialize all global variables to nil by push nils to the stack */
|
||||
while (ngbls > 0)
|
||||
@ -1337,7 +1354,7 @@ static int defaultify_globals (hawk_rtx_t* rtx)
|
||||
hawk_oow_t i, j;
|
||||
int stridx;
|
||||
|
||||
stridx = (rtx->awk->opt.trait & HAWK_CRLF)? 1: 0;
|
||||
stridx = (rtx->hawk->opt.trait & HAWK_CRLF)? 1: 0;
|
||||
for (i = 0; i < HAWK_COUNTOF(gtab); i++)
|
||||
{
|
||||
if (gtab[i].str[stridx] == HAWK_NULL || gtab[i].str[stridx][0] == HAWK_T('\0'))
|
||||
@ -1371,17 +1388,17 @@ static int defaultify_globals (hawk_rtx_t* rtx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void refdown_globals (hawk_rtx_t* run, int pop)
|
||||
static void refdown_globals (hawk_rtx_t* rtx, int pop)
|
||||
{
|
||||
hawk_oow_t ngbls;
|
||||
|
||||
ngbls = run->awk->tree.ngbls;
|
||||
ngbls = rtx->hawk->tree.ngbls;
|
||||
while (ngbls > 0)
|
||||
{
|
||||
--ngbls;
|
||||
hawk_rtx_refdownval (run, RTX_STACK_GBL(run,ngbls));
|
||||
if (pop) __raw_pop (run);
|
||||
else RTX_STACK_GBL(run,ngbls) = hawk_val_nil;
|
||||
hawk_rtx_refdownval (rtx, RTX_STACK_GBL(rtx,ngbls));
|
||||
if (pop) __raw_pop (rtx);
|
||||
else RTX_STACK_GBL(rtx,ngbls) = hawk_val_nil;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1469,7 +1486,7 @@ static hawk_val_t* run_bpae_loop (hawk_rtx_t* rtx)
|
||||
RTX_STACK_NARGS(rtx) = (void*)nargs;
|
||||
|
||||
/* execute the BEGIN block */
|
||||
for (nde = rtx->awk->tree.begin;
|
||||
for (nde = rtx->hawk->tree.begin;
|
||||
ret == 0 && nde != HAWK_NULL && rtx->exit_level < EXIT_GLOBAL;
|
||||
nde = nde->next)
|
||||
{
|
||||
@ -1495,8 +1512,8 @@ static hawk_val_t* run_bpae_loop (hawk_rtx_t* rtx)
|
||||
|
||||
/* run pattern block loops */
|
||||
if (ret == 0 &&
|
||||
(rtx->awk->tree.chain != HAWK_NULL ||
|
||||
rtx->awk->tree.end != HAWK_NULL) &&
|
||||
(rtx->hawk->tree.chain != HAWK_NULL ||
|
||||
rtx->hawk->tree.end != HAWK_NULL) &&
|
||||
rtx->exit_level < EXIT_GLOBAL)
|
||||
{
|
||||
if (run_pblocks(rtx) <= -1) ret = -1;
|
||||
@ -1514,7 +1531,7 @@ static hawk_val_t* run_bpae_loop (hawk_rtx_t* rtx)
|
||||
|
||||
/* execute END blocks. the first END block is executed if the
|
||||
* program is not explicitly aborted with hawk_rtx_halt().*/
|
||||
for (nde = rtx->awk->tree.end;
|
||||
for (nde = rtx->hawk->tree.end;
|
||||
ret == 0 && nde != HAWK_NULL && rtx->exit_level < EXIT_ABORT;
|
||||
nde = nde->next)
|
||||
{
|
||||
@ -1585,15 +1602,15 @@ hawk_val_t* hawk_rtx_loop (hawk_rtx_t* rtx)
|
||||
|
||||
hawk_val_t* hawk_rtx_execwithucstrarr (hawk_rtx_t* rtx, const hawk_uch_t* args[], hawk_oow_t nargs)
|
||||
{
|
||||
return (rtx->awk->parse.pragma.entry[0] != '\0')?
|
||||
hawk_rtx_callwithooucstrarr(rtx, rtx->awk->parse.pragma.entry, args, nargs):
|
||||
return (rtx->hawk->parse.pragma.entry[0] != '\0')?
|
||||
hawk_rtx_callwithooucstrarr(rtx, rtx->hawk->parse.pragma.entry, args, nargs):
|
||||
hawk_rtx_loop(rtx);
|
||||
}
|
||||
|
||||
hawk_val_t* hawk_rtx_execwithbcstrarr (hawk_rtx_t* rtx, const hawk_bch_t* args[], hawk_oow_t nargs)
|
||||
{
|
||||
return (rtx->awk->parse.pragma.entry[0] != '\0')?
|
||||
hawk_rtx_callwithoobcstrarr(rtx, rtx->awk->parse.pragma.entry, args, nargs):
|
||||
return (rtx->hawk->parse.pragma.entry[0] != '\0')?
|
||||
hawk_rtx_callwithoobcstrarr(rtx, rtx->hawk->parse.pragma.entry, args, nargs):
|
||||
hawk_rtx_loop(rtx);
|
||||
}
|
||||
|
||||
@ -1603,7 +1620,7 @@ static hawk_fun_t* find_fun (hawk_rtx_t* rtx, const hawk_ooch_t* name)
|
||||
{
|
||||
hawk_htb_pair_t* pair;
|
||||
|
||||
pair = hawk_htb_search(rtx->awk->tree.funs, name, hawk_count_oocstr(name));
|
||||
pair = hawk_htb_search(rtx->hawk->tree.funs, name, hawk_count_oocstr(name));
|
||||
if (!pair)
|
||||
{
|
||||
hawk_rtx_seterrfmt (rtx, HAWK_NULL, HAWK_EFUNNF, HAWK_T("unable to find function '%js'"), name);
|
||||
@ -1870,16 +1887,16 @@ static int run_pblocks (hawk_rtx_t* rtx)
|
||||
int n;
|
||||
|
||||
#define ADJUST_ERROR(run) \
|
||||
if (rtx->awk->tree.chain != HAWK_NULL) \
|
||||
if (rtx->hawk->tree.chain != HAWK_NULL) \
|
||||
{ \
|
||||
if (rtx->awk->tree.chain->pattern != HAWK_NULL) \
|
||||
ADJERR_LOC (rtx, &rtx->awk->tree.chain->pattern->loc); \
|
||||
else if (rtx->awk->tree.chain->action != HAWK_NULL) \
|
||||
ADJERR_LOC (rtx, &rtx->awk->tree.chain->action->loc); \
|
||||
if (rtx->hawk->tree.chain->pattern != HAWK_NULL) \
|
||||
ADJERR_LOC (rtx, &rtx->hawk->tree.chain->pattern->loc); \
|
||||
else if (rtx->hawk->tree.chain->action != HAWK_NULL) \
|
||||
ADJERR_LOC (rtx, &rtx->hawk->tree.chain->action->loc); \
|
||||
} \
|
||||
else if (rtx->awk->tree.end != HAWK_NULL) \
|
||||
else if (rtx->hawk->tree.end != HAWK_NULL) \
|
||||
{ \
|
||||
ADJERR_LOC (run, &rtx->awk->tree.end->loc); \
|
||||
ADJERR_LOC (run, &rtx->hawk->tree.end->loc); \
|
||||
}
|
||||
|
||||
rtx->inrec.buf_pos = 0;
|
||||
@ -1899,9 +1916,9 @@ static int run_pblocks (hawk_rtx_t* rtx)
|
||||
}
|
||||
if (n == 0) break; /* end of input */
|
||||
|
||||
if (rtx->awk->tree.chain)
|
||||
if (rtx->hawk->tree.chain)
|
||||
{
|
||||
if (run_pblock_chain(rtx, rtx->awk->tree.chain) <= -1) return -1;
|
||||
if (run_pblock_chain(rtx, rtx->hawk->tree.chain) <= -1) return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2096,8 +2113,8 @@ static int run_block (hawk_rtx_t* rtx, hawk_nde_blk_t* nde)
|
||||
{
|
||||
int n;
|
||||
|
||||
if (rtx->awk->opt.depth.s.block_run > 0 &&
|
||||
rtx->depth.block >= rtx->awk->opt.depth.s.block_run)
|
||||
if (rtx->hawk->opt.depth.s.block_run > 0 &&
|
||||
rtx->depth.block >= rtx->hawk->opt.depth.s.block_run)
|
||||
{
|
||||
hawk_rtx_seterrnum (rtx, &nde->loc, HAWK_EBLKNST);
|
||||
return -1;;
|
||||
@ -2112,7 +2129,7 @@ static int run_block (hawk_rtx_t* rtx, hawk_nde_blk_t* nde)
|
||||
|
||||
#define ON_STATEMENT(rtx,nde) do { \
|
||||
hawk_rtx_ecb_t* ecb; \
|
||||
if ((rtx)->awk->haltall) (rtx)->exit_level = EXIT_ABORT; \
|
||||
if ((rtx)->hawk->haltall) (rtx)->exit_level = EXIT_ABORT; \
|
||||
for (ecb = (rtx)->ecb; ecb; ecb = ecb->next) \
|
||||
if (ecb->stmt) ecb->stmt (rtx, nde); \
|
||||
} while(0)
|
||||
@ -2185,12 +2202,12 @@ static int run_statement (hawk_rtx_t* rtx, hawk_nde_t* nde)
|
||||
break;
|
||||
|
||||
case HAWK_NDE_PRINT:
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT) goto __fallback__;
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT) goto __fallback__;
|
||||
xret = run_print(rtx, (hawk_nde_print_t*)nde);
|
||||
break;
|
||||
|
||||
case HAWK_NDE_PRINTF:
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT) goto __fallback__;
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT) goto __fallback__;
|
||||
xret = run_printf(rtx, (hawk_nde_print_t*)nde);
|
||||
break;
|
||||
|
||||
@ -2531,7 +2548,7 @@ static int run_return (hawk_rtx_t* rtx, hawk_nde_return_t* nde)
|
||||
val = eval_expression (rtx, nde->val);
|
||||
if (val == HAWK_NULL) return -1;
|
||||
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
|
||||
{
|
||||
if (HAWK_RTX_GETVALTYPE (rtx, val) == HAWK_VAL_MAP)
|
||||
{
|
||||
@ -2582,12 +2599,12 @@ static int run_next (hawk_rtx_t* rtx, hawk_nde_next_t* nde)
|
||||
/* the parser checks if next has been called in the begin/end
|
||||
* block or whereever inappropriate. so the rtxtime doesn't
|
||||
* check that explicitly */
|
||||
if (rtx->active_block == (hawk_nde_blk_t*)rtx->awk->tree.begin)
|
||||
if (rtx->active_block == (hawk_nde_blk_t*)rtx->hawk->tree.begin)
|
||||
{
|
||||
hawk_rtx_seterrnum (rtx, &nde->loc, HAWK_ERNEXTBEG);
|
||||
return -1;
|
||||
}
|
||||
else if (rtx->active_block == (hawk_nde_blk_t*)rtx->awk->tree.end)
|
||||
else if (rtx->active_block == (hawk_nde_blk_t*)rtx->hawk->tree.end)
|
||||
{
|
||||
hawk_rtx_seterrnum (rtx, &nde->loc, HAWK_ERNEXTEND);
|
||||
return -1;
|
||||
@ -2602,12 +2619,12 @@ static int run_nextinfile (hawk_rtx_t* rtx, hawk_nde_nextfile_t* nde)
|
||||
int n;
|
||||
|
||||
/* normal nextfile statement */
|
||||
if (rtx->active_block == (hawk_nde_blk_t*)rtx->awk->tree.begin)
|
||||
if (rtx->active_block == (hawk_nde_blk_t*)rtx->hawk->tree.begin)
|
||||
{
|
||||
hawk_rtx_seterrnum (rtx, &nde->loc, HAWK_ERNEXTFBEG);
|
||||
return -1;
|
||||
}
|
||||
else if (rtx->active_block == (hawk_nde_blk_t*)rtx->awk->tree.end)
|
||||
else if (rtx->active_block == (hawk_nde_blk_t*)rtx->hawk->tree.end)
|
||||
{
|
||||
hawk_rtx_seterrnum (rtx, &nde->loc, HAWK_ERNEXTFEND);
|
||||
return -1;
|
||||
@ -3028,7 +3045,7 @@ static int run_print (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
|
||||
n = hawk_rtx_writeiostr(rtx, nde->out_type, out.ptr, HAWK_OOECS_PTR(&rtx->inrec.line), HAWK_OOECS_LEN(&rtx->inrec.line));
|
||||
if (n <= -1 /*&& rtx->errinf.num != HAWK_EIOIMPL*/)
|
||||
{
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT)
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT)
|
||||
{
|
||||
xret = PRINT_IOERR;
|
||||
}
|
||||
@ -3060,7 +3077,7 @@ static int run_print (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
|
||||
n = hawk_rtx_writeiostr(rtx, nde->out_type, out.ptr, rtx->gbl.ofs.ptr, rtx->gbl.ofs.len);
|
||||
if (n <= -1 /*&& rtx->errinf.num != HAWK_EIOIMPL*/)
|
||||
{
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT)
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT)
|
||||
{
|
||||
xret = PRINT_IOERR;
|
||||
}
|
||||
@ -3080,7 +3097,7 @@ static int run_print (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
|
||||
|
||||
if (n <= -1 /*&& rtx->errinf.num != HAWK_EIOIMPL*/)
|
||||
{
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT)
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT)
|
||||
{
|
||||
xret = PRINT_IOERR;
|
||||
}
|
||||
@ -3096,7 +3113,7 @@ static int run_print (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
|
||||
n = hawk_rtx_writeiostr(rtx, nde->out_type, out.ptr, rtx->gbl.ors.ptr, rtx->gbl.ors.len);
|
||||
if (n <= -1 /*&& rtx->errinf.num != HAWK_EIOIMPL*/)
|
||||
{
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT)
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT)
|
||||
{
|
||||
xret = PRINT_IOERR;
|
||||
}
|
||||
@ -3207,7 +3224,7 @@ static int run_printf (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
|
||||
|
||||
if (n <= -1 /*&& rtx->errinf.num != HAWK_EIOIMPL*/)
|
||||
{
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT) xret = PRINT_IOERR;
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT) xret = PRINT_IOERR;
|
||||
else goto oops;
|
||||
}
|
||||
break;
|
||||
@ -3215,7 +3232,7 @@ static int run_printf (hawk_rtx_t* rtx, hawk_nde_print_t* nde)
|
||||
|
||||
if (hawk_rtx_flushio(rtx, nde->out_type, out.ptr) <= -1)
|
||||
{
|
||||
if (rtx->awk->opt.trait & HAWK_TOLERANT) xret = PRINT_IOERR;
|
||||
if (rtx->hawk->opt.trait & HAWK_TOLERANT) xret = PRINT_IOERR;
|
||||
else goto oops_1;
|
||||
}
|
||||
|
||||
@ -3254,7 +3271,7 @@ static int output_formatted (
|
||||
n = hawk_rtx_writeiostr(rtx, out_type, dst, ptr, len);
|
||||
if (n <= -1 /*&& rtx->errinf.num != HAWK_EIOIMPL*/)
|
||||
{
|
||||
return (rtx->awk->opt.trait & HAWK_TOLERANT)? PRINT_IOERR: -1;
|
||||
return (rtx->hawk->opt.trait & HAWK_TOLERANT)? PRINT_IOERR: -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -3274,7 +3291,7 @@ static int output_formatted_bytes (
|
||||
n = hawk_rtx_writeiobytes(rtx, out_type, dst, ptr, len);
|
||||
if (n <= -1 /*&& rtx->errinf.num != HAWK_EIOIMPL*/)
|
||||
{
|
||||
return (rtx->awk->opt.trait & HAWK_TOLERANT)? PRINT_IOERR: -1;
|
||||
return (rtx->hawk->opt.trait & HAWK_TOLERANT)? PRINT_IOERR: -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -3602,7 +3619,7 @@ static hawk_val_t* do_assignment_nonidx (hawk_rtx_t* rtx, hawk_nde_var_t* var, h
|
||||
|
||||
pair = hawk_htb_search(rtx->named, var->id.name.ptr, var->id.name.len);
|
||||
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
|
||||
{
|
||||
if (pair && HAWK_RTX_GETVALTYPE(rtx, (hawk_val_t*)HAWK_HTB_VPTR(pair)) == HAWK_VAL_MAP)
|
||||
{
|
||||
@ -3646,7 +3663,7 @@ static hawk_val_t* do_assignment_nonidx (hawk_rtx_t* rtx, hawk_nde_var_t* var, h
|
||||
{
|
||||
hawk_val_t* old = RTX_STACK_LCL(rtx,var->id.idxa);
|
||||
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
|
||||
{
|
||||
if (HAWK_RTX_GETVALTYPE(rtx, old) == HAWK_VAL_MAP)
|
||||
{
|
||||
@ -3676,7 +3693,7 @@ static hawk_val_t* do_assignment_nonidx (hawk_rtx_t* rtx, hawk_nde_var_t* var, h
|
||||
{
|
||||
hawk_val_t* old = RTX_STACK_ARG(rtx,var->id.idxa);
|
||||
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
|
||||
{
|
||||
if (HAWK_RTX_GETVALTYPE(rtx, old) == HAWK_VAL_MAP)
|
||||
{
|
||||
@ -3809,7 +3826,7 @@ retry:
|
||||
}
|
||||
else if (mvtype != HAWK_VAL_MAP)
|
||||
{
|
||||
if (rtx->awk->opt.trait & HAWK_FLEXMAP)
|
||||
if (rtx->hawk->opt.trait & HAWK_FLEXMAP)
|
||||
{
|
||||
/* if FLEXMAP is on, you can switch a scalar value to a map */
|
||||
hawk_nde_var_t fake;
|
||||
@ -4361,7 +4378,7 @@ static HAWK_INLINE int __cmp_int_str (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
|
||||
hawk_flt_t rr;
|
||||
|
||||
n = hawk_oochars_to_num(
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0),
|
||||
((hawk_val_str_t*)right)->val.ptr,
|
||||
((hawk_val_str_t*)right)->val.len,
|
||||
&ll, &rr
|
||||
@ -4401,7 +4418,7 @@ static HAWK_INLINE int __cmp_int_mbs (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
|
||||
hawk_flt_t rr;
|
||||
|
||||
n = hawk_bchars_to_num (
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0),
|
||||
((hawk_val_mbs_t*)right)->val.ptr,
|
||||
((hawk_val_mbs_t*)right)->val.len,
|
||||
&ll, &rr
|
||||
@ -4482,7 +4499,7 @@ static HAWK_INLINE int __cmp_flt_str (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
|
||||
const hawk_ooch_t* end;
|
||||
hawk_flt_t rr;
|
||||
|
||||
rr = hawk_oochars_to_flt(((hawk_val_str_t*)right)->val.ptr, ((hawk_val_str_t*)right)->val.len, &end, (hawk->opt.trait & HAWK_STRIPSTRSPC));
|
||||
rr = hawk_oochars_to_flt(((hawk_val_str_t*)right)->val.ptr, ((hawk_val_str_t*)right)->val.len, &end, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx));
|
||||
if (end == ((hawk_val_str_t*)right)->val.ptr + ((hawk_val_str_t*)right)->val.len)
|
||||
{
|
||||
return (((hawk_val_flt_t*)left)->val > rr)? 1:
|
||||
@ -4510,7 +4527,7 @@ static HAWK_INLINE int __cmp_flt_mbs (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
|
||||
const hawk_bch_t* end;
|
||||
hawk_flt_t rr;
|
||||
|
||||
rr = hawk_bchars_to_flt(((hawk_val_mbs_t*)right)->val.ptr, ((hawk_val_mbs_t*)right)->val.len, &end, (hawk->opt.trait & HAWK_STRIPSTRSPC));
|
||||
rr = hawk_bchars_to_flt(((hawk_val_mbs_t*)right)->val.ptr, ((hawk_val_mbs_t*)right)->val.len, &end, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx));
|
||||
if (end == ((hawk_val_mbs_t*)right)->val.ptr + ((hawk_val_mbs_t*)right)->val.len)
|
||||
{
|
||||
return (((hawk_val_flt_t*)left)->val > rr)? 1:
|
||||
@ -4572,13 +4589,13 @@ static HAWK_INLINE int __cmp_str_str (hawk_rtx_t* rtx, hawk_val_t* left, hawk_va
|
||||
ls = (hawk_val_str_t*)left;
|
||||
rs = (hawk_val_str_t*)right;
|
||||
|
||||
if (ls->nstr == 0 || rs->nstr == 0)
|
||||
if (HAWK_LIKELY(ls->nstr == 0 || rs->nstr == 0))
|
||||
{
|
||||
/* both are definitely strings */
|
||||
return hawk_comp_oochars(ls->val.ptr, ls->val.len, rs->val.ptr, rs->val.len, rtx->gbl.ignorecase);
|
||||
}
|
||||
|
||||
stripspc = (hawk->opt.trait & HAWK_STRIPSTRSPC);
|
||||
stripspc = HAWK_RTX_IS_STRIPSTRSPC_ON(rtx);
|
||||
|
||||
if (ls->nstr == 1)
|
||||
{
|
||||
@ -4831,7 +4848,7 @@ static HAWK_INLINE int __cmp_val (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t*
|
||||
|
||||
lvtype = HAWK_RTX_GETVALTYPE(rtx, left);
|
||||
rvtype = HAWK_RTX_GETVALTYPE(rtx, right);
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP) &&
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP) &&
|
||||
(lvtype == HAWK_VAL_MAP || rvtype == HAWK_VAL_MAP))
|
||||
{
|
||||
/* a map can't be compared againt other values */
|
||||
@ -5201,7 +5218,7 @@ static hawk_val_t* eval_binop_mod (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
|
||||
hawk_val_t* res;
|
||||
|
||||
/* the mod function must be provided when the awk object is created to be able to calculate floating-pointer remainder */
|
||||
HAWK_ASSERT (rtx->awk->prm.math.mod != HAWK_NULL);
|
||||
HAWK_ASSERT (rtx->hawk->prm.math.mod != HAWK_NULL);
|
||||
|
||||
n1 = hawk_rtx_valtonum(rtx, left, &l1, &r1);
|
||||
n2 = hawk_rtx_valtonum(rtx, right, &l2, &r2);
|
||||
@ -5225,15 +5242,15 @@ static hawk_val_t* eval_binop_mod (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
|
||||
break;
|
||||
|
||||
case 1:
|
||||
res = hawk_rtx_makefltval(rtx, rtx->awk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1, (hawk_flt_t)l2));
|
||||
res = hawk_rtx_makefltval(rtx, rtx->hawk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1, (hawk_flt_t)l2));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
res = hawk_rtx_makefltval(rtx, rtx->awk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)l1, (hawk_flt_t)r2));
|
||||
res = hawk_rtx_makefltval(rtx, rtx->hawk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)l1, (hawk_flt_t)r2));
|
||||
break;
|
||||
|
||||
case 3:
|
||||
res = hawk_rtx_makefltval(rtx, rtx->awk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1, (hawk_flt_t)r2));
|
||||
res = hawk_rtx_makefltval(rtx, rtx->hawk->prm.math.mod(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1, (hawk_flt_t)r2));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -5307,7 +5324,7 @@ static hawk_val_t* eval_binop_exp (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
|
||||
/* left - int, right - real */
|
||||
res = hawk_rtx_makefltval (
|
||||
rtx,
|
||||
rtx->awk->prm.math.pow(hawk_rtx_gethawk(rtx), (hawk_flt_t)l1, (hawk_flt_t)r2)
|
||||
rtx->hawk->prm.math.pow(hawk_rtx_gethawk(rtx), (hawk_flt_t)l1, (hawk_flt_t)r2)
|
||||
);
|
||||
break;
|
||||
|
||||
@ -5315,7 +5332,7 @@ static hawk_val_t* eval_binop_exp (hawk_rtx_t* rtx, hawk_val_t* left, hawk_val_t
|
||||
/* left - real, right - real */
|
||||
res = hawk_rtx_makefltval (
|
||||
rtx,
|
||||
rtx->awk->prm.math.pow(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1,(hawk_flt_t)r2)
|
||||
rtx->hawk->prm.math.pow(hawk_rtx_gethawk(rtx), (hawk_flt_t)r1,(hawk_flt_t)r2)
|
||||
);
|
||||
break;
|
||||
}
|
||||
@ -5836,7 +5853,7 @@ static HAWK_INLINE hawk_val_t* eval_fncall_fun_ex (hawk_rtx_t* rtx, hawk_nde_t*
|
||||
* hoping that the pointer assignment is atomic. (call->u.fun.fun = fun).
|
||||
* i don't mind each instance performs a search duplicately for a short while */
|
||||
|
||||
pair = hawk_htb_search(rtx->awk->tree.funs, call->u.fun.name.ptr, call->u.fun.name.len);
|
||||
pair = hawk_htb_search(rtx->hawk->tree.funs, call->u.fun.name.ptr, call->u.fun.name.len);
|
||||
if (!pair)
|
||||
{
|
||||
hawk_rtx_seterrfmt (rtx, &nde->loc, HAWK_EFUNNF, HAWK_T("function '%.*js' not found"), call->u.fun.name.len, call->u.fun.name.ptr);
|
||||
@ -6585,7 +6602,7 @@ static hawk_val_t* eval_fun (hawk_rtx_t* rtx, hawk_nde_t* nde)
|
||||
* the funptr field in the node can be HAWK_NULL */
|
||||
|
||||
/* TODO: support builtin functions?, support module functions? */
|
||||
pair = hawk_htb_search(rtx->awk->tree.funs, ((hawk_nde_fun_t*)nde)->name.ptr, ((hawk_nde_fun_t*)nde)->name.len);
|
||||
pair = hawk_htb_search(rtx->hawk->tree.funs, ((hawk_nde_fun_t*)nde)->name.ptr, ((hawk_nde_fun_t*)nde)->name.len);
|
||||
if (!pair)
|
||||
{
|
||||
/* it's unlikely to be not found in the function table for the parser structure. but keep this code in case */
|
||||
|
@ -2029,7 +2029,7 @@ static int open_rio_console (hawk_rtx_t* rtx, hawk_rio_arg_t* riod)
|
||||
/* this part is more complex than the code in the else part.
|
||||
* it handles simple assignemnt as well as open files
|
||||
* via in ARGV instead of rxtn->c.in.files */
|
||||
xtn_t* xtn = (xtn_t*)GET_XTN(rtx->awk);
|
||||
xtn_t* xtn = (xtn_t*)GET_XTN(hawk_rtx_gethawk(rtx));
|
||||
hawk_val_t* v_argc, * v_argv, * v_pair;
|
||||
hawk_int_t i_argc;
|
||||
const hawk_ooch_t* file;
|
||||
@ -2391,7 +2391,7 @@ static hawk_ooi_t awk_rio_console (hawk_rtx_t* rtx, hawk_rio_cmd_t cmd, hawk_rio
|
||||
static void fini_rxtn (hawk_rtx_t* rtx)
|
||||
{
|
||||
rxtn_t* rxtn = GET_RXTN(rtx);
|
||||
/*xtn_t* xtn = (xtn_t*)GET_XTN(rtx->awk);*/
|
||||
/*xtn_t* xtn = (xtn_t*)GET_XTN(hawk_rtx_gethawk(rtx));*/
|
||||
|
||||
if (rxtn->c.in.files)
|
||||
{
|
||||
@ -2685,7 +2685,7 @@ static hawk_rtx_t* open_rtx_std (
|
||||
|
||||
rxtn = GET_RXTN(rtx);
|
||||
|
||||
if (rtx->awk->opt.trait & HAWK_RIO)
|
||||
if (rtx->hawk->opt.trait & HAWK_RIO)
|
||||
{
|
||||
if (hawk_htb_init(&rxtn->cmgrtab, hawk_getgem(awk), 256, 70, HAWK_SIZEOF(hawk_ooch_t), 1) <= -1)
|
||||
{
|
||||
@ -2990,7 +2990,7 @@ static int fnc_setioattr (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
|
||||
|
||||
/* no error is returned by hawk_rtx_strnum() if the strict option
|
||||
* of the second parameter is 0. so i don't check for an error */
|
||||
x = hawk_oochars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), ptr[2], len[2], &l, &r);
|
||||
x = hawk_oochars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr[2], len[2], &l, &r);
|
||||
if (x == 0) r = (hawk_flt_t)l;
|
||||
|
||||
ioattr = find_or_make_ioattr(rtx, &rxtn->cmgrtab, ptr[0], len[0]);
|
||||
|
@ -307,7 +307,7 @@ hawk_val_t* hawk_rtx_makenumorstrvalwithuchars (hawk_rtx_t* rtx, const hawk_uch_
|
||||
hawk_int_t l;
|
||||
hawk_flt_t r;
|
||||
|
||||
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), ptr, len, &l, &r);
|
||||
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
|
||||
if (x == 0) return hawk_rtx_makeintval(rtx, l);
|
||||
else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
|
||||
|
||||
@ -321,7 +321,7 @@ hawk_val_t* hawk_rtx_makenumorstrvalwithbchars (hawk_rtx_t* rtx, const hawk_bch_
|
||||
hawk_int_t l;
|
||||
hawk_flt_t r;
|
||||
|
||||
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), ptr, len, &l, &r);
|
||||
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
|
||||
if (x == 0) return hawk_rtx_makeintval(rtx, l);
|
||||
else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
|
||||
|
||||
@ -339,7 +339,7 @@ hawk_val_t* hawk_rtx_makenstrvalwithuchars (hawk_rtx_t* rtx, const hawk_uch_t* p
|
||||
hawk_int_t l;
|
||||
hawk_flt_t r;
|
||||
|
||||
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), ptr, len, &l, &r);
|
||||
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
|
||||
v = hawk_rtx_makestrvalwithuchars(rtx, ptr, len);
|
||||
|
||||
if (!v) return HAWK_NULL;
|
||||
@ -363,7 +363,7 @@ hawk_val_t* hawk_rtx_makenstrvalwithbchars (hawk_rtx_t* rtx, const hawk_bch_t* p
|
||||
hawk_int_t l;
|
||||
hawk_flt_t r;
|
||||
|
||||
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), ptr, len, &l, &r);
|
||||
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
|
||||
v = hawk_rtx_makestrvalwithbchars(rtx, ptr, len);
|
||||
|
||||
if (!v) return HAWK_NULL;
|
||||
@ -465,7 +465,7 @@ hawk_val_t* hawk_rtx_makenumormbsvalwithuchars (hawk_rtx_t* rtx, const hawk_uch_
|
||||
hawk_int_t l;
|
||||
hawk_flt_t r;
|
||||
|
||||
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), ptr, len, &l, &r);
|
||||
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
|
||||
if (x == 0) return hawk_rtx_makeintval(rtx, l);
|
||||
else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
|
||||
|
||||
@ -479,7 +479,7 @@ hawk_val_t* hawk_rtx_makenumormbsvalwithbchars (hawk_rtx_t* rtx, const hawk_bch_
|
||||
hawk_int_t l;
|
||||
hawk_flt_t r;
|
||||
|
||||
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), ptr, len, &l, &r);
|
||||
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
|
||||
if (x == 0) return hawk_rtx_makeintval(rtx, l);
|
||||
else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
|
||||
|
||||
@ -858,7 +858,7 @@ void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int cache)
|
||||
|
||||
/* code is just a pointer to a regular expression stored
|
||||
* in parse tree nodes. so don't free it.
|
||||
hawk_freerex (rtx->awk, ((hawk_val_rex_t*)val)->code[0], ((hawk_val_rex_t*)val)->code[1]);
|
||||
hawk_freerex (rtx->hawk, ((hawk_val_rex_t*)val)->code[0], ((hawk_val_rex_t*)val)->code[1]);
|
||||
*/
|
||||
|
||||
hawk_rtx_freemem (rtx, val);
|
||||
@ -1447,7 +1447,7 @@ int hawk_rtx_valtostr (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_rtx_valtostr_o
|
||||
return str_to_str(rtx, ((hawk_val_fun_t*)v)->fun->name.ptr, ((hawk_val_fun_t*)v)->fun->name.len, out);
|
||||
|
||||
case HAWK_VAL_MAP:
|
||||
if (rtx->awk->opt.trait & HAWK_FLEXMAP)
|
||||
if (rtx->hawk->opt.trait & HAWK_FLEXMAP)
|
||||
{
|
||||
return str_to_str(rtx, HAWK_T("#MAP"), 4, out);
|
||||
}
|
||||
@ -1651,7 +1651,7 @@ static int val_ref_to_num (hawk_rtx_t* rtx, const hawk_val_ref_t* ref, hawk_int_
|
||||
if (idx == 0)
|
||||
{
|
||||
return hawk_oochars_to_num(
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0),
|
||||
HAWK_OOECS_PTR(&rtx->inrec.line),
|
||||
HAWK_OOECS_LEN(&rtx->inrec.line),
|
||||
l, r
|
||||
@ -1660,7 +1660,7 @@ static int val_ref_to_num (hawk_rtx_t* rtx, const hawk_val_ref_t* ref, hawk_int_
|
||||
else if (idx <= rtx->inrec.nflds)
|
||||
{
|
||||
return hawk_oochars_to_num(
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0),
|
||||
rtx->inrec.flds[idx-1].ptr,
|
||||
rtx->inrec.flds[idx-1].len,
|
||||
l, r
|
||||
@ -1668,7 +1668,7 @@ static int val_ref_to_num (hawk_rtx_t* rtx, const hawk_val_ref_t* ref, hawk_int_
|
||||
}
|
||||
else
|
||||
{
|
||||
return hawk_oochars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0), HAWK_T(""), 0, l, r);
|
||||
return hawk_oochars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), HAWK_T(""), 0, l, r);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1715,7 +1715,7 @@ int hawk_rtx_valtonum (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l, hawk
|
||||
|
||||
case HAWK_VAL_STR:
|
||||
return hawk_oochars_to_num(
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0),
|
||||
((hawk_val_str_t*)v)->val.ptr,
|
||||
((hawk_val_str_t*)v)->val.len,
|
||||
l, r
|
||||
@ -1723,7 +1723,7 @@ int hawk_rtx_valtonum (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l, hawk
|
||||
|
||||
case HAWK_VAL_MBS:
|
||||
return hawk_bchars_to_num(
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, (hawk->opt.trait & HAWK_STRIPSTRSPC), 0),
|
||||
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0),
|
||||
((hawk_val_mbs_t*)v)->val.ptr,
|
||||
((hawk_val_mbs_t*)v)->val.len,
|
||||
l, r
|
||||
@ -1734,7 +1734,7 @@ int hawk_rtx_valtonum (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l, hawk
|
||||
goto invalid;
|
||||
|
||||
case HAWK_VAL_MAP:
|
||||
if (rtx->awk->opt.trait & HAWK_FLEXMAP)
|
||||
if (rtx->hawk->opt.trait & HAWK_FLEXMAP)
|
||||
{
|
||||
*l = HAWK_HTB_SIZE(((hawk_val_map_t*)v)->map);
|
||||
return 0; /* long */
|
||||
@ -2004,7 +2004,7 @@ int hawk_rtx_setrefval (hawk_rtx_t* rtx, hawk_val_ref_t* ref, hawk_val_t* val)
|
||||
/* new value: map, old value: nil or map => ok */
|
||||
if (rref_vtype != HAWK_VAL_NIL && rref_vtype != HAWK_VAL_MAP)
|
||||
{
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
|
||||
{
|
||||
/* cannot change a scalar value to a map */
|
||||
hawk_rtx_seterrnum (rtx, HAWK_NULL, HAWK_ESCALARTOMAP);
|
||||
@ -2017,7 +2017,7 @@ int hawk_rtx_setrefval (hawk_rtx_t* rtx, hawk_val_ref_t* ref, hawk_val_t* val)
|
||||
/* new value: scalar, old value: nil or scalar => ok */
|
||||
if (rref_vtype == HAWK_VAL_MAP)
|
||||
{
|
||||
if (!(rtx->awk->opt.trait & HAWK_FLEXMAP))
|
||||
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
|
||||
{
|
||||
hawk_rtx_seterrnum (rtx, HAWK_NULL, HAWK_EMAPTOSCALAR);
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user