dbc100cc2e
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
71 lines
2.3 KiB
Text
71 lines
2.3 KiB
Text
(*
|
|
-- Auxiliary script for generating .h file that declare mk_* and is_* functions for
|
|
-- constants defined in Lean
|
|
local env = get_environment()
|
|
local num_imports = 0
|
|
print('/*')
|
|
print('Copyright (c) 2013 Microsoft Corporation. All rights reserved.')
|
|
print('Released under Apache 2.0 license as described in the file LICENSE.')
|
|
print('*/')
|
|
print("// Automatically generated file, DO NOT EDIT")
|
|
print('#include "kernel/expr.h"')
|
|
print('namespace lean {')
|
|
for obj in env:objects() do
|
|
if obj:is_begin_import() or obj:is_begin_builtin_import() then
|
|
num_imports = num_imports + 1
|
|
elseif obj:is_end_import() then
|
|
num_imports = num_imports - 1
|
|
elseif num_imports == 0 and obj:has_name() and obj:has_type() and not is_explicit(env, obj:get_name()) and not obj:is_builtin() then
|
|
local ty = env:normalize(obj:get_type())
|
|
local is_fn = ty:is_pi()
|
|
local arity = 0
|
|
while ty:is_pi() do
|
|
n, d, ty = ty:fields()
|
|
arity = arity + 1
|
|
end
|
|
local is_th = obj:is_theorem() or obj:is_axiom()
|
|
io.write("expr mk_")
|
|
name_to_cpp_decl(obj:get_name())
|
|
if is_fn then
|
|
io.write("_fn");
|
|
end
|
|
print("();")
|
|
io.write("bool is_")
|
|
name_to_cpp_decl(obj:get_name())
|
|
if is_fn then
|
|
io.write("_fn");
|
|
end
|
|
print("(expr const & e);")
|
|
if is_fn and not is_th then
|
|
io.write("inline bool is_")
|
|
name_to_cpp_decl(obj:get_name())
|
|
io.write("(expr const & e) { return is_app(e) && is_");
|
|
name_to_cpp_decl(obj:get_name())
|
|
print("_fn(arg(e, 0)) && num_args(e) == " .. (arity+1) .. "; }")
|
|
end
|
|
if is_fn then
|
|
io.write("inline expr mk_")
|
|
name_to_cpp_decl(obj:get_name())
|
|
if is_th then
|
|
io.write("_th");
|
|
end
|
|
io.write("(");
|
|
for i = 1, arity do
|
|
if i > 1 then
|
|
io.write(", ")
|
|
end
|
|
io.write("expr const & e" .. tostring(i))
|
|
end
|
|
io.write(") { return mk_app({mk_");
|
|
name_to_cpp_decl(obj:get_name())
|
|
io.write("_fn()")
|
|
for i = 1, arity do
|
|
io.write(", e" .. tostring(i))
|
|
end
|
|
print ("}); }")
|
|
end
|
|
end
|
|
end
|
|
print('}')
|
|
|
|
*)
|