Commit Graph
833 Commits
Author SHA1 Message Date
Jon Meow 694a0a7dfb Clean up renamed test (#1145) 2022-03-21 11:55:08 -07:00
josh11b 3a18ab70f2 Terminology: qualified member access expression (#1142) 2022-03-17 14:08:24 -07:00
Jon Meow 699172633f Sort diagnostic output from the driver by default (#1143) 2022-03-17 13:27:25 -07:00
Jon Meow 9c2e3b02b7 Add small Success test (#1141) 2022-03-17 11:52:16 -07:00
c546c81d07 Create Error type (#1137)
Co-authored-by: Geoff Romer <gromer@google.com>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-03-17 10:22:02 -07:00
31fa2608d4 Updated README.md (#1075)
Revised landing page, including updated README.

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Jon Meow <jperkins@google.com>
2022-03-16 17:33:45 -07:00
Jon Meow bf7159f841 Adding some shape to toolchain semantic analysis (#1092) 2022-03-16 16:04:39 -07:00
Jon Meow 50d9fc5189 Prevent accidents with uninitialized nodes (#1139)
This comes from #1092 where I wrote bad code and I felt it should have been caught more clearly.
2022-03-16 16:03:50 -07:00
Richard Smith 48d5b18026 Initial rough framework for specification. (#140)
Provide an initial rough structure for the specification so we can add things
as they are decided.

Split the specification into a language and a library section. In the language
section, use one file per broad area of functionality. Divide the language up
based on the intended layering of the language design.
2022-03-16 15:43:09 -07:00
Richard SmithandJon Meow a0a4146bcf Roadmap updates for 2022 (#1025)
Roadmap updates for 2022. Key goals:

* Reach the point where the first draft of the core language design is complete, with some test programs and an approximate implementation in executable semantics.
* Go public, and improve public participation.

Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2022-03-16 14:43:03 -07:00
Richard Smith 35a0bf1c7e Principle: information accumulation (#875)
This proposal addresses the question of whether we should perform a fully top-down compilation (like in C), a mostly top-down compilation (like in C++), or whether we should allow information from later in the same source file to be used in earlier program constructs (like in Rust, Swift, Java, C#, Haskell, and so on).

The proposed direction is:

-   Entities declared later in the same source file cannot be used earlier; top-down semantics apply everywhere.
    -    As an exception, class member function bodies are parsed as if they appeared after the class.
-   Forward declarations can be used to separate interface from implementation and to allow entities to be used before they are defined.
-   The behavior of the program is nonetheless required to be the same as if we had a globally-consistent rule: it's always a hard error to depend on any information that is not known or that is provided later.
2022-03-16 14:41:57 -07:00
josh11b f0d6e3122a Switch generics to using compound/simple member access terminology (#1138)
This is following #1119 .

* Updates terminology.md, overview.md, details.md
2022-03-16 08:29:45 -07:00
Jon Meow 7bbf4fbba3 Accessor renames on diagnostics+source buffer (#1133) 2022-03-15 15:43:53 -07:00
Geoff RomerandJon Meow ad9c10da16 Simplify ostream.h SFINAE using a helper syntax (#976)
Co-authored-by: Jon Meow <jperkins@google.com>
2022-03-15 13:40:51 -07:00
Jon Meow afeb78d067 Accessor renames on parser (#1135) 2022-03-15 13:24:15 -07:00
Jon Meow 16c6ba6bd1 Accessor renames on lexer (#1134) 2022-03-15 13:02:44 -07:00
Jon Meow c6c050ccfc Switch radix to an enum for easier formatting (#1130)
Note the use of an enum allows for the operator to be defined for formatting. This reduces the custom formatting required, which is a simplification carrying over to error handling changes I'm working on too.

Also, I kind of feel the code's now clearer about what's supported; I'm dropping CHECKs that seemed redundant with the enum.
2022-03-14 13:40:09 -07:00
20b272446f Let variables (#1095)
* Modify parser and AST nodes to include let statement

* Implement let variables

* Remove redundant code in fail_match_choice test

* Add comment for has_value_category()

* Apply suggestions from code review

Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>

* clang-format changes

* Update comments for new BindingPattern methods

* Implement nested vars in patterns

* Apply suggestions from @geoffromer's code review

Co-authored-by: Geoff Romer <gromer@google.com>

* Implement changes from code review.

* Remove maybe_var_pattern grammar rule

Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
Co-authored-by: Geoff Romer <gromer@google.com>
2022-03-11 16:30:24 -05:00
Geoff Romer 93842ad878 Eliminate run-time errors from PatternMatch (#1126) 2022-03-10 16:46:43 -08:00
Richard Smith 9384077abd Direct/indirect member access -> simple/compound member access. (#1119)
Plus some minor fixups to improve the readability and precision of the
summary in README.md.
2022-03-10 13:36:12 -08:00
josh11b 81c5eef3b8 Fix copy-paste error (#1123) 2022-03-08 10:15:24 -08:00
pk19604014 2ea7de8a17 Fixed a couple crashes surfaced by running a structured fuzzer on executable_semantics parse/type-check/execute logic. (#1106)
* Fixed a couple simple crashes surfaced by running a structured fuzzer on executable_semantics parse/type-check/execute logic.

* var a: b: auto; -> var a: auto;
2022-03-04 14:45:50 -05:00
Richard Smith 2325c50b3b Support for if ... then ... else following #911. (#944) 2022-03-03 16:34:34 -08:00
Jon Meow 4a98acc3ea Consistently use llvm::Optional, not std::optional (#1118) 2022-03-03 15:45:42 -08:00
Richard Smith 8c60ad2e19 Implement the current set of rules for precedence partial ordering (#1096)
In the process, switch to an unambiguous grammar, using the
precedence-climbing method for operator precedence (suitably modified to
handle a partial precedence order) rather than Bison %precedence /
%prec.
2022-03-03 13:36:35 -08:00
Jon Meow f5f02babdd Apply a digit limit for all getAsInteger calls (#1117)
In particular noticed the issue in type literal parsing, but given this has come up once before, trying to address it consistently.
2022-03-03 12:26:04 -08:00
Jon Meow b41dfb2a94 Switch to gmock VariantWith (#1115) 2022-03-03 11:26:25 -08:00
Jon Meow c4c5cdc1f5 Replace is_sorted with comparison (#1104)
* Replace is_sorted with comparison

* Switch to StringRefContainsPointer
2022-03-03 10:21:38 -08:00
Jon MeowandRichard Smith 0a8c0dc271 Adjust string parsing to consume everything until the terminator. (#1111)
Note I've added a few TODOs, particularly that multi-line strings should only consume until the dedent.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-03-03 10:21:16 -08:00
Jon Meow f4f9b23291 Add int and real printing (#1116) 2022-03-03 09:57:41 -08:00
Jon Meow 4ae3258dec Do MOCK_METHOD TODO (#1114) 2022-03-02 14:48:21 -08:00
Jon Meow 8a2ef22c2a Validate source text size and fix empty buffer bugs. (#1113)
There's currently a bug with empty files, in that it initializes SourceBuffer with an invalid StringRef that results in a crash. That got me looking at the std::optional TODO, but the issue is that there are really three states:

- Buffered
- mmapped (not buffered)
- Moved out of (no longer initialized)

Technically an optional could work if we initialize the buffer on move out, indicating the mmap is gone. But the mode setup felt better to me.

And then this also adds the size check. Which is really how I started looking at this.
2022-03-02 13:43:03 -08:00
Richard Smithandjosh11b 18b423dc5f Member access expressions (#989)
Support for member access expressions with syntax `container.member`, covering cases such as:

* `object.field`
* `object.method(args)`
* `package.namespace.class.member`
* `object.(interface.member)`
* `object.(class.member)`

... and so on. Includes the rule for template name lookup as decided in #949.

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-03-02 13:01:01 -08:00
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