diff --git a/.gitignore b/.gitignore
index 6975d4c..d86f2fe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,6 +80,9 @@ libkc3_window/sdl2/demo/macos/kc3_window_sdl2_demo_debug.app/
macos/kc3-v*
*.o
release/
+.test
+.test_ko
+.test_ok
test/ekc3/*.diff
test/ekc3/*.err
test/ekc3/*.out
diff --git a/.ikc3_history b/.ikc3_history
index 2b46967..7b5fdad 100644
--- a/.ikc3_history
+++ b/.ikc3_history
@@ -1,12 +1,3 @@
-end
-List.last([1, 2, 3, 4])
-[x, y | z] = List.reverse([1, 2, 3])
-x
-y
-z
-[x, y | z] = List.reverse([1, 2, 3, 4])
-x
-y
z
if true then true end
if 42 then true end
@@ -97,3 +88,12 @@ i = type(-32767)
-32768 * 65536 + 1
-2147483648 * 65536 * 65536 + 1
q
+%KC3.Operator{}
+%KC3.Operator{sym: :-}
+op = %KC3.Operator{sym: :-}
+op.sym
+op = %{id: 1, sym: :-}
+op.id
+type(op.id)
+type(op.sym)
+(Str) op.sym
diff --git a/Makefile b/Makefile
index d91381c..f3a09d3 100644
--- a/Makefile
+++ b/Makefile
@@ -158,6 +158,10 @@ gdb_test_ekc3:
${MAKE} debug
${MAKE} -C test gdb_test_ekc3
+gdb_test_http:
+ ${MAKE} debug
+ ${MAKE} -C test gdb_test_http
+
gen:
${MAKE} -C libkc3 gen
@@ -280,16 +284,60 @@ test_gcovr:
${MAKE} test_ekc3_cov
${MAKE} gcovr
-test_ikc3: build
+test_http:
+ ${MAKE} -C libtommath build
+ ${MAKE} -C libkc3 build
+ ${MAKE} -C ikc3 build
+ ${MAKE} -C kc3s build
+ ${MAKE} -C http build
+ ${MAKE} -C test test_http
+
+test_http_asan:
+ ${MAKE} -C libtommath asan
+ ${MAKE} -C libkc3 asan
+ ${MAKE} -C ikc3 asan
+ ${MAKE} -C kc3s asan
+ ${MAKE} -C http asan
+ ${MAKE} -C test test_http_asan
+
+test_http_cov:
+ ${MAKE} -C libtommath cov
+ ${MAKE} -C libkc3 cov
+ ${MAKE} -C ikc3 cov
+ ${MAKE} -C kc3s cov
+ ${MAKE} -C http cov
+ ${MAKE} -C test test_http_cov
+
+test_http_debug:
+ ${MAKE} -C libtommath debug
+ ${MAKE} -C libkc3 debug
+ ${MAKE} -C ikc3 debug
+ ${MAKE} -C kc3s debug
+ ${MAKE} -C http debug
+ ${MAKE} -C test test_http_debug
+
+test_ikc3:
+ ${MAKE} -C libtommath build
+ ${MAKE} -C libkc3 build
+ ${MAKE} -C ikc3 build
${MAKE} -C test test_ikc3
-test_ikc3_asan: asan
+test_ikc3_asan:
+ ${MAKE} -C libtommath asan
+ ${MAKE} -C libkc3 asan
+ ${MAKE} -C ikc3 asan
${MAKE} -C test test_ikc3_asan
-test_ikc3_cov: cov
+test_ikc3_cov:
+ ${MAKE} -C libtommath cov
+ ${MAKE} -C libkc3 cov
+ ${MAKE} -C ikc3 cov
${MAKE} -C test test_ikc3_cov
-test_ikc3_debug: debug
+test_ikc3_debug:
+ ${MAKE} -C libtommath debug
+ ${MAKE} -C libkc3 debug
+ ${MAKE} -C ikc3 debug
${MAKE} -C test test_ikc3_debug
test_libkc3: build
diff --git a/http/socket.c b/http/socket.c
index 271c7ce..c2791d0 100644
--- a/http/socket.c
+++ b/http/socket.c
@@ -23,7 +23,7 @@ void socket_close (p_socket s)
{
assert(s);
close(*s);
- *s = 0;
+ *s = -1;
}
p_socket socket_init_accept (p_socket s, p_socket listening)
@@ -101,7 +101,6 @@ p_socket socket_init_listen (p_socket s, const s_str *host, u16 port)
err_write_1("socket_init_listen: bind: ");
err_puts(strerror(e));
assert(! "socket_init_listen: bind");
- socket_clean(&tmp);
return NULL;
}
if (listen(tmp, SOMAXCONN) < 0) {
@@ -109,7 +108,6 @@ p_socket socket_init_listen (p_socket s, const s_str *host, u16 port)
err_write_1("socket_init_listen: listen: ");
err_puts(strerror(e));
assert(! "socket_init_listen: listen");
- socket_clean(&tmp);
free(addr);
return NULL;
}
diff --git a/lib/kc3/0.1/http.kc3 b/lib/kc3/0.1/http.kc3
index 042a51f..46f0992 100644
--- a/lib/kc3/0.1/http.kc3
+++ b/lib/kc3/0.1/http.kc3
@@ -8,6 +8,7 @@ defmodule Socket do
def close = cfn Void "socket_close" (Socket)
+ # listen : Str host, U16 port
def listen = cfn Socket "socket_init_listen" (Result, Str, U16)
end
diff --git a/libkc3/buf.c b/libkc3/buf.c
index 391dd7d..ead3d77 100644
--- a/libkc3/buf.c
+++ b/libkc3/buf.c
@@ -162,6 +162,8 @@ sw buf_ignore_spaces (s_buf *buf)
if ((r = buf_ignore(buf, csize)) < 0)
return r;
result += csize;
+ if (c == '\n')
+ buf->line++;
}
if (! result && r < 0)
return r;
@@ -191,7 +193,7 @@ s_buf * buf_init (s_buf *buf, bool p_free, uw size, char *p)
s_buf tmp = {0};
assert(buf);
tmp.free = p_free;
- tmp.line = -1;
+ tmp.line = 0;
tmp.ptr.pchar = p;
tmp.size = size;
*buf = tmp;
@@ -949,6 +951,13 @@ sw buf_vf (s_buf *buf, const char *fmt, va_list ap)
return r;
}
+sw buf_write (s_buf *buf, const void *data, uw len)
+{
+ s_str str;
+ str_init(&str, NULL, len, data);
+ return buf_write_str(buf, &str);
+}
+
sw buf_write_1 (s_buf *buf, const char *p)
{
s_str stra;
diff --git a/libkc3/buf.h b/libkc3/buf.h
index 4df6214..90a0e05 100644
--- a/libkc3/buf.h
+++ b/libkc3/buf.h
@@ -90,6 +90,7 @@ sw buf_str_to_hex_size (const s_str *src);
sw buf_u8_to_hex (s_buf *buf, const u8 *x);
sw buf_u8_to_hex_size (const u8 *x);
sw buf_vf (s_buf *buf, const char *fmt, va_list ap);
+sw buf_write (s_buf *buf, const void *data, uw len);
sw buf_write_1 (s_buf *buf, const char *p);
sw buf_write_character_utf8 (s_buf *buf, character c);
sw buf_write_f32 (s_buf *buf, f32 x);
diff --git a/libkc3/buf_parse.c b/libkc3/buf_parse.c
index 004d338..7b3b765 100644
--- a/libkc3/buf_parse.c
+++ b/libkc3/buf_parse.c
@@ -408,35 +408,36 @@ sw buf_parse_block (s_buf *buf, s_block *block)
{
sw r;
sw result = 0;
- s_buf_save save;
bool short_form = false;
assert(buf);
assert(block);
- buf_save_init(buf, &save);
if ((r = buf_read_sym(buf, &g_sym_do)) < 0)
- goto clean;
+ return r;
if (! r) {
short_form = true;
if ((r = buf_read_1(buf, "{")) <= 0)
- goto clean;
+ return r;
}
result += r;
- if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ if ((r = buf_parse_comments(buf)) < 0) {
+ err_puts("buf_parse_block: buf_parse_comments");
+ assert(! "buf_parse_block: buf_parse_comments");
+ return r;
+ }
result += r;
- if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ if ((r = buf_ignore_spaces(buf)) < 0) {
+ err_puts("buf_parse_block: buf_ignore_spaces");
+ assert(! "buf_parse_block: buf_ignore_spaces");
+ return r;
+ }
result += r;
- if ((r = buf_parse_block_inner(buf, short_form, block)) <= 0)
- goto restore;
+ if ((r = buf_parse_block_inner(buf, short_form, block)) <= 0) {
+ err_puts("buf_parse_block: buf_parse_block_inner");
+ assert(! "buf_parse_block: buf_parse_block_inner");
+ return r;
+ }
result += r;
- r = result;
- goto clean;
- restore:
- buf_save_restore_rpos(buf, &save);
- clean:
- buf_save_clean(buf, &save);
- return r;
+ return result;
}
sw buf_parse_block_inner (s_buf *buf, bool short_form, s_block *block)
@@ -448,57 +449,109 @@ sw buf_parse_block_inner (s_buf *buf, bool short_form, s_block *block)
s_list *list = 0;
sw r;
sw result = 0;
- s_buf_save save;
+ s_tag tag;
s_block tmp;
- buf_save_init(buf, &save);
i = &list;
*i = NULL;
while (1) {
if (short_form) {
- if ((r = buf_read_1(buf, "}")) < 0)
- goto restore;
+ if ((r = buf_read_1(buf, "}")) < 0) {
+ err_puts("buf_parse_block_inner: buf_read_1 \"}\"");
+ assert(! "buf_parse_block_inner: buf_read_1 \"}\"");
+ goto clean;
+ }
+ }
+ else if ((r = buf_read_sym(buf, &g_sym_end)) < 0) {
+ err_puts("buf_parse_block_inner: buf_read_sym :end");
+ assert(! "buf_parse_block_inner: buf_read_sym :end");
+ goto clean;
}
- else
- if ((r = buf_read_sym(buf, &g_sym_end)) < 0)
- goto restore;
if (r > 0)
goto ok;
- *i = list_new(NULL);
- if ((r = buf_parse_tag(buf, &(*i)->tag)) <= 0)
- goto restore;
+ if ((r = buf_parse_tag(buf, &tag)) < 0) {
+ err_puts("buf_parse_block_inner: buf_parse_tag < 0");
+ assert(! "buf_parse_block_inner: buf_parse_tag < 0");
+ goto clean;
+ }
result += r;
- if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ if (r > 0) {
+ *i = list_new(NULL);
+ if (! *i) {
+ err_puts("buf_parse_block_inner: list_new");
+ assert(! "buf_parse_block_inner: list_new");
+ goto clean;
+ }
+ (*i)->tag = tag;
+ i = &(*i)->next.data.list;
+ }
+ if ((r = buf_parse_comments(buf)) < 0) {
+ err_puts("buf_parse_block_inner: buf_parse_comments 1");
+ assert(! "buf_parse_block_inner: buf_parse_comments 1");
+ goto clean;
+ }
result += r;
- if ((r = buf_ignore_spaces_but_newline(buf)) < 0)
- goto restore;
+ if ((r = buf_ignore_spaces_but_newline(buf)) < 0) {
+ err_puts("buf_parse_block_inner:"
+ " buf_ignore_spaces_but_newline 1");
+ assert(!("buf_parse_block_inner:"
+ " buf_ignore_spaces_but_newline 1"));
+ goto clean;
+ }
result += r;
if (short_form) {
- if ((r = buf_read_1(buf, "}")) < 0)
- goto restore;
+ if ((r = buf_read_1(buf, "}")) < 0) {
+ err_puts("buf_parse_block_inner: buf_read_1 \"}\" < 0");
+ assert(! "buf_parse_block_inner: buf_read_1 \"}\" < 0");
+ goto clean;
+ }
+ }
+ else if ((r = buf_read_sym(buf, &g_sym_end)) < 0) {
+ err_puts("buf_parse_block_inner: buf_read_sym :end < 0");
+ assert(! "buf_parse_block_inner: buf_read_sym :end < 0");
+ goto clean;
}
- else
- if ((r = buf_read_sym(buf, &g_sym_end)) < 0)
- goto restore;
if (r > 0)
goto ok;
- if ((r = buf_read_1(buf, "\n")) < 0 ||
- (! r && (r = buf_read_1(buf, ";")) <= 0))
- goto restore;
+ if ((r = buf_read_1(buf, "\n")) < 0) {
+ err_write_1("buf_parse_block_inner: line ");
+ err_inspect_sw(&buf->line);
+ err_puts(": missing separator: ");
+ err_inspect_buf(buf);
+ err_write_1("\n");
+ assert(! "buf_parse_block_inner: missing separator");
+ goto clean;
+ }
+ if (! r) {
+ if ((r = buf_read_1(buf, ";")) <= 0) {
+ err_write_1("buf_parse_block_inner: line ");
+ err_inspect_sw(&buf->line);
+ err_puts(": missing separator: ");
+ err_inspect_buf(buf);
+ err_write_1("\n");
+ assert(! "buf_parse_block_inner: missing separator");
+ goto clean;
+ }
+ }
+ else
+ buf->line++;
result += r;
- if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ if ((r = buf_parse_comments(buf)) < 0) {
+ err_puts("buf_parse_block_inner: buf_parse_comments 2");
+ assert(! "buf_parse_block_inner: buf_parse_comments 2");
+ goto clean;
+ }
result += r;
- if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ if ((r = buf_ignore_spaces_but_newline(buf)) < 0) {
+ err_puts("buf_parse_block_inner:"
+ " buf_ignore_spaces_but_newline 2");
+ assert(!("buf_parse_block_inner:"
+ " buf_ignore_spaces_but_newline 2"));
+ goto clean;
+ }
result += r;
- i = &(*i)->next.data.list;
}
r = 0;
- restore:
- buf_save_restore_rpos(buf, &save);
clean:
- buf_save_clean(buf, &save);
if (list)
list_delete_all(list);
return r;
@@ -507,7 +560,7 @@ sw buf_parse_block_inner (s_buf *buf, bool short_form, s_block *block)
j = list_length(list);
if (! block_init(&tmp, j)) {
r = -2;
- goto restore;
+ goto clean;
}
k = list;
l = 0;
@@ -1702,36 +1755,30 @@ sw buf_parse_fn_clause (s_buf *buf, s_fn_clause *dest)
{
sw r;
sw result = 0;
- s_buf_save save;
s_fn_clause tmp;
assert(buf);
assert(dest);
- buf_save_init(buf, &save);
fn_clause_init(&tmp, NULL);
if ((r = buf_parse_fn_pattern(buf, &tmp.pattern)) <= 0) {
err_puts("buf_parse_fn: invalid pattern");
- goto restore;
+ goto clean;
}
result += r;
tmp.arity = list_length(tmp.pattern);
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto clean;
result += r;
if ((r = buf_parse_block(buf, &tmp.algo)) <= 0) {
buf_inspect_fn_clause(&g_kc3_env.err, &tmp);
buf_flush(&g_kc3_env.err);
err_puts("buf_parse_fn: invalid program");
- goto restore;
+ goto clean;
}
result += r;
*dest = tmp;
- r = result;
- goto clean;
- restore:
- fn_clause_clean(&tmp);
- buf_save_restore_rpos(buf, &save);
+ return result;
clean:
- buf_save_clean(buf, &save);
+ fn_clause_clean(&tmp);
return r;
}
@@ -1739,59 +1786,53 @@ sw buf_parse_fn_pattern (s_buf *buf, s_list **dest)
{
sw r;
sw result = 0;
- s_buf_save save;
s_tag tag;
s_list *tmp = NULL;
s_list **tail = &tmp;
assert(buf);
assert(dest);
- buf_save_init(buf, &save);
if ((r = buf_read_1(buf, "(")) < 0)
goto clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto clean;
result += r;
if ((r = buf_read_1(buf, ")")) < 0)
- goto restore;
+ goto clean;
if (r) {
result += r;
goto ok;
}
while (1) {
if ((r = buf_parse_tag(buf, &tag)) <= 0)
- goto restore;
+ goto clean;
result += r;
*tail = list_new(NULL);
(*tail)->tag = tag;
tail = &(*tail)->next.data.list;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto clean;
result += r;
if ((r = buf_read_1(buf, ",")) < 0)
- goto restore;
+ goto clean;
result += r;
if (! r) {
if ((r = buf_read_1(buf, ")")) < 0)
- goto restore;
+ goto clean;
if (r) {
result += r;
goto ok;
}
}
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto clean;
result += r;
}
ok:
*dest = tmp;
- r = result;
- goto clean;
- restore:
- buf_save_restore_rpos(buf, &save);
- list_delete_all(tmp);
+ return result;
clean:
- buf_save_clean(buf, &save);
+ list_delete_all(tmp);
return r;
}
@@ -1904,10 +1945,8 @@ sw buf_parse_if (s_buf *buf, s_call *dest)
sw result = 0;
s_tag *then;
s_call tmp = {0};
- s_buf_save save;
assert(buf);
assert(dest);
- buf_save_init(buf, &save);
if ((r = buf_read_1(buf, "if")) <= 0)
goto clean;
result += r;
@@ -1957,9 +1996,8 @@ sw buf_parse_if (s_buf *buf, s_call *dest)
goto clean;
restore:
call_clean(&tmp);
- buf_save_restore_rpos(buf, &save);
+ r = -1;
clean:
- buf_save_clean(buf, &save);
return r;
}
@@ -2289,185 +2327,197 @@ sw buf_parse_integer_unsigned_oct (s_buf *buf, s_integer *dest)
sw buf_parse_list (s_buf *buf, s_list **list)
{
+ u8 b;
s_list **i;
sw r;
sw result = 0;
- s_buf_save save;
- buf_save_init(buf, &save);
i = list;
if ((r = buf_read_1(buf, "[")) <= 0)
- goto clean;
+ return r;
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ return r;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ return r;
result += r;
if ((r = buf_read_1(buf, "]")) < 0)
- goto restore;
+ return r;
if (r > 0) {
result += r;
*list = NULL;
- r = result;
- goto clean;
+ return result;
}
*i = NULL;
while (1) {
*i = list_new(NULL);
- if ((r = buf_parse_list_tag(buf, &(*i)->tag)) <= 0)
- goto restore;
+ if ((r = buf_parse_list_tag(buf, &(*i)->tag)) < 0)
+ goto eat_and_clean;
+ if (! r) {
+ r = -1;
+ goto eat_and_clean;
+ }
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_read_1(buf, "]")) < 0)
- goto restore;
+ goto eat_and_clean;
if (r > 0) {
result += r;
- r = result;
- goto clean;
+ return result;
}
if ((r = buf_read_1(buf, ",")) < 0)
- goto restore;
+ goto eat_and_clean;
if (r > 0) {
result += r;
i = &(*i)->next.data.list;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
continue;
}
if ((r = buf_read_1(buf, "|")) < 0)
- goto restore;
+ goto eat_and_clean;
if (r > 0) {
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
- if ((r = buf_parse_tag(buf, &(*i)->next)) <= 0)
- goto restore;
+ if ((r = buf_parse_tag(buf, &(*i)->next)) < 0)
+ goto eat_and_clean;
+ if (! r) {
+ r = -1;
+ goto eat_and_clean;
+ }
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
- if ((r = buf_read_1(buf, "]")) <= 0)
- goto restore;
+ if ((r = buf_read_1(buf, "]")) < 0)
+ goto eat_and_clean;
+ if (! r) {
+ r = -1;
+ goto eat_and_clean;
+ }
result += r;
- r = result;
- goto clean;
+ return result;
}
- goto restore;
+ r = -1;
+ goto eat_and_clean;
}
- restore:
- list_delete_all(*list);
- buf_save_restore_rpos(buf, &save);
+ eat_and_clean:
+ while (1)
+ if ((r = buf_read_u8(buf, &b)) < 0 ||
+ (r && b == ']') ||
+ ! r)
+ goto clean;
clean:
- buf_save_clean(buf, &save);
+ list_delete_all(*list);
return r;
}
sw buf_parse_list_paren (s_buf *buf, s_list **list)
{
+ u8 b;
s_list **i;
sw r;
sw result = 0;
- s_buf_save save;
- buf_save_init(buf, &save);
i = list;
if ((r = buf_read_1(buf, "(")) <= 0)
- goto clean;
+ return r;
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ return r;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ return r;
result += r;
if ((r = buf_read_1(buf, ")")) < 0)
- goto restore;
+ return r;
if (r > 0) {
result += r;
*list = NULL;
- r = result;
- goto clean;
+ return result;
}
*i = NULL;
while (1) {
*i = list_new(NULL);
if ((r = buf_parse_tag(buf, &(*i)->tag)) <= 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_read_1(buf, ")")) < 0)
- goto restore;
+ goto eat_and_clean;
if (r > 0) {
result += r;
- r = result;
- goto clean;
+ return result;
}
if ((r = buf_read_1(buf, ",")) < 0)
- goto restore;
+ goto eat_and_clean;
if (r > 0) {
result += r;
i = &(*i)->next.data.list;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
continue;
}
if ((r = buf_read_1(buf, "|")) < 0)
- goto restore;
+ goto eat_and_clean;
if (r > 0) {
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_parse_tag(buf, &(*i)->next)) <= 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_parse_comments(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_ignore_spaces(buf)) < 0)
- goto restore;
+ goto eat_and_clean;
result += r;
if ((r = buf_read_1(buf, ")")) <= 0)
- goto restore;
+ goto eat_and_clean;
result += r;
r = result;
goto clean;
}
- goto restore;
+ goto eat_and_clean;
}
- restore:
- list_delete_all(*list);
- buf_save_restore_rpos(buf, &save);
+ eat_and_clean:
+ while (1)
+ if ((r = buf_read_u8(buf, &b)) < 0 ||
+ (r && b == ')') ||
+ ! r)
+ goto clean;
clean:
- buf_save_clean(buf, &save);
+ list_delete_all(*list);
return r;
}
diff --git a/libkc3/buf_save.c b/libkc3/buf_save.c
index 69b7f04..3db3356 100644
--- a/libkc3/buf_save.c
+++ b/libkc3/buf_save.c
@@ -27,6 +27,7 @@ s_buf * buf_save_init (s_buf *buf, s_buf_save *save)
{
assert(buf);
assert(save);
+ save->line = buf->line;
save->rpos = buf->rpos;
save->wpos = buf->wpos;
save->next = buf->save;
@@ -67,6 +68,7 @@ s_buf * buf_save_restore_rpos (s_buf *buf, const s_buf_save *save)
assert(buf);
assert(save);
assert(buf->save == save);
+ buf->line = save->line;
buf->rpos = save->rpos;
return buf;
}
@@ -76,6 +78,7 @@ s_buf * buf_save_restore_wpos (s_buf *buf, const s_buf_save *save)
assert(buf);
assert(save);
assert(buf->save == save);
+ buf->line = save->line;
buf->wpos = save->wpos;
return buf;
}
diff --git a/libkc3/env.c b/libkc3/env.c
index 221cacb..bf73031 100644
--- a/libkc3/env.c
+++ b/libkc3/env.c
@@ -269,7 +269,7 @@ const s_sym * env_def_clean (s_env *env, const s_sym *module,
return module;
}
-s_tag * env_defmodule (s_env *env, const s_sym **name,
+s_tag * env_defmodule (s_env *env, const s_sym * const *name,
const s_block *block, s_tag *dest)
{
const s_sym *module;
@@ -303,10 +303,11 @@ s_tag * env_defmodule (s_env *env, const s_sym **name,
return result;
}
-s_tag * env_defoperator (s_env *env, const s_sym **name,
- const s_sym **sym, const s_tag *symbol_value,
- u8 operator_precedence,
- const s_sym **operator_associativity,
+s_tag * env_defoperator (s_env *env, const s_sym * const *name,
+ const s_sym * const *sym,
+ const s_tag *symbol_value,
+ u8 op_precedence,
+ const s_sym * const *op_assoc,
s_tag *dest)
{
s8 arity;
@@ -319,10 +320,10 @@ s_tag * env_defoperator (s_env *env, const s_sym **name,
s_tag tag_arity_sym;
s_tag tag_arity_u8;
s_tag tag_symbol_value;
- s_tag tag_operator_precedence_sym;
- s_tag tag_operator_precedence_u8;
- s_tag tag_operator_associativity_rel;
- s_tag tag_operator_associativity_value;
+ s_tag tag_op_precedence_sym;
+ s_tag tag_op_precedence_u8;
+ s_tag tag_op_assoc_rel;
+ s_tag tag_op_assoc_value;
tag_init_sym(&tag_module_name, env->current_defmodule);
tag_init_sym(&tag_operator, &g_sym_operator);
tag_ident.type = TAG_IDENT;
@@ -341,13 +342,13 @@ s_tag * env_defoperator (s_env *env, const s_sym **name,
};
tag_init_u8( &tag_arity_u8, arity);
tag_init_sym(&tag_symbol_value, &g_sym_symbol_value);
- tag_init_sym(&tag_operator_precedence_sym,
+ tag_init_sym(&tag_op_precedence_sym,
&g_sym_operator_precedence);
- tag_init_u8( &tag_operator_precedence_u8, operator_precedence);
- tag_init_sym(&tag_operator_associativity_rel,
+ tag_init_u8( &tag_op_precedence_u8, op_precedence);
+ tag_init_sym(&tag_op_assoc_rel,
&g_sym_operator_associativity);
- tag_init_sym(&tag_operator_associativity_value,
- *operator_associativity);
+ tag_init_sym(&tag_op_assoc_value,
+ *op_assoc);
facts_add_tags(&env->facts, &tag_module_name, &tag_operator,
&tag_ident);
facts_replace_tags(&env->facts, &tag_ident, &tag_is_a, &tag_operator);
@@ -357,11 +358,11 @@ s_tag * env_defoperator (s_env *env, const s_sym **name,
facts_replace_tags(&env->facts, &tag_ident, &tag_symbol_value,
symbol_value);
facts_replace_tags(&env->facts, &tag_ident,
- &tag_operator_precedence_sym,
- &tag_operator_precedence_u8);
+ &tag_op_precedence_sym,
+ &tag_op_precedence_u8);
facts_replace_tags(&env->facts, &tag_ident,
- &tag_operator_associativity_rel,
- &tag_operator_associativity_value);
+ &tag_op_assoc_rel,
+ &tag_op_assoc_value);
*dest = tag_ident;
return dest;
}
diff --git a/libkc3/env.h b/libkc3/env.h
index 5173f4c..167a781 100644
--- a/libkc3/env.h
+++ b/libkc3/env.h
@@ -45,13 +45,13 @@ bool env_sym_search_modules (s_env *env,
s_tag * env_def (s_env *env, const s_call *call, s_tag *dest);
const s_sym * env_def_clean (s_env *env, const s_sym *module,
const s_tag *tag_clean);
-s_tag * env_defmodule (s_env *env, const s_sym **name,
+s_tag * env_defmodule (s_env *env, const s_sym * const *name,
const s_block *block, s_tag *dest);
-s_tag * env_defoperator (s_env *env, const s_sym **name,
- const s_sym **sym,
+s_tag * env_defoperator (s_env *env, const s_sym * const *name,
+ const s_sym * const *sym,
const s_tag *symbol_value,
- u8 operator_precedence,
- const s_sym **operator_associativity,
+ u8 op_precedence,
+ const s_sym * const *op_assoc,
s_tag *dest);
const s_sym * env_defstruct (s_env *env, const s_list *spec);
bool env_eval_array (s_env *env, const s_array *array,
diff --git a/libkc3/inspect.c b/libkc3/inspect.c
new file mode 100644
index 0000000..d446e08
--- /dev/null
+++ b/libkc3/inspect.c
@@ -0,0 +1,51 @@
+/* kc3
+ * Copyright 2022,2023,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 "assert.h"
+#include "buf.h"
+#include "buf_inspect.h"
+#include "inspect.h"
+
+s_str * inspect_sym (const s_sym *sym, s_str *dest)
+{
+ sw size;
+ s_buf tmp;
+ size = buf_inspect_sym_size(&sym);
+ if (size < 0) {
+ assert(! "error");
+ return NULL;
+ }
+ buf_init_alloc(&tmp, size);
+ buf_inspect_sym(&tmp, &sym);
+ assert(tmp.wpos == tmp.size);
+ return buf_to_str(&tmp, dest);
+}
+
+s_str * inspect_tag (const s_tag *tag, s_str *dest)
+{
+ s_buf buf;
+ sw size;
+ assert(tag);
+ assert(dest);
+ if ((size = buf_inspect_tag_size(tag)) < 0) {
+ err_puts("tag_inspect: size error");
+ assert(! "tag_inspect: size error");
+ return NULL;
+ }
+ buf_init_alloc(&buf, size);
+ if (buf_inspect_tag(&buf, tag) != size) {
+ err_puts("tag_inspect: inspect error");
+ assert(! "tag_inspect: inspect error");
+ return NULL;
+ }
+ return buf_to_str(&buf, dest);
+}
diff --git a/libkc3/inspect.h b/libkc3/inspect.h
new file mode 100644
index 0000000..506aa88
--- /dev/null
+++ b/libkc3/inspect.h
@@ -0,0 +1,27 @@
+/* kc3
+ * Copyright 2022,2023,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 inspect.h
+ * @brief Inspect any Tag type into a Str
+ *
+ * Functions to inspect a Tag into a Str.
+ */
+#ifndef LIBKC3_INSPECT_H
+#define LIBKC3_INSPECT_H
+
+#include "types.h"
+
+s_str * inspect_sym (const s_sym *sym, s_str *dest);
+s_str * inspect_tag (const s_tag *tag, s_str *dest);
+
+#endif /* LIBKC3_INSPECT_H */
diff --git a/libkc3/io.c b/libkc3/io.c
index 0e324ec..eb96f86 100644
--- a/libkc3/io.c
+++ b/libkc3/io.c
@@ -52,6 +52,13 @@ sw err_inspect (const s_tag *x)
return err_inspect_tag(x);
}
+sw err_inspect_buf (const s_buf *buf)
+{
+ uw pos;
+ pos = (buf->rpos < 20) ? 0 : buf->rpos - 20;
+ return err_write(buf->ptr.pchar + pos, buf->rpos - pos);
+}
+
sw err_inspect_tag_type (e_tag_type type)
{
return err_write_1(tag_type_to_string(type));
@@ -71,6 +78,14 @@ sw err_puts (const char *x)
return result;
}
+sw err_write (const void *x, uw len)
+{
+ sw r;
+ if ((r = buf_write(&g_kc3_env.err, x, len)) > 0)
+ buf_flush(&g_kc3_env.err);
+ return r;
+}
+
sw err_write_1 (const char *x)
{
sw r;
@@ -106,6 +121,13 @@ sw io_inspect (const s_tag *x)
return result;
}
+sw io_inspect_buf (const s_buf *buf)
+{
+ uw pos;
+ pos = (buf->rpos < 20) ? 0 : buf->rpos - 20;
+ return io_write(buf->ptr.pchar + pos, buf->rpos - pos);
+}
+
sw io_inspect_tag_type (e_tag_type type)
{
return io_write_1(tag_type_to_string(type));
@@ -125,6 +147,14 @@ sw io_puts (const char *x)
return result;
}
+sw io_write (const void *x, uw len)
+{
+ sw r;
+ if ((r = buf_write(&g_kc3_env.out, x, len)) > 0)
+ buf_flush(&g_kc3_env.out);
+ return r;
+}
+
sw io_write_1 (const char *x)
{
sw r;
diff --git a/libkc3/io.h b/libkc3/io.h
index 62457f8..5b7c922 100644
--- a/libkc3/io.h
+++ b/libkc3/io.h
@@ -29,6 +29,7 @@
sw err_flush (void);
sw err_inspect (const s_tag *x);
sw err_puts (const char *x);
+sw err_write (const void *x, uw len);
sw err_write_1 (const char *x);
sw err_write_str (const s_str *x);
@@ -36,11 +37,13 @@ sw err_write_str (const s_str *x);
sw io_flush (void);
sw io_inspect (const s_tag *x);
sw io_puts (const char *x);
+sw io_write (const void *x, uw len);
sw io_write_1 (const char *x);
sw io_write_str (const s_str *x);
PROTOTYPES_ERR_IO_INSPECT(array, const s_array *);
PROTOTYPES_ERR_IO_INSPECT(bool, const bool *);
+PROTOTYPES_ERR_IO_INSPECT(buf, const s_buf *);
PROTOTYPES_ERR_IO_INSPECT(call, const s_call *);
PROTOTYPES_ERR_IO_INSPECT(cfn, const s_cfn *);
PROTOTYPES_ERR_IO_INSPECT(character, const character *);
diff --git a/libkc3/kc3.h b/libkc3/kc3.h
index 7eb6f3b..1bb4084 100644
--- a/libkc3/kc3.h
+++ b/libkc3/kc3.h
@@ -67,6 +67,7 @@
#include "frame.h"
#include "hash.h"
#include "ident.h"
+#include "inspect.h"
#include "integer.h"
#include "io.h"
#include "kc3_main.h"
diff --git a/libkc3/sources.mk b/libkc3/sources.mk
index 569b0eb..236e39d 100644
--- a/libkc3/sources.mk
+++ b/libkc3/sources.mk
@@ -107,6 +107,7 @@ HEADERS = \
"frame.h" \
"hash.h" \
"ident.h" \
+ "inspect.h" \
"integer.h" \
"io.h" \
"kc3.h" \
@@ -268,6 +269,7 @@ SOURCES = \
"frame.c" \
"hash.c" \
"ident.c" \
+ "inspect.c" \
"integer.c" \
"io.c" \
"kc3.c" \
@@ -538,6 +540,7 @@ LO_SOURCES = \
"frame.c" \
"hash.c" \
"ident.c" \
+ "inspect.c" \
"integer.c" \
"io.c" \
"kc3.c" \
diff --git a/libkc3/sources.sh b/libkc3/sources.sh
index 5af5eec..f07e15a 100644
--- a/libkc3/sources.sh
+++ b/libkc3/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_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 call.h ceiling.h cfn.h character.h compare.h complex.h cow.h data.h env.h error.h error_handler.h eval.h f128.h f32.h f64.h fact.h fact_action.h fact_list.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_transaction.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 kc3.h kc3_main.h list.h list_init.h log.h map.h module.h operator.h pcomplex.h pcow.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 call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.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 kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.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 call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.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 kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.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 call.h ceiling.h cfn.h character.h compare.h complex.h cow.h data.h env.h error.h error_handler.h eval.h f128.h f32.h f64.h fact.h fact_action.h fact_list.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_transaction.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h inspect.h integer.h io.h kc3.h kc3_main.h list.h list_init.h log.h map.h module.h operator.h pcomplex.h pcow.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 call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c inspect.c integer.c io.c kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.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 call.c ceiling.c cfn.c character.c compare.c complex.c cow.c data.c env.c error.c error_handler.c eval.c f128.c f32.c f64.c fact.c fact_action.c fact_list.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_transaction.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c inspect.c integer.c io.c kc3.c license.c list.c list_init.c log.c map.c module.c operator.c pcomplex.c pcow.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/libkc3/sym.c b/libkc3/sym.c
index fdecba8..666284b 100644
--- a/libkc3/sym.c
+++ b/libkc3/sym.c
@@ -115,8 +115,6 @@ const s_sym g_sym_x = {{{NULL}, 1, {"x"}}};
static s_sym_list * g_sym_list = NULL;
void sym_delete (s_sym *sym);
-s_str * sym_inspect_reserved (const s_sym *sym, s_str *dest);
-sw sym_inspect_reserved_size (const s_sym *sym);
s_sym_list * sym_list_new (const s_sym *sym, s_sym *free_sym,
s_sym_list *next);
@@ -418,21 +416,6 @@ const s_sym ** sym_init_str (const s_sym **sym, const s_str *src)
return sym;
}
-s_str * sym_inspect (const s_sym *sym, s_str *dest)
-{
- sw size;
- s_buf tmp;
- size = buf_inspect_sym_size(&sym);
- if (size < 0) {
- assert(! "error");
- return NULL;
- }
- buf_init_alloc(&tmp, size);
- buf_inspect_sym(&tmp, &sym);
- assert(tmp.wpos == tmp.size);
- return buf_to_str(&tmp, dest);
-}
-
bool sym_register (const s_sym *sym, s_sym *free_sym)
{
s_sym_list *tmp;
@@ -613,7 +596,7 @@ bool sym_must_clean (const s_sym *sym, bool *must_clean)
return true;
}
if (sym == &g_sym_Sym) {
- *must_clean = true;
+ *must_clean = false;
return true;
}
if (sym == &g_sym_Sw) {
@@ -1144,7 +1127,7 @@ bool sym_type_size (const s_sym *type, uw *dest)
return true;
}
if (type == &g_sym_Sym) {
- *dest = sizeof(s_sym *);
+ *dest = sizeof(p_sym);
return true;
}
if (type == &g_sym_Tag) {
diff --git a/libkc3/sym.h b/libkc3/sym.h
index 0c8d3c6..c754124 100644
--- a/libkc3/sym.h
+++ b/libkc3/sym.h
@@ -134,7 +134,6 @@ bool sym_character_is_reserved (character c);
const s_sym * sym_find (const s_str *src);
bool sym_has_ident_reserved_characters (const s_sym *sym);
bool sym_has_reserved_characters (const s_sym *sym);
-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);
diff --git a/libkc3/tag.c b/libkc3/tag.c
index a84504c..94440d6 100644
--- a/libkc3/tag.c
+++ b/libkc3/tag.c
@@ -539,26 +539,6 @@ s_tag * tag_init_time (s_tag *tag)
return time_to_tag(&time, tag);
}
-s_str * tag_inspect (const s_tag *tag, s_str *dest)
-{
- s_buf buf;
- sw size;
- assert(tag);
- assert(dest);
- if ((size = buf_inspect_tag_size(tag)) < 0) {
- err_puts("tag_inspect: size error");
- assert(! "tag_inspect: size error");
- return NULL;
- }
- buf_init_alloc(&buf, size);
- if (buf_inspect_tag(&buf, tag) != size) {
- err_puts("tag_inspect: inspect error");
- assert(! "tag_inspect: inspect error");
- return NULL;
- }
- return buf_to_str(&buf, dest);
-}
-
s_tag * tag_integer_reduce (s_tag *tag)
{
uw bytes;
diff --git a/libkc3/tag.h b/libkc3/tag.h
index e2f924e..2581eae 100644
--- a/libkc3/tag.h
+++ b/libkc3/tag.h
@@ -44,7 +44,6 @@ s_tag * tag_new_1 (const char *p);
s8 tag_arity (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_an_associative_list (const s_tag *tag);
bool tag_is_bound_var (const s_tag *tag);
diff --git a/libkc3/types.h b/libkc3/types.h
index 11076e4..1d09ef3 100644
--- a/libkc3/types.h
+++ b/libkc3/types.h
@@ -201,6 +201,7 @@ typedef u32 character;
typedef s_tag **p_facts_spec;
typedef s_tag *t_facts_spec[];
typedef SHA1_CTX t_hash;
+typedef const s_sym *p_sym;
typedef const s_tag *p_tag;
typedef u64 t_skiplist_height;
@@ -228,6 +229,7 @@ struct block {
struct buf_save {
s_buf_save *next;
+ uw line;
uw rpos;
uw wpos;
};
diff --git a/sources.mk b/sources.mk
index d6b134b..e6305e3 100644
--- a/sources.mk
+++ b/sources.mk
@@ -335,6 +335,8 @@ KC3_C_SOURCES = \
"libkc3/hash.h" \
"libkc3/ident.c" \
"libkc3/ident.h" \
+ "libkc3/inspect.c" \
+ "libkc3/inspect.h" \
"libkc3/integer.c" \
"libkc3/integer.h" \
"libkc3/io.c" \
@@ -931,6 +933,8 @@ KC3_OTHER_SOURCES = \
"test/facts_test_open_file.3.expected.facts" \
"test/facts_test_open_file.3.in.facts" \
"test/facts_test_save.expected.facts" \
+ "test/http/server.kc3.ret.expected" \
+ "test/http/server.out.expected" \
"test/ikc3/access.out.expected" \
"test/ikc3/access.ret.expected" \
"test/ikc3/array.err.expected" \
diff --git a/sources.sh b/sources.sh
index a737740..cf2d7a3 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,7 +1,7 @@
# sources.sh generated by update_sources
KC3_CONFIGURES='ekc3/configure ekc3/sources.sh ekc3/update_sources ikc3/configure ikc3/sources.sh ikc3/update_sources kc3c/configure kc3s/configure kc3s/sources.sh kc3s/update_sources libkc3/configure libkc3/sources.sh libkc3/update_sources libkc3_window/cairo/configure libkc3_window/cairo/demo/configure libkc3_window/cairo/demo/sources.sh libkc3_window/cairo/demo/update_sources libkc3_window/cairo/quartz/configure libkc3_window/cairo/quartz/demo/configure libkc3_window/cairo/quartz/demo/sources.sh libkc3_window/cairo/quartz/demo/update_sources libkc3_window/cairo/quartz/sources.sh libkc3_window/cairo/quartz/update_sources libkc3_window/cairo/sources.sh libkc3_window/cairo/update_sources libkc3_window/cairo/win32/configure libkc3_window/cairo/win32/demo/configure libkc3_window/cairo/win32/demo/sources.sh libkc3_window/cairo/win32/demo/update_sources libkc3_window/cairo/win32/sources.sh libkc3_window/cairo/win32/update_sources libkc3_window/cairo/xcb/configure libkc3_window/cairo/xcb/demo/configure libkc3_window/cairo/xcb/demo/sources.sh libkc3_window/cairo/xcb/demo/update_sources libkc3_window/cairo/xcb/sources.sh libkc3_window/cairo/xcb/update_sources libkc3_window/configure libkc3_window/sdl2/configure libkc3_window/sdl2/demo/configure libkc3_window/sdl2/demo/macos/configure libkc3_window/sdl2/demo/sources.sh libkc3_window/sdl2/demo/update_sources libkc3_window/sdl2/sources.sh libkc3_window/sdl2/update_sources libkc3_window/sources.sh libkc3_window/update_sources libtommath/configure libtommath/sources.sh libtommath/update_sources test/configure test/sources.sh test/update_sources ucd2c/configure '
KC3_MAKEFILES='ekc3/Makefile ekc3/sources.mk ikc3/Makefile ikc3/sources.mk kc3c/Makefile kc3s/Makefile kc3s/sources.mk libkc3/Makefile libkc3/gen.mk libkc3/sources.mk libkc3_window/Makefile libkc3_window/cairo/Makefile libkc3_window/cairo/demo/Makefile libkc3_window/cairo/demo/sources.mk libkc3_window/cairo/quartz/Makefile libkc3_window/cairo/quartz/demo/Makefile libkc3_window/cairo/quartz/demo/sources.mk libkc3_window/cairo/quartz/sources.mk libkc3_window/cairo/sources.mk libkc3_window/cairo/win32/Makefile libkc3_window/cairo/win32/demo/Makefile libkc3_window/cairo/win32/demo/sources.mk libkc3_window/cairo/win32/sources.mk libkc3_window/cairo/xcb/Makefile libkc3_window/cairo/xcb/demo/Makefile libkc3_window/cairo/xcb/demo/sources.mk libkc3_window/cairo/xcb/sources.mk libkc3_window/sdl2/Makefile libkc3_window/sdl2/demo/Makefile libkc3_window/sdl2/demo/macos/Makefile libkc3_window/sdl2/demo/sources.mk libkc3_window/sdl2/sources.mk libkc3_window/sources.mk libtommath/Makefile libtommath/sources.mk test/Makefile test/sources.mk ucd2c/Makefile '
-KC3_C_SOURCES='ekc3/ekc3.c ekc3/ekc3.h ekc3/html.c ekc3/html.h ekc3/types.h ikc3/buf_linenoise.c ikc3/buf_linenoise.h ikc3/buf_wineditline.c ikc3/buf_wineditline.h ikc3/ikc3.c ikc3/linenoise.c kc3c/c3c.c kc3s/buf_readline.c kc3s/buf_readline.h kc3s/kc3s.c libkc3/abs.c libkc3/abs.h libkc3/alloc.c libkc3/alloc.h libkc3/arg.c libkc3/arg.h libkc3/array.c libkc3/array.h libkc3/assert.h libkc3/binding.c libkc3/binding.h libkc3/block.c libkc3/block.h libkc3/bool.c libkc3/bool.h libkc3/buf.c libkc3/buf.h libkc3/buf_file.c libkc3/buf_file.h libkc3/buf_getc.c libkc3/buf_getc.h libkc3/buf_getchar.c libkc3/buf_getchar.h libkc3/buf_inspect.c libkc3/buf_inspect.h libkc3/buf_inspect_s.c.in libkc3/buf_inspect_s.h.in libkc3/buf_inspect_s16.c libkc3/buf_inspect_s16.h libkc3/buf_inspect_s16_binary.c libkc3/buf_inspect_s16_binary.h libkc3/buf_inspect_s16_decimal.c libkc3/buf_inspect_s16_decimal.h libkc3/buf_inspect_s16_hexadecimal.c libkc3/buf_inspect_s16_hexadecimal.h libkc3/buf_inspect_s16_octal.c libkc3/buf_inspect_s16_octal.h libkc3/buf_inspect_s32.c libkc3/buf_inspect_s32.h libkc3/buf_inspect_s32_binary.c libkc3/buf_inspect_s32_binary.h libkc3/buf_inspect_s32_decimal.c libkc3/buf_inspect_s32_decimal.h libkc3/buf_inspect_s32_hexadecimal.c libkc3/buf_inspect_s32_hexadecimal.h libkc3/buf_inspect_s32_octal.c libkc3/buf_inspect_s32_octal.h libkc3/buf_inspect_s64.c libkc3/buf_inspect_s64.h libkc3/buf_inspect_s64_binary.c libkc3/buf_inspect_s64_binary.h libkc3/buf_inspect_s64_decimal.c libkc3/buf_inspect_s64_decimal.h libkc3/buf_inspect_s64_hexadecimal.c libkc3/buf_inspect_s64_hexadecimal.h libkc3/buf_inspect_s64_octal.c libkc3/buf_inspect_s64_octal.h libkc3/buf_inspect_s8.c libkc3/buf_inspect_s8.h libkc3/buf_inspect_s8_binary.c libkc3/buf_inspect_s8_binary.h libkc3/buf_inspect_s8_decimal.c libkc3/buf_inspect_s8_decimal.h libkc3/buf_inspect_s8_hexadecimal.c libkc3/buf_inspect_s8_hexadecimal.h libkc3/buf_inspect_s8_octal.c libkc3/buf_inspect_s8_octal.h libkc3/buf_inspect_s_base.c.in libkc3/buf_inspect_s_base.h.in libkc3/buf_inspect_sw.c libkc3/buf_inspect_sw.h libkc3/buf_inspect_sw_binary.c libkc3/buf_inspect_sw_binary.h libkc3/buf_inspect_sw_decimal.c libkc3/buf_inspect_sw_decimal.h libkc3/buf_inspect_sw_hexadecimal.c libkc3/buf_inspect_sw_hexadecimal.h libkc3/buf_inspect_sw_octal.c libkc3/buf_inspect_sw_octal.h libkc3/buf_inspect_u.c.in libkc3/buf_inspect_u.h.in libkc3/buf_inspect_u16.c libkc3/buf_inspect_u16.h libkc3/buf_inspect_u16_binary.c libkc3/buf_inspect_u16_binary.h libkc3/buf_inspect_u16_decimal.c libkc3/buf_inspect_u16_decimal.h libkc3/buf_inspect_u16_hexadecimal.c libkc3/buf_inspect_u16_hexadecimal.h libkc3/buf_inspect_u16_octal.c libkc3/buf_inspect_u16_octal.h libkc3/buf_inspect_u32.c libkc3/buf_inspect_u32.h libkc3/buf_inspect_u32_binary.c libkc3/buf_inspect_u32_binary.h libkc3/buf_inspect_u32_decimal.c libkc3/buf_inspect_u32_decimal.h libkc3/buf_inspect_u32_hexadecimal.c libkc3/buf_inspect_u32_hexadecimal.h libkc3/buf_inspect_u32_octal.c libkc3/buf_inspect_u32_octal.h libkc3/buf_inspect_u64.c libkc3/buf_inspect_u64.h libkc3/buf_inspect_u64_binary.c libkc3/buf_inspect_u64_binary.h libkc3/buf_inspect_u64_decimal.c libkc3/buf_inspect_u64_decimal.h libkc3/buf_inspect_u64_hexadecimal.c libkc3/buf_inspect_u64_hexadecimal.h libkc3/buf_inspect_u64_octal.c libkc3/buf_inspect_u64_octal.h libkc3/buf_inspect_u8.c libkc3/buf_inspect_u8.h libkc3/buf_inspect_u8_binary.c libkc3/buf_inspect_u8_binary.h libkc3/buf_inspect_u8_decimal.c libkc3/buf_inspect_u8_decimal.h libkc3/buf_inspect_u8_hexadecimal.c libkc3/buf_inspect_u8_hexadecimal.h libkc3/buf_inspect_u8_octal.c libkc3/buf_inspect_u8_octal.h libkc3/buf_inspect_u_base.c.in libkc3/buf_inspect_u_base.h.in libkc3/buf_inspect_uw.c libkc3/buf_inspect_uw.h libkc3/buf_inspect_uw_binary.c libkc3/buf_inspect_uw_binary.h libkc3/buf_inspect_uw_decimal.c libkc3/buf_inspect_uw_decimal.h libkc3/buf_inspect_uw_hexadecimal.c libkc3/buf_inspect_uw_hexadecimal.h libkc3/buf_inspect_uw_octal.c libkc3/buf_inspect_uw_octal.h libkc3/buf_parse.c libkc3/buf_parse.h libkc3/buf_parse_s.c.in libkc3/buf_parse_s.h.in libkc3/buf_parse_s16.c libkc3/buf_parse_s16.h libkc3/buf_parse_s32.c libkc3/buf_parse_s32.h libkc3/buf_parse_s64.c libkc3/buf_parse_s64.h libkc3/buf_parse_s8.c libkc3/buf_parse_s8.h libkc3/buf_parse_sw.c libkc3/buf_parse_sw.h libkc3/buf_parse_u.c.in libkc3/buf_parse_u.h.in libkc3/buf_parse_u16.c libkc3/buf_parse_u16.h libkc3/buf_parse_u32.c libkc3/buf_parse_u32.h libkc3/buf_parse_u64.c libkc3/buf_parse_u64.h libkc3/buf_parse_u8.c libkc3/buf_parse_u8.h libkc3/buf_parse_uw.c libkc3/buf_parse_uw.h libkc3/buf_save.c libkc3/buf_save.h libkc3/call.c libkc3/call.h libkc3/ceiling.c libkc3/ceiling.h libkc3/cfn.c libkc3/cfn.h libkc3/character.c libkc3/character.h libkc3/compare.c libkc3/compare.h libkc3/complex.c libkc3/complex.h libkc3/cow.c libkc3/cow.h libkc3/data.c libkc3/data.h libkc3/env.c libkc3/env.h libkc3/error.c libkc3/error.h libkc3/error_handler.c libkc3/error_handler.h libkc3/eval.c libkc3/eval.h libkc3/f128.c libkc3/f128.h libkc3/f32.c libkc3/f32.h libkc3/f64.c libkc3/f64.h libkc3/fact.c libkc3/fact.h libkc3/fact_action.c libkc3/fact_action.h libkc3/fact_list.c libkc3/fact_list.h libkc3/facts.c libkc3/facts.h libkc3/facts_cursor.c libkc3/facts_cursor.h libkc3/facts_spec.c libkc3/facts_spec.h libkc3/facts_spec_cursor.c libkc3/facts_spec_cursor.h libkc3/facts_transaction.c libkc3/facts_transaction.h libkc3/facts_with.c libkc3/facts_with.h libkc3/facts_with_cursor.c libkc3/facts_with_cursor.h libkc3/file.c libkc3/file.h libkc3/float.h libkc3/fn.c libkc3/fn.h libkc3/fn_clause.c libkc3/fn_clause.h libkc3/frame.c libkc3/frame.h libkc3/hash.c libkc3/hash.h libkc3/ident.c libkc3/ident.h libkc3/integer.c libkc3/integer.h libkc3/io.c libkc3/io.h libkc3/kc3.c libkc3/kc3.h libkc3/kc3_main.h libkc3/license.c libkc3/list.c libkc3/list.h libkc3/list_init.c libkc3/list_init.h libkc3/log.c libkc3/log.h libkc3/map.c libkc3/map.h libkc3/module.c libkc3/module.h libkc3/operator.c libkc3/operator.h libkc3/pcomplex.c libkc3/pcomplex.h libkc3/pcow.c libkc3/pcow.h libkc3/ptag.c libkc3/ptag.h libkc3/ptr.c libkc3/ptr.h libkc3/ptr_free.c libkc3/ptr_free.h libkc3/queue.c libkc3/queue.h libkc3/quote.c libkc3/quote.h libkc3/ratio.c libkc3/ratio.h libkc3/s.c.in libkc3/s.h.in libkc3/s16.c libkc3/s16.h libkc3/s32.c libkc3/s32.h libkc3/s64.c libkc3/s64.h libkc3/s8.c libkc3/s8.h libkc3/sequence.c libkc3/sequence.h libkc3/set.c.in libkc3/set.h.in libkc3/set__fact.c libkc3/set__fact.h libkc3/set__tag.c libkc3/set__tag.h libkc3/set_cursor.c.in libkc3/set_cursor.h.in libkc3/set_cursor__fact.c libkc3/set_cursor__fact.h libkc3/set_cursor__tag.c libkc3/set_cursor__tag.h libkc3/set_item.c.in libkc3/set_item.h.in libkc3/set_item__fact.c libkc3/set_item__fact.h libkc3/set_item__tag.c libkc3/set_item__tag.h libkc3/sha1.h libkc3/sign.c libkc3/sign.h libkc3/skiplist.c.in libkc3/skiplist.h.in libkc3/skiplist__fact.c libkc3/skiplist__fact.h libkc3/skiplist_node.c.in libkc3/skiplist_node.h.in libkc3/skiplist_node__fact.c libkc3/skiplist_node__fact.h libkc3/special_operator.c libkc3/special_operator.h libkc3/str.c libkc3/str.h libkc3/struct.c libkc3/struct.h libkc3/struct_type.c libkc3/struct_type.h libkc3/sw.c libkc3/sw.h libkc3/sym.c libkc3/sym.h libkc3/tag.c libkc3/tag.h libkc3/tag_add.c libkc3/tag_addi.c libkc3/tag_band.c libkc3/tag_bnot.c libkc3/tag_bor.c libkc3/tag_bxor.c libkc3/tag_div.c libkc3/tag_init.c libkc3/tag_init.h libkc3/tag_mod.c libkc3/tag_mul.c libkc3/tag_neg.c libkc3/tag_shift_left.c libkc3/tag_shift_right.c libkc3/tag_sqrt.c libkc3/tag_sub.c libkc3/tag_type.c libkc3/tag_type.h libkc3/time.c libkc3/time.h libkc3/tuple.c libkc3/tuple.h libkc3/types.h libkc3/u.c.in libkc3/u.h.in libkc3/u16.c libkc3/u16.h libkc3/u32.c libkc3/u32.h libkc3/u64.c libkc3/u64.h libkc3/u8.c libkc3/u8.h libkc3/ucd.c libkc3/ucd.h libkc3/unquote.c libkc3/unquote.h libkc3/uw.c libkc3/uw.h libkc3/var.c libkc3/var.h libkc3/void.c libkc3/void.h libkc3_window/cairo/cairo_font.c libkc3_window/cairo/cairo_font.h libkc3_window/cairo/cairo_sprite.c libkc3_window/cairo/cairo_sprite.h libkc3_window/cairo/cairo_text.c libkc3_window/cairo/cairo_text.h libkc3_window/cairo/demo/bg_rect.c libkc3_window/cairo/demo/bg_rect.h libkc3_window/cairo/demo/flies.c libkc3_window/cairo/demo/flies.h libkc3_window/cairo/demo/lightspeed.c libkc3_window/cairo/demo/lightspeed.h libkc3_window/cairo/demo/mandelbrot_f128.c libkc3_window/cairo/demo/mandelbrot_f128.h libkc3_window/cairo/demo/toasters.c libkc3_window/cairo/demo/toasters.h libkc3_window/cairo/demo/window_cairo_demo.c libkc3_window/cairo/demo/window_cairo_demo.h libkc3_window/cairo/quartz/demo/window_cairo_quartz_demo.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.h libkc3_window/cairo/quartz/window_cairo_quartz.h libkc3_window/cairo/quartz/window_cairo_quartz_app_delegate.h libkc3_window/cairo/quartz/window_cairo_quartz_view.h libkc3_window/cairo/quartz/window_cairo_quartz_view_controller.h libkc3_window/cairo/quartz/xkbquartz.h libkc3_window/cairo/types.h libkc3_window/cairo/win32/demo/window_cairo_win32_demo.c libkc3_window/cairo/win32/vk_to_xkbcommon.c libkc3_window/cairo/win32/vk_to_xkbcommon.h libkc3_window/cairo/win32/window_cairo_win32.c libkc3_window/cairo/win32/window_cairo_win32.h libkc3_window/cairo/window_cairo.c libkc3_window/cairo/window_cairo.h libkc3_window/cairo/xcb/demo/window_cairo_xcb_demo.c libkc3_window/cairo/xcb/window_cairo_xcb.c libkc3_window/cairo/xcb/window_cairo_xcb.h libkc3_window/sdl2/demo/bg_rect.c libkc3_window/sdl2/demo/bg_rect.h libkc3_window/sdl2/demo/earth.c libkc3_window/sdl2/demo/earth.h libkc3_window/sdl2/demo/flies.c libkc3_window/sdl2/demo/flies.h libkc3_window/sdl2/demo/lightspeed.c libkc3_window/sdl2/demo/lightspeed.h libkc3_window/sdl2/demo/mandelbrot_f128.c libkc3_window/sdl2/demo/mandelbrot_f128.h libkc3_window/sdl2/demo/matrix.c libkc3_window/sdl2/demo/matrix.h libkc3_window/sdl2/demo/toasters.c libkc3_window/sdl2/demo/toasters.h libkc3_window/sdl2/demo/window_sdl2_demo.c libkc3_window/sdl2/demo/window_sdl2_demo.h libkc3_window/sdl2/disabled/mandelbrot.c libkc3_window/sdl2/disabled/mandelbrot.h libkc3_window/sdl2/disabled/sdl2_font.c libkc3_window/sdl2/disabled/sdl2_font.h libkc3_window/sdl2/disabled/sdl2_sprite.c libkc3_window/sdl2/disabled/sdl2_sprite.h libkc3_window/sdl2/dmat3.h libkc3_window/sdl2/dmat4.c libkc3_window/sdl2/dmat4.h libkc3_window/sdl2/dvec2.c libkc3_window/sdl2/dvec2.h libkc3_window/sdl2/dvec3.c libkc3_window/sdl2/dvec3.h libkc3_window/sdl2/gl_camera.c libkc3_window/sdl2/gl_camera.h libkc3_window/sdl2/gl_cylinder.c libkc3_window/sdl2/gl_cylinder.h libkc3_window/sdl2/gl_deprecated.c libkc3_window/sdl2/gl_deprecated.h libkc3_window/sdl2/gl_font.c libkc3_window/sdl2/gl_font.h libkc3_window/sdl2/gl_lines.c libkc3_window/sdl2/gl_lines.h libkc3_window/sdl2/gl_object.c libkc3_window/sdl2/gl_object.h libkc3_window/sdl2/gl_ortho.c libkc3_window/sdl2/gl_ortho.h libkc3_window/sdl2/gl_sphere.c libkc3_window/sdl2/gl_sphere.h libkc3_window/sdl2/gl_sprite.c libkc3_window/sdl2/gl_sprite.h libkc3_window/sdl2/gl_square.c libkc3_window/sdl2/gl_square.h libkc3_window/sdl2/gl_text.c libkc3_window/sdl2/gl_text.h libkc3_window/sdl2/gl_triangle.c libkc3_window/sdl2/gl_triangle.h libkc3_window/sdl2/gl_vertex.c libkc3_window/sdl2/gl_vertex.h libkc3_window/sdl2/gl_vtext.c libkc3_window/sdl2/gl_vtext.h libkc3_window/sdl2/mat3.h libkc3_window/sdl2/mat4.c libkc3_window/sdl2/mat4.h libkc3_window/sdl2/types.h libkc3_window/sdl2/vec2.c libkc3_window/sdl2/vec2.h libkc3_window/sdl2/vec3.c libkc3_window/sdl2/vec3.h libkc3_window/sdl2/window_sdl2.c libkc3_window/sdl2/window_sdl2.h libkc3_window/types.h libkc3_window/window.c libkc3_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/libkc3_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 '
+KC3_C_SOURCES='ekc3/ekc3.c ekc3/ekc3.h ekc3/html.c ekc3/html.h ekc3/types.h ikc3/buf_linenoise.c ikc3/buf_linenoise.h ikc3/buf_wineditline.c ikc3/buf_wineditline.h ikc3/ikc3.c ikc3/linenoise.c kc3c/c3c.c kc3s/buf_readline.c kc3s/buf_readline.h kc3s/kc3s.c libkc3/abs.c libkc3/abs.h libkc3/alloc.c libkc3/alloc.h libkc3/arg.c libkc3/arg.h libkc3/array.c libkc3/array.h libkc3/assert.h libkc3/binding.c libkc3/binding.h libkc3/block.c libkc3/block.h libkc3/bool.c libkc3/bool.h libkc3/buf.c libkc3/buf.h libkc3/buf_file.c libkc3/buf_file.h libkc3/buf_getc.c libkc3/buf_getc.h libkc3/buf_getchar.c libkc3/buf_getchar.h libkc3/buf_inspect.c libkc3/buf_inspect.h libkc3/buf_inspect_s.c.in libkc3/buf_inspect_s.h.in libkc3/buf_inspect_s16.c libkc3/buf_inspect_s16.h libkc3/buf_inspect_s16_binary.c libkc3/buf_inspect_s16_binary.h libkc3/buf_inspect_s16_decimal.c libkc3/buf_inspect_s16_decimal.h libkc3/buf_inspect_s16_hexadecimal.c libkc3/buf_inspect_s16_hexadecimal.h libkc3/buf_inspect_s16_octal.c libkc3/buf_inspect_s16_octal.h libkc3/buf_inspect_s32.c libkc3/buf_inspect_s32.h libkc3/buf_inspect_s32_binary.c libkc3/buf_inspect_s32_binary.h libkc3/buf_inspect_s32_decimal.c libkc3/buf_inspect_s32_decimal.h libkc3/buf_inspect_s32_hexadecimal.c libkc3/buf_inspect_s32_hexadecimal.h libkc3/buf_inspect_s32_octal.c libkc3/buf_inspect_s32_octal.h libkc3/buf_inspect_s64.c libkc3/buf_inspect_s64.h libkc3/buf_inspect_s64_binary.c libkc3/buf_inspect_s64_binary.h libkc3/buf_inspect_s64_decimal.c libkc3/buf_inspect_s64_decimal.h libkc3/buf_inspect_s64_hexadecimal.c libkc3/buf_inspect_s64_hexadecimal.h libkc3/buf_inspect_s64_octal.c libkc3/buf_inspect_s64_octal.h libkc3/buf_inspect_s8.c libkc3/buf_inspect_s8.h libkc3/buf_inspect_s8_binary.c libkc3/buf_inspect_s8_binary.h libkc3/buf_inspect_s8_decimal.c libkc3/buf_inspect_s8_decimal.h libkc3/buf_inspect_s8_hexadecimal.c libkc3/buf_inspect_s8_hexadecimal.h libkc3/buf_inspect_s8_octal.c libkc3/buf_inspect_s8_octal.h libkc3/buf_inspect_s_base.c.in libkc3/buf_inspect_s_base.h.in libkc3/buf_inspect_sw.c libkc3/buf_inspect_sw.h libkc3/buf_inspect_sw_binary.c libkc3/buf_inspect_sw_binary.h libkc3/buf_inspect_sw_decimal.c libkc3/buf_inspect_sw_decimal.h libkc3/buf_inspect_sw_hexadecimal.c libkc3/buf_inspect_sw_hexadecimal.h libkc3/buf_inspect_sw_octal.c libkc3/buf_inspect_sw_octal.h libkc3/buf_inspect_u.c.in libkc3/buf_inspect_u.h.in libkc3/buf_inspect_u16.c libkc3/buf_inspect_u16.h libkc3/buf_inspect_u16_binary.c libkc3/buf_inspect_u16_binary.h libkc3/buf_inspect_u16_decimal.c libkc3/buf_inspect_u16_decimal.h libkc3/buf_inspect_u16_hexadecimal.c libkc3/buf_inspect_u16_hexadecimal.h libkc3/buf_inspect_u16_octal.c libkc3/buf_inspect_u16_octal.h libkc3/buf_inspect_u32.c libkc3/buf_inspect_u32.h libkc3/buf_inspect_u32_binary.c libkc3/buf_inspect_u32_binary.h libkc3/buf_inspect_u32_decimal.c libkc3/buf_inspect_u32_decimal.h libkc3/buf_inspect_u32_hexadecimal.c libkc3/buf_inspect_u32_hexadecimal.h libkc3/buf_inspect_u32_octal.c libkc3/buf_inspect_u32_octal.h libkc3/buf_inspect_u64.c libkc3/buf_inspect_u64.h libkc3/buf_inspect_u64_binary.c libkc3/buf_inspect_u64_binary.h libkc3/buf_inspect_u64_decimal.c libkc3/buf_inspect_u64_decimal.h libkc3/buf_inspect_u64_hexadecimal.c libkc3/buf_inspect_u64_hexadecimal.h libkc3/buf_inspect_u64_octal.c libkc3/buf_inspect_u64_octal.h libkc3/buf_inspect_u8.c libkc3/buf_inspect_u8.h libkc3/buf_inspect_u8_binary.c libkc3/buf_inspect_u8_binary.h libkc3/buf_inspect_u8_decimal.c libkc3/buf_inspect_u8_decimal.h libkc3/buf_inspect_u8_hexadecimal.c libkc3/buf_inspect_u8_hexadecimal.h libkc3/buf_inspect_u8_octal.c libkc3/buf_inspect_u8_octal.h libkc3/buf_inspect_u_base.c.in libkc3/buf_inspect_u_base.h.in libkc3/buf_inspect_uw.c libkc3/buf_inspect_uw.h libkc3/buf_inspect_uw_binary.c libkc3/buf_inspect_uw_binary.h libkc3/buf_inspect_uw_decimal.c libkc3/buf_inspect_uw_decimal.h libkc3/buf_inspect_uw_hexadecimal.c libkc3/buf_inspect_uw_hexadecimal.h libkc3/buf_inspect_uw_octal.c libkc3/buf_inspect_uw_octal.h libkc3/buf_parse.c libkc3/buf_parse.h libkc3/buf_parse_s.c.in libkc3/buf_parse_s.h.in libkc3/buf_parse_s16.c libkc3/buf_parse_s16.h libkc3/buf_parse_s32.c libkc3/buf_parse_s32.h libkc3/buf_parse_s64.c libkc3/buf_parse_s64.h libkc3/buf_parse_s8.c libkc3/buf_parse_s8.h libkc3/buf_parse_sw.c libkc3/buf_parse_sw.h libkc3/buf_parse_u.c.in libkc3/buf_parse_u.h.in libkc3/buf_parse_u16.c libkc3/buf_parse_u16.h libkc3/buf_parse_u32.c libkc3/buf_parse_u32.h libkc3/buf_parse_u64.c libkc3/buf_parse_u64.h libkc3/buf_parse_u8.c libkc3/buf_parse_u8.h libkc3/buf_parse_uw.c libkc3/buf_parse_uw.h libkc3/buf_save.c libkc3/buf_save.h libkc3/call.c libkc3/call.h libkc3/ceiling.c libkc3/ceiling.h libkc3/cfn.c libkc3/cfn.h libkc3/character.c libkc3/character.h libkc3/compare.c libkc3/compare.h libkc3/complex.c libkc3/complex.h libkc3/cow.c libkc3/cow.h libkc3/data.c libkc3/data.h libkc3/env.c libkc3/env.h libkc3/error.c libkc3/error.h libkc3/error_handler.c libkc3/error_handler.h libkc3/eval.c libkc3/eval.h libkc3/f128.c libkc3/f128.h libkc3/f32.c libkc3/f32.h libkc3/f64.c libkc3/f64.h libkc3/fact.c libkc3/fact.h libkc3/fact_action.c libkc3/fact_action.h libkc3/fact_list.c libkc3/fact_list.h libkc3/facts.c libkc3/facts.h libkc3/facts_cursor.c libkc3/facts_cursor.h libkc3/facts_spec.c libkc3/facts_spec.h libkc3/facts_spec_cursor.c libkc3/facts_spec_cursor.h libkc3/facts_transaction.c libkc3/facts_transaction.h libkc3/facts_with.c libkc3/facts_with.h libkc3/facts_with_cursor.c libkc3/facts_with_cursor.h libkc3/file.c libkc3/file.h libkc3/float.h libkc3/fn.c libkc3/fn.h libkc3/fn_clause.c libkc3/fn_clause.h libkc3/frame.c libkc3/frame.h libkc3/hash.c libkc3/hash.h libkc3/ident.c libkc3/ident.h libkc3/inspect.c libkc3/inspect.h libkc3/integer.c libkc3/integer.h libkc3/io.c libkc3/io.h libkc3/kc3.c libkc3/kc3.h libkc3/kc3_main.h libkc3/license.c libkc3/list.c libkc3/list.h libkc3/list_init.c libkc3/list_init.h libkc3/log.c libkc3/log.h libkc3/map.c libkc3/map.h libkc3/module.c libkc3/module.h libkc3/operator.c libkc3/operator.h libkc3/pcomplex.c libkc3/pcomplex.h libkc3/pcow.c libkc3/pcow.h libkc3/ptag.c libkc3/ptag.h libkc3/ptr.c libkc3/ptr.h libkc3/ptr_free.c libkc3/ptr_free.h libkc3/queue.c libkc3/queue.h libkc3/quote.c libkc3/quote.h libkc3/ratio.c libkc3/ratio.h libkc3/s.c.in libkc3/s.h.in libkc3/s16.c libkc3/s16.h libkc3/s32.c libkc3/s32.h libkc3/s64.c libkc3/s64.h libkc3/s8.c libkc3/s8.h libkc3/sequence.c libkc3/sequence.h libkc3/set.c.in libkc3/set.h.in libkc3/set__fact.c libkc3/set__fact.h libkc3/set__tag.c libkc3/set__tag.h libkc3/set_cursor.c.in libkc3/set_cursor.h.in libkc3/set_cursor__fact.c libkc3/set_cursor__fact.h libkc3/set_cursor__tag.c libkc3/set_cursor__tag.h libkc3/set_item.c.in libkc3/set_item.h.in libkc3/set_item__fact.c libkc3/set_item__fact.h libkc3/set_item__tag.c libkc3/set_item__tag.h libkc3/sha1.h libkc3/sign.c libkc3/sign.h libkc3/skiplist.c.in libkc3/skiplist.h.in libkc3/skiplist__fact.c libkc3/skiplist__fact.h libkc3/skiplist_node.c.in libkc3/skiplist_node.h.in libkc3/skiplist_node__fact.c libkc3/skiplist_node__fact.h libkc3/special_operator.c libkc3/special_operator.h libkc3/str.c libkc3/str.h libkc3/struct.c libkc3/struct.h libkc3/struct_type.c libkc3/struct_type.h libkc3/sw.c libkc3/sw.h libkc3/sym.c libkc3/sym.h libkc3/tag.c libkc3/tag.h libkc3/tag_add.c libkc3/tag_addi.c libkc3/tag_band.c libkc3/tag_bnot.c libkc3/tag_bor.c libkc3/tag_bxor.c libkc3/tag_div.c libkc3/tag_init.c libkc3/tag_init.h libkc3/tag_mod.c libkc3/tag_mul.c libkc3/tag_neg.c libkc3/tag_shift_left.c libkc3/tag_shift_right.c libkc3/tag_sqrt.c libkc3/tag_sub.c libkc3/tag_type.c libkc3/tag_type.h libkc3/time.c libkc3/time.h libkc3/tuple.c libkc3/tuple.h libkc3/types.h libkc3/u.c.in libkc3/u.h.in libkc3/u16.c libkc3/u16.h libkc3/u32.c libkc3/u32.h libkc3/u64.c libkc3/u64.h libkc3/u8.c libkc3/u8.h libkc3/ucd.c libkc3/ucd.h libkc3/unquote.c libkc3/unquote.h libkc3/uw.c libkc3/uw.h libkc3/var.c libkc3/var.h libkc3/void.c libkc3/void.h libkc3_window/cairo/cairo_font.c libkc3_window/cairo/cairo_font.h libkc3_window/cairo/cairo_sprite.c libkc3_window/cairo/cairo_sprite.h libkc3_window/cairo/cairo_text.c libkc3_window/cairo/cairo_text.h libkc3_window/cairo/demo/bg_rect.c libkc3_window/cairo/demo/bg_rect.h libkc3_window/cairo/demo/flies.c libkc3_window/cairo/demo/flies.h libkc3_window/cairo/demo/lightspeed.c libkc3_window/cairo/demo/lightspeed.h libkc3_window/cairo/demo/mandelbrot_f128.c libkc3_window/cairo/demo/mandelbrot_f128.h libkc3_window/cairo/demo/toasters.c libkc3_window/cairo/demo/toasters.h libkc3_window/cairo/demo/window_cairo_demo.c libkc3_window/cairo/demo/window_cairo_demo.h libkc3_window/cairo/quartz/demo/window_cairo_quartz_demo.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.c libkc3_window/cairo/quartz/quartz_to_xkbcommon.h libkc3_window/cairo/quartz/window_cairo_quartz.h libkc3_window/cairo/quartz/window_cairo_quartz_app_delegate.h libkc3_window/cairo/quartz/window_cairo_quartz_view.h libkc3_window/cairo/quartz/window_cairo_quartz_view_controller.h libkc3_window/cairo/quartz/xkbquartz.h libkc3_window/cairo/types.h libkc3_window/cairo/win32/demo/window_cairo_win32_demo.c libkc3_window/cairo/win32/vk_to_xkbcommon.c libkc3_window/cairo/win32/vk_to_xkbcommon.h libkc3_window/cairo/win32/window_cairo_win32.c libkc3_window/cairo/win32/window_cairo_win32.h libkc3_window/cairo/window_cairo.c libkc3_window/cairo/window_cairo.h libkc3_window/cairo/xcb/demo/window_cairo_xcb_demo.c libkc3_window/cairo/xcb/window_cairo_xcb.c libkc3_window/cairo/xcb/window_cairo_xcb.h libkc3_window/sdl2/demo/bg_rect.c libkc3_window/sdl2/demo/bg_rect.h libkc3_window/sdl2/demo/earth.c libkc3_window/sdl2/demo/earth.h libkc3_window/sdl2/demo/flies.c libkc3_window/sdl2/demo/flies.h libkc3_window/sdl2/demo/lightspeed.c libkc3_window/sdl2/demo/lightspeed.h libkc3_window/sdl2/demo/mandelbrot_f128.c libkc3_window/sdl2/demo/mandelbrot_f128.h libkc3_window/sdl2/demo/matrix.c libkc3_window/sdl2/demo/matrix.h libkc3_window/sdl2/demo/toasters.c libkc3_window/sdl2/demo/toasters.h libkc3_window/sdl2/demo/window_sdl2_demo.c libkc3_window/sdl2/demo/window_sdl2_demo.h libkc3_window/sdl2/disabled/mandelbrot.c libkc3_window/sdl2/disabled/mandelbrot.h libkc3_window/sdl2/disabled/sdl2_font.c libkc3_window/sdl2/disabled/sdl2_font.h libkc3_window/sdl2/disabled/sdl2_sprite.c libkc3_window/sdl2/disabled/sdl2_sprite.h libkc3_window/sdl2/dmat3.h libkc3_window/sdl2/dmat4.c libkc3_window/sdl2/dmat4.h libkc3_window/sdl2/dvec2.c libkc3_window/sdl2/dvec2.h libkc3_window/sdl2/dvec3.c libkc3_window/sdl2/dvec3.h libkc3_window/sdl2/gl_camera.c libkc3_window/sdl2/gl_camera.h libkc3_window/sdl2/gl_cylinder.c libkc3_window/sdl2/gl_cylinder.h libkc3_window/sdl2/gl_deprecated.c libkc3_window/sdl2/gl_deprecated.h libkc3_window/sdl2/gl_font.c libkc3_window/sdl2/gl_font.h libkc3_window/sdl2/gl_lines.c libkc3_window/sdl2/gl_lines.h libkc3_window/sdl2/gl_object.c libkc3_window/sdl2/gl_object.h libkc3_window/sdl2/gl_ortho.c libkc3_window/sdl2/gl_ortho.h libkc3_window/sdl2/gl_sphere.c libkc3_window/sdl2/gl_sphere.h libkc3_window/sdl2/gl_sprite.c libkc3_window/sdl2/gl_sprite.h libkc3_window/sdl2/gl_square.c libkc3_window/sdl2/gl_square.h libkc3_window/sdl2/gl_text.c libkc3_window/sdl2/gl_text.h libkc3_window/sdl2/gl_triangle.c libkc3_window/sdl2/gl_triangle.h libkc3_window/sdl2/gl_vertex.c libkc3_window/sdl2/gl_vertex.h libkc3_window/sdl2/gl_vtext.c libkc3_window/sdl2/gl_vtext.h libkc3_window/sdl2/mat3.h libkc3_window/sdl2/mat4.c libkc3_window/sdl2/mat4.h libkc3_window/sdl2/types.h libkc3_window/sdl2/vec2.c libkc3_window/sdl2/vec2.h libkc3_window/sdl2/vec3.c libkc3_window/sdl2/vec3.h libkc3_window/sdl2/window_sdl2.c libkc3_window/sdl2/window_sdl2.h libkc3_window/types.h libkc3_window/window.c libkc3_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/libkc3_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 '
KC3_OBJC_SOURCES='libkc3_window/cairo/quartz/window_cairo_quartz.m libkc3_window/cairo/quartz/window_cairo_quartz_app_delegate.m libkc3_window/cairo/quartz/window_cairo_quartz_view.m libkc3_window/cairo/quartz/window_cairo_quartz_view_controller.m '
-KC3_OTHER_SOURCES='AUTHORS Makefile README.md config.subr configure fonts/Computer Modern/cmunbl-webfont.ttf fonts/Computer Modern/cmunbl.otf fonts/Computer Modern/cmunbx-webfont.ttf fonts/Computer Modern/cmunbx.otf fonts/Computer Modern/cmunbxo-webfont.ttf fonts/Computer Modern/cmunbxo.otf fonts/Computer Modern/cmunrm-webfont.ttf fonts/Computer Modern/cmunrm.otf fonts/Computer Modern/cmunsi-webfont.ttf fonts/Computer Modern/cmunsi.otf fonts/Computer Modern/cmunsl-webfont.ttf fonts/Computer Modern/cmunsl.otf fonts/Computer Modern/cmunss-webfont.ttf fonts/Computer Modern/cmunss.otf fonts/Computer Modern/cmunsx-webfont.ttf fonts/Computer Modern/cmunsx.otf fonts/Courier New/Courier New.ttf fonts/Courier/fonts/OGCourier-Bold.otf fonts/Courier/fonts/OGCourier-Bold.ttf fonts/Courier/fonts/OGCourier-BoldItalic.otf fonts/Courier/fonts/OGCourier-BoldItalic.ttf fonts/Courier/fonts/OGCourier-Italic.otf fonts/Courier/fonts/OGCourier-Italic.ttf fonts/Courier/fonts/OGCourier.otf fonts/Courier/fonts/OGCourier.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.ttf fonts/Courier/sfd/OGCourier-Bold.sfd.ttf fonts/Courier/sfd/OGCourier-BoldItalic.sfd.ttf fonts/Courier/sfd/OGCourier-Italic.sfd.ttf fonts/Courier/sfd/OGCourier.sfd.ttf fonts/Inter/InterVariable-Italic.ttf fonts/Inter/InterVariable.ttf fonts/Inter/extras/otf/Inter-Black.otf fonts/Inter/extras/otf/Inter-BlackItalic.otf fonts/Inter/extras/otf/Inter-Bold.otf fonts/Inter/extras/otf/Inter-BoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraBold.otf fonts/Inter/extras/otf/Inter-ExtraBoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraLight.otf fonts/Inter/extras/otf/Inter-ExtraLightItalic.otf fonts/Inter/extras/otf/Inter-Italic.otf fonts/Inter/extras/otf/Inter-Light.otf fonts/Inter/extras/otf/Inter-LightItalic.otf fonts/Inter/extras/otf/Inter-Medium.otf fonts/Inter/extras/otf/Inter-MediumItalic.otf fonts/Inter/extras/otf/Inter-Regular.otf fonts/Inter/extras/otf/Inter-SemiBold.otf fonts/Inter/extras/otf/Inter-SemiBoldItalic.otf fonts/Inter/extras/otf/Inter-Thin.otf fonts/Inter/extras/otf/Inter-ThinItalic.otf fonts/Inter/extras/otf/InterDisplay-Black.otf fonts/Inter/extras/otf/InterDisplay-BlackItalic.otf fonts/Inter/extras/otf/InterDisplay-Bold.otf fonts/Inter/extras/otf/InterDisplay-BoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraBold.otf fonts/Inter/extras/otf/InterDisplay-ExtraBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraLight.otf fonts/Inter/extras/otf/InterDisplay-ExtraLightItalic.otf fonts/Inter/extras/otf/InterDisplay-Italic.otf fonts/Inter/extras/otf/InterDisplay-Light.otf fonts/Inter/extras/otf/InterDisplay-LightItalic.otf fonts/Inter/extras/otf/InterDisplay-Medium.otf fonts/Inter/extras/otf/InterDisplay-MediumItalic.otf fonts/Inter/extras/otf/InterDisplay-Regular.otf fonts/Inter/extras/otf/InterDisplay-SemiBold.otf fonts/Inter/extras/otf/InterDisplay-SemiBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-Thin.otf fonts/Inter/extras/otf/InterDisplay-ThinItalic.otf fonts/Inter/extras/ttf/Inter-Black.ttf fonts/Inter/extras/ttf/Inter-BlackItalic.ttf fonts/Inter/extras/ttf/Inter-Bold.ttf fonts/Inter/extras/ttf/Inter-BoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraBold.ttf fonts/Inter/extras/ttf/Inter-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraLight.ttf fonts/Inter/extras/ttf/Inter-ExtraLightItalic.ttf fonts/Inter/extras/ttf/Inter-Italic.ttf fonts/Inter/extras/ttf/Inter-Light.ttf fonts/Inter/extras/ttf/Inter-LightItalic.ttf fonts/Inter/extras/ttf/Inter-Medium.ttf fonts/Inter/extras/ttf/Inter-MediumItalic.ttf fonts/Inter/extras/ttf/Inter-Regular.ttf fonts/Inter/extras/ttf/Inter-SemiBold.ttf fonts/Inter/extras/ttf/Inter-SemiBoldItalic.ttf fonts/Inter/extras/ttf/Inter-Thin.ttf fonts/Inter/extras/ttf/Inter-ThinItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Black.ttf fonts/Inter/extras/ttf/InterDisplay-BlackItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Bold.ttf fonts/Inter/extras/ttf/InterDisplay-BoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBold.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLight.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Italic.ttf fonts/Inter/extras/ttf/InterDisplay-Light.ttf fonts/Inter/extras/ttf/InterDisplay-LightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Medium.ttf fonts/Inter/extras/ttf/InterDisplay-MediumItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Regular.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBold.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Thin.ttf fonts/Inter/extras/ttf/InterDisplay-ThinItalic.ttf fonts/Noto Sans/NotoSans-Black.ttf fonts/Noto Sans/NotoSans-BlackItalic.ttf fonts/Noto Sans/NotoSans-Bold.ttf fonts/Noto Sans/NotoSans-BoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraBold.ttf fonts/Noto Sans/NotoSans-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraLight.ttf fonts/Noto Sans/NotoSans-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans-Italic-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans-Italic.ttf fonts/Noto Sans/NotoSans-Light.ttf fonts/Noto Sans/NotoSans-LightItalic.ttf fonts/Noto Sans/NotoSans-Medium.ttf fonts/Noto Sans/NotoSans-MediumItalic.ttf fonts/Noto Sans/NotoSans-Regular.ttf fonts/Noto Sans/NotoSans-SemiBold.ttf fonts/Noto Sans/NotoSans-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans-Thin.ttf fonts/Noto Sans/NotoSans-ThinItalic.ttf fonts/Noto Sans/NotoSans-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans_Condensed-Black.ttf fonts/Noto Sans/NotoSans_Condensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Bold.ttf fonts/Noto Sans/NotoSans_Condensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Italic.ttf fonts/Noto Sans/NotoSans_Condensed-Light.ttf fonts/Noto Sans/NotoSans_Condensed-LightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Medium.ttf fonts/Noto Sans/NotoSans_Condensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Regular.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBold.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Thin.ttf fonts/Noto Sans/NotoSans_Condensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Black.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Bold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Italic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Light.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Medium.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Regular.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Thin.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Black.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Bold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Italic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Light.ttf fonts/Noto Sans/NotoSans_SemiCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Medium.ttf fonts/Noto Sans/NotoSans_SemiCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Regular.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Thin.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ThinItalic.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/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 kc3.index kc3.version lib/kc3/0.1/array.kc3 lib/kc3/0.1/complex.facts lib/kc3/0.1/cow.kc3 lib/kc3/0.1/ekc3.kc3 lib/kc3/0.1/f128.facts lib/kc3/0.1/f32.facts lib/kc3/0.1/f64.facts lib/kc3/0.1/gl/dvec2.kc3 lib/kc3/0.1/gl/dvec3.kc3 lib/kc3/0.1/gl/object.kc3 lib/kc3/0.1/gl/sphere.kc3 lib/kc3/0.1/gl/triangle.kc3 lib/kc3/0.1/gl/vec2.kc3 lib/kc3/0.1/gl/vec3.kc3 lib/kc3/0.1/gl/vertex.kc3 lib/kc3/0.1/http.kc3 lib/kc3/0.1/integer.facts lib/kc3/0.1/kc3.facts lib/kc3/0.1/kc3/operator.kc3 lib/kc3/0.1/list.kc3 lib/kc3/0.1/map.facts lib/kc3/0.1/ptr.facts lib/kc3/0.1/ptr_free.facts lib/kc3/0.1/ratio.facts lib/kc3/0.1/s16.facts lib/kc3/0.1/s16.kc3 lib/kc3/0.1/s32.kc3 lib/kc3/0.1/s64.facts lib/kc3/0.1/s64.kc3 lib/kc3/0.1/s8.kc3 lib/kc3/0.1/socket.kc3 lib/kc3/0.1/str.facts lib/kc3/0.1/sw.kc3 lib/kc3/0.1/sym.facts lib/kc3/0.1/u16.facts lib/kc3/0.1/u32.facts lib/kc3/0.1/u64.facts lib/kc3/0.1/u8.facts lib/kc3/0.1/uw.facts lib/kc3/0.1/var.facts lib/kc3/0.1/void.facts libkc3/tag_init.rb license.h sources.mk sources.sh test/buf_parse_test_su.rb test/ekc3/title.out.expected test/ekc3/title.ret.expected 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/ikc3/access.out.expected test/ikc3/access.ret.expected test/ikc3/array.err.expected test/ikc3/array.out.expected test/ikc3/array.ret.expected test/ikc3/block.out.expected test/ikc3/block.ret.expected test/ikc3/bool.err.expected test/ikc3/bool.out.expected test/ikc3/bool.ret.expected test/ikc3/call.err.expected test/ikc3/call.out.expected test/ikc3/call.ret.expected test/ikc3/cast.out.expected test/ikc3/cast.ret.expected test/ikc3/character.err.expected test/ikc3/character.out.expected test/ikc3/character.ret.expected test/ikc3/comment.err.expected test/ikc3/comment.out.expected test/ikc3/comment.ret.expected test/ikc3/complex.out.expected test/ikc3/complex.ret.expected test/ikc3/def.out.expected test/ikc3/def.ret.expected test/ikc3/defmodule.out.expected test/ikc3/defmodule.ret.expected test/ikc3/defoperator.out.expected test/ikc3/defoperator.ret.expected test/ikc3/defstruct.out.expected test/ikc3/defstruct.ret.expected test/ikc3/equal.err.expected test/ikc3/equal.out.expected test/ikc3/equal.ret.expected test/ikc3/fn.err.expected test/ikc3/fn.out.expected test/ikc3/fn.ret.expected test/ikc3/function_call.err.expected test/ikc3/function_call.out.expected test/ikc3/function_call.ret.expected test/ikc3/gl.out.expected test/ikc3/gl.ret.expected test/ikc3/globals.out.expected test/ikc3/globals.ret.expected test/ikc3/hello.err.expected test/ikc3/hello.out.expected test/ikc3/hello.ret.expected test/ikc3/ident.err.expected test/ikc3/ident.out.expected test/ikc3/ident.ret.expected test/ikc3/if.out.expected test/ikc3/if.ret.expected test/ikc3/integer.lisp test/ikc3/integer.out.expected test/ikc3/integer.ret.expected test/ikc3/integer_add.out.expected test/ikc3/integer_add.ret.expected test/ikc3/integer_band.out.expected test/ikc3/integer_band.ret.expected test/ikc3/integer_bnot.out.expected test/ikc3/integer_bnot.ret.expected test/ikc3/integer_bor-2.out.expected test/ikc3/integer_bor-2.ret.expected test/ikc3/integer_bxor.out.expected test/ikc3/integer_bxor.ret.expected test/ikc3/integer_div.out.expected test/ikc3/integer_div.ret.expected test/ikc3/integer_eq.out.expected test/ikc3/integer_eq.ret.expected test/ikc3/integer_gt.out.expected test/ikc3/integer_gt.ret.expected test/ikc3/integer_lt.out.expected test/ikc3/integer_lt.ret.expected test/ikc3/integer_mod-2.out.expected test/ikc3/integer_mod-2.ret.expected test/ikc3/integer_mul.out.expected test/ikc3/integer_mul.ret.expected test/ikc3/integer_neg.out.expected test/ikc3/integer_neg.ret.expected test/ikc3/integer_sub.out.expected test/ikc3/integer_sub.ret.expected test/ikc3/let.out.expected test/ikc3/let.ret.expected test/ikc3/list.err.expected test/ikc3/list.out.expected test/ikc3/list.ret.expected test/ikc3/macro.out.expected test/ikc3/macro.ret.expected test/ikc3/map.out.expected test/ikc3/map.ret.expected test/ikc3/op.err.expected test/ikc3/op.out.expected test/ikc3/op.ret.expected test/ikc3/plist.err.expected test/ikc3/plist.out.expected test/ikc3/plist.ret.expected test/ikc3/puts.out.expected test/ikc3/puts.ret.expected test/ikc3/quote.out.expected test/ikc3/quote.ret.expected test/ikc3/ratio.out.expected test/ikc3/ratio.ret.expected test/ikc3/str.err.expected test/ikc3/str.out.expected test/ikc3/str.ret.expected test/ikc3/struct.out.expected test/ikc3/struct.ret.expected test/ikc3/sym.err.expected test/ikc3/sym.out.expected test/ikc3/sym.ret.expected test/ikc3/tuple.err.expected test/ikc3/tuple.out.expected test/ikc3/tuple.ret.expected test/ikc3/var.out.expected test/ikc3/var.ret.expected test/ikc3/void.out.expected test/ikc3/void.ret.expected test/ikc3_test test/replace_lines.rb test/test.rb test/test_case_end.rb test/zero '
+KC3_OTHER_SOURCES='AUTHORS Makefile README.md config.subr configure fonts/Computer Modern/cmunbl-webfont.ttf fonts/Computer Modern/cmunbl.otf fonts/Computer Modern/cmunbx-webfont.ttf fonts/Computer Modern/cmunbx.otf fonts/Computer Modern/cmunbxo-webfont.ttf fonts/Computer Modern/cmunbxo.otf fonts/Computer Modern/cmunrm-webfont.ttf fonts/Computer Modern/cmunrm.otf fonts/Computer Modern/cmunsi-webfont.ttf fonts/Computer Modern/cmunsi.otf fonts/Computer Modern/cmunsl-webfont.ttf fonts/Computer Modern/cmunsl.otf fonts/Computer Modern/cmunss-webfont.ttf fonts/Computer Modern/cmunss.otf fonts/Computer Modern/cmunsx-webfont.ttf fonts/Computer Modern/cmunsx.otf fonts/Courier New/Courier New.ttf fonts/Courier/fonts/OGCourier-Bold.otf fonts/Courier/fonts/OGCourier-Bold.ttf fonts/Courier/fonts/OGCourier-BoldItalic.otf fonts/Courier/fonts/OGCourier-BoldItalic.ttf fonts/Courier/fonts/OGCourier-Italic.otf fonts/Courier/fonts/OGCourier-Italic.ttf fonts/Courier/fonts/OGCourier.otf fonts/Courier/fonts/OGCourier.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Bold.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-BoldItalic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot-Italic.ttf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.otf fonts/Courier/fonts/zero-dot/OGCourierZeroDot.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Bold.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-BoldItalic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash-Italic.ttf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.otf fonts/Courier/fonts/zero-slash/OGCourierZeroSlash.ttf fonts/Courier/sfd/OGCourier-Bold.sfd.ttf fonts/Courier/sfd/OGCourier-BoldItalic.sfd.ttf fonts/Courier/sfd/OGCourier-Italic.sfd.ttf fonts/Courier/sfd/OGCourier.sfd.ttf fonts/Inter/InterVariable-Italic.ttf fonts/Inter/InterVariable.ttf fonts/Inter/extras/otf/Inter-Black.otf fonts/Inter/extras/otf/Inter-BlackItalic.otf fonts/Inter/extras/otf/Inter-Bold.otf fonts/Inter/extras/otf/Inter-BoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraBold.otf fonts/Inter/extras/otf/Inter-ExtraBoldItalic.otf fonts/Inter/extras/otf/Inter-ExtraLight.otf fonts/Inter/extras/otf/Inter-ExtraLightItalic.otf fonts/Inter/extras/otf/Inter-Italic.otf fonts/Inter/extras/otf/Inter-Light.otf fonts/Inter/extras/otf/Inter-LightItalic.otf fonts/Inter/extras/otf/Inter-Medium.otf fonts/Inter/extras/otf/Inter-MediumItalic.otf fonts/Inter/extras/otf/Inter-Regular.otf fonts/Inter/extras/otf/Inter-SemiBold.otf fonts/Inter/extras/otf/Inter-SemiBoldItalic.otf fonts/Inter/extras/otf/Inter-Thin.otf fonts/Inter/extras/otf/Inter-ThinItalic.otf fonts/Inter/extras/otf/InterDisplay-Black.otf fonts/Inter/extras/otf/InterDisplay-BlackItalic.otf fonts/Inter/extras/otf/InterDisplay-Bold.otf fonts/Inter/extras/otf/InterDisplay-BoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraBold.otf fonts/Inter/extras/otf/InterDisplay-ExtraBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-ExtraLight.otf fonts/Inter/extras/otf/InterDisplay-ExtraLightItalic.otf fonts/Inter/extras/otf/InterDisplay-Italic.otf fonts/Inter/extras/otf/InterDisplay-Light.otf fonts/Inter/extras/otf/InterDisplay-LightItalic.otf fonts/Inter/extras/otf/InterDisplay-Medium.otf fonts/Inter/extras/otf/InterDisplay-MediumItalic.otf fonts/Inter/extras/otf/InterDisplay-Regular.otf fonts/Inter/extras/otf/InterDisplay-SemiBold.otf fonts/Inter/extras/otf/InterDisplay-SemiBoldItalic.otf fonts/Inter/extras/otf/InterDisplay-Thin.otf fonts/Inter/extras/otf/InterDisplay-ThinItalic.otf fonts/Inter/extras/ttf/Inter-Black.ttf fonts/Inter/extras/ttf/Inter-BlackItalic.ttf fonts/Inter/extras/ttf/Inter-Bold.ttf fonts/Inter/extras/ttf/Inter-BoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraBold.ttf fonts/Inter/extras/ttf/Inter-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/Inter-ExtraLight.ttf fonts/Inter/extras/ttf/Inter-ExtraLightItalic.ttf fonts/Inter/extras/ttf/Inter-Italic.ttf fonts/Inter/extras/ttf/Inter-Light.ttf fonts/Inter/extras/ttf/Inter-LightItalic.ttf fonts/Inter/extras/ttf/Inter-Medium.ttf fonts/Inter/extras/ttf/Inter-MediumItalic.ttf fonts/Inter/extras/ttf/Inter-Regular.ttf fonts/Inter/extras/ttf/Inter-SemiBold.ttf fonts/Inter/extras/ttf/Inter-SemiBoldItalic.ttf fonts/Inter/extras/ttf/Inter-Thin.ttf fonts/Inter/extras/ttf/Inter-ThinItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Black.ttf fonts/Inter/extras/ttf/InterDisplay-BlackItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Bold.ttf fonts/Inter/extras/ttf/InterDisplay-BoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBold.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLight.ttf fonts/Inter/extras/ttf/InterDisplay-ExtraLightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Italic.ttf fonts/Inter/extras/ttf/InterDisplay-Light.ttf fonts/Inter/extras/ttf/InterDisplay-LightItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Medium.ttf fonts/Inter/extras/ttf/InterDisplay-MediumItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Regular.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBold.ttf fonts/Inter/extras/ttf/InterDisplay-SemiBoldItalic.ttf fonts/Inter/extras/ttf/InterDisplay-Thin.ttf fonts/Inter/extras/ttf/InterDisplay-ThinItalic.ttf fonts/Noto Sans/NotoSans-Black.ttf fonts/Noto Sans/NotoSans-BlackItalic.ttf fonts/Noto Sans/NotoSans-Bold.ttf fonts/Noto Sans/NotoSans-BoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraBold.ttf fonts/Noto Sans/NotoSans-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans-ExtraLight.ttf fonts/Noto Sans/NotoSans-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans-Italic-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans-Italic.ttf fonts/Noto Sans/NotoSans-Light.ttf fonts/Noto Sans/NotoSans-LightItalic.ttf fonts/Noto Sans/NotoSans-Medium.ttf fonts/Noto Sans/NotoSans-MediumItalic.ttf fonts/Noto Sans/NotoSans-Regular.ttf fonts/Noto Sans/NotoSans-SemiBold.ttf fonts/Noto Sans/NotoSans-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans-Thin.ttf fonts/Noto Sans/NotoSans-ThinItalic.ttf fonts/Noto Sans/NotoSans-VariableFont_wdth,wght.ttf fonts/Noto Sans/NotoSans_Condensed-Black.ttf fonts/Noto Sans/NotoSans_Condensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Bold.ttf fonts/Noto Sans/NotoSans_Condensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_Condensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Italic.ttf fonts/Noto Sans/NotoSans_Condensed-Light.ttf fonts/Noto Sans/NotoSans_Condensed-LightItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Medium.ttf fonts/Noto Sans/NotoSans_Condensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Regular.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBold.ttf fonts/Noto Sans/NotoSans_Condensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_Condensed-Thin.ttf fonts/Noto Sans/NotoSans_Condensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Black.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Bold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Italic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Light.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Medium.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Regular.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-Thin.ttf fonts/Noto Sans/NotoSans_ExtraCondensed-ThinItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Black.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BlackItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Bold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-BoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLight.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ExtraLightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Italic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Light.ttf fonts/Noto Sans/NotoSans_SemiCondensed-LightItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Medium.ttf fonts/Noto Sans/NotoSans_SemiCondensed-MediumItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Regular.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBold.ttf fonts/Noto Sans/NotoSans_SemiCondensed-SemiBoldItalic.ttf fonts/Noto Sans/NotoSans_SemiCondensed-Thin.ttf fonts/Noto Sans/NotoSans_SemiCondensed-ThinItalic.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/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 kc3.index kc3.version lib/kc3/0.1/array.kc3 lib/kc3/0.1/complex.facts lib/kc3/0.1/cow.kc3 lib/kc3/0.1/ekc3.kc3 lib/kc3/0.1/f128.facts lib/kc3/0.1/f32.facts lib/kc3/0.1/f64.facts lib/kc3/0.1/gl/dvec2.kc3 lib/kc3/0.1/gl/dvec3.kc3 lib/kc3/0.1/gl/object.kc3 lib/kc3/0.1/gl/sphere.kc3 lib/kc3/0.1/gl/triangle.kc3 lib/kc3/0.1/gl/vec2.kc3 lib/kc3/0.1/gl/vec3.kc3 lib/kc3/0.1/gl/vertex.kc3 lib/kc3/0.1/http.kc3 lib/kc3/0.1/integer.facts lib/kc3/0.1/kc3.facts lib/kc3/0.1/kc3/operator.kc3 lib/kc3/0.1/list.kc3 lib/kc3/0.1/map.facts lib/kc3/0.1/ptr.facts lib/kc3/0.1/ptr_free.facts lib/kc3/0.1/ratio.facts lib/kc3/0.1/s16.facts lib/kc3/0.1/s16.kc3 lib/kc3/0.1/s32.kc3 lib/kc3/0.1/s64.facts lib/kc3/0.1/s64.kc3 lib/kc3/0.1/s8.kc3 lib/kc3/0.1/socket.kc3 lib/kc3/0.1/str.facts lib/kc3/0.1/sw.kc3 lib/kc3/0.1/sym.facts lib/kc3/0.1/u16.facts lib/kc3/0.1/u32.facts lib/kc3/0.1/u64.facts lib/kc3/0.1/u8.facts lib/kc3/0.1/uw.facts lib/kc3/0.1/var.facts lib/kc3/0.1/void.facts libkc3/tag_init.rb license.h sources.mk sources.sh test/buf_parse_test_su.rb test/ekc3/title.out.expected test/ekc3/title.ret.expected 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/http/server.kc3.ret.expected test/http/server.out.expected test/ikc3/access.out.expected test/ikc3/access.ret.expected test/ikc3/array.err.expected test/ikc3/array.out.expected test/ikc3/array.ret.expected test/ikc3/block.out.expected test/ikc3/block.ret.expected test/ikc3/bool.err.expected test/ikc3/bool.out.expected test/ikc3/bool.ret.expected test/ikc3/call.err.expected test/ikc3/call.out.expected test/ikc3/call.ret.expected test/ikc3/cast.out.expected test/ikc3/cast.ret.expected test/ikc3/character.err.expected test/ikc3/character.out.expected test/ikc3/character.ret.expected test/ikc3/comment.err.expected test/ikc3/comment.out.expected test/ikc3/comment.ret.expected test/ikc3/complex.out.expected test/ikc3/complex.ret.expected test/ikc3/def.out.expected test/ikc3/def.ret.expected test/ikc3/defmodule.out.expected test/ikc3/defmodule.ret.expected test/ikc3/defoperator.out.expected test/ikc3/defoperator.ret.expected test/ikc3/defstruct.out.expected test/ikc3/defstruct.ret.expected test/ikc3/equal.err.expected test/ikc3/equal.out.expected test/ikc3/equal.ret.expected test/ikc3/fn.err.expected test/ikc3/fn.out.expected test/ikc3/fn.ret.expected test/ikc3/function_call.err.expected test/ikc3/function_call.out.expected test/ikc3/function_call.ret.expected test/ikc3/gl.out.expected test/ikc3/gl.ret.expected test/ikc3/globals.out.expected test/ikc3/globals.ret.expected test/ikc3/hello.err.expected test/ikc3/hello.out.expected test/ikc3/hello.ret.expected test/ikc3/ident.err.expected test/ikc3/ident.out.expected test/ikc3/ident.ret.expected test/ikc3/if.out.expected test/ikc3/if.ret.expected test/ikc3/integer.lisp test/ikc3/integer.out.expected test/ikc3/integer.ret.expected test/ikc3/integer_add.out.expected test/ikc3/integer_add.ret.expected test/ikc3/integer_band.out.expected test/ikc3/integer_band.ret.expected test/ikc3/integer_bnot.out.expected test/ikc3/integer_bnot.ret.expected test/ikc3/integer_bor-2.out.expected test/ikc3/integer_bor-2.ret.expected test/ikc3/integer_bxor.out.expected test/ikc3/integer_bxor.ret.expected test/ikc3/integer_div.out.expected test/ikc3/integer_div.ret.expected test/ikc3/integer_eq.out.expected test/ikc3/integer_eq.ret.expected test/ikc3/integer_gt.out.expected test/ikc3/integer_gt.ret.expected test/ikc3/integer_lt.out.expected test/ikc3/integer_lt.ret.expected test/ikc3/integer_mod-2.out.expected test/ikc3/integer_mod-2.ret.expected test/ikc3/integer_mul.out.expected test/ikc3/integer_mul.ret.expected test/ikc3/integer_neg.out.expected test/ikc3/integer_neg.ret.expected test/ikc3/integer_sub.out.expected test/ikc3/integer_sub.ret.expected test/ikc3/let.out.expected test/ikc3/let.ret.expected test/ikc3/list.err.expected test/ikc3/list.out.expected test/ikc3/list.ret.expected test/ikc3/macro.out.expected test/ikc3/macro.ret.expected test/ikc3/map.out.expected test/ikc3/map.ret.expected test/ikc3/op.err.expected test/ikc3/op.out.expected test/ikc3/op.ret.expected test/ikc3/plist.err.expected test/ikc3/plist.out.expected test/ikc3/plist.ret.expected test/ikc3/puts.out.expected test/ikc3/puts.ret.expected test/ikc3/quote.out.expected test/ikc3/quote.ret.expected test/ikc3/ratio.out.expected test/ikc3/ratio.ret.expected test/ikc3/str.err.expected test/ikc3/str.out.expected test/ikc3/str.ret.expected test/ikc3/struct.out.expected test/ikc3/struct.ret.expected test/ikc3/sym.err.expected test/ikc3/sym.out.expected test/ikc3/sym.ret.expected test/ikc3/tuple.err.expected test/ikc3/tuple.out.expected test/ikc3/tuple.ret.expected test/ikc3/var.out.expected test/ikc3/var.ret.expected test/ikc3/void.out.expected test/ikc3/void.ret.expected test/ikc3_test test/replace_lines.rb test/test.rb test/test_case_end.rb test/zero '
KC3_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/README.markdown linenoise/example.c linenoise/linenoise.c linenoise/linenoise.h 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 '
diff --git a/test/Makefile b/test/Makefile
index 6c5eebe..3b81cb5 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -73,6 +73,9 @@ gdb_test: debug
gdb_test_ekc3:
cd ekc3 && gdb ../../kc3s/.libs/kc3s_debug
+gdb_test_http:
+ cd http && gdb ../../kc3s/.libs/kc3s_debug
+
lldb_test: debug
if [ -f libkc3_test_debug.core ]; then lldb .libs/libkc3_test_debug libkc3_test_debug.core; else lldb .libs/libkc3_test_debug; fi
@@ -108,6 +111,18 @@ test_ekc3_cov:
test_ekc3_debug:
KC3S=${SRC_TOP}/kc3s/kc3s_debug time ./ekc3_test
+test_http:
+ IKC3=${SRC_TOP}/ikc3/ikc3 time ./http_test
+
+test_http_asan:
+ IKC3=${SRC_TOP}/ikc3/ikc3_asan time ./http_test
+
+test_http_cov:
+ IKC3=${SRC_TOP}/ikc3/ikc3_cov time ./http_test
+
+test_http_debug:
+ IKC3=${SRC_TOP}/ikc3/ikc3_debug time ./http_test
+
test_ikc3:
IKC3=${SRC_TOP}/ikc3/ikc3 time ./ikc3_test
diff --git a/test/http/server.diff b/test/http/server.diff
new file mode 100644
index 0000000..07f3065
--- /dev/null
+++ b/test/http/server.diff
@@ -0,0 +1,194 @@
+--- server.out.expected Fri Jul 19 23:18:10 2024
++++ server.out Sat Jul 20 18:56:53 2024
+@@ -0,0 +1,186 @@
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++buf_parse_block_inner: line 6: missing separator:
++ S32 do
++
++ def cast
++buf_parse_block: buf_parse_block_inner
++tag_to_ffi_pointer: cannot cast Ident to Block
++env_module_load: S32: env_load
++env_module_ensure_loaded: module not found: S32
++env_eval_call: could not resolve call S32.cast
++env_eval_call_arguments: invalid argument: [fd: (S32) -1]
++Segmentation fault (core dumped)
+--- server.ret.expected Sat Jul 20 00:53:32 2024
++++ server.ret Sat Jul 20 18:56:53 2024
+@@ -1 +1 @@
+-0
++139
diff --git a/test/http/server.kc3 b/test/http/server.kc3
new file mode 100644
index 0000000..bc658e1
--- /dev/null
+++ b/test/http/server.kc3
@@ -0,0 +1,2 @@
+server = Socket.listen("localhost", 8000)
+client = Socket.accept(server)
diff --git a/test/http/server.kc3.ret.expected b/test/http/server.kc3.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/http/server.kc3.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/http/server.out b/test/http/server.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/http/server.out
diff --git a/test/http/server.out.expected b/test/http/server.out.expected
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/http/server.out.expected
diff --git a/test/http/server.ret b/test/http/server.ret
new file mode 100644
index 0000000..897bdc8
--- /dev/null
+++ b/test/http/server.ret
@@ -0,0 +1 @@
+139
diff --git a/test/http/server.ret.expected b/test/http/server.ret.expected
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/test/http/server.ret.expected
@@ -0,0 +1 @@
+0
diff --git a/test/http_test b/test/http_test
new file mode 100755
index 0000000..64f0d53
--- /dev/null
+++ b/test/http_test
@@ -0,0 +1,79 @@
+#!/bin/sh
+cd "$(dirname $0)/http" || exit
+
+TEST_COLOR_KO="[0;91m"
+TEST_COLOR_OK="[0;92m"
+TEST_COLOR_RESET="[0m"
+TEST_COUNT=0
+TEST_KO=0
+TEST_OK=0
+
+if [ "x$IKC3" = "x" ]; then
+ if [ -f ../../ikc3/ikc3 ]; then
+ IKC3=../../ikc3/ikc3
+ elif [ -f ../../ikc3 ]; then
+ IKC3=../../ikc3
+ fi
+fi
+
+test_ko() {
+ printf "%s" "${TEST_COLOR_KO}F${TEST_COLOR_RESET}"
+ TEST_KO=$(($TEST_KO + 1))
+ TEST_COUNT=$(($TEST_COUNT + 1))
+}
+
+test_ok() {
+ printf "%s" "${TEST_COLOR_OK}.${TEST_COLOR_RESET}"
+ TEST_OK=$(($TEST_OK + 1))
+ TEST_COUNT=$(($TEST_COUNT + 1))
+}
+
+if [ $# = 0 ]; then
+ if [ "x${EKC3_TEST_TARGETS}" = "x" ]; then
+ TARGETS="$(ls -1 *.kc3 | sed -e 's/[.]kc3$//')"
+ else
+ TARGETS="${EKC3_TEST_TARGETS}"
+ fi
+else
+ TARGETS="$@"
+fi
+
+for TARGET in $TARGETS; do
+ RESULT=test_ok
+ $IKC3 --load ${TARGET}.kc3 --quit > ${TARGET}.out 2>&1
+ echo $? > ${TARGET}.ret
+ if ! diff -abu ${TARGET}.out.expected ${TARGET}.out > ${TARGET}.diff
+ then
+ RESULT=test_ko
+ fi
+ if ! diff -abu ${TARGET}.ret.expected ${TARGET}.ret >> ${TARGET}.diff
+ then
+ RESULT=test_ko
+ fi
+ if [ "x$RESULT" = "xtest_ok" ]; then
+ rm ${TARGET}.diff
+ test_ok
+ else
+ test_ko
+ fi
+done
+echo
+DIFFS="$(for TARGET in $TARGETS; do
+ if [ -f "${TARGET}.diff" ]; then
+ printf "%s " "${TARGET}.diff"
+ fi
+done)"
+if [ "x$DIFFS" != "x" ]; then
+ ls $DIFFS
+ less $DIFFS || cat $DIFFS
+fi
+echo
+printf "%s" "Total $TEST_COUNT tests. "
+printf "%s" "${TEST_COLOR_OK}OK $TEST_OK ($(($TEST_OK * 100 / $TEST_COUNT))%)${TEST_COLOR_RESET}. "
+echo "${TEST_COLOR_KO}KO $TEST_KO ($(($TEST_KO * 100 / $TEST_COUNT))%)${TEST_COLOR_RESET}."
+
+if [ "x$TEST_KO" = "x0" ]; then
+ exit 0
+fi
+
+exit 1
diff --git a/test/ikc3/block.kc3 b/test/ikc3/block.kc3
index cfbc0a5..8531e77 100644
--- a/test/ikc3/block.kc3
+++ b/test/ikc3/block.kc3
@@ -43,3 +43,13 @@ quote do
2 + unquote(1 + 1)
unquote(3 + 3)
end
+quote do
+
+ def cast = cfn S32 "s32_init_cast" (Result, Sym, Tag)
+
+end
+do
+
+ def cast = cfn S32 "s32_init_cast" (Result, Sym, Tag)
+
+end
diff --git a/test/ikc3/block.out.expected b/test/ikc3/block.out.expected
index 9bd91a8..e059ec2 100644
--- a/test/ikc3/block.out.expected
+++ b/test/ikc3/block.out.expected
@@ -39,3 +39,7 @@ do
2 + 2
6
end
+do
+ def cast = cfn S32 "s32_init_cast" (Result, Sym, Tag)
+end
+cast
diff --git a/test/ikc3/defmodule.kc3 b/test/ikc3/defmodule.kc3
index 8735c30..787620f 100644
--- a/test/ikc3/defmodule.kc3
+++ b/test/ikc3/defmodule.kc3
@@ -34,3 +34,13 @@ quote Plop.b
Plop.b
quote Plop.b()
Plop.b()
+quote defmodule S32 do
+
+ def cast = cfn S32 "s32_init_cast" (Result, Sym, Tag)
+
+end
+defmodule S32 do
+
+ def cast = cfn S32 "s32_init_cast" (Result, Sym, Tag)
+
+end
diff --git a/test/ikc3/defmodule.out.expected b/test/ikc3/defmodule.out.expected
index de6736f..d88f9d4 100644
--- a/test/ikc3/defmodule.out.expected
+++ b/test/ikc3/defmodule.out.expected
@@ -26,3 +26,7 @@ Plop.b
Plop.fn () { a }
Plop.b()
1
+defmodule S32 do
+ def cast = cfn S32 "s32_init_cast" (Result, Sym, Tag)
+end
+S32
diff --git a/test/ikc3_test b/test/ikc3_test
index db6f89c..d49bda6 100755
--- a/test/ikc3_test
+++ b/test/ikc3_test
@@ -18,14 +18,14 @@ fi
test_ko() {
printf "%s" "${TEST_COLOR_KO}F${TEST_COLOR_RESET}"
- TEST_KO=$(($TEST_KO + 1))
- TEST_COUNT=$(($TEST_COUNT + 1))
+ echo $@ >> .test_ko
+ echo $@ >> .test
}
test_ok() {
printf "%s" "${TEST_COLOR_OK}.${TEST_COLOR_RESET}"
- TEST_OK=$(($TEST_OK + 1))
- TEST_COUNT=$(($TEST_COUNT + 1))
+ echo $@ >> .test_ok
+ echo $@ >> .test
}
if [ $# = 0 ]; then
@@ -38,25 +38,35 @@ else
TARGETS="$@"
fi
+rm -f .test .test_ko .test_ok
+touch .test .test_ko .test_ok
for TARGET in $TARGETS; do
- RESULT=test_ok
- $IKC3 --load ${TARGET}.kc3 --quit > ${TARGET}.out 2>&1
- echo $? > ${TARGET}.ret
- if ! diff -abu ${TARGET}.out.expected ${TARGET}.out > ${TARGET}.diff
- then
- RESULT=test_ko
- fi
- if ! diff -abu ${TARGET}.ret.expected ${TARGET}.ret >> ${TARGET}.diff
- then
- RESULT=test_ko
- fi
- if [ "x$RESULT" = "xtest_ok" ]; then
- rm ${TARGET}.diff
- test_ok
- else
- test_ko
- fi
+ (
+ RESULT=test_ok
+ $IKC3 --load ${TARGET}.kc3 --quit > ${TARGET}.out 2>&1
+ echo $? > ${TARGET}.ret
+ if ! diff -abu ${TARGET}.out.expected ${TARGET}.out \
+ > ${TARGET}.diff
+ then
+ RESULT=test_ko
+ fi
+ if ! diff -abu ${TARGET}.ret.expected ${TARGET}.ret \
+ >> ${TARGET}.diff
+ then
+ RESULT=test_ko
+ fi
+ if [ "x$RESULT" = "xtest_ok" ]; then
+ rm ${TARGET}.diff
+ test_ok ${TARGET}
+ else
+ test_ko ${TARGET}
+ fi
+ ) &
done
+wait
+TEST_COUNT=$(echo $(wc -l .test) | cut -f 1 -d ' ')
+TEST_KO=$(echo $(wc -l .test_ko) | cut -f 1 -d ' ')
+TEST_OK=$(echo $(wc -l .test_ok) | cut -f 1 -d ' ')
echo
DIFFS="$(for TARGET in $TARGETS; do
if [ -f "${TARGET}.diff" ]; then
diff --git a/test/inspect_test.c b/test/inspect_test.c
new file mode 100644
index 0000000..eb059f6
--- /dev/null
+++ b/test/inspect_test.c
@@ -0,0 +1,75 @@
+/* kc3
+ * Copyright 2022,2023,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 <assert.h>
+#include "../libkc3/inspect.h"
+#include "test.h"
+
+#define INSPECT_TEST_SYM(test, result) \
+ do { \
+ const s_sym *sym; \
+ s_str str; \
+ assert(test); \
+ assert(result); \
+ test_context("inspect_sym(" # test ") -> " # result); \
+ sym = sym_1(test); \
+ TEST_EQ(inspect_sym(sym, &str), &str); \
+ TEST_STRNCMP(str.ptr.p, (result), str.size); \
+ str_clean(&str); \
+ test_context(NULL); \
+ } while (0)
+
+TEST_CASE_PROTOTYPE(inspect_sym);
+
+void inspect_test (void)
+{
+ TEST_CASE_RUN(inspect_sym);
+}
+
+TEST_CASE(inspect_sym)
+{
+ INSPECT_TEST_SYM("", ":\"\"");
+ INSPECT_TEST_SYM(" ", ":\" \"");
+ INSPECT_TEST_SYM("\n", ":\"\\n\"");
+ INSPECT_TEST_SYM("\r", ":\"\\r\"");
+ INSPECT_TEST_SYM("\t", ":\"\\t\"");
+ INSPECT_TEST_SYM("\v", ":\"\\v\"");
+ INSPECT_TEST_SYM("\"", ":\"\\\"\"");
+ INSPECT_TEST_SYM(".", ":\".\"");
+ INSPECT_TEST_SYM("..", ":\"..\"");
+ INSPECT_TEST_SYM("...", ":\"...\"");
+ INSPECT_TEST_SYM(".. .", ":\".. .\"");
+ INSPECT_TEST_SYM("t", ":t");
+ INSPECT_TEST_SYM("T", "T");
+ INSPECT_TEST_SYM("test", ":test");
+ INSPECT_TEST_SYM("Test", "Test");
+ INSPECT_TEST_SYM("123", ":123");
+ INSPECT_TEST_SYM("test123", ":test123");
+ INSPECT_TEST_SYM("Test123", "Test123");
+ INSPECT_TEST_SYM("test 123", ":\"test 123\"");
+ INSPECT_TEST_SYM("Test 123", ":\"Test 123\"");
+ INSPECT_TEST_SYM("test123.test456", ":\"test123.test456\"");
+ INSPECT_TEST_SYM("Test123.Test456", "Test123.Test456");
+ INSPECT_TEST_SYM("test123(test456)", ":\"test123(test456)\"");
+ INSPECT_TEST_SYM("Test123(Test456)", ":\"Test123(Test456)\"");
+ INSPECT_TEST_SYM("test123{test456}", ":\"test123{test456}\"");
+ INSPECT_TEST_SYM("Test123{Test456}", ":\"Test123{Test456}\"");
+ INSPECT_TEST_SYM("É", "É");
+ INSPECT_TEST_SYM("Éo", "Éo");
+ INSPECT_TEST_SYM("Éoà \n\r\t\v\"",
+ ":\"Éoà \\n\\r\\t\\v\\\"\"");
+ INSPECT_TEST_SYM("é", ":é");
+ INSPECT_TEST_SYM("éo", ":éo");
+ INSPECT_TEST_SYM("éoà \n\r\t\v\"",
+ ":\"éoà \\n\\r\\t\\v\\\"\"");
+}
+TEST_CASE_END(inspect_sym)
diff --git a/test/sym_test.c b/test/sym_test.c
index abb4935..ac0559a 100644
--- a/test/sym_test.c
+++ b/test/sym_test.c
@@ -25,15 +25,15 @@
TEST_EQ(sym_1(test), sym_1(test)); \
} while (0)
-#define SYM_TEST_INSPECT(test, result) \
+#define INSPECT_TEST_SYM(test, result) \
do { \
const s_sym *sym; \
s_str str; \
assert(test); \
assert(result); \
- test_context("sym_inspect(" # test ") -> " # result); \
+ test_context("inspect_sym(" # test ") -> " # result); \
sym = sym_1(test); \
- TEST_EQ(sym_inspect(sym, &str), &str); \
+ TEST_EQ(inspect_sym(sym, &str), &str); \
TEST_STRNCMP(str.ptr.p, (result), str.size); \
str_clean(&str); \
test_context(NULL); \
@@ -41,12 +41,10 @@
TEST_CASE_PROTOTYPE(sym_1);
const s_sym * sym_test_1_test (const s8 *p);
-TEST_CASE_PROTOTYPE(sym_inspect);
void sym_test (void)
{
TEST_CASE_RUN(sym_1);
- TEST_CASE_RUN(sym_inspect);
}
TEST_CASE(sym_1)
@@ -112,42 +110,3 @@ TEST_CASE(sym_1)
SYM_TEST_1("éoà \n\r\t\v\"");
}
TEST_CASE_END(sym_1)
-
-TEST_CASE(sym_inspect)
-{
- SYM_TEST_INSPECT("", ":\"\"");
- SYM_TEST_INSPECT(" ", ":\" \"");
- SYM_TEST_INSPECT("\n", ":\"\\n\"");
- SYM_TEST_INSPECT("\r", ":\"\\r\"");
- SYM_TEST_INSPECT("\t", ":\"\\t\"");
- SYM_TEST_INSPECT("\v", ":\"\\v\"");
- SYM_TEST_INSPECT("\"", ":\"\\\"\"");
- SYM_TEST_INSPECT(".", ":\".\"");
- SYM_TEST_INSPECT("..", ":\"..\"");
- SYM_TEST_INSPECT("...", ":\"...\"");
- SYM_TEST_INSPECT(".. .", ":\".. .\"");
- SYM_TEST_INSPECT("t", ":t");
- SYM_TEST_INSPECT("T", "T");
- SYM_TEST_INSPECT("test", ":test");
- SYM_TEST_INSPECT("Test", "Test");
- SYM_TEST_INSPECT("123", ":123");
- SYM_TEST_INSPECT("test123", ":test123");
- SYM_TEST_INSPECT("Test123", "Test123");
- SYM_TEST_INSPECT("test 123", ":\"test 123\"");
- SYM_TEST_INSPECT("Test 123", ":\"Test 123\"");
- SYM_TEST_INSPECT("test123.test456", ":\"test123.test456\"");
- SYM_TEST_INSPECT("Test123.Test456", "Test123.Test456");
- SYM_TEST_INSPECT("test123(test456)", ":\"test123(test456)\"");
- SYM_TEST_INSPECT("Test123(Test456)", ":\"Test123(Test456)\"");
- SYM_TEST_INSPECT("test123{test456}", ":\"test123{test456}\"");
- SYM_TEST_INSPECT("Test123{Test456}", ":\"Test123{Test456}\"");
- SYM_TEST_INSPECT("É", "É");
- SYM_TEST_INSPECT("Éo", "Éo");
- SYM_TEST_INSPECT("Éoà \n\r\t\v\"",
- ":\"Éoà \\n\\r\\t\\v\\\"\"");
- SYM_TEST_INSPECT("é", ":é");
- SYM_TEST_INSPECT("éo", ":éo");
- SYM_TEST_INSPECT("éoà \n\r\t\v\"",
- ":\"éoà \\n\\r\\t\\v\\\"\"");
-}
-TEST_CASE_END(sym_inspect)
diff --git a/test/tag_test.h b/test/tag_test.h
index 9ddacbc..1ce933e 100644
--- a/test/tag_test.h
+++ b/test/tag_test.h
@@ -28,8 +28,8 @@
s_str str_expected; \
s_str str_test; \
test_ko(); \
- tag_inspect(tag_expected, &str_expected); \
- tag_inspect(tag_test, &str_test); \
+ inspect_tag(tag_expected, &str_expected); \
+ inspect_tag(tag_test, &str_test); \
printf("\n%sAssertion failed in %s:%d %s\n" \
"%s == %s\n" \
"Expected %s got %s.%s\n", \