From 22d7cd19edd1c89a644504e8c5e18fa88bc677f3 Mon Sep 17 00:00:00 2001 From: Jon Ross-Perkins Date: Mon, 13 Feb 2023 08:04:49 -0800 Subject: [PATCH] Polish out support for reals and strings. (#2593) Reals were mostly handled, but this PR adds storage of them. It also switches a little towards the FloatingPointType semantic from TokenizedBuffer. While real literals like `1.0` were handled, the type literals were not. This just adds `f64`, similar to how I also only support `i32`. The String type literal wasn't used, so I've added support in lexer and parser. Per discussion with @zygoloid String might be renamed based on the newer type literal plan, but it's still String in explorer and the design, so this is just consistent. The builtin_types.carbon tests the three basic types that are there right now. The test is added to both parser and semantics so that it's clear what the state is in both stages. --- toolchain/lexer/testdata/carbon_test.carbon | 24 +++---- toolchain/lexer/token_kind.def | 2 + toolchain/lexer/token_kind.h | 8 ++- toolchain/lexer/token_kind_test.cpp | 6 +- toolchain/parser/parser.cpp | 3 +- .../testdata/basics/builtin_types.carbon | 34 ++++++++++ toolchain/parser/testdata/basics/var.carbon | 2 +- .../semantics/semantics_builtin_kind.def | 14 +++-- toolchain/semantics/semantics_ir.cpp | 7 +++ toolchain/semantics/semantics_ir.h | 25 ++++++++ toolchain/semantics/semantics_ir_test.cpp | 1 + toolchain/semantics/semantics_node.h | 36 ++++++++--- toolchain/semantics/semantics_node_kind.def | 1 + .../semantics_parse_tree_handler.cpp | 33 +++++++++- .../testdata/basics/builtin_types.carbon | 62 +++++++++++++++++++ .../semantics/testdata/basics/empty.carbon | 3 + .../testdata/basics/empty_decl.carbon | 28 +++++++++ .../testdata/basics/fail_name_lookup.carbon | 9 ++- .../semantics/testdata/function/basic.carbon | 9 ++- .../semantics/testdata/function/order.carbon | 17 ++--- .../testdata/function/params_one.carbon | 17 ++--- .../testdata/function/params_one_comma.carbon | 17 ++--- .../testdata/function/params_two.carbon | 25 ++++---- .../testdata/function/params_two_comma.carbon | 25 ++++---- .../testdata/operators/binary_op.carbon | 17 ++--- .../operators/fail_type_mismatch.carbon | 20 +++--- .../operators/fail_type_mismatch_once.carbon | 22 ++++--- .../semantics/testdata/return/literal.carbon | 15 +++-- .../semantics/testdata/return/trivial.carbon | 13 ++-- toolchain/semantics/testdata/var/decl.carbon | 15 +++-- .../testdata/var/decl_with_init.carbon | 17 ++--- .../testdata/var/fail_duplicate_decl.carbon | 21 ++++--- .../var/fail_init_type_mismatch.carbon | 20 +++--- .../testdata/var/fail_init_with_self.carbon | 17 ++--- .../var/fail_lookup_outside_scope.carbon | 19 +++--- .../semantics/testdata/var/global_decl.carbon | 7 ++- .../testdata/var/global_decl_with_init.carbon | 9 ++- .../testdata/var/global_lookup.carbon | 13 ++-- .../var/global_lookup_in_scope.carbon | 21 ++++--- .../semantics/testdata/var/lookup.carbon | 17 ++--- 40 files changed, 482 insertions(+), 189 deletions(-) create mode 100644 toolchain/parser/testdata/basics/builtin_types.carbon create mode 100644 toolchain/semantics/testdata/basics/builtin_types.carbon create mode 100644 toolchain/semantics/testdata/basics/empty_decl.carbon diff --git a/toolchain/lexer/testdata/carbon_test.carbon b/toolchain/lexer/testdata/carbon_test.carbon index 8ba0be71cdc2..ac11c46ece6b 100644 --- a/toolchain/lexer/testdata/carbon_test.carbon +++ b/toolchain/lexer/testdata/carbon_test.carbon @@ -6,19 +6,19 @@ // RUN: %{carbon-run-tokens} // CHECK:STDOUT: [ -// CHECK:STDOUT: { index: 0, kind: 'Fn', line: {{ *}}[[@LINE+7]], column: 1, indent: 1, spelling: 'fn', has_trailing_space: true }, -// CHECK:STDOUT: { index: 1, kind: 'Identifier', line: {{ *}}[[@LINE+6]], column: 4, indent: 1, spelling: 'run', identifier: 0 }, -// CHECK:STDOUT: { index: 2, kind: 'OpenParen', line: {{ *}}[[@LINE+5]], column: 7, indent: 1, spelling: '(', closing_token: 5 }, -// CHECK:STDOUT: { index: 3, kind: 'Identifier', line: {{ *}}[[@LINE+4]], column: 8, indent: 1, spelling: 'String', identifier: 1, has_trailing_space: true }, -// CHECK:STDOUT: { index: 4, kind: 'Identifier', line: {{ *}}[[@LINE+3]], column: 15, indent: 1, spelling: 'program', identifier: 2 }, -// CHECK:STDOUT: { index: 5, kind: 'CloseParen', line: {{ *}}[[@LINE+2]], column: 22, indent: 1, spelling: ')', opening_token: 2, has_trailing_space: true }, -// CHECK:STDOUT: { index: 6, kind: 'OpenCurlyBrace', line: {{ *}}[[@LINE+1]], column: 24, indent: 1, spelling: '{', closing_token: 10, has_trailing_space: true }, +// CHECK:STDOUT: { index: 0, kind: 'Fn', line: {{ *}}[[@LINE+7]], column: 1, indent: 1, spelling: 'fn', has_trailing_space: true }, +// CHECK:STDOUT: { index: 1, kind: 'Identifier', line: {{ *}}[[@LINE+6]], column: 4, indent: 1, spelling: 'run', identifier: 0 }, +// CHECK:STDOUT: { index: 2, kind: 'OpenParen', line: {{ *}}[[@LINE+5]], column: 7, indent: 1, spelling: '(', closing_token: 5 }, +// CHECK:STDOUT: { index: 3, kind: 'StringTypeLiteral', line: {{ *}}[[@LINE+4]], column: 8, indent: 1, spelling: 'String', has_trailing_space: true }, +// CHECK:STDOUT: { index: 4, kind: 'Identifier', line: {{ *}}[[@LINE+3]], column: 15, indent: 1, spelling: 'program', identifier: 1 }, +// CHECK:STDOUT: { index: 5, kind: 'CloseParen', line: {{ *}}[[@LINE+2]], column: 22, indent: 1, spelling: ')', opening_token: 2, has_trailing_space: true }, +// CHECK:STDOUT: { index: 6, kind: 'OpenCurlyBrace', line: {{ *}}[[@LINE+1]], column: 24, indent: 1, spelling: '{', closing_token: 10, has_trailing_space: true }, fn run(String program) { - // CHECK:STDOUT: { index: 7, kind: 'Return', line: {{ *}}[[@LINE+3]], column: 3, indent: 3, spelling: 'return', has_trailing_space: true }, - // CHECK:STDOUT: { index: 8, kind: 'Identifier', line: {{ *}}[[@LINE+2]], column: 10, indent: 3, spelling: 'True', identifier: 3 }, - // CHECK:STDOUT: { index: 9, kind: 'Semi', line: {{ *}}[[@LINE+1]], column: 14, indent: 3, spelling: ';', has_trailing_space: true }, + // CHECK:STDOUT: { index: 7, kind: 'Return', line: {{ *}}[[@LINE+3]], column: 3, indent: 3, spelling: 'return', has_trailing_space: true }, + // CHECK:STDOUT: { index: 8, kind: 'Identifier', line: {{ *}}[[@LINE+2]], column: 10, indent: 3, spelling: 'True', identifier: 2 }, + // CHECK:STDOUT: { index: 9, kind: 'Semi', line: {{ *}}[[@LINE+1]], column: 14, indent: 3, spelling: ';', has_trailing_space: true }, return True; -// CHECK:STDOUT: { index: 10, kind: 'CloseCurlyBrace', line: {{ *}}[[@LINE+3]], column: 1, indent: 1, spelling: '}', opening_token: 6, has_trailing_space: true }, -// CHECK:STDOUT: { index: 11, kind: 'EndOfFile', line: {{ *}}[[@LINE+2]], column: 2, indent: 1, spelling: '' }, +// CHECK:STDOUT: { index: 10, kind: 'CloseCurlyBrace', line: {{ *}}[[@LINE+3]], column: 1, indent: 1, spelling: '}', opening_token: 6, has_trailing_space: true }, +// CHECK:STDOUT: { index: 11, kind: 'EndOfFile', line: {{ *}}[[@LINE+2]], column: 2, indent: 1, spelling: '' }, // CHECK:STDOUT: ] } diff --git a/toolchain/lexer/token_kind.def b/toolchain/lexer/token_kind.def index 3fc3121863df..f249f2f96899 100644 --- a/toolchain/lexer/token_kind.def +++ b/toolchain/lexer/token_kind.def @@ -156,6 +156,8 @@ CARBON_KEYWORD_TOKEN(Return, "return") CARBON_KEYWORD_TOKEN(Returned, "returned") CARBON_KEYWORD_TOKEN(SelfParameter, "self") CARBON_KEYWORD_TOKEN(SelfType, "Self") +// TODO: Although we provide a String type literal, it's not standardized. +CARBON_KEYWORD_TOKEN(StringTypeLiteral, "String") CARBON_KEYWORD_TOKEN(Then, "then") // Underscore is tokenized as a keyword because it's part of identifiers. CARBON_KEYWORD_TOKEN(Underscore, "_") diff --git a/toolchain/lexer/token_kind.h b/toolchain/lexer/token_kind.h index a29d964a652f..588341f6bc14 100644 --- a/toolchain/lexer/token_kind.h +++ b/toolchain/lexer/token_kind.h @@ -86,7 +86,13 @@ template <> struct format_provider { static void format(const Carbon::TokenKind& kind, raw_ostream& out, StringRef /*style*/) { - out << kind.fixed_spelling(); + auto spelling = kind.fixed_spelling(); + if (!spelling.empty()) { + out << spelling; + } else { + // Default to the name if there's no fixed spelling. + out << kind; + } } }; diff --git a/toolchain/lexer/token_kind_test.cpp b/toolchain/lexer/token_kind_test.cpp index ba12f7e64577..99820039e7e4 100644 --- a/toolchain/lexer/token_kind_test.cpp +++ b/toolchain/lexer/token_kind_test.cpp @@ -21,9 +21,9 @@ using ::testing::MatchesRegex; constexpr llvm::StringLiteral SymbolRegex = R"([\[\]{}!@#%^&*()/?\\|;:.,<>=+~-]+)"; -// We restrict keywords to be lowercase ASCII letters and underscores with one -// exception: `Self`. -constexpr llvm::StringLiteral KeywordRegex = "[a-z_]+|Self"; +// We restrict keywords to be lowercase ASCII letters and underscores with a few +// specific exceptions. +constexpr llvm::StringLiteral KeywordRegex = "[a-z_]+|Self|String"; #define CARBON_TOKEN(TokenName) \ TEST(TokenKindTest, TokenName) { \ diff --git a/toolchain/parser/parser.cpp b/toolchain/parser/parser.cpp index bf8037c69e02..08ff10392ff6 100644 --- a/toolchain/parser/parser.cpp +++ b/toolchain/parser/parser.cpp @@ -846,7 +846,8 @@ auto Parser::HandleExpressionInPostfixState() -> void { case TokenKind::StringLiteral: case TokenKind::IntegerTypeLiteral: case TokenKind::UnsignedIntegerTypeLiteral: - case TokenKind::FloatingPointTypeLiteral: { + case TokenKind::FloatingPointTypeLiteral: + case TokenKind::StringTypeLiteral: { AddLeafNode(ParseNodeKind::Literal, Consume()); PushState(state); break; diff --git a/toolchain/parser/testdata/basics/builtin_types.carbon b/toolchain/parser/testdata/basics/builtin_types.carbon new file mode 100644 index 000000000000..8b0134976ab4 --- /dev/null +++ b/toolchain/parser/testdata/basics/builtin_types.carbon @@ -0,0 +1,34 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// AUTOUPDATE +// RUN: %{carbon-run-parser} +// CHECK:STDOUT: [ +// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'DeclaredName', text: 'test_i32'}, +// CHECK:STDOUT: {kind: 'Literal', text: 'i32'}, +// CHECK:STDOUT: {kind: 'PatternBinding', text: ':', subtree_size: 3}, +// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, +// CHECK:STDOUT: {kind: 'Literal', text: '0'}, +// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 7}, +// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'DeclaredName', text: 'test_f64'}, +// CHECK:STDOUT: {kind: 'Literal', text: 'f64'}, +// CHECK:STDOUT: {kind: 'PatternBinding', text: ':', subtree_size: 3}, +// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, +// CHECK:STDOUT: {kind: 'Literal', text: '0.1'}, +// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 7}, +// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'DeclaredName', text: 'test_str'}, +// CHECK:STDOUT: {kind: 'Literal', text: 'String'}, +// CHECK:STDOUT: {kind: 'PatternBinding', text: ':', subtree_size: 3}, +// CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, +// CHECK:STDOUT: {kind: 'Literal', text: '"Test"'}, +// CHECK:STDOUT: {kind: 'VariableDeclaration', text: ';', subtree_size: 7}, +// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, +// CHECK:STDOUT: ] + +var test_i32: i32 = 0; +var test_f64: f64 = 0.1; +var test_str: String = "Test"; diff --git a/toolchain/parser/testdata/basics/var.carbon b/toolchain/parser/testdata/basics/var.carbon index 78a48780606b..cb858ec8c910 100644 --- a/toolchain/parser/testdata/basics/var.carbon +++ b/toolchain/parser/testdata/basics/var.carbon @@ -24,7 +24,7 @@ // CHECK:STDOUT: {kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5}, // CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, // CHECK:STDOUT: {kind: 'DeclaredName', text: 's'}, -// CHECK:STDOUT: {kind: 'NameReference', text: 'String'}, +// CHECK:STDOUT: {kind: 'Literal', text: 'String'}, // CHECK:STDOUT: {kind: 'PatternBinding', text: ':', subtree_size: 3}, // CHECK:STDOUT: {kind: 'VariableInitializer', text: '='}, // CHECK:STDOUT: {kind: 'Literal', text: '"hello"'}, diff --git a/toolchain/semantics/semantics_builtin_kind.def b/toolchain/semantics/semantics_builtin_kind.def index ebe0c9c96e49..c5d8a7f17d5e 100644 --- a/toolchain/semantics/semantics_builtin_kind.def +++ b/toolchain/semantics/semantics_builtin_kind.def @@ -45,13 +45,17 @@ CARBON_SEMANTICS_BUILTIN_KIND(TypeType, TypeType) // This has a deliberately self-referential type. CARBON_SEMANTICS_BUILTIN_KIND(InvalidType, InvalidType) -// The type of integers and integer literals, currently always i32. Long-term -// we may not want it this way, but for now this is the approach. +// The type of integer values and integer literals, currently always i32. +// Long-term we may not want it this way, but for now this is the approach. CARBON_SEMANTICS_BUILTIN_KIND(IntegerType, TypeType) -// The type of reals and real literals, currently always f64. Long-term -// we may not want it this way, but for now this is the approach. -CARBON_SEMANTICS_BUILTIN_KIND(RealType, TypeType) +// The type of floating point values and real literals, currently always f64. +// Long-term we may not want it this way, but for now this is the approach. +CARBON_SEMANTICS_BUILTIN_KIND(FloatingPointType, TypeType) + +// The type of string values and String literals. +// Long-term we may not want it this way, but for now this is the approach. +CARBON_SEMANTICS_BUILTIN_KIND(StringType, TypeType) // Keep invalid last, so that we can use values as array indices without needing // an invalid entry. diff --git a/toolchain/semantics/semantics_ir.cpp b/toolchain/semantics/semantics_ir.cpp index 3485de59e5d7..12b2037edb6e 100644 --- a/toolchain/semantics/semantics_ir.cpp +++ b/toolchain/semantics/semantics_ir.cpp @@ -77,6 +77,13 @@ auto SemanticsIR::Print(llvm::raw_ostream& out) const -> void { } out << "]\n"; + out << "real_literals: [\n"; + for (const auto& real_literal : real_literals_) { + out.indent(Indent); + out << real_literal << ",\n"; + } + out << "]\n"; + out << "strings: [\n"; for (const auto& string : strings_) { out.indent(Indent); diff --git a/toolchain/semantics/semantics_ir.h b/toolchain/semantics/semantics_ir.h index d41f7980791a..7c2cb898d819 100644 --- a/toolchain/semantics/semantics_ir.h +++ b/toolchain/semantics/semantics_ir.h @@ -29,6 +29,20 @@ struct SemanticsCallable { SemanticsNodeBlockId param_refs_id; }; +struct SemanticsRealLiteral { + auto Print(llvm::raw_ostream& out) const -> void { + out << "{mantissa: " << mantissa << ", exponent: " << exponent + << ", is_decimal: " << is_decimal << "}"; + } + + llvm::APInt mantissa; + llvm::APInt exponent; + + // If false, the value is mantissa * 2^exponent. + // If true, the value is mantissa * 10^exponent. + bool is_decimal; +}; + // Provides semantic analysis on a ParseTree. class SemanticsIR { public: @@ -103,6 +117,14 @@ class SemanticsIR { return node_blocks_[block_id.index]; } + // Adds a real literal, returning an ID to reference it. + auto AddRealLiteral(SemanticsRealLiteral real_literal) + -> SemanticsRealLiteralId { + SemanticsRealLiteralId id(real_literals_.size()); + real_literals_.push_back(real_literal); + return id; + } + // Adds an string, returning an ID to reference it. auto AddString(llvm::StringRef str) -> SemanticsStringId { // If the string has already been stored, return the corresponding ID. @@ -139,6 +161,9 @@ class SemanticsIR { // Storage for integer literals. llvm::SmallVector integer_literals_; + // Storage for real literals. + llvm::SmallVector real_literals_; + // Storage for strings. strings_ provides a list of allocated strings, while // string_to_id_ provides a mapping to identify strings. llvm::StringMap string_to_id_; diff --git a/toolchain/semantics/semantics_ir_test.cpp b/toolchain/semantics/semantics_ir_test.cpp index acde13b20670..7ff341d1ff69 100644 --- a/toolchain/semantics/semantics_ir_test.cpp +++ b/toolchain/semantics/semantics_ir_test.cpp @@ -51,6 +51,7 @@ TEST(SemanticsIRTest, YAML) { Pair("cross_reference_irs_size", "1"), Pair("callables", Yaml::Sequence(IsEmpty())), Pair("integer_literals", Yaml::Sequence(ElementsAre("0"))), + Pair("real_literals", Yaml::Sequence(IsEmpty())), Pair("strings", Yaml::Sequence(ElementsAre("x"))), Pair("nodes", Yaml::Sequence(AllOf( diff --git a/toolchain/semantics/semantics_node.h b/toolchain/semantics/semantics_node.h index db86b734736b..8172ab34a98c 100644 --- a/toolchain/semantics/semantics_node.h +++ b/toolchain/semantics/semantics_node.h @@ -15,7 +15,7 @@ namespace Carbon { -// Type-safe storage of Node IDs. +// The ID of a node. struct SemanticsNodeId : public IndexBase { // An explicitly invalid node ID. // NOLINTNEXTLINE(readability-identifier-naming) @@ -60,7 +60,7 @@ struct SemanticsCrossReferenceIRId : public IndexBase { } }; -// Type-safe storage of integer literals. +// The ID of an integer literal. struct SemanticsIntegerLiteralId : public IndexBase { using IndexBase::IndexBase; auto Print(llvm::raw_ostream& out) const -> void { @@ -69,7 +69,7 @@ struct SemanticsIntegerLiteralId : public IndexBase { } }; -// Type-safe storage of node blocks. +// The ID of a node block. struct SemanticsNodeBlockId : public IndexBase { // All SemanticsIR instances must provide the 0th node block as empty. // NOLINTNEXTLINE(readability-identifier-naming) @@ -91,7 +91,16 @@ constexpr SemanticsNodeBlockId SemanticsNodeBlockId::Empty = constexpr SemanticsNodeBlockId SemanticsNodeBlockId::Invalid = SemanticsNodeBlockId(SemanticsNodeBlockId::InvalidIndex); -// Type-safe storage of strings. +// The ID of a real literal. +struct SemanticsRealLiteralId : public IndexBase { + using IndexBase::IndexBase; + auto Print(llvm::raw_ostream& out) const -> void { + out << "real"; + IndexBase::Print(out); + } +}; + +// The ID of a string. struct SemanticsStringId : public IndexBase { using IndexBase::IndexBase; auto Print(llvm::raw_ostream& out) const -> void { @@ -213,13 +222,14 @@ class SemanticsNode { return SemanticsIntegerLiteralId(arg0_); } - static auto MakeRealLiteral(ParseTree::Node parse_node) -> SemanticsNode { + static auto MakeRealLiteral(ParseTree::Node parse_node, + SemanticsRealLiteralId real) -> SemanticsNode { return SemanticsNode(parse_node, SemanticsNodeKind::RealLiteral, - SemanticsNodeId::BuiltinRealType); + SemanticsNodeId::BuiltinFloatingPointType, real.index); } - auto GetAsRealLiteral() const -> NoArgs { + auto GetAsRealLiteral() const -> SemanticsRealLiteralId { CARBON_CHECK(kind_ == SemanticsNodeKind::RealLiteral); - return {}; + return SemanticsRealLiteralId(arg0_); } static auto MakeReturn(ParseTree::Node parse_node) -> SemanticsNode { @@ -245,6 +255,16 @@ class SemanticsNode { return SemanticsNodeId(arg0_); } + static auto MakeStringLiteral(ParseTree::Node parse_node, + SemanticsStringId string_id) -> SemanticsNode { + return SemanticsNode(parse_node, SemanticsNodeKind::StringLiteral, + SemanticsNodeId::BuiltinStringType, string_id.index); + } + auto GetAsStringLiteral() const -> SemanticsStringId { + CARBON_CHECK(kind_ == SemanticsNodeKind::StringLiteral); + return SemanticsStringId(arg0_); + } + static auto MakeVarStorage(ParseTree::Node parse_node, SemanticsNodeId type) -> SemanticsNode { return SemanticsNode(parse_node, SemanticsNodeKind::VarStorage, type); diff --git a/toolchain/semantics/semantics_node_kind.def b/toolchain/semantics/semantics_node_kind.def index 26a830fb4d9f..3806eda4ec28 100644 --- a/toolchain/semantics/semantics_node_kind.def +++ b/toolchain/semantics/semantics_node_kind.def @@ -29,6 +29,7 @@ CARBON_SEMANTICS_NODE_KIND(IntegerLiteral) CARBON_SEMANTICS_NODE_KIND(RealLiteral) CARBON_SEMANTICS_NODE_KIND(Return) CARBON_SEMANTICS_NODE_KIND(ReturnExpression) +CARBON_SEMANTICS_NODE_KIND(StringLiteral) CARBON_SEMANTICS_NODE_KIND(VarStorage) #undef CARBON_SEMANTICS_NODE_KIND diff --git a/toolchain/semantics/semantics_parse_tree_handler.cpp b/toolchain/semantics/semantics_parse_tree_handler.cpp index 5f78cb5fccd4..e68f0cb3d28a 100644 --- a/toolchain/semantics/semantics_parse_tree_handler.cpp +++ b/toolchain/semantics/semantics_parse_tree_handler.cpp @@ -422,8 +422,19 @@ auto SemanticsParseTreeHandler::HandleLiteral(ParseTree::Node parse_node) break; } case TokenKind::RealLiteral: { - // TODO: Add storage of the Real literal. - AddNodeAndPush(parse_node, SemanticsNode::MakeRealLiteral(parse_node)); + auto token_value = tokens_->GetRealLiteral(token); + auto id = + semantics_->AddRealLiteral({.mantissa = token_value.Mantissa(), + .exponent = token_value.Exponent(), + .is_decimal = token_value.IsDecimal()}); + AddNodeAndPush(parse_node, + SemanticsNode::MakeRealLiteral(parse_node, id)); + break; + } + case TokenKind::StringLiteral: { + auto id = semantics_->AddString(tokens_->GetStringLiteral(token)); + AddNodeAndPush(parse_node, + SemanticsNode::MakeStringLiteral(parse_node, id)); break; } case TokenKind::IntegerTypeLiteral: { @@ -436,9 +447,25 @@ auto SemanticsParseTreeHandler::HandleLiteral(ParseTree::Node parse_node) node_stack_.Push(parse_node, SemanticsNodeId::BuiltinIntegerType); break; } - default: + case TokenKind::FloatingPointTypeLiteral: { + auto text = tokens_->GetTokenText(token); + if (text != "f64") { + emitter_->Emit(parse_node, SemanticsTodo, + "Currently only f64 is allowed"); + return false; + } + node_stack_.Push(parse_node, SemanticsNodeId::BuiltinFloatingPointType); + break; + } + case TokenKind::StringTypeLiteral: { + node_stack_.Push(parse_node, SemanticsNodeId::BuiltinStringType); + break; + } + default: { emitter_->Emit(parse_node, SemanticsTodo, llvm::formatv("Handle {0}", token_kind)); + return false; + } } return true; diff --git a/toolchain/semantics/testdata/basics/builtin_types.carbon b/toolchain/semantics/testdata/basics/builtin_types.carbon new file mode 100644 index 000000000000..a17dde11272b --- /dev/null +++ b/toolchain/semantics/testdata/basics/builtin_types.carbon @@ -0,0 +1,62 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// AUTOUPDATE +// RUN: %{carbon-run-semantics} +// CHECK:STDOUT: cross_reference_irs_size: 1 +// CHECK:STDOUT: callables: [ +// CHECK:STDOUT: ] +// CHECK:STDOUT: integer_literals: [ +// CHECK:STDOUT: 0, +// CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: {mantissa: 1, exponent: -1, is_decimal: 1}, +// CHECK:STDOUT: ] +// CHECK:STDOUT: strings: [ +// CHECK:STDOUT: test_i32, +// CHECK:STDOUT: test_f64, +// CHECK:STDOUT: test_str, +// CHECK:STDOUT: Test, +// CHECK:STDOUT: ] +// CHECK:STDOUT: nodes: [ +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node0, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, +// CHECK:STDOUT: {kind: VarStorage, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, +// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node5, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: VarStorage, type: node3}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node3}, +// CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, +// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node11, type: node3}, +// CHECK:STDOUT: {kind: VarStorage, type: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node13, type: node4}, +// CHECK:STDOUT: {kind: StringLiteral, arg0: str3, type: node4}, +// CHECK:STDOUT: {kind: Assign, arg0: node13, arg1: node15, type: node4}, +// CHECK:STDOUT: ] +// CHECK:STDOUT: node_blocks: [ +// CHECK:STDOUT: [ +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node5, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node7, +// CHECK:STDOUT: node8, +// CHECK:STDOUT: node9, +// CHECK:STDOUT: node10, +// CHECK:STDOUT: node11, +// CHECK:STDOUT: node12, +// CHECK:STDOUT: node13, +// CHECK:STDOUT: node14, +// CHECK:STDOUT: node15, +// CHECK:STDOUT: node16, +// CHECK:STDOUT: ], +// CHECK:STDOUT: ] + +var test_i32: i32 = 0; +var test_f64: f64 = 0.1; +var test_str: String = "Test"; diff --git a/toolchain/semantics/testdata/basics/empty.carbon b/toolchain/semantics/testdata/basics/empty.carbon index 79640c3b914d..fc47af87220e 100644 --- a/toolchain/semantics/testdata/basics/empty.carbon +++ b/toolchain/semantics/testdata/basics/empty.carbon @@ -9,6 +9,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: ] // CHECK:STDOUT: nodes: [ @@ -16,6 +18,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ diff --git a/toolchain/semantics/testdata/basics/empty_decl.carbon b/toolchain/semantics/testdata/basics/empty_decl.carbon new file mode 100644 index 000000000000..5d0a882e8ca8 --- /dev/null +++ b/toolchain/semantics/testdata/basics/empty_decl.carbon @@ -0,0 +1,28 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// AUTOUPDATE +// RUN: %{carbon-run-semantics} +// CHECK:STDOUT: cross_reference_irs_size: 1 +// CHECK:STDOUT: callables: [ +// CHECK:STDOUT: ] +// CHECK:STDOUT: integer_literals: [ +// CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] +// CHECK:STDOUT: strings: [ +// CHECK:STDOUT: ] +// CHECK:STDOUT: nodes: [ +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node0, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, +// CHECK:STDOUT: ] +// CHECK:STDOUT: node_blocks: [ +// CHECK:STDOUT: [ +// CHECK:STDOUT: ], +// CHECK:STDOUT: ] + +; diff --git a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon index 7cb4decd9683..b1af8f6fb9d8 100644 --- a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon +++ b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: ] @@ -18,17 +20,18 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, +// CHECK:STDOUT: node7, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/basic.carbon b/toolchain/semantics/testdata/function/basic.carbon index bc02c5fb69d7..8570d9fbaa69 100644 --- a/toolchain/semantics/testdata/function/basic.carbon +++ b/toolchain/semantics/testdata/function/basic.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Foo, // CHECK:STDOUT: ] @@ -18,17 +20,18 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, +// CHECK:STDOUT: node7, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/order.carbon b/toolchain/semantics/testdata/function/order.carbon index 7d96eb82b2b9..a4ff56d73a37 100644 --- a/toolchain/semantics/testdata/function/order.carbon +++ b/toolchain/semantics/testdata/function/order.carbon @@ -12,6 +12,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Foo, // CHECK:STDOUT: Bar, @@ -22,21 +24,21 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node10}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: node7, @@ -45,6 +47,7 @@ // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, +// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/params_one.carbon b/toolchain/semantics/testdata/function/params_one.carbon index e71293d0b29f..ac724c98f903 100644 --- a/toolchain/semantics/testdata/function/params_one.carbon +++ b/toolchain/semantics/testdata/function/params_one.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: a, // CHECK:STDOUT: Foo, @@ -19,26 +21,27 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, -// CHECK:STDOUT: node5, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ // CHECK:STDOUT: node5, +// CHECK:STDOUT: node6, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node6, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/params_one_comma.carbon b/toolchain/semantics/testdata/function/params_one_comma.carbon index fbb60ab6308c..1cf1174c3daf 100644 --- a/toolchain/semantics/testdata/function/params_one_comma.carbon +++ b/toolchain/semantics/testdata/function/params_one_comma.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: a, // CHECK:STDOUT: Foo, @@ -19,26 +21,27 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, -// CHECK:STDOUT: node5, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ // CHECK:STDOUT: node5, +// CHECK:STDOUT: node6, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node6, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/params_two.carbon b/toolchain/semantics/testdata/function/params_two.carbon index 0b6c527fa63f..3634b1aace19 100644 --- a/toolchain/semantics/testdata/function/params_two.carbon +++ b/toolchain/semantics/testdata/function/params_two.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: a, // CHECK:STDOUT: b, @@ -20,31 +22,32 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node8}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: node7, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node5, -// CHECK:STDOUT: node7, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ // CHECK:STDOUT: node8, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node8, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/params_two_comma.carbon b/toolchain/semantics/testdata/function/params_two_comma.carbon index fb906787a143..c5c55ad890e7 100644 --- a/toolchain/semantics/testdata/function/params_two_comma.carbon +++ b/toolchain/semantics/testdata/function/params_two_comma.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: a, // CHECK:STDOUT: b, @@ -20,31 +22,32 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node8}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: node7, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node5, -// CHECK:STDOUT: node7, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ // CHECK:STDOUT: node8, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node8, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/binary_op.carbon b/toolchain/semantics/testdata/operators/binary_op.carbon index d365b0efd9b4..84265d66ae3d 100644 --- a/toolchain/semantics/testdata/operators/binary_op.carbon +++ b/toolchain/semantics/testdata/operators/binary_op.carbon @@ -12,6 +12,8 @@ // CHECK:STDOUT: 12, // CHECK:STDOUT: 34, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: ] @@ -20,27 +22,28 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node6, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node8, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node7, arg1: node8, type: node2}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node9, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon index c906fdcf37de..17bb11da4586 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon @@ -11,6 +11,9 @@ // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 12, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: {mantissa: 34, exponent: -1, is_decimal: 1}, +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: ] @@ -19,27 +22,28 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: RealLiteral, type: node3}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node6, arg1: node7, type: node1}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node8, type: node1}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node7, arg1: node8, type: node1}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node9, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon index 5d6449fbda81..88dd48777b68 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon @@ -12,6 +12,9 @@ // CHECK:STDOUT: 12, // CHECK:STDOUT: 12, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: {mantissa: 34, exponent: -1, is_decimal: 1}, +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: ] @@ -20,31 +23,32 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: RealLiteral, type: node3}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node6, arg1: node7, type: node1}, +// CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node7, arg1: node8, type: node1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node8, arg1: node9, type: node1}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node10, type: node1}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node9, arg1: node10, type: node1}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node11, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node12, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/literal.carbon b/toolchain/semantics/testdata/return/literal.carbon index 3377d1be0688..a45416c3d7a3 100644 --- a/toolchain/semantics/testdata/return/literal.carbon +++ b/toolchain/semantics/testdata/return/literal.carbon @@ -11,6 +11,8 @@ // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: ] @@ -19,23 +21,24 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node6, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node7, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node8, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/trivial.carbon b/toolchain/semantics/testdata/return/trivial.carbon index 43e39a6045fd..8a4664d06201 100644 --- a/toolchain/semantics/testdata/return/trivial.carbon +++ b/toolchain/semantics/testdata/return/trivial.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: ] @@ -18,21 +20,22 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: Return}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node7, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node7, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/decl.carbon b/toolchain/semantics/testdata/var/decl.carbon index 9fac674104ee..91f362e60471 100644 --- a/toolchain/semantics/testdata/var/decl.carbon +++ b/toolchain/semantics/testdata/var/decl.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: x, @@ -19,23 +21,24 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node8, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/decl_with_init.carbon b/toolchain/semantics/testdata/var/decl_with_init.carbon index f4beb635879c..22da5b0a4f80 100644 --- a/toolchain/semantics/testdata/var/decl_with_init.carbon +++ b/toolchain/semantics/testdata/var/decl_with_init.carbon @@ -11,6 +11,8 @@ // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: x, @@ -20,27 +22,28 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon index cccc39f97688..b58d57cfcbfd 100644 --- a/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon +++ b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon @@ -12,6 +12,8 @@ // CHECK:STDOUT: 0, // CHECK:STDOUT: 0, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: x, @@ -21,28 +23,28 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node11, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node12, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node13, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node14, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node15, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, @@ -50,6 +52,7 @@ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, // CHECK:STDOUT: node13, +// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon b/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon index ed5efc3ec98e..9f5999e1985a 100644 --- a/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon +++ b/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon @@ -10,6 +10,9 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: {mantissa: 10, exponent: -1, is_decimal: 1}, +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: x, @@ -19,27 +22,28 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, -// CHECK:STDOUT: {kind: RealLiteral, type: node3}, -// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node1}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, +// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_init_with_self.carbon b/toolchain/semantics/testdata/var/fail_init_with_self.carbon index 9984dddc4822..409de39a9698 100644 --- a/toolchain/semantics/testdata/var/fail_init_with_self.carbon +++ b/toolchain/semantics/testdata/var/fail_init_with_self.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: x, @@ -19,25 +21,26 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node1, type: node1}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node9, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon b/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon index ab21effcf16a..6bda0c0c3419 100644 --- a/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon +++ b/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: x, @@ -20,29 +22,30 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node10, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node10, arg1: node1, type: node1}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node8, +// CHECK:STDOUT: node6, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/global_decl.carbon b/toolchain/semantics/testdata/var/global_decl.carbon index 442dc03fbe20..379772577f5d 100644 --- a/toolchain/semantics/testdata/var/global_decl.carbon +++ b/toolchain/semantics/testdata/var/global_decl.carbon @@ -9,6 +9,8 @@ // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: x, // CHECK:STDOUT: ] @@ -17,15 +19,16 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, +// CHECK:STDOUT: node6, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/global_decl_with_init.carbon b/toolchain/semantics/testdata/var/global_decl_with_init.carbon index 537d29431732..998dd0c0c7d6 100644 --- a/toolchain/semantics/testdata/var/global_decl_with_init.carbon +++ b/toolchain/semantics/testdata/var/global_decl_with_init.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: x, // CHECK:STDOUT: ] @@ -18,19 +20,20 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node4, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node5, arg1: node7, type: node2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: node7, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/global_lookup.carbon b/toolchain/semantics/testdata/var/global_lookup.carbon index cf1c5610bdaf..67fe77ac6e0f 100644 --- a/toolchain/semantics/testdata/var/global_lookup.carbon +++ b/toolchain/semantics/testdata/var/global_lookup.carbon @@ -10,6 +10,8 @@ // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: x, // CHECK:STDOUT: y, @@ -19,25 +21,26 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node4, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node5, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node8, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node5, type: node2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon b/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon index 3f5b1b766514..1d9f80231149 100644 --- a/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon +++ b/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon @@ -11,6 +11,8 @@ // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: x, // CHECK:STDOUT: Main, @@ -21,33 +23,34 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node4, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node5, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node10, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node10, arg1: node4, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block2}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node11, arg1: node5, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node13, +// CHECK:STDOUT: node10, +// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node10, // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, +// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/lookup.carbon b/toolchain/semantics/testdata/var/lookup.carbon index 33b4a681d087..398d5854e227 100644 --- a/toolchain/semantics/testdata/var/lookup.carbon +++ b/toolchain/semantics/testdata/var/lookup.carbon @@ -11,6 +11,8 @@ // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, // CHECK:STDOUT: ] +// CHECK:STDOUT: real_literals: [ +// CHECK:STDOUT: ] // CHECK:STDOUT: strings: [ // CHECK:STDOUT: Main, // CHECK:STDOUT: x, @@ -20,27 +22,28 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node2, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node3, type: node0}, +// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node5, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node6, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ]