Remove old useless example
This commit is contained in:
parent
990d8cb448
commit
287ab69d32
@ -1,186 +0,0 @@
|
|||||||
use std::path::PathBuf;
|
|
||||||
|
|
||||||
use reid::mir::{self, *};
|
|
||||||
use reid_lib::Context;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let fibonacci_name = "fibonacci".to_owned();
|
|
||||||
let fibonacci_n = "N".to_owned();
|
|
||||||
|
|
||||||
let fibonacci = FunctionDefinition {
|
|
||||||
name: fibonacci_name.clone(),
|
|
||||||
is_pub: false,
|
|
||||||
is_imported: false,
|
|
||||||
return_type: TypeKind::I32,
|
|
||||||
parameters: vec![(fibonacci_n.clone(), TypeKind::I32)],
|
|
||||||
kind: FunctionDefinitionKind::Local(
|
|
||||||
Block {
|
|
||||||
statements: vec![Statement(
|
|
||||||
StmtKind::Expression(Expression(
|
|
||||||
ExprKind::If(IfExpression(
|
|
||||||
// If N < 3
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::BinOp(
|
|
||||||
BinaryOperator::Cmp(CmpOperator::GT),
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::Variable(NamedVariableRef(
|
|
||||||
TypeKind::I32,
|
|
||||||
"N".to_string(),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::Literal(Literal::I32(2)),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
// Then
|
|
||||||
Block {
|
|
||||||
statements: vec![],
|
|
||||||
return_expression: Some((
|
|
||||||
ReturnKind::Hard,
|
|
||||||
// return fibonacci(n-1) + fibonacci(n-2)
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::BinOp(
|
|
||||||
BinaryOperator::Add,
|
|
||||||
// fibonacci(n-1)
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::FunctionCall(FunctionCall {
|
|
||||||
name: fibonacci_name.clone(),
|
|
||||||
return_type: TypeKind::I32,
|
|
||||||
parameters: vec![Expression(
|
|
||||||
ExprKind::BinOp(
|
|
||||||
BinaryOperator::Minus,
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::Variable(
|
|
||||||
NamedVariableRef(
|
|
||||||
TypeKind::I32,
|
|
||||||
fibonacci_n.clone(),
|
|
||||||
Default::default(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::Literal(Literal::I32(1)),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
),
|
|
||||||
Default::default(),
|
|
||||||
)],
|
|
||||||
}),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
// fibonacci(n-2)
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::FunctionCall(FunctionCall {
|
|
||||||
name: fibonacci_name.clone(),
|
|
||||||
return_type: TypeKind::I32,
|
|
||||||
parameters: vec![Expression(
|
|
||||||
ExprKind::BinOp(
|
|
||||||
BinaryOperator::Minus,
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::Variable(
|
|
||||||
NamedVariableRef(
|
|
||||||
TypeKind::I32,
|
|
||||||
fibonacci_n.clone(),
|
|
||||||
Default::default(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::Literal(Literal::I32(2)),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
),
|
|
||||||
Default::default(),
|
|
||||||
)],
|
|
||||||
}),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
)),
|
|
||||||
meta: Default::default(),
|
|
||||||
},
|
|
||||||
// No else-block
|
|
||||||
None,
|
|
||||||
)),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
Default::default(),
|
|
||||||
)],
|
|
||||||
// return 1
|
|
||||||
return_expression: Some((
|
|
||||||
ReturnKind::Soft,
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::Literal(Literal::I32(1)),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
)),
|
|
||||||
meta: Default::default(),
|
|
||||||
},
|
|
||||||
Default::default(),
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
let main = FunctionDefinition {
|
|
||||||
name: "main".to_owned(),
|
|
||||||
is_pub: false,
|
|
||||||
is_imported: false,
|
|
||||||
return_type: TypeKind::I32,
|
|
||||||
parameters: vec![],
|
|
||||||
kind: FunctionDefinitionKind::Local(
|
|
||||||
Block {
|
|
||||||
statements: vec![],
|
|
||||||
return_expression: Some((
|
|
||||||
ReturnKind::Soft,
|
|
||||||
Box::new(Expression(
|
|
||||||
ExprKind::FunctionCall(FunctionCall {
|
|
||||||
name: fibonacci_name.clone(),
|
|
||||||
return_type: TypeKind::I32,
|
|
||||||
parameters: vec![Expression(
|
|
||||||
ExprKind::Literal(Literal::I32(5)),
|
|
||||||
Default::default(),
|
|
||||||
)],
|
|
||||||
}),
|
|
||||||
Default::default(),
|
|
||||||
)),
|
|
||||||
)),
|
|
||||||
meta: Default::default(),
|
|
||||||
},
|
|
||||||
Default::default(),
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
let mir_context = mir::Context {
|
|
||||||
modules: vec![Module {
|
|
||||||
name: "test module".to_owned(),
|
|
||||||
module_id: SourceModuleId::default(),
|
|
||||||
imports: vec![],
|
|
||||||
functions: vec![fibonacci, main],
|
|
||||||
typedefs: Vec::new(),
|
|
||||||
path: None,
|
|
||||||
is_main: true,
|
|
||||||
}],
|
|
||||||
base: PathBuf::new(),
|
|
||||||
};
|
|
||||||
println!("test1");
|
|
||||||
|
|
||||||
let context = Context::new("testcodegen");
|
|
||||||
let codegen = mir_context.codegen(&context);
|
|
||||||
println!("test2");
|
|
||||||
|
|
||||||
codegen.compile();
|
|
||||||
println!("test3");
|
|
||||||
|
|
||||||
// match codegen_module.module.print_to_string() {
|
|
||||||
// Ok(v) => println!("{}", v),
|
|
||||||
// Err(e) => println!("Err: {:?}", e),
|
|
||||||
// }
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user