begining rewrite of token iteration
parent
93fe0e1472
commit
21a7a58871
|
@ -47,6 +47,131 @@ buffered_write_stream_write(Application_Links *app, Buffered_Write_Stream *strea
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Get_Positions_Results
|
||||||
|
get_function_positions(Application_Links *app, Buffer_Summary *buffer, int32_t token_index, Function_Positions *positions_array, int32_t positions_max){
|
||||||
|
Get_Positions_Results result = {};
|
||||||
|
|
||||||
|
Token_Range token_range = buffer_get_token_range(app, buffer->buffer_id);
|
||||||
|
if (token_range.first != 0){
|
||||||
|
Token_Iterator token_it = make_token_iterator(token_range, token_index);
|
||||||
|
|
||||||
|
|
||||||
|
int32_t nest_level = 0;
|
||||||
|
int32_t paren_nest_level = 0;
|
||||||
|
|
||||||
|
int32_t first_paren_index = 0;
|
||||||
|
int32_t first_paren_position = 0;
|
||||||
|
int32_t last_paren_index = 0;
|
||||||
|
|
||||||
|
// Look for the next token at global scope that might need to be printed.
|
||||||
|
mode1:
|
||||||
|
Assert(nest_level == 0);
|
||||||
|
Assert(paren_nest_level == 0);
|
||||||
|
first_paren_index = 0;
|
||||||
|
first_paren_position = 0;
|
||||||
|
last_paren_index = 0;
|
||||||
|
for (Cpp_Token *token = token_iterator_current(&token_it);
|
||||||
|
token != 0;
|
||||||
|
token = token_iterator_goto_next(&token_it)){
|
||||||
|
if (!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||||
|
switch (token->type){
|
||||||
|
case CPP_TOKEN_BRACE_OPEN:
|
||||||
|
{
|
||||||
|
++nest_level;
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case CPP_TOKEN_BRACE_CLOSE:
|
||||||
|
{
|
||||||
|
if (nest_level > 0){
|
||||||
|
--nest_level;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case CPP_TOKEN_PARENTHESE_OPEN:
|
||||||
|
{
|
||||||
|
if (nest_level == 0){
|
||||||
|
first_paren_index = token_index;
|
||||||
|
first_paren_position = token->start;
|
||||||
|
goto paren_mode1;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
// Look for a closing parenthese to mark the end of a function signature.
|
||||||
|
paren_mode1:
|
||||||
|
paren_nest_level = 0;
|
||||||
|
for (Cpp_Token *token = token_iterator_current(&token_it);
|
||||||
|
token != 0;
|
||||||
|
token = token_iterator_goto_next(&token_it)){
|
||||||
|
if (!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||||
|
switch (token->type){
|
||||||
|
case CPP_TOKEN_PARENTHESE_OPEN:
|
||||||
|
{
|
||||||
|
++paren_nest_level;
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case CPP_TOKEN_PARENTHESE_CLOSE:
|
||||||
|
{
|
||||||
|
--paren_nest_level;
|
||||||
|
if (paren_nest_level == 0){
|
||||||
|
last_paren_index = token_index;
|
||||||
|
goto paren_mode2;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
// Look backwards from an open parenthese to find the start of a function signature.
|
||||||
|
paren_mode2:
|
||||||
|
{
|
||||||
|
Cpp_Token *restore_point = token_iterator_current(&token_it);
|
||||||
|
int32_t local_index = first_paren_index;
|
||||||
|
int32_t signature_start_index = 0;
|
||||||
|
|
||||||
|
for (Cpp_Token *token = token_iterator_current(&token_it);
|
||||||
|
token != 0;
|
||||||
|
token = token_iterator_goto_prev(&token_it)){
|
||||||
|
if ((token->flags & CPP_TFLAG_PP_BODY) || (token->flags & CPP_TFLAG_PP_DIRECTIVE) || token->type == CPP_TOKEN_BRACE_CLOSE || token->type == CPP_TOKEN_SEMICOLON || token->type == CPP_TOKEN_PARENTHESE_CLOSE){
|
||||||
|
++local_index;
|
||||||
|
signature_start_index = local_index;
|
||||||
|
goto paren_mode2_done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When this loop ends by going all the way back to the beginning set the signature start to 0 and fall through to the printing phase.
|
||||||
|
signature_start_index = 0;
|
||||||
|
|
||||||
|
paren_mode2_done:;
|
||||||
|
{
|
||||||
|
Function_Positions positions;
|
||||||
|
positions.sig_start_index = signature_start_index;
|
||||||
|
positions.sig_end_index = last_paren_index;
|
||||||
|
positions.open_paren_pos = first_paren_position;
|
||||||
|
positions_array[result.positions_count++] = positions;
|
||||||
|
}
|
||||||
|
|
||||||
|
token_iterator_set(&token_it, restore_point);
|
||||||
|
if (result.positions_count >= positions_max){
|
||||||
|
result.next_token_index = token_index;
|
||||||
|
result.still_looping = true;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
goto mode1;
|
||||||
|
}
|
||||||
|
end:;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static Get_Positions_Results
|
static Get_Positions_Results
|
||||||
get_function_positions(Application_Links *app, Buffer_Summary *buffer, int32_t token_index, Function_Positions *positions_array, int32_t positions_max){
|
get_function_positions(Application_Links *app, Buffer_Summary *buffer, int32_t token_index, Function_Positions *positions_array, int32_t positions_max){
|
||||||
Get_Positions_Results result = {};
|
Get_Positions_Results result = {};
|
||||||
|
@ -178,6 +303,7 @@ get_function_positions(Application_Links *app, Buffer_Summary *buffer, int32_t t
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_positions_buffered(Application_Links *app, Buffer_Summary *buffer, Function_Positions *positions_array, int32_t positions_count, Buffered_Write_Stream *stream){
|
print_positions_buffered(Application_Links *app, Buffer_Summary *buffer, Function_Positions *positions_array, int32_t positions_count, Buffered_Write_Stream *stream){
|
||||||
|
|
|
@ -22,6 +22,7 @@ struct Application_Links;
|
||||||
#define BUFFER_GET_MANAGED_SCOPE_SIG(n) Managed_Scope n(Application_Links *app, Buffer_ID buffer_id)
|
#define BUFFER_GET_MANAGED_SCOPE_SIG(n) Managed_Scope n(Application_Links *app, Buffer_ID buffer_id)
|
||||||
#define BUFFER_TOKEN_COUNT_SIG(n) int32_t n(Application_Links *app, Buffer_Summary *buffer)
|
#define BUFFER_TOKEN_COUNT_SIG(n) int32_t n(Application_Links *app, Buffer_Summary *buffer)
|
||||||
#define BUFFER_READ_TOKENS_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out)
|
#define BUFFER_READ_TOKENS_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out)
|
||||||
|
#define BUFFER_GET_TOKEN_RANGE_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, Cpp_Token **first_token_out, Cpp_Token **one_past_last_token_out)
|
||||||
#define BUFFER_GET_TOKEN_INDEX_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result)
|
#define BUFFER_GET_TOKEN_INDEX_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result)
|
||||||
#define BUFFER_SEND_END_SIGNAL_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer)
|
#define BUFFER_SEND_END_SIGNAL_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer)
|
||||||
#define CREATE_BUFFER_SIG(n) Buffer_Summary n(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags)
|
#define CREATE_BUFFER_SIG(n) Buffer_Summary n(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags)
|
||||||
|
@ -149,6 +150,7 @@ typedef BUFFER_SET_SETTING_SIG(Buffer_Set_Setting_Function);
|
||||||
typedef BUFFER_GET_MANAGED_SCOPE_SIG(Buffer_Get_Managed_Scope_Function);
|
typedef BUFFER_GET_MANAGED_SCOPE_SIG(Buffer_Get_Managed_Scope_Function);
|
||||||
typedef BUFFER_TOKEN_COUNT_SIG(Buffer_Token_Count_Function);
|
typedef BUFFER_TOKEN_COUNT_SIG(Buffer_Token_Count_Function);
|
||||||
typedef BUFFER_READ_TOKENS_SIG(Buffer_Read_Tokens_Function);
|
typedef BUFFER_READ_TOKENS_SIG(Buffer_Read_Tokens_Function);
|
||||||
|
typedef BUFFER_GET_TOKEN_RANGE_SIG(Buffer_Get_Token_Range_Function);
|
||||||
typedef BUFFER_GET_TOKEN_INDEX_SIG(Buffer_Get_Token_Index_Function);
|
typedef BUFFER_GET_TOKEN_INDEX_SIG(Buffer_Get_Token_Index_Function);
|
||||||
typedef BUFFER_SEND_END_SIGNAL_SIG(Buffer_Send_End_Signal_Function);
|
typedef BUFFER_SEND_END_SIGNAL_SIG(Buffer_Send_End_Signal_Function);
|
||||||
typedef CREATE_BUFFER_SIG(Create_Buffer_Function);
|
typedef CREATE_BUFFER_SIG(Create_Buffer_Function);
|
||||||
|
@ -278,6 +280,7 @@ Buffer_Set_Setting_Function *buffer_set_setting;
|
||||||
Buffer_Get_Managed_Scope_Function *buffer_get_managed_scope;
|
Buffer_Get_Managed_Scope_Function *buffer_get_managed_scope;
|
||||||
Buffer_Token_Count_Function *buffer_token_count;
|
Buffer_Token_Count_Function *buffer_token_count;
|
||||||
Buffer_Read_Tokens_Function *buffer_read_tokens;
|
Buffer_Read_Tokens_Function *buffer_read_tokens;
|
||||||
|
Buffer_Get_Token_Range_Function *buffer_get_token_range;
|
||||||
Buffer_Get_Token_Index_Function *buffer_get_token_index;
|
Buffer_Get_Token_Index_Function *buffer_get_token_index;
|
||||||
Buffer_Send_End_Signal_Function *buffer_send_end_signal;
|
Buffer_Send_End_Signal_Function *buffer_send_end_signal;
|
||||||
Create_Buffer_Function *create_buffer;
|
Create_Buffer_Function *create_buffer;
|
||||||
|
@ -406,6 +409,7 @@ Buffer_Set_Setting_Function *buffer_set_setting_;
|
||||||
Buffer_Get_Managed_Scope_Function *buffer_get_managed_scope_;
|
Buffer_Get_Managed_Scope_Function *buffer_get_managed_scope_;
|
||||||
Buffer_Token_Count_Function *buffer_token_count_;
|
Buffer_Token_Count_Function *buffer_token_count_;
|
||||||
Buffer_Read_Tokens_Function *buffer_read_tokens_;
|
Buffer_Read_Tokens_Function *buffer_read_tokens_;
|
||||||
|
Buffer_Get_Token_Range_Function *buffer_get_token_range_;
|
||||||
Buffer_Get_Token_Index_Function *buffer_get_token_index_;
|
Buffer_Get_Token_Index_Function *buffer_get_token_index_;
|
||||||
Buffer_Send_End_Signal_Function *buffer_send_end_signal_;
|
Buffer_Send_End_Signal_Function *buffer_send_end_signal_;
|
||||||
Create_Buffer_Function *create_buffer_;
|
Create_Buffer_Function *create_buffer_;
|
||||||
|
@ -542,6 +546,7 @@ app_links->buffer_set_setting_ = Buffer_Set_Setting;\
|
||||||
app_links->buffer_get_managed_scope_ = Buffer_Get_Managed_Scope;\
|
app_links->buffer_get_managed_scope_ = Buffer_Get_Managed_Scope;\
|
||||||
app_links->buffer_token_count_ = Buffer_Token_Count;\
|
app_links->buffer_token_count_ = Buffer_Token_Count;\
|
||||||
app_links->buffer_read_tokens_ = Buffer_Read_Tokens;\
|
app_links->buffer_read_tokens_ = Buffer_Read_Tokens;\
|
||||||
|
app_links->buffer_get_token_range_ = Buffer_Get_Token_Range;\
|
||||||
app_links->buffer_get_token_index_ = Buffer_Get_Token_Index;\
|
app_links->buffer_get_token_index_ = Buffer_Get_Token_Index;\
|
||||||
app_links->buffer_send_end_signal_ = Buffer_Send_End_Signal;\
|
app_links->buffer_send_end_signal_ = Buffer_Send_End_Signal;\
|
||||||
app_links->create_buffer_ = Create_Buffer;\
|
app_links->create_buffer_ = Create_Buffer;\
|
||||||
|
@ -670,6 +675,7 @@ static bool32 buffer_set_setting(Application_Links *app, Buffer_Summary *buffer,
|
||||||
static Managed_Scope buffer_get_managed_scope(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_get_managed_scope(app, buffer_id));}
|
static Managed_Scope buffer_get_managed_scope(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_get_managed_scope(app, buffer_id));}
|
||||||
static int32_t buffer_token_count(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_token_count(app, buffer));}
|
static int32_t buffer_token_count(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_token_count(app, buffer));}
|
||||||
static bool32 buffer_read_tokens(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out){return(app->buffer_read_tokens(app, buffer, start_token, end_token, tokens_out));}
|
static bool32 buffer_read_tokens(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out){return(app->buffer_read_tokens(app, buffer, start_token, end_token, tokens_out));}
|
||||||
|
static bool32 buffer_get_token_range(Application_Links *app, Buffer_Summary *buffer, Cpp_Token **first_token_out, Cpp_Token **one_past_last_token_out){return(app->buffer_get_token_range(app, buffer, first_token_out, one_past_last_token_out));}
|
||||||
static bool32 buffer_get_token_index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result){return(app->buffer_get_token_index(app, buffer, pos, get_result));}
|
static bool32 buffer_get_token_index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result){return(app->buffer_get_token_index(app, buffer, pos, get_result));}
|
||||||
static bool32 buffer_send_end_signal(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_send_end_signal(app, buffer));}
|
static bool32 buffer_send_end_signal(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_send_end_signal(app, buffer));}
|
||||||
static Buffer_Summary create_buffer(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags){return(app->create_buffer(app, filename, filename_len, flags));}
|
static Buffer_Summary create_buffer(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags){return(app->create_buffer(app, filename, filename_len, flags));}
|
||||||
|
@ -798,6 +804,7 @@ static bool32 buffer_set_setting(Application_Links *app, Buffer_Summary *buffer,
|
||||||
static Managed_Scope buffer_get_managed_scope(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_get_managed_scope_(app, buffer_id));}
|
static Managed_Scope buffer_get_managed_scope(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_get_managed_scope_(app, buffer_id));}
|
||||||
static int32_t buffer_token_count(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_token_count_(app, buffer));}
|
static int32_t buffer_token_count(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_token_count_(app, buffer));}
|
||||||
static bool32 buffer_read_tokens(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out){return(app->buffer_read_tokens_(app, buffer, start_token, end_token, tokens_out));}
|
static bool32 buffer_read_tokens(Application_Links *app, Buffer_Summary *buffer, int32_t start_token, int32_t end_token, Cpp_Token *tokens_out){return(app->buffer_read_tokens_(app, buffer, start_token, end_token, tokens_out));}
|
||||||
|
static bool32 buffer_get_token_range(Application_Links *app, Buffer_Summary *buffer, Cpp_Token **first_token_out, Cpp_Token **one_past_last_token_out){return(app->buffer_get_token_range_(app, buffer, first_token_out, one_past_last_token_out));}
|
||||||
static bool32 buffer_get_token_index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result){return(app->buffer_get_token_index_(app, buffer, pos, get_result));}
|
static bool32 buffer_get_token_index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result){return(app->buffer_get_token_index_(app, buffer, pos, get_result));}
|
||||||
static bool32 buffer_send_end_signal(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_send_end_signal_(app, buffer));}
|
static bool32 buffer_send_end_signal(Application_Links *app, Buffer_Summary *buffer){return(app->buffer_send_end_signal_(app, buffer));}
|
||||||
static Buffer_Summary create_buffer(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags){return(app->create_buffer_(app, filename, filename_len, flags));}
|
static Buffer_Summary create_buffer(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags){return(app->create_buffer_(app, filename, filename_len, flags));}
|
||||||
|
|
|
@ -312,10 +312,10 @@ static Command_Metadata fcoder_metacmd_table[220] = {
|
||||||
{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\4coder_lists.cpp", 28, 765 },
|
{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\4coder_lists.cpp", 28, 765 },
|
||||||
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1557 },
|
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1557 },
|
||||||
{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 133 },
|
{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 133 },
|
||||||
{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 343 },
|
{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 469 },
|
||||||
{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 349 },
|
{ PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 475 },
|
||||||
{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 320 },
|
{ PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 446 },
|
||||||
{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 330 },
|
{ PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 456 },
|
||||||
{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 769 },
|
{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 769 },
|
||||||
{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 783 },
|
{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 783 },
|
||||||
{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 797 },
|
{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 797 },
|
||||||
|
|
|
@ -924,7 +924,7 @@ backward_stream_chunk(Stream_Chunk *chunk){
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
static bool32
|
static bool32
|
||||||
init_stream_tokens(Stream_Tokens *stream, Application_Links *app, Buffer_Summary *buffer,
|
init_stream_tokens(Stream_Tokens_DEP *stream, Application_Links *app, Buffer_Summary *buffer,
|
||||||
int32_t pos, Cpp_Token *data, int32_t count){
|
int32_t pos, Cpp_Token *data, int32_t count){
|
||||||
bool32 result = false;
|
bool32 result = false;
|
||||||
|
|
||||||
|
@ -955,13 +955,13 @@ init_stream_tokens(Stream_Tokens *stream, Application_Links *app, Buffer_Summary
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Stream_Tokens
|
static Stream_Tokens_DEP
|
||||||
begin_temp_stream_token(Stream_Tokens *stream){
|
begin_temp_stream_token(Stream_Tokens_DEP *stream){
|
||||||
return(*stream);
|
return(*stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
end_temp_stream_token(Stream_Tokens *stream, Stream_Tokens temp){
|
end_temp_stream_token(Stream_Tokens_DEP *stream, Stream_Tokens_DEP temp){
|
||||||
if (stream->start != temp.start || stream->end != temp.end){
|
if (stream->start != temp.start || stream->end != temp.end){
|
||||||
Application_Links *app = stream->app;
|
Application_Links *app = stream->app;
|
||||||
buffer_read_tokens(app, temp.buffer, temp.start, temp.end, temp.base_tokens);
|
buffer_read_tokens(app, temp.buffer, temp.start, temp.end, temp.base_tokens);
|
||||||
|
@ -972,7 +972,7 @@ end_temp_stream_token(Stream_Tokens *stream, Stream_Tokens temp){
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool32
|
static bool32
|
||||||
forward_stream_tokens(Stream_Tokens *stream){
|
forward_stream_tokens(Stream_Tokens_DEP *stream){
|
||||||
Application_Links *app = stream->app;
|
Application_Links *app = stream->app;
|
||||||
Buffer_Summary *buffer = stream->buffer;
|
Buffer_Summary *buffer = stream->buffer;
|
||||||
bool32 result = false;
|
bool32 result = false;
|
||||||
|
@ -997,7 +997,7 @@ forward_stream_tokens(Stream_Tokens *stream){
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool32
|
static bool32
|
||||||
backward_stream_tokens(Stream_Tokens *stream){
|
backward_stream_tokens(Stream_Tokens_DEP *stream){
|
||||||
Application_Links *app = stream->app;
|
Application_Links *app = stream->app;
|
||||||
Buffer_Summary *buffer = stream->buffer;
|
Buffer_Summary *buffer = stream->buffer;
|
||||||
bool32 result = false;
|
bool32 result = false;
|
||||||
|
@ -1021,6 +1021,101 @@ backward_stream_tokens(Stream_Tokens *stream){
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
|
static Token_Range
|
||||||
|
buffer_get_token_range(Application_Links *app, Buffer_ID buffer_id){
|
||||||
|
Token_Range range = {};
|
||||||
|
Buffer_Summary buffer = get_buffer(app, buffer_id, AccessAll);
|
||||||
|
buffer_get_token_range(app, &buffer, &range.first, &range.one_past_last);
|
||||||
|
return(range);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Token_Iterator
|
||||||
|
make_token_iterator(Token_Range range, Cpp_Token *token){
|
||||||
|
Token_Iterator iterator = {};
|
||||||
|
if (range.first != 0 && range.one_past_last != 0){
|
||||||
|
if (token == 0 || token < range.first){
|
||||||
|
token = range.first;
|
||||||
|
}
|
||||||
|
if (token > range.one_past_last){
|
||||||
|
token = range.one_past_last;
|
||||||
|
}
|
||||||
|
iterator.token = token;
|
||||||
|
iterator.range = range;
|
||||||
|
}
|
||||||
|
return(iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Token_Iterator
|
||||||
|
make_token_iterator(Token_Range range, int32_t index){
|
||||||
|
return(make_token_iterator(range, range.first + index));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
token_iterator_set(Token_Iterator *iterator, Cpp_Token *token){
|
||||||
|
*iterator = make_token_iterator(iterator->range, token);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Cpp_Token*
|
||||||
|
token_iterator_current(Token_Iterator *iterator){
|
||||||
|
Cpp_Token *token = iterator->token;
|
||||||
|
if (token < iterator->range.first || iterator->range.one_past_last <= token){
|
||||||
|
token = 0;
|
||||||
|
}
|
||||||
|
return(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t
|
||||||
|
token_iterator_current_index(Token_Iterator *iterator){
|
||||||
|
int32_t index = -1;
|
||||||
|
Cpp_Token *token = token_iterator_current(iterator);
|
||||||
|
if (token != 0 && iterator->range.first <= token && token <= iterator->range.one_past_last){
|
||||||
|
index = (int32_t)(token - iterator->range.first);
|
||||||
|
}
|
||||||
|
return(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Cpp_Token*
|
||||||
|
token_iterator_goto_next(Token_Iterator *iterator){
|
||||||
|
Cpp_Token *token = iterator->token;
|
||||||
|
Cpp_Token *one_past_last = iterator->range.one_past_last;
|
||||||
|
for (token += 1; token < one_past_last; token += 1){
|
||||||
|
if (token->type != CPP_TOKEN_COMMENT){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*iterator = make_token_iterator(iterator->range, token);
|
||||||
|
return(token_iterator_current(iterator));
|
||||||
|
}
|
||||||
|
|
||||||
|
static Cpp_Token*
|
||||||
|
token_iterator_goto_next_raw(Token_Iterator *iterator){
|
||||||
|
*iterator = make_token_iterator(iterator->range, iterator->token + 1);
|
||||||
|
return(token_iterator_current(iterator));
|
||||||
|
}
|
||||||
|
|
||||||
|
static Cpp_Token*
|
||||||
|
token_iterator_goto_prev(Token_Iterator *iterator){
|
||||||
|
Cpp_Token *token = iterator->token;
|
||||||
|
Cpp_Token *first = iterator->range.first;
|
||||||
|
for (token -= 1; token > first; token -= 1){
|
||||||
|
if (token->type != CPP_TOKEN_COMMENT){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*iterator = make_token_iterator(iterator->range, token);
|
||||||
|
return(token_iterator_current(iterator));
|
||||||
|
}
|
||||||
|
|
||||||
|
static Cpp_Token*
|
||||||
|
token_iterator_goto_prev_raw(Token_Iterator *iterator){
|
||||||
|
*iterator = make_token_iterator(iterator->range, iterator->token - 1);
|
||||||
|
return(token_iterator_current(iterator));
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
static String
|
static String
|
||||||
get_query_string(Application_Links *app, char *query_str, char *string_space, int32_t space_size){
|
get_query_string(Application_Links *app, char *query_str, char *string_space, int32_t space_size){
|
||||||
Query_Bar bar;
|
Query_Bar bar;
|
||||||
|
|
|
@ -115,14 +115,26 @@ struct Stream_Chunk{
|
||||||
char *data;
|
char *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Stream_Tokens{
|
struct Stream_Tokens_DEP{
|
||||||
Application_Links *app;
|
Application_Links *app;
|
||||||
Buffer_Summary *buffer;
|
Buffer_Summary *buffer;
|
||||||
|
|
||||||
Cpp_Token *base_tokens;
|
Cpp_Token *base_tokens;
|
||||||
Cpp_Token *tokens;
|
Cpp_Token *tokens;
|
||||||
int32_t start, end;
|
int32_t start;
|
||||||
int32_t count, token_count;
|
int32_t end;
|
||||||
|
int32_t count;
|
||||||
|
int32_t token_count;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Token_Range{
|
||||||
|
Cpp_Token *first;
|
||||||
|
Cpp_Token *one_past_last;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Token_Iterator{
|
||||||
|
Cpp_Token *token;
|
||||||
|
Token_Range range;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
|
@ -16,8 +16,7 @@ enum{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Statement_Parser{
|
struct Statement_Parser{
|
||||||
Stream_Tokens stream;
|
Token_Iterator token_iterator;
|
||||||
int32_t token_index;
|
|
||||||
Buffer_Summary *buffer;
|
Buffer_Summary *buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1063,7 +1063,7 @@ The number of output tokens will be end_token - start_token.)
|
||||||
Editing_File *file = imp_get_file(models, buffer);
|
Editing_File *file = imp_get_file(models, buffer);
|
||||||
Cpp_Token_Array token_array = file->state.token_array;
|
Cpp_Token_Array token_array = file->state.token_array;
|
||||||
bool32 result = false;
|
bool32 result = false;
|
||||||
if (file && token_array.tokens && file->state.tokens_complete){
|
if (file != 0 && token_array.tokens != 0 && file->state.tokens_complete){
|
||||||
if (0 <= start_token && start_token <= end_token && end_token <= token_array.count){
|
if (0 <= start_token && start_token <= end_token && end_token <= token_array.count){
|
||||||
result = true;
|
result = true;
|
||||||
memcpy(tokens_out, token_array.tokens + start_token, sizeof(Cpp_Token)*(end_token - start_token));
|
memcpy(tokens_out, token_array.tokens + start_token, sizeof(Cpp_Token)*(end_token - start_token));
|
||||||
|
@ -1072,6 +1072,21 @@ The number of output tokens will be end_token - start_token.)
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
API_EXPORT bool32
|
||||||
|
Buffer_Get_Token_Range(Application_Links *app, Buffer_Summary *buffer, Cpp_Token **first_token_out, Cpp_Token **one_past_last_token_out)
|
||||||
|
{
|
||||||
|
Models *models = (Models*)app->cmd_context;
|
||||||
|
Editing_File *file = imp_get_file(models, buffer);
|
||||||
|
Cpp_Token_Array token_array = file->state.token_array;
|
||||||
|
bool32 result = false;
|
||||||
|
if (file != 0 && token_array.tokens != 0 && file->state.tokens_complete){
|
||||||
|
result = true;
|
||||||
|
*first_token_out = token_array.tokens;
|
||||||
|
*one_past_last_token_out = token_array.tokens + token_array.count;
|
||||||
|
}
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
API_EXPORT bool32
|
API_EXPORT bool32
|
||||||
Buffer_Get_Token_Index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result)
|
Buffer_Get_Token_Index(Application_Links *app, Buffer_Summary *buffer, int32_t pos, Cpp_Get_Token_Result *get_result)
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue