Adds basic support for class functions and methods. (#1057)

* adding methods to the ast

* pre commit stuff?

* implementation of class functions

* implemented methods

* some cleanup

* more cleanup

* add newlines in test programs

* pre-commit fixups

* added include of return_term.h

* a test of a method calling another method

* replacing Member with Declaration

* removing the member.h etc files

* clarify a type annotation

* update uses of FunctionDeclaration

* remove ReturnTarget, no longer needed

* more cleanup

* more cleanup

* yet more cleanup, playing with pre-commit

* did a pre-commit run --all-files

* fixed const issue

* remove comment

* checking dependencies in BUILD files and headers

* pre-commit working now

* refactor NominalClassType to just hold a pointer to the class declaration

* remove Member from rtti

* responding to Geoffreys review

* change field_types to a non-member function
This commit is contained in:
Jeremy G. Siek
2022-02-05 12:30:13 -05:00
committed by GitHub
parent 4479c55305
commit ac0b810bf3
27 changed files with 739 additions and 351 deletions
@@ -104,7 +104,7 @@ TEST(MatchesReturnTest, BasicUsage) {
TEST(MatchesFunctionDeclarationTest, BasicUsage) {
TuplePattern params(DummyLoc, {});
Block body(DummyLoc, {});
FunctionDeclaration decl(DummyLoc, "Foo", {}, &params,
FunctionDeclaration decl(DummyLoc, "Foo", {}, std::nullopt, &params,
ReturnTerm::Omitted(DummyLoc), &body);
EXPECT_THAT(decl, MatchesFunctionDeclaration());
@@ -117,7 +117,7 @@ TEST(MatchesFunctionDeclarationTest, BasicUsage) {
EXPECT_THAT(decl,
Not(MatchesFunctionDeclaration().WithBody(MatchesLiteral(0))));
FunctionDeclaration forward_decl(DummyLoc, "Foo", {}, &params,
FunctionDeclaration forward_decl(DummyLoc, "Foo", {}, std::nullopt, &params,
ReturnTerm::Omitted(DummyLoc), std::nullopt);
EXPECT_THAT(forward_decl, MatchesFunctionDeclaration().WithName("Foo"));
EXPECT_THAT(forward_decl, Not(MatchesFunctionDeclaration().WithBody(_)));
@@ -150,7 +150,7 @@ TEST(MatchesUnimplementedExpressionTest, BasicUsage) {
TEST(ASTDeclarationsTest, BasicUsage) {
TuplePattern params(DummyLoc, {});
Block body(DummyLoc, {});
FunctionDeclaration decl(DummyLoc, "Foo", {}, &params,
FunctionDeclaration decl(DummyLoc, "Foo", {}, std::nullopt, &params,
ReturnTerm::Omitted(DummyLoc), &body);
AST ast = {.declarations = {&decl}};