implemented @pragma implicit on/off in awk
This commit is contained in:
parent
72c27c7e48
commit
eb9413907b
@ -216,6 +216,9 @@ struct qse_awk_t
|
||||
qse_size_t incl;
|
||||
} depth;
|
||||
|
||||
/* current pragma values */
|
||||
int pragmas;
|
||||
|
||||
/* function calls */
|
||||
qse_htb_t* funs;
|
||||
|
||||
|
@ -347,6 +347,7 @@ void qse_awk_clear (qse_awk_t* awk)
|
||||
awk->parse.depth.loop = 0;
|
||||
awk->parse.depth.expr = 0;
|
||||
awk->parse.depth.incl = 0;
|
||||
awk->parse.pragmas = (awk->opt.trait & QSE_AWK_IMPLICIT);
|
||||
|
||||
/* clear parse trees */
|
||||
/*awk->tree.ngbls_base = 0;
|
||||
|
@ -1,3 +1,29 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
Copyright (c) 2006-2014 Chung, Hyung-Hwan. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* this file is supposed to be included by misc.c */
|
||||
|
||||
|
||||
|
@ -118,6 +118,7 @@ enum tok_t
|
||||
TOK_XGLOBAL,
|
||||
TOK_XLOCAL,
|
||||
TOK_XINCLUDE,
|
||||
TOK_XPRAGMA,
|
||||
TOK_XABORT,
|
||||
TOK_XRESET,
|
||||
|
||||
@ -262,6 +263,7 @@ static kwent_t kwtab[] =
|
||||
{ { QSE_T("@global"), 7 }, TOK_XGLOBAL, 0 },
|
||||
{ { QSE_T("@include"), 8 }, TOK_XINCLUDE, 0 },
|
||||
{ { QSE_T("@local"), 6 }, TOK_XLOCAL, 0 },
|
||||
{ { QSE_T("@pragma"), 7 }, TOK_XPRAGMA, 0 },
|
||||
{ { QSE_T("@reset"), 6 }, TOK_XRESET, 0 },
|
||||
{ { QSE_T("BEGIN"), 5 }, TOK_BEGIN, QSE_AWK_PABLOCK },
|
||||
{ { QSE_T("END"), 3 }, TOK_END, QSE_AWK_PABLOCK },
|
||||
@ -724,7 +726,9 @@ static int end_include (qse_awk_t* awk)
|
||||
awk->sio.inp = awk->sio.inp->prev;
|
||||
|
||||
QSE_ASSERT (cur->name != QSE_NULL);
|
||||
QSE_AWK_FREE (awk, cur);
|
||||
/* restore the pragma values */
|
||||
awk->parse.pragmas = cur->pragmas;
|
||||
qse_awk_freemem (awk, cur);
|
||||
awk->parse.depth.incl--;
|
||||
|
||||
if (x != 0)
|
||||
@ -787,7 +791,7 @@ static int begin_include (qse_awk_t* awk)
|
||||
arg->name = (const qse_char_t*)(link + 1);
|
||||
arg->line = 1;
|
||||
arg->colm = 1;
|
||||
arg->pragmas = 0;
|
||||
|
||||
|
||||
/* let the argument's prev field point to the current */
|
||||
arg->prev = awk->sio.inp;
|
||||
@ -800,6 +804,13 @@ static int begin_include (qse_awk_t* awk)
|
||||
goto oops;
|
||||
}
|
||||
|
||||
/* store the pragma value */
|
||||
arg->pragmas = awk->parse.pragmas;
|
||||
/* but don't change awk->parse.pragmas. it means the included file inherits
|
||||
* the existing progma values.
|
||||
awk->parse.pragmas = (awk->option.trait & QSE_AWK_IMPLICIT);
|
||||
*/
|
||||
|
||||
/* i update the current pointer after opening is successful */
|
||||
awk->sio.inp = arg;
|
||||
awk->parse.depth.incl++;
|
||||
@ -849,9 +860,7 @@ static int parse_progunit (qse_awk_t* awk)
|
||||
ngbls = awk->tree.ngbls;
|
||||
if (collect_globals(awk) == QSE_NULL)
|
||||
{
|
||||
qse_arr_delete (
|
||||
awk->parse.gbls, ngbls,
|
||||
QSE_ARR_SIZE(awk->parse.gbls) - ngbls);
|
||||
qse_arr_delete (awk->parse.gbls, ngbls, QSE_ARR_SIZE(awk->parse.gbls) - ngbls);
|
||||
awk->tree.ngbls = ngbls;
|
||||
return -1;
|
||||
}
|
||||
@ -880,6 +889,55 @@ static int parse_progunit (qse_awk_t* awk)
|
||||
* inclusion. the loop in parse() proceeds to call
|
||||
* parse_progunit() */
|
||||
}
|
||||
else if (MATCH(awk, TOK_XPRAGMA))
|
||||
{
|
||||
qse_cstr_t name;
|
||||
|
||||
if (get_token(awk) <= -1) return -1;
|
||||
if (!MATCH(awk, TOK_IDENT))
|
||||
{
|
||||
qse_awk_seterrfmt (awk, QSE_AWK_EIDENT, &awk->ptok.loc, QSE_T("identifier expected for '@pragma'"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
name.len = QSE_STR_LEN(awk->tok.name);
|
||||
name.ptr = QSE_STR_PTR(awk->tok.name);
|
||||
|
||||
if (qse_strxcmp(name.ptr, name.len, QSE_T("implicit")) == 0)
|
||||
{
|
||||
|
||||
if (get_token(awk) <= -1) return -1;
|
||||
if (!MATCH(awk, TOK_IDENT))
|
||||
{
|
||||
error_ident_on_off_expected_for_implicit:
|
||||
qse_awk_seterrfmt (awk, QSE_AWK_EIDENT, &awk->ptok.loc, QSE_T("identifier 'on' or 'off' expected for 'implicit'"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
name.len = QSE_STR_LEN(awk->tok.name);
|
||||
name.ptr = QSE_STR_PTR(awk->tok.name);
|
||||
if (qse_strxcmp(name.ptr, name.len, QSE_T("on")) == 0)
|
||||
{
|
||||
awk->parse.pragmas |= QSE_AWK_IMPLICIT;
|
||||
}
|
||||
else if (qse_strxcmp(name.ptr, name.len, QSE_T("off")) == 0)
|
||||
{
|
||||
awk->parse.pragmas &= ~QSE_AWK_IMPLICIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto error_ident_on_off_expected_for_implicit;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qse_awk_seterrfmt (awk, QSE_AWK_EIDENT, &awk->ptok.loc, QSE_T("unknown @pragma identifier - %.*s"), (int)name.len, name.ptr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (get_token(awk) <= -1) return -1;
|
||||
if (MATCH(awk,TOK_SEMICOLON) && get_token(awk) <= -1) return -1;
|
||||
}
|
||||
else if (MATCH(awk, TOK_FUNCTION))
|
||||
{
|
||||
awk->parse.id.block = PARSE_FUNCTION;
|
||||
@ -914,8 +972,7 @@ static int parse_progunit (qse_awk_t* awk)
|
||||
if (parse_begin(awk) == QSE_NULL) return -1;
|
||||
|
||||
/* skip a semicolon after an action block if any */
|
||||
if (MATCH(awk,TOK_SEMICOLON) &&
|
||||
get_token (awk) <= -1) return -1;
|
||||
if (MATCH(awk, TOK_SEMICOLON) && get_token(awk) <= -1) return -1;
|
||||
}
|
||||
else if (MATCH(awk, TOK_END))
|
||||
{
|
||||
@ -946,8 +1003,7 @@ static int parse_progunit (qse_awk_t* awk)
|
||||
if (parse_end(awk) == QSE_NULL) return -1;
|
||||
|
||||
/* skip a semicolon after an action block if any */
|
||||
if (MATCH(awk,TOK_SEMICOLON) &&
|
||||
get_token (awk) <= -1) return -1;
|
||||
if (MATCH(awk,TOK_SEMICOLON) && get_token (awk) <= -1) return -1;
|
||||
}
|
||||
else if (MATCH(awk, TOK_LBRACE))
|
||||
{
|
||||
@ -962,8 +1018,7 @@ static int parse_progunit (qse_awk_t* awk)
|
||||
if (parse_action_block(awk, QSE_NULL, 0) == QSE_NULL) return -1;
|
||||
|
||||
/* skip a semicolon after an action block if any */
|
||||
if (MATCH(awk,TOK_SEMICOLON) &&
|
||||
get_token (awk) <= -1) return -1;
|
||||
if (MATCH(awk, TOK_SEMICOLON) && get_token(awk) <= -1) return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1442,8 +1497,7 @@ static qse_awk_chain_t* parse_action_block (
|
||||
return chain;
|
||||
}
|
||||
|
||||
static qse_awk_nde_t* parse_block (
|
||||
qse_awk_t* awk, const qse_awk_loc_t* xloc, int istop)
|
||||
static qse_awk_nde_t* parse_block (qse_awk_t* awk, const qse_awk_loc_t* xloc, int istop)
|
||||
{
|
||||
qse_awk_nde_t* head, * curr, * nde;
|
||||
qse_awk_nde_blk_t* block;
|
||||
@ -5099,7 +5153,8 @@ static qse_awk_nde_t* parse_primary_ident_noseg (qse_awk_t* awk, const qse_awk_l
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (awk->opt.trait & QSE_AWK_IMPLICIT)
|
||||
/*else if (awk->opt.trait & QSE_AWK_IMPLICIT) */
|
||||
else if (awk->parse.pragmas & QSE_AWK_IMPLICIT)
|
||||
{
|
||||
/* if the name is followed by ( without spaces,
|
||||
* it's considered a function call though the name
|
||||
@ -5420,7 +5475,8 @@ static qse_awk_nde_t* parse_hashidx (qse_awk_t* awk, const qse_cstr_t* name, con
|
||||
return (qse_awk_nde_t*)nde;
|
||||
}
|
||||
|
||||
if (awk->opt.trait & QSE_AWK_IMPLICIT)
|
||||
/*if (awk->opt.trait & QSE_AWK_IMPLICIT) */
|
||||
if (awk->parse.pragmas & QSE_AWK_IMPLICIT)
|
||||
{
|
||||
int fnname = isfnname(awk, name);
|
||||
switch (fnname)
|
||||
@ -6524,74 +6580,44 @@ static int deparse (qse_awk_t* awk)
|
||||
|
||||
qse_awk_getkwname (awk, QSE_AWK_KWID_XGLOBAL, &kw);
|
||||
if (qse_awk_putsrcstrn(awk,kw.ptr,kw.len) <= -1 ||
|
||||
qse_awk_putsrcstr (awk, QSE_T(" ")) <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
qse_awk_putsrcstr (awk, QSE_T(" ")) <= -1) EXIT_DEPARSE ();
|
||||
|
||||
for (i = awk->tree.ngbls_base; i < awk->tree.ngbls - 1; i++)
|
||||
{
|
||||
if (!(awk->opt.trait & QSE_AWK_IMPLICIT))
|
||||
{
|
||||
/* use the actual name if no named variable
|
||||
* is allowed */
|
||||
if (qse_awk_putsrcstrn (awk,
|
||||
QSE_ARR_DPTR(awk->parse.gbls,i),
|
||||
QSE_ARR_DLEN(awk->parse.gbls,i)) <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
/* use the actual name if no named variable is allowed */
|
||||
if (qse_awk_putsrcstrn (awk, QSE_ARR_DPTR(awk->parse.gbls, i), QSE_ARR_DLEN(awk->parse.gbls, i)) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
else
|
||||
{
|
||||
len = qse_awk_inttostr (
|
||||
awk, (qse_awk_int_t)i,
|
||||
10, QSE_T("__g"), tmp, QSE_COUNTOF(tmp));
|
||||
len = qse_awk_inttostr (awk, (qse_awk_int_t)i, 10, QSE_T("__g"), tmp, QSE_COUNTOF(tmp));
|
||||
QSE_ASSERT (len != (qse_size_t)-1);
|
||||
if (qse_awk_putsrcstrn (awk, tmp, len) <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
if (qse_awk_putsrcstrn (awk, tmp, len) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
|
||||
if (qse_awk_putsrcstr (awk, QSE_T(", ")) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (qse_awk_putsrcstr (awk, QSE_T(", ")) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
|
||||
if (!(awk->opt.trait & QSE_AWK_IMPLICIT))
|
||||
{
|
||||
if (qse_awk_putsrcstrn (awk,
|
||||
QSE_ARR_DPTR(awk->parse.gbls,i),
|
||||
QSE_ARR_DLEN(awk->parse.gbls,i)) <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
/* use the actual name if no named variable is allowed */
|
||||
if (qse_awk_putsrcstrn(awk, QSE_ARR_DPTR(awk->parse.gbls,i), QSE_ARR_DLEN(awk->parse.gbls,i)) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
else
|
||||
{
|
||||
len = qse_awk_inttostr (
|
||||
awk, (qse_awk_int_t)i,
|
||||
10, QSE_T("__g"), tmp, QSE_COUNTOF(tmp));
|
||||
len = qse_awk_inttostr(awk, (qse_awk_int_t)i, 10, QSE_T("__g"), tmp, QSE_COUNTOF(tmp));
|
||||
QSE_ASSERT (len != (qse_size_t)-1);
|
||||
if (qse_awk_putsrcstrn (awk, tmp, len) <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
if (qse_awk_putsrcstrn (awk, tmp, len) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
|
||||
if (awk->opt.trait & QSE_AWK_CRLF)
|
||||
{
|
||||
if (qse_awk_putsrcstr (awk, QSE_T(";\r\n\r\n")) <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
if (qse_awk_putsrcstr(awk, QSE_T(";\r\n\r\n")) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (qse_awk_putsrcstr (awk, QSE_T(";\n\n")) <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
if (qse_awk_putsrcstr(awk, QSE_T(";\n\n")) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
}
|
||||
|
||||
@ -6601,10 +6627,7 @@ static int deparse (qse_awk_t* awk)
|
||||
df.ret = 0;
|
||||
|
||||
qse_htb_walk (awk->tree.funs, deparse_func, &df);
|
||||
if (df.ret <= -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
if (df.ret <= -1) EXIT_DEPARSE ();
|
||||
|
||||
for (nde = awk->tree.begin; nde != QSE_NULL; nde = nde->next)
|
||||
{
|
||||
@ -6629,8 +6652,7 @@ static int deparse (qse_awk_t* awk)
|
||||
{
|
||||
if (chain->pattern != QSE_NULL)
|
||||
{
|
||||
if (qse_awk_prnptnpt (awk, chain->pattern) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (qse_awk_prnptnpt (awk, chain->pattern) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
|
||||
if (chain->action == QSE_NULL)
|
||||
@ -6638,32 +6660,26 @@ static int deparse (qse_awk_t* awk)
|
||||
/* blockless pattern */
|
||||
if (awk->opt.trait & QSE_AWK_CRLF)
|
||||
{
|
||||
if (put_char (awk, QSE_T('\r')) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (put_char (awk, QSE_T('\r')) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
|
||||
if (put_char (awk, QSE_T('\n')) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (put_char (awk, QSE_T('\n')) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (chain->pattern != QSE_NULL)
|
||||
{
|
||||
if (put_char (awk, QSE_T(' ')) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (put_char (awk, QSE_T(' ')) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
if (qse_awk_prnpt (awk, chain->action) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (qse_awk_prnpt (awk, chain->action) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
|
||||
if (awk->opt.trait & QSE_AWK_CRLF)
|
||||
{
|
||||
if (put_char (awk, QSE_T('\r')) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (put_char (awk, QSE_T('\r')) <= -1) EXIT_DEPARSE ();
|
||||
}
|
||||
|
||||
if (put_char (awk, QSE_T('\n')) <= -1)
|
||||
EXIT_DEPARSE ();
|
||||
if (put_char (awk, QSE_T('\n')) <= -1) EXIT_DEPARSE ();
|
||||
|
||||
chain = chain->next;
|
||||
}
|
||||
@ -6692,13 +6708,11 @@ static int deparse (qse_awk_t* awk)
|
||||
|
||||
exit_deparse:
|
||||
if (n == 0) CLRERR (awk);
|
||||
if (awk->sio.outf (
|
||||
awk, QSE_AWK_SIO_CLOSE, &awk->sio.arg, QSE_NULL, 0) != 0)
|
||||
if (awk->sio.outf(awk, QSE_AWK_SIO_CLOSE, &awk->sio.arg, QSE_NULL, 0) != 0)
|
||||
{
|
||||
if (n == 0)
|
||||
{
|
||||
if (ISNOERR(awk))
|
||||
SETERR_ARG (awk, QSE_AWK_ECLOSE, QSE_T("<SOUT>"), 6);
|
||||
if (ISNOERR(awk)) SETERR_ARG (awk, QSE_AWK_ECLOSE, QSE_T("<SOUT>"), 6);
|
||||
n = -1;
|
||||
}
|
||||
}
|
||||
@ -6706,8 +6720,7 @@ exit_deparse:
|
||||
return n;
|
||||
}
|
||||
|
||||
static qse_htb_walk_t deparse_func (
|
||||
qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
|
||||
static qse_htb_walk_t deparse_func (qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
|
||||
{
|
||||
struct deparse_func_t* df = (struct deparse_func_t*)arg;
|
||||
qse_awk_fun_t* fun = (qse_awk_fun_t*)QSE_HTB_VPTR(pair);
|
||||
|
@ -34,6 +34,7 @@ enum qse_awk_kwid_t
|
||||
QSE_AWK_KWID_XGLOBAL,
|
||||
QSE_AWK_KWID_XINCLUDE,
|
||||
QSE_AWK_KWID_XLOCAL,
|
||||
QSE_AWK_KWID_XPRAGMA,
|
||||
QSE_AWK_KWID_XRESET,
|
||||
QSE_AWK_KWID_BEGIN,
|
||||
QSE_AWK_KWID_END,
|
||||
|
@ -574,7 +574,8 @@ static int print_expr (qse_awk_t* awk, qse_awk_nde_t* nde)
|
||||
|
||||
if (px->id.idxa != (qse_size_t)-1)
|
||||
{
|
||||
|
||||
/* deparsing is global. so i can't honor awk->parse.pragmas
|
||||
* which can change in each input file. let me just check awk->opt.trait */
|
||||
if (!(awk->opt.trait & QSE_AWK_IMPLICIT))
|
||||
{
|
||||
/* no implicit(named) variable is allowed.
|
||||
@ -616,6 +617,8 @@ static int print_expr (qse_awk_t* awk, qse_awk_nde_t* nde)
|
||||
|
||||
if (px->id.idxa != (qse_size_t)-1)
|
||||
{
|
||||
/* deparsing is global. so i can't honor awk->parse.pragmas
|
||||
* which can change in each input file. let me just check awk->opt.trait */
|
||||
if (!(awk->opt.trait & QSE_AWK_IMPLICIT))
|
||||
{
|
||||
/* no implicit(named) variable is allowed.
|
||||
|
@ -1,3 +1,29 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
Copyright (c) 2006-2014 Chung, Hyung-Hwan. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* this file is supposed to be included by val.c */
|
||||
|
||||
int awk_rtx_strtonum (qse_awk_rtx_t* rtx, int option, const char_t* ptr, qse_size_t len, qse_awk_int_t* l, qse_awk_flt_t* r)
|
||||
|
Loading…
Reference in New Issue
Block a user