mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-15 23:54:07 +00:00
Clean up handle_link_name handling of link_suffix
This commit is contained in:
@@ -725,23 +725,42 @@ gb_internal Entity *init_entity_foreign_library(CheckerContext *ctx, Entity *e)
|
||||
}
|
||||
|
||||
gb_internal String handle_link_name(CheckerContext *ctx, Token token, String link_name, String link_prefix, String link_suffix) {
|
||||
String original_link_name = link_name;
|
||||
if (link_prefix.len > 0) {
|
||||
if (link_name.len > 0) {
|
||||
if (original_link_name.len > 0) {
|
||||
error(token, "'link_name' and 'link_prefix' cannot be used together");
|
||||
} else {
|
||||
isize len = link_prefix.len + token.string.len + link_suffix.len;
|
||||
isize len = link_prefix.len + token.string.len;
|
||||
u8 *name = gb_alloc_array(permanent_allocator(), u8, len+1);
|
||||
gb_memmove(name, &link_prefix[0], link_prefix.len);
|
||||
gb_memmove(name+link_prefix.len, &token.string[0], token.string.len);
|
||||
gb_memmove(name+link_prefix.len+token.string.len, link_suffix.text, link_suffix.len);
|
||||
name[len] = 0;
|
||||
|
||||
link_name = make_string(name, len);
|
||||
}
|
||||
}
|
||||
|
||||
if (link_suffix.len > 0) {
|
||||
if (original_link_name.len > 0) {
|
||||
error(token, "'link_name' and 'link_suffix' cannot be used together");
|
||||
} else {
|
||||
String new_name = token.string;
|
||||
if (link_name != original_link_name) {
|
||||
new_name = link_name;
|
||||
}
|
||||
|
||||
isize len = new_name.len + link_suffix.len;
|
||||
u8 *name = gb_alloc_array(permanent_allocator(), u8, len+1);
|
||||
gb_memmove(name, &new_name[0], new_name.len);
|
||||
gb_memmove(name+new_name.len, &link_suffix[0], link_suffix.len);
|
||||
name[len] = 0;
|
||||
link_name = make_string(name, len);
|
||||
}
|
||||
}
|
||||
return link_name;
|
||||
}
|
||||
|
||||
|
||||
gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeContext const &ac) {
|
||||
if (!(ac.objc_name.len || ac.objc_is_class_method || ac.objc_type)) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user