Commit Graph
79 Commits
Author SHA1 Message Date
Kareem Ergawyandergawy 3d44169199 Fix integer literal token printing. (#2050)
Summary:
An `llvm::APInt` is always treated as a signed value by `operator<<`;
check [1]. This resulted in printing incorrect values for tokens that
have their MSB set to 1. For example, a value 9 would be printed as -7
since its `APInt` object would be 4-bits wide. However, integer literals
are always tokenized without the sign character so it is safe to treat
the values as unsigned for printing pruposes.

[1] https://llvm.org/doxygen/APInt_8h_source.html

Co-authored-by: ergawy <kareem.ergawy@guardsquare.com>
2022-08-17 09:29:07 -07:00
Kareem Ergawyandergawy d7957cc4e1 Move an llvm::Error return value instead of copying it. (#2030)
Summary:
Fixes a small compilation error where an llvm::Error variable was being
returned by copy rather than by move. The llvm::Error copy constructor
is deleted.

Co-authored-by: ergawy <kareem.ergawy@guardsquare.com>
2022-08-15 10:24:57 -07:00
3405691582 7147ea0144 Make platform-specific mmap flags the exception. (#1929)
MAP_POPULATE is a Linux mmap flag that optionally assists read-ahead on
the mapping. It is nonstandard and omission does not affect the
underlying mapping, so fall back to not including the flag, rather than
the reverse.
2022-08-08 16:38:02 -07:00
db3caa5b0c A pass at documenting the toolchain implementation (#1897)
Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
2022-08-05 08:26:20 -07:00
13d6c33830 Fixed some grammar errors (#1599)
Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
Co-authored-by: Divanshu Chauhan <23524935+Divkix@users.noreply.github.com>
2022-07-30 12:12:03 -07:00
Josh Soref 066b103881 Spelling (#1580)
This PR corrects misspellings identified by the [check-spelling action](https://github.com/marketplace/actions/check-spelling).

The misspellings have been reported at https://github.com/jsoref/carbon-lang/commit/38a1c1640151899fd6da0442a92557f9543b6280#commitcomment-79197316

The action reports that the changes in this PR would make it happy: https://github.com/jsoref/carbon-lang/commit/173c8f9083a68aa61f7cfe94f720f1e5dc7f1ea3

Note: this PR does not include the action. If you're interested in running a spell check on every PR and push, that can be offered separately.

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2022-07-22 16:14:21 -07:00
prprprpony abee4cc73d Fix some typos in parser_impl.h (#1569) 2022-07-22 11:41:40 -07:00
cui fliter e8206bf4bf fix some typos (#1444)
Signed-off-by: cui fliter <imcusg@gmail.com>
2022-07-20 07:01:47 +03:00
Jon Ross-Perkins a23f15e901 Refactoring Semantics towards a more instruction-like model (#1349)
This is how I'm interpreting discussion:

- Basic elements are getting set to an ID.
- SetName exists to assign a name (which can then be referred to later with an identifier expression) to an ID.
- Expressions are broken down into a series of operations which operate on IDs.

So with something like the last test:

```
fn Main() { return 12 + 34; }
```

This becomes:

```
Function(%0,
  {IntegerLiteral(%3, 12),
   IntegerLiteral(%2, 34),
   BinaryOperator(%1, +, %3, %2),
   Return(%1),
  })
SetName(`Main`, %0)
```

Note I'm treating blocks as fairly equal to the top of a file now, and basically eliminating boundaries between things. That's because we have discussed also supporting code like:

```
fn Foo() {
  fn Bar() {}
  Bar();
}
```

Here a declaration of a function is occurring inside a code block, so it felt like eliminating the difference was the best choice.

I know you'd commented on the separation of nodes to individual files before; I still think we're going to have a lot of different types of nodes, and so separating them out into individual files makes them easier to browse.
2022-07-06 11:08:47 -07:00
Jon Ross-Perkins 6dd08d09ac Add workaround for StatementBlock declaration circularity (#1342)
This won't be visible everywhere, but I think something's needed -- this workaround is temporary while I work on a bigger change to semantics.
2022-06-23 15:28:50 -07:00
Jon Ross-Perkins 4113ec8a67 Semantics (#1213)
Working on toolchain semantics:

- SemanticsIR is set up as a container for the semantic tree.
- SemanticsIRFactory builds the tree, with separate transformations for each ParseNodeKind.
- ParseSubtreeConsumer is a helper for transforming a ParseTree::Node's children, managing size/nodes to prevent errors.
- The nodes subdirectory contains SemanticIR nodes.
- MetaNode is used to represent nodes which have "sub-classes": Statements, Declarations, and Expressions.
- MetaNodeBlock is used to represent nodes which exist together in a block with name lookup: Statements and Declarations (not Expressions).

This is traversing children first in order to address the RPO format of ParseTree. This means that when lists are formed, they're reversed to be in code-order (`FixReverseOrdering`).

This is still very much incomplete -- the main intent at present is to demonstrate structure.
2022-06-15 12:40:07 -07:00
Jon Meow 2e776a442d FIXME -> TODO for C++ style (#1282) 2022-05-20 14:28:25 -07:00
Jon Meow 20728dbd3a CARBON_ header guards (#1261)
This modifies scripts/check_header_guards.py to add the CARBON_ prefix; everything else is pre-commit.
2022-05-12 17:25:43 -07:00
Jon Meow 3825f97e43 Add automatic header guard checks/fixes (#1260)
My intent is to add CARBON_ bas a prefix, and this makes that easier by creating a tool for auto-fixing guards in general.

string_literal is a manual fix -- it had no guard and I didn't automate that (technically I think I could, especially by enforcing the file header/footer, but it didn't feel quite worth it to me).
2022-05-12 15:54:45 -07:00
Jon Meow af694b97cb Prefix most macro names with CARBON_ (#1232)
I'm doing this to avoid macro name conflicts, following https://google.github.io/styleguide/cppguide.html#Preprocessor_Macros: "If you do export a macro from a header, it must have a globally unique name. To achieve this, it must be named with a prefix consisting of your project's namespace name (but upper case)."

Commands run:

```
sed -i 's/\(DCHECK\|CHECK\|FATAL\|MAKE_UNIQUE_NAME\|MAKE_UNIQUE_NAME_IMPL\|RAW_EXITING_STREAM\|RETURN_IF_ERROR\|RETURN_IF_ERROR_IMPL\|ASSIGN_OR_RETURN\|ASSIGN_OR_RETURN_IMPL\|DIAGNOSTIC_KIND\|RETURN_IF_STACK_LIMITED\)(/CARBON_\1(/g' $(git ls-files *.cpp *.h *.lpp *.ypp *.def ':!third_party')
sed -i 's/#undef DIAGNOSTIC_KIND/#undef CARBON_DIAGNOSTIC_KIND/' toolchain/diagnostics/diagnostic_registry.def
```

Note this isn't *quite* everything, but it's intended to be a large pass at everything:

```
╚╡git grep '#define ' *.cpp *.h *.lpp *.ypp *.def ':!third_party' | grep -v '#define CARBON' | grep -v _H_
explorer/syntax/lexer.lpp:  #define YY_USER_ACTION                                             \
explorer/syntax/lexer.lpp:  #define SIMPLE_TOKEN(name) \
explorer/syntax/lexer.lpp:  #define ARG_TOKEN(name, arg) \
explorer/syntax/parse_and_lex_context.h:#define YY_DECL                                                         \
migrate_cpp/cpp_refactoring/var_decl.cpp:#define ABSTRACT_TYPE(Class, Base)
migrate_cpp/cpp_refactoring/var_decl.cpp:#define TYPE(Class, Base)     \
```

We may in particular want to do a pass to clean up #ifdef guards and make them be CARBON_ rooted.
2022-05-06 15:30:25 -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
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 a24963ea6b Move diagnostic definitions to be closer to where they emit (#1169) 2022-04-04 15:14:43 -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
Jon Meow f9014a6d10 clang-tidy with readability checks (#1148) 2022-03-24 13:22:44 -07:00
Jon Meow e5a87af6fe clang-tidy without config changes (#1147)
Separating out existing fixes because of #1148 which turns on more.
2022-03-22 11:13:27 -07:00
Jon Meow 694a0a7dfb Clean up renamed test (#1145) 2022-03-21 11:55:08 -07:00
Jon Meow 699172633f Sort diagnostic output from the driver by default (#1143) 2022-03-17 13:27:25 -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
Jon Meow 7bbf4fbba3 Accessor renames on diagnostics+source buffer (#1133) 2022-03-15 15:43:53 -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
Jon Meow 4a98acc3ea Consistently use llvm::Optional, not std::optional (#1118) 2022-03-03 15:45:42 -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
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 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 c01634ac8f Ignore large fuzzer inputs. (#1085) 2022-02-23 11:25:34 -08:00
Jon Meow 50f5b3f226 Stop using fuzz input for filenames (#1078) 2022-02-16 10:10:58 -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
Jon Meow 2296ceb56c Add a Diagnostic printer for tests. (#1087) 2022-02-15 08:35:05 -08:00
Jon Meow 58104dc364 Switch clang-format pre-commit to get 13.0.0 (#1066)
Also enable gh action, I'm expecting that to work now.
2022-02-08 17:42:12 -08:00
Jon Meow 385ac7da86 Refactor lit testing to generate per-file tests. (#1063)
This switches to generating per-file targets such as `//executable_semantics/testdata:tuple/equality_false.carbon.test`, instead of one test covering all files. Essentially this relies on bazel instead of lit to handle test parallelization.
2022-02-08 11:01:27 -08:00
Jon Meow dfef55fc2c Improve string lexing performance (#1001)
See benchmark notes on https://github.com/carbon-language/carbon-lang/pull/1001
2022-01-28 10:05:07 -08:00
Jon Meow d76fe462f6 Have FileCheck dump all input on errors. (#1050)
I'm hoping this improves debugability.
2022-01-27 12:49:44 -08:00
Jon Meow b048bb766d Starting to think about toolchain semantic analysis -- create a trivial shell for it. (#1038) 2022-01-25 11:06:16 -08:00