Commit Graph
885 Commits
Author SHA1 Message Date
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
Jon MeowandRichard Smith aaca540a05 Restructure Diagnostic objects to allow late formatting (#1131)
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
2022-04-04 10:59:09 -07:00
Geoff Romer 014c3847b3 Fix build break from #1158 (#1165) 2022-03-31 11:22:58 -07:00
Geoff Romer 8f9638d759 Initial support for statically-sized arrays (#1158) 2022-03-31 10:55:34 -07:00
Richard Smith 0b8a96af6d Fix C++ range-based for syntax (#1163) 2022-03-30 18:18:09 -07:00
f8ded337fb Carbon fuzzing 2/3: added logic for converting carbon.proto to a Carbon source string. (#1155)
* Carbon fuzzing 2/3: added logic for converting carbon.proto to a Carbon source string.

* adjusted to proto changes in proto PR

* addressed todos

* removed unnecessary has_xx() calls

* minor fix

* sync from part 1

* Update executable_semantics/fuzzing/proto_to_carbon_test.cpp

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

* review comments

* Update common/fuzzing/proto_to_carbon.cpp

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

* Update common/fuzzing/proto_to_carbon.cpp

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

* code review

* code review

* Update common/fuzzing/proto_to_carbon.cpp

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

* code review

* merged + added support for type_params in class

* use <> includes for protobuf

* review comments

* code review comments

Co-authored-by: Geoff Romer <gromer@google.com>
Co-authored-by: Jon Meow <jperkins@google.com>
2022-03-30 14:29:35 -04:00
pk19604014 a89be4ffea Added a filegroup for prelude.carbon for easier referencing from other BUILD files and to help with internal build visibility issue (#1160)
* added a filegroup for prelude.carbon

* renamed prelude_files filegroup to standard_libraries per code review comment
2022-03-30 12:50:46 -04:00
pk19604014 134bf9bbdc Preserve the order of expressions in deduced_param_list (#1157) 2022-03-29 14:04:45 -04:00
210856dd57 Generic classes (#1124)
* start of generic classes

* fix regressions

* class functions in interfaces

* access to class function on interface from class parameter

* more stuff working for generic classes

* fixing bugs

* update TypeEqual for generic classes

* fixing bugs and finding new ones

* disable unqualified access to members from other members for now

* minor edits

* bug fixes

* introduce compile_time_value to use in type checker instead of constant_value

* cleanup

* put a CHECK back in

* failure test cases for the new FATAL_COMPILATION_ERROR

* change a runtime FATAL into a FATAL_COMPILATION_ERROR

* Update executable_semantics/ast/declaration.h

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

* Update executable_semantics/interpreter/action_stack.cpp

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

* Update executable_semantics/interpreter/interpreter.cpp

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

* Update executable_semantics/interpreter/value.cpp

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

* Update executable_semantics/interpreter/value.cpp

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

* Update executable_semantics/interpreter/interpreter.cpp

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

* Update executable_semantics/interpreter/value.cpp

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

* Update executable_semantics/interpreter/value.cpp

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

* Update executable_semantics/interpreter/resolve_names.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* responses to reviews

* Update executable_semantics/interpreter/type_checker.cpp

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

* rename compile_time_value to symbolic_identity

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/type_checker.cpp

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

* Update executable_semantics/interpreter/value.cpp

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

* Update executable_semantics/interpreter/value.cpp

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

* Update executable_semantics/interpreter/value.cpp

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

* more edits from review

* Apply suggestions from code review

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

* review responses

* Update executable_semantics/interpreter/interpreter.cpp

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

* const impl_scope for TypeCheckChoiceDeclaration

* add some const

Co-authored-by: Jon Meow <jperkins@google.com>
Co-authored-by: Geoff Romer <gromer@google.com>
2022-03-29 13:09:41 -04:00
Geoff Romer 37a0e35b31 Clarify that rationale can cite principles (#1153) 2022-03-28 11:59:04 -07:00
pk19604014andJon Meow 5ae6d22415 Carbon fuzzing 1/3: added a proto for representing Carbon AST + ast_to_proto library (#1128)
* initial fuzzer proto

* visibility change

* use newer protocol buffer version which has the defs.bzl bug fixed

* Adjusted fix_cc_deps to work with protobuf external repo

* explicitly load rules_cc to avoid a frozenset bug in the version loaded by protobuf

* use explit deps, use llvm's zlib

* restored cxx settings

* deps change

* Cleaned up WORKSPACE and changed the test to read carbon sources from testdata

* updated comment

* adapted to new ErrorOr return value

* proto buffer 3.19.2 -> 3.19.4

* changed comment

* Apply suggestions from code review

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

* Apply suggestions from code review

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

* Update executable_semantics/fuzzing/BUILD

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

* addressed review comments

* updated Unimplemented error message

* Addressed review comments

* more review comments

* switched to loading protobuf via rules_proto()

* Ignore protobuf headers in fix_cc_deps.py until the script supports alias rules

* renamed repeated proto fields to be plural

* added @zlib to check_non_test_cc_deps

* Update common/fuzzing/BUILD

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

* review comments

* set is_omitted_expression for return value

Co-authored-by: Jon Meow <jperkins@google.com>
2022-03-25 15:29:31 -04:00
770279e02d Arithmetic expressions (#1083)
Add support for arithmetic operators:

- Unary `+`.
- Binary `+`, `-`, `*`, `/`, `%`.

Specify their behavior for integer and floating-point types. Signed integer overflow is a programming error, handled in various ways. Unsigned integer overflow is specified as wrapping around, intended for hashing / crypto / PRNG use cases.

Co-authored-by: jonmeow <46229924+jonmeow@users.noreply.github.com>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: josh11b <josh11b@users.noreply.github.com>
2022-03-24 17:51:17 -07:00
Jon Meow f9014a6d10 clang-tidy with readability checks (#1148) 2022-03-24 13:22:44 -07:00
Jon Meow 9e7a965057 Add missing value_category dep to syntax (#1151) 2022-03-24 13:03:11 -07:00
josh11b 5238a8d37a Work around prettier bug (#1150)
Looks like this might be related to prettier/prettier#6112 , but the observed behavior is more broken than that bug indicates.
2022-03-23 13:49:48 -07:00