feat(library/init/lean/compiler): [export] attribute in Lean
This commit is contained in:
parent
bc0c0ee9bc
commit
45dc2cd49a
13 changed files with 1838 additions and 650 deletions
|
|
@ -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
|
||||
38
library/init/lean/compiler/exportattr.lean
Normal file
38
library/init/lean/compiler/exportattr.lean
Normal 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
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
26
src/stage0/init/core.cpp
generated
26
src/stage0/init/core.cpp
generated
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
71
src/stage0/init/lean/compiler/export.cpp
generated
71
src/stage0/init/lean/compiler/export.cpp
generated
|
|
@ -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;
|
||||
}
|
||||
1303
src/stage0/init/lean/compiler/exportattr.cpp
generated
Normal file
1303
src/stage0/init/lean/compiler/exportattr.cpp
generated
Normal file
File diff suppressed because it is too large
Load diff
39
src/stage0/init/lean/compiler/ir/borrow.cpp
generated
39
src/stage0/init/lean/compiler/ir/borrow.cpp
generated
|
|
@ -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);
|
||||
|
|
|
|||
930
src/stage0/init/lean/compiler/ir/emitcpp.cpp
generated
930
src/stage0/init/lean/compiler/ir/emitcpp.cpp
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue