Skip to content

Wrong lamba parameter parsing #102

@ilpincy

Description

@ilpincy

The following code listings generate different behavior. (A) is correct, (B) is wrong.

# Code (A), correct
f = function(a,b,c) {
  log(a,";",b,";",c)
}
f(1,2,3)
# Code (B), wrong
if(1) {
  f = function(a,b,c) {
    log(a,";",b,";",c)
  }
}
f(1,2,3)
# Assembly (A): correct, notice the lload statements
52:	pushnil	|3,7,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
53:	pushs 1	|3,7,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
58:	gload	|3,7,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
59:	lload 1	|3,9,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
64:	pushs 2	|3,10,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
69:	lload 2	|3,15,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
74:	pushs 2	|3,16,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
79:	lload 3	|3,21,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
84:	pushi 5	|4,2,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
89:	callc	|4,2,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
90:	pop	|4,2,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
# Assembly (B): correct, notice the lload statements
62:	pushnil	|3,7,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
63:	pushs 1	|3,7,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
68:	gload	|3,7,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
69:	lload 0	|3,9,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
74:	pushs 2	|3,10,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
79:	lload 1	|3,15,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
84:	pushs 2	|3,16,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
89:	lload 2	|3,21,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
94:	pushi 5	|4,2,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
99:	callc	|4,2,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz
100:	pop	|4,2,/Users/cpinciroli/Fabrica/Buzz/buzz/src/testing/testfunction.bzz

The problem is related to parsing, in particular when a lambda is created inside a block (in this case the if), but the if is not itself into a function().

I don't have a fix yet, need to check how to solve it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions