GitLab will continue to be upgraded from 11.4.5-ce.0 on November 25th 2019 at 4.00pm (AEDT) to 5.00pm (AEDT) due to Critical Security Patch Availability. During the update, GitLab and Mattermost services will not be available.

Commit 87720ecb authored by qinsoon's avatar qinsoon

some structs for implementing compiler passes

parent 4ae9559a
use ast::ir::*;
use std::cell::RefCell;
pub mod passes;
pub struct Compiler {
policy: RefCell<CompilerPolicy>
}
impl Compiler {
pub fn new(policy: CompilerPolicy) -> Compiler {
Compiler{policy: RefCell::new(policy)}
}
pub fn compile(&self, func: &mut MuFunction) {
for pass in self.policy.borrow_mut().passes.iter_mut() {
pass.execute(func);
}
}
}
pub struct CompilerPolicy {
passes: Vec<Box<CompilerPass>>
}
impl CompilerPolicy {
pub fn default() -> CompilerPolicy {
let mut passes : Vec<Box<CompilerPass>> = vec![];
passes.push(Box::new(passes::tree_gen::TreeGenerationPass::new()));
CompilerPolicy{passes: passes}
}
}
pub trait CompilerPass {
fn execute(&mut self, func: &mut MuFunction);
}
pub mod tree_gen;
\ No newline at end of file
use ast::ir::*;
use compiler::CompilerPass;
pub struct TreeGenerationPass;
impl TreeGenerationPass {
pub fn new() -> TreeGenerationPass {
TreeGenerationPass
}
}
impl CompilerPass for TreeGenerationPass {
fn execute(&mut self, func: &mut MuFunction) {
}
}
\ No newline at end of file
extern crate mu;
#[cfg(test)]
mod tests {
mod test_types {
use mu::ast::ptr::*;
use mu::ast::types::*;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment