Skip to content

Commit bc0c33c

Browse files
committed
fix(RDRenderer): function declarations
1 parent d900b1c commit bc0c33c

5 files changed

Lines changed: 43 additions & 51 deletions

File tree

src/core/function.c

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -245,46 +245,6 @@ void rd_i_function_rebuild_graph(RDFunction* self,
245245
if(oldgraph) rd_graph_destroy(oldgraph);
246246
}
247247

248-
const char* rd_i_function_to_str(const RDFunction* self, RDContext* ctx) {
249-
RDCharVect* t_buf = &ctx->type_buf;
250-
str_clear(&ctx->tdef_buf);
251-
252-
const RDFunctionType* f_type = &self->type_def->func_;
253-
254-
if(f_type->ret.has_value) {
255-
str_append(&ctx->tdef_buf, rd_i_type_to_str(&f_type->ret.value, t_buf));
256-
str_push(&ctx->tdef_buf, ' ');
257-
}
258-
259-
if(rd_function_is_noret(self)) str_append(&ctx->tdef_buf, "noreturn ");
260-
261-
RDName n; // try to get the name
262-
if(rd_i_get_name(ctx, self->address, false, &n))
263-
str_append(&ctx->tdef_buf, n.value);
264-
else
265-
str_append(&ctx->tdef_buf, self->type_def->name);
266-
267-
if(f_type->args.has_value) {
268-
269-
str_push(&ctx->tdef_buf, '(');
270-
const RDParam* arg;
271-
vect_each(arg, &f_type->args.value) {
272-
assert(arg->name);
273-
if(arg != vect_first(&f_type->args.value))
274-
str_push(&ctx->tdef_buf, ',');
275-
276-
str_append(&ctx->tdef_buf, rd_i_type_to_str(&arg->type, t_buf));
277-
str_push(&ctx->tdef_buf, ' ');
278-
str_append(&ctx->tdef_buf, arg->name);
279-
}
280-
281-
str_push(&ctx->tdef_buf, ')');
282-
}
283-
284-
assert(!vect_is_empty(&ctx->tdef_buf));
285-
return ctx->tdef_buf.data;
286-
}
287-
288248
void rd_i_functionchunk_sort(RDFunctionChunkVect* self) {
289249
vect_sort(self, _rd_functionchunk_cmp_pred);
290250
}

src/core/function.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ void rd_i_function_set_type_def(RDFunction* self, const RDTypeDef* tdef);
4343
void rd_i_function_rebuild(RDFunction* self);
4444
void rd_i_function_rebuild_graph(RDFunction* self, RDFunctionChunkVect* chunks);
4545
usize rd_i_function_get_terminal_count(const RDFunction* self);
46-
const char* rd_i_function_to_str(const RDFunction* self, RDContext* ctx);
4746
RDFunctionChunk* rd_i_function_get_chunk(const RDFunction* self, RDGraphNode n);
4847

4948
void rd_i_functionchunk_sort(RDFunctionChunkVect* self);

src/surface/items.c

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -285,24 +285,55 @@ static void _rd_render_function_item(RDRenderer* r, const RDSegmentFull* seg,
285285
}
286286

287287
_rd_render_modifiers(r, seg, idx, RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
288-
const char* func_str = f ? rd_i_function_to_str(f, r->context) : NULL;
289288

290-
if(func_str) {
291-
rd_renderer_text(r, func_str, RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
292-
return;
289+
if(f) {
290+
const RDFunctionType* f_type = &f->type_def->func_;
291+
292+
if(f_type->ret.has_value) {
293+
rd_renderer_text(r,
294+
rd_i_type_to_str(&f_type->ret.value, &r->type_buf),
295+
RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
296+
rd_renderer_ws(r, 1);
297+
}
298+
299+
if(rd_function_is_noret(f)) {
300+
rd_renderer_text(r, "noreturn ", RD_THEME_FUNCTION,
301+
RD_THEME_BACKGROUND);
302+
}
303+
}
304+
305+
if(!f || (f->type_def->flags & RD_TFLAGS_BUILTIN)) {
306+
rd_renderer_text(r, "function ", RD_THEME_FUNCTION,
307+
RD_THEME_BACKGROUND);
293308
}
294309

295310
RDName n;
296311
bool hasname = rd_i_get_name(r->context, address, true, &n);
297312
assert(hasname);
298-
299-
rd_renderer_text(r, "function ", RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
300313
rd_renderer_text(r, n.value, RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
301-
rd_renderer_text(r, "()", RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
302314

303-
if(f && rd_function_is_noret(f)) {
304-
rd_renderer_text(r, " noreturn", RD_THEME_FUNCTION,
305-
RD_THEME_BACKGROUND);
315+
if(f) {
316+
const RDFunctionType* f_type = &f->type_def->func_;
317+
318+
if(f_type->args.has_value) {
319+
rd_renderer_text(r, "(", RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
320+
321+
const RDParam* arg;
322+
vect_each(arg, &f_type->args.value) {
323+
assert(arg->name);
324+
if(arg != vect_first(&f_type->args.value))
325+
rd_renderer_text(r, ",", RD_THEME_FUNCTION,
326+
RD_THEME_BACKGROUND);
327+
328+
rd_renderer_text(r, rd_i_type_to_str(&arg->type, &r->type_buf),
329+
RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
330+
rd_renderer_ws(r, 1);
331+
rd_renderer_text(r, arg->name, RD_THEME_FUNCTION,
332+
RD_THEME_BACKGROUND);
333+
}
334+
335+
rd_renderer_text(r, ")", RD_THEME_FUNCTION, RD_THEME_BACKGROUND);
336+
}
306337
}
307338
}
308339

src/surface/renderer.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ RDRenderer* rd_i_renderer_create(RDContext* ctx, RDRenderFlags flags) {
8282
void rd_i_renderer_destroy(RDRenderer* self) {
8383
vect_destroy(&self->xrefs);
8484
vect_destroy(&self->comment_buf);
85+
vect_destroy(&self->type_buf);
8586
vect_destroy(&self->text_buf);
8687
vect_destroy(&self->word_buf);
8788
rd_i_rowvect_destroy(&self->rows_back);

src/surface/renderer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ typedef struct RDRenderer {
2020
RDCharVect comment_buf;
2121
RDCharVect word_buf;
2222
RDCharVect text_buf;
23+
RDCharVect type_buf;
2324
RDXRefVect xrefs;
2425
RDInstructionVect instr_buf;
2526
char* hl_word;

0 commit comments

Comments
 (0)