fixed a bug of not checking a parameter name against the function name
This commit is contained in:
parent
c31adc3f7c
commit
b9d3b490a2
@ -1,3 +0,0 @@
|
|||||||
|
|
||||||
function f(f) { print f; }
|
|
||||||
BEGIN { f("hello"); }
|
|
@ -1,5 +0,0 @@
|
|||||||
function f(f)
|
|
||||||
{
|
|
||||||
print f;
|
|
||||||
f("my hello");
|
|
||||||
}
|
|
@ -1,3 +0,0 @@
|
|||||||
# should print 50
|
|
||||||
function fn(f) { f = 20; }
|
|
||||||
BEGIN { f = 50; fn(100); print f; }
|
|
@ -1,3 +0,0 @@
|
|||||||
# A function and a named variable cannot have the same name.
|
|
||||||
function a () { }
|
|
||||||
BEGIN { a = 20; }
|
|
@ -1,3 +0,0 @@
|
|||||||
function a () { }
|
|
||||||
BEGIN { local a; a = 20; }
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
global a;
|
|
||||||
function a () { }
|
|
@ -1,4 +0,0 @@
|
|||||||
function fn () { a = 20; return a;}
|
|
||||||
global a;
|
|
||||||
BEGIN { a = 30; print fn (); print a; }
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
global x;
|
|
||||||
BEGIN {
|
|
||||||
x = 1;
|
|
||||||
{
|
|
||||||
local x;
|
|
||||||
x = 2;
|
|
||||||
{
|
|
||||||
local x;
|
|
||||||
x = 3;
|
|
||||||
print x;
|
|
||||||
}
|
|
||||||
print x;
|
|
||||||
}
|
|
||||||
print x;
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: parse.c 214 2009-06-27 02:50:54Z hyunghwan.chung $
|
* $Id: parse.c 215 2009-06-27 05:52:54Z hyunghwan.chung $
|
||||||
*
|
*
|
||||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||||
|
|
||||||
@ -930,13 +930,16 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
|||||||
/* NOTE: the following is not a conflict.
|
/* NOTE: the following is not a conflict.
|
||||||
* so the parameter is not checked against
|
* so the parameter is not checked against
|
||||||
* global variables.
|
* global variables.
|
||||||
* gbl x;
|
* global x;
|
||||||
* function f (x) { print x; }
|
* function f (x) { print x; }
|
||||||
* x in print x is a parameter
|
* x in print x is a parameter
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* check if a parameter conflicts with other parameters */
|
/* check if a parameter conflicts with the function
|
||||||
if (qse_lda_search (awk->parse.params,
|
* name or other parameters */
|
||||||
|
if (qse_strxncmp (
|
||||||
|
param, param_len, name_dup, name_len) == 0 ||
|
||||||
|
qse_lda_search (awk->parse.params,
|
||||||
0, param, param_len) != QSE_LDA_NIL)
|
0, param, param_len) != QSE_LDA_NIL)
|
||||||
{
|
{
|
||||||
QSE_AWK_FREE (awk, name_dup);
|
QSE_AWK_FREE (awk, name_dup);
|
||||||
@ -989,12 +992,16 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
|
|||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_token(awk) <= -1)
|
do
|
||||||
{
|
{
|
||||||
QSE_AWK_FREE (awk, name_dup);
|
if (get_token(awk) <= -1)
|
||||||
qse_lda_clear (awk->parse.params);
|
{
|
||||||
return QSE_NULL;
|
QSE_AWK_FREE (awk, name_dup);
|
||||||
|
qse_lda_clear (awk->parse.params);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
while (MATCH(awk,TOKEN_NEWLINE));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_token(awk) <= -1)
|
if (get_token(awk) <= -1)
|
||||||
@ -3723,17 +3730,22 @@ static qse_awk_nde_t* parse_fncall (
|
|||||||
|
|
||||||
if (!MATCH(awk,TOKEN_COMMA))
|
if (!MATCH(awk,TOKEN_COMMA))
|
||||||
{
|
{
|
||||||
if (head != QSE_NULL) qse_awk_clrpt (awk, head);
|
if (head != QSE_NULL)
|
||||||
|
qse_awk_clrpt (awk, head);
|
||||||
SETERRTOK (awk, QSE_AWK_ECOMMA);
|
SETERRTOK (awk, QSE_AWK_ECOMMA);
|
||||||
return QSE_NULL;
|
return QSE_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_token(awk) <= -1)
|
do
|
||||||
{
|
{
|
||||||
if (head != QSE_NULL) qse_awk_clrpt (awk, head);
|
if (get_token(awk) <= -1)
|
||||||
return QSE_NULL;
|
{
|
||||||
|
if (head != QSE_NULL)
|
||||||
|
qse_awk_clrpt (awk, head);
|
||||||
|
return QSE_NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
while (MATCH(awk,TOKEN_NEWLINE));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
ld zero # initialize sum to zero
|
|
||||||
st sum
|
|
||||||
loop get # read a number
|
|
||||||
jz done # no more input if number is zero
|
|
||||||
add sum # add in accumulated sum
|
|
||||||
st sum # store new value back in sum
|
|
||||||
j loop # go back and read another number
|
|
||||||
|
|
||||||
done ld sum # print sum
|
|
||||||
put
|
|
||||||
halt
|
|
||||||
|
|
||||||
zero const 0
|
|
||||||
sum const
|
|
Loading…
Reference in New Issue
Block a user