2023-08-28 20:46:50 -07:00
|
|
|
#ifdef GEN_INTELLISENSE_DIRECTIVES
|
2023-08-21 17:30:13 -07:00
|
|
|
#pragma once
|
2023-08-21 20:02:20 -07:00
|
|
|
#include "inlines.hpp"
|
2023-08-21 20:28:39 -07:00
|
|
|
#include "gen/ast_inlines.hpp"
|
2023-08-28 20:46:50 -07:00
|
|
|
#endif
|
2023-08-21 17:30:13 -07:00
|
|
|
|
2023-07-24 14:45:27 -07:00
|
|
|
#pragma region Constants
|
2023-07-28 18:44:31 -07:00
|
|
|
|
2023-07-24 14:45:27 -07:00
|
|
|
#ifndef GEN_GLOBAL_BUCKET_SIZE
|
2023-10-25 00:26:25 -07:00
|
|
|
# define GEN_GLOBAL_BUCKET_SIZE megabytes(8)
|
2023-07-24 14:45:27 -07:00
|
|
|
#endif
|
|
|
|
#ifndef GEN_CODEPOOL_NUM_BLOCKS
|
2023-08-21 20:49:23 -07:00
|
|
|
# define GEN_CODEPOOL_NUM_BLOCKS kilobytes(16)
|
2023-07-24 14:45:27 -07:00
|
|
|
#endif
|
|
|
|
#ifndef GEN_SIZE_PER_STRING_ARENA
|
|
|
|
# define GEN_SIZE_PER_STRING_ARENA megabytes(1)
|
|
|
|
#endif
|
|
|
|
#ifndef GEN_MAX_COMMENT_LINE_LENGTH
|
|
|
|
# define GEN_MAX_COMMENT_LINE_LENGTH 1024
|
|
|
|
#endif
|
|
|
|
#ifndef GEN_MAX_NAME_LENGTH
|
|
|
|
# define GEN_MAX_NAME_LENGTH 128
|
|
|
|
#endif
|
|
|
|
#ifndef GEN_MAX_UNTYPED_STR_LENGTH
|
2023-07-25 12:12:51 -07:00
|
|
|
# define GEN_MAX_UNTYPED_STR_LENGTH megabytes(1)
|
2023-07-24 14:45:27 -07:00
|
|
|
#endif
|
|
|
|
#ifndef GEN_TOKEN_FMT_TOKEN_MAP_MEM_SIZE
|
2024-12-07 14:17:02 -08:00
|
|
|
# define GEN_TOKEN_FMT_TOKEN_MAP_MEM_SIZE kilobytes(8)
|
2023-07-24 14:45:27 -07:00
|
|
|
#endif
|
|
|
|
#ifndef GEN_LEX_ALLOCATOR_SIZE
|
2023-08-21 20:49:23 -07:00
|
|
|
# define GEN_LEX_ALLOCATOR_SIZE megabytes(4)
|
2023-07-24 14:45:27 -07:00
|
|
|
#endif
|
|
|
|
#ifndef GEN_BUILDER_STR_BUFFER_RESERVE
|
2023-10-25 00:26:25 -07:00
|
|
|
# define GEN_BUILDER_STR_BUFFER_RESERVE megabytes(2)
|
2023-07-24 14:45:27 -07:00
|
|
|
#endif
|
|
|
|
|
|
|
|
// These constexprs are used for allocation behavior of data structures
|
|
|
|
// or string handling while constructing or serializing.
|
|
|
|
// Change them to suit your needs.
|
|
|
|
|
|
|
|
constexpr s32 InitSize_DataArrays = 16;
|
|
|
|
|
|
|
|
// NOTE: This limits the maximum size of an allocation
|
|
|
|
// If you are generating a string larger than this, increase the size of the bucket here.
|
2024-12-07 14:17:02 -08:00
|
|
|
constexpr usize Global_BucketSize = GEN_GLOBAL_BUCKET_SIZE;
|
2023-07-24 14:45:27 -07:00
|
|
|
constexpr s32 CodePool_NumBlocks = GEN_CODEPOOL_NUM_BLOCKS;
|
|
|
|
constexpr s32 SizePer_StringArena = GEN_SIZE_PER_STRING_ARENA;
|
|
|
|
|
|
|
|
constexpr s32 MaxCommentLineLength = GEN_MAX_COMMENT_LINE_LENGTH;
|
|
|
|
constexpr s32 MaxNameLength = GEN_MAX_NAME_LENGTH;
|
|
|
|
constexpr s32 MaxUntypedStrLength = GEN_MAX_UNTYPED_STR_LENGTH;
|
|
|
|
constexpr s32 TokenFmt_TokenMap_MemSize = GEN_TOKEN_FMT_TOKEN_MAP_MEM_SIZE;
|
|
|
|
constexpr s32 LexAllocator_Size = GEN_LEX_ALLOCATOR_SIZE;
|
|
|
|
constexpr s32 Builder_StrBufferReserve = GEN_BUILDER_STR_BUFFER_RESERVE;
|
|
|
|
|
|
|
|
extern Code access_public;
|
|
|
|
extern Code access_protected;
|
|
|
|
extern Code access_private;
|
|
|
|
|
2023-07-29 22:21:04 -07:00
|
|
|
extern CodeAttributes attrib_api_export;
|
|
|
|
extern CodeAttributes attrib_api_import;
|
|
|
|
|
2023-07-24 14:45:27 -07:00
|
|
|
extern Code module_global_fragment;
|
|
|
|
extern Code module_private_fragment;
|
|
|
|
|
2023-08-04 13:12:13 -07:00
|
|
|
extern Code fmt_newline;
|
|
|
|
|
2023-07-29 22:21:04 -07:00
|
|
|
extern CodePragma pragma_once;
|
|
|
|
|
|
|
|
extern CodeParam param_varadic;
|
|
|
|
|
|
|
|
extern CodePreprocessCond preprocess_else;
|
|
|
|
extern CodePreprocessCond preprocess_endif;
|
2023-07-24 14:45:27 -07:00
|
|
|
|
|
|
|
extern CodeSpecifiers spec_const;
|
|
|
|
extern CodeSpecifiers spec_consteval;
|
|
|
|
extern CodeSpecifiers spec_constexpr;
|
|
|
|
extern CodeSpecifiers spec_constinit;
|
|
|
|
extern CodeSpecifiers spec_extern_linkage;
|
|
|
|
extern CodeSpecifiers spec_final;
|
2023-08-21 18:40:23 -07:00
|
|
|
extern CodeSpecifiers spec_forceinline;
|
2023-07-24 14:45:27 -07:00
|
|
|
extern CodeSpecifiers spec_global;
|
|
|
|
extern CodeSpecifiers spec_inline;
|
|
|
|
extern CodeSpecifiers spec_internal_linkage;
|
|
|
|
extern CodeSpecifiers spec_local_persist;
|
|
|
|
extern CodeSpecifiers spec_mutable;
|
2023-08-02 09:39:35 -07:00
|
|
|
extern CodeSpecifiers spec_neverinline;
|
2023-09-11 20:22:53 -07:00
|
|
|
extern CodeSpecifiers spec_noexcept;
|
2023-07-24 14:45:27 -07:00
|
|
|
extern CodeSpecifiers spec_override;
|
|
|
|
extern CodeSpecifiers spec_ptr;
|
2023-08-07 00:10:45 -07:00
|
|
|
extern CodeSpecifiers spec_pure;
|
2023-07-24 14:45:27 -07:00
|
|
|
extern CodeSpecifiers spec_ref;
|
|
|
|
extern CodeSpecifiers spec_register;
|
|
|
|
extern CodeSpecifiers spec_rvalue;
|
|
|
|
extern CodeSpecifiers spec_static_member;
|
|
|
|
extern CodeSpecifiers spec_thread_local;
|
|
|
|
extern CodeSpecifiers spec_virtual;
|
|
|
|
extern CodeSpecifiers spec_volatile;
|
2023-07-28 18:44:31 -07:00
|
|
|
|
2024-12-03 12:19:39 -08:00
|
|
|
extern CodeTypename t_empty; // Used with varaidc parameters. (Exposing just in case its useful for another circumstance)
|
|
|
|
extern CodeTypename t_auto;
|
|
|
|
extern CodeTypename t_void;
|
|
|
|
extern CodeTypename t_int;
|
|
|
|
extern CodeTypename t_bool;
|
|
|
|
extern CodeTypename t_char;
|
|
|
|
extern CodeTypename t_wchar_t;
|
|
|
|
extern CodeTypename t_class;
|
|
|
|
extern CodeTypename t_typename;
|
2023-07-29 22:21:04 -07:00
|
|
|
|
|
|
|
#ifdef GEN_DEFINE_LIBRARY_CODE_CONSTANTS
|
|
|
|
// Predefined typename codes. Are set to readonly and are setup during gen::init()
|
|
|
|
|
2024-12-03 12:19:39 -08:00
|
|
|
extern CodeTypename t_b32;
|
2023-07-29 22:21:04 -07:00
|
|
|
|
2024-12-03 12:19:39 -08:00
|
|
|
extern CodeTypename t_s8;
|
|
|
|
extern CodeTypename t_s16;
|
|
|
|
extern CodeTypename t_s32;
|
|
|
|
extern CodeTypename t_s64;
|
2023-07-29 22:21:04 -07:00
|
|
|
|
2024-12-03 12:19:39 -08:00
|
|
|
extern CodeTypename t_u8;
|
|
|
|
extern CodeTypename t_u16;
|
|
|
|
extern CodeTypename t_u32;
|
|
|
|
extern CodeTypename t_u64;
|
2023-07-29 22:21:04 -07:00
|
|
|
|
2024-12-03 12:19:39 -08:00
|
|
|
extern CodeTypename t_ssize;
|
|
|
|
extern CodeTypename t_usize;
|
2023-07-29 22:21:04 -07:00
|
|
|
|
2024-12-03 12:19:39 -08:00
|
|
|
extern CodeTypename t_f32;
|
|
|
|
extern CodeTypename t_f64;
|
2023-07-29 22:21:04 -07:00
|
|
|
#endif
|
|
|
|
|
2023-07-24 14:45:27 -07:00
|
|
|
#pragma endregion Constants
|
|
|
|
|
2023-11-21 17:09:14 -08:00
|
|
|
// Used by the lexer to persistently treat all these identifiers as preprocessor defines.
|
|
|
|
// Populate with strings via gen::get_cached_string.
|
|
|
|
// Functional defines must have format: id( ;at minimum to indicate that the define is only valid with arguments.
|
2024-12-04 12:00:37 -08:00
|
|
|
extern Array(StringCached) PreprocessorDefines;
|
2023-11-21 17:09:14 -08:00
|
|
|
|
2023-07-24 14:45:27 -07:00
|
|
|
#ifdef GEN_EXPOSE_BACKEND
|
|
|
|
// Global allocator used for data with process lifetime.
|
|
|
|
extern AllocatorInfo GlobalAllocator;
|
2024-12-04 12:00:37 -08:00
|
|
|
extern Array(Arena) Global_AllocatorBuckets;
|
2023-08-03 08:01:43 -07:00
|
|
|
|
2024-12-04 12:00:37 -08:00
|
|
|
extern Array(Pool) CodePools;
|
|
|
|
extern Array(Arena) StringArenas;
|
2023-07-24 14:45:27 -07:00
|
|
|
|
|
|
|
extern StringTable StringCache;
|
|
|
|
|
|
|
|
extern Arena LexArena;
|
|
|
|
|
|
|
|
extern AllocatorInfo Allocator_DataArrays;
|
|
|
|
extern AllocatorInfo Allocator_CodePool;
|
|
|
|
extern AllocatorInfo Allocator_Lexer;
|
|
|
|
extern AllocatorInfo Allocator_StringArena;
|
|
|
|
extern AllocatorInfo Allocator_StringTable;
|
|
|
|
extern AllocatorInfo Allocator_TypeTable;
|
|
|
|
#endif
|