merging is not simple

This commit is contained in:
강동윤 (Donny) 2024-07-30 14:54:40 +09:00
parent bddf3b972f
commit f18f9b2c50
2 changed files with 10 additions and 11 deletions

View File

@ -11,6 +11,7 @@ use std::{
#[cfg(feature = "parking_lot")]
use parking_lot::Mutex;
use rustc_hash::FxHashMap;
use serde::{Deserialize, Serialize};
use url::Url;
@ -116,10 +117,11 @@ impl Globals {
pub fn merge(globals: Vec<Lrc<Globals>>) -> MergeResult {
let mut hygiene_data = hygiene::HygieneData::new();
let mut marks = vec![];
let mut result = MergeResult::default();
for g in &globals {
let g = g.hygiene_data.lock();
hygiene_data.merge(&g);
hygiene_data.merge(&g, &mut result);
}
for g in &globals {
@ -127,12 +129,14 @@ impl Globals {
marks.extend(g.iter().cloned());
}
MergeResult {}
result
}
}
#[derive(Debug)]
pub struct MergeResult {}
#[derive(Debug, Default)]
pub struct MergeResult {
pub ctxts: FxHashMap<SyntaxContext, SyntaxContext>,
}
better_scoped_tls::scoped_tls!(

View File

@ -23,7 +23,7 @@ use std::{
use serde::{Deserialize, Serialize};
use super::GLOBALS;
use super::{MergeResult, GLOBALS};
use crate::{collections::AHashMap, EqIgnoreSpan};
/// A SyntaxContext represents a chain of macro expansions (represented by
@ -327,12 +327,7 @@ impl HygieneData {
}
}
pub(crate) fn merge(&mut self, other: &Self) {
self.syntax_contexts
.extend_from_slice(&other.syntax_contexts);
self.markings
.extend(other.markings.iter().map(|(k, v)| (*k, *v)));
}
pub(crate) fn merge(&mut self, other: &Self, result: &mut MergeResult) {}
fn with<T, F: FnOnce(&mut HygieneData) -> T>(f: F) -> T {
GLOBALS.with(|globals| {