Setting stage to change how strings are stored

This commit is contained in:
Justin Ethier 2015-10-10 02:22:14 -04:00
parent b7d13e6899
commit d027b85a64

View file

@ -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 */