Commit Graph
662 Commits
Author SHA1 Message Date
Jon Meow eeff5dcdae Mark fnty as __Fn to reflect experimental state (#928)
The `__Fn` naming is intended to mirror things like `__Continuation`.

The reason for this path is because it's not clear this is the form we'll want, and I think experimental naming will help reflect that.
2021-11-01 10:56:04 -07:00
89a829b8c7 Constraints for generics (generics details 3) (#818)
This proposal describes `where` clauses that can add constraints on a type-of-type, for example define restrictions on its associated types. Example:

```
fn FindFirstPrime[T:! Container where .Element = i32]
    (c: T) -> Optional(i32) {
  // The elements of `c` have type `T.Element`, which is `i32`.
  ...
}

fn PrintContainer[T:! Container where .Element is Printable](c: T) {
  // The type of the elements of `c` is not known, but we do know
  // that type satisfies the `Printable` interface.
  ...
}
```

Some other constraints, such as `Sized` are defined as type-of-types directly, possibly parameterized.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2021-10-29 20:32:22 -07:00
05efb278c2 as expressions (#845)
This proposal provides an `as` expression for casting. This supports implicit conversions plus some safe and unsurprising conversions that we do not support implicitly:

* lossy but fully defined conversions to floating-point types
* conversion from `bool` to integer types
* conversion between adaptors and their adapted type, and more generally between compatible types

This facility can be extended by implementing the `As(TargetType)` interface for a type.

Co-authored-by: Geoff Romer <gromer@google.com>
Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2021-10-29 16:46:19 -07:00
Jon Meow c4a77b4029 pre-commit autoupdate (#930) 2021-10-29 08:31:36 -07:00
Jon Meow bbd4940e6d Be more explicit about AST types (#921)
This was born out of wanting FunctionDeclaration to explicitly have a Block for a body, and became a bit more of specifying types around. Note this forces exec_program to generate a Block for print()'s body, which is probably more correct as now we can expect a standard FunctionDeclaration AST structure, even for the built-ins.

There is a syntactic change here: a continuation's body is now a Block, not just a Statement. I've added an example disallowed test case. I think this is more reasonable syntax.

Other than that, note that optional_else now generates a valid Block. This has me thinking about whether we can eliminate Sequence, but that seemed well out of scope for this.
2021-10-28 13:54:45 -07:00
Geoff Romer dea277d8e1 Factor allocation interface out of Heap (#918)
This will enable `Action` to deallocate from the heap without creating a dependency cycle.
2021-10-28 10:01:24 -07:00
Jon Meow 151f54e040 Update bazel version (#925) 2021-10-28 07:54:12 -07:00
Geoff Romer 70a7839a31 Fix bug from #909 (#924) 2021-10-27 17:09:03 -07:00
Geoff Romer 0df9e8666c Factor AllocationId out of Address (#916)
This lets us statically distinguish between code that works with arbitrary `Address`es and code that can only work with pointers to separately-allocated storage, and so we no longer need to worry about the latter code crashing at run-time (as `Heap::Deallocate` did) or silently doing the wrong thing (as `Heap::PrintAddress` did) if it's given the wrong kind of `Address`.
2021-10-27 16:40:17 -07:00
Geoff Romer 0da907fd2a Unify StructElement and VarValues (#909) 2021-10-27 16:33:38 -07:00
Jon Meow 2e5fa7c453 Split CHECK internals to their own files for clean namespacing. (#915) 2021-10-26 12:04:18 -07:00
josh11b b08e3fedeb Support external impl in class and adapter scopes. (#905) 2021-10-26 09:25:30 -07:00
josh11b 8d051e2b6b Update constructor syntax (#913) 2021-10-25 13:05:39 -07:00
Geoff RomerandJon Meow 3bec7f8dc0 Unify Action and Scope stacks, and eliminate Frame (#880)
Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2021-10-21 14:55:41 -07:00
Jon Meow 44154c8663 Clean up common dir clang-tidy warnings (#907) 2021-10-21 14:39:11 -07:00
Geoff Romer 3677b76cb8 Perform implicit conversions at run time (#903)
This resolves the "cheating" in #870.
2021-10-21 12:47:49 -07:00
Geoff Romer d79387479c Revert formatting suggestion from #906 (#910)
Clang-format insists on this, which seems like a bug to me.
2021-10-21 12:46:09 -07:00
Jon Meow 91b99b1148 Test tuple indexing (#908) 2021-10-21 10:49:28 -07:00
Jon MeowandGeoff Romer 057b9fe253 Clean up remaining executable_semantics clang-tidy warnings (#906)
Co-authored-by: Geoff Romer <gromer@google.com>
2021-10-20 10:25:22 -07:00
Geoff RomerandJon Meow 79e3d284b4 Move pattern interpretation to compile time (#904)
Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2021-10-20 10:05:17 -07:00
josh11b 629cfb8c4d Indent code blocks in bulletted list (#901) 2021-10-19 15:57:42 -07:00
Jon Meow 9267e304fd Disable performance-unnecessary-value-param (#902)
You can observe this conflict at https://godbolt.org/z/5eeq6brfe: adding `--fix` to `clang-tidy` yields `std::move(std::move(...))`
2021-10-19 15:22:24 -07:00
Jon Meow a7cb3537f2 Disable nodiscard due to noise (#888) 2021-10-19 14:30:09 -07:00
Jon Meow ffa4e76ede Add underscores to private data members (#898)
This is the last PR I plan to have focused on #720
2021-10-19 14:27:10 -07:00
josh11b dc9c36660b Facet relationship between parameterized types (#900) 2021-10-19 13:57:29 -07:00
josh11b cfb36b85e5 Merge overview sections (#899) 2021-10-19 11:58:48 -07:00
Jon Meow a9eed3dbf1 Pass the flag instead of using a global. (#893)
Arguably missed in #769 

Note, this is reminding me we have more class members to rename for `_`, but I felt it's best to use the new naming instead of adding more to clean up.
2021-10-19 09:16:57 -07:00
Geoff Romer a3eac75a5b Unify function declarations and definitions. (#896) 2021-10-18 16:21:39 -07:00
Geoff Romer c4d7adde9a Drop CopyVal (#895)
Values are immutable, so they should never need to be copied.
2021-10-18 15:58:35 -07:00
Geoff Romer 7670f08200 Additional test cases for returning from match (#897)
Requested during review of #882
2021-10-18 15:41:33 -07:00
Jon Meow 5b67a08d97 Refactor Action accessors (#891) 2021-10-18 11:02:09 -07:00
Jon Meow eeed6301d6 Refactor Value accessors (#892) 2021-10-18 10:50:56 -07:00
Jon Meow 8bda2ca432 Refactor Pattern and Member accessors. (#889) 2021-10-18 10:25:52 -07:00
Jon Meow b278e4edcf Refactor Statement accessors (#890) 2021-10-18 10:25:35 -07:00
Jon Meow 9c17b72ddd Clean up titles for a few docs, mainly to remove 'Carbon' prefixes (#894)
Note, most principle docs already have the `Principle:` prefix, context sensitivity and `Safety strategy` are/were outliers.
2021-10-15 15:03:36 -07:00
Geoff Romer bb28d37eed Drop support for named tuple fields (#886)
Rationale: Based on the status of #478 and #505, Carbon won't have this feature for a while, and it will be simpler not to support it on spec in the meantime.
2021-10-15 13:19:57 -07:00
josh11bandRichard Smith c7c653adba Generics: cleanups and updates (#881)
Add references, update syntax, merge future work

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2021-10-15 12:52:12 -07:00
Jon MeowandGeoff Romer 9007bfcb88 Run clang-tidy on the interpreter directory (#885)
`// NOLINT` is added on type aliases in stack.h and dictionary.h to allow lower_snake_case naming -- this didn't feel like a check worth disabling in spite of false positives.

Co-authored-by: Geoff Romer <gromer@google.com>
2021-10-15 08:54:53 -07:00
Jon Meow 924259986a Switch static_type to return Expression& (#887) 2021-10-14 14:31:06 -07:00
Jon Meow 52096e4299 Apply clang-tidy fixes to the common dir (#884) 2021-10-14 13:39:05 -07:00
Jon Meow 55ecb62ce5 Refactor Expression accessor/mutator style (#883) 2021-10-13 16:56:27 -07:00
Geoff RomerandJon Meow c2140c6cb9 Check exhaustiveness of function-ending match statements (#882)
Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2021-10-13 16:04:43 -07:00
Geoff Romer 652bee6d99 Add static types to AST. (#879) 2021-10-13 15:42:04 -07:00
Geoff RomerandJon Meow bc5a42211b Support struct implicit conversions in type-checking (#870)
I should emphasize that I am **completely cheating** here. This PR does not add support for actually _performing_  implicit conversions at run time, because the AST doesn't yet contain the necessary type information. At run time, code like `var p: Point = {.x = 1, .y = 2};` directly initializes the name `p` with the _struct_ value `{.x = 1, .y = 2}`; no object of type `Point` is actually created. I'm only getting away with this because we don't yet have any tests that can tell the difference.

Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com>
2021-10-12 10:27:20 -07:00
Geoff Romer a99d882223 Perform type-checking in place (#867) 2021-10-11 16:37:39 -07:00
Geoff Romer d177a08e01 Make continuations consistently "shallow" (#874)
Prior to this change, `__await` would make a deep copy of the continuation stack, but shallow-copy the individual stack frames within it. As a result, continuations appeared to have shallow semantics so long as the continuation stack had only a single frame.

This change also removes an obsolete test from the brief period when we intended continuations to have deep-copy semantics, which has been passing basically by accident.
2021-10-11 14:57:09 -07:00
Chandler Carruth 9211c98951 Switch to depend on LLVM 13's Clang. (#877)
The LLVM-13 release is now on Homebrew, so switch to it. This is
important because our CI only installs the latest version currently.

If you hit issues after this, make sure to update your Homebrew install
to get the latest Clang release. You can always directly set `CC` in
your environment to use a specific `clang` compiler.
2021-10-11 09:33:55 -07:00
Geoff Romer 6068d2306b Address feedback from #856 (#864)
* Make tuple/struct fields mutable.
* Avoid ExpectType when we know it will fail.
2021-10-08 16:52:17 -07:00
Richard Smith 93a002a21a Avoid confusing description of "equivalent". (#843) 2021-10-06 11:06:34 -07:00
Richard Smith aec77a6f39 Add a keyword list. (#869)
This list was extracted from currently-approved proposals and
corresponding design documents. This is intended to be a summary of the
status quo, not a change.
2021-10-06 11:05:41 -07:00