Use conditional synchronization for Lock
This commit is contained in:
parent
6e8f677c6a
commit
5739349e96
11 changed files with 355 additions and 126 deletions
|
@ -24,7 +24,7 @@ use rustc_lint_defs::pluralize;
|
|||
|
||||
use derive_setters::Setters;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxIndexMap};
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
use rustc_data_structures::sync::{DynSend, IntoDynSyncSend, Lrc};
|
||||
use rustc_error_messages::{FluentArgs, SpanLabel};
|
||||
use rustc_span::hygiene::{ExpnKind, MacroKind};
|
||||
use std::borrow::Cow;
|
||||
|
@ -188,6 +188,8 @@ impl Margin {
|
|||
|
||||
const ANONYMIZED_LINE_NUM: &str = "LL";
|
||||
|
||||
pub type DynEmitter = dyn Emitter + DynSend;
|
||||
|
||||
/// Emitter trait for emitting errors.
|
||||
pub trait Emitter: Translate {
|
||||
/// Emit a structured diagnostic.
|
||||
|
@ -625,7 +627,7 @@ impl ColorConfig {
|
|||
#[derive(Setters)]
|
||||
pub struct EmitterWriter {
|
||||
#[setters(skip)]
|
||||
dst: Destination,
|
||||
dst: IntoDynSyncSend<Destination>,
|
||||
sm: Option<Lrc<SourceMap>>,
|
||||
fluent_bundle: Option<Lrc<FluentBundle>>,
|
||||
#[setters(skip)]
|
||||
|
@ -655,7 +657,7 @@ impl EmitterWriter {
|
|||
|
||||
fn create(dst: Destination, fallback_bundle: LazyFallbackBundle) -> EmitterWriter {
|
||||
EmitterWriter {
|
||||
dst,
|
||||
dst: IntoDynSyncSend(dst),
|
||||
sm: None,
|
||||
fluent_bundle: None,
|
||||
fallback_bundle,
|
||||
|
|
|
@ -22,7 +22,7 @@ use crate::{
|
|||
};
|
||||
use rustc_lint_defs::Applicability;
|
||||
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
use rustc_data_structures::sync::{IntoDynSyncSend, Lrc};
|
||||
use rustc_error_messages::FluentArgs;
|
||||
use rustc_span::hygiene::ExpnData;
|
||||
use rustc_span::Span;
|
||||
|
@ -38,7 +38,7 @@ use serde::Serialize;
|
|||
mod tests;
|
||||
|
||||
pub struct JsonEmitter {
|
||||
dst: Box<dyn Write + Send>,
|
||||
dst: IntoDynSyncSend<Box<dyn Write + Send>>,
|
||||
registry: Option<Registry>,
|
||||
sm: Lrc<SourceMap>,
|
||||
fluent_bundle: Option<Lrc<FluentBundle>>,
|
||||
|
@ -66,7 +66,7 @@ impl JsonEmitter {
|
|||
terminal_url: TerminalUrl,
|
||||
) -> JsonEmitter {
|
||||
JsonEmitter {
|
||||
dst: Box::new(io::BufWriter::new(io::stderr())),
|
||||
dst: IntoDynSyncSend(Box::new(io::BufWriter::new(io::stderr()))),
|
||||
registry,
|
||||
sm: source_map,
|
||||
fluent_bundle,
|
||||
|
@ -120,7 +120,7 @@ impl JsonEmitter {
|
|||
terminal_url: TerminalUrl,
|
||||
) -> JsonEmitter {
|
||||
JsonEmitter {
|
||||
dst,
|
||||
dst: IntoDynSyncSend(dst),
|
||||
registry,
|
||||
sm: source_map,
|
||||
fluent_bundle,
|
||||
|
|
|
@ -30,11 +30,11 @@ pub use emitter::ColorConfig;
|
|||
use rustc_lint_defs::LintExpectationId;
|
||||
use Level::*;
|
||||
|
||||
use emitter::{is_case_difference, Emitter, EmitterWriter};
|
||||
use emitter::{is_case_difference, DynEmitter, Emitter, EmitterWriter};
|
||||
use registry::Registry;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet};
|
||||
use rustc_data_structures::stable_hasher::{Hash128, StableHasher};
|
||||
use rustc_data_structures::sync::{self, IntoDynSyncSend, Lock, Lrc};
|
||||
use rustc_data_structures::sync::{Lock, Lrc};
|
||||
use rustc_data_structures::AtomicRef;
|
||||
pub use rustc_error_messages::{
|
||||
fallback_fluent_bundle, fluent_bundle, DelayDm, DiagnosticMessage, FluentBundle,
|
||||
|
@ -428,7 +428,7 @@ struct HandlerInner {
|
|||
err_count: usize,
|
||||
warn_count: usize,
|
||||
deduplicated_err_count: usize,
|
||||
emitter: IntoDynSyncSend<Box<dyn Emitter + sync::Send>>,
|
||||
emitter: Box<DynEmitter>,
|
||||
delayed_span_bugs: Vec<DelayedDiagnostic>,
|
||||
delayed_good_path_bugs: Vec<DelayedDiagnostic>,
|
||||
/// This flag indicates that an expected diagnostic was emitted and suppressed.
|
||||
|
@ -594,7 +594,7 @@ impl Handler {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn with_emitter(emitter: Box<dyn Emitter + sync::Send>) -> Self {
|
||||
pub fn with_emitter(emitter: Box<DynEmitter>) -> Self {
|
||||
Self {
|
||||
inner: Lock::new(HandlerInner {
|
||||
flags: HandlerFlags { can_emit_warnings: true, ..Default::default() },
|
||||
|
@ -603,7 +603,7 @@ impl Handler {
|
|||
warn_count: 0,
|
||||
deduplicated_err_count: 0,
|
||||
deduplicated_warn_count: 0,
|
||||
emitter: IntoDynSyncSend(emitter),
|
||||
emitter,
|
||||
delayed_span_bugs: Vec::new(),
|
||||
delayed_good_path_bugs: Vec::new(),
|
||||
suppressed_expected_diag: false,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue