From bb4d0a8b49aed021fe8f13893d2e651923368c23 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sun, 15 Mar 2026 23:07:01 +0100 Subject: New DepMap type --- oryxc/src/compiler.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'oryxc/src/compiler.rs') diff --git a/oryxc/src/compiler.rs b/oryxc/src/compiler.rs index 1c1240e..123475e 100644 --- a/oryxc/src/compiler.rs +++ b/oryxc/src/compiler.rs @@ -27,13 +27,13 @@ use crossbeam_deque::{ Stealer, Worker, }; -use dashmap::DashMap; use soa_rs::Soa; use crate::arena::{ GlobalArena, LocalArena, }; +use crate::depmap::DepMap; use crate::errors::OryxError; use crate::hashtrie::HTrie; use crate::intern::Interner; @@ -85,6 +85,7 @@ impl FileData { } #[allow(dead_code)] +#[derive(Clone)] pub enum JobType { Lex { file: FileId, @@ -107,6 +108,8 @@ pub enum JobType { } mkidtype!(JobId); + +#[derive(Clone)] pub struct Job { id: JobId, kind: JobType, @@ -125,7 +128,7 @@ struct CompilerState<'a> { * order to avoid any potential undefined behaviour. */ interner: Interner, SymbolId>, files: Vec>, - deps: DashMap>, + deps: DepMap, next_id: AtomicU32, types: boxcar::Vec, } @@ -168,15 +171,6 @@ impl<'a> CompilerState<'a> { fn job_complete(&self) -> usize { return self.njobs.fetch_sub(1, Ordering::Release) - 1; } - - /// Push all jobs that depend on JOB to QUEUE, clearing the dep list. - fn job_push_deps(&self, job: JobId, queue: &Worker) { - if let Some((_, deps)) = self.deps.remove(&(job.0 as usize)) { - for x in deps { - self.job_push(&queue, x); - } - } - } } /// Initialize compiler state and drive all source files through the @@ -214,7 +208,7 @@ where flags, worker_threads: OnceLock::new(), interner: Interner::new(), - deps: DashMap::new(), + deps: DepMap::with_capacity(256), next_id: AtomicU32::new(njobs as u32), /* Temporary solution */ types: boxcar::vec![ @@ -451,7 +445,6 @@ fn worker_loop( ok = false; } - c_state.job_push_deps(job.id, &queue); if c_state.job_complete() == 0 { c_state.wake_all(); return ok; -- cgit v1.2.3