first stuff of randomif

This commit is contained in:
Florian Sattler
2013-06-01 18:10:13 +02:00
parent 712cc419ab
commit 993c730912
3 changed files with 33 additions and 0 deletions

View File

@@ -59,6 +59,7 @@ SET(SCULLY_SOURCE
src/test.cpp
src/Token.cpp
src/libscully.c
src/AST/ASTElement.cpp
src/AST/ASTVisitor.cpp

View File

@@ -176,6 +176,29 @@ void CodeGenVisitor::visit(RandomForStatement* e) {
}
void CodeGenVisitor::visit(RandomIfStatement* e) {
value_ = 0;
e->getProb()->accept(this);
llvm::Function* f = builder_->GetInsertBlock()->getParent();
llvm::BasicBlock* thenBB = llvm::BasicBlock::Create(llvm::getGlobalContext(), "then", f);
llvm::BasicBlock* elseBB = llvm::BasicBlock::Create(llvm::getGlobalContext(), "else");
llvm::BasicBlock* mergeBB = llvm::BasicBlock::Create(llvm::getGlobalContext(), "merge");
builder_->CreateCondBr(value_, thenBB, elseBB);
// then
builder_->SetInsertPoint(thenBB);#
e->getStmt()->accept(this);
builder_->CreateBr(mergeBB);
f->getBasicBlockList().push_back(elseBB);
builder_->SetInsertPoint(elseBB);
builder_->CreateBr(mergeBB);
f->getBasicBlockList().push_back(mergeBB);
builder_->SetInsertPoint(mergeBB);
}
void CodeGenVisitor::visit(ReturnStatement* e) {

9
src/libscully.c Normal file
View File

@@ -0,0 +1,9 @@
#include <time.h>
#include <stdlib.h>
bool random_if(int p) {
srand(time(NULL));
int r = rand() % 100;
return (r < p);
}