diff --git a/libc3/gen.mk b/libc3/gen.mk
index 0781ba8..785f0a8 100644
--- a/libc3/gen.mk
+++ b/libc3/gen.mk
@@ -79,6 +79,7 @@ GENERATED_FILES = \
set_item__tag.c set_item__tag.h \
skiplist__fact.c skiplist__fact.h \
skiplist_node__fact.c skiplist_node__fact.h \
+ s8.c s8.h s16.c s16.h s32.c s32.h s64.c s64.h sw.c sw.h \
u8.c u8.h u16.c u16.h u32.c u32.h u64.c u64.h uw.c uw.h
gen: ${GENERATED_FILES}
@@ -171,6 +172,12 @@ buf_parse_u8.c: buf_parse_u.c.in gen.mk
buf_parse_u8.h: buf_parse_u.h.in gen.mk
${SED_BITS_8} < buf_parse_u.h.in > buf_parse_u8.h
+s8.c: s.c.in gen.mk
+ ${SED_BITS_8} < s.c.in > s8.c
+
+s8.h: s.h.in gen.mk
+ ${SED_BITS_8} < s.h.in > s8.h
+
u8.c: u.c.in gen.mk
${SED_BITS_8} < u.c.in > u8.c
@@ -265,6 +272,12 @@ buf_parse_u16.c: buf_parse_u.c.in gen.mk
buf_parse_u16.h: buf_parse_u.h.in gen.mk
${SED_BITS_16} < buf_parse_u.h.in > buf_parse_u16.h
+s16.c: s.c.in gen.mk
+ ${SED_BITS_16} < s.c.in > s16.c
+
+s16.h: s.h.in gen.mk
+ ${SED_BITS_16} < s.h.in > s16.h
+
u16.c: u.c.in gen.mk
${SED_BITS_16} < u.c.in > u16.c
@@ -359,6 +372,12 @@ buf_parse_u32.c: buf_parse_u.c.in gen.mk
buf_parse_u32.h: buf_parse_u.h.in gen.mk
${SED_BITS_32} < buf_parse_u.h.in > buf_parse_u32.h
+s32.c: s.c.in gen.mk
+ ${SED_BITS_32} < s.c.in > s32.c
+
+s32.h: s.h.in gen.mk
+ ${SED_BITS_32} < s.h.in > s32.h
+
u32.c: u.c.in gen.mk
${SED_BITS_32} < u.c.in > u32.c
@@ -453,6 +472,12 @@ buf_parse_u64.c: buf_parse_u.c.in gen.mk
buf_parse_u64.h: buf_parse_u.h.in gen.mk
${SED_BITS_64} < buf_parse_u.h.in > buf_parse_u64.h
+s64.c: s.c.in gen.mk
+ ${SED_BITS_64} < s.c.in > s64.c
+
+s64.h: s.h.in gen.mk
+ ${SED_BITS_64} < s.h.in > s64.h
+
u64.c: u.c.in gen.mk
${SED_BITS_64} < u.c.in > u64.c
@@ -547,6 +572,12 @@ buf_parse_uw.c: buf_parse_u.c.in gen.mk
buf_parse_uw.h: buf_parse_u.h.in gen.mk
${SED_BITS_W} < buf_parse_u.h.in > buf_parse_uw.h
+sw.c: s.c.in gen.mk
+ ${SED_BITS_W} < s.c.in > sw.c
+
+sw.h: s.h.in gen.mk
+ ${SED_BITS_W} < s.h.in > sw.h
+
uw.c: u.c.in gen.mk
${SED_BITS_W} < u.c.in > uw.c
diff --git a/libc3/s.c.in b/libc3/s.c.in
new file mode 100644
index 0000000..1c4eabb
--- /dev/null
+++ b/libc3/s.c.in
@@ -0,0 +1,81 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=_BITS$ bits=_bits$ */
+#include <assert.h>
+#include <err.h>
+#include "integer.h"
+#include "tag.h"
+#include "s_bits$.h"
+
+s_bits$ s_bits$_cast (s_tag *tag)
+{
+ switch (tag->type) {
+ case TAG_VOID:
+ return 0;
+ case TAG_ARRAY:
+ goto ko;
+ case TAG_BOOL:
+ return tag->data.bool ? 1 : 0;
+ case TAG_CALL:
+ goto ko;
+ case TAG_CFN:
+ goto ko;
+ case TAG_CHARACTER:
+ return (s_bits$) tag->data.character;
+ case TAG_F32:
+ return (s_bits$) tag->data.f32;
+ case TAG_F64:
+ return (s_bits$) tag->data.f64;
+ case TAG_FACT:
+ case TAG_FN:
+ case TAG_IDENT:
+ goto ko;
+ case TAG_INTEGER:
+ return integer_to_s_bits$(&tag->data.integer);
+ case TAG_SW:
+ return (s_bits$) tag->data.sw;
+ case TAG_S64:
+ return (s_bits$) tag->data.s64;
+ case TAG_S32:
+ return (s_bits$) tag->data.s32;
+ case TAG_S16:
+ return (s_bits$) tag->data.s16;
+ case TAG_S8:
+ return (s_bits$) tag->data.s8;
+ case TAG_U8:
+ return (s_bits$) tag->data.u8;
+ case TAG_U16:
+ return (s_bits$) tag->data.u16;
+ case TAG_U32:
+ return (s_bits$) tag->data.u32;
+ case TAG_U64:
+ return (s_bits$) tag->data.u64;
+ case TAG_UW:
+ return (s_bits$) tag->data.uw;
+ case TAG_LIST:
+ case TAG_PTAG:
+ case TAG_QUOTE:
+ case TAG_STR:
+ case TAG_SYM:
+ case TAG_TUPLE:
+ case TAG_VAR:
+ goto ko;
+ }
+ assert(! "s_bits$_cast: unknown tag type");
+ errx(1, "s_bits$_cast: unknown tag type: %d", tag->type);
+ return 0;
+ ko:
+ warnx("s_bits$_cast: cannot cast %s to s_bits$",
+ tag_type_to_sym(tag->type)->str.ptr.ps8);
+ return 0;
+}
diff --git a/libc3/s.h.in b/libc3/s.h.in
new file mode 100644
index 0000000..0363f1d
--- /dev/null
+++ b/libc3/s.h.in
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=_BITS$ bits=_bits$ */
+#ifndef S_BITS$_H
+#define S_BITS$_H
+
+#include "types.h"
+
+s_bits$ s_bits$_cast (s_tag *tag);
+
+#endif /* S8_H */
diff --git a/libc3/s16.c b/libc3/s16.c
new file mode 100644
index 0000000..9786a64
--- /dev/null
+++ b/libc3/s16.c
@@ -0,0 +1,81 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=16 bits=16 */
+#include <assert.h>
+#include <err.h>
+#include "integer.h"
+#include "tag.h"
+#include "s16.h"
+
+s16 s16_cast (s_tag *tag)
+{
+ switch (tag->type) {
+ case TAG_VOID:
+ return 0;
+ case TAG_ARRAY:
+ goto ko;
+ case TAG_BOOL:
+ return tag->data.bool ? 1 : 0;
+ case TAG_CALL:
+ goto ko;
+ case TAG_CFN:
+ goto ko;
+ case TAG_CHARACTER:
+ return (s16) tag->data.character;
+ case TAG_F32:
+ return (s16) tag->data.f32;
+ case TAG_F64:
+ return (s16) tag->data.f64;
+ case TAG_FACT:
+ case TAG_FN:
+ case TAG_IDENT:
+ goto ko;
+ case TAG_INTEGER:
+ return integer_to_s16(&tag->data.integer);
+ case TAG_SW:
+ return (s16) tag->data.sw;
+ case TAG_S64:
+ return (s16) tag->data.s64;
+ case TAG_S32:
+ return (s16) tag->data.s32;
+ case TAG_S16:
+ return (s16) tag->data.s16;
+ case TAG_S8:
+ return (s16) tag->data.s8;
+ case TAG_U8:
+ return (s16) tag->data.u8;
+ case TAG_U16:
+ return (s16) tag->data.u16;
+ case TAG_U32:
+ return (s16) tag->data.u32;
+ case TAG_U64:
+ return (s16) tag->data.u64;
+ case TAG_UW:
+ return (s16) tag->data.uw;
+ case TAG_LIST:
+ case TAG_PTAG:
+ case TAG_QUOTE:
+ case TAG_STR:
+ case TAG_SYM:
+ case TAG_TUPLE:
+ case TAG_VAR:
+ goto ko;
+ }
+ assert(! "s16_cast: unknown tag type");
+ errx(1, "s16_cast: unknown tag type: %d", tag->type);
+ return 0;
+ ko:
+ warnx("s16_cast: cannot cast %s to s16",
+ tag_type_to_sym(tag->type)->str.ptr.ps8);
+ return 0;
+}
diff --git a/libc3/s16.h b/libc3/s16.h
new file mode 100644
index 0000000..8eaf64e
--- /dev/null
+++ b/libc3/s16.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=16 bits=16 */
+#ifndef S16_H
+#define S16_H
+
+#include "types.h"
+
+s16 s16_cast (s_tag *tag);
+
+#endif /* S8_H */
diff --git a/libc3/s32.c b/libc3/s32.c
new file mode 100644
index 0000000..989a9ec
--- /dev/null
+++ b/libc3/s32.c
@@ -0,0 +1,81 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=32 bits=32 */
+#include <assert.h>
+#include <err.h>
+#include "integer.h"
+#include "tag.h"
+#include "s32.h"
+
+s32 s32_cast (s_tag *tag)
+{
+ switch (tag->type) {
+ case TAG_VOID:
+ return 0;
+ case TAG_ARRAY:
+ goto ko;
+ case TAG_BOOL:
+ return tag->data.bool ? 1 : 0;
+ case TAG_CALL:
+ goto ko;
+ case TAG_CFN:
+ goto ko;
+ case TAG_CHARACTER:
+ return (s32) tag->data.character;
+ case TAG_F32:
+ return (s32) tag->data.f32;
+ case TAG_F64:
+ return (s32) tag->data.f64;
+ case TAG_FACT:
+ case TAG_FN:
+ case TAG_IDENT:
+ goto ko;
+ case TAG_INTEGER:
+ return integer_to_s32(&tag->data.integer);
+ case TAG_SW:
+ return (s32) tag->data.sw;
+ case TAG_S64:
+ return (s32) tag->data.s64;
+ case TAG_S32:
+ return (s32) tag->data.s32;
+ case TAG_S16:
+ return (s32) tag->data.s16;
+ case TAG_S8:
+ return (s32) tag->data.s8;
+ case TAG_U8:
+ return (s32) tag->data.u8;
+ case TAG_U16:
+ return (s32) tag->data.u16;
+ case TAG_U32:
+ return (s32) tag->data.u32;
+ case TAG_U64:
+ return (s32) tag->data.u64;
+ case TAG_UW:
+ return (s32) tag->data.uw;
+ case TAG_LIST:
+ case TAG_PTAG:
+ case TAG_QUOTE:
+ case TAG_STR:
+ case TAG_SYM:
+ case TAG_TUPLE:
+ case TAG_VAR:
+ goto ko;
+ }
+ assert(! "s32_cast: unknown tag type");
+ errx(1, "s32_cast: unknown tag type: %d", tag->type);
+ return 0;
+ ko:
+ warnx("s32_cast: cannot cast %s to s32",
+ tag_type_to_sym(tag->type)->str.ptr.ps8);
+ return 0;
+}
diff --git a/libc3/s32.h b/libc3/s32.h
new file mode 100644
index 0000000..7f82bb7
--- /dev/null
+++ b/libc3/s32.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=32 bits=32 */
+#ifndef S32_H
+#define S32_H
+
+#include "types.h"
+
+s32 s32_cast (s_tag *tag);
+
+#endif /* S8_H */
diff --git a/libc3/s64.c b/libc3/s64.c
new file mode 100644
index 0000000..fc00a34
--- /dev/null
+++ b/libc3/s64.c
@@ -0,0 +1,81 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=64 bits=64 */
+#include <assert.h>
+#include <err.h>
+#include "integer.h"
+#include "tag.h"
+#include "s64.h"
+
+s64 s64_cast (s_tag *tag)
+{
+ switch (tag->type) {
+ case TAG_VOID:
+ return 0;
+ case TAG_ARRAY:
+ goto ko;
+ case TAG_BOOL:
+ return tag->data.bool ? 1 : 0;
+ case TAG_CALL:
+ goto ko;
+ case TAG_CFN:
+ goto ko;
+ case TAG_CHARACTER:
+ return (s64) tag->data.character;
+ case TAG_F32:
+ return (s64) tag->data.f32;
+ case TAG_F64:
+ return (s64) tag->data.f64;
+ case TAG_FACT:
+ case TAG_FN:
+ case TAG_IDENT:
+ goto ko;
+ case TAG_INTEGER:
+ return integer_to_s64(&tag->data.integer);
+ case TAG_SW:
+ return (s64) tag->data.sw;
+ case TAG_S64:
+ return (s64) tag->data.s64;
+ case TAG_S32:
+ return (s64) tag->data.s32;
+ case TAG_S16:
+ return (s64) tag->data.s16;
+ case TAG_S8:
+ return (s64) tag->data.s8;
+ case TAG_U8:
+ return (s64) tag->data.u8;
+ case TAG_U16:
+ return (s64) tag->data.u16;
+ case TAG_U32:
+ return (s64) tag->data.u32;
+ case TAG_U64:
+ return (s64) tag->data.u64;
+ case TAG_UW:
+ return (s64) tag->data.uw;
+ case TAG_LIST:
+ case TAG_PTAG:
+ case TAG_QUOTE:
+ case TAG_STR:
+ case TAG_SYM:
+ case TAG_TUPLE:
+ case TAG_VAR:
+ goto ko;
+ }
+ assert(! "s64_cast: unknown tag type");
+ errx(1, "s64_cast: unknown tag type: %d", tag->type);
+ return 0;
+ ko:
+ warnx("s64_cast: cannot cast %s to s64",
+ tag_type_to_sym(tag->type)->str.ptr.ps8);
+ return 0;
+}
diff --git a/libc3/s64.h b/libc3/s64.h
new file mode 100644
index 0000000..b1d1af7
--- /dev/null
+++ b/libc3/s64.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=64 bits=64 */
+#ifndef S64_H
+#define S64_H
+
+#include "types.h"
+
+s64 s64_cast (s_tag *tag);
+
+#endif /* S8_H */
diff --git a/libc3/s8.c b/libc3/s8.c
new file mode 100644
index 0000000..b0b3b85
--- /dev/null
+++ b/libc3/s8.c
@@ -0,0 +1,81 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=8 bits=8 */
+#include <assert.h>
+#include <err.h>
+#include "integer.h"
+#include "tag.h"
+#include "s8.h"
+
+s8 s8_cast (s_tag *tag)
+{
+ switch (tag->type) {
+ case TAG_VOID:
+ return 0;
+ case TAG_ARRAY:
+ goto ko;
+ case TAG_BOOL:
+ return tag->data.bool ? 1 : 0;
+ case TAG_CALL:
+ goto ko;
+ case TAG_CFN:
+ goto ko;
+ case TAG_CHARACTER:
+ return (s8) tag->data.character;
+ case TAG_F32:
+ return (s8) tag->data.f32;
+ case TAG_F64:
+ return (s8) tag->data.f64;
+ case TAG_FACT:
+ case TAG_FN:
+ case TAG_IDENT:
+ goto ko;
+ case TAG_INTEGER:
+ return integer_to_s8(&tag->data.integer);
+ case TAG_SW:
+ return (s8) tag->data.sw;
+ case TAG_S64:
+ return (s8) tag->data.s64;
+ case TAG_S32:
+ return (s8) tag->data.s32;
+ case TAG_S16:
+ return (s8) tag->data.s16;
+ case TAG_S8:
+ return (s8) tag->data.s8;
+ case TAG_U8:
+ return (s8) tag->data.u8;
+ case TAG_U16:
+ return (s8) tag->data.u16;
+ case TAG_U32:
+ return (s8) tag->data.u32;
+ case TAG_U64:
+ return (s8) tag->data.u64;
+ case TAG_UW:
+ return (s8) tag->data.uw;
+ case TAG_LIST:
+ case TAG_PTAG:
+ case TAG_QUOTE:
+ case TAG_STR:
+ case TAG_SYM:
+ case TAG_TUPLE:
+ case TAG_VAR:
+ goto ko;
+ }
+ assert(! "s8_cast: unknown tag type");
+ errx(1, "s8_cast: unknown tag type: %d", tag->type);
+ return 0;
+ ko:
+ warnx("s8_cast: cannot cast %s to s8",
+ tag_type_to_sym(tag->type)->str.ptr.ps8);
+ return 0;
+}
diff --git a/libc3/s8.h b/libc3/s8.h
new file mode 100644
index 0000000..c869234
--- /dev/null
+++ b/libc3/s8.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=8 bits=8 */
+#ifndef S8_H
+#define S8_H
+
+#include "types.h"
+
+s8 s8_cast (s_tag *tag);
+
+#endif /* S8_H */
diff --git a/libc3/sources.mk b/libc3/sources.mk
index 7473e67..a4a1a18 100644
--- a/libc3/sources.mk
+++ b/libc3/sources.mk
@@ -105,6 +105,10 @@ HEADERS = \
module.h \
operator.h \
quote.h \
+ s16.h \
+ s32.h \
+ s64.h \
+ s8.h \
set__fact.h \
set__tag.h \
set_cursor__fact.h \
@@ -116,6 +120,7 @@ HEADERS = \
skiplist__fact.h \
skiplist_node__fact.h \
str.h \
+ sw.h \
sym.h \
tag.h \
timespec.h \
@@ -231,6 +236,10 @@ SOURCES = \
module.c \
operator.c \
quote.c \
+ s16.c \
+ s32.c \
+ s64.c \
+ s8.c \
set__fact.c \
set__tag.c \
set_cursor__fact.c \
@@ -241,6 +250,7 @@ SOURCES = \
skiplist__fact.c \
skiplist_node__fact.c \
str.c \
+ sw.c \
sym.c \
tag.c \
timespec.c \
@@ -355,6 +365,10 @@ LO_SOURCES = \
module.c \
operator.c \
quote.c \
+ s16.c \
+ s32.c \
+ s64.c \
+ s8.c \
set__fact.c \
set__tag.c \
set_cursor__fact.c \
@@ -365,6 +379,7 @@ LO_SOURCES = \
skiplist__fact.c \
skiplist_node__fact.c \
str.c \
+ sw.c \
sym.c \
tag.c \
timespec.c \
diff --git a/libc3/sources.sh b/libc3/sources.sh
index 560b340..c7a5b1b 100644
--- a/libc3/sources.sh
+++ b/libc3/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
-HEADERS='abs.h arg.h array.h binding.h bool.h buf.h buf_file.h buf_inspect.h buf_inspect_s16.h buf_inspect_s16_binary.h buf_inspect_s16_decimal.h buf_inspect_s16_hexadecimal.h buf_inspect_s16_octal.h buf_inspect_s32.h buf_inspect_s32_binary.h buf_inspect_s32_decimal.h buf_inspect_s32_hexadecimal.h buf_inspect_s32_octal.h buf_inspect_s64.h buf_inspect_s64_binary.h buf_inspect_s64_decimal.h buf_inspect_s64_hexadecimal.h buf_inspect_s64_octal.h buf_inspect_s8.h buf_inspect_s8_binary.h buf_inspect_s8_decimal.h buf_inspect_s8_hexadecimal.h buf_inspect_s8_octal.h buf_inspect_sw.h buf_inspect_sw_binary.h buf_inspect_sw_decimal.h buf_inspect_sw_hexadecimal.h buf_inspect_sw_octal.h buf_inspect_u16.h buf_inspect_u16_binary.h buf_inspect_u16_decimal.h buf_inspect_u16_hexadecimal.h buf_inspect_u16_octal.h buf_inspect_u32.h buf_inspect_u32_binary.h buf_inspect_u32_decimal.h buf_inspect_u32_hexadecimal.h buf_inspect_u32_octal.h buf_inspect_u64.h buf_inspect_u64_binary.h buf_inspect_u64_decimal.h buf_inspect_u64_hexadecimal.h buf_inspect_u64_octal.h buf_inspect_u8.h buf_inspect_u8_binary.h buf_inspect_u8_decimal.h buf_inspect_u8_hexadecimal.h buf_inspect_u8_octal.h buf_inspect_uw.h buf_inspect_uw_binary.h buf_inspect_uw_decimal.h buf_inspect_uw_hexadecimal.h buf_inspect_uw_octal.h buf_parse.h buf_parse_c.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c3_main.h c_types.h call.h ceiling.h cfn.h character.h compare.h config.h env.h error.h error_handler.h eval.h fact.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h integer.h io.h list.h log.h module.h operator.h quote.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 str.h sym.h tag.h timespec.h tuple.h type.h types.h u16.h u32.h u64.h u8.h ucd.h uw.h '
-SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.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 str.c sym.c tag.c timespec.c tuple.c type.c u16.c u32.c u64.c u8.c ucd.c uw.c '
-LO_SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.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 str.c sym.c tag.c timespec.c tuple.c type.c u16.c u32.c u64.c u8.c ucd.c uw.c ../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 '
+HEADERS='abs.h arg.h array.h binding.h bool.h buf.h buf_file.h buf_inspect.h buf_inspect_s16.h buf_inspect_s16_binary.h buf_inspect_s16_decimal.h buf_inspect_s16_hexadecimal.h buf_inspect_s16_octal.h buf_inspect_s32.h buf_inspect_s32_binary.h buf_inspect_s32_decimal.h buf_inspect_s32_hexadecimal.h buf_inspect_s32_octal.h buf_inspect_s64.h buf_inspect_s64_binary.h buf_inspect_s64_decimal.h buf_inspect_s64_hexadecimal.h buf_inspect_s64_octal.h buf_inspect_s8.h buf_inspect_s8_binary.h buf_inspect_s8_decimal.h buf_inspect_s8_hexadecimal.h buf_inspect_s8_octal.h buf_inspect_sw.h buf_inspect_sw_binary.h buf_inspect_sw_decimal.h buf_inspect_sw_hexadecimal.h buf_inspect_sw_octal.h buf_inspect_u16.h buf_inspect_u16_binary.h buf_inspect_u16_decimal.h buf_inspect_u16_hexadecimal.h buf_inspect_u16_octal.h buf_inspect_u32.h buf_inspect_u32_binary.h buf_inspect_u32_decimal.h buf_inspect_u32_hexadecimal.h buf_inspect_u32_octal.h buf_inspect_u64.h buf_inspect_u64_binary.h buf_inspect_u64_decimal.h buf_inspect_u64_hexadecimal.h buf_inspect_u64_octal.h buf_inspect_u8.h buf_inspect_u8_binary.h buf_inspect_u8_decimal.h buf_inspect_u8_hexadecimal.h buf_inspect_u8_octal.h buf_inspect_uw.h buf_inspect_uw_binary.h buf_inspect_uw_decimal.h buf_inspect_uw_hexadecimal.h buf_inspect_uw_octal.h buf_parse.h buf_parse_c.h buf_parse_s16.h buf_parse_s32.h buf_parse_s64.h buf_parse_s8.h buf_parse_sw.h buf_parse_u16.h buf_parse_u32.h buf_parse_u64.h buf_parse_u8.h buf_parse_uw.h buf_save.h c3.h c3_main.h c_types.h call.h ceiling.h cfn.h character.h compare.h config.h env.h error.h error_handler.h eval.h fact.h facts.h facts_cursor.h facts_spec.h facts_spec_cursor.h facts_with.h facts_with_cursor.h file.h float.h fn.h fn_clause.h frame.h hash.h ident.h integer.h io.h list.h log.h module.h operator.h quote.h s16.h s32.h s64.h s8.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 str.h sw.h sym.h tag.h timespec.h tuple.h type.h types.h u16.h u32.h u64.h u8.h ucd.h uw.h '
+SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c s16.c s32.c s64.c s8.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 str.c sw.c sym.c tag.c timespec.c tuple.c type.c u16.c u32.c u64.c u8.c ucd.c uw.c '
+LO_SOURCES='abs.c arg.c array.c binding.c bool.c buf.c buf_file.c buf_inspect.c buf_inspect_s16.c buf_inspect_s16_binary.c buf_inspect_s16_decimal.c buf_inspect_s16_hexadecimal.c buf_inspect_s16_octal.c buf_inspect_s32.c buf_inspect_s32_binary.c buf_inspect_s32_decimal.c buf_inspect_s32_hexadecimal.c buf_inspect_s32_octal.c buf_inspect_s64.c buf_inspect_s64_binary.c buf_inspect_s64_decimal.c buf_inspect_s64_hexadecimal.c buf_inspect_s64_octal.c buf_inspect_s8.c buf_inspect_s8_binary.c buf_inspect_s8_decimal.c buf_inspect_s8_hexadecimal.c buf_inspect_s8_octal.c buf_inspect_sw.c buf_inspect_sw_binary.c buf_inspect_sw_decimal.c buf_inspect_sw_hexadecimal.c buf_inspect_sw_octal.c buf_inspect_u16.c buf_inspect_u16_binary.c buf_inspect_u16_decimal.c buf_inspect_u16_hexadecimal.c buf_inspect_u16_octal.c buf_inspect_u32.c buf_inspect_u32_binary.c buf_inspect_u32_decimal.c buf_inspect_u32_hexadecimal.c buf_inspect_u32_octal.c buf_inspect_u64.c buf_inspect_u64_binary.c buf_inspect_u64_decimal.c buf_inspect_u64_hexadecimal.c buf_inspect_u64_octal.c buf_inspect_u8.c buf_inspect_u8_binary.c buf_inspect_u8_decimal.c buf_inspect_u8_hexadecimal.c buf_inspect_u8_octal.c buf_inspect_uw.c buf_inspect_uw_binary.c buf_inspect_uw_decimal.c buf_inspect_uw_hexadecimal.c buf_inspect_uw_octal.c buf_parse.c buf_parse_c.c buf_parse_s16.c buf_parse_s32.c buf_parse_s64.c buf_parse_s8.c buf_parse_sw.c buf_parse_u16.c buf_parse_u32.c buf_parse_u64.c buf_parse_u8.c buf_parse_uw.c buf_save.c c3.c call.c ceiling.c cfn.c character.c compare.c env.c error.c error_handler.c eval.c fact.c facts.c facts_cursor.c facts_spec.c facts_spec_cursor.c facts_with.c facts_with_cursor.c file.c fn.c fn_clause.c frame.c hash.c ident.c integer.c io.c list.c log.c module.c operator.c quote.c s16.c s32.c s64.c s8.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 str.c sw.c sym.c tag.c timespec.c tuple.c type.c u16.c u32.c u64.c u8.c ucd.c uw.c ../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 '
diff --git a/libc3/sw.c b/libc3/sw.c
new file mode 100644
index 0000000..396ec19
--- /dev/null
+++ b/libc3/sw.c
@@ -0,0 +1,81 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=W bits=w */
+#include <assert.h>
+#include <err.h>
+#include "integer.h"
+#include "tag.h"
+#include "sw.h"
+
+sw sw_cast (s_tag *tag)
+{
+ switch (tag->type) {
+ case TAG_VOID:
+ return 0;
+ case TAG_ARRAY:
+ goto ko;
+ case TAG_BOOL:
+ return tag->data.bool ? 1 : 0;
+ case TAG_CALL:
+ goto ko;
+ case TAG_CFN:
+ goto ko;
+ case TAG_CHARACTER:
+ return (sw) tag->data.character;
+ case TAG_F32:
+ return (sw) tag->data.f32;
+ case TAG_F64:
+ return (sw) tag->data.f64;
+ case TAG_FACT:
+ case TAG_FN:
+ case TAG_IDENT:
+ goto ko;
+ case TAG_INTEGER:
+ return integer_to_sw(&tag->data.integer);
+ case TAG_SW:
+ return (sw) tag->data.sw;
+ case TAG_S64:
+ return (sw) tag->data.s64;
+ case TAG_S32:
+ return (sw) tag->data.s32;
+ case TAG_S16:
+ return (sw) tag->data.s16;
+ case TAG_S8:
+ return (sw) tag->data.s8;
+ case TAG_U8:
+ return (sw) tag->data.u8;
+ case TAG_U16:
+ return (sw) tag->data.u16;
+ case TAG_U32:
+ return (sw) tag->data.u32;
+ case TAG_U64:
+ return (sw) tag->data.u64;
+ case TAG_UW:
+ return (sw) tag->data.uw;
+ case TAG_LIST:
+ case TAG_PTAG:
+ case TAG_QUOTE:
+ case TAG_STR:
+ case TAG_SYM:
+ case TAG_TUPLE:
+ case TAG_VAR:
+ goto ko;
+ }
+ assert(! "sw_cast: unknown tag type");
+ errx(1, "sw_cast: unknown tag type: %d", tag->type);
+ return 0;
+ ko:
+ warnx("sw_cast: cannot cast %s to sw",
+ tag_type_to_sym(tag->type)->str.ptr.ps8);
+ return 0;
+}
diff --git a/libc3/sw.h b/libc3/sw.h
new file mode 100644
index 0000000..4481b26
--- /dev/null
+++ b/libc3/sw.h
@@ -0,0 +1,21 @@
+/* c3
+ * Copyright 2022,2023 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.
+ */
+/* Gen from s.h.in BITS=W bits=w */
+#ifndef SW_H
+#define SW_H
+
+#include "types.h"
+
+sw sw_cast (s_tag *tag);
+
+#endif /* S8_H */
diff --git a/sources.mk b/sources.mk
index 3160be2..9e67933 100644
--- a/sources.mk
+++ b/sources.mk
@@ -246,6 +246,11 @@ C3_C_SOURCES = \
libc3/buf_parse_u.c.in \
libc3/quote.c \
libc3/quote.h \
+ libc3/s32.h \
+ libc3/s64.c \
+ libc3/s64.h \
+ libc3/sw.c \
+ libc3/sw.h \
libc3/set.c.in \
libc3/set.h.in \
libc3/buf_inspect_s_base.h.in \
@@ -255,6 +260,7 @@ C3_C_SOURCES = \
libc3/buf_inspect.h \
libc3/set_item.c.in \
libc3/set_item.h.in \
+ libc3/s.h.in \
libc3/sign.c \
libc3/sign.h \
libc3/skiplist.c.in \
@@ -263,6 +269,7 @@ C3_C_SOURCES = \
libc3/skiplist_node.c.in \
libc3/skiplist_node.h.in \
libc3/str.h \
+ libc3/s8.c \
libc3/ucd.c \
libc3/sym.h \
libc3/tuple.c \
@@ -279,9 +286,13 @@ C3_C_SOURCES = \
libc3/buf_inspect_u.c.in \
libc3/buf_inspect_u.h.in \
libc3/env.h \
+ libc3/s8.h \
+ libc3/s16.c \
libc3/buf_inspect_u_base.c.in \
libc3/buf_inspect_u_base.h.in \
libc3/timespec.c \
+ libc3/s16.h \
+ libc3/s32.c \
libc3/u16.h \
libc3/u.c.in \
libc3/fn.c \
@@ -296,6 +307,7 @@ C3_C_SOURCES = \
libc3/u64.c \
libc3/uw.c \
libc3/fn_clause.h \
+ libc3/s.c.in \
libc3/fn_clause.c \
libc3/facts.c \
libc3/u8.c \
diff --git a/sources.sh b/sources.sh
index 07430bf..f624beb 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
C3_CONFIGURES='c3c/configure c3s/configure c3s/update_sources ic3/configure ic3/update_sources libc3/configure libc3/update_sources libtommath/configure libtommath/update_sources test/configure test/update_sources ucd2c/configure '
C3_MAKEFILES='c3c/Makefile c3s/Makefile ic3/Makefile libc3/Makefile libc3/gen.mk libtommath/Makefile test/Makefile ucd2c/Makefile '
-C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/ic3.c ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/linenoise.c libc3/abs.c libc3/abs.h libc3/buf.c libc3/buf.h libc3/buf_inspect_s8.c libc3/buf_inspect_s8.h libc3/buf_inspect_s8_binary.c libc3/buf_inspect_s8_binary.h libc3/buf_inspect_s8_octal.c libc3/buf_inspect_s8_octal.h libc3/buf_inspect_s8_decimal.c libc3/buf_inspect_s8_decimal.h libc3/call.c libc3/arg.c libc3/arg.h libc3/array.c libc3/array.h libc3/binding.c libc3/c3.c libc3/buf_inspect_s8_hexadecimal.c libc3/buf_inspect_s8_hexadecimal.h libc3/buf_inspect_s16.c libc3/binding.h libc3/buf_inspect_s16.h libc3/buf_inspect_s16_binary.c libc3/buf_inspect_s16_binary.h libc3/buf_inspect_s16_octal.c libc3/buf_inspect_s16_octal.h libc3/buf_inspect_s16_decimal.c libc3/buf_inspect_s16_decimal.h libc3/buf_inspect_s16_hexadecimal.c libc3/bool.c libc3/bool.h libc3/buf_file.c libc3/buf_file.h libc3/buf_inspect_s16_hexadecimal.h libc3/buf_inspect_s32.c libc3/buf_inspect_s32.h libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32_binary.h libc3/buf_inspect_s32_octal.c libc3/buf_inspect_s32_octal.h libc3/buf_inspect_s32_decimal.c libc3/buf_inspect_s32_decimal.h libc3/buf_inspect_s32_hexadecimal.c libc3/buf_inspect_s32_hexadecimal.h libc3/buf_inspect_s64.c libc3/buf_parse.h libc3/buf_parse_c.c libc3/buf_save.c libc3/buf_inspect_s64.h libc3/facts_spec_cursor.c libc3/buf_inspect_s64_binary.c libc3/buf_inspect_s64_binary.h libc3/buf_inspect_s64_octal.c libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s64_decimal.c libc3/buf_inspect_s64_decimal.h libc3/buf_inspect_s64_hexadecimal.c libc3/buf_inspect_s64_hexadecimal.h libc3/buf_inspect_sw.c libc3/buf_inspect_sw.h libc3/buf_inspect_sw_binary.c libc3/buf_parse_c.h libc3/buf_save.h libc3/c3.h libc3/c_types.h libc3/call.h libc3/buf_inspect_sw_binary.h libc3/buf_inspect_sw_octal.c libc3/buf_inspect_sw_octal.h libc3/buf_inspect_sw_decimal.c libc3/buf_inspect_sw_decimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_inspect_sw_hexadecimal.h libc3/buf_inspect_u8.c libc3/buf_inspect_u8.h libc3/buf_inspect_u8_binary.c libc3/buf_inspect_u8_binary.h libc3/buf_inspect_u8_octal.c libc3/ceiling.c libc3/ceiling.h libc3/cfn.c libc3/cfn.h libc3/character.c libc3/character.h libc3/buf_inspect_u8_octal.h libc3/buf_inspect_u8_decimal.c libc3/buf_inspect_u8_decimal.h libc3/buf_inspect_u8_hexadecimal.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u16.c libc3/buf_inspect_u16.h libc3/buf_inspect_u16_binary.c libc3/buf_inspect_u16_binary.h libc3/buf_inspect_u16_octal.c libc3/buf_inspect_u16_octal.h libc3/buf_parse_s8.c libc3/compare.c libc3/buf_inspect.c libc3/compare.h libc3/buf_parse.c libc3/timespec.h libc3/operator.c libc3/operator.h libc3/sym.c libc3/buf_inspect_u16_decimal.c libc3/buf_inspect_u16_decimal.h libc3/buf_inspect_u16_hexadecimal.c libc3/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u32.c libc3/u8.h libc3/buf_inspect_u32.h libc3/buf_inspect_u32_binary.c libc3/buf_inspect_u32_binary.h libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/buf_inspect_u32_octal.c libc3/buf_inspect_u32_octal.h libc3/buf_inspect_u32_decimal.c libc3/buf_inspect_u32_decimal.h libc3/buf_inspect_u32_hexadecimal.c libc3/buf_inspect_u32_hexadecimal.h libc3/buf_inspect_u64.c libc3/buf_inspect_u64.h libc3/buf_inspect_u64_binary.c libc3/buf_inspect_u64_binary.h libc3/buf_inspect_u64_octal.c libc3/buf_parse_s8.h libc3/fact.c libc3/fact.h libc3/facts_cursor.c libc3/buf_inspect_u64_octal.h libc3/buf_inspect_u64_decimal.c libc3/buf_inspect_u64_decimal.h libc3/buf_inspect_u64_hexadecimal.c libc3/buf_inspect_u64_hexadecimal.h libc3/buf_inspect_uw.c libc3/buf_inspect_uw.h libc3/buf_inspect_uw_binary.c libc3/buf_inspect_uw_binary.h libc3/buf_inspect_uw_octal.c libc3/buf_inspect_uw_octal.h libc3/buf_inspect_uw_decimal.c libc3/buf_inspect_uw_decimal.h libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.h libc3/buf_inspect_uw_hexadecimal.c libc3/buf_inspect_uw_hexadecimal.h libc3/buf_parse_s16.c libc3/buf_parse_s16.h libc3/buf_parse_s32.c libc3/buf_parse_s32.h libc3/buf_parse_s64.c libc3/buf_parse_s64.h libc3/buf_parse_sw.c libc3/buf_parse_sw.h libc3/buf_parse_u8.c libc3/buf_parse_u8.h libc3/buf_parse_u16.c libc3/buf_parse_u16.h libc3/buf_parse_u32.c libc3/set__fact.c libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/buf_parse_u32.h libc3/buf_parse_u64.c libc3/buf_parse_u64.h libc3/buf_parse_uw.c libc3/buf_parse_uw.h libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/skiplist__fact.c libc3/facts_with_cursor.h libc3/float.h libc3/frame.c libc3/frame.h libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/types.h libc3/hash.h libc3/ident.h libc3/integer.c libc3/integer.h libc3/io.c libc3/io.h libc3/list.c libc3/list.h libc3/log.c libc3/log.h libc3/buf_inspect_s.h.in libc3/module.c libc3/str.c libc3/module.h libc3/buf_parse_u.c.in libc3/quote.c libc3/quote.h libc3/set.c.in libc3/set.h.in libc3/buf_inspect_s_base.h.in libc3/sha1.h libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/buf_inspect.h libc3/set_item.c.in libc3/set_item.h.in libc3/sign.c libc3/sign.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/type.h libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/ucd.c libc3/sym.h libc3/tuple.c libc3/tuple.h libc3/type.c libc3/ucd.h libc3/buf_parse_s.c.in libc3/buf_parse_s.h.in libc3/buf_inspect_s.c.in libc3/buf_parse_u.h.in libc3/env.c libc3/ident.c libc3/buf_inspect_s_base.c.in libc3/buf_inspect_u.c.in libc3/buf_inspect_u.h.in libc3/env.h libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u_base.h.in libc3/timespec.c libc3/u16.h libc3/u.c.in libc3/fn.c libc3/u.h.in libc3/fn.h libc3/tag.h libc3/u32.h libc3/u64.h libc3/uw.h libc3/u16.c libc3/u32.c libc3/u64.c libc3/uw.c libc3/fn_clause.h libc3/fn_clause.c libc3/facts.c libc3/u8.c libc3/facts.h libc3/file.c libc3/c3_main.h libc3/file.h libc3/hash.c libc3/tag.c test/buf_inspect_test.c test/bool_test.c test/buf_parse_test.c test/facts_test.c test/buf_file_test.c test/list_test.c test/test.c test/test.h test/buf_parse_test_u8.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_test.c test/buf_parse_test_u64.c test/call_test.c test/facts_cursor_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_with_test.c test/hash_test.c test/ident_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/array_test.c test/fn_test.c test/tuple_test.c test/types_test.c test/libc3_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
+C3_C_SOURCES='c3c/c3c.c c3s/buf_readline.c c3s/c3s.c c3s/buf_readline.h ic3/ic3.c ic3/buf_linenoise.c ic3/buf_linenoise.h ic3/linenoise.c libc3/abs.c libc3/abs.h libc3/buf.c libc3/buf.h libc3/buf_inspect_s8.c libc3/buf_inspect_s8.h libc3/buf_inspect_s8_binary.c libc3/buf_inspect_s8_binary.h libc3/buf_inspect_s8_octal.c libc3/buf_inspect_s8_octal.h libc3/buf_inspect_s8_decimal.c libc3/buf_inspect_s8_decimal.h libc3/call.c libc3/arg.c libc3/arg.h libc3/array.c libc3/array.h libc3/binding.c libc3/c3.c libc3/buf_inspect_s8_hexadecimal.c libc3/buf_inspect_s8_hexadecimal.h libc3/buf_inspect_s16.c libc3/binding.h libc3/buf_inspect_s16.h libc3/buf_inspect_s16_binary.c libc3/buf_inspect_s16_binary.h libc3/buf_inspect_s16_octal.c libc3/buf_inspect_s16_octal.h libc3/buf_inspect_s16_decimal.c libc3/buf_inspect_s16_decimal.h libc3/buf_inspect_s16_hexadecimal.c libc3/bool.c libc3/bool.h libc3/buf_file.c libc3/buf_file.h libc3/buf_inspect_s16_hexadecimal.h libc3/buf_inspect_s32.c libc3/buf_inspect_s32.h libc3/buf_inspect_s32_binary.c libc3/buf_inspect_s32_binary.h libc3/buf_inspect_s32_octal.c libc3/buf_inspect_s32_octal.h libc3/buf_inspect_s32_decimal.c libc3/buf_inspect_s32_decimal.h libc3/buf_inspect_s32_hexadecimal.c libc3/buf_inspect_s32_hexadecimal.h libc3/buf_inspect_s64.c libc3/buf_parse.h libc3/buf_parse_c.c libc3/buf_save.c libc3/buf_inspect_s64.h libc3/facts_spec_cursor.c libc3/buf_inspect_s64_binary.c libc3/buf_inspect_s64_binary.h libc3/buf_inspect_s64_octal.c libc3/buf_inspect_s64_octal.h libc3/buf_inspect_s64_decimal.c libc3/buf_inspect_s64_decimal.h libc3/buf_inspect_s64_hexadecimal.c libc3/buf_inspect_s64_hexadecimal.h libc3/buf_inspect_sw.c libc3/buf_inspect_sw.h libc3/buf_inspect_sw_binary.c libc3/buf_parse_c.h libc3/buf_save.h libc3/c3.h libc3/c_types.h libc3/call.h libc3/buf_inspect_sw_binary.h libc3/buf_inspect_sw_octal.c libc3/buf_inspect_sw_octal.h libc3/buf_inspect_sw_decimal.c libc3/buf_inspect_sw_decimal.h libc3/buf_inspect_sw_hexadecimal.c libc3/buf_inspect_sw_hexadecimal.h libc3/buf_inspect_u8.c libc3/buf_inspect_u8.h libc3/buf_inspect_u8_binary.c libc3/buf_inspect_u8_binary.h libc3/buf_inspect_u8_octal.c libc3/ceiling.c libc3/ceiling.h libc3/cfn.c libc3/cfn.h libc3/character.c libc3/character.h libc3/buf_inspect_u8_octal.h libc3/buf_inspect_u8_decimal.c libc3/buf_inspect_u8_decimal.h libc3/buf_inspect_u8_hexadecimal.c libc3/buf_inspect_u8_hexadecimal.h libc3/buf_inspect_u16.c libc3/buf_inspect_u16.h libc3/buf_inspect_u16_binary.c libc3/buf_inspect_u16_binary.h libc3/buf_inspect_u16_octal.c libc3/buf_inspect_u16_octal.h libc3/buf_parse_s8.c libc3/compare.c libc3/buf_inspect.c libc3/compare.h libc3/buf_parse.c libc3/timespec.h libc3/operator.c libc3/operator.h libc3/sym.c libc3/buf_inspect_u16_decimal.c libc3/buf_inspect_u16_decimal.h libc3/buf_inspect_u16_hexadecimal.c libc3/buf_inspect_u16_hexadecimal.h libc3/buf_inspect_u32.c libc3/u8.h libc3/buf_inspect_u32.h libc3/buf_inspect_u32_binary.c libc3/buf_inspect_u32_binary.h libc3/error.c libc3/error.h libc3/error_handler.c libc3/error_handler.h libc3/eval.c libc3/eval.h libc3/buf_inspect_u32_octal.c libc3/buf_inspect_u32_octal.h libc3/buf_inspect_u32_decimal.c libc3/buf_inspect_u32_decimal.h libc3/buf_inspect_u32_hexadecimal.c libc3/buf_inspect_u32_hexadecimal.h libc3/buf_inspect_u64.c libc3/buf_inspect_u64.h libc3/buf_inspect_u64_binary.c libc3/buf_inspect_u64_binary.h libc3/buf_inspect_u64_octal.c libc3/buf_parse_s8.h libc3/fact.c libc3/fact.h libc3/facts_cursor.c libc3/buf_inspect_u64_octal.h libc3/buf_inspect_u64_decimal.c libc3/buf_inspect_u64_decimal.h libc3/buf_inspect_u64_hexadecimal.c libc3/buf_inspect_u64_hexadecimal.h libc3/buf_inspect_uw.c libc3/buf_inspect_uw.h libc3/buf_inspect_uw_binary.c libc3/buf_inspect_uw_binary.h libc3/buf_inspect_uw_octal.c libc3/buf_inspect_uw_octal.h libc3/buf_inspect_uw_decimal.c libc3/buf_inspect_uw_decimal.h libc3/facts_cursor.h libc3/facts_spec.c libc3/facts_spec.h libc3/facts_spec_cursor.h libc3/buf_inspect_uw_hexadecimal.c libc3/buf_inspect_uw_hexadecimal.h libc3/buf_parse_s16.c libc3/buf_parse_s16.h libc3/buf_parse_s32.c libc3/buf_parse_s32.h libc3/buf_parse_s64.c libc3/buf_parse_s64.h libc3/buf_parse_sw.c libc3/buf_parse_sw.h libc3/buf_parse_u8.c libc3/buf_parse_u8.h libc3/buf_parse_u16.c libc3/buf_parse_u16.h libc3/buf_parse_u32.c libc3/set__fact.c libc3/facts_with.c libc3/facts_with.h libc3/facts_with_cursor.c libc3/buf_parse_u32.h libc3/buf_parse_u64.c libc3/buf_parse_u64.h libc3/buf_parse_uw.c libc3/buf_parse_uw.h libc3/set__fact.h libc3/set__tag.c libc3/set__tag.h libc3/set_cursor__fact.c libc3/set_cursor__fact.h libc3/set_cursor__tag.c libc3/set_cursor__tag.h libc3/set_item__fact.c libc3/set_item__fact.h libc3/set_item__tag.c libc3/set_item__tag.h libc3/skiplist__fact.c libc3/facts_with_cursor.h libc3/float.h libc3/frame.c libc3/frame.h libc3/skiplist__fact.h libc3/skiplist_node__fact.c libc3/skiplist_node__fact.h libc3/types.h libc3/hash.h libc3/ident.h libc3/integer.c libc3/integer.h libc3/io.c libc3/io.h libc3/list.c libc3/list.h libc3/log.c libc3/log.h libc3/buf_inspect_s.h.in libc3/module.c libc3/str.c libc3/module.h libc3/buf_parse_u.c.in libc3/quote.c libc3/quote.h libc3/s32.h libc3/s64.c libc3/s64.h libc3/sw.c libc3/sw.h libc3/set.c.in libc3/set.h.in libc3/buf_inspect_s_base.h.in libc3/sha1.h libc3/set_cursor.c.in libc3/set_cursor.h.in libc3/buf_inspect.h libc3/set_item.c.in libc3/set_item.h.in libc3/s.h.in libc3/sign.c libc3/sign.h libc3/skiplist.c.in libc3/skiplist.h.in libc3/type.h libc3/skiplist_node.c.in libc3/skiplist_node.h.in libc3/str.h libc3/s8.c libc3/ucd.c libc3/sym.h libc3/tuple.c libc3/tuple.h libc3/type.c libc3/ucd.h libc3/buf_parse_s.c.in libc3/buf_parse_s.h.in libc3/buf_inspect_s.c.in libc3/buf_parse_u.h.in libc3/env.c libc3/ident.c libc3/buf_inspect_s_base.c.in libc3/buf_inspect_u.c.in libc3/buf_inspect_u.h.in libc3/env.h libc3/s8.h libc3/s16.c libc3/buf_inspect_u_base.c.in libc3/buf_inspect_u_base.h.in libc3/timespec.c libc3/s16.h libc3/s32.c libc3/u16.h libc3/u.c.in libc3/fn.c libc3/u.h.in libc3/fn.h libc3/tag.h libc3/u32.h libc3/u64.h libc3/uw.h libc3/u16.c libc3/u32.c libc3/u64.c libc3/uw.c libc3/fn_clause.h libc3/s.c.in libc3/fn_clause.c libc3/facts.c libc3/u8.c libc3/facts.h libc3/file.c libc3/c3_main.h libc3/file.h libc3/hash.c libc3/tag.c test/buf_inspect_test.c test/bool_test.c test/buf_parse_test.c test/facts_test.c test/buf_file_test.c test/list_test.c test/test.c test/test.h test/buf_parse_test_u8.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_test.c test/buf_parse_test_u64.c test/call_test.c test/facts_cursor_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_with_test.c test/hash_test.c test/ident_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/array_test.c test/fn_test.c test/tuple_test.c test/types_test.c test/libc3_test.c ucd2c/ucd.h ucd2c/ucd2c.c '
diff --git a/test/ic3/array.in b/test/ic3/array.in
index 4322998..e7f9de3 100644
--- a/test/ic3/array.in
+++ b/test/ic3/array.in
@@ -85,3 +85,19 @@ g = (U8) { 1 + 1, 2 + 2, 3 + 3 }
g[0]
g[1]
g[2]
+h = (U8) { 255 + 1, 255 + 2, 255 + 3 }
+h[0]
+h[1]
+h[2]
+i = (U16) { 255 + 1, 255 + 2, 255 + 3 }
+i[0]
+i[1]
+i[2]
+j = (U32) { 255 + 1, 255 + 2, 255 + 3 }
+j[0]
+j[1]
+j[2]
+k = (U64) { 255 + 1, 255 + 2, 255 + 3 }
+k[0]
+k[1]
+k[2]
diff --git a/test/ic3/array.out.expected b/test/ic3/array.out.expected
index a8cdd4d..a402c89 100644
--- a/test/ic3/array.out.expected
+++ b/test/ic3/array.out.expected
@@ -73,3 +73,19 @@ d[1][1][1][1]
2
4
6
+(U8) {0, 1, 2}
+0
+1
+2
+(U16) {256, 257, 258}
+256
+257
+258
+(U32) {256, 257, 258}
+256
+257
+258
+(U64) {256, 257, 258}
+256
+257
+258