mirror of
https://github.com/carp-lang/Carp.git
synced 2024-11-04 01:25:04 +03:00
Fix Char_str().
This commit is contained in:
parent
0fb9f9a56e
commit
83e8c1a874
@ -23,7 +23,7 @@ void String_string_MINUS_set_BANG_(String *s, int i, char ch) {
|
|||||||
void String_string_MINUS_set_MINUS_at_BANG_(String *into, int i,
|
void String_string_MINUS_set_MINUS_at_BANG_(String *into, int i,
|
||||||
const String *src) {
|
const String *src) {
|
||||||
char *dest = (*into) + i;
|
char *dest = (*into) + i;
|
||||||
int lsrc = strlen(*src);
|
size_t lsrc = strlen(*src);
|
||||||
/* given a string and indices
|
/* given a string and indices
|
||||||
*
|
*
|
||||||
* 0 1 2 3 4 5 6 7 8 9
|
* 0 1 2 3 4 5 6 7 8 9
|
||||||
@ -166,9 +166,13 @@ String Bool_format(const String *str, bool b) {
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
String Char_str(char c) {
|
String Char_str(int c) {
|
||||||
String buffer = CARP_MALLOC(2);
|
char buf[16];
|
||||||
sprintf(buffer, "%c", c);
|
int sz = snprintf(buf, sizeof(buf), "%lc", c);
|
||||||
|
size_t nsz = sz + 1;
|
||||||
|
String buffer = CARP_MALLOC(nsz);
|
||||||
|
assert(sz > 0);
|
||||||
|
memcpy(buffer, buf, nsz);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ typedef SSIZE_T ssize_t;
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
typedef char *String;
|
typedef char *String;
|
||||||
typedef char *Pattern;
|
typedef char *Pattern;
|
||||||
|
@ -110,7 +110,7 @@ toC toCMode (Binder meta root) = emitterSrc (execState (visit startingIndent roo
|
|||||||
'\t' -> "'\\t'"
|
'\t' -> "'\\t'"
|
||||||
'\n' -> "'\\n'"
|
'\n' -> "'\\n'"
|
||||||
'\\' -> "'\\\\'"
|
'\\' -> "'\\\\'"
|
||||||
x -> ['\'', x, '\'']
|
x -> ['U', '\'', x, '\'']
|
||||||
Closure elem _ -> visit indent elem
|
Closure elem _ -> visit indent elem
|
||||||
Sym _ _ -> visitSymbol indent xobj
|
Sym _ _ -> visitSymbol indent xobj
|
||||||
(Defn _) -> error (show (DontVisitObj xobj))
|
(Defn _) -> error (show (DontVisitObj xobj))
|
||||||
@ -915,7 +915,9 @@ wrapInInitFunction :: Bool -> String -> String
|
|||||||
wrapInInitFunction with_core src =
|
wrapInInitFunction with_core src =
|
||||||
"void carp_init_globals(int argc, char** argv) {\n" ++
|
"void carp_init_globals(int argc, char** argv) {\n" ++
|
||||||
(if with_core
|
(if with_core
|
||||||
then " System_args.len = argc;\n System_args.data = argv;\n"
|
then
|
||||||
|
" System_args.len = argc;\n System_args.data = argv;\n" ++
|
||||||
|
" setlocale(LC_CTYPE, \"\");\n"
|
||||||
else "")
|
else "")
|
||||||
++ src ++
|
++ src ++
|
||||||
"}"
|
"}"
|
||||||
|
@ -4,6 +4,18 @@
|
|||||||
(use Test)
|
(use Test)
|
||||||
|
|
||||||
(deftest test
|
(deftest test
|
||||||
|
(assert-equal test
|
||||||
|
"a"
|
||||||
|
&(str \a)
|
||||||
|
"str works with ASCII")
|
||||||
|
(assert-equal test
|
||||||
|
"ñ"
|
||||||
|
&(str \ñ)
|
||||||
|
"str works with Latin1")
|
||||||
|
(assert-equal test
|
||||||
|
"😲"
|
||||||
|
&(str \😲)
|
||||||
|
"str works with Emoji")
|
||||||
(assert-true test
|
(assert-true test
|
||||||
(= \a \a)
|
(= \a \a)
|
||||||
"char = works as expected I")
|
"char = works as expected I")
|
||||||
|
Loading…
Reference in New Issue
Block a user