mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Add inline to macro expansion.
This commit is contained in:
@@ -208,17 +208,22 @@ void llvm_emit_debug_parameter(GenContext *c, Decl *parameter, unsigned index)
|
||||
|
||||
}
|
||||
|
||||
LLVMMetadataRef llvm_create_debug_location(GenContext *c, SourceSpan location)
|
||||
{
|
||||
LLVMMetadataRef scope = llvm_debug_current_scope(c);
|
||||
unsigned row = location.row;
|
||||
unsigned col = location.col;
|
||||
return llvm_create_debug_location_with_inline(c, row ? row : 1, col ? col : 1, scope);
|
||||
}
|
||||
|
||||
void llvm_emit_debug_location(GenContext *c, SourceSpan location)
|
||||
{
|
||||
if (llvm_is_global_eval(c)) return;
|
||||
// Avoid re-emitting the same location.
|
||||
LLVMMetadataRef oldloc = LLVMGetCurrentDebugLocation2(c->builder);
|
||||
if (oldloc && c->last_emitted_loc.a == location.a) return;
|
||||
LLVMMetadataRef scope = llvm_debug_current_scope(c);
|
||||
unsigned row = location.row;
|
||||
unsigned col = location.col;
|
||||
LLVMMetadataRef loc = llvm_create_debug_location(c, location);
|
||||
c->last_emitted_loc.a = location.a;
|
||||
LLVMMetadataRef loc = llvm_create_debug_location_with_inline(c, row ? row : 1, col ? col : 1, scope);
|
||||
LLVMSetCurrentDebugLocation2(c->builder, loc);
|
||||
}
|
||||
|
||||
|
||||
@@ -6180,9 +6180,7 @@ static inline void llvm_emit_expr_block(GenContext *c, BEValue *be_value, Expr *
|
||||
SourceSpan span = expr->span;
|
||||
Decl *macro = declptr(expr->expr_block.macro_id);
|
||||
LLVMMetadataRef macro_def = llvm_debug_create_macro(c, macro);
|
||||
LLVMMetadataRef loc = LLVMDIBuilderCreateDebugLocation(c->context, span.row, span.col,
|
||||
llvm_debug_current_scope(c),
|
||||
old_inline_location ? old_inline_location->inline_loc : NULL);
|
||||
LLVMMetadataRef loc = llvm_create_debug_location(c, span);
|
||||
|
||||
updated = (DebugScope) { .lexical_block = macro_def, .inline_loc = loc, .outline_loc = old_inline_location };
|
||||
c->debug.block_stack = &updated;
|
||||
@@ -6314,8 +6312,19 @@ static void llvm_emit_macro_body_expansion(GenContext *c, BEValue *value, Expr *
|
||||
Decl **declarations = body_expr->body_expansion_expr.declarations;
|
||||
Expr **values = body_expr->body_expansion_expr.values;
|
||||
|
||||
DebugScope *old_inline_loc = c->debug.block_stack;
|
||||
c->debug.block_stack = old_inline_loc ? old_inline_loc->outline_loc : NULL;
|
||||
|
||||
|
||||
DebugScope *old_inline_loc = c->debug.block_stack;
|
||||
LLVMMetadataRef debug_location;
|
||||
if (llvm_use_debug(c))
|
||||
{
|
||||
debug_location = llvm_create_debug_location(c, body_expr->span);
|
||||
assert(old_inline_loc && old_inline_loc->outline_loc);
|
||||
DebugScope patched = *old_inline_loc->outline_loc;
|
||||
patched.inline_loc = debug_location;
|
||||
c->debug.block_stack = &patched;
|
||||
}
|
||||
|
||||
// Create backend refs on demand.
|
||||
VECEACH(declarations, i)
|
||||
{
|
||||
|
||||
@@ -555,6 +555,7 @@ DebugScope llvm_debug_create_lexical_scope(GenContext *context, SourceSpan locat
|
||||
LLVMMetadataRef llvm_debug_current_scope(GenContext *context);
|
||||
void llvm_emit_debug_function(GenContext *c, Decl *decl);
|
||||
void llvm_emit_debug_location(GenContext *c, SourceSpan location);
|
||||
LLVMMetadataRef llvm_create_debug_location(GenContext *c, SourceSpan location);
|
||||
void llvm_emit_debug_parameter(GenContext *c, Decl *parameter, unsigned index);
|
||||
void llvm_emit_debug_local_var(GenContext *c, Decl *var);
|
||||
void llvm_emit_debug_global_var(GenContext *c, Decl *global);
|
||||
|
||||
Reference in New Issue
Block a user