Commit 9e13604b authored by 李晓奇's avatar 李晓奇

88 points, wow hahaha!

parent b8f14d6d
......@@ -111,6 +111,10 @@ PB20111654 李晓奇
- 返现布尔表达式必须使用i1类型,类型要求真的太严格了!!
- 知道了为什么clang生成的中间代码,会把实参声明一遍再拷贝了。
在我看来方便编译器代码的生成,因为重新声明,push给scope的值是指针类型而不是纯值,这在后边访问Var中有用。
## 实验设计
请写明为了顺利完成本次实验,加入了哪些亮点设计,并对这些设计进行解释。
......
......@@ -262,18 +262,21 @@ void CminusfBuilder::visit(ASTFunDeclaration &node) {
void CminusfBuilder::visit(ASTParam &node) {
//!TODO: This function is empty now.
// If the parameter is int|float, copy and store them
auto param_value = cur_value;
switch (node.type) {
case TYPE_INT: {
scope.push(node.id, cur_value);
cur_value = builder->create_alloca(INT32_T);
break;
}
case TYPE_FLOAT: {
scope.push(node.id, cur_value);
cur_value = builder->create_alloca(FLOAT_T);
break;
}
case TYPE_VOID:
break;
return;
}
scope.push(node.id, cur_value);
builder->create_store(param_value, cur_value);
}
// Done?
......@@ -314,17 +317,30 @@ void CminusfBuilder::visit(ASTSelectionStmt &node) {
node.expression->accept(*this);
auto cond = cur_value;
cast_to_i1(cond);
auto TBB = BasicBlock::create(builder->get_module(), "", cur_fun);
auto FBB = BasicBlock::create(builder->get_module(), "", cur_fun);
builder->create_cond_br(cond, TBB, FBB);
builder->set_insert_point(TBB);
auto ifBB = BasicBlock::create(builder->get_module(), "", cur_fun);
auto endBB = BasicBlock::create(builder->get_module(), "", cur_fun);
if (node.else_statement) {
auto elseBB = BasicBlock::create(builder->get_module(), "", cur_fun);
builder->create_cond_br(cond, ifBB, elseBB);
builder->set_insert_point(ifBB);
node.if_statement->accept(*this);
builder->create_br(FBB);
builder->create_br(endBB);
builder->set_insert_point(FBB);
if (node.else_statement) {
builder->set_insert_point(elseBB);
node.else_statement->accept(*this);
builder->create_br(endBB);
builder->set_insert_point(endBB);
} else {
builder->create_cond_br(cond, ifBB, endBB);
builder->set_insert_point(ifBB);
node.if_statement->accept(*this);
builder->create_br(endBB);
builder->set_insert_point(endBB);
}
scope.exit();
}
......
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