Skip to content

Commit

Permalink
Simplify evaluating aspect pattern code
Browse files Browse the repository at this point in the history
This gets rid of redundant local variables and simplifies adding one
more value to be filled (it will be added soon).
  • Loading branch information
eunovm committed Nov 20, 2019
1 parent 5853d0a commit 6254b7c
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 68 deletions.
93 changes: 43 additions & 50 deletions gcc/ldv-advice-weaver.c
Original file line number Diff line number Diff line change
Expand Up @@ -362,35 +362,33 @@ ldv_delete_id_declarator (ldv_list_ptr declarator_list)

/* Aspect patterns that can be evaluated basing on matching information. */
void
ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string, unsigned int *integer)
ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **text, unsigned int *number)
{
const char *text = NULL;
unsigned int number;
const char *func_arg = NULL;
int func_arg_size;
ldv_text_ptr ldv_text = NULL;
ldv_i_initializer_ptr ldv_var_initializer = NULL;

if (!strcmp (pattern->name, "arg"))
text = ldv_copy_str (ldv_get_param_name (pattern->arg_numb));
*text = ldv_copy_str (ldv_get_param_name (pattern->arg_numb));
else if (!strcmp (pattern->name, "arg_type"))
text = ldv_copy_str (ldv_get_arg_type_name (pattern->arg_numb));
*text = ldv_copy_str (ldv_get_arg_type_name (pattern->arg_numb));
else if (!strcmp (pattern->name, "arg_type_str"))
text = ldv_print_arg_type_str (pattern->arg_numb);
*text = ldv_print_arg_type_str (pattern->arg_numb);
else if (!strcmp (pattern->name, "arg_name"))
text = ldv_copy_str (ldv_get_arg_name (pattern->arg_numb));
*text = ldv_copy_str (ldv_get_arg_name (pattern->arg_numb));
else if (!strcmp (pattern->name, "arg_size"))
{
func_arg_size = ldv_get_arg_size (pattern->arg_numb);

/* Print stub '-1' when an argument size isn't specified. */
if (func_arg_size == -1)
{
text = ldv_copy_str ("-1");
*text = ldv_copy_str ("-1");
ldv_print_info (LDV_INFO_WEAVE, "generate stub \"-1\" for aspect pattern \"%s\"", pattern->name);
}
else
text = ldv_itoa ((unsigned int) func_arg_size);
*text = ldv_itoa ((unsigned int) func_arg_size);
}
else if (!strcmp (pattern->name, "arg_value"))
{
Expand All @@ -399,38 +397,38 @@ ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string
/* Print stub 'NULL' when an argument size isn't specified. */
if (func_arg == NULL)
{
text = ldv_copy_str ("0");
*text = ldv_copy_str ("0");
ldv_print_info (LDV_INFO_WEAVE, "generate stub \"0\" for aspect pattern \"%s\"", pattern->name);
}
else
text = ldv_copy_str (func_arg);
*text = ldv_copy_str (func_arg);
}
else if (!strcmp (pattern->name, "actual_arg_func_names"))
{
text = ldv_get_actual_arg_func_names ();
if (!text)
text = ldv_copy_str ("NULL");
*text = ldv_get_actual_arg_func_names ();
if (!*text)
*text = ldv_copy_str ("NULL");
}
else if (!strcmp (pattern->name, "arg_numb"))
number = ldv_list_len (ldv_func_arg_info_list);
*number = ldv_list_len (ldv_func_arg_info_list);
else if (!strcmp (pattern->name, "aspect_func_name"))
{
if (ldv_aspect_func_name)
text = ldv_copy_str (ldv_aspect_func_name);
*text = ldv_copy_str (ldv_aspect_func_name);
else
internal_error ("no function name was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "func_name"))
{
if (ldv_func_name)
text = ldv_copy_str (ldv_func_name);
*text = ldv_copy_str (ldv_func_name);
else
internal_error ("no aspect function name was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "func_ptr_name"))
{
if (ldv_func_ptr_name)
text = ldv_copy_str (ldv_func_ptr_name);
*text = ldv_copy_str (ldv_func_ptr_name);
else
internal_error ("no function pointer name was found for aspect pattern \"%s\"", pattern->name);
}
Expand All @@ -439,7 +437,7 @@ ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string
if (ldv_func_signature)
{
if (ldv_func_signature->func_context)
text = ldv_copy_str (ldv_print_func_context (ldv_func_signature));
*text = ldv_copy_str (ldv_print_func_context (ldv_func_signature));
else
internal_error ("no function context was found for aspect pattern \"%s\"", pattern->name);
}
Expand All @@ -451,7 +449,7 @@ ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string
if (ldv_func_signature)
{
if (ldv_func_signature->func_context)
text = ldv_copy_str (ldv_print_line_number (ldv_func_signature->func_context->decl_line));
*text = ldv_copy_str (ldv_print_line_number (ldv_func_signature->func_context->decl_line));
else
internal_error ("no function context was found for aspect pattern \"%s\"", pattern->name);
}
Expand All @@ -463,16 +461,16 @@ ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string
if (ldv_func_signature)
{
if (ldv_func_signature->func_context)
text = ldv_copy_str (ldv_print_func_name (ldv_func_signature->func_context));
*text = ldv_copy_str (ldv_print_func_name (ldv_func_signature->func_context));
else
text = ldv_copy_str ("NULL");
*text = ldv_copy_str ("NULL");
}
else if (ldv_var_signature)
{
if (ldv_var_signature->func_context)
text = ldv_copy_str (ldv_print_func_name (ldv_var_signature->func_context));
*text = ldv_copy_str (ldv_print_func_name (ldv_var_signature->func_context));
else
text = ldv_copy_str ("NULL");
*text = ldv_copy_str ("NULL");
}
else
internal_error ("no function signature was found for aspect pattern \"%s\"", pattern->name);
Expand All @@ -482,14 +480,14 @@ ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string
if (ldv_func_signature)
{
if (ldv_func_signature->func_context)
text = ldv_copy_str (ldv_func_signature->func_context->file_path);
*text = ldv_copy_str (ldv_func_signature->func_context->file_path);
else
internal_error ("no function context was found for aspect pattern \"%s\"", pattern->name);
}
else if (ldv_var_signature)
{
if (ldv_var_signature->func_context)
text = ldv_copy_str (ldv_var_signature->func_context->file_path);
*text = ldv_copy_str (ldv_var_signature->func_context->file_path);
else
internal_error ("no function context was found for aspect pattern \"%s\"", pattern->name);
}
Expand All @@ -499,82 +497,82 @@ ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string
else if ((!strcmp (pattern->name, "func_signature")) || (!strcmp (pattern->name, "signature")))
{
if (ldv_func_decl)
text = ldv_copy_str (ldv_func_decl);
*text = ldv_copy_str (ldv_func_decl);
else if (ldv_var_decl)
text = ldv_copy_str (ldv_var_decl);
*text = ldv_copy_str (ldv_var_decl);
else if (ldv_type_decl)
text = ldv_copy_str (ldv_type_decl);
*text = ldv_copy_str (ldv_type_decl);
else
internal_error ("no function signature was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "call_line"))
{
if (ldv_func_signature)
number = ldv_func_signature->call_line;
*number = ldv_func_signature->call_line;
else
internal_error ("no function signature was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "decl_line"))
{
if (ldv_func_signature)
number = ldv_func_signature->decl_line;
*number = ldv_func_signature->decl_line;
else
internal_error ("no function signature was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "use_line"))
{
if (ldv_func_signature)
number = ldv_func_signature->use_line;
*number = ldv_func_signature->use_line;
else if (ldv_var_signature)
number = ldv_var_signature->use_line;
*number = ldv_var_signature->use_line;
else
internal_error ("no function signature was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "path"))
{
if (ldv_func_signature)
text = ldv_copy_str (ldv_func_signature->file_path);
*text = ldv_copy_str (ldv_func_signature->file_path);
else if (ldv_var_signature)
text = ldv_copy_str (ldv_var_signature->file_path);
*text = ldv_copy_str (ldv_var_signature->file_path);
else if (ldv_type_signature)
text = ldv_copy_str (ldv_type_signature->file_path);
*text = ldv_copy_str (ldv_type_signature->file_path);
else
internal_error ("no signature was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "proceed"))
{
if (ldv_func_call)
text = ldv_get_text (ldv_func_call);
*text = ldv_get_text (ldv_func_call);
}
else if (!strcmp (pattern->name, "res"))
text = ldv_copy_str (LDV_FUNC_RES);
*text = ldv_copy_str (LDV_FUNC_RES);
else if (!strcmp (pattern->name, "ret_type"))
text = ldv_copy_str (LDV_FUNC_RET_TYPE);
*text = ldv_copy_str (LDV_FUNC_RET_TYPE);
else if (!strcmp (pattern->name, "ret_type_str"))
text = ldv_print_ret_type_str ();
*text = ldv_print_ret_type_str ();
else if (!strcmp (pattern->name, "var_name"))
{
if (ldv_var_name)
text = ldv_copy_str (ldv_var_name);
*text = ldv_copy_str (ldv_var_name);
else
internal_error ("no variable name was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "var_type_name"))
{
if (ldv_var_type_name)
text = ldv_copy_str (ldv_var_type_name);
*text = ldv_copy_str (ldv_var_type_name);
else
internal_error ("no variable type name was found for aspect pattern \"%s\"", pattern->name);
}
else if (!strcmp (pattern->name, "arg_sign"))
text = ldv_copy_str (ldv_get_arg_sign (pattern->arg_numb));
*text = ldv_copy_str (ldv_get_arg_sign (pattern->arg_numb));
else if (!strcmp (pattern->name, "var_init_list"))
{
ldv_text = ldv_create_text ();
ldv_var_initializer = ldv_convert_initializer_to_internal (ldv_var_initializer_tree);

ldv_print_initializer (ldv_var_initializer, ldv_text, 0);
text = ldv_copy_str (ldv_get_text (ldv_text));
*text = ldv_copy_str (ldv_get_text (ldv_text));

ldv_free_text (ldv_text);
if (ldv_var_initializer)
Expand All @@ -586,19 +584,14 @@ ldv_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string
ldv_var_initializer = ldv_convert_initializer_to_internal (ldv_var_initializer_tree);

ldv_print_var_init_values (ldv_var_initializer, ldv_text);
text = ldv_copy_str (ldv_get_text (ldv_text));
*text = ldv_copy_str (ldv_get_text (ldv_text));

ldv_free_text (ldv_text);
if (ldv_var_initializer)
ldv_free_info_initializer (ldv_var_initializer);
}
else
internal_error ("aspect pattern \"%s\" wasn't weaved", pattern->name);

if (text)
*string = text;
else
*integer = number;
}

const char *
Expand Down
29 changes: 11 additions & 18 deletions libcpp/ldv-cpp-advice-weaver.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,18 +279,16 @@ ldv_cpp_undef (struct cpp_reader *pfile)
}

void
ldv_cpp_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **string, unsigned int *integer)
ldv_cpp_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **text, unsigned int *number)
{
char *text = NULL;
char *arg_value = NULL;
ldv_list_ptr arg_value_list = NULL;
unsigned int number = 0;
unsigned int i;

if ((!strcmp (pattern->name, "macro_signature")) || (!strcmp (pattern->name, "signature")))
text = ldv_cpp_print_macro_signature (ldv_i_match->i_macro);
*text = ldv_cpp_print_macro_signature (ldv_i_match->i_macro);
else if (!strcmp (pattern->name, "macro_name"))
text = ldv_copy_str (ldv_cpp_get_id_name (ldv_i_match->i_macro_aspect->macro_name));
*text = ldv_copy_str (ldv_cpp_get_id_name (ldv_i_match->i_macro_aspect->macro_name));
else if (!strcmp (pattern->name, "arg_val"))
{
for (i = 1, arg_value_list = ldv_i_match->i_macro->macro_param_value
Expand All @@ -301,7 +299,7 @@ ldv_cpp_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **st

if (i == pattern->arg_numb)
{
text = arg_value;
*text = arg_value;
break;
}
}
Expand All @@ -311,30 +309,25 @@ ldv_cpp_evaluate_aspect_pattern (ldv_aspect_pattern_ptr pattern, const char **st
}
}
else if (!strcmp (pattern->name, "arg_numb"))
number = ldv_list_len (ldv_i_match->i_macro->macro_param);
*number = ldv_list_len (ldv_i_match->i_macro->macro_param);
else if (!strcmp (pattern->name, "actual_args"))
{
text = ldv_get_actual_args ();
*text = ldv_get_actual_args ();
if (!text)
text = ldv_copy_str ("NULL");
*text = ldv_copy_str ("NULL");
}
else if (!strcmp (pattern->name, "path"))
text = ldv_copy_str (ldv_i_match->i_macro->file_path);
*text = ldv_copy_str (ldv_i_match->i_macro->file_path);
else if (!strcmp (pattern->name, "line"))
number = ldv_i_match->i_macro->line;
*number = ldv_i_match->i_macro->line;
else if (!strcmp (pattern->name, "expansion_path"))
text = ldv_copy_str (ldv_i_match->i_macro->expansion_file_path);
*text = ldv_copy_str (ldv_i_match->i_macro->expansion_file_path);
else if (!strcmp (pattern->name, "expansion_line"))
number = ldv_i_match->i_macro->expansion_line;
*number = ldv_i_match->i_macro->expansion_line;
else
{
LDV_CPP_FATAL_ERROR ("aspect pattern \"%s\" wasn't weaved", pattern->name);
}

if (text)
*string = text;
else
*integer = number;
}

char *
Expand Down

0 comments on commit 6254b7c

Please sign in to comment.