Commit Graph
800 Commits
Author SHA1 Message Date
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
josh11b 8f6e42d866 Add --repo to gh pr create in new_proposal.py (#1110) 2022-02-25 18:48:09 -08:00
Jon Meow 98fc12a6cb Try lockf instead of fsync (#1105)
I'm wondering if my issue all along was parallel script executions (I reproduced the error message locally with `pre-commit run -a`, and I think in my case that's what happened).

Adding the file size to errors for sanity checking, since part of what had me looking again was checksum mismatches, and actually the parallel execution offers a consistent story there (checksum mismatch due to file being modified by another download mid-stream).
2022-02-25 16:46:37 -08:00
Jon Meow a9a726bc3e Switch std::count CHECK to DCHECK, adding DCHECK (#1107) 2022-02-25 15:14:34 -08:00
Jon Meow eecf4a34b3 Replace assert with CHECK (#1098) 2022-02-25 08:29:39 -08:00
Jon MeowandRichard Smith fae7f0d007 Refining the precedence chart with if, struct literals, and links. (#1089)
This is intended to be a more iterative edit to the chart:

- Adding `if` and struct literals, since it came up in arithmetic.
- Adding links to address a comment of mine about wanting references
- Rephrasing slightly to reduce the implication that it's only for operators (particularly since I don't think we want to call `if` an operator)
- Shifting operators below because similar 

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-02-24 18:00:55 -08:00
Jon Meow fa07a016b8 Sync the keyword list (#1097)
I was mainly looking at keywords trying to figure out what needs work and the amount to which it doesn't reflect the design confused me (including some things that we've decided not to include, and some things I'm not aware of discussion about). I figured this cleanup would at least make it somewhat clearer why things are in there.

I'm treating https://github.com/carbon-language/carbon-lang/blob/trunk/docs/design/lexical_conventions/words.md as canonical, with `_` and `xor` as presumably deliberate exceptions. Similarly avoiding symbol tokens because I assume you'll push proposals for the difference.

I dropped the `Keyword` qualifier because `is` makes `IsKeyword` a name conflict, and dropping the qualifier seemed like the more consistent solution (it doesn't do `AmpSymbol`, after all). If we need clarity I might lean towards a separate namespace to avoid naming conflicts.
2022-02-24 13:46:17 -08:00
Jon Meow 900f41cc3a fsync cache file (#1094) 2022-02-24 09:51:04 -08:00
Jon Meow c01634ac8f Ignore large fuzzer inputs. (#1085) 2022-02-23 11:25:34 -08:00
josh11b 656e746bcb Fix some links in proposals (#1090) 2022-02-22 17:18:27 -08:00
Jon Meow 6fe8411122 Refactor common script functionality and reimplement the buildifier pre-commit (#1080)
Moves common script logic into utils.py (not a great name, but couldn't come up with better). This is in particular to make the buildifier.py script really trivial, allowing that pre-commit to be easily added. However, scripts have also been diverging on how we find bazel, so I'm trying to unify that.

The advantage of reimplementing buildifier's pre-commit is that (a) we can now run buildifier server-side, and (b) we can stop advising installing it manually. Then the only Linux-specific package manager is Cargo, which is only used for watchman, which is optional -- so stop highlighting Linux-specific package managers in the tool instructions.
2022-02-22 10:10:41 -08:00
Jon Meow 066bf10df3 Fix return_term dep on Expression (#1091)
Line 91 has:
```
        source_loc_(type_expression->source_loc()) {}
```

Which requires the Expression definition. This probably compiles accidentally due to #include ordering, but I ran into a case that needs correct #includes.
2022-02-18 16:35:39 -08:00
Jon Meow 4f0c8786b0 Add precedence docs (#1070)
Drawing upon #555.
2022-02-18 08:35:36 -08:00
Jon Meow 50f5b3f226 Stop using fuzz input for filenames (#1078) 2022-02-16 10:10:58 -08:00
Geoff Romer 74c054c86e Document monotonic mutability of the AST (#1079)
Also document an important precondition on `InterpExp` and `InterpPattern`
2022-02-16 09:42:47 -08:00
Jon Meow 7e9b24390f Handle recursion limit errors in postfix expressions (#1081) 2022-02-16 09:05:55 -08:00
Jon Meow 2e99b4d00f Split Operator test (#1086) 2022-02-15 09:01:58 -08:00
Jon Meow f6d7377358 Document how to run a fuzzer on one file (#1076) 2022-02-15 08:36:25 -08:00
Jon Meow 2296ceb56c Add a Diagnostic printer for tests. (#1087) 2022-02-15 08:35:05 -08:00
Jon Meow 07357f93ab Download buildozer binary (#1064)
`go install` is a bit troublesome: there's old versions floating around that are incompatible with the `@version` use, and the cache it creates isn't writable so temp reapers can create inconsistent, broken states.

This switches approaches to download bazel's releases directly. This should still have the necessary platform support, but without using the `go` tooling and with finer control over cache results.
2022-02-10 10:27:00 -08:00
Richard Smith 9af354e10f Remove references to facet types from the design (#1072)
Update and simplify design/expressions to reflect removal of facet types.
2022-02-09 18:07:09 -08:00
Jon Meow 012fed599b Minor pre-commit autoupdate and cleanup (#1071) 2022-02-09 08:35:38 -08:00
Jon Meow 58104dc364 Switch clang-format pre-commit to get 13.0.0 (#1066)
Also enable gh action, I'm expecting that to work now.
2022-02-08 17:42:12 -08:00
Jon Meow b5dc35e2b8 Remove third-party example submodules (#1068)
See #1067 for context -- I'm just clearing these out since llvm is gone; I think it'll be less confusing if we don't mix subtrees and submodules.
2022-02-08 17:41:38 -08:00
Jon Meow 385ac7da86 Refactor lit testing to generate per-file tests. (#1063)
This switches to generating per-file targets such as `//executable_semantics/testdata:tuple/equality_false.carbon.test`, instead of one test covering all files. Essentially this relies on bazel instead of lit to handle test parallelization.
2022-02-08 11:01:27 -08:00
Jon Meow 03bfe9018e Replace print with exit (#1065) 2022-02-08 10:16:30 -08:00
Jon MeowandRichard Smith 654ad75c8d Merge comparison ops #702 into the design (#1055)
Mostly pulling in the text of #702, but with some small textual edits and adjusting links.


Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-02-07 14:47:05 -08:00
Jeremy G. Siek ac0b810bf3 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
2022-02-05 12:30:13 -05:00
Darshal Shetty 4479c55305 Pointers (#1060)
* Naive pointer implementation

* Bug fixes and better pointer tests

* Remove debug print statement

* Implement changes suggested by @geoffromer

Also add a failing test case that tests applying the address-of operator
to an rvalue.
2022-02-05 10:27:54 -05:00
f6cbd2231e Conditional expressions (#911)
This proposal introduces a conditional operator of the form:

```
if cond then value1 else value2
```

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-01-28 20:07:45 -08:00
Jon Meow 80f402e2b6 Warn about watchman (#1052) 2022-01-28 18:20:05 -08:00
Jon Meow 979fe2cd89 Merge naming conventions #861 into the design (#1056)
A pretty straight copy of #861. Cutting down README.md example text since it seemed a little redundant with examples in the bullets.
2022-01-28 18:14:31 -08:00
Jon Meow 90f538f1b1 Remove submodule mentions in tools (#1054) 2022-01-28 18:12:18 -08:00
a2728f82bb Updating function and variable docs (#1017)
I was doing this for #851 initially, but I think #438 and #826 hadn't made it in (possibly intentionally due to #851? I don't recall). 

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-28 11:36:47 -08:00
Geoff Romer 6c3e1f6d7c Revise README and add subdir READMEs (#1023) 2022-01-28 11:33:32 -08:00
Jon Meow dfef55fc2c Improve string lexing performance (#1001)
See benchmark notes on https://github.com/carbon-language/carbon-lang/pull/1001
2022-01-28 10:05:07 -08:00
Jon Meow 9009ae5e1b Cleanup up lit_test and require explicit tool paths (#1049)
I think lit_test accrued a bit of cruft as I switched approaches... I still may go further, but this is particularly fixing a bug where `FileCheck` (instead of `%{FileCheck}`) should've failed in tests.
2022-01-27 16:27:30 -08:00
Jon Meow 18be5692a3 Remove submodules from actions, and enable more pre-commits (#1051) 2022-01-27 16:22:26 -08:00
josh11b 39571f715e Fix "block block" typo (#1053) 2022-01-27 16:22:11 -08:00
Jon Meow d76fe462f6 Have FileCheck dump all input on errors. (#1050)
I'm hoping this improves debugability.
2022-01-27 12:49:44 -08:00
josh11b 3313f6fa9c Fix links from proposals to open discussion minutes (#1048) 2022-01-27 11:54:19 -08:00
Jon Meow eda43faa5a Note namespace and static recommendations in C++ style guide (#1041) 2022-01-27 11:26:47 -08:00
086834d63a Naming conventions (#861)
-   For idiomatic Carbon code:
    -   `UpperCamelCase` will be used when the identifier can be resolved to a
        specific value at compile-time.
    -   `lower_snake_case` will be used when the identifier's value won't be
        known until runtime, such as for variables.
-   For Carbon-provided features:
    -   Keywords and type literals will use `lower_snake_case`.
    -   Other code will use the guidelines for idiomatic Carbon code.

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-01-27 11:25:43 -08:00
6218aff2ba Document and, or, and not from #680 (#1032)
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-27 11:19:21 -08:00
josh11bandRichard Smith 2d567f5824 Generics: Set associated constants using where constraints (#1013)
Change the syntax for setting the associated constants and types in an interface implementation for a type from using `let` declarations as in:
```
class Vector(T:! Type) {
  impl as Iterable {
    let ElementType:! Type = T;
    ...
  }
}
```
to using `where` clauses as in:
```
class Vector(T:! Type) {
  impl as Iterable where .ElementType = T {
    ...
  }
}
```

This is an attempt to simplify by removing redundancy, improve consistency by removing a use of `let` that was different than other examples, and better support forward declaration that a type implements an interface while retaining the information needed for type checking.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-01-27 11:18:20 -08:00
Jon Meow 94265befee Switch LLVM to a subtree (#1021)
git rm third_party/llvm-project
git subtree add --prefix third_party/llvm-project https://github.com/llvm/llvm-project.git dbf0d8118c --squash

With some fixes for the compile.
2022-01-27 09:25:15 -08:00
Jon Meow 7dcb7a3be8 Drop line because it's a set so arbitrary sorting applies (#1043) 2022-01-26 15:13:26 -08:00
Geoff RomerandJon Meow 1723b4e0b2 Hide Interpreter in .cpp (#1036)
This improves encapsulation, and makes Interpreter lifetimes clearer (and shorter).

Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2022-01-26 09:57:55 -08:00
Jon MeowandGeoff Romer 6a4901a995 Remove LLVM gtest dep and add pre-commit regression check. (#1040)
Co-authored-by: Geoff Romer <gromer@google.com>
2022-01-26 09:28:45 -08:00
Jon Meow b048bb766d Starting to think about toolchain semantic analysis -- create a trivial shell for it. (#1038) 2022-01-25 11:06:16 -08:00