Move compile::Ctx to its own mod, compile::ctx::Ctx
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use crate::{
|
||||
syn::{ast::*, op::BinOp, span::*},
|
||||
compile::{
|
||||
Ctx,
|
||||
ctx::Ctx,
|
||||
error::*,
|
||||
ir,
|
||||
visit::*,
|
||||
|
||||
21
src/compile/ctx.rs
Normal file
21
src/compile/ctx.rs
Normal file
@@ -0,0 +1,21 @@
|
||||
use crate::compile::name::NameStack;
|
||||
|
||||
pub struct Ctx {
|
||||
name_stack: NameStack,
|
||||
}
|
||||
|
||||
impl Ctx {
|
||||
pub fn new() -> Self {
|
||||
Ctx {
|
||||
name_stack: NameStack::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn name_stack(&self) -> &NameStack {
|
||||
&self.name_stack
|
||||
}
|
||||
|
||||
pub fn name_stack_mut(&mut self) -> &mut NameStack {
|
||||
&mut self.name_stack
|
||||
}
|
||||
}
|
||||
@@ -1,31 +1,11 @@
|
||||
#[macro_use] pub mod visit;
|
||||
pub mod block;
|
||||
pub mod ctx;
|
||||
pub mod error;
|
||||
pub mod ir;
|
||||
pub mod name;
|
||||
|
||||
use crate::compile::name::NameStack;
|
||||
|
||||
// * Desugar
|
||||
// * Collect names as symbols
|
||||
// * Create basic blocks
|
||||
|
||||
pub struct Ctx {
|
||||
name_stack: NameStack,
|
||||
}
|
||||
|
||||
impl Ctx {
|
||||
pub fn new() -> Self {
|
||||
Ctx {
|
||||
name_stack: NameStack::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn name_stack(&self) -> &NameStack {
|
||||
&self.name_stack
|
||||
}
|
||||
|
||||
pub fn name_stack_mut(&mut self) -> &mut NameStack {
|
||||
&mut self.name_stack
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
use crate::{
|
||||
compile::{visit::*, Ctx},
|
||||
compile::{ctx::Ctx, visit::*},
|
||||
obj::prelude::*,
|
||||
syn::{ast::prelude::*, span::*},
|
||||
};
|
||||
use std::collections::HashMap;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// NameStack
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
pub struct NameStack {
|
||||
next_sym: usize,
|
||||
stack: Vec<HashMap<String, NameId>>,
|
||||
@@ -71,7 +75,11 @@ impl NameStack {
|
||||
}
|
||||
}
|
||||
|
||||
/// Collect local names and push them to the top layer of the name stack.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CollectNames
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// Collect local stack names and push them to the top layer of the name stack.
|
||||
pub struct CollectNames<'c, 't> {
|
||||
ctx: &'c mut Ctx,
|
||||
text: &'t str,
|
||||
@@ -133,9 +141,17 @@ impl Visit<BaseExpr> for CollectNames<'_, '_> {
|
||||
|
||||
fn visit(&mut self, expr: &BaseExpr) -> Self::Out {
|
||||
// This is a LHS standalone expr
|
||||
if let BaseExpr { kind: BaseExprKind::Ident, .. } = expr {
|
||||
if let BaseExpr {
|
||||
kind: BaseExprKind::Ident,
|
||||
..
|
||||
} = expr
|
||||
{
|
||||
let name = expr.text_at(self.text).to_string();
|
||||
self.ctx.name_stack_mut().add(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CollectSyms
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -43,7 +43,7 @@ fn main() -> Result<()> {
|
||||
let ast = parser.next_body()?;
|
||||
//println!("{:#?}", ast);
|
||||
|
||||
let mut ctx = compile::Ctx::new();
|
||||
let mut ctx = compile::ctx::Ctx::new();
|
||||
ctx.name_stack_mut().push_default();
|
||||
{
|
||||
let mut collect_names = compile::name::CollectNames::new(&mut ctx, text.as_str());
|
||||
|
||||
@@ -17,7 +17,6 @@ pub mod ns {
|
||||
}
|
||||
pub mod str;
|
||||
pub mod sym;
|
||||
//pub mod ty;
|
||||
|
||||
pub mod prelude {
|
||||
pub use crate::{
|
||||
|
||||
Reference in New Issue
Block a user