mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 16:01:04 +01:00
In parse, form a list of methods that are defined inline, tracking where they start, where they end, and which other inline methods are nested within them. In check, when we reach an inline method body, skip it and add it to a worklist to be processed later. We also track when we reach the start and end of a context in which inline method bodies are deferred, so that we know when to replay the bodies. When suspending a function definition to be processed later, the `DeclNameStack` entry is moved to separate storage, including popping the corresponding scopes from the scope stack and removing the corresponding lexical names from lexical lookup. Later, when we return to the function and parse its definition, the `DeclNameStack` entry is restored. The same is done when we reach the end of a nested context that can have inline methods, so that we can reenter the nested scope before processing its members. --------- Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
271 lines
5.4 KiB
Python
271 lines
5.4 KiB
Python
# 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
|
|
|
|
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
cc_library(
|
|
name = "bazel_working_dir",
|
|
hdrs = ["bazel_working_dir.h"],
|
|
deps = [
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "command_line",
|
|
srcs = ["command_line.cpp"],
|
|
hdrs = ["command_line.h"],
|
|
deps = [
|
|
":check",
|
|
":ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "command_line_test",
|
|
size = "small",
|
|
srcs = ["command_line_test.cpp"],
|
|
deps = [
|
|
":command_line",
|
|
"//testing/base:gtest_main",
|
|
"//testing/base:test_raw_ostream",
|
|
"@googletest//:gtest",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "check",
|
|
srcs = [
|
|
"check_internal.cpp",
|
|
"check_internal.h",
|
|
],
|
|
hdrs = ["check.h"],
|
|
deps = [
|
|
":ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "check_test",
|
|
size = "small",
|
|
srcs = ["check_test.cpp"],
|
|
deps = [
|
|
":check",
|
|
"//testing/base:gtest_main",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "enum_base",
|
|
hdrs = ["enum_base.h"],
|
|
deps = [
|
|
"//common:ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "enum_base_test_def",
|
|
testonly = 1,
|
|
textual_hdrs = ["enum_base_test.def"],
|
|
)
|
|
|
|
cc_test(
|
|
name = "enum_base_test",
|
|
size = "small",
|
|
srcs = ["enum_base_test.cpp"],
|
|
deps = [
|
|
":enum_base",
|
|
":enum_base_test_def",
|
|
"//testing/base:gtest_main",
|
|
"//testing/base:test_raw_ostream",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "error",
|
|
hdrs = ["error.h"],
|
|
deps = [
|
|
":check",
|
|
":ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "error_test",
|
|
size = "small",
|
|
srcs = ["error_test.cpp"],
|
|
deps = [
|
|
":error",
|
|
"//testing/base:gtest_main",
|
|
"//testing/base:test_raw_ostream",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "hashing",
|
|
srcs = ["hashing.cpp"],
|
|
hdrs = ["hashing.h"],
|
|
deps = [
|
|
":check",
|
|
":ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "hashing_test",
|
|
srcs = ["hashing_test.cpp"],
|
|
deps = [
|
|
":hashing",
|
|
"//testing/base:gtest_main",
|
|
"//testing/base:test_raw_ostream",
|
|
"@googletest//:gtest",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "hashing_benchmark",
|
|
testonly = 1,
|
|
srcs = ["hashing_benchmark.cpp"],
|
|
deps = [
|
|
":check",
|
|
":hashing",
|
|
"@abseil-cpp//absl/hash",
|
|
"@abseil-cpp//absl/random",
|
|
"@google_benchmark//:benchmark_main",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "indirect_value",
|
|
hdrs = ["indirect_value.h"],
|
|
)
|
|
|
|
cc_test(
|
|
name = "indirect_value_test",
|
|
size = "small",
|
|
srcs = ["indirect_value_test.cpp"],
|
|
deps = [
|
|
":indirect_value",
|
|
"//testing/base:gtest_main",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "init_llvm",
|
|
srcs = ["init_llvm.cpp"],
|
|
hdrs = ["init_llvm.h"],
|
|
deps = [
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
# Link against this to cause `:init_llvm` to pull in all LLVM targets.
|
|
#
|
|
# Be careful when depending on this: it pulls in several hundred megabytes of
|
|
# LLVM binary size in -c fastbuild. This should only be depended on by a
|
|
# `cc_binary` or `cc_test` target, never a `cc_library`.
|
|
cc_library(
|
|
name = "all_llvm_targets",
|
|
srcs = ["all_llvm_targets.cpp"],
|
|
deps = [
|
|
":init_llvm",
|
|
"@llvm-project//llvm:AllTargetsAsmParsers",
|
|
"@llvm-project//llvm:AllTargetsCodeGens",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
alwayslink = 1,
|
|
)
|
|
|
|
cc_library(
|
|
name = "ostream",
|
|
hdrs = ["ostream.h"],
|
|
deps = [
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "string_helpers",
|
|
srcs = ["string_helpers.cpp"],
|
|
hdrs = ["string_helpers.h"],
|
|
deps = [
|
|
":check",
|
|
":error",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "string_helpers_test",
|
|
size = "small",
|
|
srcs = ["string_helpers_test.cpp"],
|
|
deps = [
|
|
":string_helpers",
|
|
"//testing/base:gtest_main",
|
|
"@googletest//:gtest",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "struct_reflection",
|
|
hdrs = ["struct_reflection.h"],
|
|
)
|
|
|
|
cc_test(
|
|
name = "struct_reflection_test",
|
|
size = "small",
|
|
srcs = ["struct_reflection_test.cpp"],
|
|
deps = [
|
|
":struct_reflection",
|
|
"//testing/base:gtest_main",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "variant_helpers",
|
|
hdrs = ["variant_helpers.h"],
|
|
deps = [
|
|
":error",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "vlog",
|
|
srcs = ["vlog_internal.h"],
|
|
hdrs = ["vlog.h"],
|
|
deps = [
|
|
":ostream",
|
|
"@llvm-project//llvm:Support",
|
|
],
|
|
)
|
|
|
|
cc_test(
|
|
name = "vlog_test",
|
|
size = "small",
|
|
srcs = ["vlog_test.cpp"],
|
|
deps = [
|
|
":vlog",
|
|
"//testing/base:gtest_main",
|
|
"//testing/base:test_raw_ostream",
|
|
"@googletest//:gtest",
|
|
],
|
|
)
|