Fix up CString:as_text()

This commit is contained in:
Bruce Hill 2024-09-12 03:41:44 -04:00
parent 4d4e3b2a9d
commit fb6dc0a8b9
4 changed files with 17 additions and 11 deletions

View File

@ -13,14 +13,19 @@
#include "types.h" #include "types.h"
#include "util.h" #include "util.h"
public Text_t CString$as_text(const void *c_string, bool colorize, const TypeInfo *info) public Text_t CString$as_text(const char **c_string, bool colorize, const TypeInfo *info)
{ {
(void)info; (void)info;
if (!c_string) return Text("CString"); if (!c_string) return Text("CString");
Text_t text = Text$from_str(*(char**)c_string); Text_t text = Text$from_str(*c_string);
return Text$concat(colorize ? Text("\x1b[34mCString\x1b[m(") : Text("CString("), Text$quoted(text, colorize), Text(")")); return Text$concat(colorize ? Text("\x1b[34mCString\x1b[m(") : Text("CString("), Text$quoted(text, colorize), Text(")"));
} }
public Text_t CString$as_text_simple(const char *str)
{
return Text$format("%s", str);
}
PUREFUNC public int32_t CString$compare(const char **x, const char **y) PUREFUNC public int32_t CString$compare(const char **x, const char **y)
{ {
if (x == y) if (x == y)

View File

@ -8,7 +8,8 @@
#include "types.h" #include "types.h"
Text_t CString$as_text(const void *str, bool colorize, const TypeInfo *info); Text_t CString$as_text(char **str, bool colorize, const TypeInfo *info);
Text_t CString$as_text_simple(const char *str);
PUREFUNC int CString$compare(const char **x, const char **y); PUREFUNC int CString$compare(const char **x, const char **y);
PUREFUNC bool CString$equal(const char **x, const char **y); PUREFUNC bool CString$equal(const char **x, const char **y);
PUREFUNC uint64_t CString$hash(const char **str); PUREFUNC uint64_t CString$hash(const char **str);

View File

@ -246,7 +246,7 @@ env_t *new_compilation_unit(CORD *libname)
F2(atan2), F2(copysign), F2(fdim), F2(hypot), F2(nextafter), F2(pow), F2(remainder), F2(atan2), F2(copysign), F2(fdim), F2(hypot), F2(nextafter), F2(pow), F2(remainder),
)}, )},
{"CString", Type(CStringType), "char*", "CString$info", TypedArray(ns_entry_t, {"CString", Type(CStringType), "char*", "CString$info", TypedArray(ns_entry_t,
{"as_text", "CORD_from_char_star", "func(str:CString)->Text"}, {"as_text", "CString$as_text_simple", "func(str:CString)->Text"},
)}, )},
#undef F2 #undef F2
#undef F #undef F
@ -570,6 +570,7 @@ binding_t *get_namespace_binding(env_t *env, ast_t *self, const char *name)
switch (cls_type->tag) { switch (cls_type->tag) {
case ArrayType: return NULL; case ArrayType: return NULL;
case TableType: return NULL; case TableType: return NULL;
case CStringType:
case BoolType: case IntType: case BigIntType: case NumType: { case BoolType: case IntType: case BigIntType: case NumType: {
binding_t *b = get_binding(env, CORD_to_const_char_star(type_to_cord(cls_type))); binding_t *b = get_binding(env, CORD_to_const_char_star(type_to_cord(cls_type)));
assert(b); assert(b);

View File

@ -6,17 +6,16 @@ timestamp_format := CString("%F %T")
logfiles := {:Path} logfiles := {:Path}
func _timestamp()->Text: func _timestamp()->Text:
return inline C ( c_str := inline C (
({ ({
char *str = GC_MALLOC_ATOMIC(20); char *str = GC_MALLOC_ATOMIC(20);
time_t t; time_t t; time(&t);
time(&t); struct tm *tm_info = localtime(&t);
struct tm *tm_info;
tm_info = localtime(&t);
strftime(str, 20, "%F %T", tm_info); strftime(str, 20, "%F %T", tm_info);
Text$format("%s", str); str;
}) })
) : Text ) : CString
return c_str:as_text()
func info(text:Text, newline=yes): func info(text:Text, newline=yes):
say("$\[2]⚫ $text$\[]", newline) say("$\[2]⚫ $text$\[]", newline)