Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: event exports #25

Closed
wants to merge 25 commits into from
Closed

Conversation

charles-cooper
Copy link
Owner

What I did

clean diff

How I did it

How to verify it

Commit message

Commit message for the final, squashed PR. (Optional, but reviewers will appreciate it! Please see our commit message style guide for what we would ideally like to see in a commit message.)

Description for the changelog

Cute Animal Picture

Put a link to a cute animal picture inside the parenthesis-->

Copy link

@fubuloubu fubuloubu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More logic changes than I would expect to see given the linked issue

@@ -167,7 +167,7 @@ pass_stmt: _PASS
break_stmt: _BREAK
continue_stmt: _CONTINUE

log_stmt: _LOG NAME "(" [arguments] ")"
log_stmt: _LOG (NAME | variable_access) "(" [arguments] ")"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was this not failing before?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, previously only log Event() was allowed

@@ -728,6 +728,10 @@ def validate(self):
class Log(Stmt):
__slots__ = ("value",)

def validate(self):
if not isinstance(self.value, Call):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a test that covers this?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yea, it's in the structure exception tests somewhere

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, i thought i saw it before but maybe i hallucinated, so i added one here 9ed427f

add `exports:` declaration to the language. this allows users to
directly export functions marked `@external` from libraries instead of
writing `@external` wrapper functions (and consequently, for library
authors to define the external interface for their modules).

important refactors:
- remove expanded getters from module AST, change them to annotation on
  public VariablDecls.
- redo order of node visitation in ModuleAnalyzer
- refactor `InterfaceT.validate_implements()` to handle exported
  functions
- add `exposed_functions` property to `ModuleT` which reflects the
  runtime functions exposed in the selector table
- refactor IR generation to use new reachability analysis

misc:
- remove Module.add_to_body, Module.remove_from_body as they are dead
  now
- move VariableDecl validation to vyper/ast/nodes.py
- improve call-site annotations for error messages
- improve annotations for exceptions which reference a previously-
  declared node.
- improve call graph analysis
  - called_functions and reachable_internal_functions start out as None
  - move analyze_call_graph into standalone function instead of method
- tinker with _add_exposed_function to ensure we have all exposed
  functions by the time we get to ImplementsDecl
rely on analysis, not declared events
change the event member names in the builtin interfaces
rename a test file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants