ソースを参照

Add String() factory; instrument memory usage

master
Ian Piumarta 4年前
コミット
6a297558bc
2個のファイルの変更14行の追加0行の削除
  1. +5
    -0
      object.c
  2. +9
    -0
      parse.leg

+ 5
- 0
object.c ファイルの表示

@ -24,8 +24,11 @@ void *memcheck(void *ptr)
return ptr;
}
unsigned long long nalloc= 0;
void *xmalloc(size_t n)
{
nalloc += n;
#if (USE_GC)
void *mem= GC_malloc(n);
assert(mem);
@ -37,6 +40,7 @@ void *xmalloc(size_t n)
void *xrealloc(void *p, size_t n)
{
nalloc += n;
#if (USE_GC)
void *mem= GC_realloc(p, n);
assert(mem);
@ -53,6 +57,7 @@ char *xstrdup(char *s)
char *mem= GC_malloc_atomic(len + 1);
assert(mem);
memcpy(mem, s, len + 1);
nalloc += len;
#else
char *mem= memcheck(strdup(s));
#endif

+ 9
- 0
parse.leg ファイルの表示

@ -1910,6 +1910,12 @@ oop prim_import(oop scope, oop params)
return null;
}
oop prim_String(oop scope, oop params)
{
if (!map_hasIntegerKey(params, 0)) return null;
return makeString(printString(get(params, Map, elements)[0].value));
}
oop prim_scope(oop scope, oop params)
{
return scope;
@ -1943,6 +1949,7 @@ int main(int argc, char **argv)
map_set(globals, intern("clone" ), makeFunction(prim_clone, intern("clone" ), null, null, globals, null));
map_set(globals, intern("import" ), makeFunction(prim_import, intern("import" ), null, null, globals, null));
map_set(globals, intern("microseconds"), makeFunction(prim_microseconds, intern("microseconds"), null, null, globals, null));
map_set(globals, intern("String" ), makeFunction(prim_String , intern("String" ), null, null, globals, null));
map_set(globals, intern("scope"), makeFunction(prim_scope, intern("scope"), null, null, globals, null));
@ -1981,6 +1988,8 @@ int main(int argc, char **argv)
readEvalPrint(globals, NULL);
}
printf("[GC: %lli bytes allocated]\n", nalloc);
return 0;
(void)yyAccept;

読み込み中…
キャンセル
保存