a
This commit is contained in:
parent
9747990c12
commit
acebeaa332
4 changed files with 34 additions and 6 deletions
3
example
3
example
|
@ -1,5 +1,4 @@
|
||||||
fn main
|
fn main {
|
||||||
{
|
|
||||||
urmom();
|
urmom();
|
||||||
isEven();
|
isEven();
|
||||||
5
|
5
|
||||||
|
|
10
src/ast.rs
10
src/ast.rs
|
@ -5,9 +5,16 @@ pub struct Program {
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Decl {
|
pub enum Decl {
|
||||||
|
Mod(Mod),
|
||||||
Func(Func),
|
Func(Func),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Mod {
|
||||||
|
pub name: Ident,
|
||||||
|
pub decls: Vec<Decl>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Func {
|
pub struct Func {
|
||||||
pub name: Ident,
|
pub name: Ident,
|
||||||
|
@ -39,3 +46,6 @@ pub enum Type {}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
|
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
|
||||||
pub struct Ident(pub String);
|
pub struct Ident(pub String);
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Hash, PartialEq, Eq)]
|
||||||
|
pub struct Path(pub Vec<Ident>);
|
||||||
|
|
10
src/hoas.rs
10
src/hoas.rs
|
@ -8,6 +8,10 @@ use crate::utils::Id;
|
||||||
type Graph = DiGraphMap<Id, ()>;
|
type Graph = DiGraphMap<Id, ()>;
|
||||||
type Scopes = Vec<HashSet<String>>;
|
type Scopes = Vec<HashSet<String>>;
|
||||||
|
|
||||||
|
pub enum HExpr {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Namespaces {
|
pub struct Namespaces {
|
||||||
funcs: HashMap<Id, Func>,
|
funcs: HashMap<Id, Func>,
|
||||||
|
@ -20,9 +24,9 @@ pub struct Namespaces {
|
||||||
impl Namespaces {
|
impl Namespaces {
|
||||||
pub fn create(program: Program) -> Self {
|
pub fn create(program: Program) -> Self {
|
||||||
let mut funcs = HashMap::new();
|
let mut funcs = HashMap::new();
|
||||||
let mut types = HashMap::new();
|
let types = HashMap::new();
|
||||||
let mut func_names = HashMap::new();
|
let mut func_names = HashMap::new();
|
||||||
let mut type_names = HashMap::new();
|
let type_names = HashMap::new();
|
||||||
|
|
||||||
for decl in program.decls {
|
for decl in program.decls {
|
||||||
match decl {
|
match decl {
|
||||||
|
@ -31,6 +35,8 @@ impl Namespaces {
|
||||||
func_names.insert(func.name.0.clone(), id);
|
func_names.insert(func.name.0.clone(), id);
|
||||||
funcs.insert(id, func);
|
funcs.insert(id, func);
|
||||||
}
|
}
|
||||||
|
Decl::Mod(_mod) => {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
traits
Normal file
13
traits
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
trait Foo {
|
||||||
|
fn foo();
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Bar impls Foo {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test(f: impl Foo) {
|
||||||
|
}
|
||||||
|
|
||||||
|
x = Bar {}
|
||||||
|
test(x)
|
Loading…
Reference in a new issue