conlang: Remove "Identifier" node
It never carried any extra information, and got in the way everywhere it was used.
This commit is contained in:
@@ -51,7 +51,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_module(&mut self, m: &'a Module) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Module { name: Identifier(name), kind } = m;
|
||||
let Module { name, kind } = m;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -60,14 +60,14 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
};
|
||||
let id = prj.pool.insert(def);
|
||||
prj[*parent].module.insert_type(*name, id);
|
||||
self.path.push(PathPart::Ident(Identifier(*name)));
|
||||
self.path.push(PathPart::Ident(*name));
|
||||
self.with_parent(id, kind, Self::visit_module_kind);
|
||||
self.path.pop();
|
||||
self.retval = Some(id);
|
||||
}
|
||||
fn visit_alias(&mut self, a: &'a Alias) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Alias { to: Identifier(name), from: _ } = a;
|
||||
let Alias { to: name, from: _ } = a;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -81,7 +81,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_enum(&mut self, e: &'a Enum) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Enum { name: Identifier(name), kind } = e;
|
||||
let Enum { name, kind } = e;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -96,7 +96,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_variant(&mut self, v: &'a Variant) {
|
||||
let Self { path, prj, parent, retval: _ } = self;
|
||||
let Variant { name: Identifier(name), kind } = v;
|
||||
let Variant { name, kind } = v;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -111,7 +111,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_struct(&mut self, s: &'a Struct) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Struct { name: Identifier(name), kind } = s;
|
||||
let Struct { name, kind } = s;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -126,7 +126,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_const(&mut self, c: &'a Const) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Const { name: Identifier(name), ty: _, init } = c;
|
||||
let Const { name, ty: _, init } = c;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -141,7 +141,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_static(&mut self, s: &'a Static) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Static { name: Identifier(name), mutable: _, ty: _, init } = s;
|
||||
let Static { name, mutable: _, ty: _, init } = s;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -156,7 +156,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_function(&mut self, f: &'a Function) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Function { name: Identifier(name), body, .. } = f;
|
||||
let Function { name, body, .. } = f;
|
||||
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
@@ -201,7 +201,7 @@ impl<'prj, 'a> Visit<'a> for NameCollector<'prj, 'a> {
|
||||
}
|
||||
fn visit_let(&mut self, l: &'a Let) {
|
||||
let Self { prj, parent, path, retval: _ } = self;
|
||||
let Let { name: Identifier(name), init, .. } = l;
|
||||
let Let { name, init, .. } = l;
|
||||
let def = Def {
|
||||
module: Mod::new(*parent),
|
||||
kind: DefKind::Undecided,
|
||||
|
||||
@@ -47,15 +47,15 @@ impl<'a> NodeSource<'a> {
|
||||
pub fn name(&self) -> Option<Sym> {
|
||||
match self {
|
||||
NodeSource::Root => None,
|
||||
NodeSource::Module(v) => Some(v.name.0),
|
||||
NodeSource::Alias(v) => Some(v.to.0),
|
||||
NodeSource::Enum(v) => Some(v.name.0),
|
||||
NodeSource::Variant(v) => Some(v.name.0),
|
||||
NodeSource::Struct(v) => Some(v.name.0),
|
||||
NodeSource::Const(v) => Some(v.name.0),
|
||||
NodeSource::Static(v) => Some(v.name.0),
|
||||
NodeSource::Function(v) => Some(v.name.0),
|
||||
NodeSource::Local(l) => Some(l.name.0),
|
||||
NodeSource::Module(v) => Some(v.name),
|
||||
NodeSource::Alias(v) => Some(v.to),
|
||||
NodeSource::Enum(v) => Some(v.name),
|
||||
NodeSource::Variant(v) => Some(v.name),
|
||||
NodeSource::Struct(v) => Some(v.name),
|
||||
NodeSource::Const(v) => Some(v.name),
|
||||
NodeSource::Static(v) => Some(v.name),
|
||||
NodeSource::Function(v) => Some(v.name),
|
||||
NodeSource::Local(l) => Some(l.name),
|
||||
NodeSource::Impl(_) | NodeSource::Use(_) | NodeSource::Ty(_) => None,
|
||||
}
|
||||
}
|
||||
@@ -166,7 +166,7 @@ pub mod sorcerer {
|
||||
impl<'a> Visit<'a> for NodeSorcerer<'a> {
|
||||
fn visit_module(&mut self, m: &'a Module) {
|
||||
let Module { name, kind } = m;
|
||||
self.path.push(PathPart::Ident(name.clone()));
|
||||
self.path.push(PathPart::Ident(*name));
|
||||
self.visit_module_kind(kind);
|
||||
self.path.pop();
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ use crate::{
|
||||
node::{Node, NodeSource},
|
||||
path::Path,
|
||||
};
|
||||
use cl_ast::{Identifier, PathPart};
|
||||
use cl_ast::PathPart;
|
||||
use cl_structures::deprecated_intern_pool::Pool;
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
@@ -85,11 +85,11 @@ impl<'a> Project<'a> {
|
||||
}
|
||||
match path.as_ref() {
|
||||
[] => Some((Some(within), None, path)),
|
||||
[PathPart::Ident(Identifier(name))] => {
|
||||
[PathPart::Ident(name)] => {
|
||||
let (ty, val) = self[within].module.get(*name);
|
||||
Some((ty, val, path.pop_front()?))
|
||||
}
|
||||
[PathPart::Ident(Identifier(name)), ..] => {
|
||||
[PathPart::Ident(name), ..] => {
|
||||
let ty = self[within].module.get_type(*name)?;
|
||||
self.get(path.pop_front()?, ty)
|
||||
}
|
||||
@@ -108,7 +108,7 @@ impl<'a> Project<'a> {
|
||||
match front {
|
||||
PathPart::SelfKw => self.get_type(path.pop_front()?, within),
|
||||
PathPart::SuperKw => self.get_type(path.pop_front()?, module.parent?),
|
||||
PathPart::Ident(Identifier(name)) => match module.types.get(name) {
|
||||
PathPart::Ident(name) => match module.types.get(name) {
|
||||
Some(&submodule) => self.get_type(path.pop_front()?, submodule),
|
||||
None => Some((within, path)),
|
||||
},
|
||||
@@ -120,7 +120,7 @@ impl<'a> Project<'a> {
|
||||
|
||||
pub fn get_value<'p>(&self, path: Path<'p>, within: DefID) -> Option<(DefID, Path<'p>)> {
|
||||
match path.front()? {
|
||||
PathPart::Ident(Identifier(name)) => Some((
|
||||
PathPart::Ident(name) => Some((
|
||||
self[within].module.values.get(name).copied()?,
|
||||
path.pop_front()?,
|
||||
)),
|
||||
@@ -280,7 +280,7 @@ pub mod evaluate {
|
||||
.parent_of(parent)
|
||||
.ok_or_else(|| "Attempt to get super of root".into()),
|
||||
PathPart::SelfKw => Ok(parent),
|
||||
PathPart::Ident(Identifier(name)) => name.evaluate(prj, parent),
|
||||
PathPart::Ident(name) => name.evaluate(prj, parent),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ pub fn resolve(prj: &mut Prj, id: DefID) -> Result<(), &'static str> {
|
||||
|
||||
eprintln!("Resolver: \x1b[32mEvaluating\x1b[0m \"\x1b[36m{kind} {name}\x1b[0m\" (`{id:?}`)");
|
||||
|
||||
for Meta { name: Identifier(name), kind } in meta {
|
||||
for Meta { name, kind } in meta {
|
||||
if let ("intrinsic", MetaKind::Equals(Literal::String(s))) = (&**name, kind) {
|
||||
prj[id].kind = DefKind::Type(TypeKind::Intrinsic(
|
||||
s.parse().map_err(|_| "Failed to parse intrinsic")?,
|
||||
@@ -85,7 +85,7 @@ impl<'a> TypeResolvable<'a> for &'a Meta {
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn resolve_type(self, prj: &mut Prj<'a>, id: DefID) -> Result<Self::Out, &'static str> {
|
||||
let Meta { name: Identifier(name), kind } = self;
|
||||
let Meta { name, kind } = self;
|
||||
match (name.as_ref(), kind) {
|
||||
("intrinsic", MetaKind::Equals(Literal::String(intrinsic))) => Ok(DefKind::Type(
|
||||
TypeKind::Intrinsic(intrinsic.parse().map_err(|_| "unknown intrinsic type")?),
|
||||
@@ -134,7 +134,7 @@ impl<'a> TypeResolvable<'a> for &'a Enum {
|
||||
return Ok(DefKind::Type(TypeKind::Adt(Adt::FieldlessEnum)));
|
||||
};
|
||||
let mut fields = vec![];
|
||||
for Variant { name: Identifier(name), kind: _ } in v {
|
||||
for Variant { name, kind: _ } in v {
|
||||
let id = prj[id].module.get_type(*name);
|
||||
fields.push((*name, id))
|
||||
}
|
||||
@@ -201,7 +201,7 @@ impl<'a> TypeResolvable<'a> for &'a StructMember {
|
||||
|
||||
fn resolve_type(self, prj: &mut Prj<'a>, id: DefID) -> Result<Self::Out, &'static str> {
|
||||
let parent = prj.parent_of(id).unwrap_or(id);
|
||||
let StructMember { name: Identifier(name), vis, ty } = self;
|
||||
let StructMember { name, vis, ty } = self;
|
||||
|
||||
let ty = ty
|
||||
.evaluate(prj, parent)
|
||||
|
||||
@@ -58,7 +58,7 @@ impl<'a> Project<'a> {
|
||||
}
|
||||
|
||||
UseTree::Name(name) => self.visit_use_leaf(name, parent, c)?,
|
||||
UseTree::Alias(Identifier(from), Identifier(to)) => {
|
||||
UseTree::Alias(from, to) => {
|
||||
self.visit_use_alias(from, to, parent, c)?
|
||||
}
|
||||
UseTree::Glob => self.visit_use_glob(parent, c)?,
|
||||
@@ -70,8 +70,7 @@ impl<'a> Project<'a> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn visit_use_leaf(&mut self, part: &'a Identifier, parent: DefID, c: DefID) -> UseResult {
|
||||
let Identifier(name) = part;
|
||||
pub fn visit_use_leaf(&mut self, name: &'a Sym, parent: DefID, c: DefID) -> UseResult {
|
||||
self.visit_use_alias(name, name, parent, c)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user