mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-01 13:35:54 +01:00
I've been mulling this mainly for the parameter complexity of check/lower, but doing lex/parse for symmetry. I'm motivated by the plan to move dumping for all of them into the respective functions, because of discussion about llvm-verifier. That basically would add another bool parameter (or more) to each of these. My instinct is we're going to probably accrue a little more over time, so I'm suggesting this as maybe adding the boundary a little simpler and/or easier to read. Note it may make sense to refactor a little further, e.g. maybe Lower::Context could receive the full set of options and pick out what it wants, but I figured creating the struct itself would be a decent start. I'm trying to put things into options when we can produce a reasonable default if the user doesn't assign a value. I'm using an explicit constructor so that values can be added without affecting every caller. A different factoring would be to pass in everything through the param struct, but that just felt weird when I was trying it out. Removing `inst_namer` and `module_name` from `LowerToLLVM` params -- both of these can be inferred from `sem_ir`, and I'm not seeing a particular reason to maintain them at the call site.
34 lines
1.0 KiB
C++
34 lines
1.0 KiB
C++
// 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
|
|
|
|
#ifndef CARBON_TOOLCHAIN_PARSE_PARSE_H_
|
|
#define CARBON_TOOLCHAIN_PARSE_PARSE_H_
|
|
|
|
#include "common/ostream.h"
|
|
#include "toolchain/diagnostics/diagnostic_emitter.h"
|
|
#include "toolchain/lex/tokenized_buffer.h"
|
|
#include "toolchain/parse/tree.h"
|
|
|
|
namespace Carbon::Parse {
|
|
|
|
struct ParseOptions {
|
|
// Options must be set individually, not through initialization.
|
|
explicit ParseOptions() = default;
|
|
|
|
// If set, a consumer for diagnostics. Otherwise, diagnostics go to stderr.
|
|
Diagnostics::Consumer* consumer = nullptr;
|
|
|
|
// If set, enables verbose output.
|
|
llvm::raw_ostream* vlog_stream = nullptr;
|
|
};
|
|
|
|
// Parses the token buffer into a `Tree`.
|
|
//
|
|
// This is the factory function which is used to build parse trees.
|
|
auto Parse(Lex::TokenizedBuffer& tokens, ParseOptions options) -> Tree;
|
|
|
|
} // namespace Carbon::Parse
|
|
|
|
#endif // CARBON_TOOLCHAIN_PARSE_PARSE_H_
|