Skip to content

Commit

Permalink
Expose Platform in C/C++ backends
Browse files Browse the repository at this point in the history
  • Loading branch information
certik committed Jun 21, 2022
1 parent 84c50b4 commit c87316e
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 13 deletions.
6 changes: 4 additions & 2 deletions src/bin/lpython.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ int emit_cpp(const std::string &infile,
LFortran::ASR::TranslationUnit_t* asr = r1.result;

diagnostics.diagnostics.clear();
auto res = LFortran::asr_to_cpp(al, *asr, diagnostics);
auto res = LFortran::asr_to_cpp(al, *asr, diagnostics,
compiler_options.platform);
std::cerr << diagnostics.render(input, lm, compiler_options);
if (!res.ok) {
LFORTRAN_ASSERT(diagnostics.has_error())
Expand Down Expand Up @@ -254,7 +255,8 @@ int emit_c(const std::string &infile,
LFortran::ASR::TranslationUnit_t* asr = r1.result;

diagnostics.diagnostics.clear();
auto res = LFortran::asr_to_c(al, *asr, diagnostics);
auto res = LFortran::asr_to_c(al, *asr, diagnostics,
compiler_options.platform);
std::cerr << diagnostics.render(input, lm, compiler_options);
if (!res.ok) {
LFORTRAN_ASSERT(diagnostics.has_error())
Expand Down
8 changes: 4 additions & 4 deletions src/libasr/codegen/asr_to_c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ class ASRToCVisitor : public BaseCCPPVisitor<ASRToCVisitor>
{
public:

ASRToCVisitor(diag::Diagnostics &diag) : BaseCCPPVisitor(diag,
false, false, true) {}
ASRToCVisitor(diag::Diagnostics &diag, Platform &platform)
: BaseCCPPVisitor(diag, platform, false, false, true) {}

std::string convert_variable_decl(const ASR::Variable_t &v)
{
Expand Down Expand Up @@ -435,11 +435,11 @@ R"(
};

Result<std::string> asr_to_c(Allocator &al, ASR::TranslationUnit_t &asr,
diag::Diagnostics &diagnostics)
diag::Diagnostics &diagnostics, Platform &platform)
{
pass_unused_functions(al, asr, true);
pass_replace_class_constructor(al, asr);
ASRToCVisitor v(diagnostics);
ASRToCVisitor v(diagnostics, platform);
try {
v.visit_asr((ASR::asr_t &)asr);
} catch (const CodeGenError &e) {
Expand Down
3 changes: 2 additions & 1 deletion src/libasr/codegen/asr_to_c.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
#define LFORTRAN_ASR_TO_C_H

#include <libasr/asr.h>
#include <libasr/utils.h>

namespace LFortran {

Result<std::string> asr_to_c(Allocator &al, ASR::TranslationUnit_t &asr,
diag::Diagnostics &diagnostics);
diag::Diagnostics &diagnostics, Platform &platform);

} // namespace LFortran

Expand Down
4 changes: 3 additions & 1 deletion src/libasr/codegen/asr_to_c_cpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class BaseCCPPVisitor : public ASR::BaseVisitor<Derived>
Derived& self() { return static_cast<Derived&>(*this); }
public:
diag::Diagnostics &diag;
Platform platform;
std::string src;
int indentation_level;
int indentation_spaces;
Expand All @@ -89,8 +90,9 @@ class BaseCCPPVisitor : public ASR::BaseVisitor<Derived>

SymbolTable* global_scope;

BaseCCPPVisitor(diag::Diagnostics &diag,
BaseCCPPVisitor(diag::Diagnostics &diag, Platform &platform,
bool gen_stdstring, bool gen_stdcomplex, bool is_c) : diag{diag},
platform{platform},
gen_stdstring{gen_stdstring}, gen_stdcomplex{gen_stdcomplex},
is_c{is_c}, global_scope{nullptr} {}

Expand Down
8 changes: 4 additions & 4 deletions src/libasr/codegen/asr_to_cpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ std::string format_type(const std::string &dims, const std::string &type,
class ASRToCPPVisitor : public BaseCCPPVisitor<ASRToCPPVisitor>
{
public:
ASRToCPPVisitor(diag::Diagnostics &diag) : BaseCCPPVisitor(diag,
true, true, false) {}
ASRToCPPVisitor(diag::Diagnostics &diag, Platform &platform)
: BaseCCPPVisitor(diag, platform, true, true, false) {}

std::string convert_variable_decl(const ASR::Variable_t &v)
{
Expand Down Expand Up @@ -419,10 +419,10 @@ Kokkos::View<T*> from_std_vector(const std::vector<T> &v)
};

Result<std::string> asr_to_cpp(Allocator &al, ASR::TranslationUnit_t &asr,
diag::Diagnostics &diagnostics)
diag::Diagnostics &diagnostics, Platform &platform)
{
pass_unused_functions(al, asr, true);
ASRToCPPVisitor v(diagnostics);
ASRToCPPVisitor v(diagnostics, platform);
try {
v.visit_asr((ASR::asr_t &)asr);
} catch (const CodeGenError &e) {
Expand Down
3 changes: 2 additions & 1 deletion src/libasr/codegen/asr_to_cpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
#define LFORTRAN_ASR_TO_CPP_H

#include <libasr/asr.h>
#include <libasr/utils.h>

namespace LFortran {

Result<std::string> asr_to_cpp(Allocator &al, ASR::TranslationUnit_t &asr,
diag::Diagnostics &diagnostics);
diag::Diagnostics &diagnostics, Platform &platform);

} // namespace LFortran

Expand Down

0 comments on commit c87316e

Please sign in to comment.