commit 2f9f2455aaeb0ab7acd1717676e078196d135e76
parent a6d9d5d3c4b6ac3c256361d919a3c3975378321c
Author: Mohammad-Reza Nabipoor <m.nabipoor@yahoo.com>
Date: Sun, 13 Sep 2020 05:31:28 +0430
kaleidoscope_codegen: Add name param to mkfunc
Function name is no longer auto-generated. User should choose a
name.
Diffstat:
3 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/kaleidoscope_codegen.cpp b/kaleidoscope_codegen.cpp
@@ -4,7 +4,6 @@
#include "kaleidoscope_ast.hpp"
#include <algorithm>
-#include <cstdio>
#include <string>
#include <utility>
#include <vector>
@@ -274,17 +273,12 @@ kal::codegen(const Function& f)
}
llvm::Function*
-kal::mkfunc(ASTNode* f, ASTNode* l)
+kal::mkfunc(const std::string& name, ASTNode* f, ASTNode* l)
{
- static std::size_t i;
- char fname[1024];
-
if (f == l)
return nullptr;
- snprintf(fname, sizeof(fname), "kaleidoscope_body_%zu__", i++);
-
- auto func = codegen(kal::Prototype{ fname, {} });
+ auto func = codegen(kal::Prototype{ name, {} });
ASSERT_ALWAYS(func != nullptr);
diff --git a/kaleidoscope_codegen.hpp b/kaleidoscope_codegen.hpp
@@ -1,6 +1,8 @@
#pragma once
+#include <string>
+
namespace llvm {
class Value;
class Function;
@@ -35,7 +37,7 @@ llvm::Function*
codegen(const Function&);
llvm::Function*
-mkfunc(kal::ASTNode* f, kal::ASTNode* l);
+mkfunc(const std::string& name, kal::ASTNode* f, kal::ASTNode* l);
void
codegen_reset(void);
diff --git a/tests/kaleidoscope_codegen.test.cpp b/tests/kaleidoscope_codegen.test.cpp
@@ -265,7 +265,7 @@ sin(2.72) + formula(1, 2, 3)
auto f = pd.stmts.data();
auto l = f + pd.stmts.size();
- REQUIRE(to_string(kal::mkfunc(f, l)) ==
+ REQUIRE(to_string(kal::mkfunc("kaleidoscope_body_0__", f, l)) ==
"define double @kaleidoscope_body_0__() {\n"
"entry:\n"
" %calltmp = call double @sin(double 2.720000e+00)\n"