Skip to content

Commit 7262599

Browse files
committed
Unification
Fix: - mrc_malloc - mrc_realloc - mrc_calloc - mrc_free - mrc_gc_arena_save - mrc_gc_arena_restore
1 parent ec59271 commit 7262599

13 files changed

+184
-176
lines changed

include/mrc_ccontext.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,22 @@ typedef struct mrc_ccontext {
6464
#endif
6565
} mrc_ccontext; /* compiler context */
6666

67+
#ifdef MRC_TARGET_MRUBY
68+
static inline int mrc_gc_arena_save(mrc_ccontext *c)
69+
{
70+
if (!c->mrb) return 0;
71+
return mrb_gc_arena_save(c->mrb);
72+
}
73+
static inline void mrc_gc_arena_restore(mrc_ccontext *c, int ai)
74+
{
75+
if (!c->mrb) return;
76+
mrb_gc_arena_restore(c->mrb, ai);
77+
}
78+
#else
79+
# define mrc_gc_arena_save(c) 0;(void)ai
80+
# define mrc_gc_arena_restore(c,ai)
81+
#endif
82+
6783
mrc_ccontext *mrc_ccontext_new(mrb_state *mrb);
6884
void mrc_ccontext_cleanup_local_variables(mrc_ccontext *c);
6985
const char *mrc_ccontext_filename(mrc_ccontext *c, const char *s);

include/mrc_common.h

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,8 @@
88

99
#ifdef MRC_TARGET_MRUBY
1010
# include <mruby.h>
11-
static inline int mrc_gc_arena_save(mrb_state *mrb)
12-
{
13-
if (!mrb) return 0;
14-
return mrb_gc_arena_save(mrb);
15-
}
16-
static inline void mrc_gc_arena_restore(mrb_state *mrb, int ai)
17-
{
18-
if (!mrb) return;
19-
mrb_gc_arena_restore(mrb, ai);
20-
}
2111
#else
2212
# define mrb_state void
23-
# define mrc_gc_arena_save(mrb) 0;(void)ai
24-
# define mrc_gc_arena_restore(mrb,ai)
2513
#endif
2614

2715
#define MRC_RELEASE_YEAR 2024
@@ -35,10 +23,10 @@ static inline void mrc_gc_arena_restore(mrb_state *mrb, int ai)
3523
#include <prism_xallocator.h>
3624
#else
3725
#include <stdlib.h>
38-
#define mrc_malloc malloc
39-
#define mrc_realloc realloc
40-
#define mrc_calloc calloc
41-
#define mrc_free free
26+
#define mrc_malloc(c, size) malloc(size)
27+
#define mrc_realloc(c, ptr, size) realloc(ptr, size)
28+
#define mrc_calloc(c, nmemb, size) calloc(nmemb, size)
29+
#define mrc_free(c, ptr) free(ptr)
4230
#endif
4331

4432
#ifdef MRB_USE_CXX_ABI

src/ccontext.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
MRC_API mrc_ccontext *
77
mrc_ccontext_new(mrb_state *mrb)
88
{
9-
mrc_ccontext *c = (mrc_ccontext*)mrc_calloc(1, sizeof(mrc_ccontext));
10-
c->p = (mrc_parser_state *)mrc_malloc(sizeof(mrc_parser_state));
9+
mrc_ccontext temp_c = {0};
10+
temp_c.mrb = mrb;
11+
mrc_ccontext *c = (mrc_ccontext*)mrc_calloc(&temp_c, 1, sizeof(mrc_ccontext));
12+
c->p = (mrc_parser_state *)mrc_malloc(c, sizeof(mrc_parser_state));
1113
c->options = NULL;
1214
c->mrb = mrb;
1315
return c;
@@ -18,7 +20,7 @@ MRC_API void
1820
mrc_ccontext_cleanup_local_variables(mrc_ccontext *c)
1921
{
2022
if (c->syms) {
21-
mrc_free(c->syms);
23+
mrc_free(c, c->syms);
2224
c->syms = NULL;
2325
c->slen = 0;
2426
}
@@ -30,12 +32,12 @@ mrc_ccontext_filename(mrc_ccontext *c, const char *s)
3032
{
3133
if (s) {
3234
size_t len = strlen(s);
33-
char *p = (char*)mrc_malloc(len + 1);
35+
char *p = (char*)mrc_malloc(c, len + 1);
3436

3537
if (p == NULL) return NULL;
3638
memcpy(p, s, len + 1);
3739
if (c->filename) {
38-
mrc_free(c->filename);
40+
mrc_free(c, c->filename);
3941
}
4042
c->filename = p;
4143
}
@@ -44,14 +46,14 @@ mrc_ccontext_filename(mrc_ccontext *c, const char *s)
4446

4547
MRC_API void mrc_ccontext_free(mrc_ccontext *c)
4648
{
47-
mrc_free(c->filename_table);
48-
mrc_free(c->filename);
49-
mrc_free(c->syms);
49+
mrc_free(c, c->filename_table);
50+
mrc_free(c, c->filename);
51+
mrc_free(c, c->syms);
5052
pm_parser_free(c->p);
5153
mrc_diagnostic_list_free(c);
5254
if (c->p->lex_callback) {
53-
mrc_free(c->p->lex_callback);
55+
mrc_free(c, c->p->lex_callback);
5456
}
55-
mrc_free(c->p);
56-
mrc_free(c);
57+
mrc_free(c, c->p);
58+
mrc_free(c, c);
5759
}

src/cdump.c

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ typedef struct mrc_string {
3232
static mrc_string*
3333
mrc_str_new_capa(mrc_ccontext *c, size_t capa)
3434
{
35-
mrc_string *s = (mrc_string *)mrc_malloc(sizeof(mrc_string));
35+
mrc_string *s = (mrc_string *)mrc_malloc(c, sizeof(mrc_string));
3636
if (s) {
37-
s->ptr = (char *)mrc_calloc(1, capa);
37+
s->ptr = (char *)mrc_calloc(c, 1, capa);
3838
if (s->ptr) {
3939
s->len = 0;
4040
s->capa = capa;
4141
return s;
4242
}
43-
mrc_free(s);
43+
mrc_free(c, s);
4444
}
4545
return NULL;
4646
}
@@ -64,42 +64,42 @@ mrc_str_new_cstr(mrc_ccontext *c, const char *cstr)
6464
}
6565

6666
static void
67-
mrc_str_cat_lit(mrc_string *s, const char *lit)
67+
mrc_str_cat_lit(mrc_ccontext *c, mrc_string *s, const char *lit)
6868
{
6969
size_t len = strlen(lit);
7070
if (s->len+len+1 > s->capa) {
7171
s->capa = s->len+len+1;
72-
s->ptr = (char *)mrc_realloc(s->ptr, s->capa);
72+
s->ptr = (char *)mrc_realloc(c, s->ptr, s->capa);
7373
}
7474
memcpy(s->ptr+s->len, lit, len);
7575
s->len += len;
7676
s->ptr[s->len] = '\0';
7777
}
7878

7979
static void
80-
mrc_str_cat_cstr(mrc_string *s, const char *cstr)
80+
mrc_str_cat_cstr(mrc_ccontext *c, mrc_string *s, const char *cstr)
8181
{
8282
if (!cstr) return;
83-
mrc_str_cat_lit(s, cstr);
83+
mrc_str_cat_lit(c, s, cstr);
8484
}
8585

8686
static void
87-
mrc_str_cat_str(mrc_string *s, mrc_string *s2)
87+
mrc_str_cat_str(mrc_ccontext *c, mrc_string *s, mrc_string *s2)
8888
{
8989
if (s->len+s2->len+1 > s->capa) {
9090
s->capa = s->len+s2->len+1;
91-
s->ptr = (char *)mrc_realloc(s->ptr, s->capa);
91+
s->ptr = (char *)mrc_realloc(c, s->ptr, s->capa);
9292
}
9393
memcpy(s->ptr+s->len, s2->ptr, s2->len);
9494
s->len += s2->len;
9595
s->ptr[s->len] = '\0';
9696
}
9797

9898
static void
99-
mrc_str_free(mrc_string *s)
99+
mrc_str_free(mrc_ccontext *c, mrc_string *s)
100100
{
101-
mrc_free(s->ptr);
102-
mrc_free(s);
101+
mrc_free(c, s->ptr);
102+
mrc_free(c, s);
103103
}
104104

105105
static mrc_string*
@@ -108,11 +108,11 @@ mrc_str_escape(mrc_ccontext *c, mrc_string *s)
108108
mrc_string *s2 = mrc_str_new_capa(c, s->len*2+1);
109109
if (s2) {
110110
for (size_t i=0; i<s->len; i++) {
111-
char c = s->ptr[i];
112-
if (c == '"' || c == '\\') {
113-
mrc_str_cat_lit(s2, "\\");
111+
char ch = s->ptr[i];
112+
if (ch == '"' || ch == '\\') {
113+
mrc_str_cat_lit(c, s2, "\\");
114114
}
115-
mrc_str_cat_lit(s2, &c);
115+
mrc_str_cat_lit(c, s2, &ch);
116116
}
117117
}
118118
return s2;
@@ -276,11 +276,11 @@ sym_var_name_str(mrc_ccontext *c, const char *initname, const char *key, int n)
276276
{
277277
char buf[32];
278278
mrc_string *s = mrc_str_new_cstr(c, initname);
279-
mrc_str_cat_lit(s, "_");
280-
mrc_str_cat_cstr(s, key);
281-
mrc_str_cat_lit(s, "_");
279+
mrc_str_cat_lit(c, s, "_");
280+
mrc_str_cat_cstr(c, s, key);
281+
mrc_str_cat_lit(c, s, "_");
282282
snprintf(buf, sizeof(buf), "%d", n);
283-
mrc_str_cat_cstr(s, buf);
283+
mrc_str_cat_cstr(c, s, buf);
284284
return s;
285285
}
286286

@@ -299,7 +299,7 @@ cdump_sym(mrc_ccontext *c, mrc_sym sym, const char *var_name, int idx, mrc_strin
299299
mrc_int len = constant->length;
300300

301301
if (*name == '\0') {
302-
mrc_str_free(name_obj);
302+
mrc_str_free(c, name_obj);
303303
return MRC_DUMP_INVALID_ARGUMENT;
304304
}
305305
if (sym_name_word_p(name, len)) {
@@ -326,39 +326,39 @@ cdump_sym(mrc_ccontext *c, mrc_sym sym, const char *var_name, int idx, mrc_strin
326326
else {
327327
char buf[32];
328328
mrc_string *name_obj = mrc_str_new(c, name, len);
329-
mrc_str_cat_lit(init_syms_code, " ");
330-
mrc_str_cat_cstr(init_syms_code, var_name);
329+
mrc_str_cat_lit(c, init_syms_code, " ");
330+
mrc_str_cat_cstr(c, init_syms_code, var_name);
331331
snprintf(buf, sizeof(buf), "[%d] = ", idx);
332-
mrc_str_cat_cstr(init_syms_code, buf);
333-
mrc_str_cat_lit(init_syms_code, "mrb_intern_lit(mrb, ");
332+
mrc_str_cat_cstr(c, init_syms_code, buf);
333+
mrc_str_cat_lit(c, init_syms_code, "mrb_intern_lit(mrb, ");
334334
mrc_string *escaped = mrc_str_escape(c, name_obj);
335-
mrc_str_free(name_obj);
336-
mrc_str_cat_str(init_syms_code, escaped);
337-
mrc_str_free(escaped);
338-
mrc_str_cat_lit(init_syms_code, ");\n");
335+
mrc_str_free(c, name_obj);
336+
mrc_str_cat_str(c, init_syms_code, escaped);
337+
mrc_str_free(c, escaped);
338+
mrc_str_cat_lit(c, init_syms_code, ");\n");
339339
fputs("0", fp);
340340
}
341341
fputs(", ", fp);
342-
mrc_str_free(name_obj);
342+
mrc_str_free(c, name_obj);
343343
return MRC_DUMP_OK;
344344
}
345345

346346
static int
347347
cdump_syms(mrc_ccontext *c, const char *name, const char *key, int n, int syms_len, const mrc_sym *syms, mrc_string *init_syms_code, FILE *fp)
348348
{
349-
int ai = mrc_gc_arena_save(c->mrb);
349+
int ai = mrc_gc_arena_save(c);
350350
mrc_int code_len = MRC_STRING_LEN(init_syms_code);
351351
mrc_string *var_name = sym_var_name_str(c, name, key, n);
352352

353353
fprintf(fp, "mrb_DEFINE_SYMS_VAR(%s, %d, (", MRC_STRING_PTR(var_name), syms_len);
354354
for (int i=0; i<syms_len; i++) {
355355
cdump_sym(c, syms[i], MRC_STRING_PTR(var_name), i, init_syms_code, fp);
356356
}
357-
mrc_str_free(var_name);
357+
mrc_str_free(c, var_name);
358358
fputs("), ", fp);
359359
if (code_len == MRC_STRING_LEN(init_syms_code)) fputs("const", fp);
360360
fputs(");\n", fp);
361-
mrc_gc_arena_restore(c->mrb, ai);
361+
mrc_gc_arena_restore(c, ai);
362362
return MRC_DUMP_OK;
363363
}
364364

@@ -380,7 +380,7 @@ static int
380380
cdump_debug(mrc_ccontext *c, const char *name, int n, mrc_irep_debug_info *info,
381381
mrc_string *init_syms_code, FILE *fp)
382382
{
383-
int ai = mrc_gc_arena_save(c->mrb);
383+
int ai = mrc_gc_arena_save(c);
384384
char buffer[256];
385385
const char *line_type = "mrb_debug_line_ary";
386386

@@ -392,13 +392,13 @@ cdump_debug(mrc_ccontext *c, const char *name, int n, mrc_irep_debug_info *info,
392392
const pm_constant_t *fn_constant = pm_constant_pool_id_to_constant(&c->p->constant_pool, info->files[0]->filename_sym);
393393
const char *filename = (const char *)fn_constant->start;
394394
snprintf(buffer, sizeof(buffer), " %s_debug_file_%d.filename_sym = mrb_intern_lit(mrb,", name, n);
395-
mrc_str_cat_cstr(init_syms_code, buffer);
395+
mrc_str_cat_cstr(c, init_syms_code, buffer);
396396
mrc_string *filename_str = mrc_str_new_cstr(c, filename);
397397
mrc_string *escaped = mrc_str_escape(c, filename_str);
398-
mrc_str_free(filename_str);
399-
mrc_str_cat_str(init_syms_code, escaped);
400-
mrc_str_free(escaped);
401-
mrc_str_cat_cstr(init_syms_code, ");\n");
398+
mrc_str_free(c, filename_str);
399+
mrc_str_cat_str(c, init_syms_code, escaped);
400+
mrc_str_free(c, escaped);
401+
mrc_str_cat_cstr(c, init_syms_code, ");\n");
402402

403403
switch (info->files[0]->line_type) {
404404
case mrc_debug_line_ary:
@@ -442,7 +442,7 @@ cdump_debug(mrc_ccontext *c, const char *name, int n, mrc_irep_debug_info *info,
442442
fprintf(fp, "static mrb_irep_debug_info %s_debug_%d = {\n", name, n);
443443
fprintf(fp, "%d, %d, &%s_debug_file_%d_};\n", info->pc_count, info->flen, name, n);
444444

445-
mrc_gc_arena_restore(c->mrb, ai);
445+
mrc_gc_arena_restore(c, ai);
446446
return MRC_DUMP_OK;
447447
}
448448

@@ -575,7 +575,7 @@ mrc_dump_irep_cstruct(mrc_ccontext *c, const mrc_irep *irep, uint8_t flags, FILE
575575
fputs("{\n", fp);
576576
fputs(MRC_STRING_PTR(init_syms_code), fp);
577577
fputs("}\n", fp);
578-
mrc_str_free(init_syms_code);
578+
mrc_str_free(c, init_syms_code);
579579
return MRC_DUMP_OK;
580580
}
581581
#endif /* MRC_NO_STDIO */

src/codedump.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ codedump(mrc_ccontext *c, const mrc_irep *irep, FILE *out)
180180
uint16_t b;
181181
uint16_t cc;
182182

183-
int ai = mrc_gc_arena_save(c->mrb);
183+
int ai = mrc_gc_arena_save(c);
184184

185185
i = pc - irep->iseq;
186186
next_file = mrc_debug_get_filename(c, irep, (uint32_t)i);
@@ -642,7 +642,7 @@ codedump(mrc_ccontext *c, const mrc_irep *irep, FILE *out)
642642
fprintf(out, "unknown_op (0x%x)\n", ins);
643643
break;
644644
}
645-
mrc_gc_arena_restore(c->mrb, ai);
645+
mrc_gc_arena_restore(c, ai);
646646
}
647647
fprintf(out, "\n");
648648
}

0 commit comments

Comments
 (0)