diff --git a/.ic3_history b/.ic3_history
index 7e61012..b61ddd4 100644
--- a/.ic3_history
+++ b/.ic3_history
@@ -1,9 +1,3 @@
-def fib = fn (x) { if x < 0 0 else fib(x - 2) + fib(x - 1) end }
-def fib = fn (x) { if x < 0 then 0 else fib(x - 2) + fib(x - 1) end }
-def fib = fn { (0) { 1 } (1) { 1 } (x) { if x < 0 then 0 else fib(x - 2) + fib(x - 1) end }}
-do end
-end
-do end
end
do end
defmodule Plop do end
@@ -97,3 +91,9 @@ if true then true end
if 42 then true end
if 0 then true end
if 0 then true else false end
+List.map
+List.map([1, 2, 3], fn (x) { x * 2 })
+List.reverse
+List.reverse([1, 2, 3])
+List.reverse
+List.reverse([1, 2])
diff --git a/README.md b/README.md
index 19eb97c..b28ab1f 100644
--- a/README.md
+++ b/README.md
@@ -435,21 +435,22 @@ Script interpreter. Works the same as ic3 but is not interactive.
## TODO
- libc3
+ - macro cast `(Macro) fn (x) { x }`
- pretty printer
- indent
- 80 columns (`\n`)
- tags
- - height function `(TAG_VOID: 0, TAG_TUPLE: (1+ (max (height tuple->tags))))`
+ - walker
+ - height function `(TAG_VOID: 1, TAG_TUPLE: (1+ (max (height tuple->tags))))`
- has_ident
- collect_idents
- modules
- - DONE defmodule
- - def
- - def double = 4
- - def double = fn (x) do x * 2 end
- - def double = macro (x) do {x, x} end
- - defmacro
- - defoperator
+ - defmodule
+ - DONE def
+ - DONE def double = 4
+ - DONE def double = fn (x) do x * 2 end
+ - DONE def double = macro (x) do {x, x} end
+ - DONE defoperator
- defspecial_operator
- defstruct
- facts
diff --git a/lib/c3/0.1/c3.facts b/lib/c3/0.1/c3.facts
index e242898..d48c0a9 100644
--- a/lib/c3/0.1/c3.facts
+++ b/lib/c3/0.1/c3.facts
@@ -196,14 +196,14 @@ replace {C3.getenv, :symbol_value, cfn Str "c3_getenv" (Str, Result)}
add {C3, :symbol, C3.dlopen}
replace {C3.dlopen, :symbol_value, cfn Ptr "c3_dlopen" (Str, Result)}
add {C3, :symbol, C3.first}
-replace {C3.first, :symbol_value, fn {
+replace {C3.first, :symbol_value, C3.fn {
([a | _b]) { a }
({a, _b}) { a }
({a, _b, _c}) { a }
({a, _b, _c, _d}) { a }
}}
add {C3, :symbol, C3.fib}
-replace {C3.fib, :symbol_value, fn {
+replace {C3.fib, :symbol_value, C3.fn {
(0) { 1 }
(1) { 1 }
(x) { if x < 0 then 0 else fib(x - 1) + fib(x - 2) end }
@@ -232,3 +232,5 @@ add {C3, :symbol, C3.defoperator}
replace {C3.defoperator, :arity, 5}
replace {C3.defoperator, :is_a, :special_operator}
replace {C3.defoperator, :symbol_value, cfn Tag "c3_defoperator" (Sym, Sym, Tag, U8, Sym, Result)}
+add {C3, :symbol, C3.module}
+replace {C3.module, :symbol_value, cfn Sym "c3_module" (Result)}
diff --git a/lib/c3/0.1/list.c3 b/lib/c3/0.1/list.c3
index 71bcb0c..6d992c8 100644
--- a/lib/c3/0.1/list.c3
+++ b/lib/c3/0.1/list.c3
@@ -4,7 +4,7 @@ defmodule List do
def map = fn {
([], _) do
- [] }
+ []
end
([a | b], f) do
[f(a) | map(b, f)]
diff --git a/libc3/buf_getc.c b/libc3/buf_getc.c
new file mode 100644
index 0000000..8e0b883
--- /dev/null
+++ b/libc3/buf_getc.c
@@ -0,0 +1,68 @@
+/* c3
+ * Copyright 2022-2024 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "../libc3/c3.h"
+
+static sw buf_getc_refill (s_buf *buf);
+
+void buf_getc_close (s_buf *buf)
+{
+ FILE *fp;
+ assert(buf);
+ assert(buf->refill == buf_getc_refill);
+ assert(buf->user_ptr);
+ buf->refill = NULL;
+ fp = buf->user_ptr;
+ fclose(fp);
+}
+
+s_buf * buf_getc_open_r (s_buf *buf, const char *path)
+{
+ FILE *fp;
+ assert(buf);
+ assert(! buf->refill);
+ assert(! buf->user_ptr);
+ fp = file_open(path, "rb");
+ if (! fp)
+ return NULL;
+ buf->refill = buf_getc_refill;
+ buf->user_ptr = fp;
+ return buf;
+}
+
+sw buf_getc_refill (s_buf *buf)
+{
+ sw c = 0;
+ FILE *fp;
+ uw result = 0;
+ assert(buf);
+ assert(buf->user_ptr);
+ if (buf->rpos > buf->wpos ||
+ buf->wpos > buf->size)
+ return -1;
+ fp = buf->user_ptr;
+ if (feof(fp))
+ return -1;
+ while (buf->wpos < buf->size &&
+ c != '\n' &&
+ (c = getc(fp)) != EOF &&
+ c <= 255) {
+ buf_write_u8(buf, c);
+ result++;
+ }
+ return result;
+}
diff --git a/libc3/buf_getc.h b/libc3/buf_getc.h
new file mode 100644
index 0000000..28caf4f
--- /dev/null
+++ b/libc3/buf_getc.h
@@ -0,0 +1,24 @@
+/* c3
+ * Copyright 2022-2024 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/**
+ * @file buf_getc.h
+ * @brief getc backend for s_buf.
+ */
+#ifndef BUF_GETC_H
+#define BUF_GETC_H
+
+/* Operators. */
+void buf_getc_close (s_buf *buf);
+s_buf * buf_getc_open_r (s_buf *buf, const char *path);
+
+#endif /* BUF_GETC_H */
diff --git a/libc3/buf_getchar.c b/libc3/buf_getchar.c
new file mode 100644
index 0000000..d7fafc3
--- /dev/null
+++ b/libc3/buf_getchar.c
@@ -0,0 +1,56 @@
+/* c3
+ * Copyright 2022-2024 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "../libc3/c3.h"
+
+static sw buf_getchar_refill (s_buf *buf);
+
+void buf_getchar_close (s_buf *buf)
+{
+ assert(buf);
+ assert(buf->refill == buf_getchar_refill);
+ buf->refill = NULL;
+}
+
+s_buf * buf_getchar_open_r (s_buf *buf)
+{
+ assert(buf);
+ assert(! buf->refill);
+ buf->refill = buf_getchar_refill;
+ return buf;
+}
+
+sw buf_getchar_refill (s_buf *buf)
+{
+ sw c = 0;
+ FILE *fp;
+ uw result = 0;
+ assert(buf);
+ assert(buf->user_ptr);
+ if (buf->rpos > buf->wpos ||
+ buf->wpos > buf->size)
+ return -1;
+ fp = buf->user_ptr;
+ if (feof(fp))
+ return -1;
+ while (buf->wpos < buf->size &&
+ c != '\n' &&
+ (c = getc(fp)) != EOF &&
+ c <= 255) {
+ buf_write_u8(buf, c);
+ result++;
+ }
+ return result;
+}
diff --git a/libc3/buf_getchar.h b/libc3/buf_getchar.h
new file mode 100644
index 0000000..170e180
--- /dev/null
+++ b/libc3/buf_getchar.h
@@ -0,0 +1,24 @@
+/* c3
+ * Copyright 2022-2024 kmx.io <contact@kmx.io>
+ *
+ * Permission is hereby granted to use this software granted the above
+ * copyright notice and this permission paragraph are included in all
+ * copies and substantial portions of this software.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
+ * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
+ * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+/**
+ * @file buf_getchar.h
+ * @brief getchar backend for s_buf.
+ */
+#ifndef BUF_GETCHAR_H
+#define BUF_GETCHAR_H
+
+/* Operators. */
+void buf_getchar_close (s_buf *buf);
+s_buf * buf_getchar_open_r (s_buf *buf);
+
+#endif /* BUF_GETCHAR_H */
diff --git a/libc3/buf_inspect.c b/libc3/buf_inspect.c
index f5ad38a..7f7b568 100644
--- a/libc3/buf_inspect.c
+++ b/libc3/buf_inspect.c
@@ -1225,18 +1225,21 @@ sw buf_inspect_facts_spec (s_buf *buf, p_facts_spec spec)
sw buf_inspect_fn (s_buf *buf, const s_fn *fn)
{
const s_fn_clause *clause;
+ s_ident ident;
sw r;
sw result = 0;
assert(buf);
assert(fn);
- if (fn->macro) {
- if ((r = buf_write_1(buf, "macro ")) < 0)
- return r;
- }
- else {
- if ((r = buf_write_1(buf, "fn ")) < 0)
- return r;
- }
+ if (fn->macro)
+ ident.sym = &g_sym_macro;
+ else
+ ident.sym = &g_sym_fn;
+ ident.module = fn->module;
+ if ((r = buf_inspect_ident(buf, &ident)) < 0)
+ return r;
+ result += r;
+ if ((r = buf_write_1(buf, " ")) < 0)
+ return r;
result += r;
clause = fn->clauses;
assert(clause);
@@ -1387,7 +1390,8 @@ sw buf_inspect_ident (s_buf *buf, const s_ident *ident)
assert(buf);
assert(ident);
result = 0;
- if (ident->module && ident->module != g_c3_env.current_module) {
+ // FIXME
+ if (ident->module && ident->module != g_c3_env.current_defmodule) {
if ((r = buf_inspect_sym(buf, &ident->module)) < 0)
return r;
result += r;
diff --git a/libc3/buf_parse.c b/libc3/buf_parse.c
index 47cbb5d..7071ae7 100644
--- a/libc3/buf_parse.c
+++ b/libc3/buf_parse.c
@@ -1458,24 +1458,24 @@ sw buf_parse_fact (s_buf *buf, s_fact_w *dest)
sw buf_parse_fn (s_buf *buf, s_fn *dest)
{
- bool macro = false;
+ s_ident ident;
sw r;
sw result = 0;
s_buf_save save;
- s_fn tmp;
+ s_fn tmp = {0};
s_fn_clause **tail;
assert(buf);
assert(dest);
buf_save_init(buf, &save);
- if ((r = buf_read_1(buf, "fn")) < 0)
+ if ((r = buf_parse_ident(buf, &ident)) <= 0)
goto clean;
- if (! r) {
- macro = true;
- if ((r = buf_read_1(buf, "macro")) <= 0)
- goto clean;
- }
result += r;
- fn_init(&tmp);
+ if (ident.sym != &g_sym_fn &&
+ ident.sym != &g_sym_macro) {
+ r = 0;
+ goto restore;
+ }
+ fn_init(&tmp, ident.module);
tail = &tmp.clauses;
if ((r = buf_ignore_spaces(buf)) <= 0)
goto restore;
@@ -1511,7 +1511,7 @@ sw buf_parse_fn (s_buf *buf, s_fn *dest)
result += r;
}
ok:
- tmp.macro = macro;
+ tmp.macro = ident.sym == &g_sym_macro;
*dest = tmp;
r = result;
goto clean;
diff --git a/libc3/c3.c b/libc3/c3.c
index b37b71e..890bff6 100644
--- a/libc3/c3.c
+++ b/libc3/c3.c
@@ -140,6 +140,11 @@ void c3_license (void)
buf_flush(&g_c3_env.out);
}
+const s_sym ** c3_module (const s_sym **dest)
+{
+ return env_module(&g_c3_env, dest);
+}
+
s_tag * c3_pin (const s_tag *a, s_tag *dest)
{
if (! env_eval_tag(&g_c3_env, a, dest))
diff --git a/libc3/c3_main.h b/libc3/c3_main.h
index ba5a638..45a5a0e 100644
--- a/libc3/c3_main.h
+++ b/libc3/c3_main.h
@@ -30,9 +30,10 @@ s_env * c3_init (s_env *env, int argc, char **argv);
void c3_clean (s_env *env);
/* Observers. */
-uw * c3_facts_next_id (uw *dest);
-s_str * c3_getenv (const s_str *name, s_str *dest);
-void c3_license (void);
+uw * c3_facts_next_id (uw *dest);
+s_str * c3_getenv (const s_str *name, s_str *dest);
+void c3_license (void);
+const s_sym ** c3_module (const s_sym **dest);
/* Operators. */
s_tag * c3_def (const s_call *call, s_tag *dest);
diff --git a/libc3/env.c b/libc3/env.c
index be7d5a4..ea75661 100644
--- a/libc3/env.c
+++ b/libc3/env.c
@@ -18,8 +18,11 @@
#include "block.h"
#include "buf.h"
#include "buf_file.h"
+#include "buf_getc.h"
#include "buf_inspect.h"
+#include "buf_parse.h"
#include "buf_save.h"
+#include "c3_main.h"
#include "call.h"
#include "cfn.h"
#include "compare.h"
@@ -69,6 +72,7 @@ void env_clean (s_env *env)
str_clean(&env->argv0_dir);
str_clean(&env->module_path);
list_delete_all(env->path);
+ list_delete_all(env->search_modules_default);
}
s_tag * env_def (s_env *env, const s_call *call, s_tag *dest)
@@ -146,20 +150,22 @@ s_tag * env_defmodule (s_env *env, const s_sym **name,
assert(*name);
assert(block);
assert(dest);
- module = env->current_module;
+ module = env->current_defmodule;
env_module_is_loading_set(env, *name, true);
- env->current_module = *name;
+ env->current_defmodule = *name;
tag_init_sym(&tag_is_a, &g_sym_is_a);
tag_init_sym(&tag_module, &g_sym_module);
tag_init_sym(&tag_module_name, *name);
+ // FIXME: transaction ?
if (facts_add_tags(&env->facts, &tag_module_name, &tag_is_a,
- &tag_module) &&
- env_eval_block(env, block, &tmp)) {
- tag_clean(&tmp);
- tag_init_sym(dest, *name);
- result = dest;
+ &tag_module)) {
+ if (env_eval_block(env, block, &tmp)) {
+ tag_clean(&tmp);
+ tag_init_sym(dest, *name);
+ result = dest;
+ }
}
- env->current_module = module;
+ env->current_defmodule = module;
env_module_is_loading_set(env, *name, false);
return result;
}
@@ -184,10 +190,10 @@ s_tag * env_defoperator (s_env *env, const s_sym **name,
s_tag tag_operator_precedence_u8;
s_tag tag_operator_associativity_rel;
s_tag tag_operator_associativity_value;
- tag_init_sym(&tag_module_name, env->current_module);
+ tag_init_sym(&tag_module_name, env->current_defmodule);
tag_init_sym(&tag_operator, &g_sym_operator);
tag_ident.type = TAG_IDENT;
- tag_ident.data.ident.module = env->current_module;
+ tag_ident.data.ident.module = env->current_defmodule;
tag_ident.data.ident.sym = *name;
tag_init_sym(&tag_is_a, &g_sym_is_a);
tag_init_sym(&tag_symbol, &g_sym_symbol);
@@ -431,6 +437,7 @@ bool env_eval_call_fn_args (s_env *env, const s_fn *fn,
const s_list *args_final = NULL;
s_fn_clause *clause;
s_frame frame;
+ s_list *search_modules;
s_tag tag;
s_list *tmp = NULL;
assert(env);
@@ -442,7 +449,6 @@ bool env_eval_call_fn_args (s_env *env, const s_fn *fn,
args_final = arguments;
else {
if (! env_eval_call_arguments(env, arguments, &args)) {
- env->frame = frame_clean(&frame);
return false;
}
args_final = args;
@@ -457,7 +463,7 @@ bool env_eval_call_fn_args (s_env *env, const s_fn *fn,
clause = clause->next_clause;
}
if (! clause) {
- err_puts("env_eval_fn_call: no clause matching.\nTried clauses :\n");
+ err_puts("env_eval_call_fn_args: no clause matching.\nTried clauses :\n");
clause = fn->clauses;
while (clause) {
err_inspect_fn_pattern(clause->pattern);
@@ -475,14 +481,20 @@ bool env_eval_call_fn_args (s_env *env, const s_fn *fn,
frame_init(&frame, env->frame);
env->frame = &frame;
}
+ search_modules = env->search_modules;
+ env->search_modules = env_module_search_modules(env, fn->module);
if (! env_eval_block(env, &clause->algo, &tag)) {
list_delete_all(args);
list_delete_all(tmp);
+ list_delete_all(env->search_modules);
+ env->search_modules = search_modules;
env->frame = frame_clean(&frame);
return false;
}
list_delete_all(args);
list_delete_all(tmp);
+ list_delete_all(env->search_modules);
+ env->search_modules = search_modules;
env->frame = frame_clean(&frame);
if (fn->macro) {
if (! env_eval_tag(env, &tag, dest)) {
@@ -516,13 +528,13 @@ bool env_eval_call_resolve (s_env *env, s_call *call)
ident_init_copy(&tmp_ident, &call->ident);
if (! env_ident_resolve_module(env, &tmp_ident, &call->ident) ||
! module_ensure_loaded(call->ident.module, &env->facts) ||
- ! module_has_symbol(call->ident.module, &call->ident,
- &env->facts) ||
+ ! module_has_ident(call->ident.module, &call->ident,
+ &env->facts) ||
! call_get(call, &env->facts)) {
ident_init_copy(&call->ident, &tmp_ident);
call->ident.module = &g_sym_C3;
if (! module_ensure_loaded(call->ident.module, &env->facts) ||
- ! module_has_symbol(call->ident.module, &call->ident,
+ ! module_has_ident(call->ident.module, &call->ident,
&env->facts) ||
! call_get(call, &env->facts)) {
ident_init_copy(&call->ident, &tmp_ident);
@@ -840,15 +852,26 @@ bool env_eval_equal_tuple (s_env *env, bool macro, const s_tuple *a,
bool env_eval_fn (s_env *env, const s_fn *fn, s_tag *dest)
{
+ /*
uw i;
s_fn_clause *src_clause;
s_list *src_pattern;
s_fn tmp = {0};
s_fn_clause **tmp_clause;
s_list **tmp_pattern;
+ */
+ s_tag tmp = {0};
assert(env);
assert(fn);
assert(dest);
+ tmp.type = TAG_FN;
+ if (! fn_init_copy(&tmp.data.fn, fn))
+ return false;
+ if (! tmp.data.fn.module)
+ tmp.data.fn.module = env->current_defmodule;
+ *dest = tmp;
+ return true;
+ /*
tmp_clause = &tmp.clauses;
src_clause = fn->clauses;
while (src_clause) {
@@ -889,6 +912,7 @@ bool env_eval_fn (s_env *env, const s_fn *fn, s_tag *dest)
ko:
fn_clean(&tmp);
return false;
+ */
}
// Like tag_init_copy excepted that the idents get resolved.
@@ -1850,7 +1874,7 @@ bool env_ident_is_special_operator (s_env *env,
return false;
}
-s_ident * env_ident_resolve_module (const s_env *env,
+s_ident * env_ident_resolve_module (s_env *env,
const s_ident *ident,
s_ident *dest)
{
@@ -1859,13 +1883,17 @@ s_ident * env_ident_resolve_module (const s_env *env,
assert(ident);
ident_init_copy(&tmp, ident);
if (! tmp.module) {
- if (! env->current_module) {
- err_puts("env_ident_resolve_module: env current module is NULL");
- assert(! "env_ident_resolve_module: env current module is NULL");
- return NULL;
+ if (! env_sym_search_modules(env, tmp.sym, &tmp.module) ||
+ ! tmp.module) {
+ if (! env->current_defmodule) {
+ err_puts("env_ident_resolve_module: env current defmodule is NULL");
+ assert(! "env_ident_resolve_module: env current defmodule is NULL");
+ return NULL;
+ }
+ tmp.module = env->current_defmodule;
}
- tmp.module = env->current_module;
}
+ assert(tmp.module);
*dest = tmp;
return dest;
}
@@ -1878,7 +1906,7 @@ s_env * env_init (s_env *env, int argc, char **argv)
return NULL;
sym_init_g_sym();
env->error_handler = NULL;
- env->frame = frame_new(NULL); // toplevel
+ env->frame = frame_new(NULL); // toplevel
frame_init(&env->global_frame, NULL); // globals
buf_init_alloc(&env->in, BUF_SIZE);
buf_file_open_r(&env->in, stdin);
@@ -1902,7 +1930,9 @@ s_env * env_init (s_env *env, int argc, char **argv)
assert(! "env_init: module path not found");
return NULL;
}
- env->current_module = &g_sym_C3;
+ env->current_defmodule = &g_sym_C3;
+ env->search_modules_default = list_new_sym(&g_sym_C3, NULL);
+ env->search_modules = env->search_modules_default;
env->quote_level = 0;
env->unquote_level = 0;
if (! module_load(&g_sym_C3, &env->facts)) {
@@ -1942,6 +1972,42 @@ s_env * env_init_args (s_env *env, int argc, char **argv)
return env;
}
+bool env_load (s_env *env, const s_str *path)
+{
+ s_buf buf;
+ sw r;
+ s_tag tag = {0};
+ s_tag tmp;
+ assert(env);
+ assert(path);
+ if (! buf_init_alloc(&buf, BUF_SIZE))
+ return false;
+ if (! buf_getc_open_r(&buf, path->ptr.pchar)) {
+ buf_clean(&buf);
+ return false;
+ }
+ while (1) {
+ if ((r = buf_parse_tag(&buf, &tag)) < 0) {
+ buf_getc_close(&buf);
+ buf_clean(&buf);
+ return false;
+ }
+ if (! r)
+ break;
+ if (! env_eval_tag(env, &tag, &tmp)) {
+ tag_clean(&tag);
+ buf_getc_close(&buf);
+ buf_clean(&buf);
+ return false;
+ }
+ tag_clean(&tmp);
+ tag_clean(&tag);
+ }
+ buf_getc_close(&buf);
+ buf_clean(&buf);
+ return true;
+}
+
void env_longjmp (s_env *env, jmp_buf *jmp_buf)
{
if (env->unwind_protect && *jmp_buf > env->unwind_protect->buf) {
@@ -2011,21 +2077,34 @@ bool env_module_load (s_env *env, const s_sym *module, s_facts *facts)
return true;
if (! env_module_is_loading_set(env, module, true))
return false;
- if (! module_path(module, &env->module_path, &path)) {
- err_write_1("env_module_load: ");
- err_write_1(module->str.ptr.pchar);
- err_puts(": module_path");
- goto ko;
+ if (module_path(module, &env->module_path, C3_EXT, &path) &&
+ file_access(&path, &g_sym_r)) {
+ tag_init_time(&tag_time);
+ if (! env_load(env, &path)) {
+ err_write_1("env_module_load: ");
+ err_write_1(module->str.ptr.pchar);
+ err_puts(": env_load");
+ str_clean(&path);
+ goto ko;
+ }
}
- if (! file_access(&path, &g_sym_r))
- goto ko;
- tag_init_time(&tag_time);
- if (facts_load_file(facts, &path) < 0) {
- err_write_1("env_module_load: ");
- err_write_1(module->str.ptr.pchar);
- err_puts(": facts_load_file");
- str_clean(&path);
- goto ko;
+ else {
+ if (! module_path(module, &env->module_path, FACTS_EXT, &path)) {
+ err_write_1("env_module_load: ");
+ err_write_1(module->str.ptr.pchar);
+ err_puts(": module_path");
+ goto ko;
+ }
+ if (! file_access(&path, &g_sym_r))
+ goto ko;
+ tag_init_time(&tag_time);
+ if (facts_load_file(facts, &path) < 0) {
+ err_write_1("env_module_load: ");
+ err_write_1(module->str.ptr.pchar);
+ err_puts(": facts_load_file");
+ str_clean(&path);
+ goto ko;
+ }
}
str_clean(&path);
tag_init_sym(&tag_module_name, module);
@@ -2058,7 +2137,8 @@ bool env_module_maybe_reload (s_env *env, const s_sym *module,
s_tag tag_load_time = {0};
s_tag tag_mtime;
module_load_time(module, facts, &tag_load_time);
- if (! module_path(module, &env->module_path, &path)) {
+ if (! module_path(module, &env->module_path, C3_EXT, &path) &&
+ ! module_path(module, &env->module_path, FACTS_EXT, &path)) {
return false;
}
//io_inspect_str(&path);
@@ -2074,6 +2154,24 @@ bool env_module_maybe_reload (s_env *env, const s_sym *module,
return r;
}
+const s_sym ** env_module (s_env *env, const s_sym **dest)
+{
+ assert(env);
+ assert(dest);
+ assert(env->search_modules);
+ assert(env->search_modules->tag.type == TAG_SYM);
+ *dest = env->search_modules->tag.data.sym;
+ return dest;
+}
+
+s_list * env_module_search_modules (s_env *env, const s_sym *module)
+{
+ assert(env);
+ assert(module);
+ (void) env;
+ return list_new_sym(module, NULL);
+}
+
s8 env_operator_arity (s_env *env, const s_ident *op)
{
s_facts_cursor cursor;
@@ -2122,7 +2220,7 @@ s_ident * env_operator_ident (s_env *env, const s_ident *op,
assert(env);
assert(op);
assert(dest);
- if (env->current_module == op->module)
+ if (env->current_defmodule == op->module)
dest->module = NULL;
else
dest->module = op->module;
@@ -2268,6 +2366,31 @@ void env_push_unwind_protect (s_env *env,
env->unwind_protect = unwind_protect;
}
+bool env_sym_search_modules (s_env *env, const s_sym *sym,
+ const s_sym **dest)
+{
+ const s_sym *module;
+ s_list *search_module;
+ assert(env);
+ assert(sym);
+ assert(dest);
+ search_module = env->search_modules;
+ while (search_module) {
+ if (search_module->tag.type != TAG_SYM ||
+ ! (module = search_module->tag.data.sym)) {
+ err_puts("env_sym_search_modules: invalid env->search_modules");
+ assert(! "env_sym_search_modules: invalid env->search_modules");
+ return false;
+ }
+ if (module_has_symbol(module, sym, &env->facts)) {
+ *dest = module;
+ return true;
+ }
+ search_module = list_next(search_module);
+ }
+ return false;
+}
+
u8 env_special_operator_arity (s_env *env, const s_ident *ident)
{
u8 arity;
diff --git a/libc3/env.h b/libc3/env.h
index 27786ea..0818e6c 100644
--- a/libc3/env.h
+++ b/libc3/env.h
@@ -22,10 +22,16 @@ void env_clean (s_env *env);
s_env * env_init (s_env *env, int argc, char **argv);
/* Observers. */
-const s_tag * env_frames_get (const s_env *env, const s_sym *name);
-s_ident * env_ident_resolve_module (const s_env *env,
- const s_ident *ident,
- s_ident *dest);
+const s_tag * env_frames_get (const s_env *env, const s_sym *name);
+s_ident * env_ident_resolve_module (s_env *env,
+ const s_ident *ident,
+ s_ident *dest);
+const s_sym ** env_module (s_env *env, const s_sym **dest);
+s_list * env_module_search_modules (s_env *env,
+ const s_sym *module);
+bool env_sym_search_modules (s_env *env,
+ const s_sym *sym,
+ const s_sym **dest);
/* Operators. */
s_tag * env_def (s_env *env, const s_call *call, s_tag *dest);
@@ -107,6 +113,8 @@ bool env_eval_ident (s_env *env, const s_ident *ident,
s_tag *dest);
bool env_eval_ident_is_bound (s_env *env,
const s_ident *ident);
+bool env_eval_integer (s_env *env, const s_integer *integer,
+ s_integer *dest);
bool env_eval_list (s_env *env, const s_list *list,
s_tag *dest);
bool env_eval_map (s_env *env, const s_map *map,
@@ -147,6 +155,7 @@ bool env_eval_tuple (s_env *env, const s_tuple *tuple,
bool env_eval_void (s_env *env, const void *_, s_tag *dest);
bool env_ident_is_special_operator (s_env *env,
const s_ident *ident);
+bool env_load (s_env *env, const s_str *path);
bool env_module_is_loading (s_env *env, const s_sym *module);
bool env_module_is_loading_set (s_env *env,
const s_sym *module,
@@ -160,8 +169,6 @@ s8 env_operator_arity (s_env *env, const s_ident *op);
bool env_operator_find (s_env *env, const s_ident *op);
s_ident * env_operator_ident (s_env *env, const s_ident *op,
s_ident *dest);
-bool env_eval_integer (s_env *env, const s_integer *integer,
- s_integer *dest);
bool env_operator_is_right_associative (s_env *env,
const s_ident *op);
s8 env_operator_precedence (s_env *env, const s_ident *op);
diff --git a/libc3/fact.c b/libc3/fact.c
index 2c61e69..caf09aa 100644
--- a/libc3/fact.c
+++ b/libc3/fact.c
@@ -18,13 +18,15 @@
#include "sym.h"
#include "tag.h"
-uw fact_hash_uw (const s_fact *fact)
+uw * fact_hash_uw (const s_fact *fact, uw *dest)
{
t_hash hash;
assert(fact);
hash_init(&hash);
- hash_update_fact(&hash, fact);
- return hash_to_uw(&hash);
+ if (! hash_update_fact(&hash, fact))
+ return NULL;
+ *dest = hash_to_uw(&hash);
+ return dest;
}
s_fact * fact_init (s_fact *fact, const s_tag *subject,
diff --git a/libc3/fact.h b/libc3/fact.h
index d92af14..9123387 100644
--- a/libc3/fact.h
+++ b/libc3/fact.h
@@ -24,7 +24,7 @@ s_fact * fact_init_cast (s_fact *fact, const s_sym *type,
s_fact * fact_init_copy (s_fact *fact, const s_fact *src);
/* Observers */
-uw fact_hash_uw (const s_fact *x);
+uw * fact_hash_uw (const s_fact *fact, uw *dest);
s_str * fact_inspect (const s_fact *fact, s_str *dest);
s_fact * fact_r (const s_fact_w *fact);
diff --git a/libc3/facts.c b/libc3/facts.c
index eb28400..3b5e766 100644
--- a/libc3/facts.c
+++ b/libc3/facts.c
@@ -303,7 +303,7 @@ sw facts_load (s_facts *facts, s_buf *buf, const s_str *path)
err_write_1(" fact line ");
err_inspect_u64(&line);
err_write_1(": ");
- err_write_1(path->ptr.pchar);
+ err_puts(path->ptr.pchar);
return -1;
}
@@ -573,7 +573,8 @@ s_tag * facts_ref_tag (s_facts *facts, const s_tag *tag)
assert(facts);
assert(tag);
item = set_add__tag(&facts->tags, tag);
- assert(item);
+ if (! item)
+ return NULL;
item->usage++;
return &item->data;
}
diff --git a/libc3/fn.c b/libc3/fn.c
index e2efcf7..d4f51b9 100644
--- a/libc3/fn.c
+++ b/libc3/fn.c
@@ -49,10 +49,12 @@ void fn_delete (s_fn *fn)
free(fn);
}
-s_fn * fn_init (s_fn *fn)
+s_fn * fn_init (s_fn *fn, const s_sym *module)
{
+ s_fn tmp = {0};
assert(fn);
- *fn = (s_fn) {0};
+ tmp.module = module;
+ *fn = tmp;
return fn;
}
@@ -107,6 +109,7 @@ s_fn * fn_init_cast (s_fn *fn, const s_sym *type, const s_tag *tag)
s_fn * fn_init_copy (s_fn *fn, const s_fn *src)
{
s_fn tmp = {0};
+ tmp.module = src->module;
fn_clause_copy(src->clauses, &tmp.clauses);
tmp.macro = src->macro;
tmp.special_operator = src->special_operator;
@@ -114,13 +117,13 @@ s_fn * fn_init_copy (s_fn *fn, const s_fn *src)
return fn;
}
-s_fn * fn_new (void)
+s_fn * fn_new (const s_sym *module)
{
s_fn *fn;
fn = alloc(sizeof(s_fn));
if (! fn)
return NULL;
- fn_init(fn);
+ fn_init(fn, module);
return fn;
}
diff --git a/libc3/fn.h b/libc3/fn.h
index b76e111..deda5e5 100644
--- a/libc3/fn.h
+++ b/libc3/fn.h
@@ -23,14 +23,14 @@
/* Stack-allocation compatible functions, call fn_clean after use. */
void fn_clean (s_fn *fn);
-s_fn * fn_init (s_fn *fn);
+s_fn * fn_init (s_fn *fn, const s_sym *module);
s_fn * fn_init_1 (s_fn *fn, char *p);
s_fn * fn_init_cast (s_fn *fn, const s_sym *type, const s_tag *tag);
s_fn * fn_init_copy (s_fn *fn, const s_fn *src);
/* Heap-allocation functions, call fn_delete after use. */
void fn_delete (s_fn *fn);
-s_fn * fn_new (void);
+s_fn * fn_new (const s_sym *module);
s_fn * fn_new_copy (const s_fn *fn);
/* Observers. */
diff --git a/libc3/hash.c b/libc3/hash.c
index c6531c8..32f0788 100644
--- a/libc3/hash.c
+++ b/libc3/hash.c
@@ -201,6 +201,7 @@ bool hash_update_fn (t_hash *hash, const s_fn *fn)
return hash_update(hash, type, sizeof(type)) &&
hash_update_bool(hash, &fn->macro) &&
hash_update_bool(hash, &fn->special_operator) &&
+ (! fn->module || hash_update_sym(hash, &fn->module)) &&
hash_update_fn_clauses(hash, fn->clauses);
}
@@ -528,28 +529,31 @@ HASH_UPDATE_DEF(u16)
HASH_UPDATE_DEF(u32)
HASH_UPDATE_DEF(u64)
-bool hash_update_unquote (t_hash *hash, const s_unquote *x)
+bool hash_update_unquote (t_hash *hash, const s_unquote *unquote)
{
const char type[] = "unquote";
if (! hash_update(hash, type, strlen(type)))
return false;
- return hash_update_tag(hash, x->tag);
+ return hash_update_tag(hash, unquote->tag);
}
HASH_UPDATE_DEF(uw)
-bool hash_update_var (t_hash *hash, const void *x)
+bool hash_update_var (t_hash *hash, const s_tag *tag)
{
char type[] = "var";
- (void) x;
assert(hash);
- return hash_update(hash, type, strlen(type));
+ assert(tag);
+ assert(tag->type == TAG_VAR);
+ return hash_update(hash, type, strlen(type)) &&
+ hash_update_sym(hash, &tag->data.var.type);
}
-bool hash_update_void (t_hash *hash, const void *x)
+bool hash_update_void (t_hash *hash, const s_tag *tag)
{
char type[] = "void";
- (void) x;
assert(hash);
+ assert(tag);
+ (void) tag;
return hash_update(hash, type, strlen(type));
}
diff --git a/libc3/hash.h b/libc3/hash.h
index 86b8232..1e189ef 100644
--- a/libc3/hash.h
+++ b/libc3/hash.h
@@ -61,9 +61,9 @@ HASH_UPDATE_PROTOTYPE(u8);
HASH_UPDATE_PROTOTYPE(u16);
HASH_UPDATE_PROTOTYPE(u32);
HASH_UPDATE_PROTOTYPE(u64);
-bool hash_update_unquote (t_hash *hash, const s_unquote *x);
+bool hash_update_unquote (t_hash *hash, const s_unquote *unquote);
HASH_UPDATE_PROTOTYPE(uw);
-bool hash_update_var (t_hash *hash, const void *x);
-bool hash_update_void (t_hash *hash, const void *x);
+bool hash_update_var (t_hash *hash, const s_tag *tag);
+bool hash_update_void (t_hash *hash, const s_tag *tag);
#endif /* LIBC3_HASH_H */
diff --git a/libc3/ident.c b/libc3/ident.c
index 1ed03cd..7bec178 100644
--- a/libc3/ident.c
+++ b/libc3/ident.c
@@ -68,8 +68,16 @@ s_tag * ident_get (const s_ident *ident, s_facts *facts, s_tag *dest)
s_tag tag_symbol_value;
s_tag tag_var;
module = ident->module;
- if (! module)
- module = g_c3_env.current_module;
+ if (! module) {
+ if (! sym_search_modules(ident->sym, &module) ||
+ ! module) {
+ err_write_1("ident_get: symbol not found: ");
+ err_inspect_sym(&ident->sym);
+ err_write_1("\n");
+ assert(! "ident_get: symbol not found");
+ return NULL;
+ }
+ }
if (! module_ensure_loaded(module, facts))
return NULL;
tag_init_ident(&tag_ident, ident);
diff --git a/libc3/module.c b/libc3/module.c
index 065edc3..a1b978b 100644
--- a/libc3/module.c
+++ b/libc3/module.c
@@ -48,8 +48,8 @@ bool module_ensure_loaded (const s_sym *module, s_facts *facts)
return true;
}
-bool module_has_symbol (const s_sym *module, const s_ident *ident,
- s_facts *facts)
+bool module_has_ident (const s_sym *module, const s_ident *ident,
+ s_facts *facts)
{
s_tag tag_ident;
s_tag tag_module_name;
@@ -65,6 +65,15 @@ bool module_has_symbol (const s_sym *module, const s_ident *ident,
&tag_operator, &tag_ident);
}
+bool module_has_symbol (const s_sym *module, const s_sym *sym,
+ s_facts *facts)
+{
+ s_ident ident;
+ ident.module = module;
+ ident.sym = sym;
+ return module_has_ident(module, &ident, facts);
+}
+
bool module_is_loading (const s_sym *module)
{
return env_module_is_loading(&g_c3_env, module);
@@ -102,7 +111,7 @@ bool module_maybe_reload (const s_sym *module, s_facts *facts)
}
s_str * module_path (const s_sym *module, const s_str *prefix,
- s_str *dest)
+ const char *ext, s_str *dest)
{
character b = 0;
character c;
@@ -113,7 +122,7 @@ s_str * module_path (const s_sym *module, const s_str *prefix,
assert(dest);
assert(module);
buf_init_str(&in, false, (s_str *) &module->str);
- out_size = module_path_size(module, prefix);
+ out_size = module_path_size(module, prefix, ext);
buf_init_alloc(&out, out_size);
if ((r = buf_write_str(&out, prefix)) < 0)
goto error;
@@ -133,7 +142,7 @@ s_str * module_path (const s_sym *module, const s_str *prefix,
if ((r = buf_write_character_utf8(&out, c)) < 0)
goto error;
}
- if ((r = buf_write_1(&out, FACTS_EXT)) < 0)
+ if ((r = buf_write_1(&out, ext)) < 0)
goto error;
return buf_to_str(&out, dest);
error:
@@ -143,7 +152,7 @@ s_str * module_path (const s_sym *module, const s_str *prefix,
return NULL;
}
-sw module_path_size (const s_sym *module, const s_str *prefix)
+sw module_path_size (const s_sym *module, const s_str *prefix, const char *ext)
{
character b = 0;
character c;
@@ -167,6 +176,6 @@ sw module_path_size (const s_sym *module, const s_str *prefix)
b = c;
result += character_utf8_size(c);
}
- result += strlen(FACTS_EXT);
+ result += strlen(ext);
return result;
}
diff --git a/libc3/module.h b/libc3/module.h
index 070ca70..c06c7b1 100644
--- a/libc3/module.h
+++ b/libc3/module.h
@@ -23,25 +23,25 @@
#include "types.h"
/* Modifiers */
-bool module_ensure_loaded (const s_sym *module, s_facts *facts);
-bool module_load (const s_sym *module, s_facts *facts);
-bool module_maybe_reload (const s_sym *module, s_facts *facts);
+bool module_ensure_loaded (const s_sym *module, s_facts *facts);
+bool module_load (const s_sym *module, s_facts *facts);
+bool module_maybe_reload (const s_sym *module, s_facts *facts);
/* Observers */
+bool module_has_ident (const s_sym *module,
+ const s_ident *ident,
+ s_facts *facts);
bool module_has_symbol (const s_sym *module,
- const s_ident *ident,
+ const s_sym *sym,
s_facts *facts);
bool module_is_loading (const s_sym *module);
s_tag * module_load_time (const s_sym *module, s_facts *facts,
s_tag *dest);
s_str * module_path (const s_sym *module, const s_str *prefix,
- s_str *dest);
-sw module_path_size (const s_sym *module, const s_str *prefix);
+ const char *ext, s_str *dest);
+sw module_path_size (const s_sym *module,
+ const s_str *prefix,
+ const char *ext);
const s_sym * module_to_sym (const s_sym *module);
-/* Operations */
-bool module_defmodule (const s_sym *name, const s_quote *block);
-bool module_def (const s_sym *module, const s_sym *name,
- const s_quote *block);
-
#endif /* LIBC3_MODULE_H */
diff --git a/libc3/set.c.in b/libc3/set.c.in
index e7fd51b..119409f 100644
--- a/libc3/set.c.in
+++ b/libc3/set.c.in
@@ -24,7 +24,8 @@ set_add___NAME$ (s_set___NAME$ *set, const _TYPE$ *data)
uw hash;
assert(set);
assert(data);
- hash = _NAME$_hash_uw(data);
+ if (! _NAME$_hash_uw(data, &hash))
+ return NULL;
return set_add_h___NAME$(set, data, hash);
}
@@ -74,7 +75,8 @@ set_get___NAME$ (const s_set___NAME$ *set, const _TYPE$ *data)
uw hash;
assert(set);
assert(data);
- hash = _NAME$_hash_uw(data);
+ if (! _NAME$_hash_uw(data, &hash))
+ return NULL;
return set_get_h___NAME$(set, data, hash);
}
diff --git a/libc3/set__fact.c b/libc3/set__fact.c
index b0654cb..e0d681a 100644
--- a/libc3/set__fact.c
+++ b/libc3/set__fact.c
@@ -24,7 +24,8 @@ set_add__fact (s_set__fact *set, const s_fact *data)
uw hash;
assert(set);
assert(data);
- hash = fact_hash_uw(data);
+ if (! fact_hash_uw(data, &hash))
+ return NULL;
return set_add_h__fact(set, data, hash);
}
@@ -74,7 +75,8 @@ set_get__fact (const s_set__fact *set, const s_fact *data)
uw hash;
assert(set);
assert(data);
- hash = fact_hash_uw(data);
+ if (! fact_hash_uw(data, &hash))
+ return NULL;
return set_get_h__fact(set, data, hash);
}
diff --git a/libc3/set__tag.c b/libc3/set__tag.c
index adc2b97..6159c95 100644
--- a/libc3/set__tag.c
+++ b/libc3/set__tag.c
@@ -24,7 +24,8 @@ set_add__tag (s_set__tag *set, const s_tag *data)
uw hash;
assert(set);
assert(data);
- hash = tag_hash_uw(data);
+ if (! tag_hash_uw(data, &hash))
+ return NULL;
return set_add_h__tag(set, data, hash);
}
@@ -74,7 +75,8 @@ set_get__tag (const s_set__tag *set, const s_tag *data)
uw hash;
assert(set);
assert(data);
- hash = tag_hash_uw(data);
+ if (! tag_hash_uw(data, &hash))
+ return NULL;
return set_get_h__tag(set, data, hash);
}
diff --git a/libc3/sources.mk b/libc3/sources.mk
index 6f92c8f..5acbc25 100644
--- a/libc3/sources.mk
+++ b/libc3/sources.mk
@@ -10,6 +10,8 @@ HEADERS = \
"bool.h" \
"buf.h" \
"buf_file.h" \
+ "buf_getc.h" \
+ "buf_getchar.h" \
"buf_inspect.h" \
"buf_inspect_s16.h" \
"buf_inspect_s16_binary.h" \
@@ -167,6 +169,8 @@ SOURCES = \
"bool.c" \
"buf.c" \
"buf_file.c" \
+ "buf_getc.c" \
+ "buf_getchar.c" \
"buf_inspect.c" \
"buf_inspect_s16.c" \
"buf_inspect_s16_binary.c" \
@@ -431,6 +435,8 @@ LO_SOURCES = \
"bool.c" \
"buf.c" \
"buf_file.c" \
+ "buf_getc.c" \
+ "buf_getchar.c" \
"buf_inspect.c" \
"buf_inspect_s16.c" \
"buf_inspect_s16_binary.c" \
diff --git a/libc3/sources.sh b/libc3/sources.sh
index 5fabecf..4c72635 100644
--- a/libc3/sources.sh
+++ b/libc3/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
-HEADERS='abs.h alloc.h arg.h array.h assert.h binding.h block.h bool.h buf.h buf_file.h buf_inspect.h buf_inspect_s16.h buf_inspect_s16_binary.h buf_inspect_s16_decimal.h buf_inspect_s16_hexadecimal.h buf_inspect_s16_octal.h buf_inspect_s32.h buf_inspect_s32_binary.h buf_inspect_s32_decimal.h buf_inspect_s32_hexadecimal.h buf_inspect_s32_octal.h buf_inspect_s64.h buf_inspect_s64_binary.h buf_inspect_s64_decimal.h buf_inspect_s64_hexadecimal.h buf_inspect_s64_octal.h buf_inspect_s8.h buf_inspect_s8_binary.h buf_inspect_s8_decimal.h buf_inspect_s8_hexadecimal.h buf_inspect_s8_octal.h buf_inspect_sw.h buf_inspect_sw_binary.h buf_inspect_sw_decimal.h buf_inspect_sw_hexadecimal.h buf_inspect_sw_octal.h buf_inspect_u16.h buf_inspect_u16_binary.h buf_inspect_u16_decimal.h buf_inspect_u16_hexadecimal.h buf_inspect_u16_octal.h buf_inspect_u32.h buf_inspect_u32_binary.h buf_inspect_u32_decimal.h buf_inspect_u32_hexadecimal.h buf_inspect_u32_octal.h buf_inspect_u64.h buf_inspect_u64_binary.h buf_inspect_u64_decimal.h buf_inspect_u64_hexadecimal.h buf_inspect_u64_octal.h buf_inspect_u8.h buf_inspect_u8_binary.h buf_inspect_u8_decimal.h buf_inspect_u8_hexadecimal.h buf_inspect_u8_octal.h buf_inspect_uw.h buf_inspect_uw_binary.h buf_inspect_uw_decimal.h buf_inspect_uw_hexadecimal.h buf_inspect_uw_octal.h buf_parse.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c3_main.h call.h ceiling.h cfn.h character.h compare.h complex.h config.h data.h env.h error.h error_handler.h eval.h f128.h f32.h f64.h fact.h fact_list.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h integer.h io.h list.h list_init.h log.h map.h module.h operator.h pcomplex.h ptag.h ptr.h ptr_free.h queue.h quote.h ratio.h s16.h s32.h s64.h s8.h sequence.h set__fact.h set__tag.h set_cursor__fact.h set_cursor__tag.h set_item__fact.h set_item__tag.h sha1.h sign.h skiplist__fact.h skiplist_node__fact.h special_operator.h str.h struct.h struct_type.h sw.h sym.h tag.h tag_init.h tag_type.h time.h tuple.h types.h u16.h u32.h u64.h u8.h ucd.h unquote.h uw.h var.h void.h '
-SOURCES='abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c complex.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
-LO_SOURCES=' ../libtommath/bn_cutoffs.c ../libtommath/bn_mp_2expt.c ../libtommath/bn_mp_abs.c ../libtommath/bn_mp_add.c ../libtommath/bn_mp_add_d.c ../libtommath/bn_mp_and.c ../libtommath/bn_mp_clamp.c ../libtommath/bn_mp_clear.c ../libtommath/bn_mp_clear_multi.c ../libtommath/bn_mp_cmp.c ../libtommath/bn_mp_cmp_d.c ../libtommath/bn_mp_cmp_mag.c ../libtommath/bn_mp_cnt_lsb.c ../libtommath/bn_mp_complement.c ../libtommath/bn_mp_copy.c ../libtommath/bn_mp_count_bits.c ../libtommath/bn_mp_div.c ../libtommath/bn_mp_div_2.c ../libtommath/bn_mp_div_2d.c ../libtommath/bn_mp_div_3.c ../libtommath/bn_mp_div_d.c ../libtommath/bn_mp_dr_is_modulus.c ../libtommath/bn_mp_dr_reduce.c ../libtommath/bn_mp_dr_setup.c ../libtommath/bn_mp_error_to_string.c ../libtommath/bn_mp_exch.c ../libtommath/bn_mp_exptmod.c ../libtommath/bn_mp_gcd.c ../libtommath/bn_mp_get_double.c ../libtommath/bn_mp_get_i32.c ../libtommath/bn_mp_get_i64.c ../libtommath/bn_mp_get_mag_u32.c ../libtommath/bn_mp_get_mag_u64.c ../libtommath/bn_mp_grow.c ../libtommath/bn_mp_init.c ../libtommath/bn_mp_init_copy.c ../libtommath/bn_mp_init_multi.c ../libtommath/bn_mp_init_size.c ../libtommath/bn_mp_invmod.c ../libtommath/bn_mp_lcm.c ../libtommath/bn_mp_lshd.c ../libtommath/bn_mp_mod.c ../libtommath/bn_mp_mod_2d.c ../libtommath/bn_mp_montgomery_calc_normalization.c ../libtommath/bn_mp_montgomery_reduce.c ../libtommath/bn_mp_montgomery_setup.c ../libtommath/bn_mp_mul.c ../libtommath/bn_mp_mul_2.c ../libtommath/bn_mp_mul_2d.c ../libtommath/bn_mp_mul_d.c ../libtommath/bn_mp_mulmod.c ../libtommath/bn_mp_neg.c ../libtommath/bn_mp_or.c ../libtommath/bn_mp_radix_size.c ../libtommath/bn_mp_reduce.c ../libtommath/bn_mp_reduce_2k.c ../libtommath/bn_mp_reduce_2k_l.c ../libtommath/bn_mp_reduce_2k_setup.c ../libtommath/bn_mp_reduce_2k_setup_l.c ../libtommath/bn_mp_reduce_is_2k.c ../libtommath/bn_mp_reduce_is_2k_l.c ../libtommath/bn_mp_reduce_setup.c ../libtommath/bn_mp_rshd.c ../libtommath/bn_mp_set.c ../libtommath/bn_mp_set_double.c ../libtommath/bn_mp_set_i32.c ../libtommath/bn_mp_set_i64.c ../libtommath/bn_mp_set_l.c ../libtommath/bn_mp_set_u32.c ../libtommath/bn_mp_set_u64.c ../libtommath/bn_mp_set_ul.c ../libtommath/bn_mp_sqr.c ../libtommath/bn_mp_sqrt.c ../libtommath/bn_mp_sub.c ../libtommath/bn_mp_sub_d.c ../libtommath/bn_mp_xor.c ../libtommath/bn_mp_zero.c ../libtommath/bn_s_mp_add.c ../libtommath/bn_s_mp_balance_mul.c ../libtommath/bn_s_mp_exptmod.c ../libtommath/bn_s_mp_exptmod_fast.c ../libtommath/bn_s_mp_invmod_fast.c ../libtommath/bn_s_mp_invmod_slow.c ../libtommath/bn_s_mp_karatsuba_mul.c ../libtommath/bn_s_mp_karatsuba_sqr.c ../libtommath/bn_s_mp_montgomery_reduce_fast.c ../libtommath/bn_s_mp_mul_digs.c ../libtommath/bn_s_mp_mul_digs_fast.c ../libtommath/bn_s_mp_mul_high_digs.c ../libtommath/bn_s_mp_mul_high_digs_fast.c ../libtommath/bn_s_mp_rand_platform.c ../libtommath/bn_s_mp_sqr.c ../libtommath/bn_s_mp_sqr_fast.c ../libtommath/bn_s_mp_sub.c ../libtommath/bn_s_mp_toom_mul.c ../libtommath/bn_s_mp_toom_sqr.c abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c complex.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
+HEADERS='abs.h alloc.h arg.h array.h assert.h binding.h block.h bool.h buf.h buf_file.h buf_getc.h buf_getchar.h buf_inspect.h buf_inspect_s16.h buf_inspect_s16_binary.h buf_inspect_s16_decimal.h buf_inspect_s16_hexadecimal.h buf_inspect_s16_octal.h buf_inspect_s32.h buf_inspect_s32_binary.h buf_inspect_s32_decimal.h buf_inspect_s32_hexadecimal.h buf_inspect_s32_octal.h buf_inspect_s64.h buf_inspect_s64_binary.h buf_inspect_s64_decimal.h buf_inspect_s64_hexadecimal.h buf_inspect_s64_octal.h buf_inspect_s8.h buf_inspect_s8_binary.h buf_inspect_s8_decimal.h buf_inspect_s8_hexadecimal.h buf_inspect_s8_octal.h buf_inspect_sw.h buf_inspect_sw_binary.h buf_inspect_sw_decimal.h buf_inspect_sw_hexadecimal.h buf_inspect_sw_octal.h buf_inspect_u16.h buf_inspect_u16_binary.h buf_inspect_u16_decimal.h buf_inspect_u16_hexadecimal.h buf_inspect_u16_octal.h buf_inspect_u32.h buf_inspect_u32_binary.h buf_inspect_u32_decimal.h buf_inspect_u32_hexadecimal.h buf_inspect_u32_octal.h buf_inspect_u64.h buf_inspect_u64_binary.h buf_inspect_u64_decimal.h buf_inspect_u64_hexadecimal.h buf_inspect_u64_octal.h buf_inspect_u8.h buf_inspect_u8_binary.h buf_inspect_u8_decimal.h buf_inspect_u8_hexadecimal.h buf_inspect_u8_octal.h buf_inspect_uw.h buf_inspect_uw_binary.h buf_inspect_uw_decimal.h buf_inspect_uw_hexadecimal.h buf_inspect_uw_octal.h buf_parse.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c3_main.h call.h ceiling.h cfn.h character.h compare.h complex.h config.h data.h env.h error.h error_handler.h eval.h f128.h f32.h f64.h fact.h fact_list.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h integer.h io.h list.h list_init.h log.h map.h module.h operator.h pcomplex.h ptag.h ptr.h ptr_free.h queue.h quote.h ratio.h s16.h s32.h s64.h s8.h sequence.h set__fact.h set__tag.h set_cursor__fact.h set_cursor__tag.h set_item__fact.h set_item__tag.h sha1.h sign.h skiplist__fact.h skiplist_node__fact.h special_operator.h str.h struct.h struct_type.h sw.h sym.h tag.h tag_init.h tag_type.h time.h tuple.h types.h u16.h u32.h u64.h u8.h ucd.h unquote.h uw.h var.h void.h '
+SOURCES='abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_file.c buf_getc.c buf_getchar.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c complex.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
+LO_SOURCES=' ../libtommath/bn_cutoffs.c ../libtommath/bn_mp_2expt.c ../libtommath/bn_mp_abs.c ../libtommath/bn_mp_add.c ../libtommath/bn_mp_add_d.c ../libtommath/bn_mp_and.c ../libtommath/bn_mp_clamp.c ../libtommath/bn_mp_clear.c ../libtommath/bn_mp_clear_multi.c ../libtommath/bn_mp_cmp.c ../libtommath/bn_mp_cmp_d.c ../libtommath/bn_mp_cmp_mag.c ../libtommath/bn_mp_cnt_lsb.c ../libtommath/bn_mp_complement.c ../libtommath/bn_mp_copy.c ../libtommath/bn_mp_count_bits.c ../libtommath/bn_mp_div.c ../libtommath/bn_mp_div_2.c ../libtommath/bn_mp_div_2d.c ../libtommath/bn_mp_div_3.c ../libtommath/bn_mp_div_d.c ../libtommath/bn_mp_dr_is_modulus.c ../libtommath/bn_mp_dr_reduce.c ../libtommath/bn_mp_dr_setup.c ../libtommath/bn_mp_error_to_string.c ../libtommath/bn_mp_exch.c ../libtommath/bn_mp_exptmod.c ../libtommath/bn_mp_gcd.c ../libtommath/bn_mp_get_double.c ../libtommath/bn_mp_get_i32.c ../libtommath/bn_mp_get_i64.c ../libtommath/bn_mp_get_mag_u32.c ../libtommath/bn_mp_get_mag_u64.c ../libtommath/bn_mp_grow.c ../libtommath/bn_mp_init.c ../libtommath/bn_mp_init_copy.c ../libtommath/bn_mp_init_multi.c ../libtommath/bn_mp_init_size.c ../libtommath/bn_mp_invmod.c ../libtommath/bn_mp_lcm.c ../libtommath/bn_mp_lshd.c ../libtommath/bn_mp_mod.c ../libtommath/bn_mp_mod_2d.c ../libtommath/bn_mp_montgomery_calc_normalization.c ../libtommath/bn_mp_montgomery_reduce.c ../libtommath/bn_mp_montgomery_setup.c ../libtommath/bn_mp_mul.c ../libtommath/bn_mp_mul_2.c ../libtommath/bn_mp_mul_2d.c ../libtommath/bn_mp_mul_d.c ../libtommath/bn_mp_mulmod.c ../libtommath/bn_mp_neg.c ../libtommath/bn_mp_or.c ../libtommath/bn_mp_radix_size.c ../libtommath/bn_mp_reduce.c ../libtommath/bn_mp_reduce_2k.c ../libtommath/bn_mp_reduce_2k_l.c ../libtommath/bn_mp_reduce_2k_setup.c ../libtommath/bn_mp_reduce_2k_setup_l.c ../libtommath/bn_mp_reduce_is_2k.c ../libtommath/bn_mp_reduce_is_2k_l.c ../libtommath/bn_mp_reduce_setup.c ../libtommath/bn_mp_rshd.c ../libtommath/bn_mp_set.c ../libtommath/bn_mp_set_double.c ../libtommath/bn_mp_set_i32.c ../libtommath/bn_mp_set_i64.c ../libtommath/bn_mp_set_l.c ../libtommath/bn_mp_set_u32.c ../libtommath/bn_mp_set_u64.c ../libtommath/bn_mp_set_ul.c ../libtommath/bn_mp_sqr.c ../libtommath/bn_mp_sqrt.c ../libtommath/bn_mp_sub.c ../libtommath/bn_mp_sub_d.c ../libtommath/bn_mp_xor.c ../libtommath/bn_mp_zero.c ../libtommath/bn_s_mp_add.c ../libtommath/bn_s_mp_balance_mul.c ../libtommath/bn_s_mp_exptmod.c ../libtommath/bn_s_mp_exptmod_fast.c ../libtommath/bn_s_mp_invmod_fast.c ../libtommath/bn_s_mp_invmod_slow.c ../libtommath/bn_s_mp_karatsuba_mul.c ../libtommath/bn_s_mp_karatsuba_sqr.c ../libtommath/bn_s_mp_montgomery_reduce_fast.c ../libtommath/bn_s_mp_mul_digs.c ../libtommath/bn_s_mp_mul_digs_fast.c ../libtommath/bn_s_mp_mul_high_digs.c ../libtommath/bn_s_mp_mul_high_digs_fast.c ../libtommath/bn_s_mp_rand_platform.c ../libtommath/bn_s_mp_sqr.c ../libtommath/bn_s_mp_sqr_fast.c ../libtommath/bn_s_mp_sub.c ../libtommath/bn_s_mp_toom_mul.c ../libtommath/bn_s_mp_toom_sqr.c abs.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_file.c buf_getc.c buf_getchar.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c complex.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c ptag.c ptr.c ptr_free.c queue.c quote.c ratio.c s16.c s32.c s64.c s8.c sequence.c set__fact.c set__tag.c set_cursor__fact.c set_cursor__tag.c set_item__fact.c set_item__tag.c sign.c skiplist__fact.c skiplist_node__fact.c special_operator.c str.c struct.c struct_type.c sw.c sym.c tag.c tag_add.c tag_addi.c tag_band.c tag_bnot.c tag_bor.c tag_bxor.c tag_div.c tag_init.c tag_mod.c tag_mul.c tag_neg.c tag_shift_left.c tag_shift_right.c tag_sqrt.c tag_sub.c tag_type.c time.c tuple.c u16.c u32.c u64.c u8.c ucd.c unquote.c uw.c var.c void.c '
diff --git a/libc3/struct.c b/libc3/struct.c
index 2d6e522..702cf72 100644
--- a/libc3/struct.c
+++ b/libc3/struct.c
@@ -123,8 +123,12 @@ s_struct * struct_init (s_struct *s, const s_sym *module)
assert(s);
assert(module);
tmp.type = struct_type_find(module);
- if (! tmp.type)
+ if (! tmp.type) {
+ err_write_1("struct_init: struct_type not found: ");
+ err_inspect_sym(&module);
+ err_write_1("\n");
return NULL;
+ }
*s = tmp;
return s;
}
diff --git a/libc3/sym.c b/libc3/sym.c
index 5b42938..6ea4513 100644
--- a/libc3/sym.c
+++ b/libc3/sym.c
@@ -77,6 +77,7 @@ const s_sym g_sym_defstruct = {{{NULL}, 9, {"defstruct"}}};
const s_sym g_sym_do = {{{NULL}, 2, {"do"}}};
const s_sym g_sym_else = {{{NULL}, 4, {"else"}}};
const s_sym g_sym_end = {{{NULL}, 3, {"end"}}};
+const s_sym g_sym_fn = {{{NULL}, 2, {"fn"}}};
const s_sym g_sym_if_then_else = {{{NULL}, 12, {"if_then_else"}}};
const s_sym g_sym_is_a = {{{NULL}, 4, {"is_a"}}};
const s_sym g_sym_is_loading = {{{NULL}, 10, {"is_loading"}}};
@@ -347,6 +348,7 @@ void sym_init_g_sym (void)
sym_register(&g_sym_do, NULL);
sym_register(&g_sym_else, NULL);
sym_register(&g_sym_end, NULL);
+ sym_register(&g_sym_fn, NULL);
sym_register(&g_sym_if_then_else, NULL);
sym_register(&g_sym_is_a, NULL);
sym_register(&g_sym_is_loading, NULL);
@@ -646,6 +648,11 @@ const s_sym * sym_new (const s_str *src)
return sym;
}
+bool sym_search_modules (const s_sym *sym, const s_sym **dest)
+{
+ return env_sym_search_modules(&g_c3_env, sym, dest);
+}
+
bool sym_to_ffi_type (const s_sym *sym, ffi_type *result_type,
ffi_type **dest)
{
diff --git a/libc3/sym.h b/libc3/sym.h
index f5599e0..18918b1 100644
--- a/libc3/sym.h
+++ b/libc3/sym.h
@@ -82,6 +82,7 @@ extern const s_sym g_sym_defstruct;
extern const s_sym g_sym_do;
extern const s_sym g_sym_else;
extern const s_sym g_sym_end;
+extern const s_sym g_sym_fn;
extern const s_sym g_sym_if_then_else;
extern const s_sym g_sym_is_a;
extern const s_sym g_sym_is_loading;
@@ -131,6 +132,7 @@ s_str * sym_inspect (const s_sym *sym, s_str *dest);
bool sym_is_array_type (const s_sym *sym);
bool sym_is_module (const s_sym *sym);
bool sym_must_clean (const s_sym *sym, bool *must_clean);
+bool sym_search_modules (const s_sym *sym, const s_sym **dest);
bool sym_to_ffi_type (const s_sym *sym, ffi_type *result_type,
ffi_type **dest);
bool sym_to_tag_type (const s_sym *sym, e_tag_type *dest);
diff --git a/libc3/tag.c b/libc3/tag.c
index a0ffccf..f1233ac 100644
--- a/libc3/tag.c
+++ b/libc3/tag.c
@@ -261,22 +261,26 @@ bool * tag_gte (const s_tag *a, const s_tag *b, bool *dest)
return dest;
}
-u64 tag_hash_u64 (const s_tag *tag)
+u64 * tag_hash_u64 (const s_tag *tag, u64 *dest)
{
t_hash hash;
assert(tag);
hash_init(&hash);
- hash_update_tag(&hash, tag);
- return hash_to_u64(&hash);
+ if (! hash_update_tag(&hash, tag))
+ return NULL;
+ *dest = hash_to_u64(&hash);
+ return dest;
}
-uw tag_hash_uw (const s_tag *tag)
+uw * tag_hash_uw (const s_tag *tag, uw *dest)
{
t_hash hash;
assert(tag);
hash_init(&hash);
- hash_update_tag(&hash, tag);
- return hash_to_uw(&hash);
+ if (! hash_update_tag(&hash, tag))
+ return NULL;
+ *dest = hash_to_uw(&hash);
+ return dest;
}
bool tag_ident_is_bound (const s_tag *tag)
diff --git a/libc3/tag.h b/libc3/tag.h
index d059d50..cd0543f 100644
--- a/libc3/tag.h
+++ b/libc3/tag.h
@@ -42,8 +42,8 @@ s_tag * tag_new_1 (const char *p);
/* Observers */
s8 tag_arity (const s_tag *tag);
-u64 tag_hash_u64 (const s_tag *tag);
-uw tag_hash_uw (const s_tag *tag);
+u64 * tag_hash_u64 (const s_tag *tag, u64 *dest);
+uw * tag_hash_uw (const s_tag *tag, uw *dest);
s_str * tag_inspect (const s_tag *tag, s_str *dest);
bool tag_ident_is_bound (const s_tag *tag);
bool tag_is_bound_var (const s_tag *tag);
diff --git a/libc3/types.h b/libc3/types.h
index 116f67d..387c07a 100644
--- a/libc3/types.h
+++ b/libc3/types.h
@@ -347,6 +347,7 @@ struct fn {
s_fn_clause *clauses;
bool macro;
bool special_operator;
+ const s_sym *module;
};
struct ident {
@@ -616,7 +617,7 @@ struct env {
char **argv;
s_str argv0_dir;
s_list *backtrace;
- const s_sym *current_module;
+ const s_sym *current_defmodule;
s_buf err;
s_error_handler *error_handler;
s_facts facts;
@@ -627,6 +628,8 @@ struct env {
s_buf out;
s_list *path;
uw quote_level;
+ s_list *search_modules;
+ s_list *search_modules_default;
uw unquote_level;
s_unwind_protect *unwind_protect;
};
diff --git a/sources.mk b/sources.mk
index 93742f2..afd69aa 100644
--- a/sources.mk
+++ b/sources.mk
@@ -10,40 +10,6 @@ C3_CONFIGURES = \
"libc3/configure" \
"libc3/sources.sh" \
"libc3/update_sources" \
- "libc3/window/cairo/configure" \
- "libc3/window/cairo/demo/configure" \
- "libc3/window/cairo/demo/sources.sh" \
- "libc3/window/cairo/demo/update_sources" \
- "libc3/window/cairo/quartz/configure" \
- "libc3/window/cairo/quartz/demo/configure" \
- "libc3/window/cairo/quartz/demo/sources.sh" \
- "libc3/window/cairo/quartz/demo/update_sources" \
- "libc3/window/cairo/quartz/sources.sh" \
- "libc3/window/cairo/quartz/update_sources" \
- "libc3/window/cairo/sources.sh" \
- "libc3/window/cairo/update_sources" \
- "libc3/window/cairo/win32/configure" \
- "libc3/window/cairo/win32/demo/configure" \
- "libc3/window/cairo/win32/demo/sources.sh" \
- "libc3/window/cairo/win32/demo/update_sources" \
- "libc3/window/cairo/win32/sources.sh" \
- "libc3/window/cairo/win32/update_sources" \
- "libc3/window/cairo/xcb/configure" \
- "libc3/window/cairo/xcb/demo/configure" \
- "libc3/window/cairo/xcb/demo/sources.sh" \
- "libc3/window/cairo/xcb/demo/update_sources" \
- "libc3/window/cairo/xcb/sources.sh" \
- "libc3/window/cairo/xcb/update_sources" \
- "libc3/window/configure" \
- "libc3/window/sdl2/configure" \
- "libc3/window/sdl2/demo/configure" \
- "libc3/window/sdl2/demo/macos/configure" \
- "libc3/window/sdl2/demo/sources.sh" \
- "libc3/window/sdl2/demo/update_sources" \
- "libc3/window/sdl2/sources.sh" \
- "libc3/window/sdl2/update_sources" \
- "libc3/window/sources.sh" \
- "libc3/window/update_sources" \
"libtommath/configure" \
"libtommath/sources.sh" \
"libtommath/update_sources" \
@@ -61,29 +27,6 @@ C3_MAKEFILES = \
"libc3/Makefile" \
"libc3/gen.mk" \
"libc3/sources.mk" \
- "libc3/window/Makefile" \
- "libc3/window/cairo/Makefile" \
- "libc3/window/cairo/demo/Makefile" \
- "libc3/window/cairo/demo/sources.mk" \
- "libc3/window/cairo/quartz/Makefile" \
- "libc3/window/cairo/quartz/demo/Makefile" \
- "libc3/window/cairo/quartz/demo/sources.mk" \
- "libc3/window/cairo/quartz/sources.mk" \
- "libc3/window/cairo/sources.mk" \
- "libc3/window/cairo/win32/Makefile" \
- "libc3/window/cairo/win32/demo/Makefile" \
- "libc3/window/cairo/win32/demo/sources.mk" \
- "libc3/window/cairo/win32/sources.mk" \
- "libc3/window/cairo/xcb/Makefile" \
- "libc3/window/cairo/xcb/demo/Makefile" \
- "libc3/window/cairo/xcb/demo/sources.mk" \
- "libc3/window/cairo/xcb/sources.mk" \
- "libc3/window/sdl2/Makefile" \
- "libc3/window/sdl2/demo/Makefile" \
- "libc3/window/sdl2/demo/macos/Makefile" \
- "libc3/window/sdl2/demo/sources.mk" \
- "libc3/window/sdl2/sources.mk" \
- "libc3/window/sources.mk" \
"libtommath/Makefile" \
"libtommath/sources.mk" \
"test/Makefile" \
@@ -121,6 +64,10 @@ C3_C_SOURCES = \
"libc3/buf.h" \
"libc3/buf_file.c" \
"libc3/buf_file.h" \
+ "libc3/buf_getc.c" \
+ "libc3/buf_getc.h" \
+ "libc3/buf_getchar.c" \
+ "libc3/buf_getchar.h" \
"libc3/buf_inspect.c" \
"libc3/buf_inspect.h" \
"libc3/buf_inspect_s.c.in" \
@@ -449,114 +396,6 @@ C3_C_SOURCES = \
"libc3/var.h" \
"libc3/void.c" \
"libc3/void.h" \
- "libc3/window/cairo/cairo_font.c" \
- "libc3/window/cairo/cairo_font.h" \
- "libc3/window/cairo/cairo_sprite.c" \
- "libc3/window/cairo/cairo_sprite.h" \
- "libc3/window/cairo/cairo_text.c" \
- "libc3/window/cairo/cairo_text.h" \
- "libc3/window/cairo/demo/bg_rect.c" \
- "libc3/window/cairo/demo/bg_rect.h" \
- "libc3/window/cairo/demo/flies.c" \
- "libc3/window/cairo/demo/flies.h" \
- "libc3/window/cairo/demo/lightspeed.c" \
- "libc3/window/cairo/demo/lightspeed.h" \
- "libc3/window/cairo/demo/mandelbrot_f128.c" \
- "libc3/window/cairo/demo/mandelbrot_f128.h" \
- "libc3/window/cairo/demo/toasters.c" \
- "libc3/window/cairo/demo/toasters.h" \
- "libc3/window/cairo/demo/window_cairo_demo.c" \
- "libc3/window/cairo/demo/window_cairo_demo.h" \
- "libc3/window/cairo/quartz/demo/window_cairo_quartz_demo.c" \
- "libc3/window/cairo/quartz/quartz_to_xkbcommon.c" \
- "libc3/window/cairo/quartz/quartz_to_xkbcommon.h" \
- "libc3/window/cairo/quartz/window_cairo_quartz.h" \
- "libc3/window/cairo/quartz/window_cairo_quartz_app_delegate.h" \
- "libc3/window/cairo/quartz/window_cairo_quartz_view.h" \
- "libc3/window/cairo/quartz/window_cairo_quartz_view_controller.h" \
- "libc3/window/cairo/quartz/xkbquartz.h" \
- "libc3/window/cairo/types.h" \
- "libc3/window/cairo/win32/demo/window_cairo_win32_demo.c" \
- "libc3/window/cairo/win32/vk_to_xkbcommon.c" \
- "libc3/window/cairo/win32/vk_to_xkbcommon.h" \
- "libc3/window/cairo/win32/window_cairo_win32.c" \
- "libc3/window/cairo/win32/window_cairo_win32.h" \
- "libc3/window/cairo/window_cairo.c" \
- "libc3/window/cairo/window_cairo.h" \
- "libc3/window/cairo/xcb/config.h" \
- "libc3/window/cairo/xcb/demo/window_cairo_xcb_demo.c" \
- "libc3/window/cairo/xcb/window_cairo_xcb.c" \
- "libc3/window/cairo/xcb/window_cairo_xcb.h" \
- "libc3/window/sdl2/demo/bg_rect.c" \
- "libc3/window/sdl2/demo/bg_rect.h" \
- "libc3/window/sdl2/demo/earth.c" \
- "libc3/window/sdl2/demo/earth.h" \
- "libc3/window/sdl2/demo/flies.c" \
- "libc3/window/sdl2/demo/flies.h" \
- "libc3/window/sdl2/demo/lightspeed.c" \
- "libc3/window/sdl2/demo/lightspeed.h" \
- "libc3/window/sdl2/demo/mandelbrot_f128.c" \
- "libc3/window/sdl2/demo/mandelbrot_f128.h" \
- "libc3/window/sdl2/demo/matrix.c" \
- "libc3/window/sdl2/demo/matrix.h" \
- "libc3/window/sdl2/demo/toasters.c" \
- "libc3/window/sdl2/demo/toasters.h" \
- "libc3/window/sdl2/demo/window_sdl2_demo.c" \
- "libc3/window/sdl2/demo/window_sdl2_demo.h" \
- "libc3/window/sdl2/disabled/mandelbrot.c" \
- "libc3/window/sdl2/disabled/mandelbrot.h" \
- "libc3/window/sdl2/disabled/sdl2_font.c" \
- "libc3/window/sdl2/disabled/sdl2_font.h" \
- "libc3/window/sdl2/disabled/sdl2_sprite.c" \
- "libc3/window/sdl2/disabled/sdl2_sprite.h" \
- "libc3/window/sdl2/dmat3.h" \
- "libc3/window/sdl2/dmat4.c" \
- "libc3/window/sdl2/dmat4.h" \
- "libc3/window/sdl2/dvec2.c" \
- "libc3/window/sdl2/dvec2.h" \
- "libc3/window/sdl2/dvec3.c" \
- "libc3/window/sdl2/dvec3.h" \
- "libc3/window/sdl2/gl_camera.c" \
- "libc3/window/sdl2/gl_camera.h" \
- "libc3/window/sdl2/gl_cylinder.c" \
- "libc3/window/sdl2/gl_cylinder.h" \
- "libc3/window/sdl2/gl_deprecated.c" \
- "libc3/window/sdl2/gl_deprecated.h" \
- "libc3/window/sdl2/gl_font.c" \
- "libc3/window/sdl2/gl_font.h" \
- "libc3/window/sdl2/gl_lines.c" \
- "libc3/window/sdl2/gl_lines.h" \
- "libc3/window/sdl2/gl_object.c" \
- "libc3/window/sdl2/gl_object.h" \
- "libc3/window/sdl2/gl_ortho.c" \
- "libc3/window/sdl2/gl_ortho.h" \
- "libc3/window/sdl2/gl_sphere.c" \
- "libc3/window/sdl2/gl_sphere.h" \
- "libc3/window/sdl2/gl_sprite.c" \
- "libc3/window/sdl2/gl_sprite.h" \
- "libc3/window/sdl2/gl_square.c" \
- "libc3/window/sdl2/gl_square.h" \
- "libc3/window/sdl2/gl_text.c" \
- "libc3/window/sdl2/gl_text.h" \
- "libc3/window/sdl2/gl_triangle.c" \
- "libc3/window/sdl2/gl_triangle.h" \
- "libc3/window/sdl2/gl_vertex.c" \
- "libc3/window/sdl2/gl_vertex.h" \
- "libc3/window/sdl2/gl_vtext.c" \
- "libc3/window/sdl2/gl_vtext.h" \
- "libc3/window/sdl2/mat3.h" \
- "libc3/window/sdl2/mat4.c" \
- "libc3/window/sdl2/mat4.h" \
- "libc3/window/sdl2/types.h" \
- "libc3/window/sdl2/vec2.c" \
- "libc3/window/sdl2/vec2.h" \
- "libc3/window/sdl2/vec3.c" \
- "libc3/window/sdl2/vec3.h" \
- "libc3/window/sdl2/window_sdl2.c" \
- "libc3/window/sdl2/window_sdl2.h" \
- "libc3/window/types.h" \
- "libc3/window/window.c" \
- "libc3/window/window.h" \
"test/array_test.c" \
"test/bool_test.c" \
"test/buf_file_test.c" \
@@ -605,10 +444,7 @@ C3_C_SOURCES = \
"ucd2c/ucd2c.c" \
C3_OBJC_SOURCES = \
- "libc3/window/cairo/quartz/window_cairo_quartz.m" \
- "libc3/window/cairo/quartz/window_cairo_quartz_app_delegate.m" \
- "libc3/window/cairo/quartz/window_cairo_quartz_view.m" \
- "libc3/window/cairo/quartz/window_cairo_quartz_view_controller.m" \
+ "" \
C3_OTHER_SOURCES = \
"AUTHORS" \
@@ -665,16 +501,18 @@ C3_OTHER_SOURCES = \
"img/toast.png" \
"lib/c3/0.1/array.facts" \
"lib/c3/0.1/c3.facts" \
+ "lib/c3/0.1/c3/operator.facts" \
"lib/c3/0.1/complex.facts" \
+ "lib/c3/0.1/f128.facts" \
"lib/c3/0.1/f32.facts" \
"lib/c3/0.1/f64.facts" \
+ "lib/c3/0.1/gl/dvec2.facts" \
+ "lib/c3/0.1/gl/dvec3.facts" \
"lib/c3/0.1/gl/object.facts" \
- "lib/c3/0.1/gl/point2d.facts" \
- "lib/c3/0.1/gl/point2f.facts" \
- "lib/c3/0.1/gl/point3d.facts" \
- "lib/c3/0.1/gl/point3f.facts" \
"lib/c3/0.1/gl/sphere.facts" \
"lib/c3/0.1/gl/triangle.facts" \
+ "lib/c3/0.1/gl/vec2.facts" \
+ "lib/c3/0.1/gl/vec3.facts" \
"lib/c3/0.1/gl/vertex.facts" \
"lib/c3/0.1/integer.facts" \
"lib/c3/0.1/list.facts" \
@@ -688,6 +526,7 @@ C3_OTHER_SOURCES = \
"lib/c3/0.1/s8.facts" \
"lib/c3/0.1/str.facts" \
"lib/c3/0.1/sw.facts" \
+ "lib/c3/0.1/sym.facts" \
"lib/c3/0.1/u16.facts" \
"lib/c3/0.1/u32.facts" \
"lib/c3/0.1/u64.facts" \
@@ -740,6 +579,15 @@ C3_OTHER_SOURCES = \
"test/ic3/complex.in" \
"test/ic3/complex.out.expected" \
"test/ic3/complex.ret.expected" \
+ "test/ic3/def.in" \
+ "test/ic3/def.out.expected" \
+ "test/ic3/def.ret.expected" \
+ "test/ic3/defmodule.in" \
+ "test/ic3/defmodule.out.expected" \
+ "test/ic3/defmodule.ret.expected" \
+ "test/ic3/defoperator.in" \
+ "test/ic3/defoperator.out.expected" \
+ "test/ic3/defoperator.ret.expected" \
"test/ic3/equal.err.expected" \
"test/ic3/equal.in" \
"test/ic3/equal.out.expected" \
@@ -844,6 +692,9 @@ C3_OTHER_SOURCES = \
"test/ic3/tuple.in" \
"test/ic3/tuple.out.expected" \
"test/ic3/tuple.ret.expected" \
+ "test/ic3/var.in" \
+ "test/ic3/var.out.expected" \
+ "test/ic3/var.ret.expected" \
"test/ic3/void.in" \
"test/ic3/void.out.expected" \
"test/ic3/void.ret.expected" \
@@ -1067,6 +918,7 @@ C3_EXTERNAL_SOURCES = \
"ucd2c/UCD/NameAliases.txt" \
"ucd2c/UCD/NamedSequences.txt" \
"ucd2c/UCD/NamedSequencesProv.txt" \
+ "ucd2c/UCD/NamesList.html" \
"ucd2c/UCD/NamesList.txt" \
"ucd2c/UCD/NormalizationCorrections.txt" \
"ucd2c/UCD/NormalizationTest.txt" \
@@ -1086,11 +938,15 @@ C3_EXTERNAL_SOURCES = \
"ucd2c/UCD/UnicodeData.txt" \
"ucd2c/UCD/VerticalOrientation.txt" \
"ucd2c/UCD/auxiliary/GraphemeBreakProperty.txt" \
+ "ucd2c/UCD/auxiliary/GraphemeBreakTest.html" \
"ucd2c/UCD/auxiliary/GraphemeBreakTest.txt" \
+ "ucd2c/UCD/auxiliary/LineBreakTest.html" \
"ucd2c/UCD/auxiliary/LineBreakTest.txt" \
"ucd2c/UCD/auxiliary/SentenceBreakProperty.txt" \
+ "ucd2c/UCD/auxiliary/SentenceBreakTest.html" \
"ucd2c/UCD/auxiliary/SentenceBreakTest.txt" \
"ucd2c/UCD/auxiliary/WordBreakProperty.txt" \
+ "ucd2c/UCD/auxiliary/WordBreakTest.html" \
"ucd2c/UCD/auxiliary/WordBreakTest.txt" \
"ucd2c/UCD/emoji/ReadMe.txt" \
"ucd2c/UCD/emoji/emoji-data.txt" \
@@ -1114,6 +970,6 @@ C3_EXTERNAL_SOURCES = \
"ucd2c/ucd.h" \
"ucd2c/ucd2c" \
"ucd2c/ucd2c.c" \
- "ucd2c/ucd2c.lo" \
- "ucd2c/ucd2c.o" \
+ "ucd2c/ucd2c.main.lo" \
+ "ucd2c/ucd2c.main.o" \
diff --git a/sources.sh b/sources.sh
index 83e1507..d588947 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,7 +1,7 @@
# sources.sh generated by update_sources
-C3_CONFIGURES='c3c/configure c3s/configure c3s/sources.sh c3s/update_sources ic3/configure ic3/sources.sh ic3/update_sources libc3/configure libc3/sources.sh libc3/update_sources libc3/window/cairo/configure libc3/window/cairo/demo/configure libc3/window/cairo/demo/sources.sh libc3/window/cairo/demo/update_sources libc3/window/cairo/quartz/configure libc3/window/cairo/quartz/demo/configure libc3/window/cairo/quartz/demo/sources.sh libc3/window/cairo/quartz/demo/update_sources libc3/window/cairo/quartz/sources.sh libc3/window/cairo/quartz/update_sources libc3/window/cairo/sources.sh libc3/window/cairo/update_sources libc3/window/cairo/win32/configure libc3/window/cairo/win32/demo/configure libc3/window/cairo/win32/demo/sources.sh libc3/window/cairo/win32/demo/update_sources libc3/window/cairo/win32/sources.sh libc3/window/cairo/win32/update_sources libc3/window/cairo/xcb/configure libc3/window/cairo/xcb/demo/configure libc3/window/cairo/xcb/demo/sources.sh libc3/window/cairo/xcb/demo/update_sources libc3/window/cairo/xcb/sources.sh libc3/window/cairo/xcb/update_sources libc3/window/configure libc3/window/sdl2/configure libc3/window/sdl2/demo/configure libc3/window/sdl2/demo/macos/configure libc3/window/sdl2/demo/sources.sh libc3/window/sdl2/demo/update_sources libc3/window/sdl2/sources.sh libc3/window/sdl2/update_sources libc3/window/sources.sh libc3/window/update_sources libtommath/configure libtommath/sources.sh libtommath/update_sources test/configure test/sources.sh test/update_sources ucd2c/configure '
-C3_MAKEFILES='c3c/Makefile c3s/Makefile c3s/sources.mk ic3/Makefile ic3/sources.mk libc3/Makefile libc3/gen.mk libc3/sources.mk libc3/window/Makefile libc3/window/cairo/Makefile libc3/window/cairo/demo/Makefile libc3/window/cairo/demo/sources.mk libc3/window/cairo/quartz/Makefile libc3/window/cairo/quartz/demo/Makefile libc3/window/cairo/quartz/demo/sources.mk libc3/window/cairo/quartz/sources.mk libc3/window/cairo/sources.mk libc3/window/cairo/win32/Makefile libc3/window/cairo/win32/demo/Makefile libc3/window/cairo/win32/demo/sources.mk libc3/window/cairo/win32/sources.mk libc3/window/cairo/xcb/Makefile libc3/window/cairo/xcb/demo/Makefile libc3/window/cairo/xcb/demo/sources.mk libc3/window/cairo/xcb/sources.mk libc3/window/sdl2/Makefile libc3/window/sdl2/demo/Makefile libc3/window/sdl2/demo/macos/Makefile libc3/window/sdl2/demo/sources.mk libc3/window/sdl2/sources.mk libc3/window/sources.mk libtommath/Makefile libtommath/sources.mk test/Makefile test/sources.mk ucd2c/Makefile '
-C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/buf_readline.h c3s/c3s.c ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/buf_wineditline.c ic3/buf_wineditline.h ic3/config.h ic3/ic3.c ic3/linenoise.c libc3/abs.c libc3/abs.h libc3/alloc.c libc3/alloc.h libc3/arg.c libc3/arg.h libc3/array.c libc3/array.h libc3/assert.h libc3/binding.c libc3/binding.h libc3/block.c libc3/block.h libc3/bool.c libc3/bool.h libc3/buf.c libc3/buf.h libc3/buf_file.c libc3/buf_file.h libc3/buf_inspect.c libc3/buf_inspect.h libc3/buf_inspect_s.c.in libc3/buf_inspect_s.h.in libc3/buf_inspect_s16.c libc3/buf_inspect_s16.h libc3/buf_inspect_s16_binary.c libc3/buf_inspect_s16_binary.h libc3/buf_inspect_s16_decimal.c libc3/buf_inspect_s16_decimal.h libc3/buf_inspect_s16_hexadecimal.c libc3/buf_inspect_s16_hexadecimal.h libc3/buf_inspect_s16_octal.c libc3/buf_inspect_s16_octal.h libc3/buf_inspect_s32.c libc3/buf_inspect_s32.h libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32_binary.h libc3/buf_inspect_s32_decimal.c libc3/buf_inspect_s32_decimal.h libc3/buf_inspect_s32_hexadecimal.c libc3/buf_inspect_s32_hexadecimal.h libc3/buf_inspect_s32_octal.c libc3/buf_inspect_s32_octal.h libc3/buf_inspect_s64.c libc3/buf_inspect_s64.h libc3/buf_inspect_s64_binary.c libc3/buf_inspect_s64_binary.h libc3/buf_inspect_s64_decimal.c libc3/buf_inspect_s64_decimal.h libc3/buf_inspect_s64_hexadecimal.c libc3/buf_inspect_s64_hexadecimal.h libc3/buf_inspect_s64_octal.c libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s8.c libc3/buf_inspect_s8.h libc3/buf_inspect_s8_binary.c libc3/buf_inspect_s8_binary.h libc3/buf_inspect_s8_decimal.c libc3/buf_inspect_s8_decimal.h libc3/buf_inspect_s8_hexadecimal.c libc3/buf_inspect_s8_hexadecimal.h libc3/buf_inspect_s8_octal.c libc3/buf_inspect_s8_octal.h libc3/buf_inspect_s_base.c.in libc3/buf_inspect_s_base.h.in libc3/buf_inspect_sw.c libc3/buf_inspect_sw.h libc3/buf_inspect_sw_binary.c libc3/buf_inspect_sw_binary.h libc3/buf_inspect_sw_decimal.c libc3/buf_inspect_sw_decimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_inspect_sw_hexadecimal.h libc3/buf_inspect_sw_octal.c libc3/buf_inspect_sw_octal.h libc3/buf_inspect_u.c.in libc3/buf_inspect_u.h.in libc3/buf_inspect_u16.c libc3/buf_inspect_u16.h libc3/buf_inspect_u16_binary.c libc3/buf_inspect_u16_binary.h libc3/buf_inspect_u16_decimal.c libc3/buf_inspect_u16_decimal.h libc3/buf_inspect_u16_hexadecimal.c libc3/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u16_octal.c libc3/buf_inspect_u16_octal.h libc3/buf_inspect_u32.c libc3/buf_inspect_u32.h libc3/buf_inspect_u32_binary.c libc3/buf_inspect_u32_binary.h libc3/buf_inspect_u32_decimal.c libc3/buf_inspect_u32_decimal.h libc3/buf_inspect_u32_hexadecimal.c libc3/buf_inspect_u32_hexadecimal.h libc3/buf_inspect_u32_octal.c libc3/buf_inspect_u32_octal.h libc3/buf_inspect_u64.c libc3/buf_inspect_u64.h libc3/buf_inspect_u64_binary.c libc3/buf_inspect_u64_binary.h libc3/buf_inspect_u64_decimal.c libc3/buf_inspect_u64_decimal.h libc3/buf_inspect_u64_hexadecimal.c libc3/buf_inspect_u64_hexadecimal.h libc3/buf_inspect_u64_octal.c libc3/buf_inspect_u64_octal.h libc3/buf_inspect_u8.c libc3/buf_inspect_u8.h libc3/buf_inspect_u8_binary.c libc3/buf_inspect_u8_binary.h libc3/buf_inspect_u8_decimal.c libc3/buf_inspect_u8_decimal.h libc3/buf_inspect_u8_hexadecimal.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u8_octal.c libc3/buf_inspect_u8_octal.h libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u_base.h.in libc3/buf_inspect_uw.c libc3/buf_inspect_uw.h libc3/buf_inspect_uw_binary.c libc3/buf_inspect_uw_binary.h libc3/buf_inspect_uw_decimal.c libc3/buf_inspect_uw_decimal.h libc3/buf_inspect_uw_hexadecimal.c libc3/buf_inspect_uw_hexadecimal.h libc3/buf_inspect_uw_octal.c libc3/buf_inspect_uw_octal.h libc3/buf_parse.c libc3/buf_parse.h libc3/buf_parse_s.c.in libc3/buf_parse_s.h.in libc3/buf_parse_s16.c libc3/buf_parse_s16.h libc3/buf_parse_s32.c libc3/buf_parse_s32.h libc3/buf_parse_s64.c libc3/buf_parse_s64.h libc3/buf_parse_s8.c libc3/buf_parse_s8.h libc3/buf_parse_sw.c libc3/buf_parse_sw.h libc3/buf_parse_u.c.in libc3/buf_parse_u.h.in libc3/buf_parse_u16.c libc3/buf_parse_u16.h libc3/buf_parse_u32.c libc3/buf_parse_u32.h libc3/buf_parse_u64.c libc3/buf_parse_u64.h libc3/buf_parse_u8.c libc3/buf_parse_u8.h libc3/buf_parse_uw.c libc3/buf_parse_uw.h libc3/buf_save.c libc3/buf_save.h libc3/c3.c libc3/c3.h libc3/c3_main.h libc3/call.c libc3/call.h libc3/ceiling.c libc3/ceiling.h libc3/cfn.c libc3/cfn.h libc3/character.c libc3/character.h libc3/compare.c libc3/compare.h libc3/complex.c libc3/complex.h libc3/data.c libc3/data.h libc3/env.c libc3/env.h libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/f128.c libc3/f128.h libc3/f32.c libc3/f32.h libc3/f64.c libc3/f64.h libc3/fact.c libc3/fact.h libc3/fact_list.c libc3/fact_list.h libc3/facts.c libc3/facts.h libc3/facts_cursor.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/facts_spec_cursor.h libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/facts_with_cursor.h libc3/file.c libc3/file.h libc3/float.h libc3/fn.c libc3/fn.h libc3/fn_clause.c libc3/fn_clause.h libc3/frame.c libc3/frame.h libc3/hash.c libc3/hash.h libc3/ident.c libc3/ident.h libc3/integer.c libc3/integer.h libc3/io.c libc3/io.h libc3/license.c libc3/list.c libc3/list.h libc3/list_init.c libc3/list_init.h libc3/log.c libc3/log.h libc3/map.c libc3/map.h libc3/module.c libc3/module.h libc3/operator.c libc3/operator.h libc3/pcomplex.c libc3/pcomplex.h libc3/point.h.in libc3/ptag.c libc3/ptag.h libc3/ptr.c libc3/ptr.h libc3/ptr_free.c libc3/ptr_free.h libc3/queue.c libc3/queue.h libc3/quote.c libc3/quote.h libc3/ratio.c libc3/ratio.h libc3/s.c.in libc3/s.h.in libc3/s16.c libc3/s16.h libc3/s32.c libc3/s32.h libc3/s64.c libc3/s64.h libc3/s8.c libc3/s8.h libc3/sequence.c libc3/sequence.h libc3/set.c.in libc3/set.h.in libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item.c.in libc3/set_item.h.in libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/sha1.h libc3/sign.c libc3/sign.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/special_operator.c libc3/special_operator.h libc3/str.c libc3/str.h libc3/struct.c libc3/struct.h libc3/struct_type.c libc3/struct_type.h libc3/sw.c libc3/sw.h libc3/sym.c libc3/sym.h libc3/tag.c libc3/tag.h libc3/tag_add.c libc3/tag_addi.c libc3/tag_band.c libc3/tag_bnot.c libc3/tag_bor.c libc3/tag_bxor.c libc3/tag_div.c libc3/tag_init.c libc3/tag_init.h libc3/tag_mod.c libc3/tag_mul.c libc3/tag_neg.c libc3/tag_shift_left.c libc3/tag_shift_right.c libc3/tag_sqrt.c libc3/tag_sub.c libc3/tag_type.c libc3/tag_type.h libc3/time.c libc3/time.h libc3/tuple.c libc3/tuple.h libc3/types.h libc3/u.c.in libc3/u.h.in libc3/u16.c libc3/u16.h libc3/u32.c libc3/u32.h libc3/u64.c libc3/u64.h libc3/u8.c libc3/u8.h libc3/ucd.c libc3/ucd.h libc3/unquote.c libc3/unquote.h libc3/uw.c libc3/uw.h libc3/var.c libc3/var.h libc3/void.c libc3/void.h libc3/window/cairo/cairo_font.c libc3/window/cairo/cairo_font.h libc3/window/cairo/cairo_sprite.c libc3/window/cairo/cairo_sprite.h libc3/window/cairo/cairo_text.c libc3/window/cairo/cairo_text.h libc3/window/cairo/demo/bg_rect.c libc3/window/cairo/demo/bg_rect.h libc3/window/cairo/demo/flies.c libc3/window/cairo/demo/flies.h libc3/window/cairo/demo/lightspeed.c libc3/window/cairo/demo/lightspeed.h libc3/window/cairo/demo/mandelbrot_f128.c libc3/window/cairo/demo/mandelbrot_f128.h libc3/window/cairo/demo/toasters.c libc3/window/cairo/demo/toasters.h libc3/window/cairo/demo/window_cairo_demo.c libc3/window/cairo/demo/window_cairo_demo.h libc3/window/cairo/quartz/demo/window_cairo_quartz_demo.c libc3/window/cairo/quartz/quartz_to_xkbcommon.c libc3/window/cairo/quartz/quartz_to_xkbcommon.h libc3/window/cairo/quartz/window_cairo_quartz.h libc3/window/cairo/quartz/window_cairo_quartz_app_delegate.h libc3/window/cairo/quartz/window_cairo_quartz_view.h libc3/window/cairo/quartz/window_cairo_quartz_view_controller.h libc3/window/cairo/quartz/xkbquartz.h libc3/window/cairo/types.h libc3/window/cairo/win32/demo/window_cairo_win32_demo.c libc3/window/cairo/win32/vk_to_xkbcommon.c libc3/window/cairo/win32/vk_to_xkbcommon.h libc3/window/cairo/win32/window_cairo_win32.c libc3/window/cairo/win32/window_cairo_win32.h libc3/window/cairo/window_cairo.c libc3/window/cairo/window_cairo.h libc3/window/cairo/xcb/config.h libc3/window/cairo/xcb/demo/window_cairo_xcb_demo.c libc3/window/cairo/xcb/window_cairo_xcb.c libc3/window/cairo/xcb/window_cairo_xcb.h libc3/window/sdl2/demo/bg_rect.c libc3/window/sdl2/demo/bg_rect.h libc3/window/sdl2/demo/earth.c libc3/window/sdl2/demo/earth.h libc3/window/sdl2/demo/flies.c libc3/window/sdl2/demo/flies.h libc3/window/sdl2/demo/lightspeed.c libc3/window/sdl2/demo/lightspeed.h libc3/window/sdl2/demo/mandelbrot_f128.c libc3/window/sdl2/demo/mandelbrot_f128.h libc3/window/sdl2/demo/matrix.c libc3/window/sdl2/demo/matrix.h libc3/window/sdl2/demo/toasters.c libc3/window/sdl2/demo/toasters.h libc3/window/sdl2/demo/window_sdl2_demo.c libc3/window/sdl2/demo/window_sdl2_demo.h libc3/window/sdl2/disabled/mandelbrot.c libc3/window/sdl2/disabled/mandelbrot.h libc3/window/sdl2/disabled/sdl2_font.c libc3/window/sdl2/disabled/sdl2_font.h libc3/window/sdl2/disabled/sdl2_sprite.c libc3/window/sdl2/disabled/sdl2_sprite.h libc3/window/sdl2/dmat3.h libc3/window/sdl2/dmat4.c libc3/window/sdl2/dmat4.h libc3/window/sdl2/dvec2.c libc3/window/sdl2/dvec2.h libc3/window/sdl2/dvec3.c libc3/window/sdl2/dvec3.h libc3/window/sdl2/gl_camera.c libc3/window/sdl2/gl_camera.h libc3/window/sdl2/gl_cylinder.c libc3/window/sdl2/gl_cylinder.h libc3/window/sdl2/gl_deprecated.c libc3/window/sdl2/gl_deprecated.h libc3/window/sdl2/gl_font.c libc3/window/sdl2/gl_font.h libc3/window/sdl2/gl_lines.c libc3/window/sdl2/gl_lines.h libc3/window/sdl2/gl_object.c libc3/window/sdl2/gl_object.h libc3/window/sdl2/gl_ortho.c libc3/window/sdl2/gl_ortho.h libc3/window/sdl2/gl_sphere.c libc3/window/sdl2/gl_sphere.h libc3/window/sdl2/gl_sprite.c libc3/window/sdl2/gl_sprite.h libc3/window/sdl2/gl_square.c libc3/window/sdl2/gl_square.h libc3/window/sdl2/gl_text.c libc3/window/sdl2/gl_text.h libc3/window/sdl2/gl_triangle.c libc3/window/sdl2/gl_triangle.h libc3/window/sdl2/gl_vertex.c libc3/window/sdl2/gl_vertex.h libc3/window/sdl2/gl_vtext.c libc3/window/sdl2/gl_vtext.h libc3/window/sdl2/mat3.h libc3/window/sdl2/mat4.c libc3/window/sdl2/mat4.h libc3/window/sdl2/types.h libc3/window/sdl2/vec2.c libc3/window/sdl2/vec2.h libc3/window/sdl2/vec3.c libc3/window/sdl2/vec3.h libc3/window/sdl2/window_sdl2.c libc3/window/sdl2/window_sdl2.h libc3/window/types.h libc3/window/window.c libc3/window/window.h test/array_test.c test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.c test/buf_parse_test.h test/buf_parse_test_s16.c test/buf_parse_test_s32.c test/buf_parse_test_s64.c test/buf_parse_test_s8.c test/buf_parse_test_su.h test/buf_parse_test_u16.c test/buf_parse_test_u32.c test/buf_parse_test_u64.c test/buf_parse_test_u8.c test/buf_test.c test/call_test.c test/cfn_test.c test/character_test.c test/compare_test.c test/compare_test.h test/env_test.c test/fact_test.c test/fact_test.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/fn_test.c test/hash_test.c test/ident_test.c test/libc3_test.c test/list_test.c test/ratio_test.c test/set__fact_test.c test/set__tag_test.c test/skiplist__fact_test.c test/str_test.c test/sym_test.c test/tag_test.c test/tag_test.h test/test.c test/test.h test/tuple_test.c test/types_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
-C3_OBJC_SOURCES='libc3/window/cairo/quartz/window_cairo_quartz.m libc3/window/cairo/quartz/window_cairo_quartz_app_delegate.m libc3/window/cairo/quartz/window_cairo_quartz_view.m libc3/window/cairo/quartz/window_cairo_quartz_view_controller.m '
-C3_OTHER_SOURCES='AUTHORS Makefile README.md c3.index c3.version config.subr configure fonts/Courier New/Courier New.ttf fonts/NotoSans-Regular.ttf img/c3.1.xcf img/c3.1080.jpg img/c3.1080.png img/c3.128.jpg img/c3.128.png img/c3.16.png img/c3.256.jpg img/c3.256.png img/c3.32.jpg img/c3.32.png img/c3.48.jpg img/c3.48.png img/c3.512.jpg img/c3.512.png img/c3.64.jpg img/c3.64.png img/c3.640.jpg img/c3.640.png img/c3.720.jpg img/c3.720.png img/c3.iconset/icon_128x128.png img/c3.iconset/icon_16x16.png img/c3.iconset/icon_256x256.png img/c3.iconset/icon_32x32.png img/c3.iconset/icon_512x512.png img/c3.iconset/icon_64x64.png img/c3.xcf img/earth.jpg img/earth.png img/flaps.256.png img/flaps.png img/fly-dead.png img/fly-noto.png img/iris-c3-004.jpeg img/iris-c3-004.png img/mandelbrot_f128_limit.1.png img/mandelbrot_f128_limit.2.png img/mandelbrot_f128_limit.3.png img/mandelbrot_f128_limit.png img/matrix_shade.png img/thodg_No_Prompt_073261d5-2c81-4b6e-9572-e0b840c55f1f.jpeg img/toast.128.png img/toast.png lib/c3/0.1/array.facts lib/c3/0.1/c3.facts lib/c3/0.1/complex.facts lib/c3/0.1/f32.facts lib/c3/0.1/f64.facts lib/c3/0.1/gl/object.facts lib/c3/0.1/gl/point2d.facts lib/c3/0.1/gl/point2f.facts lib/c3/0.1/gl/point3d.facts lib/c3/0.1/gl/point3f.facts lib/c3/0.1/gl/sphere.facts lib/c3/0.1/gl/triangle.facts lib/c3/0.1/gl/vertex.facts lib/c3/0.1/integer.facts lib/c3/0.1/list.facts lib/c3/0.1/map.facts lib/c3/0.1/ptr.facts lib/c3/0.1/ptr_free.facts lib/c3/0.1/ratio.facts lib/c3/0.1/s16.facts lib/c3/0.1/s32.facts lib/c3/0.1/s64.facts lib/c3/0.1/s8.facts lib/c3/0.1/str.facts lib/c3/0.1/sw.facts lib/c3/0.1/u16.facts lib/c3/0.1/u32.facts lib/c3/0.1/u64.facts lib/c3/0.1/u8.facts lib/c3/0.1/uw.facts lib/c3/0.1/var.facts lib/c3/0.1/void.facts libc3/tag_init.rb license.h sources.mk sources.sh test/buf_parse_test_su.rb test/facts_test_dump_file.expected.facts test/facts_test_load_file.facts test/facts_test_log_add.expected.facts test/facts_test_log_remove.expected.facts test/facts_test_open_file.1.expected.facts test/facts_test_open_file.1.in.facts test/facts_test_open_file.2.expected.facts test/facts_test_open_file.2.in.facts test/facts_test_open_file.3.expected.facts test/facts_test_open_file.3.in.facts test/facts_test_save.expected.facts test/ic3/array.err.expected test/ic3/array.in test/ic3/array.out.expected test/ic3/array.ret.expected test/ic3/block.in test/ic3/block.out.expected test/ic3/block.ret.expected test/ic3/bool.err.expected test/ic3/bool.in test/ic3/bool.out.expected test/ic3/bool.ret.expected test/ic3/call.err.expected test/ic3/call.in test/ic3/call.out.expected test/ic3/call.ret.expected test/ic3/cast.in test/ic3/cast.out.expected test/ic3/cast.ret.expected test/ic3/character.err.expected test/ic3/character.in test/ic3/character.out.expected test/ic3/character.ret.expected test/ic3/comment.err.expected test/ic3/comment.in test/ic3/comment.out.expected test/ic3/comment.ret.expected test/ic3/complex.in test/ic3/complex.out.expected test/ic3/complex.ret.expected test/ic3/equal.err.expected test/ic3/equal.in test/ic3/equal.out.expected test/ic3/equal.ret.expected test/ic3/fn.err.expected test/ic3/fn.in test/ic3/fn.out.expected test/ic3/fn.ret.expected test/ic3/function_call.err.expected test/ic3/function_call.out.expected test/ic3/function_call.ret.expected test/ic3/hello.err.expected test/ic3/hello.in test/ic3/hello.out.expected test/ic3/hello.ret.expected test/ic3/ident.err.expected test/ic3/ident.in test/ic3/ident.out.expected test/ic3/ident.ret.expected test/ic3/if.in test/ic3/if.out.expected test/ic3/if.ret.expected test/ic3/integer.in test/ic3/integer.lisp test/ic3/integer.out.expected test/ic3/integer.ret.expected test/ic3/integer_add.in test/ic3/integer_add.out.expected test/ic3/integer_add.ret.expected test/ic3/integer_band.in test/ic3/integer_band.out.expected test/ic3/integer_band.ret.expected test/ic3/integer_bnot.in test/ic3/integer_bnot.out.expected test/ic3/integer_bnot.ret.expected test/ic3/integer_bor-2.in test/ic3/integer_bor-2.out.expected test/ic3/integer_bor-2.ret.expected test/ic3/integer_bxor.in test/ic3/integer_bxor.out.expected test/ic3/integer_bxor.ret.expected test/ic3/integer_div.in test/ic3/integer_div.out.expected test/ic3/integer_div.ret.expected test/ic3/integer_eq.in test/ic3/integer_eq.out.expected test/ic3/integer_eq.ret.expected test/ic3/integer_gt.in test/ic3/integer_gt.out.expected test/ic3/integer_gt.ret.expected test/ic3/integer_lt.in test/ic3/integer_lt.out.expected test/ic3/integer_lt.ret.expected test/ic3/integer_mod-2.in test/ic3/integer_mod-2.out.expected test/ic3/integer_mod-2.ret.expected test/ic3/integer_mul.in test/ic3/integer_mul.out.expected test/ic3/integer_mul.ret.expected test/ic3/integer_neg.in test/ic3/integer_neg.out.expected test/ic3/integer_neg.ret.expected test/ic3/integer_sub.in test/ic3/integer_sub.out.expected test/ic3/integer_sub.ret.expected test/ic3/list.err.expected test/ic3/list.in test/ic3/list.out.expected test/ic3/list.ret.expected test/ic3/macro.in test/ic3/macro.out.expected test/ic3/macro.ret.expected test/ic3/map.in test/ic3/map.out.expected test/ic3/map.ret.expected test/ic3/op.err.expected test/ic3/op.in test/ic3/op.out.expected test/ic3/op.ret.expected test/ic3/plist.err.expected test/ic3/plist.in test/ic3/plist.out.expected test/ic3/plist.ret.expected test/ic3/quote.in test/ic3/quote.out.expected test/ic3/quote.ret.expected test/ic3/ratio.in test/ic3/ratio.out.expected test/ic3/ratio.ret.expected test/ic3/str.err.expected test/ic3/str.in test/ic3/str.out.expected test/ic3/str.ret.expected test/ic3/struct.in test/ic3/struct.out.expected test/ic3/struct.ret.expected test/ic3/sym.err.expected test/ic3/sym.in test/ic3/sym.out.expected test/ic3/sym.ret.expected test/ic3/tuple.err.expected test/ic3/tuple.in test/ic3/tuple.out.expected test/ic3/tuple.ret.expected test/ic3/void.in test/ic3/void.out.expected test/ic3/void.ret.expected test/ic3_test test/replace_lines.rb test/test.rb test/test_case_end.rb test/zero '
-C3_EXTERNAL_SOURCES='libtommath/LICENSE libtommath/README.md libtommath/bn_cutoffs.c libtommath/bn_deprecated.c libtommath/bn_mp_2expt.c libtommath/bn_mp_abs.c libtommath/bn_mp_add.c libtommath/bn_mp_add_d.c libtommath/bn_mp_addmod.c libtommath/bn_mp_and.c libtommath/bn_mp_clamp.c libtommath/bn_mp_clear.c libtommath/bn_mp_clear_multi.c libtommath/bn_mp_cmp.c libtommath/bn_mp_cmp_d.c libtommath/bn_mp_cmp_mag.c libtommath/bn_mp_cnt_lsb.c libtommath/bn_mp_complement.c libtommath/bn_mp_copy.c libtommath/bn_mp_count_bits.c libtommath/bn_mp_decr.c libtommath/bn_mp_div.c libtommath/bn_mp_div_2.c libtommath/bn_mp_div_2d.c libtommath/bn_mp_div_3.c libtommath/bn_mp_div_d.c libtommath/bn_mp_dr_is_modulus.c libtommath/bn_mp_dr_reduce.c libtommath/bn_mp_dr_setup.c libtommath/bn_mp_error_to_string.c libtommath/bn_mp_exch.c libtommath/bn_mp_expt_u32.c libtommath/bn_mp_exptmod.c libtommath/bn_mp_exteuclid.c libtommath/bn_mp_fread.c libtommath/bn_mp_from_sbin.c libtommath/bn_mp_from_ubin.c libtommath/bn_mp_fwrite.c libtommath/bn_mp_gcd.c libtommath/bn_mp_get_double.c libtommath/bn_mp_get_i32.c libtommath/bn_mp_get_i64.c libtommath/bn_mp_get_l.c libtommath/bn_mp_get_ll.c libtommath/bn_mp_get_mag_u32.c libtommath/bn_mp_get_mag_u64.c libtommath/bn_mp_get_mag_ul.c libtommath/bn_mp_get_mag_ull.c libtommath/bn_mp_grow.c libtommath/bn_mp_incr.c libtommath/bn_mp_init.c libtommath/bn_mp_init_copy.c libtommath/bn_mp_init_i32.c libtommath/bn_mp_init_i64.c libtommath/bn_mp_init_l.c libtommath/bn_mp_init_ll.c libtommath/bn_mp_init_multi.c libtommath/bn_mp_init_set.c libtommath/bn_mp_init_size.c libtommath/bn_mp_init_u32.c libtommath/bn_mp_init_u64.c libtommath/bn_mp_init_ul.c libtommath/bn_mp_init_ull.c libtommath/bn_mp_invmod.c libtommath/bn_mp_is_square.c libtommath/bn_mp_iseven.c libtommath/bn_mp_isodd.c libtommath/bn_mp_kronecker.c libtommath/bn_mp_lcm.c libtommath/bn_mp_log_u32.c libtommath/bn_mp_lshd.c libtommath/bn_mp_mod.c libtommath/bn_mp_mod_2d.c libtommath/bn_mp_mod_d.c libtommath/bn_mp_montgomery_calc_normalization.c libtommath/bn_mp_montgomery_reduce.c libtommath/bn_mp_montgomery_setup.c libtommath/bn_mp_mul.c libtommath/bn_mp_mul_2.c libtommath/bn_mp_mul_2d.c libtommath/bn_mp_mul_d.c libtommath/bn_mp_mulmod.c libtommath/bn_mp_neg.c libtommath/bn_mp_or.c libtommath/bn_mp_pack.c libtommath/bn_mp_pack_count.c libtommath/bn_mp_prime_fermat.c libtommath/bn_mp_prime_frobenius_underwood.c libtommath/bn_mp_prime_is_prime.c libtommath/bn_mp_prime_miller_rabin.c libtommath/bn_mp_prime_next_prime.c libtommath/bn_mp_prime_rabin_miller_trials.c libtommath/bn_mp_prime_rand.c libtommath/bn_mp_prime_strong_lucas_selfridge.c libtommath/bn_mp_radix_size.c libtommath/bn_mp_radix_smap.c libtommath/bn_mp_rand.c libtommath/bn_mp_read_radix.c libtommath/bn_mp_reduce.c libtommath/bn_mp_reduce_2k.c libtommath/bn_mp_reduce_2k_l.c libtommath/bn_mp_reduce_2k_setup.c libtommath/bn_mp_reduce_2k_setup_l.c libtommath/bn_mp_reduce_is_2k.c libtommath/bn_mp_reduce_is_2k_l.c libtommath/bn_mp_reduce_setup.c libtommath/bn_mp_root_u32.c libtommath/bn_mp_rshd.c libtommath/bn_mp_sbin_size.c libtommath/bn_mp_set.c libtommath/bn_mp_set_double.c libtommath/bn_mp_set_i32.c libtommath/bn_mp_set_i64.c libtommath/bn_mp_set_l.c libtommath/bn_mp_set_ll.c libtommath/bn_mp_set_u32.c libtommath/bn_mp_set_u64.c libtommath/bn_mp_set_ul.c libtommath/bn_mp_set_ull.c libtommath/bn_mp_shrink.c libtommath/bn_mp_signed_rsh.c libtommath/bn_mp_sqr.c libtommath/bn_mp_sqrmod.c libtommath/bn_mp_sqrt.c libtommath/bn_mp_sqrtmod_prime.c libtommath/bn_mp_sub.c libtommath/bn_mp_sub_d.c libtommath/bn_mp_submod.c libtommath/bn_mp_to_radix.c libtommath/bn_mp_to_sbin.c libtommath/bn_mp_to_ubin.c libtommath/bn_mp_ubin_size.c libtommath/bn_mp_unpack.c libtommath/bn_mp_xor.c libtommath/bn_mp_zero.c libtommath/bn_prime_tab.c libtommath/bn_s_mp_add.c libtommath/bn_s_mp_balance_mul.c libtommath/bn_s_mp_exptmod.c libtommath/bn_s_mp_exptmod_fast.c libtommath/bn_s_mp_get_bit.c libtommath/bn_s_mp_invmod_fast.c libtommath/bn_s_mp_invmod_slow.c libtommath/bn_s_mp_karatsuba_mul.c libtommath/bn_s_mp_karatsuba_sqr.c libtommath/bn_s_mp_montgomery_reduce_fast.c libtommath/bn_s_mp_mul_digs.c libtommath/bn_s_mp_mul_digs_fast.c libtommath/bn_s_mp_mul_high_digs.c libtommath/bn_s_mp_mul_high_digs_fast.c libtommath/bn_s_mp_prime_is_divisible.c libtommath/bn_s_mp_rand_jenkins.c libtommath/bn_s_mp_rand_platform.c libtommath/bn_s_mp_reverse.c libtommath/bn_s_mp_sqr.c libtommath/bn_s_mp_sqr_fast.c libtommath/bn_s_mp_sub.c libtommath/bn_s_mp_toom_mul.c libtommath/bn_s_mp_toom_sqr.c libtommath/demo/mtest_opponent.c libtommath/demo/shared.c libtommath/demo/shared.h libtommath/demo/test.c libtommath/demo/timing.c libtommath/etc/2kprime.c libtommath/etc/drprime.c libtommath/etc/mersenne.c libtommath/etc/mont.c libtommath/etc/pprime.c libtommath/etc/tune.c libtommath/mtest/logtab.h libtommath/mtest/mpi-config.h libtommath/mtest/mpi-types.h libtommath/mtest/mpi.c libtommath/mtest/mpi.h libtommath/mtest/mtest.c libtommath/tommath.h libtommath/tommath_class.h libtommath/tommath_cutoffs.h libtommath/tommath_private.h libtommath/tommath_superclass.h linenoise/LICENSE linenoise/Makefile linenoise/README.markdown linenoise/example.c linenoise/linenoise.c linenoise/linenoise.h ucd2c/Makefile ucd2c/UCD.zip ucd2c/UCD/ArabicShaping.txt ucd2c/UCD/BidiBrackets.txt ucd2c/UCD/BidiCharacterTest.txt ucd2c/UCD/BidiMirroring.txt ucd2c/UCD/BidiTest.txt ucd2c/UCD/Blocks.txt ucd2c/UCD/CJKRadicals.txt ucd2c/UCD/CaseFolding.txt ucd2c/UCD/CompositionExclusions.txt ucd2c/UCD/DerivedAge.txt ucd2c/UCD/DerivedCoreProperties.txt ucd2c/UCD/DerivedNormalizationProps.txt ucd2c/UCD/EastAsianWidth.txt ucd2c/UCD/EmojiSources.txt ucd2c/UCD/EquivalentUnifiedIdeograph.txt ucd2c/UCD/HangulSyllableType.txt ucd2c/UCD/Index.txt ucd2c/UCD/IndicPositionalCategory.txt ucd2c/UCD/IndicSyllabicCategory.txt ucd2c/UCD/Jamo.txt ucd2c/UCD/LineBreak.txt ucd2c/UCD/NameAliases.txt ucd2c/UCD/NamedSequences.txt ucd2c/UCD/NamedSequencesProv.txt ucd2c/UCD/NamesList.txt ucd2c/UCD/NormalizationCorrections.txt ucd2c/UCD/NormalizationTest.txt ucd2c/UCD/NushuSources.txt ucd2c/UCD/PropList.txt ucd2c/UCD/PropertyAliases.txt ucd2c/UCD/PropertyValueAliases.txt ucd2c/UCD/ReadMe.txt ucd2c/UCD/ScriptExtensions.txt ucd2c/UCD/Scripts.txt ucd2c/UCD/SpecialCasing.txt ucd2c/UCD/StandardizedVariants.txt ucd2c/UCD/TangutSources.txt ucd2c/UCD/USourceData.txt ucd2c/UCD/USourceGlyphs.pdf ucd2c/UCD/USourceRSChart.pdf ucd2c/UCD/UnicodeData.txt ucd2c/UCD/VerticalOrientation.txt ucd2c/UCD/auxiliary/GraphemeBreakProperty.txt ucd2c/UCD/auxiliary/GraphemeBreakTest.txt ucd2c/UCD/auxiliary/LineBreakTest.txt ucd2c/UCD/auxiliary/SentenceBreakProperty.txt ucd2c/UCD/auxiliary/SentenceBreakTest.txt ucd2c/UCD/auxiliary/WordBreakProperty.txt ucd2c/UCD/auxiliary/WordBreakTest.txt ucd2c/UCD/emoji/ReadMe.txt ucd2c/UCD/emoji/emoji-data.txt ucd2c/UCD/emoji/emoji-variation-sequences.txt ucd2c/UCD/extracted/DerivedBidiClass.txt ucd2c/UCD/extracted/DerivedBinaryProperties.txt ucd2c/UCD/extracted/DerivedCombiningClass.txt ucd2c/UCD/extracted/DerivedDecompositionType.txt ucd2c/UCD/extracted/DerivedEastAsianWidth.txt ucd2c/UCD/extracted/DerivedGeneralCategory.txt ucd2c/UCD/extracted/DerivedJoiningGroup.txt ucd2c/UCD/extracted/DerivedJoiningType.txt ucd2c/UCD/extracted/DerivedLineBreak.txt ucd2c/UCD/extracted/DerivedName.txt ucd2c/UCD/extracted/DerivedNumericType.txt ucd2c/UCD/extracted/DerivedNumericValues.txt ucd2c/config.mk ucd2c/configure ucd2c/license.txt ucd2c/ucd.c ucd2c/ucd.h ucd2c/ucd2c ucd2c/ucd2c.c ucd2c/ucd2c.lo ucd2c/ucd2c.o '
+C3_CONFIGURES='c3c/configure c3s/configure c3s/sources.sh c3s/update_sources ic3/configure ic3/sources.sh ic3/update_sources libc3/configure libc3/sources.sh libc3/update_sources libtommath/configure libtommath/sources.sh libtommath/update_sources test/configure test/sources.sh test/update_sources ucd2c/configure '
+C3_MAKEFILES='c3c/Makefile c3s/Makefile c3s/sources.mk ic3/Makefile ic3/sources.mk libc3/Makefile libc3/gen.mk libc3/sources.mk libtommath/Makefile libtommath/sources.mk test/Makefile test/sources.mk ucd2c/Makefile '
+C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/buf_readline.h c3s/c3s.c ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/buf_wineditline.c ic3/buf_wineditline.h ic3/config.h ic3/ic3.c ic3/linenoise.c libc3/abs.c libc3/abs.h libc3/alloc.c libc3/alloc.h libc3/arg.c libc3/arg.h libc3/array.c libc3/array.h libc3/assert.h libc3/binding.c libc3/binding.h libc3/block.c libc3/block.h libc3/bool.c libc3/bool.h libc3/buf.c libc3/buf.h libc3/buf_file.c libc3/buf_file.h libc3/buf_getc.c libc3/buf_getc.h libc3/buf_getchar.c libc3/buf_getchar.h libc3/buf_inspect.c libc3/buf_inspect.h libc3/buf_inspect_s.c.in libc3/buf_inspect_s.h.in libc3/buf_inspect_s16.c libc3/buf_inspect_s16.h libc3/buf_inspect_s16_binary.c libc3/buf_inspect_s16_binary.h libc3/buf_inspect_s16_decimal.c libc3/buf_inspect_s16_decimal.h libc3/buf_inspect_s16_hexadecimal.c libc3/buf_inspect_s16_hexadecimal.h libc3/buf_inspect_s16_octal.c libc3/buf_inspect_s16_octal.h libc3/buf_inspect_s32.c libc3/buf_inspect_s32.h libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32_binary.h libc3/buf_inspect_s32_decimal.c libc3/buf_inspect_s32_decimal.h libc3/buf_inspect_s32_hexadecimal.c libc3/buf_inspect_s32_hexadecimal.h libc3/buf_inspect_s32_octal.c libc3/buf_inspect_s32_octal.h libc3/buf_inspect_s64.c libc3/buf_inspect_s64.h libc3/buf_inspect_s64_binary.c libc3/buf_inspect_s64_binary.h libc3/buf_inspect_s64_decimal.c libc3/buf_inspect_s64_decimal.h libc3/buf_inspect_s64_hexadecimal.c libc3/buf_inspect_s64_hexadecimal.h libc3/buf_inspect_s64_octal.c libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s8.c libc3/buf_inspect_s8.h libc3/buf_inspect_s8_binary.c libc3/buf_inspect_s8_binary.h libc3/buf_inspect_s8_decimal.c libc3/buf_inspect_s8_decimal.h libc3/buf_inspect_s8_hexadecimal.c libc3/buf_inspect_s8_hexadecimal.h libc3/buf_inspect_s8_octal.c libc3/buf_inspect_s8_octal.h libc3/buf_inspect_s_base.c.in libc3/buf_inspect_s_base.h.in libc3/buf_inspect_sw.c libc3/buf_inspect_sw.h libc3/buf_inspect_sw_binary.c libc3/buf_inspect_sw_binary.h libc3/buf_inspect_sw_decimal.c libc3/buf_inspect_sw_decimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_inspect_sw_hexadecimal.h libc3/buf_inspect_sw_octal.c libc3/buf_inspect_sw_octal.h libc3/buf_inspect_u.c.in libc3/buf_inspect_u.h.in libc3/buf_inspect_u16.c libc3/buf_inspect_u16.h libc3/buf_inspect_u16_binary.c libc3/buf_inspect_u16_binary.h libc3/buf_inspect_u16_decimal.c libc3/buf_inspect_u16_decimal.h libc3/buf_inspect_u16_hexadecimal.c libc3/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u16_octal.c libc3/buf_inspect_u16_octal.h libc3/buf_inspect_u32.c libc3/buf_inspect_u32.h libc3/buf_inspect_u32_binary.c libc3/buf_inspect_u32_binary.h libc3/buf_inspect_u32_decimal.c libc3/buf_inspect_u32_decimal.h libc3/buf_inspect_u32_hexadecimal.c libc3/buf_inspect_u32_hexadecimal.h libc3/buf_inspect_u32_octal.c libc3/buf_inspect_u32_octal.h libc3/buf_inspect_u64.c libc3/buf_inspect_u64.h libc3/buf_inspect_u64_binary.c libc3/buf_inspect_u64_binary.h libc3/buf_inspect_u64_decimal.c libc3/buf_inspect_u64_decimal.h libc3/buf_inspect_u64_hexadecimal.c libc3/buf_inspect_u64_hexadecimal.h libc3/buf_inspect_u64_octal.c libc3/buf_inspect_u64_octal.h libc3/buf_inspect_u8.c libc3/buf_inspect_u8.h libc3/buf_inspect_u8_binary.c libc3/buf_inspect_u8_binary.h libc3/buf_inspect_u8_decimal.c libc3/buf_inspect_u8_decimal.h libc3/buf_inspect_u8_hexadecimal.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u8_octal.c libc3/buf_inspect_u8_octal.h libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u_base.h.in libc3/buf_inspect_uw.c libc3/buf_inspect_uw.h libc3/buf_inspect_uw_binary.c libc3/buf_inspect_uw_binary.h libc3/buf_inspect_uw_decimal.c libc3/buf_inspect_uw_decimal.h libc3/buf_inspect_uw_hexadecimal.c libc3/buf_inspect_uw_hexadecimal.h libc3/buf_inspect_uw_octal.c libc3/buf_inspect_uw_octal.h libc3/buf_parse.c libc3/buf_parse.h libc3/buf_parse_s.c.in libc3/buf_parse_s.h.in libc3/buf_parse_s16.c libc3/buf_parse_s16.h libc3/buf_parse_s32.c libc3/buf_parse_s32.h libc3/buf_parse_s64.c libc3/buf_parse_s64.h libc3/buf_parse_s8.c libc3/buf_parse_s8.h libc3/buf_parse_sw.c libc3/buf_parse_sw.h libc3/buf_parse_u.c.in libc3/buf_parse_u.h.in libc3/buf_parse_u16.c libc3/buf_parse_u16.h libc3/buf_parse_u32.c libc3/buf_parse_u32.h libc3/buf_parse_u64.c libc3/buf_parse_u64.h libc3/buf_parse_u8.c libc3/buf_parse_u8.h libc3/buf_parse_uw.c libc3/buf_parse_uw.h libc3/buf_save.c libc3/buf_save.h libc3/c3.c libc3/c3.h libc3/c3_main.h libc3/call.c libc3/call.h libc3/ceiling.c libc3/ceiling.h libc3/cfn.c libc3/cfn.h libc3/character.c libc3/character.h libc3/compare.c libc3/compare.h libc3/complex.c libc3/complex.h libc3/data.c libc3/data.h libc3/env.c libc3/env.h libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/f128.c libc3/f128.h libc3/f32.c libc3/f32.h libc3/f64.c libc3/f64.h libc3/fact.c libc3/fact.h libc3/fact_list.c libc3/fact_list.h libc3/facts.c libc3/facts.h libc3/facts_cursor.c libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.c libc3/facts_spec_cursor.h libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/facts_with_cursor.h libc3/file.c libc3/file.h libc3/float.h libc3/fn.c libc3/fn.h libc3/fn_clause.c libc3/fn_clause.h libc3/frame.c libc3/frame.h libc3/hash.c libc3/hash.h libc3/ident.c libc3/ident.h libc3/integer.c libc3/integer.h libc3/io.c libc3/io.h libc3/license.c libc3/list.c libc3/list.h libc3/list_init.c libc3/list_init.h libc3/log.c libc3/log.h libc3/map.c libc3/map.h libc3/module.c libc3/module.h libc3/operator.c libc3/operator.h libc3/pcomplex.c libc3/pcomplex.h libc3/point.h.in libc3/ptag.c libc3/ptag.h libc3/ptr.c libc3/ptr.h libc3/ptr_free.c libc3/ptr_free.h libc3/queue.c libc3/queue.h libc3/quote.c libc3/quote.h libc3/ratio.c libc3/ratio.h libc3/s.c.in libc3/s.h.in libc3/s16.c libc3/s16.h libc3/s32.c libc3/s32.h libc3/s64.c libc3/s64.h libc3/s8.c libc3/s8.h libc3/sequence.c libc3/sequence.h libc3/set.c.in libc3/set.h.in libc3/set__fact.c libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item.c.in libc3/set_item.h.in libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/sha1.h libc3/sign.c libc3/sign.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/skiplist__fact.c libc3/skiplist__fact.h libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/special_operator.c libc3/special_operator.h libc3/str.c libc3/str.h libc3/struct.c libc3/struct.h libc3/struct_type.c libc3/struct_type.h libc3/sw.c libc3/sw.h libc3/sym.c libc3/sym.h libc3/tag.c libc3/tag.h libc3/tag_add.c libc3/tag_addi.c libc3/tag_band.c libc3/tag_bnot.c libc3/tag_bor.c libc3/tag_bxor.c libc3/tag_div.c libc3/tag_init.c libc3/tag_init.h libc3/tag_mod.c libc3/tag_mul.c libc3/tag_neg.c libc3/tag_shift_left.c libc3/tag_shift_right.c libc3/tag_sqrt.c libc3/tag_sub.c libc3/tag_type.c libc3/tag_type.h libc3/time.c libc3/time.h libc3/tuple.c libc3/tuple.h libc3/types.h libc3/u.c.in libc3/u.h.in libc3/u16.c libc3/u16.h libc3/u32.c libc3/u32.h libc3/u64.c libc3/u64.h libc3/u8.c libc3/u8.h libc3/ucd.c libc3/ucd.h libc3/unquote.c libc3/unquote.h libc3/uw.c libc3/uw.h libc3/var.c libc3/var.h libc3/void.c libc3/void.h test/array_test.c test/bool_test.c test/buf_file_test.c test/buf_inspect_test.c test/buf_parse_test.c test/buf_parse_test.h test/buf_parse_test_s16.c test/buf_parse_test_s32.c test/buf_parse_test_s64.c test/buf_parse_test_s8.c test/buf_parse_test_su.h test/buf_parse_test_u16.c test/buf_parse_test_u32.c test/buf_parse_test_u64.c test/buf_parse_test_u8.c test/buf_test.c test/call_test.c test/cfn_test.c test/character_test.c test/compare_test.c test/compare_test.h test/env_test.c test/fact_test.c test/fact_test.h test/facts_cursor_test.c test/facts_test.c test/facts_with_test.c test/fn_test.c test/hash_test.c test/ident_test.c test/libc3_test.c test/list_test.c test/ratio_test.c test/set__fact_test.c test/set__tag_test.c test/skiplist__fact_test.c test/str_test.c test/sym_test.c test/tag_test.c test/tag_test.h test/test.c test/test.h test/tuple_test.c test/types_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
+C3_OBJC_SOURCES=' '
+C3_OTHER_SOURCES='AUTHORS Makefile README.md c3.index c3.version config.subr configure fonts/Courier New/Courier New.ttf fonts/NotoSans-Regular.ttf img/c3.1.xcf img/c3.1080.jpg img/c3.1080.png img/c3.128.jpg img/c3.128.png img/c3.16.png img/c3.256.jpg img/c3.256.png img/c3.32.jpg img/c3.32.png img/c3.48.jpg img/c3.48.png img/c3.512.jpg img/c3.512.png img/c3.64.jpg img/c3.64.png img/c3.640.jpg img/c3.640.png img/c3.720.jpg img/c3.720.png img/c3.iconset/icon_128x128.png img/c3.iconset/icon_16x16.png img/c3.iconset/icon_256x256.png img/c3.iconset/icon_32x32.png img/c3.iconset/icon_512x512.png img/c3.iconset/icon_64x64.png img/c3.xcf img/earth.jpg img/earth.png img/flaps.256.png img/flaps.png img/fly-dead.png img/fly-noto.png img/iris-c3-004.jpeg img/iris-c3-004.png img/mandelbrot_f128_limit.1.png img/mandelbrot_f128_limit.2.png img/mandelbrot_f128_limit.3.png img/mandelbrot_f128_limit.png img/matrix_shade.png img/thodg_No_Prompt_073261d5-2c81-4b6e-9572-e0b840c55f1f.jpeg img/toast.128.png img/toast.png lib/c3/0.1/array.facts lib/c3/0.1/c3.facts lib/c3/0.1/c3/operator.facts lib/c3/0.1/complex.facts lib/c3/0.1/f128.facts lib/c3/0.1/f32.facts lib/c3/0.1/f64.facts lib/c3/0.1/gl/dvec2.facts lib/c3/0.1/gl/dvec3.facts lib/c3/0.1/gl/object.facts lib/c3/0.1/gl/sphere.facts lib/c3/0.1/gl/triangle.facts lib/c3/0.1/gl/vec2.facts lib/c3/0.1/gl/vec3.facts lib/c3/0.1/gl/vertex.facts lib/c3/0.1/integer.facts lib/c3/0.1/list.facts lib/c3/0.1/map.facts lib/c3/0.1/ptr.facts lib/c3/0.1/ptr_free.facts lib/c3/0.1/ratio.facts lib/c3/0.1/s16.facts lib/c3/0.1/s32.facts lib/c3/0.1/s64.facts lib/c3/0.1/s8.facts lib/c3/0.1/str.facts lib/c3/0.1/sw.facts lib/c3/0.1/sym.facts lib/c3/0.1/u16.facts lib/c3/0.1/u32.facts lib/c3/0.1/u64.facts lib/c3/0.1/u8.facts lib/c3/0.1/uw.facts lib/c3/0.1/var.facts lib/c3/0.1/void.facts libc3/tag_init.rb license.h sources.mk sources.sh test/buf_parse_test_su.rb test/facts_test_dump_file.expected.facts test/facts_test_load_file.facts test/facts_test_log_add.expected.facts test/facts_test_log_remove.expected.facts test/facts_test_open_file.1.expected.facts test/facts_test_open_file.1.in.facts test/facts_test_open_file.2.expected.facts test/facts_test_open_file.2.in.facts test/facts_test_open_file.3.expected.facts test/facts_test_open_file.3.in.facts test/facts_test_save.expected.facts test/ic3/array.err.expected test/ic3/array.in test/ic3/array.out.expected test/ic3/array.ret.expected test/ic3/block.in test/ic3/block.out.expected test/ic3/block.ret.expected test/ic3/bool.err.expected test/ic3/bool.in test/ic3/bool.out.expected test/ic3/bool.ret.expected test/ic3/call.err.expected test/ic3/call.in test/ic3/call.out.expected test/ic3/call.ret.expected test/ic3/cast.in test/ic3/cast.out.expected test/ic3/cast.ret.expected test/ic3/character.err.expected test/ic3/character.in test/ic3/character.out.expected test/ic3/character.ret.expected test/ic3/comment.err.expected test/ic3/comment.in test/ic3/comment.out.expected test/ic3/comment.ret.expected test/ic3/complex.in test/ic3/complex.out.expected test/ic3/complex.ret.expected test/ic3/def.in test/ic3/def.out.expected test/ic3/def.ret.expected test/ic3/defmodule.in test/ic3/defmodule.out.expected test/ic3/defmodule.ret.expected test/ic3/defoperator.in test/ic3/defoperator.out.expected test/ic3/defoperator.ret.expected test/ic3/equal.err.expected test/ic3/equal.in test/ic3/equal.out.expected test/ic3/equal.ret.expected test/ic3/fn.err.expected test/ic3/fn.in test/ic3/fn.out.expected test/ic3/fn.ret.expected test/ic3/function_call.err.expected test/ic3/function_call.out.expected test/ic3/function_call.ret.expected test/ic3/hello.err.expected test/ic3/hello.in test/ic3/hello.out.expected test/ic3/hello.ret.expected test/ic3/ident.err.expected test/ic3/ident.in test/ic3/ident.out.expected test/ic3/ident.ret.expected test/ic3/if.in test/ic3/if.out.expected test/ic3/if.ret.expected test/ic3/integer.in test/ic3/integer.lisp test/ic3/integer.out.expected test/ic3/integer.ret.expected test/ic3/integer_add.in test/ic3/integer_add.out.expected test/ic3/integer_add.ret.expected test/ic3/integer_band.in test/ic3/integer_band.out.expected test/ic3/integer_band.ret.expected test/ic3/integer_bnot.in test/ic3/integer_bnot.out.expected test/ic3/integer_bnot.ret.expected test/ic3/integer_bor-2.in test/ic3/integer_bor-2.out.expected test/ic3/integer_bor-2.ret.expected test/ic3/integer_bxor.in test/ic3/integer_bxor.out.expected test/ic3/integer_bxor.ret.expected test/ic3/integer_div.in test/ic3/integer_div.out.expected test/ic3/integer_div.ret.expected test/ic3/integer_eq.in test/ic3/integer_eq.out.expected test/ic3/integer_eq.ret.expected test/ic3/integer_gt.in test/ic3/integer_gt.out.expected test/ic3/integer_gt.ret.expected test/ic3/integer_lt.in test/ic3/integer_lt.out.expected test/ic3/integer_lt.ret.expected test/ic3/integer_mod-2.in test/ic3/integer_mod-2.out.expected test/ic3/integer_mod-2.ret.expected test/ic3/integer_mul.in test/ic3/integer_mul.out.expected test/ic3/integer_mul.ret.expected test/ic3/integer_neg.in test/ic3/integer_neg.out.expected test/ic3/integer_neg.ret.expected test/ic3/integer_sub.in test/ic3/integer_sub.out.expected test/ic3/integer_sub.ret.expected test/ic3/list.err.expected test/ic3/list.in test/ic3/list.out.expected test/ic3/list.ret.expected test/ic3/macro.in test/ic3/macro.out.expected test/ic3/macro.ret.expected test/ic3/map.in test/ic3/map.out.expected test/ic3/map.ret.expected test/ic3/op.err.expected test/ic3/op.in test/ic3/op.out.expected test/ic3/op.ret.expected test/ic3/plist.err.expected test/ic3/plist.in test/ic3/plist.out.expected test/ic3/plist.ret.expected test/ic3/quote.in test/ic3/quote.out.expected test/ic3/quote.ret.expected test/ic3/ratio.in test/ic3/ratio.out.expected test/ic3/ratio.ret.expected test/ic3/str.err.expected test/ic3/str.in test/ic3/str.out.expected test/ic3/str.ret.expected test/ic3/struct.in test/ic3/struct.out.expected test/ic3/struct.ret.expected test/ic3/sym.err.expected test/ic3/sym.in test/ic3/sym.out.expected test/ic3/sym.ret.expected test/ic3/tuple.err.expected test/ic3/tuple.in test/ic3/tuple.out.expected test/ic3/tuple.ret.expected test/ic3/var.in test/ic3/var.out.expected test/ic3/var.ret.expected test/ic3/void.in test/ic3/void.out.expected test/ic3/void.ret.expected test/ic3_test test/replace_lines.rb test/test.rb test/test_case_end.rb test/zero '
+C3_EXTERNAL_SOURCES='libtommath/LICENSE libtommath/README.md libtommath/bn_cutoffs.c libtommath/bn_deprecated.c libtommath/bn_mp_2expt.c libtommath/bn_mp_abs.c libtommath/bn_mp_add.c libtommath/bn_mp_add_d.c libtommath/bn_mp_addmod.c libtommath/bn_mp_and.c libtommath/bn_mp_clamp.c libtommath/bn_mp_clear.c libtommath/bn_mp_clear_multi.c libtommath/bn_mp_cmp.c libtommath/bn_mp_cmp_d.c libtommath/bn_mp_cmp_mag.c libtommath/bn_mp_cnt_lsb.c libtommath/bn_mp_complement.c libtommath/bn_mp_copy.c libtommath/bn_mp_count_bits.c libtommath/bn_mp_decr.c libtommath/bn_mp_div.c libtommath/bn_mp_div_2.c libtommath/bn_mp_div_2d.c libtommath/bn_mp_div_3.c libtommath/bn_mp_div_d.c libtommath/bn_mp_dr_is_modulus.c libtommath/bn_mp_dr_reduce.c libtommath/bn_mp_dr_setup.c libtommath/bn_mp_error_to_string.c libtommath/bn_mp_exch.c libtommath/bn_mp_expt_u32.c libtommath/bn_mp_exptmod.c libtommath/bn_mp_exteuclid.c libtommath/bn_mp_fread.c libtommath/bn_mp_from_sbin.c libtommath/bn_mp_from_ubin.c libtommath/bn_mp_fwrite.c libtommath/bn_mp_gcd.c libtommath/bn_mp_get_double.c libtommath/bn_mp_get_i32.c libtommath/bn_mp_get_i64.c libtommath/bn_mp_get_l.c libtommath/bn_mp_get_ll.c libtommath/bn_mp_get_mag_u32.c libtommath/bn_mp_get_mag_u64.c libtommath/bn_mp_get_mag_ul.c libtommath/bn_mp_get_mag_ull.c libtommath/bn_mp_grow.c libtommath/bn_mp_incr.c libtommath/bn_mp_init.c libtommath/bn_mp_init_copy.c libtommath/bn_mp_init_i32.c libtommath/bn_mp_init_i64.c libtommath/bn_mp_init_l.c libtommath/bn_mp_init_ll.c libtommath/bn_mp_init_multi.c libtommath/bn_mp_init_set.c libtommath/bn_mp_init_size.c libtommath/bn_mp_init_u32.c libtommath/bn_mp_init_u64.c libtommath/bn_mp_init_ul.c libtommath/bn_mp_init_ull.c libtommath/bn_mp_invmod.c libtommath/bn_mp_is_square.c libtommath/bn_mp_iseven.c libtommath/bn_mp_isodd.c libtommath/bn_mp_kronecker.c libtommath/bn_mp_lcm.c libtommath/bn_mp_log_u32.c libtommath/bn_mp_lshd.c libtommath/bn_mp_mod.c libtommath/bn_mp_mod_2d.c libtommath/bn_mp_mod_d.c libtommath/bn_mp_montgomery_calc_normalization.c libtommath/bn_mp_montgomery_reduce.c libtommath/bn_mp_montgomery_setup.c libtommath/bn_mp_mul.c libtommath/bn_mp_mul_2.c libtommath/bn_mp_mul_2d.c libtommath/bn_mp_mul_d.c libtommath/bn_mp_mulmod.c libtommath/bn_mp_neg.c libtommath/bn_mp_or.c libtommath/bn_mp_pack.c libtommath/bn_mp_pack_count.c libtommath/bn_mp_prime_fermat.c libtommath/bn_mp_prime_frobenius_underwood.c libtommath/bn_mp_prime_is_prime.c libtommath/bn_mp_prime_miller_rabin.c libtommath/bn_mp_prime_next_prime.c libtommath/bn_mp_prime_rabin_miller_trials.c libtommath/bn_mp_prime_rand.c libtommath/bn_mp_prime_strong_lucas_selfridge.c libtommath/bn_mp_radix_size.c libtommath/bn_mp_radix_smap.c libtommath/bn_mp_rand.c libtommath/bn_mp_read_radix.c libtommath/bn_mp_reduce.c libtommath/bn_mp_reduce_2k.c libtommath/bn_mp_reduce_2k_l.c libtommath/bn_mp_reduce_2k_setup.c libtommath/bn_mp_reduce_2k_setup_l.c libtommath/bn_mp_reduce_is_2k.c libtommath/bn_mp_reduce_is_2k_l.c libtommath/bn_mp_reduce_setup.c libtommath/bn_mp_root_u32.c libtommath/bn_mp_rshd.c libtommath/bn_mp_sbin_size.c libtommath/bn_mp_set.c libtommath/bn_mp_set_double.c libtommath/bn_mp_set_i32.c libtommath/bn_mp_set_i64.c libtommath/bn_mp_set_l.c libtommath/bn_mp_set_ll.c libtommath/bn_mp_set_u32.c libtommath/bn_mp_set_u64.c libtommath/bn_mp_set_ul.c libtommath/bn_mp_set_ull.c libtommath/bn_mp_shrink.c libtommath/bn_mp_signed_rsh.c libtommath/bn_mp_sqr.c libtommath/bn_mp_sqrmod.c libtommath/bn_mp_sqrt.c libtommath/bn_mp_sqrtmod_prime.c libtommath/bn_mp_sub.c libtommath/bn_mp_sub_d.c libtommath/bn_mp_submod.c libtommath/bn_mp_to_radix.c libtommath/bn_mp_to_sbin.c libtommath/bn_mp_to_ubin.c libtommath/bn_mp_ubin_size.c libtommath/bn_mp_unpack.c libtommath/bn_mp_xor.c libtommath/bn_mp_zero.c libtommath/bn_prime_tab.c libtommath/bn_s_mp_add.c libtommath/bn_s_mp_balance_mul.c libtommath/bn_s_mp_exptmod.c libtommath/bn_s_mp_exptmod_fast.c libtommath/bn_s_mp_get_bit.c libtommath/bn_s_mp_invmod_fast.c libtommath/bn_s_mp_invmod_slow.c libtommath/bn_s_mp_karatsuba_mul.c libtommath/bn_s_mp_karatsuba_sqr.c libtommath/bn_s_mp_montgomery_reduce_fast.c libtommath/bn_s_mp_mul_digs.c libtommath/bn_s_mp_mul_digs_fast.c libtommath/bn_s_mp_mul_high_digs.c libtommath/bn_s_mp_mul_high_digs_fast.c libtommath/bn_s_mp_prime_is_divisible.c libtommath/bn_s_mp_rand_jenkins.c libtommath/bn_s_mp_rand_platform.c libtommath/bn_s_mp_reverse.c libtommath/bn_s_mp_sqr.c libtommath/bn_s_mp_sqr_fast.c libtommath/bn_s_mp_sub.c libtommath/bn_s_mp_toom_mul.c libtommath/bn_s_mp_toom_sqr.c libtommath/demo/mtest_opponent.c libtommath/demo/shared.c libtommath/demo/shared.h libtommath/demo/test.c libtommath/demo/timing.c libtommath/etc/2kprime.c libtommath/etc/drprime.c libtommath/etc/mersenne.c libtommath/etc/mont.c libtommath/etc/pprime.c libtommath/etc/tune.c libtommath/mtest/logtab.h libtommath/mtest/mpi-config.h libtommath/mtest/mpi-types.h libtommath/mtest/mpi.c libtommath/mtest/mpi.h libtommath/mtest/mtest.c libtommath/tommath.h libtommath/tommath_class.h libtommath/tommath_cutoffs.h libtommath/tommath_private.h libtommath/tommath_superclass.h linenoise/LICENSE linenoise/Makefile linenoise/README.markdown linenoise/example.c linenoise/linenoise.c linenoise/linenoise.h ucd2c/Makefile ucd2c/UCD.zip ucd2c/UCD/ArabicShaping.txt ucd2c/UCD/BidiBrackets.txt ucd2c/UCD/BidiCharacterTest.txt ucd2c/UCD/BidiMirroring.txt ucd2c/UCD/BidiTest.txt ucd2c/UCD/Blocks.txt ucd2c/UCD/CJKRadicals.txt ucd2c/UCD/CaseFolding.txt ucd2c/UCD/CompositionExclusions.txt ucd2c/UCD/DerivedAge.txt ucd2c/UCD/DerivedCoreProperties.txt ucd2c/UCD/DerivedNormalizationProps.txt ucd2c/UCD/EastAsianWidth.txt ucd2c/UCD/EmojiSources.txt ucd2c/UCD/EquivalentUnifiedIdeograph.txt ucd2c/UCD/HangulSyllableType.txt ucd2c/UCD/Index.txt ucd2c/UCD/IndicPositionalCategory.txt ucd2c/UCD/IndicSyllabicCategory.txt ucd2c/UCD/Jamo.txt ucd2c/UCD/LineBreak.txt ucd2c/UCD/NameAliases.txt ucd2c/UCD/NamedSequences.txt ucd2c/UCD/NamedSequencesProv.txt ucd2c/UCD/NamesList.html ucd2c/UCD/NamesList.txt ucd2c/UCD/NormalizationCorrections.txt ucd2c/UCD/NormalizationTest.txt ucd2c/UCD/NushuSources.txt ucd2c/UCD/PropList.txt ucd2c/UCD/PropertyAliases.txt ucd2c/UCD/PropertyValueAliases.txt ucd2c/UCD/ReadMe.txt ucd2c/UCD/ScriptExtensions.txt ucd2c/UCD/Scripts.txt ucd2c/UCD/SpecialCasing.txt ucd2c/UCD/StandardizedVariants.txt ucd2c/UCD/TangutSources.txt ucd2c/UCD/USourceData.txt ucd2c/UCD/USourceGlyphs.pdf ucd2c/UCD/USourceRSChart.pdf ucd2c/UCD/UnicodeData.txt ucd2c/UCD/VerticalOrientation.txt ucd2c/UCD/auxiliary/GraphemeBreakProperty.txt ucd2c/UCD/auxiliary/GraphemeBreakTest.html ucd2c/UCD/auxiliary/GraphemeBreakTest.txt ucd2c/UCD/auxiliary/LineBreakTest.html ucd2c/UCD/auxiliary/LineBreakTest.txt ucd2c/UCD/auxiliary/SentenceBreakProperty.txt ucd2c/UCD/auxiliary/SentenceBreakTest.html ucd2c/UCD/auxiliary/SentenceBreakTest.txt ucd2c/UCD/auxiliary/WordBreakProperty.txt ucd2c/UCD/auxiliary/WordBreakTest.html ucd2c/UCD/auxiliary/WordBreakTest.txt ucd2c/UCD/emoji/ReadMe.txt ucd2c/UCD/emoji/emoji-data.txt ucd2c/UCD/emoji/emoji-variation-sequences.txt ucd2c/UCD/extracted/DerivedBidiClass.txt ucd2c/UCD/extracted/DerivedBinaryProperties.txt ucd2c/UCD/extracted/DerivedCombiningClass.txt ucd2c/UCD/extracted/DerivedDecompositionType.txt ucd2c/UCD/extracted/DerivedEastAsianWidth.txt ucd2c/UCD/extracted/DerivedGeneralCategory.txt ucd2c/UCD/extracted/DerivedJoiningGroup.txt ucd2c/UCD/extracted/DerivedJoiningType.txt ucd2c/UCD/extracted/DerivedLineBreak.txt ucd2c/UCD/extracted/DerivedName.txt ucd2c/UCD/extracted/DerivedNumericType.txt ucd2c/UCD/extracted/DerivedNumericValues.txt ucd2c/config.mk ucd2c/configure ucd2c/license.txt ucd2c/ucd.c ucd2c/ucd.h ucd2c/ucd2c ucd2c/ucd2c.c ucd2c/ucd2c.main.lo ucd2c/ucd2c.main.o '
diff --git a/test/env_test.c b/test/env_test.c
index b80334e..8624f08 100644
--- a/test/env_test.c
+++ b/test/env_test.c
@@ -24,6 +24,7 @@ TEST_CASE_PROTOTYPE(env_eval_call);
TEST_CASE_PROTOTYPE(env_eval_equal_tag);
TEST_CASE_PROTOTYPE(env_eval_tag);
TEST_CASE_PROTOTYPE(env_init_clean);
+TEST_CASE_PROTOTYPE(env_module_load);
void env_test (void)
{
@@ -31,6 +32,7 @@ void env_test (void)
TEST_CASE_RUN(env_eval_equal_tag);
TEST_CASE_RUN(env_eval_call);
TEST_CASE_RUN(env_eval_tag);
+ TEST_CASE_RUN(env_module_load);
}
TEST_CASE(env_eval_call)
@@ -157,3 +159,12 @@ TEST_CASE(env_init_clean)
env_clean(&env);
}
TEST_CASE_END(env_init_clean)
+
+TEST_CASE(env_module_load)
+{
+ s_env env;
+ env_init(&env, 0, NULL);
+ TEST_ASSERT(env_module_load(&env, sym_1("List"), &env.facts));
+ env_clean(&env);
+}
+TEST_CASE_END(env_module_load)
diff --git a/test/ic3/call.in b/test/ic3/call.in
index e14bbc4..c865ba5 100644
--- a/test/ic3/call.in
+++ b/test/ic3/call.in
@@ -7,7 +7,8 @@ quote Test.test(1)
quote Test.test(1, 2)
quote Test.test(1, 2, 3)
quote first([1, 2])
-quote C3.first([1, 2])
first([1, 2])
+quote C3.first([2, 3])
C3.first([2, 3])
+quote (1 + 2)
(1 + 2)
diff --git a/test/ic3/call.out.expected b/test/ic3/call.out.expected
index 3629d81..4b80ad7 100644
--- a/test/ic3/call.out.expected
+++ b/test/ic3/call.out.expected
@@ -7,7 +7,8 @@ Test.test(1)
Test.test(1, 2)
Test.test(1, 2, 3)
first([1, 2])
-first([1, 2])
1
+first([2, 3])
2
+(1 + 2)
3
diff --git a/test/ic3/defmodule.out.expected b/test/ic3/defmodule.out.expected
index a240053..de6736f 100644
--- a/test/ic3/defmodule.out.expected
+++ b/test/ic3/defmodule.out.expected
@@ -23,6 +23,6 @@ Plop
Plop.a
1
Plop.b
-fn () { Plop.a }
+Plop.fn () { a }
Plop.b()
1
diff --git a/test/tag_test.c b/test/tag_test.c
index 534aa18..fadad79 100644
--- a/test/tag_test.c
+++ b/test/tag_test.c
@@ -19,8 +19,11 @@
#define TAG_TEST_HASH_U64_COMPARE(a, b, expected) \
do { \
- TEST_EQ(compare_u64(tag_hash_u64(a), tag_hash_u64(b)), \
- (expected)); \
+ u64 hash_a; \
+ u64 hash_b; \
+ TEST_EQ(tag_hash_u64(a, &hash_a), &hash_a); \
+ TEST_EQ(tag_hash_u64(b, &hash_b), &hash_b); \
+ TEST_EQ(compare_u64(hash_a, hash_b), (expected)); \
} while (0)
void tag_test (void);
diff --git a/update_sources b/update_sources
index ad25599..9b23033 100755
--- a/update_sources
+++ b/update_sources
@@ -53,7 +53,7 @@ update_sources_sh
( cd libtommath && ./update_sources; )
( cd libc3 && ./update_sources; )
-( cd libc3_window && ./update_sources; )
( cd ic3 && ./update_sources; )
( cd c3s && ./update_sources; )
( cd test && ./update_sources; )
+( cd libc3_window && ./update_sources; )