Commit Graph
899 Commits
Author SHA1 Message Date
Richard SmithandChandler Carruth 4a8ca9cd0f Rework operator interfaces (#1178)
Add concrete design for interfaces for comparison.

Rename interfaces for arithmetic following current thinking in #1058.

Update rules for mixed-type comparisons for data classes following #710.

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-05-03 15:37:45 -07:00
Jon MeowandChandler Carruth f42ca044cb Rephrase arguments around data versus emotional. (#1212)
Right now, the text is disallowing appeals to logic (which are persuasive methods, per the linked wikipedia article). Consensus seems to be that this is unintentional.

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-05-02 08:25:26 -07:00
pk19604014 150057f260 Added GetRunfilesFile() to be able to reliably determine prelude location under various invocation scenarios
The logic is using bazel Runfiles API per Jon's suggestion.

One of the scenarios used by the fuzzing framework is to place the binary and its runfiles into a folder, resulting in a directory layout like this:

[temp dir]
fuzzer
fuzzer.runfiles/

Tested:
bazel test -c opt explorer/fuzzing:explorer_fuzzer
bazel build -c opt explorer/fuzzing:explorer_fuzzer + run the binary from various locations
2022-05-02 10:36:21 -04:00
Jon Meow 309ec35f95 Rename executable_semantics to explorer (#1188)
Change generated with:

```
#!/usr/bin/bash -eux

# Helper script for renaming pending work.
# Run from the repo root.

# Rename executable_semantics in code.
sed -i 's/executable_semantics/explorer/g' \
  $(git grep -l 'executable_semantics' . | grep -v proposals)
sed -i 's/executable semantics/explorer/g' \
  $(git grep -l 'executable semantics' . | grep -v proposals)
sed -i 's/Executable semantics/Explorer/g' \
  $(git grep -l 'Executable semantics' . |  grep -v proposals)
sed -i 's/Executable Semantics/Explorer/g' \
  $(git grep -l 'Executable Semantics' . |  grep -v proposals)
sed -i 's/EXECUTABLE_SEMANTICS/EXPLORER/g' \
  $(git grep -l 'EXECUTABLE_SEMANTICS' . | grep -v proposals)
sed -i 's/ExecutableSemantics/Explorer/g' \
  $(git grep -l 'ExecutableSemantics' . | grep -v proposals)
sed -i 's/executable-semantics/explorer/g' \
  $(git grep -l 'executable-semantics' . | grep -v proposals)

# This is only needed for the initial move.
mv executable_semantics explorer
mv explorer/fuzzing/executable_semantics_fuzzer.cpp explorer/fuzzing/explorer_fuzzer.cpp
```

Verified with `bazel test ...`
2022-04-29 13:20:25 -07:00
Richard Smith 3b58a1bf48 Basic support for parameterized interfaces. (#1220)
To make this work, introduce impl bindings into scope immediately when type-checking. We may rely on their existence before we finish type-checking the enclosing pattern.
2022-04-29 12:42:15 -07:00
josh11bandRichard Smith b9538129a2 Generic details 12: parameterized types (#1146)
This proposal has three main contributions:
- Types with generic parameters have an identity that consists of the types names plus the values of those parameters.
- The parameters of a type may be deduced from a function's argument.
- Types with generic parameters do not support specialization. Instead, a type can delegate to an interface to opt in to allowing specific customization points.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-04-28 16:16:00 -07:00
62c8821f20 Rewrite example for span/Slice. (#1203)
Co-authored-by: josh11b <josh11b@users.noreply.github.com>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-04-27 12:43:55 -07:00
josh11bandRichard Smith d7a90609cc Update docs/ READMEs (#1211)
With a focus on making each README a good representation for its directory, and adding links.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-04-27 12:07:53 -07:00
pk19604014 9ec2a0bb98 Added googletest deps removed in #1215 as the deps are still required in strict headers mode for the googletest.h include (#1218) 2022-04-27 13:25:57 -04:00
pk19604014 85080fe49a added missing text_format dep (#1214) 2022-04-27 12:35:45 -04:00
Jon Meow 8dee661adb Move CHECK stack traces to be before the message (#1216)
Before, if the llvm hook to print a stack trace on CHECK was bound, it would trace after the message rather than before the message. I'm thinking swapping the order will generally be easier to debug.
2022-04-27 09:17:23 -07:00
Jeremy G. Siek 0e061d1c24 add check for double instantiation of a generic class (#1217) 2022-04-27 11:23:08 -04:00
Jon MeowandChandler Carruth d3700d5cd0 Changes tests to init LLVM stack tracing (#1215)
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-04-26 16:19:51 -07:00
Jon Meow 6013424b87 Iterate on the readme bumper. (#1202) 2022-04-25 13:49:06 -07:00
Jeremy G. Siek adf1a85ee9 Fix IsConcreteType for generic classes and add IsType predicate. (#1204)
* check that the return type is a type, add more implicit conversions

* update IsConcreteType for generic classes, add IsType predicate

* delete a comment

* trivial change

* move Witness wrt IsConcreteType and IsType

* added comments to tests

* update error line numbers
2022-04-25 16:25:22 -04:00
pk19604014 0230ebdf38 Removed erroneously added file. (#1210) 2022-04-25 16:00:49 -04:00
pk19604014 0b4e9b5ecb Split executable semantics fuzzer into cc_binary and cc_test
This is a workaround for #1208, allowing to remove manual tag to allow building and testing fuzzer code during precommits and in bazel test ...

Tested:
bazel test -k ...
bazel build -c opt executable_semantics/fuzzing:executable_semantics_fuzzer
bazel-bin/executable_semantics/fuzzing/executable_semantics_fuzzer
2022-04-25 15:35:12 -04:00
Jon Meow 9356a847d7 Fix nullptr -> nullopt (#1201)
Error in #1193, I should have tested more.
2022-04-22 09:29:12 -07:00
josh11b 6a9625216d Test for mismatch in generic class argument list (#1195)
Diagnostic added for this case in #1200
2022-04-22 08:17:22 -07:00
josh11b 663d67b316 More testdata formatting fixes (#1199) 2022-04-20 11:53:45 -07:00
Jeremy G. Siekandjosh11b 10b209eaa7 added check for mismatch in generic class argument list (#1200)
* added check for mismatch in generic class argument list

* Update executable_semantics/testdata/generic_class/fail_generic_class_arg.carbon

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

* add missing newline in trace output

Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-04-20 14:14:58 -04:00
Jon Meow b4852b04d2 Make bazel run use the build working dir (#1198)
╚╡bazel run :executable_semantics -- testdata/basic_syntax/print.carbon
INFO: Invocation ID: e7820b06-f118-45c7-afdb-b3a3f526ffcf
INFO: Analyzed target //executable_semantics:executable_semantics (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //executable_semantics:executable_semantics up-to-date:
bazel-bin/executable_semantics/executable_semantics
INFO: Elapsed time: 0.466s, Critical Path: 0.01s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
INFO: Running command line: bazel-bin/executable_semantics/executable_semantics
INFO: Build completed successfully, 1 total action
Hello world!
result: 0
2022-04-20 10:09:52 -07:00
Jeremy G. Siek b784458aef Parameterized impl declarations (#1189)
* parameterized impls, first step

* bug fixes, comments, etc.

* added another test case, fix a bug in impl lookup

* simplify tests, removing tuple stuff

* don't create impl bindings for -bound implicit parameters

* remove a redundant 'private'

* CamelCase

* add missing backtick

* add a comment
2022-04-20 10:18:01 -04:00
josh11b 958fb8e529 Format carbon test files (#1197) 2022-04-19 16:10:11 -07:00
Jon Meow 55b0a0e016 Fix fuzzer compile (#1193) 2022-04-19 10:41:31 -07:00
josh11b 9b028bb743 Destructors (#1154)
Add a way for classes to add custom destructor code:
```
class Class1 {
  // forward declaration
  destructor [me: Self] { ... }
}
// out-of-line definition
destructor Class1 [me: Self] { ... }

class Class2 {
  // can modify `me` as part of destruction
  destructor [addr me: Self*] { ... }
}
base class MyBaseClass {
  virtual destructor [addr me: Self*] { ... }
}
class MyDerivedClass extend MyBaseClass {
  impl destructor [addr me: Self*] { ... }
}
```
and constraints `Concrete`, `Deletable`, `Destructible`, and `TrivialDestructor`.
2022-04-18 17:39:33 -07:00
Jon MeowandRichard Smith 9c0675d2b4 Work on wording around interop tradeoffs (#1185)
Given repeated concerns about C++ interop priorities: taking a pass at being more direct about priorities and tradeoffs.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-04-18 14:37:32 -07:00
Jon Meow 770555d8c9 Update check_deps, make reusing scripts easier (#1187)
I went down this route because I figured the installer binary should be in `check_deps`. The result:

- Add thin wrapper scripts for `buildozer` and `bazel`, similar to the `buildifier` wrapper that's already there.
  - These are mainly to avoid deduplicating logic, and dodging intricacies of Python imports that I don't understand well through instead subprocessing.
- Fix update_roots.py (it was missing a `.parent`, must've been relocated without a re-run at some point)
- Fix fuzzer proto code to be `testonly`
- Update the `check_deps` targets
2022-04-14 19:48:51 -07:00
Jon Meow b87747306f Add the ability to pipe trace output to a file. (#1183)
Breaks `--trace` into two flags:

- `--parser_debug`, which sets the parser debug level (which I haven't dug into piping with `--trace`, but seemed likely to be troublesome)
- `--trace_file`, which now the type checker and interpreter will use for trace information (note compile errors should use a different channel)

Most of the file edits are just mechanical testdata flag updates: `sed -i 's/--trace/--parser_debug --trace_file=-/' testdata/**/*.carbon`

To explain the output paths:

- parse/compile errors: stderr
- print() calls: stdout
- parser tracing: `--parser_debug` option, stdout (formerly stdout if `--trace`)
- type check/compile tracing: `--trace_file=<file>`, giving `-` uses stdout (formerly stdout if `--trace`)
- return code of executed Carbon code: `--trace_file` if set, stdout if not (formerly stdout always)
2022-04-14 11:20:56 -07:00
Jon Meow 0948582023 Add install scripts (#1186)
I think this will work on linux/mac, not windows obviously. But the essence is that running `bazel run -c opt //installers/local:install` will create:

Symlink: /usr/bin/carbon-explorer -> /usr/lib/carbon/carbon
BusyBox-style binary: /usr/lib/carbon/carbon
File: /usr/lib/carbon/data/prelude.carbon

And then just running `carbon-explorer foo.carbon` with no flags (in particular, not --prelude) will work.

Since this removes the need for prelude_file in most cases, I'm removing the relative path logic added in #1179 -- it would otherwise conflict with what I'm doing here. I *think* overall this will result in something even simpler and more reliable for compiler explorer to use, and hopefully with enough flexibility that it's easy for us to change how it's implemented later without breaking much.
2022-04-14 10:53:46 -07:00
06174c51f4 Generics details 9: forward declarations (#1084)
Allow interfaces and implementations to be forward declared.

```
// Forward declare interface `F`
interface F;
class C {
  // Forward declare `C` implements `F`
  impl as F;
}
// Definitions corresponding to forward declarations
interface F { ... }
impl C as F { ... }
```

To allow members of interfaces with default definitions to be forward declared, prefix them with the keyword `default`, following #1082.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-04-13 12:53:16 -07:00
Jon Meow 87e58f5db3 Switch executable semantics to use ErrorBuilder directly and relocate macros (#1184) 2022-04-13 09:05:21 -07:00
Chandler Carruth 6542506cdc Teach executable semantics to use the program path to locate data files. (#1179)
This allows it to find the prelude when run out of a Bazel runfiles tree
regardless of the current working directory. For example, this will
allow local testing of compiler explorer.
2022-04-12 19:55:35 -07:00
Geoff Romer 883f2a3ecd Update IfExpression to follow AST conventions (#1167) 2022-04-12 12:28:48 -07:00
Geoff Romer baf832b18b Update test assertions to match update_checks.py (#1166)
This restores us to a state where running update_checks.py is a no-op
2022-04-12 12:20:17 -07:00
Jon Meow f0f3b1a1e5 Refactor to reduce namespace specifiers (#1182) 2022-04-12 12:08:13 -07:00
Jon Meow 797a33df02 Fix flake8 config (#1181) 2022-04-11 15:01:46 -07:00
pk19604014andJon Meow 22462a0d7f Carbon fuzzing 3/3: added actual fuzzer implementation and a fuzzverter utility for investigating crashing protos (#1156)
* finished fuzzer and added fuzzverter util

* fixed typo

* renamed cmd line params

* fixed libproto_mutator download path

* small fixes

* small fixes

* small fixes

* renamed sample corpus proto

* small fixes

* try building on github with LIBCPP_DEBUG enabled

* temporarily marked proto fuzzer as a manual test

* code review

* use a dedicated proto-fuzzer feature to work around LIBCPP_DEBUG=1 crash in proto code

* code review comments, added README.md

* minor fixes to the text

* Update bazel/cc_toolchains/clang_cc_toolchain_config.bzl

Co-authored-by: Jon Meow <jperkins@google.com>

* use Carbon source representation for "empty Main()" instead of text format proto representation

* fixed typo

* made FuzzerUtil produce the full carbon source (proto converted + Main if needed) to decrease code duplication a bit

* typo

* switched to text proto format per code review

* Update executable_semantics/prelude.h

Co-authored-by: Jon Meow <jperkins@google.com>

* Update executable_semantics/fuzzing/README.md

Co-authored-by: Jon Meow <jperkins@google.com>

* Update executable_semantics/fuzzing/README.md

Co-authored-by: Jon Meow <jperkins@google.com>

* Update executable_semantics/fuzzing/README.md

Co-authored-by: Jon Meow <jperkins@google.com>

* Update executable_semantics/fuzzing/README.md

Co-authored-by: Jon Meow <jperkins@google.com>

* Update executable_semantics/fuzzing/README.md

Co-authored-by: Jon Meow <jperkins@google.com>

* review comments

* removed unnecessary file mode variables

* Update executable_semantics/fuzzing/fuzzverter.cpp

Co-authored-by: Jon Meow <jperkins@google.com>

* Update executable_semantics/fuzzing/README.md

Co-authored-by: Jon Meow <jperkins@google.com>

* Update executable_semantics/fuzzing/README.md

Co-authored-by: Jon Meow <jperkins@google.com>

* code review comments

* Update executable_semantics/syntax/BUILD

Co-authored-by: Jon Meow <jperkins@google.com>

* buildifier

Co-authored-by: Jon Meow <jperkins@google.com>
2022-04-11 16:47:03 -04:00
Jon Meow db0de1004f Trying to get scripts to use hermetic clang-format (#1180) 2022-04-11 13:25:49 -07:00
db66a4350e Generic details 11: operator overloading (#1144)
Operators rewrite to calls of specific operator interface functions, so you overload an operator for a type by implementing an interface for it. There is a `like` operator for defining a set if implementations for supporting implicit conversions more conveniently.

Co-authored-by: Geoff Romer <gromer@google.com>
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-04-08 14:51:49 -07:00
Richard Smith 9d0f55a4b5 Hand-port of re2.h into Carbon (#1161) 2022-04-08 14:34:26 -07:00
Jon MeowandChandler Carruth 8c9bf973c0 Editing README examples (#1164)
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-04-08 08:36:12 -07:00
Jon Meow 07d1ae0779 Fix include guard (#1176) 2022-04-07 13:00:54 -07:00
Jon Meow 804e39a86c Remove proposals dir special casing (#1170) 2022-04-07 10:34:00 -07:00
pk19604014 e88bd210fd Removed unneeded -Wno-missing-field-initializers flag (#1174) 2022-04-06 14:53:10 -04:00
pk19604014 a28cbd29b5 Removed std::exit() from RawExitingStream, as this functionality has been migrated to returning error codes (#1175) 2022-04-06 14:52:39 -04:00
pk19604014 34d128783f style fixes (#1172) 2022-04-06 08:44:33 -04:00
Jon Meow 9570374c78 Update third_party README (#1171) 2022-04-05 08:25:04 -07:00
Jon Meow a24963ea6b Move diagnostic definitions to be closer to where they emit (#1169) 2022-04-04 15:14:43 -07:00
Jon Meow 93733135c3 pre-commit autoupdate (#1168) 2022-04-04 13:28:22 -07:00