now running cpp lexer types through meta compiler
							parent
							
								
									a132a697b1
								
							
						
					
					
						commit
						82e836e381
					
				
							
								
								
									
										147
									
								
								4coder_API.html
								
								
								
								
							
							
						
						
									
										147
									
								
								4coder_API.html
								
								
								
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -1916,7 +1916,7 @@ CUSTOM_COMMAND_SIG(query_replace){ | |||
|     int32_t pos, new_pos; | ||||
|      | ||||
|     bar.prompt = make_lit_string("Replace? (y)es, (n)ext, (esc)\n"); | ||||
|     bar.string = string_zero(); | ||||
|     bar.string = null_string; | ||||
|      | ||||
|     app->start_query_bar(app, &bar, 0); | ||||
|      | ||||
|  |  | |||
|  | @ -4,12 +4,14 @@ | |||
| #ifndef FCPP_LEXER_TYPES_INC | ||||
| #define FCPP_LEXER_TYPES_INC | ||||
| 
 | ||||
| #if 0 | ||||
| #ifndef ENUM | ||||
| #define ENUM(type,name) typedef type name; enum name##_ | ||||
| #endif | ||||
| 
 | ||||
| /* DOC(A Cpp_Token_Type classifies a token to make parsing easier. Some types are not
 | ||||
| actually output by the lexer, but exist because parsers will also make use of token | ||||
| types in their own output.) */ | ||||
| ENUM(int32_t, Cpp_Token_Type){ | ||||
| ENUM(uint32_t, Cpp_Token_Type){ | ||||
| 	CPP_TOKEN_JUNK, | ||||
| 	CPP_TOKEN_COMMENT, | ||||
|      | ||||
|  | @ -222,177 +224,6 @@ ENUM(int32_t, Cpp_Token_Type){ | |||
|     CPP_TOKEN_TYPE_COUNT | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #if 1 | ||||
| enum Cpp_Token_Type{ | ||||
|     CPP_TOKEN_JUNK, | ||||
|     CPP_TOKEN_COMMENT, | ||||
|      | ||||
|     CPP_PP_INCLUDE, | ||||
|     CPP_PP_DEFINE, | ||||
|     CPP_PP_UNDEF, | ||||
|     CPP_PP_IF, | ||||
|     CPP_PP_IFDEF, | ||||
|     CPP_PP_IFNDEF, | ||||
|     CPP_PP_ELSE, | ||||
|     CPP_PP_ELIF, | ||||
|     CPP_PP_ENDIF, | ||||
|     CPP_PP_ERROR, | ||||
|     CPP_PP_IMPORT, | ||||
|     CPP_PP_USING, | ||||
|     CPP_PP_LINE, | ||||
|     CPP_PP_PRAGMA, | ||||
|     CPP_PP_STRINGIFY, | ||||
|     CPP_PP_CONCAT, | ||||
|     CPP_PP_UNKNOWN, | ||||
|      | ||||
|     CPP_TOKEN_KEY_TYPE, | ||||
|     CPP_TOKEN_KEY_MODIFIER, | ||||
|     CPP_TOKEN_KEY_QUALIFIER, | ||||
|     CPP_TOKEN_KEY_OPERATOR, // NOTE(allen): This type is not actually stored in tokens
 | ||||
|     CPP_TOKEN_KEY_CONTROL_FLOW, | ||||
|     CPP_TOKEN_KEY_CAST, | ||||
|     CPP_TOKEN_KEY_TYPE_DECLARATION, | ||||
|     CPP_TOKEN_KEY_ACCESS, | ||||
|     CPP_TOKEN_KEY_LINKAGE, | ||||
|     CPP_TOKEN_KEY_OTHER, | ||||
|      | ||||
|     CPP_TOKEN_IDENTIFIER, | ||||
|     CPP_TOKEN_INTEGER_CONSTANT, | ||||
|     CPP_TOKEN_CHARACTER_CONSTANT, | ||||
|     CPP_TOKEN_FLOATING_CONSTANT, | ||||
|     CPP_TOKEN_STRING_CONSTANT, | ||||
|     CPP_TOKEN_BOOLEAN_CONSTANT, | ||||
|      | ||||
|     CPP_TOKEN_STATIC_ASSERT, | ||||
|      | ||||
|     CPP_TOKEN_BRACKET_OPEN, | ||||
|     CPP_TOKEN_BRACKET_CLOSE, | ||||
|     CPP_TOKEN_PARENTHESE_OPEN, | ||||
|     CPP_TOKEN_PARENTHESE_CLOSE, | ||||
|     CPP_TOKEN_BRACE_OPEN, | ||||
|     CPP_TOKEN_BRACE_CLOSE, | ||||
|     CPP_TOKEN_SEMICOLON, | ||||
|     CPP_TOKEN_ELLIPSIS, | ||||
|      | ||||
|     // NOTE(allen): Ambiguous tokens, lexer only,
 | ||||
|     // parser figures out the real meaning
 | ||||
|     CPP_TOKEN_STAR, | ||||
|     CPP_TOKEN_AMPERSAND, | ||||
|     CPP_TOKEN_TILDE, | ||||
|     CPP_TOKEN_PLUS, | ||||
|     CPP_TOKEN_MINUS, | ||||
|     CPP_TOKEN_INCREMENT, | ||||
|     CPP_TOKEN_DECREMENT, | ||||
|      | ||||
|     // NOTE(allen): Precedence 1, LtoR
 | ||||
|     CPP_TOKEN_SCOPE, | ||||
|      | ||||
|     // NOTE(allen): Precedence 2, LtoR
 | ||||
|     CPP_TOKEN_POSTINC, // from increment, parser only
 | ||||
|     CPP_TOKEN_POSTDEC, // from decrement, parser only
 | ||||
|     CPP_TOKEN_FUNC_STYLE_CAST, // parser only
 | ||||
|     CPP_TOKEN_CPP_STYLE_CAST, | ||||
|     CPP_TOKEN_CALL, // from open paren, parser only
 | ||||
|     CPP_TOKEN_INDEX, // from bracket open, parser only
 | ||||
|     CPP_TOKEN_DOT, | ||||
|     CPP_TOKEN_ARROW, | ||||
|      | ||||
|     // NOTE(allen): Precedence 3, RtoL
 | ||||
|     CPP_TOKEN_PREINC, // from increment, parser only
 | ||||
|     CPP_TOKEN_PREDEC, // from decrement, parser only
 | ||||
|     CPP_TOKEN_POSITIVE, // from plus, parser only
 | ||||
|     CPP_TOKEN_NEGAITVE, // from minus, parser only
 | ||||
|     CPP_TOKEN_NOT, | ||||
|     CPP_TOKEN_BIT_NOT, // from tilde, direct from 'compl'
 | ||||
|     CPP_TOKEN_CAST, // from open paren, parser only
 | ||||
|     CPP_TOKEN_DEREF, // from star, parser only
 | ||||
|     CPP_TOKEN_TYPE_PTR, // from star, parser only
 | ||||
|     CPP_TOKEN_ADDRESS, // from ampersand, parser only
 | ||||
|     CPP_TOKEN_TYPE_REF, // from ampersand, parser only
 | ||||
|     CPP_TOKEN_SIZEOF, | ||||
|     CPP_TOKEN_ALIGNOF, | ||||
|     CPP_TOKEN_DECLTYPE, | ||||
|     CPP_TOKEN_TYPEID, | ||||
|     CPP_TOKEN_NEW, | ||||
|     CPP_TOKEN_DELETE, | ||||
|     CPP_TOKEN_NEW_ARRAY, // from new and bracket open, parser only
 | ||||
|     CPP_TOKEN_DELETE_ARRAY, // from delete and bracket open, parser only
 | ||||
|      | ||||
|     // NOTE(allen): Precedence 4, LtoR
 | ||||
|     CPP_TOKEN_PTRDOT, | ||||
|     CPP_TOKEN_PTRARROW, | ||||
|      | ||||
|     // NOTE(allen): Precedence 5, LtoR
 | ||||
|     CPP_TOKEN_MUL, // from start, parser only
 | ||||
|     CPP_TOKEN_DIV, | ||||
|     CPP_TOKEN_MOD, | ||||
|      | ||||
|     // NOTE(allen): Precedence 6, LtoR
 | ||||
|     CPP_TOKEN_ADD, // from plus, parser only
 | ||||
|     CPP_TOKEN_SUB, // from minus, parser only
 | ||||
|      | ||||
|     // NOTE(allen): Precedence 7, LtoR
 | ||||
|     CPP_TOKEN_LSHIFT, | ||||
|     CPP_TOKEN_RSHIFT, | ||||
|      | ||||
|     // NOTE(allen): Precedence 8, LtoR
 | ||||
|     CPP_TOKEN_LESS, | ||||
|     CPP_TOKEN_GRTR, | ||||
|     CPP_TOKEN_GRTREQ, | ||||
|     CPP_TOKEN_LESSEQ, | ||||
|      | ||||
|     // NOTE(allen): Precedence 9, LtoR
 | ||||
|     CPP_TOKEN_EQEQ, | ||||
|     CPP_TOKEN_NOTEQ, | ||||
|      | ||||
|     // NOTE(allen): Precedence 10, LtoR
 | ||||
|     CPP_TOKEN_BIT_AND, // from ampersand, direct from 'bitand'
 | ||||
|      | ||||
|     // NOTE(allen): Precedence 11, LtoR
 | ||||
|     CPP_TOKEN_BIT_XOR, | ||||
|      | ||||
|     // NOTE(allen): Precedence 12, LtoR
 | ||||
|     CPP_TOKEN_BIT_OR, | ||||
|      | ||||
|     // NOTE(allen): Precedence 13, LtoR
 | ||||
|     CPP_TOKEN_AND, | ||||
|      | ||||
|     // NOTE(allen): Precedence 14, LtoR
 | ||||
|     CPP_TOKEN_OR, | ||||
|      | ||||
|     // NOTE(allen): Precedence 15, RtoL
 | ||||
|     CPP_TOKEN_TERNARY_QMARK, | ||||
|     CPP_TOKEN_COLON, | ||||
|     CPP_TOKEN_THROW, | ||||
|     CPP_TOKEN_EQ, | ||||
|     CPP_TOKEN_ADDEQ, | ||||
|     CPP_TOKEN_SUBEQ, | ||||
|     CPP_TOKEN_MULEQ, | ||||
|     CPP_TOKEN_DIVEQ, | ||||
|     CPP_TOKEN_MODEQ, | ||||
|     CPP_TOKEN_LSHIFTEQ, | ||||
|     CPP_TOKEN_RSHIFTEQ, | ||||
|     CPP_TOKEN_ANDEQ, | ||||
|     CPP_TOKEN_OREQ, | ||||
|     CPP_TOKEN_XOREQ, | ||||
|      | ||||
|     // NOTE(allen): Precedence 16, LtoR
 | ||||
|     CPP_TOKEN_COMMA, | ||||
|      | ||||
|     CPP_TOKEN_DEFINED, | ||||
|     CPP_TOKEN_INCLUDE_FILE, | ||||
|     CPP_TOKEN_ERROR_MESSAGE, | ||||
|      | ||||
|     // NOTE(allen): used in the parser
 | ||||
|     CPP_TOKEN_EOF, | ||||
|      | ||||
|     CPP_TOKEN_TYPE_COUNT | ||||
| }; | ||||
| #endif | ||||
| 
 | ||||
| struct Cpp_Token{ | ||||
| 	Cpp_Token_Type type; | ||||
|     int32_t start, size; | ||||
|  | @ -400,18 +231,18 @@ struct Cpp_Token{ | |||
|     uint16_t flags; | ||||
| }; | ||||
| 
 | ||||
| enum Cpp_Token_Flag{ | ||||
| 	CPP_TFLAG_IGNORE = 1 << 0, | ||||
| 	CPP_TFLAG_PP_DIRECTIVE = 1 << 1, | ||||
| 	CPP_TFLAG_PP_BODY = 1 << 2, | ||||
| 	CPP_TFLAG_BAD_ENDING = 1 << 3, | ||||
| 	CPP_TFLAG_MULTILINE = 1 << 4, | ||||
| 	CPP_TFLAG_PARAMETERIZED = 1 << 5, | ||||
| 	CPP_TFLAG_IS_OPERATOR = 1 << 6, | ||||
|     CPP_TFLAG_IS_KEYWORD = 1 << 7 | ||||
| ENUM(uint16_t, Cpp_Token_Flag){ | ||||
| 	CPP_TFLAG_IGNORE = 0x1, | ||||
| 	CPP_TFLAG_PP_DIRECTIVE = 0x2, | ||||
| 	CPP_TFLAG_PP_BODY = 0x4, | ||||
| 	CPP_TFLAG_BAD_ENDING = 0x8, | ||||
| 	CPP_TFLAG_MULTILINE = 0x10, | ||||
|     CPP_TFLAG_PARAMETERIZED = 0x20, | ||||
|     CPP_TFLAG_IS_OPERATOR = 0x40, | ||||
|     CPP_TFLAG_IS_KEYWORD = 0x80 | ||||
| }; | ||||
| 
 | ||||
| enum Cpp_Preprocessor_State{ | ||||
| ENUM(uint16_t, Cpp_Preprocessor_State){ | ||||
| 	CPP_LEX_PP_DEFAULT, | ||||
| 	CPP_LEX_PP_IDENTIFIER, | ||||
| 	CPP_LEX_PP_MACRO_IDENTIFIER, | ||||
|  | @ -421,7 +252,6 @@ enum Cpp_Preprocessor_State{ | |||
| 	CPP_LEX_PP_NUMBER, | ||||
|     CPP_LEX_PP_ERROR, | ||||
| 	CPP_LEX_PP_JUNK, | ||||
| 	// NEVER ADD BELOW THIS
 | ||||
| 	CPP_LEX_PP_COUNT | ||||
| }; | ||||
| 
 | ||||
|  | @ -429,23 +259,7 @@ struct Cpp_Token_Stack{ | |||
| 	Cpp_Token *tokens; | ||||
| 	int32_t count, max_count; | ||||
| }; | ||||
| inline Cpp_Token_Stack | ||||
| cpp_token_stack_zero(){ | ||||
|     Cpp_Token_Stack stack={0};  | ||||
|     return(stack); | ||||
| } | ||||
| 
 | ||||
| #if 0 | ||||
| struct Cpp_Token_Merge{ | ||||
|     Cpp_Token new_token; | ||||
|     int32_t did_merge; | ||||
| }; | ||||
| #endif | ||||
| 
 | ||||
| struct Seek_Result{ | ||||
|     int32_t pos; | ||||
|     int32_t new_line; | ||||
| }; | ||||
| static Cpp_Token_Stack null_cpp_token_stack = {0}; | ||||
| 
 | ||||
| struct Cpp_Get_Token_Result{ | ||||
| 	int32_t token_index; | ||||
|  | @ -57,7 +57,6 @@ FSTRING_INLINE  fstr_bool  char_is_alpha(char c); | |||
| FSTRING_INLINE  fstr_bool  char_is_alpha_true(char c); | ||||
| FSTRING_INLINE  fstr_bool  char_is_hex(char c); | ||||
| FSTRING_INLINE  fstr_bool  char_is_numeric(char c); | ||||
| FSTRING_INLINE  String     string_zero(void); | ||||
| FSTRING_INLINE  String     make_string_cap(void *str, int32_t size, int32_t mem_size); | ||||
| FSTRING_INLINE  String     make_string(void *str, int32_t size); | ||||
| #ifndef   make_lit_string | ||||
|  | @ -246,6 +245,10 @@ FSTRING_INLINE  fstr_bool  string_set_match(void *str_set, int32_t item_size, in | |||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #if !defined(FSTRING_GUARD) | ||||
| static String null_string = {0}; | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Character Helpers
 | ||||
| //
 | ||||
|  | @ -335,15 +338,6 @@ char_is_numeric(char c) | |||
| // String Making Functions
 | ||||
| //
 | ||||
| 
 | ||||
| #if !defined(FSTRING_GUARD) | ||||
| FSTRING_INLINE String | ||||
| string_zero(void) | ||||
| { | ||||
|     String str={0}; | ||||
|     return(str); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #if !defined(FSTRING_GUARD) | ||||
| FSTRING_INLINE String | ||||
|  |  | |||
|  | @ -1,6 +1,8 @@ | |||
| 
 | ||||
| 
 | ||||
| #ifndef ENUM | ||||
| #define ENUM(type,name) typedef type name; enum name##_ | ||||
| #endif | ||||
| 
 | ||||
| /* DOC(bool32 is an alias name to signal that an integer parameter or field is for
 | ||||
| true/false vales.) */ | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
| # define FCPP_LINK static | ||||
| #endif | ||||
| 
 | ||||
| #include "4cpp_lexer_types.h" | ||||
| #include "4coder_lexer_types.h" | ||||
| #include "4cpp_lexer_fsms.h" | ||||
| #include "4cpp_lexer_tables.c" | ||||
| 
 | ||||
|  |  | |||
|  | @ -1225,7 +1225,7 @@ file_kill_tokens(System_Functions *system, | |||
|         general_memory_free(general, file->state.token_stack.tokens); | ||||
|     } | ||||
|     file->state.tokens_complete = 0; | ||||
|     file->state.token_stack = cpp_token_stack_zero(); | ||||
|     file->state.token_stack = null_cpp_token_stack; | ||||
| } | ||||
| 
 | ||||
| #if BUFFER_EXPERIMENT_SCALPEL <= 0 | ||||
|  | @ -3153,7 +3153,7 @@ internal void | |||
| init_read_only_file(System_Functions *system, Models *models, Editing_File *file){ | ||||
|     General_Memory *general = &models->mem.general; | ||||
|      | ||||
|     String val = string_zero(); | ||||
|     String val = null_string; | ||||
|     file_create_from_string(system, models, file, val, 1); | ||||
|      | ||||
|     if (file->settings.tokens_exist && file->state.token_stack.tokens == 0){ | ||||
|  | @ -3671,7 +3671,7 @@ get_exhaustive_info(System_Functions *system, Working_Set *working_set, Exhausti | |||
|     result.name_match = (filename_match(loop->front_name, &loop->absolutes, filename, 0) != 0); | ||||
|     result.is_loaded = (file != 0 && file_is_ready(file)); | ||||
|      | ||||
|     result.message = string_zero(); | ||||
|     result.message = null_string; | ||||
|     if (result.is_loaded){ | ||||
|         switch (file_get_sync(file)){ | ||||
|             case SYNC_GOOD: result.message = message_loaded; break; | ||||
|  | @ -3869,7 +3869,7 @@ show_gui_line(GUI_Target *target, String *string, | |||
|         append_s_char(string, ' '); | ||||
|         append_sc(string, follow_up); | ||||
|     } | ||||
|     gui_do_text_field(target, *string, string_zero()); | ||||
|     gui_do_text_field(target, *string, null_string); | ||||
| } | ||||
| 
 | ||||
| internal void | ||||
|  | @ -3880,7 +3880,7 @@ show_gui_int(GUI_Target *target, String *string, | |||
|     append_padding(string, '-', h_align); | ||||
|     append_s_char(string, ' '); | ||||
|     append_int_to_str(string, x); | ||||
|     gui_do_text_field(target, *string, string_zero()); | ||||
|     gui_do_text_field(target, *string, null_string); | ||||
| } | ||||
| 
 | ||||
| internal void | ||||
|  | @ -3891,7 +3891,7 @@ show_gui_u64(GUI_Target *target, String *string, | |||
|     append_padding(string, '-', h_align); | ||||
|     append_s_char(string, ' '); | ||||
|     append_u64_to_str(string, x); | ||||
|     gui_do_text_field(target, *string, string_zero()); | ||||
|     gui_do_text_field(target, *string, null_string); | ||||
| } | ||||
| 
 | ||||
| internal void | ||||
|  | @ -3904,7 +3904,7 @@ show_gui_int_int(GUI_Target *target, String *string, | |||
|     append_int_to_str(string, x); | ||||
|     append_s_char(string, '/'); | ||||
|     append_int_to_str(string, m); | ||||
|     gui_do_text_field(target, *string, string_zero()); | ||||
|     gui_do_text_field(target, *string, null_string); | ||||
| } | ||||
| 
 | ||||
| internal void | ||||
|  | @ -3918,7 +3918,7 @@ show_gui_id(GUI_Target *target, String *string, | |||
|     append_padding(string, ' ', h_align + 26); | ||||
|     append_ss(string, make_lit_string(" [1]: ")); | ||||
|     append_u64_to_str(string, id.id[1]); | ||||
|     gui_do_text_field(target, *string, string_zero()); | ||||
|     gui_do_text_field(target, *string, null_string); | ||||
| } | ||||
| 
 | ||||
| internal void | ||||
|  | @ -3929,7 +3929,7 @@ show_gui_float(GUI_Target *target, String *string, | |||
|     append_padding(string, '-', h_align); | ||||
|     append_s_char(string, ' '); | ||||
|     append_float_to_str(string, x); | ||||
|     gui_do_text_field(target, *string, string_zero()); | ||||
|     gui_do_text_field(target, *string, null_string); | ||||
| } | ||||
| 
 | ||||
| internal void | ||||
|  | @ -3985,7 +3985,7 @@ gui_show_mouse(GUI_Target *target, String *string, i32 mx, i32 my){ | |||
|     append_int_to_str(string, my); | ||||
|     append_s_char(string, ')'); | ||||
|      | ||||
|     gui_do_text_field(target, *string, string_zero()); | ||||
|     gui_do_text_field(target, *string, null_string); | ||||
| } | ||||
| 
 | ||||
| internal View_Step_Result | ||||
|  | @ -4491,7 +4491,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su | |||
|                                                 reserved_files[reserved_top++] = file; | ||||
|                                             } | ||||
|                                             else{ | ||||
|                                                 message = string_zero(); | ||||
|                                                 message = null_string; | ||||
|                                                 if (!file->settings.unimportant){ | ||||
|                                                     switch (file_get_sync(file)){ | ||||
|                                                         case SYNC_BEHIND_OS: message = message_unsynced; break; | ||||
|  | @ -4512,7 +4512,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su | |||
|                                 for (i = 0; i < reserved_top; ++i){ | ||||
|                                     Editing_File *file = reserved_files[i]; | ||||
|                                      | ||||
|                                     message = string_zero(); | ||||
|                                     message = null_string; | ||||
|                                     if (!file->settings.unimportant){ | ||||
|                                         switch (file_get_sync(file)){ | ||||
|                                             case SYNC_BEHIND_OS: message = message_unsynced; break; | ||||
|  | @ -4623,7 +4623,7 @@ step_file_view(System_Functions *system, View *view, View *active_view, Input_Su | |||
|                     // - Command maps inspection
 | ||||
|                     // - Clipboard inspection
 | ||||
|                      | ||||
|                     String empty_str = string_zero(); | ||||
|                     String empty_str = null_string; | ||||
|                      | ||||
|                     char space1[512]; | ||||
|                     String string = make_fixed_width_string(space1); | ||||
|  |  | |||
|  | @ -614,6 +614,9 @@ get_doc_string_from_prev(Parse_Context *context, String *doc_string){ | |||
|             if (check_and_fix_docs(doc_string)){ | ||||
|                 result = true; | ||||
|             } | ||||
|             else{ | ||||
|                 *doc_string = null_string; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|  | @ -1654,7 +1657,7 @@ compile_meta_unit(Partition *part, char **files, int32_t file_count, | |||
|                 has_cpp_name = 0; | ||||
|             } | ||||
|             else{ | ||||
|                 cpp_name = string_zero(); | ||||
|                 cpp_name = null_string; | ||||
|             } | ||||
|              | ||||
|             unit.parse[J].item_count = index; | ||||
|  | @ -2225,7 +2228,8 @@ generate_custom_headers(){ | |||
|      | ||||
|     // NOTE(allen): Parse the customization API types
 | ||||
|     static char *type_files[] = { | ||||
|         "4coder_types.h" | ||||
|         "4coder_types.h", | ||||
|         "4coder_lexer_types.h", | ||||
|     }; | ||||
|      | ||||
|     static Meta_Keywords type_keys[] = { | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ | |||
| #define Assert(n) do{ if (!(n)) { *(int*)0 = 0xA11E; } }while(0) | ||||
| #define ArrayCount(a) (sizeof(a)/sizeof(*a)) | ||||
| 
 | ||||
| #include "4cpp_lexer_types.h" | ||||
| #include "4coder_lexer_types.h" | ||||
| #include "4cpp_lexer_fsms.h" | ||||
| #include "4ed_mem_ansi.c" | ||||
| 
 | ||||
|  |  | |||
|  | @ -53,6 +53,10 @@ typedef struct Offset_String{ | |||
| 
 | ||||
| FSTRING_DECLS | ||||
| 
 | ||||
| #if !defined(FSTRING_GUARD) | ||||
| static String null_string = {0}; | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| // Character Helpers
 | ||||
| //
 | ||||
|  | @ -122,13 +126,6 @@ char_is_numeric(char c) | |||
| // String Making Functions
 | ||||
| //
 | ||||
| 
 | ||||
| FSTRING_INLINE String | ||||
| string_zero(void) | ||||
| /* DOC(This call returns a String struct of zeroed members.) */{ | ||||
|     String str={0}; | ||||
|     return(str); | ||||
| } | ||||
| 
 | ||||
| CPP_NAME(make_string) | ||||
| FSTRING_INLINE String | ||||
| make_string_cap(void *str, int32_t size, int32_t mem_size)/*
 | ||||
|  |  | |||
|  | @ -2382,7 +2382,7 @@ WinMain(HINSTANCE hInstance, | |||
|          | ||||
|         input_chunk.pers.control_keys[MDFR_CAPS_INDEX] = GetKeyState(VK_CAPITAL) & 0x1; | ||||
|          | ||||
|         win32vars.clipboard_contents = string_zero(); | ||||
|         win32vars.clipboard_contents = null_string; | ||||
|         if (win32vars.clipboard_sequence != 0){ | ||||
|             DWORD new_number = GetClipboardSequenceNumber(); | ||||
|             if (new_number != win32vars.clipboard_sequence){ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Allen Webster
						Allen Webster