read the function name in attrs and don't invoke x/y

When invoking a custom `x` or `y` function for function declaration, the said custom attribute should be the name of the function itself, found on the scope, not `x` or `y` on the scope. This allows for more flexibility.

Furthermore, invoking the function will return a value and we want a function declaration.