add string type
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "picrin/gc.h"
|
||||
#include "picrin/irep.h"
|
||||
#include "picrin/proc.h"
|
||||
#include "picrin/string.h"
|
||||
|
||||
#if GC_DEBUG
|
||||
# include <stdio.h>
|
||||
@@ -148,7 +149,15 @@ gc_mark_object(pic_state *pic, struct pic_object *obj)
|
||||
case PIC_TT_PROC: {
|
||||
break;
|
||||
}
|
||||
default:
|
||||
case PIC_TT_PORT: {
|
||||
break;
|
||||
}
|
||||
case PIC_TT_STRING: {
|
||||
}
|
||||
case PIC_TT_NIL:
|
||||
case PIC_TT_BOOL:
|
||||
case PIC_TT_FLOAT:
|
||||
case PIC_TT_UNDEF:
|
||||
pic_abort(pic, "logic flaw");
|
||||
}
|
||||
}
|
||||
@@ -233,16 +242,16 @@ gc_finalize_object(pic_state *pic, struct pic_object *obj)
|
||||
break;
|
||||
}
|
||||
case PIC_TT_PROC: {
|
||||
struct pic_proc *proc;
|
||||
|
||||
proc = (struct pic_proc *)obj;
|
||||
|
||||
/* free irep */
|
||||
pic_free(pic, proc->u.irep->code);
|
||||
pic_free(pic, proc->u.irep);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
case PIC_TT_STRING: {
|
||||
pic_free(pic, (void*)((struct pic_string *)obj)->str);
|
||||
break;
|
||||
}
|
||||
case PIC_TT_NIL:
|
||||
case PIC_TT_BOOL:
|
||||
case PIC_TT_FLOAT:
|
||||
case PIC_TT_UNDEF:
|
||||
pic_abort(pic, "logic flaw");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "picrin.h"
|
||||
#include "picrin/proc.h"
|
||||
#include "picrin/port.h"
|
||||
#include "picrin/string.h"
|
||||
|
||||
static void write_pair(pic_state *pic, struct pic_pair *pair);
|
||||
|
||||
@@ -40,6 +41,9 @@ write(pic_state *pic, pic_value obj)
|
||||
case PIC_TT_PORT:
|
||||
printf("#<port %p>", pic_port_ptr(obj));
|
||||
break;
|
||||
case PIC_TT_STRING:
|
||||
printf("\"%s\"", pic_str_ptr(obj)->str);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "picrin.h"
|
||||
#include "picrin/string.h"
|
||||
|
||||
pic_value
|
||||
pic_str_new_cstr(pic_state *pic, const char *cstr)
|
||||
{
|
||||
struct pic_string *str;
|
||||
size_t len;
|
||||
char *new_str;
|
||||
|
||||
len = strlen(cstr);
|
||||
new_str = (char *)pic_alloc(pic, len + 1);
|
||||
strncpy(new_str, cstr, len + 1);
|
||||
|
||||
str = (struct pic_string *)pic_obj_alloc(pic, sizeof(struct pic_string), PIC_TT_STRING);
|
||||
str->len = len;
|
||||
str->str = new_str;
|
||||
|
||||
return pic_obj_value(str);
|
||||
}
|
||||
Reference in New Issue
Block a user