mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-07 13:16:34 +02:00
Setting stage to change how strings are stored
This commit is contained in:
parent
b7d13e6899
commit
d027b85a64
1 changed files with 16 additions and 15 deletions
|
@ -189,23 +189,24 @@ typedef struct {gc_header_type hdr; tag_type tag; int len; char *str;} string_ty
|
||||||
//// TODO: new way to allocate strings, but this requires changes to
|
//// TODO: new way to allocate strings, but this requires changes to
|
||||||
//// all functions that allocate strings, the GC, cgen, and maybe more.
|
//// all functions that allocate strings, the GC, cgen, and maybe more.
|
||||||
//// Because these strings are (at least for now) allocaed on the stack.
|
//// Because these strings are (at least for now) allocaed on the stack.
|
||||||
//#define make_string(cs, len, s) string_type cs; \
|
#define make_string(cs, len, s) string_type cs; \
|
||||||
//{ cs.tag = string_tag; cs.len = len; \
|
{ cs.tag = string_tag; cs.len = len; \
|
||||||
// cs.str = alloca(sizeof(char) * (len + 1)); \
|
cs.str = alloca(sizeof(char) * (len + 1)); \
|
||||||
// strcpy(cs.str, s);}
|
strcpy(cs.str, s);}
|
||||||
// TODO: all of the dhalloc below needs to go away...
|
// TODO: all of the dhalloc below needs to go away...
|
||||||
#define make_string(cv,s) string_type cv; cv.tag = string_tag; \
|
//#define make_string(cv,s) string_type cv; cv.tag = string_tag; \
|
||||||
{ int len = strlen(s); cv.str = dhallocp; \
|
//{ int len = strlen(s); cv.str = dhallocp; \
|
||||||
if ((dhallocp + len + 1) >= dhbottom + global_heap_size) { \
|
// if ((dhallocp + len + 1) >= dhbottom + global_heap_size) { \
|
||||||
printf("Fatal error: data heap overflow\n"); exit(1); } \
|
// printf("Fatal error: data heap overflow\n"); exit(1); } \
|
||||||
memcpy(dhallocp, s, len + 1); dhallocp += len + 1; }
|
// memcpy(dhallocp, s, len + 1); dhallocp += len + 1; }
|
||||||
#define make_stringn(cv,s,len) string_type cv; cv.tag = string_tag; \
|
//#define make_stringn(cv,s,len) string_type cv; cv.tag = string_tag; \
|
||||||
{ cv.str = dhallocp; \
|
//{ cv.str = dhallocp; \
|
||||||
if ((dhallocp + len + 1) >= dhbottom + global_heap_size) { \
|
// if ((dhallocp + len + 1) >= dhbottom + global_heap_size) { \
|
||||||
printf("Fatal error: data heap overflow\n"); exit(1); } \
|
// printf("Fatal error: data heap overflow\n"); exit(1); } \
|
||||||
memcpy(dhallocp, s, len); dhallocp += len; \
|
// memcpy(dhallocp, s, len); dhallocp += len; \
|
||||||
*dhallocp = '\0'; dhallocp += 1;}
|
// *dhallocp = '\0'; dhallocp += 1;}
|
||||||
|
|
||||||
|
#define string_len(x) (((string_type *) x)->len)
|
||||||
#define string_str(x) (((string_type *) x)->str)
|
#define string_str(x) (((string_type *) x)->str)
|
||||||
|
|
||||||
/* I/O types */
|
/* I/O types */
|
||||||
|
|
Loading…
Add table
Reference in a new issue