refactor to common id types

This commit is contained in:
Schrottkatze 2023-11-24 09:39:32 +01:00
parent c3db966765
commit 1acb5ef3cf
6 changed files with 29 additions and 25 deletions

View file

@ -30,12 +30,14 @@ impl EvalConfig {
}
}
pub type FileId = usize;
// this is also bad
// need a better architecture for this
pub struct Evaluator<'a> {
curr_phase: EvalPhase,
files: SimpleFiles<&'a str, String>,
errors: HashMap<usize, Vec<Errors>>,
errors: HashMap<FileId, Vec<Errors>>,
cfg: EvalConfig,
}
@ -75,7 +77,7 @@ impl<'a> Evaluator<'a> {
pub fn next(mut self) {
match self.curr_phase {
EvalPhase::Lex => {
todo!()
unreachable!()
}
EvalPhase::Check(file_id, syntax) => {
let r = check(&syntax);
@ -129,7 +131,7 @@ impl<'a> Evaluator<'a> {
enum EvalPhase {
Lex,
Check(usize, Vec<PipelineElement>),
BareTyped(usize, Vec<PipelineElement>),
Check(FileId, Vec<PipelineElement>),
BareTyped(FileId, Vec<PipelineElement>),
Failed,
}

View file

@ -2,12 +2,13 @@ use std::fmt::Debug;
use std::fmt::Display;
use super::typedef::{InternalTypeDef, TypeDef};
use super::CommandId;
use super::GlobalNamespace;
#[derive(Clone, Copy)]
pub struct Command<'a> {
pub(super) id: usize,
pub(super) id: CommandId,
pub(super) namespace: &'a GlobalNamespace,
}
@ -67,4 +68,5 @@ pub(super) struct InternalCommand {
// gosh this is hacky
pub(super) input: Option<InternalTypeDef>,
pub(super) output: Option<InternalTypeDef>,
// generic_ns: HashMap<String, Vec<usize>>,
}

View file

@ -23,15 +23,17 @@ pub struct GlobalNamespace {
data_namespace: RefCell<HashMap<String, DataNamespaceId>>,
}
pub type TypeId = usize;
pub type TraitId = usize;
pub type CommandId = usize;
enum TypeNamespaceId {
Types(usize),
Traits(usize),
Types(TypeId),
Traits(TraitId),
}
enum DataNamespaceId {
Commands(usize),
#[allow(dead_code, reason = "will be used later")]
Globals(usize),
Commands(CommandId),
}
impl GlobalNamespace {
@ -126,21 +128,21 @@ impl GlobalNamespace {
}
}
pub fn get_type(&self, id: usize) -> Option<Type> {
pub fn get_type(&self, id: TypeId) -> Option<Type> {
(self.types.borrow().len() > id).then_some(Type {
id,
namespace: self,
})
}
pub fn get_trait(&self, id: usize) -> Option<Trait> {
pub fn get_trait(&self, id: TraitId) -> Option<Trait> {
(self.traits.borrow().len() > id).then_some(Trait {
id,
namespace: self,
})
}
pub fn get_command(&self, id: usize) -> Option<Command> {
pub fn get_command(&self, id: CommandId) -> Option<Command> {
(self.commands.borrow().len() > id).then_some(Command {
id,
namespace: self,

View file

@ -5,10 +5,12 @@ use std::fmt::Debug;
use std::fmt::Display;
use super::GlobalNamespace;
use super::TraitId;
use super::TypeId;
#[derive(Clone, Copy)]
pub struct Trait<'a> {
pub(super) id: usize,
pub(super) id: TraitId,
pub(super) namespace: &'a GlobalNamespace,
}
@ -28,6 +30,6 @@ impl Debug for Trait<'_> {
pub(super) struct InternalTrait {
// make resolution easier
pub(super) types: RefCell<HashSet<usize>>,
pub(super) types: RefCell<HashSet<TypeId>>,
pub(super) name: String,
}

View file

@ -7,10 +7,12 @@ use std::fmt::Display;
use super::Trait;
use super::GlobalNamespace;
use super::TraitId;
use super::TypeId;
#[derive(Clone, Copy)]
pub struct Type<'a> {
pub(super) id: usize,
pub(super) id: TypeId,
pub(super) namespace: &'a GlobalNamespace,
}
@ -48,6 +50,6 @@ impl Debug for Type<'_> {
}
pub(super) struct InternalType {
pub(super) traits: RefCell<HashSet<usize>>,
pub(super) traits: RefCell<HashSet<TraitId>>,
pub(super) name: String,
}

View file

@ -1,15 +1,9 @@
use core::panic;
use std::process::CommandEnvs;
use crate::{
builtins::{TYPE_FLOAT, TYPE_INTEGER, TYPE_STRING},
error::Errors,
namespace::{
command::{self, Command},
r#type::Type,
typedef::TypeDef,
GlobalNamespace,
},
namespace::{command::Command, r#type::Type, typedef::TypeDef, GlobalNamespace},
syntax::{CommandPart, CommandPartKind, PipelineElement, PipelineElementKind},
Span,
};
@ -51,7 +45,7 @@ impl<'a> ExprKind<'a> {
}
#[derive(Debug)]
struct CommandExpr<'a> {
pub struct CommandExpr<'a> {
command: Command<'a>,
args: Vec<Expr<'a>>,
}