diff --git a/.ikc3_history b/.ikc3_history
index e64971d..0bf2cf5 100644
--- a/.ikc3_history
+++ b/.ikc3_history
@@ -1,46 +1,3 @@
-a <- 1
-a = ?
-a <- 1
-a
-a = ?
-b = ?
-c = ?
-Facts.with_tags(Facts.env_facts(), a, b, c, fn (fact) { puts(a); puts(b); puts(c); void })
-Facts.with(Facts.env_facts(), quote [[plop, :operator, op], [op, :symbol_value, value]], fn (fact) { puts(value); void })
-Facts.with(Facts.env_facts(), [[plop = ?, :operator, op = ?], [op, :symbol_value, value = ?]], fn (fact) { puts(value); void })
-Facts.with(Facts.env_facts(), quote [[plop, :operator, op], [op, :symbol_value, value]], fn (fact) { puts(value); void })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [op, :symbol_value, value]], fn (fact) { puts(value); void })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(op); void })
-Facts.with(Facts.env_facts(), [[KC3, :operator, op]], fn (fact) { puts(op); void })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(op); void })
-Facts.with(Facts.env_facts(), quote [KC3, :operator, op], fn (fact) { puts(op); void })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op = ?]], fn (fact) { puts(op); void })
-op = ?; Facts.with(Facts.env_facts(), [[KC3, :operator, op]], fn (fact) { puts(op); void })
-op = ? ; Facts.with(Facts.env_facts(), [[KC3, :operator, op]], fn (fact) { puts(op); void })
-op = ?
-Facts.with(Facts.env_facts(), [[KC3, :operator, op]], fn (fact) { puts(op); void })
-op = ?
-Facts.with(Facts.env_facts(), [[KC3, :operator, op]], fn (fact) { puts(op); void })
-Facts.with_tags(Facts.env_facts(), KC3, :operator, op, fn (fact) { puts(op); void })
-1 + 10000000000000000000000000
-
-1 + 1
-quote 1 + 1
-List.map([1, 2, 3], fn (x) { x * 2 })
-a = ?
-b = ?
-c = ?
-Facts.with_tags(Facts.env_facts(), KC3, :operator, a, fn (fact) { puts(a); void })
-quote if true do if true do %KC3.Operator{} end end
-quote if true do if true do unquote(%KC3.Operator{}) end end
-Facts.with(Facts.env_facts(), [[KC3, :operator, op], [op, :symbol_value, value], fn (fact) { puts(op); void })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [op, :symbol_value, value], fn (fact) { puts(op); void })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [op, :symbol_value, value]], fn (fact) { puts(op); void })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [op, :symbol_value, value]], fn (fact) { puts(op); 1 })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, ^ op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
-op = ?
-Facts.with(Facts.env_facts(), quote [[KC3, :operator, ^ op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
op = ?
Facts.with(Facts.env_facts(), quote [[KC3, :operator, ^ op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
op = ?
@@ -97,3 +54,46 @@ Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(fac
op
Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(fact.object); 1 })
Facts.with(Facts.env_facts(), quote [[KC3, :operator, op = (Ident) ?]], fn (fact) { puts(fact.object); 1 })
+a = ?
+a <- void
+a
+%KC3.Operator{symbol_value: void}
+%KC3.Operator{symbol_value: 1}
+%KC3.Operator{symbol_value: void}
+1; 2; 3
+1; 2
+1 ; 2
+a = 1; 2
+a = ?; 2
+a
+a = ?; 2
+a
+a = 1; 2
+a
+a = ?
+b = (Var) 0x9ee46e3ef10
+? <- 1
+a = ? <- 1
+a
+a = ? <- 1 ; b = a
+b
+a
+a = ? <- 1 ; 2
+a
+a = ? <- 1 ; 2
+a
+(a = ? <- 1) ; 2
+a
+a = ? <- 1 ; 2
+a
+a = ? <- 1 ; 2
+a
+a = ? <- 1 ; 2
+a
+(a = ? <- 1) ; 2
+a
+a = ? <- 1 ; 2
+quote a = ? <- 1 ; 2
+to_lisp(quote a = ? <- 1 ; 2)
+operator(:";")
+KC3.Operator.find(:";")
diff --git a/ikc3/.ikc3_history b/ikc3/.ikc3_history
index 4ccc89a..7b40b56 100644
--- a/ikc3/.ikc3_history
+++ b/ikc3/.ikc3_history
@@ -1,99 +1,99 @@
-2
-server = Socket.listen("192.168.2.50", "58000")
-server_client = Socket.Buf.accept(server)
-req = HTTP.Request.buf_parse(server_client.buf_rw.r)
-%HTTP.Response{}
-Struct.offset(%HTTP.Response{}, :message)
-Sym.type_size(Str)
-Struct.offset(%HTTP.Response{}, :message)
-res = %HTTP.Response{}
-res.message
-Sym.type_size(Str)
-Sym.type_size(HTTP.Response)
-Struct.offset(%HTTP.Response{}, :message)
-Sym.type_size(Str)
-Struct.offset(%HTTP.Response{}, :code)
-Struct.offset(%HTTP.Response{}, :message)
-Struct.offset(%HTTP.Response{}, :response)
-Struct.offset(%HTTP.Response{}, :protocol)
-Struct.offset(%HTTP.Response{}, :code)
-Struct.offset(%HTTP.Response{}, :message)
-Struct.offset(%HTTP.Response{}, :headers)
-Struct.offset(%HTTP.Response{}, :body)
-Struct.offset(%HTTP.Response{}, :message)
-Struct.offset(%HTTP.Response{}, :protocol)
-Struct.offset(%HTTP.Response{}, :code)
-Struct.offset(%HTTP.Response{}, :message)
-Struct.offset(%HTTP.Response{}, :headers)
-Struct.offset(%HTTP.Response{}, :body)
-Struct.offset(%HTTP.Request{}, :method)
-Struct.offset(%HTTP.Request{}, :url)
-Struct.offset(%HTTP.Request{}, :protocol)
-Struct.offset(%HTTP.Request{}, :headers)
-Struct.offset(%HTTP.Response{}, :message)
-Struct.offset(%HTTP.Request{}, :method)
-Struct.offset(%HTTP.Request{}, :url)
-Struct.offset(%HTTP.Request{}, :protocol)
-Struct.offset(%HTTP.Request{}, :headers)
-Struct.offset(%HTTP.Response{}, :protocol)
-Struct.offset(%HTTP.Response{}, :code)
-Struct.offset(%HTTP.Response{}, :message)
-Struct.offset(%HTTP.Response{}, :headers)
-Struct.offset(%HTTP.Response{}, :body)
-"a#{a}"
-quote "a#{a}"
-"a#{a}"
-"a#{:a}"
-quote "a#{a}"
-quote "a#{:a}"
-quote "a"
-quote "a #{:a}"
-"a #{:a}"
-"""a #{:a}"""
-"""a #{":a"}"""
-quote """a #{":a"}"""
-"""a #{":a"}"""
-quote "a#{a}"
-quote "a#{:a}"
-quote """a#{:a}"""
-quote """a#{"a"}"""
-quote """a#{:a}"""
-quote """a #{:a}"""
-quote "a #{:a}"
-quote "a"
-%Time{}
-Facts.env_facts()
-(Facts) Facts.env_facts()
-Facts.with_tags(Facts.env_facts(), ?, ?, ?)
-cursor = Facts.with_tags(Facts.env_facts(), ?, ?, ?)
-tuple = {?, ?, ?}
-cursor = Facts.with_tuple(Facts.env_facts(), tuple)
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, ^ op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+op = ?
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, ^ op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+op = ?
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, ^ op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+op = ?
+op <- 1
+op
+op <- ?
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, ^ op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, unquote(op)], [unquote(op), :symbol_value, value]], fn (fact) { puts(op); 1 })
+op = ?
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, unquote(op)], [unquote(op), :symbol_value, value]], fn (fact) { puts(op); 1 })
+op
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op = ?], [op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op], [^ op, :symbol_value, value]], fn (fact) { puts(op); 1 })
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(op); 1 })
+Facts.with_tags(Facts.env_facts(), KC3, :operator, ?, fn (fact) { puts(fact.object); 1 })
+?
a = ?
-b = ?
-c = ?
-s = ?
-p = ?
-o = ?
-cursor = Facts.with_tags(Facts.env_facts(), s, p, o)
-ptr = Facts.Cursor.next(cursor)
-s = ?
-p = ?
-o = ?
-cursor = Facts.with_tags(Facts.env_facts(), s, p, o)
-ptr = Facts.Cursor.next(cursor)
-Fact.from_ptr(ptr)
-tuple = {?, ?, ?}
-cursor = Facts.with_tuple(Facts.env_facts(), tuple)
-ptr = Facts.Cursor.next(cursor)
-tuple = {?, ?, ?}
-cursor = Facts.with_tuple(Facts.env_facts(), tuple)
-while (ptr = Facts.Cursor.next(cursor)) do
- f = Fact.from_ptr(ptr)
- puts((Tag) f.subject)
- puts((Tag) f.predicate)
- puts((Tag) f.object)
-end
-Facts.with_tags(Facts.env_facts(), ?, ?, ?, fn (fact) { puts(fact) })
-Facts.with_tags(Facts.env_facts(), ?, ?, ?, fn (fact) { puts(fact); void })
-Facts.with_tags(Facts.env_facts(), KC3, :operator, ?, fn (fact) { puts(fact); void })
-Facts.with_tags(Facts.env_facts(), KC3, :operator, ?, fn (fact) { puts(fact.object); void })
+?
+a
+a = ?
+a
+a = ?
+a
+a <- 1
+a
+(U8) (Ptr) a
+(Tag) (Ptr) a
+(Ptr) a
+(Tag) (Ptr) a
+a = ?
+a
+(Ptr) a
+a = ?
+a
+a <- 1
+a
+(Ptr) 0x1801350e830
+(Tag) (Ptr) 0x1801350e830
+Facts.with_tags(Facts.env_facts(), KC3, :operator, ?, fn (fact) { puts(fact.object); 1 })
+Facts.with(Facts.env_facts(), [[KC3, :operator, ?]], fn (fact) { puts(fact.object); 1 })
+(Ptr) 0xf24fc9ce000
+(Tag) (Ptr) 0xf24fc9ce000
+?
+Facts.with_tags(Facts.env_facts(), KC3, :operator, ?, fn (fact) { puts(fact.object); 1 })
+Facts.with(Facts.env_facts(), [[KC3, :operator, ?]], fn (fact) { puts(fact.object); 1 })
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(fact.object); 1 })
+op
+op = ?
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(fact.object); 1 })
+op
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op]], fn (fact) { puts(fact.object); 1 })
+Facts.with(Facts.env_facts(), quote [[KC3, :operator, op = (Ident) ?]], fn (fact) { puts(fact.object); 1 })
+a = ?
+a <- void
+a
+%KC3.Operator{symbol_value: void}
+%KC3.Operator{symbol_value: 1}
+%KC3.Operator{symbol_value: void}
+1; 2; 3
+1; 2
+1 ; 2
+a = 1; 2
+a = ?; 2
+a
+a = ?; 2
+a
+a = 1; 2
+a
+a = ?
+b = (Var) 0x9ee46e3ef10
+? <- 1
+a = ? <- 1
+a
+a = ? <- 1 ; b = a
+b
+a
+a = ? <- 1 ; 2
+a
+a = ? <- 1 ; 2
+a
+(a = ? <- 1) ; 2
+a
+a = ? <- 1 ; 2
+a
+a = ? <- 1 ; 2
+a
+a = ? <- 1 ; 2
+a
+(a = ? <- 1) ; 2
+a
+a = ? <- 1 ; 2
+quote a = ? <- 1 ; 2
+KC3.Operator.find(:xxx)
+KC3.Operator.find(:+)
diff --git a/lib/kc3/0.1/kc3.facts b/lib/kc3/0.1/kc3.facts
index 43de506..10e82e1 100644
--- a/lib/kc3/0.1/kc3.facts
+++ b/lib/kc3/0.1/kc3.facts
@@ -6,205 +6,219 @@ replace {KC3.operator_paren, :is_a, :operator}
replace {KC3.operator_paren, :sym, :"()"}
replace {KC3.operator_paren, :arity, 1}
replace {KC3.operator_paren, :symbol_value, cfn Tag "tag_paren" (Tag, Result)}
-replace {KC3.operator_paren, :operator_precedence, 13}
+replace {KC3.operator_paren, :operator_precedence, 16}
replace {KC3.operator_paren, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_brackets}
replace {KC3.operator_brackets, :is_a, :operator}
replace {KC3.operator_brackets, :sym, :"[]"}
replace {KC3.operator_brackets, :arity, 2}
replace {KC3.operator_brackets, :symbol_value, cfn Tag "kc3_access" (Tag, List, Result)}
-replace {KC3.operator_brackets, :operator_precedence, 13}
+replace {KC3.operator_brackets, :operator_precedence, 15}
replace {KC3.operator_brackets, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_bnot}
replace {KC3.operator_bnot, :is_a, :operator}
replace {KC3.operator_bnot, :sym, :~}
replace {KC3.operator_bnot, :arity, 1}
replace {KC3.operator_bnot, :symbol_value, cfn Tag "tag_bnot" (Tag, Result)}
-replace {KC3.operator_bnot, :operator_precedence, 12}
+replace {KC3.operator_bnot, :operator_precedence, 14}
replace {KC3.operator_bnot, :operator_associativity, :right}
add {KC3, :operator, KC3.operator_defstruct}
replace {KC3.operator_defstruct, :is_a, :operator}
replace {KC3.operator_defstruct, :sym, :defstruct}
replace {KC3.operator_defstruct, :arity, 1}
replace {KC3.operator_defstruct, :symbol_value, cfn Tag "kc3_defstruct" (List, Result)}
-replace {KC3.operator_defstruct, :operator_precedence, 12}
+replace {KC3.operator_defstruct, :operator_precedence, 14}
replace {KC3.operator_defstruct, :operator_associativity, :none}
-add {KC3, :operator, KC3.operator_pin}
-replace {KC3.operator_pin, :is_a, :operator}
-replace {KC3.operator_pin, :sym, :^}
-replace {KC3.operator_pin, :arity, 1}
-replace {KC3.operator_pin, :symbol_value, cfn Tag "kc3_pin" (Tag, Result)}
-replace {KC3.operator_pin, :operator_precedence, 12}
-replace {KC3.operator_pin, :operator_associativity, :right}
add {KC3, :operator, KC3.operator_neg}
replace {KC3.operator_neg, :is_a, :operator}
replace {KC3.operator_neg, :sym, :-}
replace {KC3.operator_neg, :arity, 1}
replace {KC3.operator_neg, :symbol_value, cfn Tag "tag_neg" (Tag, Result)}
-replace {KC3.operator_neg, :operator_precedence, 12}
+replace {KC3.operator_neg, :operator_precedence, 14}
replace {KC3.operator_neg, :operator_associativity, :right}
add {KC3, :operator, KC3.operator_not}
replace {KC3.operator_not, :is_a, :operator}
replace {KC3.operator_not, :sym, :!}
replace {KC3.operator_not, :arity, 1}
replace {KC3.operator_not, :symbol_value, cfn Bool "tag_not" (Tag, Result)}
-replace {KC3.operator_not, :operator_precedence, 12}
+replace {KC3.operator_not, :operator_precedence, 14}
replace {KC3.operator_not, :operator_associativity, :right}
+add {KC3, :operator, KC3.operator_pin}
+replace {KC3.operator_pin, :is_a, :operator}
+replace {KC3.operator_pin, :sym, :^}
+replace {KC3.operator_pin, :arity, 1}
+replace {KC3.operator_pin, :symbol_value, cfn Tag "kc3_identity" (Tag, Result)}
+replace {KC3.operator_pin, :operator_precedence, 14}
+replace {KC3.operator_pin, :operator_associativity, :right}
add {KC3, :operator, KC3.operator_require}
replace {KC3.operator_require, :is_a, :operator}
replace {KC3.operator_require, :sym, :require}
replace {KC3.operator_require, :arity, 1}
replace {KC3.operator_require, :symbol_value, cfn Bool "kc3_require" (Sym)}
-replace {KC3.operator_require, :operator_precedence, 12}
+replace {KC3.operator_require, :operator_precedence, 14}
replace {KC3.operator_require, :operator_associativity, :none}
+add {KC3, :operator, KC3.operator_silence}
+replace {KC3.operator_silence, :is_a, :operator}
+replace {KC3.operator_silence, :sym, :^}
+replace {KC3.operator_silence, :arity, 1}
+replace {KC3.operator_silence, :symbol_value, cfn Tag "kc3_identity" (Tag, Result)}
+replace {KC3.operator_silence, :operator_precedence, 14}
+replace {KC3.operator_silence, :operator_associativity, :right}
add {KC3, :operator, KC3.operator_div}
replace {KC3.operator_div, :is_a, :operator}
replace {KC3.operator_div, :sym, :/}
replace {KC3.operator_div, :arity, 2}
replace {KC3.operator_div, :symbol_value, cfn Tag "tag_div" (Tag, Tag, Result)}
-replace {KC3.operator_div, :operator_precedence, 11}
+replace {KC3.operator_div, :operator_precedence, 13}
replace {KC3.operator_div, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_mod}
replace {KC3.operator_mod, :is_a, :operator}
replace {KC3.operator_mod, :sym, :mod}
replace {KC3.operator_mod, :arity, 2}
replace {KC3.operator_mod, :symbol_value, cfn Tag "tag_mod" (Tag, Tag, Result)}
-replace {KC3.operator_mod, :operator_precedence, 11}
+replace {KC3.operator_mod, :operator_precedence, 13}
replace {KC3.operator_mod, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_mul}
replace {KC3.operator_mul, :is_a, :operator}
replace {KC3.operator_mul, :sym, :*}
replace {KC3.operator_mul, :arity, 2}
replace {KC3.operator_mul, :symbol_value, cfn Tag "tag_mul" (Tag, Tag, Result)}
-replace {KC3.operator_mul, :operator_precedence, 11}
+replace {KC3.operator_mul, :operator_precedence, 13}
replace {KC3.operator_mul, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_add}
replace {KC3.operator_add, :is_a, :operator}
replace {KC3.operator_add, :sym, :+}
replace {KC3.operator_add, :arity, 2}
replace {KC3.operator_add, :symbol_value, cfn Tag "tag_add" (Tag, Tag, Result)}
-replace {KC3.operator_add, :operator_precedence, 10}
+replace {KC3.operator_add, :operator_precedence, 12}
replace {KC3.operator_add, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_addi}
replace {KC3.operator_addi, :is_a, :operator}
replace {KC3.operator_addi, :sym, :+i}
replace {KC3.operator_addi, :arity, 2}
replace {KC3.operator_addi, :symbol_value, cfn Tag "tag_addi" (Tag, Tag, Result)}
-replace {KC3.operator_addi, :operator_precedence, 10}
+replace {KC3.operator_addi, :operator_precedence, 12}
replace {KC3.operator_addi, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_sub}
replace {KC3.operator_sub, :is_a, :operator}
replace {KC3.operator_sub, :sym, :-}
replace {KC3.operator_sub, :arity, 2}
replace {KC3.operator_sub, :symbol_value, cfn Tag "tag_sub" (Tag, Tag, Result)}
-replace {KC3.operator_sub, :operator_precedence, 10}
+replace {KC3.operator_sub, :operator_precedence, 12}
replace {KC3.operator_sub, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_shift_left}
replace {KC3.operator_shift_left, :is_a, :operator}
replace {KC3.operator_shift_left, :sym, :<<}
replace {KC3.operator_shift_left, :arity, 2}
replace {KC3.operator_shift_left, :symbol_value, cfn Tag "tag_shift_left" (Tag, Tag, Result)}
-replace {KC3.operator_shift_left, :operator_precedence, 9}
+replace {KC3.operator_shift_left, :operator_precedence, 11}
replace {KC3.operator_shift_left, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_shift_right}
replace {KC3.operator_shift_right, :is_a, :operator}
replace {KC3.operator_shift_right, :sym, :>>}
replace {KC3.operator_shift_right, :arity, 2}
replace {KC3.operator_shift_right, :symbol_value, cfn Tag "tag_shift_right" (Tag, Tag, Result)}
-replace {KC3.operator_shift_right, :operator_precedence, 9}
+replace {KC3.operator_shift_right, :operator_precedence, 11}
replace {KC3.operator_shift_right, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_lt}
replace {KC3.operator_lt, :is_a, :operator}
replace {KC3.operator_lt, :sym, :<}
replace {KC3.operator_lt, :arity, 2}
replace {KC3.operator_lt, :symbol_value, cfn Bool "tag_lt" (Tag, Tag, Result)}
-replace {KC3.operator_lt, :operator_precedence, 8}
+replace {KC3.operator_lt, :operator_precedence, 10}
replace {KC3.operator_lt, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_lte}
replace {KC3.operator_lte, :sym, :<=}
replace {KC3.operator_lte, :is_a, :operator}
replace {KC3.operator_lte, :arity, 2}
replace {KC3.operator_lte, :symbol_value, cfn Bool "tag_lte" (Tag, Tag, Result)}
-replace {KC3.operator_lte, :operator_precedence, 8}
+replace {KC3.operator_lte, :operator_precedence, 10}
replace {KC3.operator_lte, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_gt}
replace {KC3.operator_gt, :sym, :>}
replace {KC3.operator_gt, :is_a, :operator}
replace {KC3.operator_gt, :arity, 2}
replace {KC3.operator_gt, :symbol_value, cfn Bool "tag_gt" (Tag, Tag, Result)}
-replace {KC3.operator_gt, :operator_precedence, 8}
+replace {KC3.operator_gt, :operator_precedence, 10}
replace {KC3.operator_gt, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_gte}
replace {KC3.operator_gte, :sym, :>=}
replace {KC3.operator_gte, :is_a, :operator}
replace {KC3.operator_gte, :arity, 2}
replace {KC3.operator_gte, :symbol_value, cfn Bool "tag_gte" (Tag, Tag, Result)}
-replace {KC3.operator_gte, :operator_precedence, 8}
+replace {KC3.operator_gte, :operator_precedence, 10}
replace {KC3.operator_gte, :operator_associativity, :left}
-add {KC3, :operator, KC3.operator_assign}
-replace {KC3.operator_assign, :is_a, :operator}
-replace {KC3.operator_assign, :sym, :<-}
-replace {KC3.operator_assign, :arity, 2}
-replace {KC3.operator_assign, :symbol_value, cfn Tag "var_assign" (Var, Tag, Result)}
-replace {KC3.operator_assign, :operator_precedence, 7}
-replace {KC3.operator_assign, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_eq}
replace {KC3.operator_eq, :is_a, :operator}
replace {KC3.operator_eq, :sym, :==}
replace {KC3.operator_eq, :arity, 2}
replace {KC3.operator_eq, :symbol_value, cfn Bool "tag_eq" (Tag, Tag, Result)}
-replace {KC3.operator_eq, :operator_precedence, 7}
+replace {KC3.operator_eq, :operator_precedence, 9}
replace {KC3.operator_eq, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_not_eq}
replace {KC3.operator_not_eq, :is_a, :operator}
replace {KC3.operator_not_eq, :sym, :!=}
replace {KC3.operator_not_eq, :arity, 2}
replace {KC3.operator_not_eq, :symbol_value, cfn Bool "tag_not_eq" (Tag, Tag, Result)}
-replace {KC3.operator_not_eq, :operator_precedence, 7}
+replace {KC3.operator_not_eq, :operator_precedence, 9}
replace {KC3.operator_not_eq, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_band}
replace {KC3.operator_band, :is_a, :operator}
replace {KC3.operator_band, :sym, :&}
replace {KC3.operator_band, :arity, 2}
replace {KC3.operator_band, :symbol_value, cfn Tag "tag_band" (Tag, Tag, Result)}
-replace {KC3.operator_band, :operator_precedence, 6}
+replace {KC3.operator_band, :operator_precedence, 8}
replace {KC3.operator_band, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_bxor}
replace {KC3.operator_bxor, :is_a, :operator}
replace {KC3.operator_bxor, :sym, :^}
replace {KC3.operator_bxor, :arity, 2}
replace {KC3.operator_bxor, :symbol_value, cfn Tag "tag_bxor" (Tag, Tag, Result)}
-replace {KC3.operator_bxor, :operator_precedence, 5}
+replace {KC3.operator_bxor, :operator_precedence, 7}
replace {KC3.operator_bxor, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_bor}
replace {KC3.operator_bor, :is_a, :operator}
replace {KC3.operator_bor, :sym, :bor}
replace {KC3.operator_bor, :arity, 2}
replace {KC3.operator_bor, :symbol_value, cfn Tag "tag_bor" (Tag, Tag, Result)}
-replace {KC3.operator_bor, :operator_precedence, 4}
+replace {KC3.operator_bor, :operator_precedence, 6}
replace {KC3.operator_bor, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_and}
replace {KC3.operator_and, :is_a, :operator}
replace {KC3.operator_and, :sym, :&&}
replace {KC3.operator_and, :arity, 2}
replace {KC3.operator_and, :symbol_value, cfn Bool "tag_and" (Tag, Tag, Result)}
-replace {KC3.operator_and, :operator_precedence, 3}
+replace {KC3.operator_and, :operator_precedence, 5}
replace {KC3.operator_and, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_or}
replace {KC3.operator_or, :is_a, :operator}
replace {KC3.operator_or, :sym, :||}
replace {KC3.operator_or, :arity, 2}
replace {KC3.operator_or, :symbol_value, cfn Bool "tag_or" (Tag, Tag, Result)}
-replace {KC3.operator_or, :operator_precedence, 2}
+replace {KC3.operator_or, :operator_precedence, 4}
replace {KC3.operator_or, :operator_associativity, :left}
+add {KC3, :operator, KC3.operator_assign}
+replace {KC3.operator_assign, :is_a, :operator}
+replace {KC3.operator_assign, :sym, :<-}
+replace {KC3.operator_assign, :arity, 2}
+replace {KC3.operator_assign, :symbol_value, cfn Tag "var_assign" (Var, Tag, Result)}
+replace {KC3.operator_assign, :operator_precedence, 3}
+replace {KC3.operator_assign, :operator_associativity, :left}
add {KC3, :operator, KC3.operator_equal}
replace {KC3.operator_equal, :is_a, :operator}
replace {KC3.operator_equal, :arity, 2}
add {KC3.operator_equal, :is_a, :special_operator}
replace {KC3.operator_equal, :sym, :=}
replace {KC3.operator_equal, :symbol_value, cfn Tag "tag_equal" (Tag, Tag, Result)}
-replace {KC3.operator_equal, :operator_precedence, 1}
+replace {KC3.operator_equal, :operator_precedence, 2}
replace {KC3.operator_equal, :operator_associativity, :right}
+add {KC3, :operator, KC3.operator_semicolumn}
+replace {KC3.operator_semicolumn, :is_a, :operator}
+replace {KC3.operator_semicolumn, :arity, 2}
+replace {KC3.operator_semicolumn, :sym, :";"}
+replace {KC3.operator_semicolumn, :symbol_value, cfn Tag "tag_semicolumn" (Tag, Tag, Result)}
+replace {KC3.operator_semicolumn, :operator_precedence, 1}
+replace {KC3.operator_semicolumn, :operator_associativity, :right}
replace {KC3, :symbol, KC3.license}
replace {KC3.license, :symbol_value, cfn Void "kc3_license" ()}
add {KC3, :symbol, KC3.break}
@@ -282,3 +296,5 @@ add {KC3, :symbol, KC3.strerror}
replace {KC3.strerror, :symbol_value, cfn Str "kc3_strerror" (Sw, Result)}
add {KC3, :symbol, KC3.offsetof}
replace {KC3.offsetof, :symbol_value, cfn Uw "kc3_offsetof" (Sym, Sym, Result)}
+add {KC3, :symbol, KC3.to_lisp}
+replace {KC3.to_lisp, :symbol_value, cfn Tag "to_lisp" (Tag, Result)}
diff --git a/lib/kc3/0.1/kc3/operator.kc3 b/lib/kc3/0.1/kc3/operator.kc3
index a757b1e..0aa800f 100644
--- a/lib/kc3/0.1/kc3/operator.kc3
+++ b/lib/kc3/0.1/kc3/operator.kc3
@@ -1,8 +1,10 @@
defmodule KC3.Operator do
defstruct [sym: :+,
- symbol_value: ?,
- operator_precedence: 0,
- operator_associativity: :left]
+ symbol_value: ?,
+ operator_precedence: (Sw) 0,
+ operator_associativity: :left]
+
+ def find_by_sym = cfn Tag "kc3_operator_find_by_sym" (Sym, Result)
end
diff --git a/lib/kc3/0.1/var.facts b/lib/kc3/0.1/var.facts
index ff2934a..ef91c58 100644
--- a/lib/kc3/0.1/var.facts
+++ b/lib/kc3/0.1/var.facts
@@ -1,3 +1,5 @@
%{module: KC3.Facts.Dump,
version: 1}
replace {Var, :is_a, :module}
+replace {Var, :symbol, Var.cast}
+replace {Var.cast, :symbol_value, cfn Var "var_init_cast" (Result, Sym, Tag)}
diff --git a/libkc3/env.c b/libkc3/env.c
index ddfb65e..a5fdc81 100644
--- a/libkc3/env.c
+++ b/libkc3/env.c
@@ -53,6 +53,7 @@
#include "str.h"
#include "struct.h"
#include "struct_type.h"
+#include "sw.h"
#include "sym.h"
#include "tag.h"
#include "tag_init.h"
@@ -241,7 +242,7 @@ s_tag * env_def (s_env *env, const s_call *call, s_tag *dest)
}
if (tag_value.type == TAG_STRUCT &&
(s = &tag_value.data.struct_) &&
- s->type->module == &g_sym_KC3__Operator) {
+ s->type->module == &g_sym_KC3_Operator) {
if (! env_defoperator(env, &tag_ident.data.ident.sym,
struct_get_sym(&tag_value.data.struct_,
&g_sym_sym),
@@ -602,22 +603,22 @@ bool env_eval_call_cfn (s_env *env, const s_call *call, s_tag *dest)
s_list *args = NULL;
s_list *args_final = NULL;
s_cfn *cfn;
- s_frame frame;
+ //s_frame frame;
s_tag tag;
assert(env);
assert(call);
assert(dest);
cfn = call->cfn;
assert(cfn);
- if (! frame_init(&frame, env->frame))
- return false;
- env->frame = &frame;
+ //if (! frame_init(&frame, env->frame))
+ // return false;
+ //env->frame = &frame;
if (call->arguments) {
if (cfn->macro || cfn->special_operator)
args_final = call->arguments;
else {
if (! env_eval_call_arguments(env, call->arguments, &args)) {
- env->frame = frame_clean(&frame);
+ //env->frame = frame_clean(&frame);
return false;
}
args_final = args;
@@ -625,12 +626,12 @@ bool env_eval_call_cfn (s_env *env, const s_call *call, s_tag *dest)
}
if (! cfn_apply(cfn, args_final, &tag)) {
list_delete_all(args);
- env->frame = frame_clean(&frame);
+ //env->frame = frame_clean(&frame);
return false;
}
*dest = tag;
list_delete_all(args);
- env->frame = frame_clean(&frame);
+ //env->frame = frame_clean(&frame);
return true;
}
@@ -1003,7 +1004,7 @@ bool env_eval_equal_tag (s_env *env, bool macro, const s_tag *a,
tag_init_copy(dest, b);
else
env_eval_tag(env, b, dest);
- if (! frame_replace(env->frame->next, a->data.ident.sym, dest))
+ if (! frame_replace(env->frame, a->data.ident.sym, dest))
return false;
return true;
}
@@ -1012,7 +1013,7 @@ bool env_eval_equal_tag (s_env *env, bool macro, const s_tag *a,
tag_init_copy(dest, a);
else
env_eval_tag(env, a, dest);
- if (! frame_replace(env->frame->next, b->data.ident.sym, dest))
+ if (! frame_replace(env->frame, b->data.ident.sym, dest))
return false;
return true;
}
@@ -1879,7 +1880,7 @@ bool env_eval_tag (s_env *env, const s_tag *tag, s_tag *dest)
case TAG_TUPLE:
return env_eval_tuple(env, &tag->data.tuple, dest);
case TAG_VAR:
- return env_eval_var(env, tag, dest);
+ return env_eval_var(env, &tag->data.var, dest);
case TAG_BOOL:
case TAG_CHARACTER:
case TAG_F32:
@@ -1971,24 +1972,17 @@ bool env_eval_tuple (s_env *env, const s_tuple *tuple, s_tag *dest)
return true;
}
-bool env_eval_var (s_env *env, const s_tag *tag, s_tag *dest)
+bool env_eval_var (s_env *env, const s_var *var, s_tag *dest)
{
s_tag tmp = {0};
- const s_var *var;
assert(env);
- assert(tag);
+ assert(var);
assert(dest);
(void) env;
- if (tag->type != TAG_VAR)
- return false;
- var = &tag->data.var;
if (var->ptr && var->ptr->type != TAG_VAR)
return tag_init_copy(dest, var->ptr) ? true : false;
tmp.type = TAG_VAR;
- if (! var->ptr)
- tmp.data.var.ptr = dest;
- else
- tmp.data.var.ptr = var->ptr;
+ tmp.data.var.ptr = var->ptr ? var->ptr : dest;
tmp.data.var.type = var->type;
*dest = tmp;
return true;
@@ -2956,6 +2950,73 @@ bool * env_operator_find (s_env *env, const s_ident *op, bool *dest)
return dest;
}
+s_tag * env_operator_find_by_sym (s_env *env,
+ const s_sym *sym,
+ s_tag *dest)
+{
+ s_facts_with_cursor cursor;
+ const s_fact *fact;
+ s_tag tag_ident;
+ s_tag tag_is_a;
+ s_tag tag_operator;
+ s_tag tag_operator_associativity;
+ s_tag tag_operator_associativity_sym;
+ s_tag tag_operator_precedence;
+ s_tag tag_operator_precedence_sym;
+ s_tag tag_sym;
+ s_tag tag_sym_sym;
+ s_tag tag_symbol_value;
+ s_tag tag_symbol_value_sym;
+ s_tag tmp = {0};
+ tag_init_var(&tag_ident, &g_sym_Ident);
+ tag_init_sym(&tag_is_a, &g_sym_is_a);
+ tag_init_sym(&tag_operator, &g_sym_operator);
+ tag_init_var(&tag_operator_associativity, &g_sym_Sym);
+ tag_init_sym(&tag_operator_associativity_sym,
+ &g_sym_operator_associativity);
+ tag_init_var(&tag_operator_precedence, &g_sym_U8);
+ tag_init_sym(&tag_operator_precedence_sym,
+ &g_sym_operator_precedence);
+ tag_init_sym(&tag_operator, &g_sym_operator);
+ tag_init_sym(&tag_sym, sym);
+ tag_init_sym(&tag_sym_sym, &g_sym_sym);
+ tag_init_var(&tag_symbol_value, &g_sym_Tag);
+ tag_init_sym(&tag_symbol_value_sym, &g_sym_symbol_value);
+ if (! facts_with(&env->facts, &cursor, (t_facts_spec) {
+ &tag_ident, &tag_is_a, &tag_operator,
+ &tag_sym_sym, &tag_sym,
+ &tag_operator_associativity_sym, &tag_operator_associativity,
+ &tag_operator_precedence_sym, &tag_operator_precedence,
+ &tag_symbol_value_sym, &tag_symbol_value, NULL, NULL}))
+ return NULL;
+ if (! facts_with_cursor_next(&cursor, &fact))
+ return NULL;
+ if (! fact)
+ return NULL;
+ if (! tag_init_struct(&tmp, &g_sym_KC3_Operator))
+ goto clean;
+ if (! struct_allocate(&tmp.data.struct_))
+ goto clean;
+ if (! struct_set(&tmp.data.struct_, &g_sym_sym, &tag_sym))
+ goto clean;
+ if (! struct_set(&tmp.data.struct_, &g_sym_symbol_value,
+ &tag_symbol_value))
+ goto clean;
+ if (! struct_set(&tmp.data.struct_, &g_sym_operator_precedence,
+ &tag_operator_precedence))
+ goto clean;
+ if (! struct_set(&tmp.data.struct_, &g_sym_operator_associativity,
+ &tag_operator_associativity))
+ goto clean;
+ facts_with_cursor_clean(&cursor);
+ *dest = tmp;
+ return dest;
+ clean:
+ tag_clean(&tmp);
+ facts_with_cursor_clean(&cursor);
+ return NULL;
+}
+
s_ident * env_operator_ident (s_env *env, const s_ident *op,
s_ident *dest)
{
diff --git a/libkc3/env.h b/libkc3/env.h
index d0eed9e..9fb1ce3 100644
--- a/libkc3/env.h
+++ b/libkc3/env.h
@@ -54,130 +54,6 @@ s_tag * env_defoperator (s_env *env, const s_sym * const *name,
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,
- s_array *dest);
-bool env_eval_array_tag (s_env *env, const s_array *array,
- s_tag *dest);
-bool env_eval_block (s_env *env, const s_block *block,
- s_tag *dest);
-bool env_eval_call (s_env *env, const s_call *call,
- s_tag *dest);
-bool env_eval_call_arguments (s_env *env, const s_list *args,
- s_list **dest);
-bool env_eval_call_cfn (s_env *env, const s_call *call,
- s_tag *dest);
-bool env_eval_call_fn (s_env *env, const s_call *call,
- s_tag *dest);
-bool env_eval_call_fn_args (s_env *env, const s_fn *fn,
- const s_list *arguments,
- s_tag *dest);
-bool env_eval_call_resolve (s_env *env, s_call *call);
-bool env_eval_cfn (s_env *env, const s_cfn *cfn, s_tag *dest);
-bool env_eval_complex (s_env *env, const s_complex *c,
- s_tag *dest);
-bool env_eval_cow (s_env *env, const s_cow *cow, s_tag *dest);
-bool env_eval_equal_block (s_env *env, bool macro,
- const s_block *a, const s_block *b,
- s_block *dest);
-bool env_eval_equal_list (s_env *env, bool macro,
- const s_list *a, const s_list *b,
- s_list **dest);
-bool env_eval_equal_struct (s_env *env, bool macro,
- const s_struct *a,
- const s_struct *b,
- s_struct *dest);
-bool env_eval_equal_tag (s_env *env, bool macro,
- const s_tag *a, const s_tag *b,
- s_tag *dest);
-bool env_eval_equal_time (s_env *env, bool macro,
- const s_time *a, const s_time *b,
- s_time *dest);
-bool env_eval_equal_tuple (s_env *env, bool macro,
- const s_tuple *a, const s_tuple *b,
- s_tuple *dest);
-bool env_eval_fn (s_env *env, const s_fn *fn, s_tag *dest);
-bool env_eval_fn_tag (s_env *env, const s_tag *tag,
- s_tag *dest);
-bool env_eval_fn_tag_array (s_env *env, const s_array *array,
- s_tag *dest);
-bool env_eval_fn_tag_block (s_env *env, const s_block *block,
- s_tag *dest);
-bool env_eval_fn_tag_call (s_env *env, const s_call *call,
- s_tag *dest);
-bool env_eval_fn_tag_complex (s_env *env, const s_complex *c,
- s_tag *dest);
-bool env_eval_fn_tag_ident (s_env *env, const s_ident *ident,
- s_tag *dest);
-bool env_eval_fn_tag_list (s_env *env, const s_list *list,
- s_tag *dest);
-bool env_eval_fn_tag_map (s_env *env, const s_map *map,
- s_tag *dest);
-bool env_eval_fn_tag_quote (s_env *env, const s_quote *quote,
- s_tag *dest);
-bool env_eval_fn_tag_str (s_env *env, const s_str *str,
- s_tag *dest);
-bool env_eval_fn_tag_struct (s_env *env, const s_struct *s,
- s_tag *dest);
-bool env_eval_fn_tag_tag (s_env *env, const s_tag *tag,
- s_tag *dest);
-bool env_eval_fn_tag_tuple (s_env *env, const s_tuple *tuple,
- s_tag *dest);
-bool env_eval_fn_tag_unquote (s_env *env,
- const s_unquote *unquote,
- s_tag *dest);
-bool env_eval_ident (s_env *env, const s_ident *ident,
- s_tag *dest);
-bool env_eval_ident_is_bound (s_env *env,
- const s_ident *ident);
-bool env_eval_integer (s_env *env, const s_integer *integer,
- s_integer *dest);
-bool env_eval_list (s_env *env, const s_list *list,
- s_tag *dest);
-bool env_eval_map (s_env *env, const s_map *map,
- s_tag *dest);
-bool env_eval_progn (s_env *env, const s_list *program,
- s_tag *dest);
-bool env_eval_quote (s_env *env, const s_quote *quote,
- s_tag *dest);
-bool env_eval_quote_array (s_env *env, const s_array *array,
- s_tag *dest);
-bool env_eval_quote_block (s_env *env, const s_block *block,
- s_tag *dest);
-bool env_eval_quote_call (s_env *env, const s_call *call,
- s_tag *dest);
-bool env_eval_quote_complex (s_env *env, const s_complex *c,
- s_tag *dest);
-bool env_eval_quote_cow (s_env *env, const s_cow *cow,
- s_tag *dest);
-bool env_eval_quote_list (s_env *env, const s_list *list,
- s_tag *dest);
-bool env_eval_quote_map (s_env *env, const s_map *map,
- s_tag *dest);
-bool env_eval_quote_quote (s_env *env, const s_quote *quote,
- s_tag *dest);
-bool env_eval_quote_struct (s_env *env, const s_struct *s,
- s_tag *dest);
-bool env_eval_quote_tag (s_env *env, const s_tag *tag,
- s_tag *dest);
-bool env_eval_quote_time (s_env *env, const s_time *time,
- s_tag *dest);
-bool env_eval_quote_tuple (s_env *env, const s_tuple *tuple,
- s_tag *dest);
-bool env_eval_quote_unquote (s_env *env,
- const s_unquote *unquote,
- s_tag *dest);
-bool env_eval_struct (s_env *env, const s_struct *s,
- s_struct *dest);
-bool env_eval_struct_tag (s_env *env, const s_struct *s,
- s_tag *dest);
-bool env_eval_tag (s_env *env, const s_tag *tag,
- s_tag *dest);
-bool env_eval_time (s_env *env, const s_time *time,
- s_tag *dest);
-bool env_eval_tuple (s_env *env, const s_tuple *tuple,
- s_tag *dest);
-bool env_eval_var (s_env *env, const s_tag *tag, s_tag *dest);
-bool env_eval_void (s_env *env, const void *_, s_tag *dest);
s_fact_w * env_fact_w_eval (s_env *env, const s_fact_w *fact,
s_fact_w *dest);
s_tag * env_facts_with (s_env *env, s_facts *facts, s_list **spec,
@@ -209,6 +85,9 @@ bool env_module_maybe_reload (s_env *env,
s8 env_operator_arity (s_env *env, const s_ident *op);
bool * env_operator_find (s_env *env, const s_ident *op,
bool *dest);
+s_tag * env_operator_find_by_sym (s_env *env,
+ const s_sym *sym,
+ s_tag *dest);
s_ident * env_operator_ident (s_env *env, const s_ident *op,
s_ident *dest);
bool * env_operator_is_right_associative (s_env *env,
@@ -237,6 +116,132 @@ bool env_tag_ident_is_bound (s_env *env,
s_tag * env_while (s_env *env, const s_tag *cond,
const s_tag *body, s_tag *dest);
+/* Evaluator. */
+bool env_eval_array (s_env *env, const s_array *array,
+ s_array *dest);
+bool env_eval_array_tag (s_env *env, const s_array *array,
+ s_tag *dest);
+bool env_eval_block (s_env *env, const s_block *block,
+ s_tag *dest);
+bool env_eval_call (s_env *env, const s_call *call,
+ s_tag *dest);
+bool env_eval_call_arguments (s_env *env, const s_list *args,
+ s_list **dest);
+bool env_eval_call_cfn (s_env *env, const s_call *call,
+ s_tag *dest);
+bool env_eval_call_fn (s_env *env, const s_call *call,
+ s_tag *dest);
+bool env_eval_call_fn_args (s_env *env, const s_fn *fn,
+ const s_list *arguments,
+ s_tag *dest);
+bool env_eval_call_resolve (s_env *env, s_call *call);
+bool env_eval_cfn (s_env *env, const s_cfn *cfn, s_tag *dest);
+bool env_eval_complex (s_env *env, const s_complex *c,
+ s_tag *dest);
+bool env_eval_cow (s_env *env, const s_cow *cow, s_tag *dest);
+bool env_eval_equal_block (s_env *env, bool macro,
+ const s_block *a, const s_block *b,
+ s_block *dest);
+bool env_eval_equal_list (s_env *env, bool macro,
+ const s_list *a, const s_list *b,
+ s_list **dest);
+bool env_eval_equal_struct (s_env *env, bool macro,
+ const s_struct *a,
+ const s_struct *b,
+ s_struct *dest);
+bool env_eval_equal_tag (s_env *env, bool macro,
+ const s_tag *a, const s_tag *b,
+ s_tag *dest);
+bool env_eval_equal_time (s_env *env, bool macro,
+ const s_time *a, const s_time *b,
+ s_time *dest);
+bool env_eval_equal_tuple (s_env *env, bool macro,
+ const s_tuple *a, const s_tuple *b,
+ s_tuple *dest);
+bool env_eval_fn (s_env *env, const s_fn *fn, s_tag *dest);
+bool env_eval_fn_tag (s_env *env, const s_tag *tag,
+ s_tag *dest);
+bool env_eval_fn_tag_array (s_env *env, const s_array *array,
+ s_tag *dest);
+bool env_eval_fn_tag_block (s_env *env, const s_block *block,
+ s_tag *dest);
+bool env_eval_fn_tag_call (s_env *env, const s_call *call,
+ s_tag *dest);
+bool env_eval_fn_tag_complex (s_env *env, const s_complex *c,
+ s_tag *dest);
+bool env_eval_fn_tag_ident (s_env *env, const s_ident *ident,
+ s_tag *dest);
+bool env_eval_fn_tag_list (s_env *env, const s_list *list,
+ s_tag *dest);
+bool env_eval_fn_tag_map (s_env *env, const s_map *map,
+ s_tag *dest);
+bool env_eval_fn_tag_quote (s_env *env, const s_quote *quote,
+ s_tag *dest);
+bool env_eval_fn_tag_str (s_env *env, const s_str *str,
+ s_tag *dest);
+bool env_eval_fn_tag_struct (s_env *env, const s_struct *s,
+ s_tag *dest);
+bool env_eval_fn_tag_tag (s_env *env, const s_tag *tag,
+ s_tag *dest);
+bool env_eval_fn_tag_tuple (s_env *env, const s_tuple *tuple,
+ s_tag *dest);
+bool env_eval_fn_tag_unquote (s_env *env,
+ const s_unquote *unquote,
+ s_tag *dest);
+bool env_eval_ident (s_env *env, const s_ident *ident,
+ s_tag *dest);
+bool env_eval_ident_is_bound (s_env *env,
+ const s_ident *ident);
+bool env_eval_integer (s_env *env, const s_integer *integer,
+ s_integer *dest);
+bool env_eval_list (s_env *env, const s_list *list,
+ s_tag *dest);
+bool env_eval_map (s_env *env, const s_map *map,
+ s_tag *dest);
+bool env_eval_progn (s_env *env, const s_list *program,
+ s_tag *dest);
+bool env_eval_quote (s_env *env, const s_quote *quote,
+ s_tag *dest);
+bool env_eval_quote_array (s_env *env, const s_array *array,
+ s_tag *dest);
+bool env_eval_quote_block (s_env *env, const s_block *block,
+ s_tag *dest);
+bool env_eval_quote_call (s_env *env, const s_call *call,
+ s_tag *dest);
+bool env_eval_quote_complex (s_env *env, const s_complex *c,
+ s_tag *dest);
+bool env_eval_quote_cow (s_env *env, const s_cow *cow,
+ s_tag *dest);
+bool env_eval_quote_list (s_env *env, const s_list *list,
+ s_tag *dest);
+bool env_eval_quote_map (s_env *env, const s_map *map,
+ s_tag *dest);
+bool env_eval_quote_quote (s_env *env, const s_quote *quote,
+ s_tag *dest);
+bool env_eval_quote_struct (s_env *env, const s_struct *s,
+ s_tag *dest);
+bool env_eval_quote_tag (s_env *env, const s_tag *tag,
+ s_tag *dest);
+bool env_eval_quote_time (s_env *env, const s_time *time,
+ s_tag *dest);
+bool env_eval_quote_tuple (s_env *env, const s_tuple *tuple,
+ s_tag *dest);
+bool env_eval_quote_unquote (s_env *env,
+ const s_unquote *unquote,
+ s_tag *dest);
+bool env_eval_struct (s_env *env, const s_struct *s,
+ s_struct *dest);
+bool env_eval_struct_tag (s_env *env, const s_struct *s,
+ s_tag *dest);
+bool env_eval_tag (s_env *env, const s_tag *tag,
+ s_tag *dest);
+bool env_eval_time (s_env *env, const s_time *time,
+ s_tag *dest);
+bool env_eval_tuple (s_env *env, const s_tuple *tuple,
+ s_tag *dest);
+bool env_eval_var (s_env *env, const s_var *var, s_tag *dest);
+bool env_eval_void (s_env *env, const void *_, s_tag *dest);
+
/* Modifiers. */
bool env_call_get (s_env *env, s_call *call);
bool env_module_ensure_loaded (s_env *env, const s_sym *module);
diff --git a/libkc3/kc3.c b/libkc3/kc3.c
index 03e7c6c..c9b1714 100644
--- a/libkc3/kc3.c
+++ b/libkc3/kc3.c
@@ -322,11 +322,14 @@ uw * kc3_offsetof (const s_sym * const *module,
return dest;
}
-s_tag * kc3_pin (const s_tag *a, s_tag *dest)
+s_tag * kc3_operator_find_by_sym (const s_sym * const *sym, s_tag *dest)
{
- if (! env_eval_tag(&g_kc3_env, a, dest))
- return NULL;
- return dest;
+ return env_operator_find_by_sym(&g_kc3_env, *sym, dest);
+}
+
+s_tag * kc3_identity (const s_tag *tag, s_tag *dest)
+{
+ return tag_init_copy(dest, tag);
}
sw kc3_puts (const s_tag *tag)
diff --git a/libkc3/kc3_main.h b/libkc3/kc3_main.h
index 30abbbc..8c24837 100644
--- a/libkc3/kc3_main.h
+++ b/libkc3/kc3_main.h
@@ -43,31 +43,33 @@ uw * kc3_offsetof (const s_sym * const *module,
sw kc3_puts (const s_tag *tag);
/* Operators. */
-s_tag * kc3_access (const s_tag *tag, const s_list * const *addr,
- s_tag *dest);
-s_tag * kc3_buf_parse_tag (s_buf *buf, s_tag *dest);
-s_tag * kc3_def (const s_call *call, s_tag *dest);
-s_tag * kc3_defmodule (const s_sym **name, const s_block *block,
+s_tag * kc3_access (const s_tag *tag, const s_list * const *addr,
s_tag *dest);
-s_tag * kc3_defoperator (const s_sym **name, const s_sym **sym,
- const s_tag *symbol_value,
- u8 operator_precedence,
- const s_sym **operator_associativity,
- s_tag *dest);
-s_tag * kc3_defstruct (const s_list * const *spec, s_tag *dest);
-void ** kc3_dlopen (const s_str *path, void **dest);
-s_facts * kc3_env_facts (void);
-sw kc3_errno (void);
-void kc3_exit (sw code);
-s_tag * kc3_facts_with (s_facts *facts, s_list **spec,
- s_fn *callback, s_tag *dest);
-s_tag * kc3_facts_with_tags (s_facts *facts, s_tag *subject,
- s_tag *predicate, s_tag *object,
- s_fn *callback, s_tag *dest);
-bool kc3_load (const s_str *path);
-s_tag * kc3_pin (const s_tag *a, s_tag *dest);
-bool kc3_require (const s_sym * const *module);
-s_str * kc3_strerror (sw err_no, s_str *dest);
+s_tag * kc3_buf_parse_tag (s_buf *buf, s_tag *dest);
+s_tag * kc3_def (const s_call *call, s_tag *dest);
+s_tag * kc3_defmodule (const s_sym **name, const s_block *block,
+ s_tag *dest);
+s_tag * kc3_defoperator (const s_sym **name, const s_sym **sym,
+ const s_tag *symbol_value,
+ u8 operator_precedence,
+ const s_sym **operator_associativity,
+ s_tag *dest);
+s_tag * kc3_defstruct (const s_list * const *spec, s_tag *dest);
+void ** kc3_dlopen (const s_str *path, void **dest);
+s_facts * kc3_env_facts (void);
+sw kc3_errno (void);
+void kc3_exit (sw code);
+s_tag * kc3_facts_with (s_facts *facts, s_list **spec,
+ s_fn *callback, s_tag *dest);
+s_tag * kc3_facts_with_tags (s_facts *facts, s_tag *subject,
+ s_tag *predicate, s_tag *object,
+ s_fn *callback, s_tag *dest);
+s_tag * kc3_identity (const s_tag *tag, s_tag *dest);
+bool kc3_load (const s_str *path);
+s_tag * kc3_operator_find_by_sym (const s_sym * const *sym,
+ s_tag *dest);
+bool kc3_require (const s_sym * const *module);
+s_str * kc3_strerror (sw err_no, s_str *dest);
/* Special operators. */
s_tag * kc3_if_then_else (const s_tag *cond, const s_tag *then,
diff --git a/libkc3/list.h b/libkc3/list.h
index 0100283..25394d4 100644
--- a/libkc3/list.h
+++ b/libkc3/list.h
@@ -19,9 +19,7 @@
#ifndef LIBKC3_LIST_H
#define LIBKC3_LIST_H
-#include <stdarg.h>
-#include <stdio.h>
-#include "hash.h"
+#include "types.h"
#include "list_init.h"
/* Stack-allocation functions, call list_clean after use. */
@@ -63,6 +61,4 @@ s_tuple * list_to_tuple_reverse (const s_list *list, s_tuple *dest);
/* Operators */
s_list ** list_remove_void (s_list **list);
-/*#include "list_init.h"*/
-
#endif /* LIBKC3_LIST_H */
diff --git a/libkc3/operator.h b/libkc3/operator.h
index ae8c583..74a6901 100644
--- a/libkc3/operator.h
+++ b/libkc3/operator.h
@@ -16,14 +16,14 @@
#include "types.h"
/* Observers */
-s8 operator_arity (const s_ident *op);
-bool * operator_find (const s_ident *op, bool *dest);
-s_ident * operator_ident (const s_ident *op, s_ident *dest);
-bool * operator_is_right_associative (const s_ident *op,
- bool *dest);
-s8 operator_precedence (const s_ident *op);
-s_ident * operator_resolve (const s_ident *ident, u8 arity,
- s_ident *dest);
+s8 operator_arity (const s_ident *op);
+bool * operator_find (const s_ident *op, bool *dest);
+s_ident * operator_ident (const s_ident *op, s_ident *dest);
+bool * operator_is_right_associative (const s_ident *op,
+ bool *dest);
+s8 operator_precedence (const s_ident *op);
+s_ident * operator_resolve (const s_ident *ident, u8 arity,
+ s_ident *dest);
const s_sym ** operator_symbol (const s_ident *op, const s_sym **dest);
#endif /* LIBKC3_OPERATOR_H */
diff --git a/libkc3/sources.mk b/libkc3/sources.mk
index 4633e70..4d269be 100644
--- a/libkc3/sources.mk
+++ b/libkc3/sources.mk
@@ -157,6 +157,7 @@ HEADERS = \
"tag_init.h" \
"tag_type.h" \
"time.h" \
+ "to_lisp.h" \
"tuple.h" \
"types.h" \
"u16.h" \
@@ -338,6 +339,7 @@ SOURCES = \
"tag_sub.c" \
"tag_type.c" \
"time.c" \
+ "to_lisp.c" \
"tuple.c" \
"u16.c" \
"u32.c" \
@@ -615,6 +617,7 @@ LO_SOURCES = \
"tag_sub.c" \
"tag_type.c" \
"time.c" \
+ "to_lisp.c" \
"tuple.c" \
"u16.c" \
"u32.c" \
diff --git a/libkc3/sources.sh b/libkc3/sources.sh
index bc97f9d..c6724eb 100644
--- a/libkc3/sources.sh
+++ b/libkc3/sources.sh
@@ -1,4 +1,4 @@
# sources.sh generated by update_sources
-HEADERS='abs.h alist.h alloc.h arg.h array.h assert.h binding.h block.h bool.h buf.h buf_fd.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_rw.h buf_save.h call.h cast.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 fd.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 pretty.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 alist.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.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_rw.c buf_save.c call.c cast.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 fd.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 pretty.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 alist.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.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_rw.c buf_save.c call.c cast.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 fd.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 pretty.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 alist.h alloc.h arg.h array.h assert.h binding.h block.h bool.h buf.h buf_fd.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_rw.h buf_save.h call.h cast.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 fd.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 pretty.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 to_lisp.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 alist.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.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_rw.c buf_save.c call.c cast.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 fd.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 pretty.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 to_lisp.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 alist.c alloc.c arg.c array.c binding.c block.c bool.c buf.c buf_fd.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_rw.c buf_save.c call.c cast.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 fd.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 pretty.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 to_lisp.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/struct.c b/libkc3/struct.c
index d49ae07..d9c6ce5 100644
--- a/libkc3/struct.c
+++ b/libkc3/struct.c
@@ -224,7 +224,7 @@ s_struct * struct_init_1 (s_struct *s, const char *p)
s_buf buf;
uw len;
sw r;
- s_struct tmp;
+ s_struct tmp = {0};
assert(s);
assert(p);
len = strlen(p);
@@ -238,6 +238,11 @@ s_struct * struct_init_1 (s_struct *s, const char *p)
struct_clean(&tmp);
return NULL;
}
+ if (true) {
+ err_write_1("\nstruct_init_1: tmp = ");
+ err_inspect_struct(&tmp);
+ err_write_1("\n");
+ }
if (! env_eval_struct(&g_kc3_env, &tmp, s)) {
err_puts("struct_init_1: env_eval_struct");
assert(! "struct_init_1: env_eval_struct");
@@ -462,6 +467,8 @@ s_struct * struct_set (s_struct *s, const s_sym *key,
s->type->map.key[i].data.sym == key) {
if (! tag_type(s->type->map.value + i, &type_sym))
return NULL;
+ if (type_sym == &g_sym_Var)
+ type_sym = s->type->map.value[i].data.var.type;
data = (s8 *) s->data + s->type->offset[i];
if (! tag_to_const_pointer(value, type_sym, &data_src))
return NULL;
diff --git a/libkc3/sym.c b/libkc3/sym.c
index 1aae9d3..3713a50 100644
--- a/libkc3/sym.c
+++ b/libkc3/sym.c
@@ -47,7 +47,7 @@ const s_sym g_sym_Fn = {{{NULL}, 2, {"Fn"}}};
const s_sym g_sym_Ident = {{{NULL}, 5, {"Ident"}}};
const s_sym g_sym_Integer = {{{NULL}, 7, {"Integer"}}};
const s_sym g_sym_KC3 = {{{NULL}, 3, {"KC3"}}};
-const s_sym g_sym_KC3__Operator = {{{NULL}, 12, {"KC3.Operator"}}};
+const s_sym g_sym_KC3_Operator = {{{NULL}, 12, {"KC3.Operator"}}};
const s_sym g_sym_List = {{{NULL}, 4, {"List"}}};
const s_sym g_sym_Map = {{{NULL}, 3, {"Map"}}};
const s_sym g_sym_Ptag = {{{NULL}, 4, {"Ptag"}}};
@@ -362,7 +362,7 @@ void sym_init_g_sym (void)
sym_register(&g_sym_Ident, NULL);
sym_register(&g_sym_Integer, NULL);
sym_register(&g_sym_KC3, NULL);
- sym_register(&g_sym_KC3__Operator, NULL);
+ sym_register(&g_sym_KC3_Operator, NULL);
sym_register(&g_sym_List, NULL);
sym_register(&g_sym_Map, NULL);
sym_register(&g_sym_Ptag, NULL);
diff --git a/libkc3/sym.h b/libkc3/sym.h
index a3504dd..75779dd 100644
--- a/libkc3/sym.h
+++ b/libkc3/sym.h
@@ -51,7 +51,7 @@ extern const s_sym g_sym_Fn;
extern const s_sym g_sym_Ident;
extern const s_sym g_sym_Integer;
extern const s_sym g_sym_KC3;
-extern const s_sym g_sym_KC3__Operator;
+extern const s_sym g_sym_KC3_Operator;
extern const s_sym g_sym_List;
extern const s_sym g_sym_Map;
extern const s_sym g_sym_Ptag;
diff --git a/libkc3/tag.c b/libkc3/tag.c
index 95bdfea..9335f17 100644
--- a/libkc3/tag.c
+++ b/libkc3/tag.c
@@ -980,6 +980,12 @@ const s_tag * tag_resolve_cow (const s_tag *tag)
return tag;
}
+s_tag * tag_semicolumn (const s_tag *a, const s_tag *b, s_tag *dest)
+{
+ (void) a;
+ return tag_init_copy(dest, b);
+}
+
uw * tag_size (const s_tag *tag, uw *dest)
{
const s_sym *type;
@@ -1063,7 +1069,7 @@ bool tag_to_const_pointer (const s_tag *tag, const s_sym *type,
case TAG_TIME: *dest = &tag->data.time; return true;
case TAG_TUPLE: *dest = &tag->data.tuple; return true;
case TAG_UNQUOTE: *dest = &tag->data.unquote; return true;
- case TAG_VAR: *dest = tag; return true;
+ case TAG_VAR: *dest = &tag->data.var; return true;
case TAG_VOID: *dest = NULL; return true;
}
err_write_1("tag_to_const_pointer: invalid tag type: ");
@@ -1340,10 +1346,6 @@ bool tag_to_ffi_pointer (s_tag *tag, const s_sym *type, void **dest)
}
goto invalid_cast;
case TAG_VAR:
- if (type == &g_sym_Tag) {
- *dest = tag;
- return true;
- }
if (type == &g_sym_Var) {
*dest = &tag->data.var;
return true;
@@ -1386,7 +1388,6 @@ bool tag_to_pointer (s_tag *tag, const s_sym *type, void **dest)
return false;
}
switch (tag_type) {
- case TAG_VOID: *dest = NULL; return true;
case TAG_ARRAY: *dest = &tag->data.array; return true;
case TAG_BLOCK: *dest = &tag->data.block; return true;
case TAG_BOOL: *dest = &tag->data.bool; return true;
@@ -1402,22 +1403,18 @@ bool tag_to_pointer (s_tag *tag, const s_sym *type, void **dest)
case TAG_FN: *dest = &tag->data.fn; return true;
case TAG_IDENT: *dest = &tag->data.ident; return true;
case TAG_INTEGER: *dest = &tag->data.integer; return true;
- case TAG_SW: *dest = &tag->data.sw; return true;
- case TAG_S64: *dest = &tag->data.s64; return true;
- case TAG_S32: *dest = &tag->data.s32; return true;
- case TAG_S16: *dest = &tag->data.s16; return true;
- case TAG_S8: *dest = &tag->data.s8; return true;
- case TAG_U8: *dest = &tag->data.u8; return true;
- case TAG_U16: *dest = &tag->data.u16; return true;
- case TAG_U32: *dest = &tag->data.u32; return true;
- case TAG_U64: *dest = &tag->data.u64; return true;
- case TAG_UW: *dest = &tag->data.uw; return true;
case TAG_LIST: *dest = &tag->data.list; return true;
case TAG_MAP: *dest = &tag->data.map; return true;
case TAG_PTAG: *dest = &tag->data.ptag; return true;
case TAG_PTR: *dest = &tag->data.ptr.p; return true;
case TAG_PTR_FREE: *dest = &tag->data.ptr_free.p; return true;
case TAG_QUOTE: *dest = &tag->data.quote; return true;
+ case TAG_RATIO: *dest = &tag->data.ratio; return true;
+ case TAG_SW: *dest = &tag->data.sw; return true;
+ case TAG_S64: *dest = &tag->data.s64; return true;
+ case TAG_S32: *dest = &tag->data.s32; return true;
+ case TAG_S16: *dest = &tag->data.s16; return true;
+ case TAG_S8: *dest = &tag->data.s8; return true;
case TAG_STR: *dest = &tag->data.str; return true;
case TAG_STRUCT:
if (type == &g_sym_Struct) {
@@ -1433,9 +1430,14 @@ bool tag_to_pointer (s_tag *tag, const s_sym *type, void **dest)
case TAG_SYM: *dest = &tag->data.sym; return true;
case TAG_TIME: *dest = &tag->data.time; return true;
case TAG_TUPLE: *dest = &tag->data.tuple; return true;
+ case TAG_U8: *dest = &tag->data.u8; return true;
+ case TAG_U16: *dest = &tag->data.u16; return true;
+ case TAG_U32: *dest = &tag->data.u32; return true;
+ case TAG_U64: *dest = &tag->data.u64; return true;
case TAG_UNQUOTE: *dest = &tag->data.unquote; return true;
- case TAG_VAR: *dest = tag; return true;
- case TAG_RATIO: *dest = &tag->data.ratio; return true;
+ case TAG_UW: *dest = &tag->data.uw; return true;
+ case TAG_VAR: *dest = &tag->data.var; return true;
+ case TAG_VOID: *dest = NULL; return true;
}
err_puts("tag_to_pointer: invalid tag type");
assert(! "tag_to_pointer: invalid tag type");
diff --git a/libkc3/to_lisp.c b/libkc3/to_lisp.c
new file mode 100644
index 0000000..90ce1b9
--- /dev/null
+++ b/libkc3/to_lisp.c
@@ -0,0 +1,96 @@
+/* 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 to_lisp.h
+ * @brief Convert Tag to Lisp notation
+ *
+ * Convert any Tag to Lisp notation, that is List for code.
+ */
+#include "assert.h"
+#include "list.h"
+#include "tag.h"
+#include "to_lisp.h"
+
+s_tag * to_lisp (const s_tag *tag, s_tag *dest)
+{
+ assert(tag);
+ assert(dest);
+ switch (tag->type) {
+ case TAG_CALL:
+ return to_lisp_call(&tag->data.call, dest);
+ case TAG_LIST:
+ return to_lisp_list(tag->data.list, dest);
+ case TAG_TUPLE:
+ return to_lisp_tuple(&tag->data.tuple, dest);
+ default:
+ return tag_init_copy(dest, tag);
+ }
+}
+
+s_tag * to_lisp_call (const s_call *call, s_tag *dest)
+{
+ s_tag arguments;
+ s_list *list;
+ if (! to_lisp_list(call->arguments, &arguments))
+ return NULL;
+ if (arguments.type != TAG_LIST) {
+ err_puts("to_lisp_call: arguments.type != TAG_LIST");
+ assert(! "to_lisp_call: arguments.type != TAG_LIST");
+ return NULL;
+ }
+ if (! (list = list_new_ident(&call->ident, arguments.data.list))) {
+ tag_clean(&arguments);
+ return NULL;
+ }
+ return tag_init_list(dest, list);
+}
+
+s_tag * to_lisp_list (const s_list *list, s_tag *dest)
+{
+ const s_list *list_i;
+ s_list **tail;
+ s_list *tmp;
+ tmp = NULL;
+ tail = &tmp;
+ list_i = list;
+ while (list_i) {
+ *tail = list_new(NULL);
+ if (! to_lisp(&list_i->tag, &(*tail)->tag))
+ goto ko;
+ tail = &(*tail)->next.data.list;
+ list_i = list_next(list_i);
+ }
+ return tag_init_list(dest, tmp);
+ ko:
+ list_delete_all(tmp);
+ return NULL;
+}
+
+s_tag * to_lisp_tuple (const s_tuple *tuple, s_tag *dest)
+{
+ uw i;
+ s_tag tmp = {0};
+ if (! tag_init_tuple(&tmp, tuple->count))
+ return NULL;
+ i = 0;
+ while (i < tuple->count) {
+ if (! to_lisp(tuple->tag + i, tmp.data.tuple.tag + i))
+ goto ko;
+ i++;
+ }
+ *dest = tmp;
+ return dest;
+ ko:
+ tag_clean(&tmp);
+ return NULL;
+}
diff --git a/libkc3/to_lisp.h b/libkc3/to_lisp.h
new file mode 100644
index 0000000..3d3ef09
--- /dev/null
+++ b/libkc3/to_lisp.h
@@ -0,0 +1,29 @@
+/* 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 to_lisp.h
+ * @brief Convert Tag to Lisp notation
+ *
+ * Convert any Tag to Lisp notation, that is List for code.
+ */
+#ifndef LIBKC3_TO_LISP_H
+#define LIBKC3_TO_LISP_H
+
+#include "types.h"
+
+s_tag * to_lisp (const s_tag *tag, s_tag *dest);
+s_tag * to_lisp_call (const s_call *call, s_tag *dest);
+s_tag * to_lisp_list (const s_list *list, s_tag *dest);
+s_tag * to_lisp_tuple (const s_tuple *call, s_tag *dest);
+
+#endif /* LIBKC3_TO_LISP_H */
diff --git a/libkc3/types.h b/libkc3/types.h
index c7df6ac..0b1bdd4 100644
--- a/libkc3/types.h
+++ b/libkc3/types.h
@@ -172,6 +172,7 @@ typedef struct fact_list s_fact_list;
typedef struct list s_list_map;
typedef struct log s_log;
typedef struct map s_map;
+typedef struct operator s_operator;
typedef struct pretty s_pretty;
typedef struct pretty_save s_pretty_save;
typedef struct queue s_queue;
@@ -218,7 +219,7 @@ typedef bool (* f_sequence_button) (s_sequence *seq, u8 button, sw x,
#define SKIPLIST_HEIGHT_MAX U64_MAX
/* 1 */
-
+
struct array_dimension {
uw count;
uw item_size;
@@ -592,6 +593,13 @@ struct list {
s_tag next;
};
+struct operator {
+ const s_sym *sym;
+ const s_sym *operator_associativity;
+ sw operator_precedence;
+ s_tag symbol_value;
+};
+
struct sequence {
s_tag tag;
f64 dt;
diff --git a/libkc3/var.c b/libkc3/var.c
index 0d7aa33..c27ed60 100644
--- a/libkc3/var.c
+++ b/libkc3/var.c
@@ -45,27 +45,46 @@ s_var * var_init (s_var *var, s_tag *ptr, const s_sym *type)
return var;
}
-s_tag * var_init_cast (s_tag *tag, const s_sym * const *type,
+s_var * var_init_cast (s_var *var, const s_sym * const *type,
const s_tag *src)
{
void *data;
- s_tag tmp = {0};
- assert(tag);
+ s_tag tag = {0};
+ s_var tmp = {0};
+ assert(var);
assert(type);
assert(src);
if (*type == &g_sym_Var) {
- err_puts("var_init_cast: cannot cast to Var");
- assert(! "var_init_cast: cannot cast to Var");
- return NULL;
+ tmp.type = &g_sym_Tag;
+ switch (src->type) {
+ case TAG_PTR: tmp.ptr = src->data.ptr.p; break;
+ case TAG_S8: tmp.ptr = (s_tag *) (uw) src->data.s8; break;
+ case TAG_S16: tmp.ptr = (s_tag *) (uw) src->data.s16; break;
+ case TAG_S32: tmp.ptr = (s_tag *) (uw) src->data.s32; break;
+ case TAG_S64: tmp.ptr = (s_tag *) (uw) src->data.s64; break;
+ case TAG_SW: tmp.ptr = (s_tag *) (uw) src->data.sw; break;
+ case TAG_U8: tmp.ptr = (s_tag *) (uw) src->data.u8; break;
+ case TAG_U16: tmp.ptr = (s_tag *) (uw) src->data.u16; break;
+ case TAG_U32: tmp.ptr = (s_tag *) (uw) src->data.u32; break;
+ case TAG_U64: tmp.ptr = (s_tag *) (uw) src->data.u64; break;
+ case TAG_UW: tmp.ptr = (s_tag *) src->data.uw; break;
+ default: goto invalid_cast;
+ }
+ *var = tmp;
+ return var;
}
- if (! sym_to_tag_type(*type, &tmp.type))
+ if (! sym_to_tag_type(*type, &tag.type))
return NULL;
- if (! tag_to_pointer(&tmp, *type, &data))
+ if (! tag_to_pointer(&tag, *type, &data))
return NULL;
if (! data_init_cast(data, type, src))
return NULL;
- *tag = tmp;
- return tag;
+ *var->ptr = tag;
+ return var;
+ invalid_cast:
+ err_puts("var_init_cast: cannot cast to Var");
+ assert(! "var_init_cast: cannot cast to Var");
+ return NULL;
}
s_var * var_init_copy (s_var *var, const s_var *src)
diff --git a/libkc3/var.h b/libkc3/var.h
index e906835..d25f395 100644
--- a/libkc3/var.h
+++ b/libkc3/var.h
@@ -17,7 +17,7 @@
/* Stack-allocation compatible functions. */
s_var * var_init (s_var *var, s_tag *ptr, const s_sym *type);
-s_tag * var_init_cast (s_tag *tag, const s_sym * const *type,
+s_var * var_init_cast (s_var *tag, const s_sym * const *type,
const s_tag *src);
s_var * var_init_copy (s_var *tag, const s_var *src);
diff --git a/sources.mk b/sources.mk
index 3a905da..9f151b3 100644
--- a/sources.mk
+++ b/sources.mk
@@ -500,6 +500,8 @@ KC3_C_SOURCES = \
"libkc3/tag_type.h" \
"libkc3/time.c" \
"libkc3/time.h" \
+ "libkc3/to_lisp.c" \
+ "libkc3/to_lisp.h" \
"libkc3/tuple.c" \
"libkc3/tuple.h" \
"libkc3/types.h" \
@@ -568,6 +570,7 @@ KC3_C_SOURCES = \
"test/set__tag_test.c" \
"test/skiplist__fact_test.c" \
"test/str_test.c" \
+ "test/struct_test.c" \
"test/sym_test.c" \
"test/tag_test.c" \
"test/tag_test.h" \
@@ -925,7 +928,6 @@ KC3_IMG_SOURCES = \
"img/toast.png" \
KC3_LIB_SOURCES = \
- "lib/kc3/0.1/.#kc3.facts" \
"lib/kc3/0.1/array.kc3" \
"lib/kc3/0.1/bool.facts" \
"lib/kc3/0.1/buf.kc3" \
diff --git a/sources.sh b/sources.sh
index 4bd9be8..056fb77 100644
--- a/sources.sh
+++ b/sources.sh
@@ -1,10 +1,10 @@
# sources.sh generated by update_sources
KC3_CONFIGURES='ekc3/configure ekc3/sources.sh ekc3/update_sources event/configure event/sources.sh event/update_sources http/configure http/sources.sh http/update_sources httpd/configure httpd/sources.sh httpd/update_sources ikc3/configure ikc3/sources.sh ikc3/update_sources json/configure json/sources.sh json/update_sources kc3c/configure kc3s/configure kc3s/sources.sh kc3s/update_sources libkc3/configure libkc3/sources.sh libkc3/update_sources libtommath/configure libtommath/sources.sh libtommath/update_sources socket/configure socket/sources.sh socket/update_sources test/configure test/sources.sh test/update_sources ucd2c/configure window/cairo/configure window/cairo/demo/configure window/cairo/demo/sources.sh window/cairo/demo/update_sources window/cairo/quartz/configure window/cairo/quartz/demo/configure window/cairo/quartz/demo/sources.sh window/cairo/quartz/demo/update_sources window/cairo/quartz/sources.sh window/cairo/quartz/update_sources window/cairo/sources.sh window/cairo/update_sources window/cairo/win32/configure window/cairo/win32/demo/configure window/cairo/win32/demo/sources.sh window/cairo/win32/demo/update_sources window/cairo/win32/sources.sh window/cairo/win32/update_sources window/cairo/xcb/configure window/cairo/xcb/demo/configure window/cairo/xcb/demo/sources.sh window/cairo/xcb/demo/update_sources window/cairo/xcb/sources.sh window/cairo/xcb/update_sources window/configure window/sdl2/configure window/sdl2/demo/configure window/sdl2/demo/macos/configure window/sdl2/demo/sources.sh window/sdl2/demo/update_sources window/sdl2/sources.sh window/sdl2/update_sources window/sources.sh window/update_sources '
KC3_MAKEFILES='ekc3/Makefile ekc3/sources.mk event/Makefile event/sources.mk http/Makefile http/sources.mk httpd/Makefile httpd/sources.mk ikc3/Makefile ikc3/sources.mk json/Makefile json/sources.mk kc3c/Makefile kc3s/Makefile kc3s/sources.mk libkc3/Makefile libkc3/gen.mk libkc3/sources.mk libtommath/Makefile libtommath/sources.mk socket/Makefile socket/sources.mk test/Makefile test/sources.mk ucd2c/Makefile window/Makefile window/cairo/Makefile window/cairo/demo/Makefile window/cairo/demo/sources.mk window/cairo/quartz/Makefile window/cairo/quartz/demo/Makefile window/cairo/quartz/demo/sources.mk window/cairo/quartz/sources.mk window/cairo/sources.mk window/cairo/win32/Makefile window/cairo/win32/demo/Makefile window/cairo/win32/demo/sources.mk window/cairo/win32/sources.mk window/cairo/xcb/Makefile window/cairo/xcb/demo/Makefile window/cairo/xcb/demo/sources.mk window/cairo/xcb/sources.mk window/sdl2/Makefile window/sdl2/demo/Makefile window/sdl2/demo/macos/Makefile window/sdl2/demo/sources.mk window/sdl2/sources.mk window/sources.mk '
-KC3_C_SOURCES='ekc3/ekc3.c ekc3/ekc3.h ekc3/html.c ekc3/html.h ekc3/types.h event/event.c event/event.h http/http.c http/http.h http/http_request.c http/http_request.h http/http_response.c http/http_response.h http/mime_type.c http/mime_type.h http/types.h httpd/httpd.c httpd/httpd.h ikc3/buf_linenoise.c ikc3/buf_linenoise.h ikc3/buf_wineditline.c ikc3/buf_wineditline.h ikc3/ikc3.c ikc3/linenoise.c json/json.c json/json.h kc3c/c3c.c kc3s/buf_readline.c kc3s/buf_readline.h kc3s/kc3s.c libkc3/abs.c libkc3/abs.h libkc3/alist.c libkc3/alist.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_fd.c libkc3/buf_fd.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_rw.c libkc3/buf_rw.h libkc3/buf_save.c libkc3/buf_save.h libkc3/call.c libkc3/call.h libkc3/cast.c libkc3/cast.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/fd.c libkc3/fd.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/pretty.c libkc3/pretty.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 socket/socket.c socket/socket.h socket/socket_addr.c socket/socket_addr.h socket/socket_buf.c socket/socket_buf.h socket/types.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/inspect_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 window/cairo/cairo_font.c window/cairo/cairo_font.h window/cairo/cairo_sprite.c window/cairo/cairo_sprite.h window/cairo/cairo_text.c window/cairo/cairo_text.h window/cairo/demo/bg_rect.c window/cairo/demo/bg_rect.h window/cairo/demo/flies.c window/cairo/demo/flies.h window/cairo/demo/lightspeed.c window/cairo/demo/lightspeed.h window/cairo/demo/mandelbrot_f128.c window/cairo/demo/mandelbrot_f128.h window/cairo/demo/toasters.c window/cairo/demo/toasters.h window/cairo/demo/window_cairo_demo.c window/cairo/demo/window_cairo_demo.h window/cairo/quartz/demo/window_cairo_quartz_demo.c window/cairo/quartz/quartz_to_xkbcommon.c window/cairo/quartz/quartz_to_xkbcommon.h window/cairo/quartz/window_cairo_quartz.h window/cairo/quartz/window_cairo_quartz_app_delegate.h window/cairo/quartz/window_cairo_quartz_view.h window/cairo/quartz/window_cairo_quartz_view_controller.h window/cairo/quartz/xkbquartz.h window/cairo/types.h window/cairo/win32/demo/window_cairo_win32_demo.c window/cairo/win32/vk_to_xkbcommon.c window/cairo/win32/vk_to_xkbcommon.h window/cairo/win32/window_cairo_win32.c window/cairo/win32/window_cairo_win32.h window/cairo/window_cairo.c window/cairo/window_cairo.h window/cairo/xcb/demo/window_cairo_xcb_demo.c window/cairo/xcb/window_cairo_xcb.c window/cairo/xcb/window_cairo_xcb.h window/sdl2/demo/bg_rect.c window/sdl2/demo/bg_rect.h window/sdl2/demo/earth.c window/sdl2/demo/earth.h window/sdl2/demo/flies.c window/sdl2/demo/flies.h window/sdl2/demo/lightspeed.c window/sdl2/demo/lightspeed.h window/sdl2/demo/mandelbrot_f128.c window/sdl2/demo/mandelbrot_f128.h window/sdl2/demo/matrix.c window/sdl2/demo/matrix.h window/sdl2/demo/toasters.c window/sdl2/demo/toasters.h window/sdl2/demo/window_sdl2_demo.c window/sdl2/demo/window_sdl2_demo.h window/sdl2/disabled/mandelbrot.c window/sdl2/disabled/mandelbrot.h window/sdl2/disabled/sdl2_font.c window/sdl2/disabled/sdl2_font.h window/sdl2/disabled/sdl2_sprite.c window/sdl2/disabled/sdl2_sprite.h window/sdl2/dmat3.h window/sdl2/dmat4.c window/sdl2/dmat4.h window/sdl2/dvec2.c window/sdl2/dvec2.h window/sdl2/dvec3.c window/sdl2/dvec3.h window/sdl2/gl_camera.c window/sdl2/gl_camera.h window/sdl2/gl_cylinder.c window/sdl2/gl_cylinder.h window/sdl2/gl_deprecated.c window/sdl2/gl_deprecated.h window/sdl2/gl_font.c window/sdl2/gl_font.h window/sdl2/gl_lines.c window/sdl2/gl_lines.h window/sdl2/gl_object.c window/sdl2/gl_object.h window/sdl2/gl_ortho.c window/sdl2/gl_ortho.h window/sdl2/gl_sphere.c window/sdl2/gl_sphere.h window/sdl2/gl_sprite.c window/sdl2/gl_sprite.h window/sdl2/gl_square.c window/sdl2/gl_square.h window/sdl2/gl_text.c window/sdl2/gl_text.h window/sdl2/gl_triangle.c window/sdl2/gl_triangle.h window/sdl2/gl_vertex.c window/sdl2/gl_vertex.h window/sdl2/gl_vtext.c window/sdl2/gl_vtext.h window/sdl2/mat3.h window/sdl2/mat4.c window/sdl2/mat4.h window/sdl2/types.h window/sdl2/vec2.c window/sdl2/vec2.h window/sdl2/vec3.c window/sdl2/vec3.h window/sdl2/window_sdl2.c window/sdl2/window_sdl2.h window/types.h window/window.c window/window.h '
+KC3_C_SOURCES='ekc3/ekc3.c ekc3/ekc3.h ekc3/html.c ekc3/html.h ekc3/types.h event/event.c event/event.h http/http.c http/http.h http/http_request.c http/http_request.h http/http_response.c http/http_response.h http/mime_type.c http/mime_type.h http/types.h httpd/httpd.c httpd/httpd.h ikc3/buf_linenoise.c ikc3/buf_linenoise.h ikc3/buf_wineditline.c ikc3/buf_wineditline.h ikc3/ikc3.c ikc3/linenoise.c json/json.c json/json.h kc3c/c3c.c kc3s/buf_readline.c kc3s/buf_readline.h kc3s/kc3s.c libkc3/abs.c libkc3/abs.h libkc3/alist.c libkc3/alist.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_fd.c libkc3/buf_fd.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_rw.c libkc3/buf_rw.h libkc3/buf_save.c libkc3/buf_save.h libkc3/call.c libkc3/call.h libkc3/cast.c libkc3/cast.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/fd.c libkc3/fd.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/pretty.c libkc3/pretty.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/to_lisp.c libkc3/to_lisp.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 socket/socket.c socket/socket.h socket/socket_addr.c socket/socket_addr.h socket/socket_buf.c socket/socket_buf.h socket/types.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/inspect_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/struct_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 window/cairo/cairo_font.c window/cairo/cairo_font.h window/cairo/cairo_sprite.c window/cairo/cairo_sprite.h window/cairo/cairo_text.c window/cairo/cairo_text.h window/cairo/demo/bg_rect.c window/cairo/demo/bg_rect.h window/cairo/demo/flies.c window/cairo/demo/flies.h window/cairo/demo/lightspeed.c window/cairo/demo/lightspeed.h window/cairo/demo/mandelbrot_f128.c window/cairo/demo/mandelbrot_f128.h window/cairo/demo/toasters.c window/cairo/demo/toasters.h window/cairo/demo/window_cairo_demo.c window/cairo/demo/window_cairo_demo.h window/cairo/quartz/demo/window_cairo_quartz_demo.c window/cairo/quartz/quartz_to_xkbcommon.c window/cairo/quartz/quartz_to_xkbcommon.h window/cairo/quartz/window_cairo_quartz.h window/cairo/quartz/window_cairo_quartz_app_delegate.h window/cairo/quartz/window_cairo_quartz_view.h window/cairo/quartz/window_cairo_quartz_view_controller.h window/cairo/quartz/xkbquartz.h window/cairo/types.h window/cairo/win32/demo/window_cairo_win32_demo.c window/cairo/win32/vk_to_xkbcommon.c window/cairo/win32/vk_to_xkbcommon.h window/cairo/win32/window_cairo_win32.c window/cairo/win32/window_cairo_win32.h window/cairo/window_cairo.c window/cairo/window_cairo.h window/cairo/xcb/demo/window_cairo_xcb_demo.c window/cairo/xcb/window_cairo_xcb.c window/cairo/xcb/window_cairo_xcb.h window/sdl2/demo/bg_rect.c window/sdl2/demo/bg_rect.h window/sdl2/demo/earth.c window/sdl2/demo/earth.h window/sdl2/demo/flies.c window/sdl2/demo/flies.h window/sdl2/demo/lightspeed.c window/sdl2/demo/lightspeed.h window/sdl2/demo/mandelbrot_f128.c window/sdl2/demo/mandelbrot_f128.h window/sdl2/demo/matrix.c window/sdl2/demo/matrix.h window/sdl2/demo/toasters.c window/sdl2/demo/toasters.h window/sdl2/demo/window_sdl2_demo.c window/sdl2/demo/window_sdl2_demo.h window/sdl2/disabled/mandelbrot.c window/sdl2/disabled/mandelbrot.h window/sdl2/disabled/sdl2_font.c window/sdl2/disabled/sdl2_font.h window/sdl2/disabled/sdl2_sprite.c window/sdl2/disabled/sdl2_sprite.h window/sdl2/dmat3.h window/sdl2/dmat4.c window/sdl2/dmat4.h window/sdl2/dvec2.c window/sdl2/dvec2.h window/sdl2/dvec3.c window/sdl2/dvec3.h window/sdl2/gl_camera.c window/sdl2/gl_camera.h window/sdl2/gl_cylinder.c window/sdl2/gl_cylinder.h window/sdl2/gl_deprecated.c window/sdl2/gl_deprecated.h window/sdl2/gl_font.c window/sdl2/gl_font.h window/sdl2/gl_lines.c window/sdl2/gl_lines.h window/sdl2/gl_object.c window/sdl2/gl_object.h window/sdl2/gl_ortho.c window/sdl2/gl_ortho.h window/sdl2/gl_sphere.c window/sdl2/gl_sphere.h window/sdl2/gl_sprite.c window/sdl2/gl_sprite.h window/sdl2/gl_square.c window/sdl2/gl_square.h window/sdl2/gl_text.c window/sdl2/gl_text.h window/sdl2/gl_triangle.c window/sdl2/gl_triangle.h window/sdl2/gl_vertex.c window/sdl2/gl_vertex.h window/sdl2/gl_vtext.c window/sdl2/gl_vtext.h window/sdl2/mat3.h window/sdl2/mat4.c window/sdl2/mat4.h window/sdl2/types.h window/sdl2/vec2.c window/sdl2/vec2.h window/sdl2/vec3.c window/sdl2/vec3.h window/sdl2/window_sdl2.c window/sdl2/window_sdl2.h window/types.h window/window.c window/window.h '
KC3_FONT_SOURCES='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 '
KC3_IMG_SOURCES='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_LIB_SOURCES='lib/kc3/0.1/.#kc3.facts lib/kc3/0.1/array.kc3 lib/kc3/0.1/bool.facts lib/kc3/0.1/buf.kc3 lib/kc3/0.1/buf_rw.kc3 lib/kc3/0.1/complex.facts lib/kc3/0.1/cow.kc3 lib/kc3/0.1/ekc3.kc3 lib/kc3/0.1/event.kc3 lib/kc3/0.1/f128.facts lib/kc3/0.1/f32.facts lib/kc3/0.1/f64.facts lib/kc3/0.1/fact.kc3 lib/kc3/0.1/fact_w.kc3 lib/kc3/0.1/facts.kc3 lib/kc3/0.1/facts/cursor.kc3 lib/kc3/0.1/fd.kc3 lib/kc3/0.1/file.kc3 lib/kc3/0.1/file/stat.kc3 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/http/request.kc3 lib/kc3/0.1/http/response.kc3 lib/kc3/0.1/httpd.kc3 lib/kc3/0.1/integer.facts lib/kc3/0.1/json.kc3 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/s32.facts lib/kc3/0.1/s64.facts lib/kc3/0.1/s8.facts lib/kc3/0.1/set.kc3 lib/kc3/0.1/set/fact.kc3 lib/kc3/0.1/set/item/fact.kc3 lib/kc3/0.1/set/item/tag.kc3 lib/kc3/0.1/set/tag.kc3 lib/kc3/0.1/socket.kc3 lib/kc3/0.1/socket/addr.kc3 lib/kc3/0.1/socket/buf.kc3 lib/kc3/0.1/str.facts lib/kc3/0.1/struct.kc3 lib/kc3/0.1/sw.facts lib/kc3/0.1/sym.facts lib/kc3/0.1/tag.kc3 lib/kc3/0.1/time.kc3 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 '
+KC3_LIB_SOURCES='lib/kc3/0.1/array.kc3 lib/kc3/0.1/bool.facts lib/kc3/0.1/buf.kc3 lib/kc3/0.1/buf_rw.kc3 lib/kc3/0.1/complex.facts lib/kc3/0.1/cow.kc3 lib/kc3/0.1/ekc3.kc3 lib/kc3/0.1/event.kc3 lib/kc3/0.1/f128.facts lib/kc3/0.1/f32.facts lib/kc3/0.1/f64.facts lib/kc3/0.1/fact.kc3 lib/kc3/0.1/fact_w.kc3 lib/kc3/0.1/facts.kc3 lib/kc3/0.1/facts/cursor.kc3 lib/kc3/0.1/fd.kc3 lib/kc3/0.1/file.kc3 lib/kc3/0.1/file/stat.kc3 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/http/request.kc3 lib/kc3/0.1/http/response.kc3 lib/kc3/0.1/httpd.kc3 lib/kc3/0.1/integer.facts lib/kc3/0.1/json.kc3 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/s32.facts lib/kc3/0.1/s64.facts lib/kc3/0.1/s8.facts lib/kc3/0.1/set.kc3 lib/kc3/0.1/set/fact.kc3 lib/kc3/0.1/set/item/fact.kc3 lib/kc3/0.1/set/item/tag.kc3 lib/kc3/0.1/set/tag.kc3 lib/kc3/0.1/socket.kc3 lib/kc3/0.1/socket/addr.kc3 lib/kc3/0.1/socket/buf.kc3 lib/kc3/0.1/str.facts lib/kc3/0.1/struct.kc3 lib/kc3/0.1/sw.facts lib/kc3/0.1/sym.facts lib/kc3/0.1/tag.kc3 lib/kc3/0.1/time.kc3 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 '
KC3_OBJC_SOURCES='window/cairo/quartz/window_cairo_quartz.m window/cairo/quartz/window_cairo_quartz_app_delegate.m window/cairo/quartz/window_cairo_quartz_view.m window/cairo/quartz/window_cairo_quartz_view_controller.m '
KC3_TEST_SOURCES='test/buf_parse_test_su.rb test/facts_test_dump_file.expected.facts test/facts_test_load_file.facts test/facts_test_log_add.expected.facts test/facts_test_log_remove.expected.facts test/facts_test_open_file.1.expected.facts test/facts_test_open_file.1.in.facts test/facts_test_open_file.2.expected.facts test/facts_test_open_file.2.in.facts test/facts_test_open_file.3.expected.facts test/facts_test_open_file.3.in.facts test/facts_test_save.expected.facts test/replace_lines.rb test/test.rb test/test_case_end.rb test/zero '
KC3_TEST_IKC3_SOURCES='test/ikc3/access.kc3 test/ikc3/access.out.expected test/ikc3/access.ret.expected test/ikc3/array.err.expected test/ikc3/array.kc3 test/ikc3/array.out.expected test/ikc3/array.ret.expected test/ikc3/block.kc3 test/ikc3/block.out.expected test/ikc3/block.ret.expected test/ikc3/bool.err.expected test/ikc3/bool.kc3 test/ikc3/bool.out.expected test/ikc3/bool.ret.expected test/ikc3/buf.kc3 test/ikc3/buf.out.expected test/ikc3/buf.ret.expected test/ikc3/buf_rw.kc3 test/ikc3/buf_rw.out.expected test/ikc3/buf_rw.ret.expected test/ikc3/call.err.expected test/ikc3/call.kc3 test/ikc3/call.out.expected test/ikc3/call.ret.expected test/ikc3/cast.kc3 test/ikc3/cast.out.expected test/ikc3/cast.ret.expected test/ikc3/character.err.expected test/ikc3/character.kc3 test/ikc3/character.out.expected test/ikc3/character.ret.expected test/ikc3/comment.err.expected test/ikc3/comment.kc3 test/ikc3/comment.out.expected test/ikc3/comment.ret.expected test/ikc3/complex.kc3 test/ikc3/complex.out.expected test/ikc3/complex.ret.expected test/ikc3/def.kc3 test/ikc3/def.out.expected test/ikc3/def.ret.expected test/ikc3/defmodule.kc3 test/ikc3/defmodule.out.expected test/ikc3/defmodule.ret.expected test/ikc3/defoperator.kc3 test/ikc3/defoperator.out.expected test/ikc3/defoperator.ret.expected test/ikc3/defstruct.kc3 test/ikc3/defstruct.out.expected test/ikc3/defstruct.ret.expected test/ikc3/equal.err.expected test/ikc3/equal.kc3 test/ikc3/equal.out.expected test/ikc3/equal.ret.expected test/ikc3/facts.kc3 test/ikc3/facts.out.expected test/ikc3/facts.ret.expected test/ikc3/facts_with_tags.kc3 test/ikc3/facts_with_tags.out.expected test/ikc3/facts_with_tags.ret.expected test/ikc3/facts_with_tuple.kc3 test/ikc3/facts_with_tuple.out.expected test/ikc3/facts_with_tuple.ret.expected test/ikc3/fn.err.expected test/ikc3/fn.kc3 test/ikc3/fn.out.expected test/ikc3/fn.ret.expected test/ikc3/gl.kc3 test/ikc3/gl.out.expected test/ikc3/gl.ret.expected test/ikc3/globals.kc3 test/ikc3/globals.out.expected test/ikc3/globals.ret.expected test/ikc3/hello.err.expected test/ikc3/hello.kc3 test/ikc3/hello.out.expected test/ikc3/hello.ret.expected test/ikc3/ident.err.expected test/ikc3/ident.kc3 test/ikc3/ident.out.expected test/ikc3/ident.ret.expected test/ikc3/if.kc3 test/ikc3/if.out.expected test/ikc3/if.ret.expected test/ikc3/integer.kc3 test/ikc3/integer.lisp test/ikc3/integer.out.expected test/ikc3/integer.ret.expected test/ikc3/integer_add.kc3 test/ikc3/integer_add.out.expected test/ikc3/integer_add.ret.expected test/ikc3/integer_band.kc3 test/ikc3/integer_band.out.expected test/ikc3/integer_band.ret.expected test/ikc3/integer_bnot.kc3 test/ikc3/integer_bnot.out.expected test/ikc3/integer_bnot.ret.expected test/ikc3/integer_bor-2.kc3 test/ikc3/integer_bor-2.out.expected test/ikc3/integer_bor-2.ret.expected test/ikc3/integer_bxor.kc3 test/ikc3/integer_bxor.out.expected test/ikc3/integer_bxor.ret.expected test/ikc3/integer_div.kc3 test/ikc3/integer_div.out.expected test/ikc3/integer_div.ret.expected test/ikc3/integer_eq.kc3 test/ikc3/integer_eq.out.expected test/ikc3/integer_eq.ret.expected test/ikc3/integer_gt.kc3 test/ikc3/integer_gt.out.expected test/ikc3/integer_gt.ret.expected test/ikc3/integer_lt.kc3 test/ikc3/integer_lt.out.expected test/ikc3/integer_lt.ret.expected test/ikc3/integer_mod-2.kc3 test/ikc3/integer_mod-2.out.expected test/ikc3/integer_mod-2.ret.expected test/ikc3/integer_mul.kc3 test/ikc3/integer_mul.out.expected test/ikc3/integer_mul.ret.expected test/ikc3/integer_neg.kc3 test/ikc3/integer_neg.out.expected test/ikc3/integer_neg.ret.expected test/ikc3/integer_sub.kc3 test/ikc3/integer_sub.out.expected test/ikc3/integer_sub.ret.expected test/ikc3/let.kc3 test/ikc3/let.out.expected test/ikc3/let.ret.expected test/ikc3/list.err.expected test/ikc3/list.kc3 test/ikc3/list.out.expected test/ikc3/list.ret.expected test/ikc3/macro.kc3 test/ikc3/macro.out.expected test/ikc3/macro.ret.expected test/ikc3/map.kc3 test/ikc3/map.out.expected test/ikc3/map.ret.expected test/ikc3/op.err.expected test/ikc3/op.kc3 test/ikc3/op.out.expected test/ikc3/op.ret.expected test/ikc3/plist.err.expected test/ikc3/plist.kc3 test/ikc3/plist.out.expected test/ikc3/plist.ret.expected test/ikc3/puts.kc3 test/ikc3/puts.out.expected test/ikc3/puts.ret.expected test/ikc3/quote.kc3 test/ikc3/quote.out.expected test/ikc3/quote.ret.expected test/ikc3/ratio.kc3 test/ikc3/ratio.out.expected test/ikc3/ratio.ret.expected test/ikc3/str.err.expected test/ikc3/str.kc3 test/ikc3/str.out.expected test/ikc3/str.ret.expected test/ikc3/struct.kc3 test/ikc3/struct.out.expected test/ikc3/struct.ret.expected test/ikc3/sym.err.expected test/ikc3/sym.kc3 test/ikc3/sym.out.expected test/ikc3/sym.ret.expected test/ikc3/tuple.err.expected test/ikc3/tuple.kc3 test/ikc3/tuple.out.expected test/ikc3/tuple.ret.expected test/ikc3/var.kc3 test/ikc3/var.out.expected test/ikc3/var.ret.expected test/ikc3/void.kc3 test/ikc3/void.out.expected test/ikc3/void.ret.expected test/ikc3_test '
diff --git a/test/ikc3/access.kc3 b/test/ikc3/access.kc3
index 4599959..b462d68 100644
--- a/test/ikc3/access.kc3
+++ b/test/ikc3/access.kc3
@@ -36,8 +36,8 @@ quote map["a"]["b"]
map["a"]["b"]
quote map["a"]["b"]["c"]
map["a"]["b"]["c"]
-quote op = %KC3.Operator{}
-op = %KC3.Operator{}
+quote op = %KC3.Operator{symbol_value: void}
+op = %KC3.Operator{symbol_value: void}
quote op.sym
op.sym
quote op[:sym]
diff --git a/test/ikc3/defoperator.kc3 b/test/ikc3/defoperator.kc3
index 62c9192..c3ed84c 100644
--- a/test/ikc3/defoperator.kc3
+++ b/test/ikc3/defoperator.kc3
@@ -1,5 +1,5 @@
-quote %KC3.Operator{}
-%KC3.Operator{}
+quote %KC3.Operator{symbol_value: void}
+%KC3.Operator{symbol_value: void}
quote def operator_muul = %KC3.Operator{sym: :****, symbol_value: cfn Tag "tag_mul" (Tag, Tag, Result), operator_precedence: 11, operator_associativity: :left}
def operator_muul = %KC3.Operator{sym: :****, symbol_value: cfn Tag "tag_mul" (Tag, Tag, Result), operator_precedence: 11, operator_associativity: :left}
quote 4 **** 4
diff --git a/test/ikc3/facts_with_tags.kc3 b/test/ikc3/facts_with_tags.kc3
index 082c42f..7fd66ff 100644
--- a/test/ikc3/facts_with_tags.kc3
+++ b/test/ikc3/facts_with_tags.kc3
@@ -14,8 +14,8 @@ Facts.with_tags(Facts.env_facts(), KC3, :operator, op = ?, fn (fact) {
puts(op)
2
})
-quote op = ?
-op = ?
+quote op = ? ; void
+op = ? ; void
quote Facts.with_tags(Facts.env_facts(), KC3, :operator, op, fn (fact) {
puts(op)
3
diff --git a/test/inspect_test.c b/test/inspect_test.c
index db0026c..a05dc9c 100644
--- a/test/inspect_test.c
+++ b/test/inspect_test.c
@@ -427,9 +427,16 @@ TEST_CASE_END(inspect_str)
TEST_CASE(inspect_struct)
{
- INSPECT_TEST_STRUCT("%KC3.Operator{}", "%KC3.Operator{sym: :+,\n symbol_value: ?,\n operator_precedence: 0,\n operator_associativity: :left}");
- INSPECT_TEST_STRUCT("%KC3.Operator{sym: :-}",
- "%KC3.Operator{sym: :-,\n symbol_value: ?,\n operator_precedence: 0,\n operator_associativity: :left}");
+ INSPECT_TEST_STRUCT("%KC3.Operator{symbol_value: void}",
+ "%KC3.Operator{sym: :+,\n"
+ " symbol_value: void,\n"
+ " operator_precedence: 0,\n"
+ " operator_associativity: :left}");
+ INSPECT_TEST_STRUCT("%KC3.Operator{sym: :-, symbol_value: void}",
+ "%KC3.Operator{sym: :-,\n"
+ " symbol_value: void,\n"
+ " operator_precedence: 0,\n"
+ " operator_associativity: :left}");
}
TEST_CASE_END(inspect_struct)