feat(library/init/lean/compiler): [export] attribute in Lean

This commit is contained in:
Leonardo de Moura 2019-06-24 14:23:35 -07:00
parent bc0c0ee9bc
commit 45dc2cd49a
13 changed files with 1838 additions and 650 deletions

View file

@ -1,15 +0,0 @@
/-
Copyright (c) 2019 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
prelude
import init.lean.environment
namespace Lean
@[extern "lean_get_export_name_for"]
constant getExportNameFor (env : @& Environment) (n : @& Name) : Option Name := default _
def isExport (env : Environment) (n : Name) : Bool :=
(getExportNameFor env n).isSome
end Lean

View file

@ -0,0 +1,38 @@
/-
Copyright (c) 2019 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
prelude
import init.lean.attributes
namespace Lean
private def isValidCppId (id : String) : Bool :=
let first := id.get 0 in
first.isAlpha && (id.toSubstring.drop 1).all (λ c, c.isAlpha || c.isDigit || c == '_')
private def isValidCppName : Name → Bool
| (Name.mkString Name.anonymous s) := isValidCppId s
| (Name.mkString p s) := isValidCppId s && isValidCppName p
| _ := false
def mkExportAttr : IO (ParametricAttribute Name) :=
registerParametricAttribute `export "name to be used by code generators" $ λ env declName stx,
match stx with
| Syntax.ident _ _ exportName _ _ :=
if isValidCppName exportName then Except.ok exportName
else Except.error "invalid 'export' function name, is not a valid C++ identifier"
| _ := Except.error "unexpected kind of argument"
@[init mkExportAttr]
constant exportAttr : ParametricAttribute Name := default _
@[export lean.get_export_name_for_core]
def getExportNameFor (env : Environment) (n : Name) : Option Name :=
exportAttr.getParam env n
def isExport (env : Environment) (n : Name) : Bool :=
(getExportNameFor env n).isSome
end Lean

View file

@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Leonardo de Moura
-/
prelude
import init.lean.compiler.export
import init.lean.compiler.exportattr
import init.lean.compiler.ir.compilerm
import init.lean.compiler.ir.normids

View file

@ -7,7 +7,7 @@ prelude
import init.control.conditional
import init.lean.runtime
import init.lean.name_mangling
import init.lean.compiler.export
import init.lean.compiler.exportattr
import init.lean.compiler.initattr
import init.lean.compiler.ir.compilerm
import init.lean.compiler.ir.emitutil

View file

@ -9,59 +9,8 @@ Author: Leonardo de Moura
#include "library/util.h"
namespace lean {
struct export_attr_data : public attr_data {
name m_id;
export_attr_data(name const & id): m_id(id) {}
export_attr_data() {}
virtual unsigned hash() const override { return m_id.hash(); }
virtual void parse(expr const & e) override {
buffer<expr> args; get_app_args(e, args);
if (args.size() != 1 || !is_const(extract_mdata(args[0])))
throw parser_error("constant expected", get_pos_info_provider()->get_pos_info_or_some(e));
m_id = const_name(extract_mdata(args[0]));
}
virtual void print(std::ostream & out) override { out << " " << m_id; }
void write(serializer & s) const { s << m_id; }
void read(deserializer & d) { m_id = read_name(d); }
};
typedef typed_attribute<export_attr_data> export_attr;
static export_attr const & get_export_attr() {
return static_cast<export_attr const &>(get_system_attribute("export"));
}
object* get_export_name_for_core(object* env, object *n);
optional<name> get_export_name_for(environment const & env, name const & n) {
if (auto const & data = get_export_attr().get(env, n)) {
return optional<name>(data->m_id);
} else {
return optional<name>();
}
}
extern "C" obj_res lean_get_export_name_for(b_obj_arg env, b_obj_arg n) {
return to_object(get_export_name_for(environment(env, true), name(n, true)));
}
void initialize_export_attribute() {
register_system_attribute(export_attr("export", "name to be used by code generators",
[](environment const & env, io_state const &, name const & n, unsigned, bool persistent) {
if (!persistent) throw exception("invalid [export] attribute, must be persistent");
auto const & data = *get_export_attr().get(env, n);
name it = data.m_id;
if (it.is_anonymous()) throw exception("invalid [export] attribute, argument is missing");
while (!it.is_anonymous()) {
if (!it.is_string()) throw exception("invalid [export] attribute, identifier cannot be numeric");
it = it.get_prefix();
}
constant_info cinfo = env.get(n);
if (!cinfo.is_definition())
throw exception("invalid '[export]' use, only definitions can be exported");
return env;
}));
}
void finalize_export_attribute() {
return to_optional<name>(get_export_name_for_core(env.to_obj_arg(), n.to_obj_arg()));
}
}

View file

@ -9,6 +9,4 @@ Author: Leonardo de Moura
namespace lean {
optional<name> get_export_name_for(environment const & env, name const & n);
inline bool has_export_name(environment const & env, name const & n) { return static_cast<bool>(get_export_name_for(env, n)); }
void initialize_export_attribute();
void finalize_export_attribute();
}

View file

@ -11,7 +11,6 @@ Author: Leonardo de Moura
#include "library/compiler/specialize.h"
#include "library/compiler/llnf.h"
#include "library/compiler/compiler.h"
#include "library/compiler/export_attribute.h"
#include "library/compiler/extern_attribute.h"
#include "library/compiler/implemented_by_attribute.h"
#include "library/compiler/borrowed_annotation.h"
@ -27,7 +26,6 @@ void initialize_compiler_module() {
initialize_specialize();
initialize_llnf();
initialize_compiler();
initialize_export_attribute();
initialize_extern_attribute();
initialize_borrowed_annotation();
initialize_ll_infer_type();
@ -37,7 +35,6 @@ void finalize_compiler_module() {
finalize_ll_infer_type();
finalize_borrowed_annotation();
finalize_extern_attribute();
finalize_export_attribute();
finalize_compiler();
finalize_llnf();
finalize_specialize();

View file

@ -1 +1 @@
add_library (stage0 OBJECT ./init/coe.cpp ./init/control/alternative.cpp ./init/control/applicative.cpp ./init/control/combinators.cpp ./init/control/conditional.cpp ./init/control/default.cpp ./init/control/estate.cpp ./init/control/except.cpp ./init/control/functor.cpp ./init/control/id.cpp ./init/control/lift.cpp ./init/control/monad.cpp ./init/control/monadfail.cpp ./init/control/option.cpp ./init/control/reader.cpp ./init/control/state.cpp ./init/core.cpp ./init/data/array/basic.cpp ./init/data/array/binsearch.cpp ./init/data/array/default.cpp ./init/data/array/qsort.cpp ./init/data/assoclist.cpp ./init/data/basic.cpp ./init/data/bytearray/basic.cpp ./init/data/bytearray/default.cpp ./init/data/char/basic.cpp ./init/data/char/default.cpp ./init/data/default.cpp ./init/data/dlist.cpp ./init/data/fin/basic.cpp ./init/data/fin/default.cpp ./init/data/hashable.cpp ./init/data/hashmap/basic.cpp ./init/data/hashmap/default.cpp ./init/data/int/basic.cpp ./init/data/int/default.cpp ./init/data/list/basic.cpp ./init/data/list/default.cpp ./init/data/list/instances.cpp ./init/data/nat/basic.cpp ./init/data/nat/bitwise.cpp ./init/data/nat/default.cpp ./init/data/nat/div.cpp ./init/data/option/basic.cpp ./init/data/option/instances.cpp ./init/data/ordering/basic.cpp ./init/data/ordering/default.cpp ./init/data/persistentarray/basic.cpp ./init/data/persistentarray/default.cpp ./init/data/random.cpp ./init/data/rbmap/basic.cpp ./init/data/rbmap/default.cpp ./init/data/rbtree/basic.cpp ./init/data/rbtree/default.cpp ./init/data/repr.cpp ./init/data/string/basic.cpp ./init/data/string/default.cpp ./init/data/tostring.cpp ./init/data/uint.cpp ./init/default.cpp ./init/env_ext.cpp ./init/fix.cpp ./init/io.cpp ./init/lean/attributes.cpp ./init/lean/compiler/closedtermcache.cpp ./init/lean/compiler/constfolding.cpp ./init/lean/compiler/default.cpp ./init/lean/compiler/export.cpp ./init/lean/compiler/initattr.cpp ./init/lean/compiler/inline.cpp ./init/lean/compiler/ir/basic.cpp ./init/lean/compiler/ir/borrow.cpp ./init/lean/compiler/ir/boxing.cpp ./init/lean/compiler/ir/checker.cpp ./init/lean/compiler/ir/compilerm.cpp ./init/lean/compiler/ir/default.cpp ./init/lean/compiler/ir/elimdead.cpp ./init/lean/compiler/ir/emitcpp.cpp ./init/lean/compiler/ir/emitutil.cpp ./init/lean/compiler/ir/expandresetreuse.cpp ./init/lean/compiler/ir/format.cpp ./init/lean/compiler/ir/freevars.cpp ./init/lean/compiler/ir/livevars.cpp ./init/lean/compiler/ir/normids.cpp ./init/lean/compiler/ir/pushproj.cpp ./init/lean/compiler/ir/rc.cpp ./init/lean/compiler/ir/resetreuse.cpp ./init/lean/compiler/ir/simpcase.cpp ./init/lean/compiler/util.cpp ./init/lean/declaration.cpp ./init/lean/default.cpp ./init/lean/disjoint_set.cpp ./init/lean/environment.cpp ./init/lean/evalconst.cpp ./init/lean/expr.cpp ./init/lean/extern.cpp ./init/lean/format.cpp ./init/lean/kvmap.cpp ./init/lean/level.cpp ./init/lean/message.cpp ./init/lean/modifiers.cpp ./init/lean/name.cpp ./init/lean/name_mangling.cpp ./init/lean/options.cpp ./init/lean/parser/default.cpp ./init/lean/parser/identifier.cpp ./init/lean/parser/level.cpp ./init/lean/parser/parser.cpp ./init/lean/parser/trie.cpp ./init/lean/position.cpp ./init/lean/runtime.cpp ./init/lean/smap.cpp ./init/lean/syntax.cpp ./init/lean/toexpr.cpp ./init/lean/trace.cpp ./init/lean/util.cpp ./init/platform.cpp ./init/util.cpp ./init/wf.cpp)
add_library (stage0 OBJECT ./init/coe.cpp ./init/control/alternative.cpp ./init/control/applicative.cpp ./init/control/combinators.cpp ./init/control/conditional.cpp ./init/control/default.cpp ./init/control/estate.cpp ./init/control/except.cpp ./init/control/functor.cpp ./init/control/id.cpp ./init/control/lift.cpp ./init/control/monad.cpp ./init/control/monadfail.cpp ./init/control/option.cpp ./init/control/reader.cpp ./init/control/state.cpp ./init/core.cpp ./init/data/array/basic.cpp ./init/data/array/binsearch.cpp ./init/data/array/default.cpp ./init/data/array/qsort.cpp ./init/data/assoclist.cpp ./init/data/basic.cpp ./init/data/bytearray/basic.cpp ./init/data/bytearray/default.cpp ./init/data/char/basic.cpp ./init/data/char/default.cpp ./init/data/default.cpp ./init/data/dlist.cpp ./init/data/fin/basic.cpp ./init/data/fin/default.cpp ./init/data/hashable.cpp ./init/data/hashmap/basic.cpp ./init/data/hashmap/default.cpp ./init/data/int/basic.cpp ./init/data/int/default.cpp ./init/data/list/basic.cpp ./init/data/list/default.cpp ./init/data/list/instances.cpp ./init/data/nat/basic.cpp ./init/data/nat/bitwise.cpp ./init/data/nat/default.cpp ./init/data/nat/div.cpp ./init/data/option/basic.cpp ./init/data/option/instances.cpp ./init/data/ordering/basic.cpp ./init/data/ordering/default.cpp ./init/data/persistentarray/basic.cpp ./init/data/persistentarray/default.cpp ./init/data/random.cpp ./init/data/rbmap/basic.cpp ./init/data/rbmap/default.cpp ./init/data/rbtree/basic.cpp ./init/data/rbtree/default.cpp ./init/data/repr.cpp ./init/data/string/basic.cpp ./init/data/string/default.cpp ./init/data/tostring.cpp ./init/data/uint.cpp ./init/default.cpp ./init/env_ext.cpp ./init/fix.cpp ./init/io.cpp ./init/lean/attributes.cpp ./init/lean/compiler/closedtermcache.cpp ./init/lean/compiler/constfolding.cpp ./init/lean/compiler/default.cpp ./init/lean/compiler/exportattr.cpp ./init/lean/compiler/initattr.cpp ./init/lean/compiler/inline.cpp ./init/lean/compiler/ir/basic.cpp ./init/lean/compiler/ir/borrow.cpp ./init/lean/compiler/ir/boxing.cpp ./init/lean/compiler/ir/checker.cpp ./init/lean/compiler/ir/compilerm.cpp ./init/lean/compiler/ir/default.cpp ./init/lean/compiler/ir/elimdead.cpp ./init/lean/compiler/ir/emitcpp.cpp ./init/lean/compiler/ir/emitutil.cpp ./init/lean/compiler/ir/expandresetreuse.cpp ./init/lean/compiler/ir/format.cpp ./init/lean/compiler/ir/freevars.cpp ./init/lean/compiler/ir/livevars.cpp ./init/lean/compiler/ir/normids.cpp ./init/lean/compiler/ir/pushproj.cpp ./init/lean/compiler/ir/rc.cpp ./init/lean/compiler/ir/resetreuse.cpp ./init/lean/compiler/ir/simpcase.cpp ./init/lean/compiler/util.cpp ./init/lean/declaration.cpp ./init/lean/default.cpp ./init/lean/disjoint_set.cpp ./init/lean/environment.cpp ./init/lean/evalconst.cpp ./init/lean/expr.cpp ./init/lean/extern.cpp ./init/lean/format.cpp ./init/lean/kvmap.cpp ./init/lean/level.cpp ./init/lean/message.cpp ./init/lean/modifiers.cpp ./init/lean/name.cpp ./init/lean/name_mangling.cpp ./init/lean/options.cpp ./init/lean/parser/default.cpp ./init/lean/parser/identifier.cpp ./init/lean/parser/level.cpp ./init/lean/parser/parser.cpp ./init/lean/parser/trie.cpp ./init/lean/position.cpp ./init/lean/runtime.cpp ./init/lean/smap.cpp ./init/lean/syntax.cpp ./init/lean/toexpr.cpp ./init/lean/trace.cpp ./init/lean/util.cpp ./init/platform.cpp ./init/util.cpp ./init/wf.cpp)

View file

@ -67,7 +67,6 @@ obj* l_Fun_Inhabited___rarg(obj*, obj*);
obj* l_Quotient_mk___boxed(obj*, obj*);
obj* l_Sum_sizeof(obj*, obj*);
obj* l_Thunk_pure(obj*, obj*);
obj* l___private_init_core_22__extfunApp___rarg(obj*, obj*);
obj* l_decidableOfDecidableOfIff(obj*, obj*);
obj* l_defaultHasSizeof(obj*);
obj* l_arbitrary___rarg___boxed(obj*);
@ -94,7 +93,6 @@ obj* l_decidableOfDecidableOfIff___rarg___boxed(obj*, obj*);
uint8 l_and(uint8, uint8);
obj* l_ite___rarg___boxed(obj*, obj*, obj*, obj*);
obj* l_or___main___boxed(obj*, obj*);
obj* l___private_init_core_22__extfunApp(obj*, obj*);
obj* l_Option_HasSizeof___rarg(obj*);
obj* l_Subtype_sizeof___main___rarg(obj*, obj*, obj*);
obj* l_bne(obj*);
@ -124,9 +122,9 @@ obj* l_Sigma_sizeof___at_Sigma_HasSizeof___spec__1(obj*, obj*);
obj* l_Quotient_recOnSubsingleton_u2082___at_Quotient_DecidableEq___spec__1___boxed(obj*, obj*);
obj* l_default_sizeof___main(obj*, obj*);
obj* l_Sigma_HasSizeof___boxed(obj*, obj*);
obj* l___private_init_core_22__extfunApp___boxed(obj*, obj*);
obj* l_std_priority_default;
obj* l_Quotient_DecidableEq___rarg(obj*, obj*, obj*, obj*);
obj* l___private_init_core_20__funSetoid(obj*, obj*);
obj* l_arbitrary___rarg(obj*);
obj* l_Prod_HasSizeof(obj*, obj*);
obj* l_Subtype_sizeof___main(obj*);
@ -146,6 +144,7 @@ obj* l_dite(obj*);
obj* l_Thunk_mk(obj*, obj*);
obj* l_Eq_ndrecOn___rarg___boxed(obj*);
obj* l_Task_bind(obj*, obj*, obj*, obj*);
obj* l___private_init_core_21__extfunApp___rarg(obj*, obj*);
obj* l_Thunk_map(obj*, obj*, obj*, obj*);
obj* l_dite___rarg___boxed(obj*, obj*, obj*, obj*);
obj* l_Quotient_lift_u2082___boxed(obj*, obj*, obj*, obj*, obj*);
@ -186,6 +185,7 @@ obj* l_Nat_sizeof(obj*);
obj* l_Quot_indep___boxed(obj*, obj*, obj*);
obj* l_List_HasSizeof(obj*);
obj* l_Prod_sizeof___main___rarg(obj*, obj*, obj*);
obj* l___private_init_core_20__funSetoid___boxed(obj*, obj*);
obj* l_Quotient_hrecOn(obj*, obj*, obj*);
obj* l_Option_sizeof___main___rarg(obj*, obj*);
obj* l_Quotient_liftOn_u2082(obj*, obj*, obj*, obj*, obj*);
@ -238,7 +238,6 @@ obj* l_std_prec_maxPlus;
obj* l_Or_Decidable(obj*, obj*);
obj* l_Prod_map___main___rarg(obj*, obj*, obj*);
uint8 l_ite_Decidable___rarg(uint8, uint8, uint8);
obj* l___private_init_core_21__funSetoid(obj*, obj*);
obj* l_Quot_hrecOn___boxed(obj*, obj*, obj*);
uint8 l_Decidable_decide___rarg(uint8);
obj* l_Xor_Decidable(obj*, obj*);
@ -340,6 +339,7 @@ obj* l_idRhs(obj*);
obj* l_Quot_hrecOn(obj*, obj*, obj*);
obj* l_and___main___boxed(obj*, obj*);
obj* l_List_sizeof___main___rarg(obj*, obj*);
obj* l___private_init_core_21__extfunApp___boxed(obj*, obj*);
obj* l_Quotient_mk___rarg___boxed(obj*);
obj* l_Quot_rec___rarg(obj*, obj*, obj*);
obj* l_PointedType_Inhabited;
@ -353,6 +353,7 @@ obj* l_Function_combine(obj*, obj*, obj*, obj*, obj*);
obj* l_Nat_sizeof___boxed(obj*);
obj* l_Quotient_recOnSubsingleton_u2082___boxed(obj*, obj*, obj*, obj*, obj*, obj*);
obj* l_Decidable_recOnTrue(obj*);
obj* l___private_init_core_21__extfunApp(obj*, obj*);
obj* l_PSigma_sizeof___main___at_PSigma_HasSizeof___spec__2___rarg(obj*, obj*, obj*);
obj* l_Nat_HasAdd;
obj* l_Subtype_Inhabited___rarg(obj*, obj*);
@ -402,7 +403,6 @@ obj* l_implies_Decidable(obj*, obj*);
obj* l_setoidHasEquiv___boxed(obj*, obj*);
obj* l_Sigma_sizeof___at_Sigma_HasSizeof___spec__1___boxed(obj*, obj*);
uint8 l_or___main(uint8, uint8);
obj* l___private_init_core_21__funSetoid___boxed(obj*, obj*);
uint8 l_strictAnd(uint8, uint8);
obj* l_Eq_mp___rarg(obj*);
obj* l_Quotient_hrecOn___boxed(obj*, obj*, obj*);
@ -4212,7 +4212,7 @@ lean::dec(x_1);
return x_5;
}
}
obj* l___private_init_core_21__funSetoid(obj* x_1, obj* x_2) {
obj* l___private_init_core_20__funSetoid(obj* x_1, obj* x_2) {
_start:
{
obj* x_3;
@ -4220,16 +4220,16 @@ x_3 = lean::box(0);
return x_3;
}
}
obj* l___private_init_core_21__funSetoid___boxed(obj* x_1, obj* x_2) {
obj* l___private_init_core_20__funSetoid___boxed(obj* x_1, obj* x_2) {
_start:
{
obj* x_3;
x_3 = l___private_init_core_21__funSetoid(x_1, x_2);
x_3 = l___private_init_core_20__funSetoid(x_1, x_2);
lean::dec(x_2);
return x_3;
}
}
obj* l___private_init_core_22__extfunApp___rarg(obj* x_1, obj* x_2) {
obj* l___private_init_core_21__extfunApp___rarg(obj* x_1, obj* x_2) {
_start:
{
obj* x_3;
@ -4237,19 +4237,19 @@ x_3 = lean::apply_1(x_1, x_2);
return x_3;
}
}
obj* l___private_init_core_22__extfunApp(obj* x_1, obj* x_2) {
obj* l___private_init_core_21__extfunApp(obj* x_1, obj* x_2) {
_start:
{
obj* x_3;
x_3 = lean::alloc_closure(reinterpret_cast<void*>(l___private_init_core_22__extfunApp___rarg), 2, 0);
x_3 = lean::alloc_closure(reinterpret_cast<void*>(l___private_init_core_21__extfunApp___rarg), 2, 0);
return x_3;
}
}
obj* l___private_init_core_22__extfunApp___boxed(obj* x_1, obj* x_2) {
obj* l___private_init_core_21__extfunApp___boxed(obj* x_1, obj* x_2) {
_start:
{
obj* x_3;
x_3 = l___private_init_core_22__extfunApp(x_1, x_2);
x_3 = l___private_init_core_21__extfunApp(x_1, x_2);
lean::dec(x_2);
return x_3;
}

View file

@ -1,71 +0,0 @@
// Lean compiler output
// Module: init.lean.compiler.export
// Imports: init.lean.environment
#include "runtime/object.h"
#include "runtime/apply.h"
typedef lean::object obj; typedef lean::usize usize;
typedef lean::uint8 uint8; typedef lean::uint16 uint16;
typedef lean::uint32 uint32; typedef lean::uint64 uint64;
#if defined(__clang__)
#pragma clang diagnostic ignored "-Wunused-parameter"
#pragma clang diagnostic ignored "-Wunused-label"
#elif defined(__GNUC__) && !defined(__CLANG__)
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wunused-label"
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#endif
obj* l_Lean_getExportNameFor___boxed(obj*, obj*);
extern "C" obj* lean_get_export_name_for(obj*, obj*);
uint8 l_Lean_isExport(obj*, obj*);
obj* l_Lean_isExport___boxed(obj*, obj*);
obj* l_Lean_getExportNameFor___boxed(obj* x_1, obj* x_2) {
_start:
{
obj* x_3;
x_3 = lean_get_export_name_for(x_1, x_2);
return x_3;
}
}
uint8 l_Lean_isExport(obj* x_1, obj* x_2) {
_start:
{
obj* x_3;
x_3 = lean_get_export_name_for(x_1, x_2);
if (lean::obj_tag(x_3) == 0)
{
uint8 x_4;
x_4 = 0;
return x_4;
}
else
{
uint8 x_5;
lean::dec(x_3);
x_5 = 1;
return x_5;
}
}
}
obj* l_Lean_isExport___boxed(obj* x_1, obj* x_2) {
_start:
{
uint8 x_3; obj* x_4;
x_3 = l_Lean_isExport(x_1, x_2);
lean::dec(x_2);
lean::dec(x_1);
x_4 = lean::box(x_3);
return x_4;
}
}
obj* initialize_init_lean_environment(obj*);
static bool _G_initialized = false;
obj* initialize_init_lean_compiler_export(obj* w) {
if (_G_initialized) return w;
_G_initialized = true;
if (io_result_is_error(w)) return w;
w = initialize_init_lean_environment(w);
if (io_result_is_error(w)) return w;
REGISTER_LEAN_FUNCTION(lean::mk_const_name(lean::mk_const_name("Lean"), "getExportNameFor"), 2, l_Lean_getExportNameFor___boxed);
REGISTER_LEAN_FUNCTION(lean::mk_const_name(lean::mk_const_name("Lean"), "isExport"), 2, l_Lean_isExport___boxed);
return w;
}

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
// Lean compiler output
// Module: init.lean.compiler.ir.borrow
// Imports: init.lean.compiler.export init.lean.compiler.ir.compilerm init.lean.compiler.ir.normids
// Imports: init.lean.compiler.exportattr init.lean.compiler.ir.compilerm init.lean.compiler.ir.normids
#include "runtime/object.h"
#include "runtime/apply.h"
typedef lean::object obj; typedef lean::usize usize;
@ -24,6 +24,7 @@ obj* nat_sub(obj*, obj*);
}
obj* l_HashMapImp_find___at_Lean_IR_Borrow_ApplyParamMap_visitFnBody___main___spec__1(obj*, obj*);
obj* l_Lean_Format_pretty(obj*, obj*);
extern obj* l_Lean_Syntax_formatStx___main___closed__5;
extern obj* l_Lean_IR_JoinPointId_HasToString___closed__1;
obj* l_Array_mkArray(obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_ownArgs(obj*, obj*, obj*);
@ -45,7 +46,6 @@ obj* l_Lean_IR_Borrow_preserveTailCall(obj*, obj*, obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_InitParamMap_visitDecls(obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_Lean_HasFormat;
obj* l_Array_miterateAux___main___at_Lean_IR_Borrow_updateParamSet___spec__1___boxed(obj*, obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_ParamMap_fmt___closed__1;
obj* l_Lean_IR_Borrow_updateParamMap___boxed(obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_whileModifingOwnedAux___main___at_Lean_IR_Borrow_collectDecl___main___spec__1(obj*, obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_ApplyParamMap_visitFnBody___main___boxed(obj*, obj*, obj*);
@ -54,7 +54,6 @@ obj* l_Nat_mforAux___main___at_Lean_IR_Borrow_ownArgsUsingParams___spec__1___box
obj* l_Lean_Name_toStringWithSep___main(obj*, obj*);
obj* l_Lean_IR_Borrow_infer___boxed(obj*, obj*);
obj* l_Nat_mforAux___main___at_Lean_IR_Borrow_ownParamsUsingArgs___spec__1___boxed(obj*, obj*, obj*, obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_ParamMap_fmt___closed__2;
obj* l_RBNode_findCore___main___at_Lean_IR_UniqueIds_checkId___spec__1(obj*, obj*);
obj* l_Array_uset(obj*, obj*, usize, obj*, obj*);
obj* l_Lean_IR_Borrow_ownArg(obj*, obj*, obj*);
@ -69,6 +68,7 @@ uint8 l_Lean_IR_IRType_isObj___main(uint8);
obj* l_Lean_IR_Borrow_ownArgsIfParam___boxed(obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_preserveTailCall___boxed(obj*, obj*, obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_whileModifingOwnedAux___main(obj*, obj*, obj*, obj*);
extern obj* l_Lean_Syntax_formatStx___main___closed__4;
obj* l_Lean_IR_Borrow_collectDecl___main(obj*, obj*, obj*);
obj* l_Lean_IR_Borrow_getParamInfo(obj*, obj*, obj*);
obj* l_Array_mforAux___main___at_Lean_IR_Borrow_InitParamMap_visitDecls___spec__1(obj*, obj*, obj*, obj*);
@ -494,26 +494,6 @@ goto _start;
}
}
}
obj* _init_l_Lean_IR_Borrow_ParamMap_fmt___closed__1() {
_start:
{
obj* x_1; obj* x_2;
x_1 = lean::mk_string("{");
x_2 = lean::alloc_cnstr(2, 1, 0);
lean::cnstr_set(x_2, 0, x_1);
return x_2;
}
}
obj* _init_l_Lean_IR_Borrow_ParamMap_fmt___closed__2() {
_start:
{
obj* x_1; obj* x_2;
x_1 = lean::mk_string("}");
x_2 = lean::alloc_cnstr(2, 1, 0);
lean::cnstr_set(x_2, 0, x_1);
return x_2;
}
}
obj* l_Lean_IR_Borrow_ParamMap_fmt(obj* x_1) {
_start:
{
@ -527,12 +507,12 @@ x_7 = lean::alloc_cnstr(3, 2, 0);
lean::cnstr_set(x_7, 0, x_6);
lean::cnstr_set(x_7, 1, x_5);
x_8 = 0;
x_9 = l_Lean_IR_Borrow_ParamMap_fmt___closed__1;
x_9 = l_Lean_Syntax_formatStx___main___closed__4;
x_10 = lean::alloc_cnstr(4, 2, 1);
lean::cnstr_set(x_10, 0, x_9);
lean::cnstr_set(x_10, 1, x_7);
lean::cnstr_set_scalar(x_10, sizeof(void*)*2, x_8);
x_11 = l_Lean_IR_Borrow_ParamMap_fmt___closed__2;
x_11 = l_Lean_Syntax_formatStx___main___closed__5;
x_12 = lean::alloc_cnstr(4, 2, 1);
lean::cnstr_set(x_12, 0, x_10);
lean::cnstr_set(x_12, 1, x_11);
@ -1112,6 +1092,7 @@ lean::inc(x_13);
x_14 = lean::cnstr_get(x_9, 2);
lean::inc(x_14);
lean::dec(x_9);
lean::inc(x_12);
x_15 = l_Lean_isExport(x_1, x_12);
lean::inc(x_12);
x_16 = lean::alloc_cnstr(0, 1, 0);
@ -3902,7 +3883,7 @@ lean::dec(x_2);
return x_4;
}
}
obj* initialize_init_lean_compiler_export(obj*);
obj* initialize_init_lean_compiler_exportattr(obj*);
obj* initialize_init_lean_compiler_ir_compilerm(obj*);
obj* initialize_init_lean_compiler_ir_normids(obj*);
static bool _G_initialized = false;
@ -3910,7 +3891,7 @@ obj* initialize_init_lean_compiler_ir_borrow(obj* w) {
if (_G_initialized) return w;
_G_initialized = true;
if (io_result_is_error(w)) return w;
w = initialize_init_lean_compiler_export(w);
w = initialize_init_lean_compiler_exportattr(w);
if (io_result_is_error(w)) return w;
w = initialize_init_lean_compiler_ir_compilerm(w);
if (io_result_is_error(w)) return w;
@ -3928,10 +3909,6 @@ l_AssocList_mfoldl___main___at_Lean_IR_Borrow_ParamMap_fmt___spec__1___closed__1
lean::mark_persistent(l_AssocList_mfoldl___main___at_Lean_IR_Borrow_ParamMap_fmt___spec__1___closed__1);
l_AssocList_mfoldl___main___at_Lean_IR_Borrow_ParamMap_fmt___spec__1___closed__2 = _init_l_AssocList_mfoldl___main___at_Lean_IR_Borrow_ParamMap_fmt___spec__1___closed__2();
lean::mark_persistent(l_AssocList_mfoldl___main___at_Lean_IR_Borrow_ParamMap_fmt___spec__1___closed__2);
l_Lean_IR_Borrow_ParamMap_fmt___closed__1 = _init_l_Lean_IR_Borrow_ParamMap_fmt___closed__1();
lean::mark_persistent(l_Lean_IR_Borrow_ParamMap_fmt___closed__1);
l_Lean_IR_Borrow_ParamMap_fmt___closed__2 = _init_l_Lean_IR_Borrow_ParamMap_fmt___closed__2();
lean::mark_persistent(l_Lean_IR_Borrow_ParamMap_fmt___closed__2);
REGISTER_LEAN_FUNCTION(lean::mk_const_name(lean::mk_const_name(lean::mk_const_name(lean::mk_const_name(lean::mk_const_name("Lean"), "IR"), "Borrow"), "ParamMap"), "fmt"), 1, l_Lean_IR_Borrow_ParamMap_fmt___boxed);
l_Lean_IR_Borrow_Lean_HasFormat = _init_l_Lean_IR_Borrow_Lean_HasFormat();
lean::mark_persistent(l_Lean_IR_Borrow_Lean_HasFormat);

File diff suppressed because it is too large Load diff