1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-02-20 17:29:11 +00:00

Fix DEFCNT for lambda functions

This commit is contained in:
David Schmenk 2017-08-07 07:34:56 -07:00
parent f03c373ab3
commit 50f066e527
2 changed files with 13 additions and 3 deletions

View File

@ -121,6 +121,11 @@ export def main(range)
lambda = &(x,y) x * y
puti(lambda(2,3));putln
end
def dummy(zz)#0
puts("dummy func"); putln
end
puti(array[0]);putc(' ')
puti(array[1]);putc(' ')
puti(array[2]);putc(' ')

View File

@ -1485,7 +1485,6 @@ int parse_lambda(void)
* Parse parameters and return value count
*/
cfnparms = 0;
func_tag = tag_new(DEF_TYPE);
if (scan() == OPEN_PAREN_TOKEN)
{
do
@ -1527,13 +1526,19 @@ int parse_lambda(void)
lambda_seq[lambda_cnt] = parse_expr(NULL, NULL);
scan_rewind(tokenstr);
}
lambda_cparams[lambda_cnt] = cfnparms;
lambda_tag[lambda_cnt] = func_tag;
sprintf(lambda_id[lambda_cnt], "_LAMBDA%04d", lambda_num++);
if (idglobal_lookup(lambda_id[lambda_cnt], strlen(lambda_id[lambda_cnt])) >= 0)
{
func_tag = lambda_tag[lambda_cnt];
idfunc_set(lambda_id[lambda_cnt], strlen(lambda_id[lambda_cnt]), DEF_TYPE | funcparms_type(cfnparms), func_tag); // Override any predef type & tag
}
else
{
func_tag = tag_new(DEF_TYPE);
lambda_tag[lambda_cnt] = func_tag;
lambda_cparams[lambda_cnt] = cfnparms;
idfunc_add(lambda_id[lambda_cnt], strlen(lambda_id[lambda_cnt]), DEF_TYPE | funcparms_type(cfnparms), func_tag);
}
lambda_cnt++;
idlocal_restore();
return (func_tag);