1 #include "Cello/Bool.h"
2 
3 #include "Cello/Prelude.h"
4 #include "Cello/Type.h"
5 
6 #include <string.h>
7 
bool_var(bool x)8 var bool_var(bool x) {
9   return (var)(intptr_t)(x);
10 }
11 
12 var Bool = type_data {
13   type_begin(Bool),
14   type_entry(Bool, Eq),
15   type_entry(Bool, Ord),
16   type_entry(Bool, Hash),
17   type_entry(Bool, AsChar),
18   type_entry(Bool, AsLong),
19   type_entry(Bool, AsDouble),
20   type_entry(Bool, AsStr),
21   type_entry(Bool, Show),
22   type_end(Bool)
23 };
24 
Bool_Eq(var self,var obj)25 var Bool_Eq(var self, var obj) {
26   return bool_var(self == obj);
27 }
28 
Bool_Gt(var self,var obj)29 var Bool_Gt(var self, var obj) {
30   return bool_var(self > obj);
31 }
32 
Bool_Lt(var self,var obj)33 var Bool_Lt(var self, var obj) {
34   return bool_var(self < obj);
35 }
36 
Bool_Hash(var self)37 long Bool_Hash(var self) {
38   return (long)(intptr_t)self;
39 }
40 
Bool_AsChar(var self)41 char Bool_AsChar(var self) {
42   return (char)(self is True);
43 }
44 
45 local const char* true_str = "True";
46 local const char* false_str = "False";
47 
Bool_AsStr(var self)48 const char* Bool_AsStr(var self) {
49   if (self) {
50     return true_str;
51   } else {
52     return false_str;
53   }
54 }
55 
Bool_AsLong(var self)56 long Bool_AsLong(var self) {
57   return (long)(intptr_t)self;
58 }
59 
Bool_AsDouble(var self)60 double Bool_AsDouble(var self) {
61   return (double)(self is True);
62 }
63 
Bool_Show(var self,var output,int pos)64 int Bool_Show(var self, var output, int pos) {
65   if (self) { pos = print_to(output, pos, true_str); }
66   else { pos = print_to(output, pos, false_str); }
67   return pos;
68 }
69 
70