mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-16 06:21:25 -07:00
90 lines
2.2 KiB
C
90 lines
2.2 KiB
C
// Copyright (c) 2024 Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
#pragma once
|
|
|
|
typedef struct LNK_Directive
|
|
{
|
|
struct LNK_Directive *next;
|
|
String8 id;
|
|
String8List value_list;
|
|
} LNK_Directive;
|
|
|
|
typedef struct LNK_DirectiveList
|
|
{
|
|
U64 count;
|
|
LNK_Directive *first;
|
|
LNK_Directive *last;
|
|
} LNK_DirectiveList;
|
|
|
|
typedef struct LNK_ExportParse
|
|
{
|
|
struct LNK_ExportParse *next;
|
|
String8 name;
|
|
String8 alias;
|
|
String8 type;
|
|
} LNK_ExportParse;
|
|
|
|
typedef struct LNK_ExportParseList
|
|
{
|
|
U64 count;
|
|
LNK_ExportParse *first;
|
|
LNK_ExportParse *last;
|
|
} LNK_ExportParseList;
|
|
|
|
typedef struct LNK_MergeDirective
|
|
{
|
|
String8 src;
|
|
String8 dst;
|
|
} LNK_MergeDirective;
|
|
|
|
typedef struct LNK_MergeDirectiveNode
|
|
{
|
|
struct LNK_MergeDirectiveNode *next;
|
|
LNK_MergeDirective data;
|
|
} LNK_MergeDirectiveNode;
|
|
|
|
typedef struct LNK_MergeDirectiveList
|
|
{
|
|
U64 count;
|
|
LNK_MergeDirectiveNode *first;
|
|
LNK_MergeDirectiveNode *last;
|
|
} LNK_MergeDirectiveList;
|
|
|
|
typedef enum
|
|
{
|
|
LNK_Directive_Null,
|
|
LNK_Directive_DefaultLib,
|
|
LNK_Directive_Export,
|
|
LNK_Directive_Include,
|
|
LNK_Directive_ManifestDependency,
|
|
LNK_Directive_Merge,
|
|
LNK_Directive_Section,
|
|
LNK_Directive_AlternateName,
|
|
LNK_Directive_GuardSym,
|
|
LNK_Directive_DisallowLib,
|
|
LNK_Directive_FailIfMismatch,
|
|
LNK_Directive_EditAndContinue,
|
|
LNK_Directive_ThrowingNew,
|
|
LNK_Directive_Count
|
|
} LNK_DirectiveKind;
|
|
|
|
typedef struct LNK_DirectiveInfo
|
|
{
|
|
LNK_DirectiveList v[LNK_Directive_Count];
|
|
} LNK_DirectiveInfo;
|
|
|
|
////////////////////////////////
|
|
|
|
internal void lnk_alt_name_list_concat_in_place(LNK_AltNameList *list, LNK_AltNameList *to_concat);
|
|
|
|
internal LNK_MergeDirectiveNode * lnk_merge_directive_list_push(Arena *arena, LNK_MergeDirectiveList *list, LNK_MergeDirective data);
|
|
|
|
////////////////////////////////
|
|
|
|
internal void lnk_parse_directives(Arena *arena, LNK_DirectiveInfo *directive_info, String8 buffer, String8 obj_path);
|
|
internal String8List lnk_parse_default_lib_directive(Arena *arena, LNK_DirectiveList *dir_list);
|
|
internal B32 lnk_parse_merge_directive(String8 directive, LNK_MergeDirective *out);
|
|
|
|
|