Commit Graph
1236 Commits
Author SHA1 Message Date
josh11b e873678c8f Link to Rust stabilizing Generic Associated Types (GATs) (#2178) 2022-09-13 16:39:19 -07:00
Jon Ross-Perkins a62e2dc21c Update things for clang-15 support. (#2174)
libprotobuf_mutator and abseil have warnings that are already fixed in newer versions.

bison outputs code that hits new warnings; there I'm just silencing it because testing a newer bison version is more difficult.

Fixes #1650

Fixes #1660
2022-09-13 15:18:55 -07:00
Richard Smith deee3a97de Implement #2140 in the design docs. (#2176)
This implements #2140 in the design docs.
2022-09-13 14:54:43 -07:00
Richard SmithandJon Ross-Perkins 0191e2e41e implement checking for pattern match exhaustiveness and for unreachable cases (#2164)
When checking for control flow falling off a function after a `match`, determine whether it's possible for no case to have matched. Using the same implementation, also detect whether `case`s in a `match` are unreachable.

For now, the implementation never considers a match against specific values for any type other than tuples, alternatives, and `bool` to be exhaustive. In particular, matching against the sole value `{}` of type `{}` is not considered exhaustive. This is probably best left until explorer supports matching on struct and maybe class types more generally.

This implementation closely follows the algorithm described in the paper [Warnings for pattern matching](http://moscova.inria.fr/~maranget/papers/warn/warn.pdf) by Luc Maranget. Various optimizations are possible, such as reducing the amount of copying done, but for the purposes of explorer, comprehensibility is being favored over efficiency.

The problem is, perhaps surprisingly, co-NP-hard (by reduction to the tautology problem for disjunctive normal form, which is in turn dual to the satisfaction problem for conjunctive normal form, which is well-known to be NP-hard). The algorithm is therefore exponential-time in the worst case, but seems to be well-studied and performs well enough on non-pathological examples. Nonetheless, a depth limit has been imposed to prevent pathological examples such as those generated by a fuzzer from causing long runtimes.

Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
2022-09-13 13:40:25 -07:00
micttyl b5e55556be Include the Library of the added function in carbon-language#1341 (#2172)
`cstdlib` is added for `abort()` in carbon-language#1341

`unistd.h` was not removed with `exit()` in carbon-language#1175
2022-09-13 11:47:17 -07:00
Jon Ross-Perkins 2db09a1fd5 Rename dashes in a few test files to underscores (#2170)
This is somewhat https://github.com/carbon-language/carbon-lang/blob/trunk/docs/project/cpp_style_guide.md#file-names, but in general, underscores are more consistent.
2022-09-13 09:39:47 -07:00
josh11bandChandler Carruth 54059801ca More etiquette for responding to code reviews (#2169)
Includes the advice from https://github.com/carbon-language/carbon-lang/pull/2022#issuecomment-1239070023

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-09-13 08:15:43 -07:00
micttyl e2f4205ca3 Enable Local Patches (#2168)
Configure `WORKSPACE` so to use patches that we have in
the current repository
2022-09-12 10:31:07 -07:00
micttyl f3e1186a87 Fix for Minor Style Issue: a non-auto method to auto (#2166)
Minor Style Change: a non-auto method to auto

Change the comment to address the correct function name

Sort the Members of `TokenizedBuffer` according to the YAML format

Fix to have the preferred term, `nul` over `null`

Include the library of the added function in carbon-language#2030
2022-09-12 10:24:58 -07:00
josh11bandRichard Smith 83f1d29f3c Checked and template generic terminology (#2138)
Change terminology from "generics" and "templates" to "checked generics" and "template generics". Afterwards, "generics" will be an umbrella term that include templates.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-09-09 21:15:46 -07:00
Jon Ross-Perkins 3704e942a2 Use a regex for the assert line (#2163)
Fixes the test (which had a line 431 versus 481 lissue)
2022-09-09 14:21:41 -07:00
Andy Soffer 1b4544ffed Add support to rewriter for free-function declarations and definitions. (#2120) 2022-09-09 13:30:23 -07:00
pmqttandm new 82f8556890 Implementation of __intrinsic_assert (#2155)
Co-authored-by: m new <michael.burzan@outlook.de>
2022-09-09 13:05:42 -07:00
pmqttandm new 5ef6e9b6a0 Feature not equal (#2146)
Implement != operator.

Co-authored-by: m new <michael.burzan@outlook.de>
2022-09-09 12:25:20 -07:00
c096d010b9 Optional Class (#2096)
Adding Optional class to prelude...
I hope it is useful!

Co-authored-by: m new <michael.burzan@outlook.de>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Co-authored-by: Geoff Romer <gromer@google.com>
2022-09-09 11:15:17 -07:00
Jon Ross-Perkins 5456011980 Detect and fix gtest and gmock dependencies. (#2099)
Fixes #1219 

The repo is correct, I'm just trying to avoid regressions from this.
2022-09-09 11:11:56 -07:00
josh11b 14206da00a Primitive types (#1975)
A few changes:
- Merge content from the `primitive_types.md` design doc into the overall design `README.md` since there was so much overlap and no need for two copies.
- Consistently spell integer types `Carbon.Int(N)` and `Carbon.UInt(N)`, including the `Carbon.` prefix and avoiding `Unsigned(N)`.
- Consistently use a comprehensive set of floating-point types.
- Incorporates #2015 into the design docs.
2022-09-08 18:13:09 -07:00
Geoff Romer 9db5c4e4b8 Run update_checks.py (#2158) 2022-09-08 17:29:12 -07:00
Jon Ross-Perkins 0c20fbb0e6 Switch to llvm apt for ubuntu (#2160)
We've been encountering issues installing llvm via brew on linux, e.g.:
https://github.com/carbon-language/carbon-lang/runs/8258419618?check_suite_focus=true

```
==> Reinstalling 2 dependents with broken linkage from source:
llvm, mpdecimal
```

(but then llvm doesn't get reinstalled)

This should resolve it:
https://github.com/carbon-language/carbon-lang/runs/8260573590?check_suite_focus=true
2022-09-08 16:41:33 -07:00
49c9732e8e Numeric type literal syntax (#2015)
This proposal aims to add a literal syntax for fixed-sized numeric types: integers, unsigned integers, and floating-point numbers.

Fixes #1998

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-09-08 15:49:11 -07:00
josh11b e4595deb4b Clarify rules around Self and .Self (#2107)
A number of smaller changes grouped together in one proposal:

-   Make `Self` a keyword.
-   Clarify that `Self` refers to the current type in a base class and in impl declarations.
-   Clarify when `.Self` is legal, and what type it has.
-   Also specify that `where` is not an associative operator.
2022-09-08 13:04:58 -07:00
Jon Ross-Perkins 6a9326f9e7 Set HOMEBREW_NO_INSTALL_CLEANUP due to llvm reinstall errors (#2157)
Trying to address issues like:
https://github.com/carbon-language/carbon-lang/runs/8252863868?check_suite_focus=true

```
==> Reinstalling 2 dependents with broken linkage from source:
llvm, mpdecimal
```

But llvm doesn't get reinstalled (but we also probably don't need/want this, particularly building from source).
2022-09-08 09:28:00 -07:00
Geoff RomerandJon Ross-Perkins 36a5a52a84 Add FAQ entries for common syntax questions (#2011)
Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
2022-09-07 23:54:11 +03:00
Kareem Ergawyandergawy d44cde3c15 [Toolchain][Parser] Add support for package directive. (#2144)
Summary:

Adds parsing support for the `package` directive as specified by the
`Code and name organization` design doc.

Co-authored-by: ergawy <kareem.ergawy@guardsquare.com>
2022-09-07 10:54:27 +03:00
Jon Ross-Perkins 84f5fb62e5 Move mod test file next to others (#2150)
Fixes #2130
2022-09-07 08:55:32 +03:00
Darshal Shettyandjosh11b 037c99e2fb Explorer: Mixin phase 1 (#2069)
* Replay changes from pre-force-push mixin branch

* Base MixinPseudoType off of the new InterfaceType

* Add more test cases.

Also removed an unnecessary check that would have already been
handled by the parser.

* WIP detect member clashes during mixing mixins

* Implement fuzzer changes

* Implement member name clash check when mixing mixins

* Modify parser and lexer for experimental mixin feature

* Add comments

* Update explorer/testdata/mixin/simple-mix-in-mixin.carbon

Co-authored-by: josh11b <josh11b@users.noreply.github.com>

* Update explorer/testdata/mixin/use-mixin-method-in-class-method.carbon

Co-authored-by: josh11b <josh11b@users.noreply.github.com>

* Make code review changes

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-09-06 17:08:05 -04:00
Prithvi Jamadagni 661a3c3907 Reflect "Numeric literal semantics #144" in the design docs (#2092)
This PR aims to complete issue #1997.
2022-09-02 17:49:14 -07:00
Richard Smith dcc80f5491 Lex '''-delimited multiline string literals. (#2133)
"""-delimited literals are still lexed for error recovery but produce an error.
2022-09-01 18:00:37 -07:00
josh11b e489b14de0 Fix new_proposal.py to include "Abstract" section (#2139)
"Proposal" was hard-coded as the first section and so it was deleting the "Abstract" section along with the "TODO" section.
2022-09-01 14:21:04 -07:00
pk19604014 51d6cafcd1 update_checks.py: allow passing a list of test files to update (#2137)
It's taking longer to update almost 500 tests which currently exist.

Without the arguments, the command updates all tests, as before:
```
$ time explorer/update_checks.py
Updating 466 lit test(s)...
real	0m5.858s
```

With the arguments, the command updates only the specified tests:
```
$ time explorer/update_checks.py explorer/testdata/basic_syntax/fail_invalid_integer.carbon explorer/testdata/basic_syntax/fail_invalid_char.carbon
Updating 2 lit test(s)...
real	0m0.359s
```
2022-09-01 09:13:55 -07:00
josh11b 4192ee42a6 Misc small fixes (#2123) 2022-08-30 08:25:24 -07:00
dd4deb6843 Redo introduction of design overview (#2017)
Previous overview is changed to an introduction that includes a modified first example, and adding a brief tour of Carbon in the form of an explanation of the features demonstrated in that example. Also update to reflect that we expect `Print` to be available in some package imported by default, which we are currently calling `Carbon`.

Co-authored-by: Wolff Dobson <wolffg@users.noreply.github.com>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-08-29 20:20:18 -07:00
Jon Ross-Perkins 9572a33ba9 Update digit separator notes in design (#2117) 2022-08-29 16:10:51 -07:00
David Sankel 48ba8bf6b6 Are We Explorer Yet? (#1891)
It is currently difficult to see the status of Carbon explorer and where effort
is needed. We propose creating a AreWeYet-styled dashboard to address this.
2022-08-26 11:50:22 -07:00
David Sankel ea0a37dbf3 Add Abstract Section (#1895)
Reading through extensive problem and background documentation before seeing
what is being proposed is tedious for a reader. An abstract section at the
beginning of a document that provides a succinct summary helps a lot. We
propose adding such a section to our proposal template.
2022-08-26 11:49:25 -07:00
pk19604014 c00c7b3249 BUILD file cleanup I missed in #2104 (#2115) 2022-08-26 08:26:36 -07:00
ba2cfc2d0d Weaken digit separator placement rules (#1983)
[Proposal #143: Numeric literals](https://github.com/carbon-language/carbon-lang/blob/trunk/proposals/p0143.md) added digit separators with strict rules for placement. It missed some use-cases. In order to address this, remove placement rules for numeric literals.

Related issue: #1485 

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-08-25 14:52:43 -07:00
07d6a03b32 Change raw string literal syntax: [#]*" represents single-line string and [#]*''' represents block string (#1360)
Use `"` for simple string literals and `'''` for block string literals.

Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-08-25 14:04:22 -07:00
Wolff Dobson cb670aa6a1 Make Compiler Explorer easier to find (#2100)
Our "Getting Started" section doesn't mention the Compiler Explorer as a first step.  Compiler Explorer already has the Carbon explorer installed, so it would save interested folks a lot of time if they just want to try code out before installing a lot of tools to build from scratch.

This is a repeat link of the status section, but given the title of this section ("Getting Started") it's quite possible visitors end up here before they read the status section.
2022-08-25 09:10:07 -07:00
pk19604014 a937d911cb Changed sized_type_literal parsing logic to not crash (with CARBON_CHECK) and instead report an error with YYERROR (#2102) 2022-08-25 09:09:15 -07:00
pk19604014 98d95cd188 Cleanup: since explorer_fuzzer is now a standard cc_fuzz_test, and runs on all files in the corpus, there's no need for fuzzer_util_test to do the same manually
Before:
```
//explorer/fuzzing:fuzzer_util_test                                      PASSED in 18.5s
```

After:
```
//explorer/fuzzing:fuzzer_util_test                                      PASSED in 0.3s
```
2022-08-25 09:06:45 -07:00
Jon Ross-Perkins 25d824ef15 Pre commit update (#2098)
codespell now sees "falsy" as a mis-spelling of either "false" or "falsely"; adding it since I think this it's occasionally used this way in programming. e.g., https://developer.mozilla.org/en-US/docs/Glossary/Falsy

Adjusts to use the new check-copyright support for lines starting with a dash.
2022-08-25 08:56:46 -07:00
pmqtt f957d4d87d Feature generic choice (#2042)
Implementation of generic choices!

I hope it is useful!
2022-08-24 11:30:04 -07:00
Enzo Venturi 499188bfcf scripts: update bash scripts (#2046) 2022-08-23 14:30:27 -07:00
ethangandJon Ross-Perkins 2f3ff12704 Adding Windows support for building Carbon with Bazel. (#1754)
This PR fixes issue #298. I am attempting to build Carbon using Bazel on Windows, without the need to go through WSL. This is still a work in progress, below is a list of issues I have discovered and my fixes for them.

- Windows does not support Homebrew; however, I was able to properly install all of the required packages through [Chocolatey](https://chocolatey.org/). This was my first time using the Chocolatey package manager, yet it was fairly easy to use. I believe there are other options as well for Windows.
- As is mentioned in issue #298, your Windows installation must be running in [Developer Mode](https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development). This will allow unprivileged users to create symlinks during the build process.
- As it currently stands in trunk, clang_configuration.bzl will fail when attempting to run the method `_compute_clang_cpp_include_search_paths` on Windows. I have discovered that this is because Clang++.exe fails to execute if you provide it with an input file that does not exist. Thus, I have the build script generate an empty temp file in the Bazel repo for Clang to use when running the above method. 
- A cc toolchain specifically for Windows was created in clang_toolchain.BUILD. I simply mimicked what was done for other platforms, I apologize if this is incorrect since I am fairly new to Bazel.

As I understand it, the next step is to configure clang_cc_toolchain_config.bzl to support the new Windows toolchain. I intend to continue working on this, however as I stated I am quite new so help is seriously appreciated!

Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
2022-08-23 13:28:47 -07:00
Jon Ross-Perkins 065d5224be Remove reviewer setting, let autoassign take over (#2094)
Fixes #1841

The current autoassign doesn't work, but I'm trying to fix it (e.g., #2093)
2022-08-23 12:13:41 -07:00
Jon Ross-Perkins 2bc6da2967 Try a different autoassign action (#2093)
This removes the separate data files, which have been failing to load properly ([example](https://github.com/carbon-language/carbon-lang/runs/7957047892?check_suite_focus=true)). This one wasn't working previously, but hopefully will with these changes (and it might've also just been a pull_request_target issue, but the silent "Resource not accessible by integration" failures aren't great).
2022-08-23 12:13:19 -07:00
Jon Ross-Perkins ed3a81aa08 Add action for wiki change notifications. (#2089)
Wiki can either be "require push access" or "everyone" -- apparently there's no other option. I've set it to "everyone" so that contributors can make edits without needing push access. So the options as I see it are:

- Leave wiki as "everyone" can edit, use this for notifications.
    - GitHub doesn't give notifications for wiki edits. This is trying a different approach for notifications.
- Grant push access to a larger group (contributors), don't add CODEOWNERS.
    - Not sure this is the right choice because of the implications around merges, but again maybe it'd be fine and we can expect the approval requirement to work out.
- Grant push access to contributors, add CODEOWNERS.
    - This causes the auto-assignment to CODEOWNERS that we don't want. (details in https://github.com/carbon-language/carbon-lang/pull/1367)
- Create a separate wiki repo so that we can differently handle push access.
    - This seems overly complex a solution though.

I'm hoping this approach works.
2022-08-23 12:11:58 -07:00
Vineeth B V 8c85fa2744 Added unicode support (#2027)
Can parse Unicode literals following the format \u{HHHH...} in a string
2022-08-19 13:39:11 -07:00
Andy Soffer fd28f5f9a8 Add the beginnings of a RecursiveASTVisitor-based migration tool. (#2041)
The approach uses a RecursiveASTVisitor rather than matchers. Matchers
and callbacks do not compose neatly and introduce significant runtime overhead
over RecursiveASTVisitor when an action needs to be performed on most nodes.
2022-08-19 08:46:03 -07:00