mirror of https://github.com/exaloop/codon
Add __repr_pretty__ support
parent
0fd028bc52
commit
1681912b2c
|
@ -134,10 +134,7 @@ if(CODON_JUPYTER)
|
||||||
NAME cppzmq
|
NAME cppzmq
|
||||||
URL https://github.com/zeromq/cppzmq/archive/refs/tags/v4.8.1.tar.gz
|
URL https://github.com/zeromq/cppzmq/archive/refs/tags/v4.8.1.tar.gz
|
||||||
VERSION 4.8.1
|
VERSION 4.8.1
|
||||||
OPTION "CPPZMQ_BUILD_TESTS OFF")
|
OPTIONS "CPPZMQ_BUILD_TESTS OFF")
|
||||||
if(cppzmq_ADDED)
|
|
||||||
set_target_properties(unit_tests PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
||||||
endif()
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME xtl
|
NAME xtl
|
||||||
GITHUB_REPOSITORY "xtensor-stack/xtl"
|
GITHUB_REPOSITORY "xtensor-stack/xtl"
|
||||||
|
|
|
@ -84,8 +84,8 @@ public:
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
JIT::JIT(const std::string &argv0)
|
JIT::JIT(const std::string &argv0, const std::string &mode)
|
||||||
: compiler(std::make_unique<Compiler>(argv0, /*debug=*/true)) {
|
: compiler(std::make_unique<Compiler>(argv0, /*debug=*/true)), mode(mode) {
|
||||||
if (auto e = Engine::create()) {
|
if (auto e = Engine::create()) {
|
||||||
engine = std::move(e.get());
|
engine = std::move(e.get());
|
||||||
} else {
|
} else {
|
||||||
|
@ -176,6 +176,17 @@ llvm::Expected<std::string> JIT::exec(const std::string &code) {
|
||||||
auto sctx = cache->imports[MAIN_IMPORT].ctx;
|
auto sctx = cache->imports[MAIN_IMPORT].ctx;
|
||||||
auto preamble = std::make_shared<ast::SimplifyVisitor::Preamble>();
|
auto preamble = std::make_shared<ast::SimplifyVisitor::Preamble>();
|
||||||
try {
|
try {
|
||||||
|
auto *e = node->getSuite()
|
||||||
|
? const_cast<ast::SuiteStmt *>(node->getSuite())->lastInBlock()
|
||||||
|
: &node;
|
||||||
|
if (e)
|
||||||
|
if (auto ex = (*e)->getExpr()) {
|
||||||
|
*e = std::make_shared<ast::PrintStmt>(
|
||||||
|
std::vector<ast::ExprPtr>{std::make_shared<ast::CallExpr>(
|
||||||
|
std::make_shared<ast::IdExpr>("_jit_display"), ex->expr,
|
||||||
|
std::make_shared<ast::StringExpr>(mode))},
|
||||||
|
false);
|
||||||
|
}
|
||||||
auto s = ast::SimplifyVisitor(sctx, preamble).transform(node);
|
auto s = ast::SimplifyVisitor(sctx, preamble).transform(node);
|
||||||
auto simplified = std::make_shared<ast::SuiteStmt>();
|
auto simplified = std::make_shared<ast::SuiteStmt>();
|
||||||
for (auto &s : preamble->globals)
|
for (auto &s : preamble->globals)
|
||||||
|
|
|
@ -19,9 +19,10 @@ class JIT {
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Compiler> compiler;
|
std::unique_ptr<Compiler> compiler;
|
||||||
std::unique_ptr<Engine> engine;
|
std::unique_ptr<Engine> engine;
|
||||||
|
std::string mode;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit JIT(const std::string &argv0);
|
explicit JIT(const std::string &argv0, const std::string &mode = "");
|
||||||
|
|
||||||
Compiler *getCompiler() const { return compiler.get(); }
|
Compiler *getCompiler() const { return compiler.get(); }
|
||||||
Engine *getEngine() const { return engine.get(); }
|
Engine *getEngine() const { return engine.get(); }
|
||||||
|
|
|
@ -52,6 +52,16 @@ void SuiteStmt::flatten(StmtPtr s, std::vector<StmtPtr> &stmts) {
|
||||||
stmts.push_back(ss);
|
stmts.push_back(ss);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
StmtPtr *SuiteStmt::lastInBlock() {
|
||||||
|
if (stmts.empty())
|
||||||
|
return nullptr;
|
||||||
|
if (auto s = const_cast<SuiteStmt *>(stmts.back()->getSuite())) {
|
||||||
|
auto l = s->lastInBlock();
|
||||||
|
if (l)
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
return &(stmts.back());
|
||||||
|
}
|
||||||
|
|
||||||
std::string BreakStmt::toString(int) const { return "(break)"; }
|
std::string BreakStmt::toString(int) const { return "(break)"; }
|
||||||
ACCEPT_IMPL(BreakStmt, ASTVisitor);
|
ACCEPT_IMPL(BreakStmt, ASTVisitor);
|
||||||
|
|
|
@ -92,6 +92,7 @@ struct SuiteStmt : public Stmt {
|
||||||
const Stmt *firstInBlock() const override {
|
const Stmt *firstInBlock() const override {
|
||||||
return stmts.empty() ? nullptr : stmts[0]->firstInBlock();
|
return stmts.empty() ? nullptr : stmts[0]->firstInBlock();
|
||||||
}
|
}
|
||||||
|
StmtPtr *lastInBlock();
|
||||||
|
|
||||||
/// Flatten all nested SuiteStmt objects that do not own a block in the statement
|
/// Flatten all nested SuiteStmt objects that do not own a block in the statement
|
||||||
/// vector. This is shallow flattening.
|
/// vector. This is shallow flattening.
|
||||||
|
|
|
@ -61,7 +61,7 @@ nl::json CodonJupyter::execute_request_impl(int execution_counter, const string
|
||||||
}
|
}
|
||||||
|
|
||||||
void CodonJupyter::configure_impl() {
|
void CodonJupyter::configure_impl() {
|
||||||
jit = std::make_unique<codon::jit::JIT>(argv0);
|
jit = std::make_unique<codon::jit::JIT>(argv0, "jupyter");
|
||||||
llvm::cantFail(jit->init());
|
llvm::cantFail(jit->init());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ from internal.types.collections.dict import *
|
||||||
|
|
||||||
import internal.c_stubs as _C
|
import internal.c_stubs as _C
|
||||||
from internal.builtin import *
|
from internal.builtin import *
|
||||||
|
from internal.builtin import _jit_display
|
||||||
from internal.box import Box
|
from internal.box import Box
|
||||||
from internal.str import *
|
from internal.str import *
|
||||||
|
|
||||||
|
|
|
@ -329,3 +329,14 @@ class int:
|
||||||
raise ValueError("invalid literal for int() with base " + str(base) + ": " + s)
|
raise ValueError("invalid literal for int() with base " + str(base) + ": " + s)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def _jit_display(x, s: Static[str]):
|
||||||
|
if hasattr(x, "__repr_pretty__") and s == "jupyter":
|
||||||
|
return x.__repr_pretty__()
|
||||||
|
elif hasattr(x, "__repr__"):
|
||||||
|
return x.__repr__()
|
||||||
|
elif hasattr(x, "__str__"):
|
||||||
|
return x.__str__()
|
||||||
|
else:
|
||||||
|
return ''
|
Loading…
Reference in New Issue