-
Notifications
You must be signed in to change notification settings - Fork 33
Open
Description
The following is the smallest example of a lambda I could come up with (calling foo() and calling baz() will have the same result)
contract "lambdaTest" {
// this will be our lambda
define public @foo() {
entry:
ret 1234
}
// In a real world setting, this function would return a different lambda based on some condition
define public @bar(){
entry:
%this = call @iele.address()
%f = calladdress @foo at %this
ret %f
}
// fetch which lambda to use from bar and then call it
define public @baz() {
entry:
%f = call @bar()
%this = call @iele.address()
%gas = call @iele.gas()
%status, %result = call %f at %this () send 0, gaslimit %gas
ret %result
}
define @init() {
entry:
ret void
}
}
Unfortunately this is not very pretty because
Calladdressrequires an "at" instead of implicitly using@iele.address()- You cannot use
callon a register. You must usecall at
I don't know why these restrictions exist.
Anyways this is a cool feature and it's much prettier than what you have to do in Solidity which involves mangling byte arrays 👍
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels