Files
carbon-lang/toolchain/parse/BUILD
T
Jon Ross-PerkinsandDana Jansens 3ce0df67bb Add Dump functions to Check, Parse, and Lex (#4669)
- Provide `Check::Dump(context, arg)` and similar.
- gdb and lldb should do contextual lookup, and `call Dump(*this,
Lex::TokenIndex::Invalid)` has been tested with gdb.
- Since this is only for debug, keeps the functions fully separated from
code.
- Uses alwayslink to ensure objects are correctly linked, even though
there are no calls.
- `-Wno-missing-prototypes` is needed when we don't have forward
declarations.
- Code is not linked in opt builds, using `#ifndef NDEBUG`.
- This probably could be doing something in BUILD files with a
`select()`, but the `#ifndef` seemed easier.

This is based on #4620, but uses free functions instead of member
functions.

Co-authored-by: Dana Jansens <danakj@orodu.net>

---------

Co-authored-by: danakj <danakj@orodu.net>
2024-12-12 20:51:02 +00:00

240 lines
5.6 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_library", "cc_test")
load("//bazel/manifest:defs.bzl", "manifest")
load("//testing/fuzzing:rules.bzl", "cc_fuzz_test")
package(default_visibility = ["//visibility:public"])
filegroup(
name = "testdata",
data = glob(["testdata/**/*.carbon"]),
)
manifest(
name = "testdata.txt",
srcs = [":testdata"],
)
cc_library(
name = "node_kind",
srcs = ["node_kind.cpp"],
hdrs = [
"node_ids.h",
"node_kind.h",
"typed_nodes.h",
],
textual_hdrs = ["node_kind.def"],
deps = [
"//common:check",
"//common:enum_base",
"//common:ostream",
"//toolchain/base:index_base",
"//toolchain/lex:token_index",
"//toolchain/lex:token_kind",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "typed_nodes_test",
size = "small",
srcs = ["typed_nodes_test.cpp"],
deps = [
":node_kind",
":parse",
":tree",
"//testing/base:gtest_main",
"//toolchain/diagnostics:diagnostic_emitter",
"//toolchain/diagnostics:mocks",
"//toolchain/lex",
"//toolchain/lex:tokenized_buffer",
"//toolchain/testing:compile_helper",
"@googletest//:gtest",
],
)
cc_library(
name = "context",
srcs = ["context.cpp"],
hdrs = ["context.h"],
deps = [
":node_kind",
":precedence",
":state",
":tree",
"//common:check",
"//common:ostream",
"//common:vlog",
"//toolchain/diagnostics:format_providers",
"//toolchain/lex:token_kind",
"//toolchain/lex:tokenized_buffer",
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "parse",
srcs = ["parse.cpp"] +
# Glob handler files to avoid missing any.
glob([
"handle_*.cpp",
]),
hdrs = [
"handle.h",
"parse.h",
],
deps = [
":context",
":dump",
":node_kind",
":state",
":tree",
"//common:check",
"//common:ostream",
"//toolchain/base:pretty_stack_trace_function",
"//toolchain/base:shared_value_stores",
"//toolchain/diagnostics:diagnostic_emitter",
"//toolchain/diagnostics:format_providers",
"//toolchain/lex:token_kind",
"//toolchain/lex:tokenized_buffer",
],
)
cc_library(
name = "dump",
srcs = ["dump.cpp"],
hdrs = ["dump.h"],
deps = [
":tree",
"//common:ostream",
"//toolchain/lex:dump",
],
# Always link dump methods.
alwayslink = 1,
)
cc_library(
name = "state",
srcs = ["state.cpp"],
hdrs = ["state.h"],
textual_hdrs = ["state.def"],
deps = ["//common:enum_base"],
)
cc_library(
name = "tree",
srcs = [
"extract.cpp",
"tree.cpp",
"tree_and_subtrees.cpp",
],
hdrs = [
"tree.h",
"tree_and_subtrees.h",
],
deps = [
":node_kind",
"//common:check",
"//common:error",
"//common:ostream",
"//common:struct_reflection",
"//toolchain/base:value_store",
"//toolchain/lex:tokenized_buffer",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "tree_test",
size = "small",
srcs = ["tree_test.cpp"],
deps = [
":node_kind",
":parse",
":tree",
"//common:ostream",
"//testing/base:gtest_main",
"//testing/base:test_raw_ostream",
"//toolchain/base:shared_value_stores",
"//toolchain/diagnostics:diagnostic_emitter",
"//toolchain/diagnostics:mocks",
"//toolchain/lex",
"//toolchain/lex:tokenized_buffer",
"//toolchain/testing:compile_helper",
"//toolchain/testing:yaml_test_helpers",
"@googletest//:gtest",
"@llvm-project//llvm:Support",
],
)
cc_fuzz_test(
name = "parse_fuzzer",
size = "small",
srcs = ["parse_fuzzer.cpp"],
corpus = glob(["fuzzer_corpus/*"]),
deps = [
":parse",
"//common:check",
"//testing/fuzzing:libfuzzer_header",
"//toolchain/base:shared_value_stores",
"//toolchain/diagnostics:diagnostic_emitter",
"//toolchain/diagnostics:null_diagnostics",
"//toolchain/lex",
"@llvm-project//llvm:Support",
],
)
cc_library(
name = "tree_node_diagnostic_converter",
hdrs = ["tree_node_diagnostic_converter.h"],
deps = [
":tree",
"//toolchain/diagnostics:diagnostic_emitter",
"//toolchain/lex:tokenized_buffer",
],
)
cc_library(
name = "precedence",
srcs = ["precedence.cpp"],
hdrs = ["precedence.h"],
deps = [
"//common:check",
"//toolchain/lex:token_kind",
"@llvm-project//llvm:Support",
],
)
cc_test(
name = "precedence_test",
size = "small",
srcs = ["precedence_test.cpp"],
deps = [
":precedence",
"//testing/base:gtest_main",
"//toolchain/lex:token_kind",
"@googletest//:gtest",
],
)
cc_test(
name = "coverage_test",
size = "small",
srcs = ["coverage_test.cpp"],
args = ["--testdata_manifest=$(location :testdata.txt)"],
data = [
":testdata",
":testdata.txt",
],
deps = [
":node_kind",
"//testing/base:gtest_main",
"//toolchain/testing:coverage_helper",
"@abseil-cpp//absl/flags:flag",
"@googletest//:gtest",
],
)