7cce1bd124
interfaces, impls, and constrained generics (basics) ( #1073 )
...
* interfaces, impls, and constrained generics (basics)
* separate type checking into declare vs. type check, removing redundancy
* external impls
* added impl scopes to handle generics calling generics
* cleanup
* more cleanup
* Update executable_semantics/testdata/interface/external_impl_point_vector.carbon
Co-authored-by: josh11b <josh11b@users.noreply.github.com >
* Update executable_semantics/testdata/interface/generic_call_generic.carbon
Co-authored-by: josh11b <josh11b@users.noreply.github.com >
* Update executable_semantics/testdata/interface/tuple_vector_add_scale.carbon
Co-authored-by: josh11b <josh11b@users.noreply.github.com >
* Update executable_semantics/testdata/interface/vector_point_add_scale.carbon
Co-authored-by: josh11b <josh11b@users.noreply.github.com >
* change ImplementationDeclaration to ImplDeclaration
* remove impl_type_value
* split NamedEntity into two
* changed GetName to be a free function
* adding comments
* more edits to respond to review
* introduce ImplBinding, remove punning on GenericBinding
* new test case and some minor edits
* refactor GetMember and GetField to move impl logic to interpreter
* remove commennt
* change EntityView to ImplBinding in FieldAccess...
* move ImplBinding
* review response
* added example to impl_scope.h
* minor edits
* Update executable_semantics/interpreter/field_path.h
Co-authored-by: Geoff Romer <gromer@google.com >
* Update executable_semantics/interpreter/value.cpp
Co-authored-by: Geoff Romer <gromer@google.com >
* Update executable_semantics/interpreter/interpreter.cpp
Co-authored-by: Geoff Romer <gromer@google.com >
* Update executable_semantics/ast/expression.h
Co-authored-by: Geoff Romer <gromer@google.com >
* Update executable_semantics/ast/expression.h
Co-authored-by: Geoff Romer <gromer@google.com >
* Update executable_semantics/ast/generic_binding.h
Co-authored-by: Geoff Romer <gromer@google.com >
* more edits from review
* review response
* Update executable_semantics/ast/static_scope.h
Co-authored-by: Geoff Romer <gromer@google.com >
* remove ImplType, renamed node_view to value_node
Co-authored-by: josh11b <josh11b@users.noreply.github.com >
Co-authored-by: Geoff Romer <gromer@google.com >
2022-03-02 15:58:45 -05:00
Geoff Romer
461e178273
Store named constant values in the AST ( #1011 )
...
This enables us to stop using `Env` in the typechecker. As a byproduct, this commit also restructures the interpreter to handle run-time global initialization as part of ordinary execution, using the Action stack.
2022-01-13 11:07:28 -08:00
Geoff Romer
e533442028
Use /* instead of #if 0 for NamedEntity interface ( #1006 )
2022-01-06 10:00:10 -08:00
Geoff Romer
50263483d8
Add name accessor to NamedEntityView ( #994 )
...
This required changing BindingPattern::name() to return `"_"` instead of nullopt when representing a `"_"` binding.
Semi-related drive-by fixes:
- Update BindingPlaceholderValue to expose a NamedEntity instead of a string name, and stop exposing its type.
- Drop the unused SourceLocation parameter of ValueEqual
2022-01-04 15:53:11 -08:00
Geoff Romer
c89ce1d570
Handle identifier value category properly. ( #986 )
2021-12-15 13:27:36 -08:00
Geoff Romer
8e6c209a28
Use resolved names in typechecker ( #974 )
...
As a byproduct, replace NamedEntity with a type-erasing wrapper NamedEntityView, eliminate virtual inheritance from the AST, and eliminate interfaces from gen_rtti.
2021-12-13 16:35:30 -08:00
Geoff Romer
f75b4d322f
Handle use-before-declare in static name lookup ( #967 )
...
Also remove inheritance from NamedEntity for some classes that don't need it.
2021-12-03 13:52:31 -08:00
Jon Meow
92903afbd5
clang-tidy pass on executable_semantics ( #963 )
2021-12-02 12:21:18 -08:00
Geoff Romer and Jon Meow
17e0a1afb9
Implement static name resolution ( #958 )
...
This doesn't actually use the results of name resolution, but it does verify that they are present.
Also ensures that name resolution and type checking are applied to deduced function parameters and the implicit call to `Main()`.
Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com >
2021-11-30 13:33:54 -08:00
Geoff Romer
7a5b8434c8
Define a base class for all AST nodes. ( #947 )
...
Also implement code-generation to manage the resulting boilerplate.
2021-11-16 11:54:47 -08:00
Geoff Romer
a9bb06ca14
Make NamedEntityInterface non-movable ( #946 )
2021-11-10 09:33:00 -08:00
Jon Meow and Geoff Romer
27e084d37a
Start populating named entities in relevant locations. ( #919 )
...
This starts detecting naming collisions as a consequence of being able to determine when the name is declared twice in a given scope.
Co-authored-by: Geoff Romer <gromer@google.com >
2021-11-03 08:04:13 -07:00