conlang: Import items into scope with use!
grammar: - Improve specification of `Path` - Add `Use` and `UseTree` rules - Add `Use` as a variant of ItemKind cl-token: - Add new keywords `use` and `as` cl-ast: - Add nodes for Use and UseTree - Add new ItemKind for Use - Implement traversal in Visit and Fold cl-interpret: - Mark ItemKind::Use with a todo cl-parser: - Update to match grammar cl-typeck: - Update to match changes in AST - Mark UseTrees as NameCollectable and TypeResolvable, but leave as todos
This commit is contained in:
@@ -99,6 +99,8 @@ pub enum ItemKind {
|
||||
Function(Function),
|
||||
/// An [implementation](Impl)
|
||||
Impl(Impl),
|
||||
/// An [import](Use)
|
||||
Use(Use),
|
||||
}
|
||||
|
||||
/// An alias to another [Ty]
|
||||
@@ -223,6 +225,21 @@ pub enum ImplKind {
|
||||
Trait { impl_trait: Path, for_type: Box<Ty> },
|
||||
}
|
||||
|
||||
/// An import of nonlocal [Item]s
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct Use {
|
||||
pub tree: UseTree,
|
||||
}
|
||||
|
||||
/// A tree of [Item] imports
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub enum UseTree {
|
||||
Tree(Path, Vec<UseTree>),
|
||||
Alias(Path, Identifier),
|
||||
Path(Path),
|
||||
Glob,
|
||||
}
|
||||
|
||||
/// A type expression
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct Ty {
|
||||
|
||||
Reference in New Issue
Block a user