SF.net SVN: geany-plugins:[2118] trunk/geany-plugins/debugger/src
cesspit at users.sourceforge.net
cesspit at xxxxx
Thu Aug 4 05:48:55 UTC 2011
Revision: 2118
http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2118&view=rev
Author: cesspit
Date: 2011-08-04 05:48:55 +0000 (Thu, 04 Aug 2011)
Log Message:
-----------
debugger calltips cache
Modified Paths:
--------------
trunk/geany-plugins/debugger/src/callbacks.c
trunk/geany-plugins/debugger/src/debug.c
trunk/geany-plugins/debugger/src/debug.h
Modified: trunk/geany-plugins/debugger/src/callbacks.c
===================================================================
--- trunk/geany-plugins/debugger/src/callbacks.c 2011-08-03 09:49:27 UTC (rev 2117)
+++ trunk/geany-plugins/debugger/src/callbacks.c 2011-08-04 05:48:55 UTC (rev 2118)
@@ -89,7 +89,7 @@
scintilla_send_message(doc->editor->sci, SCI_SETMOUSEDWELLTIME, 500, 0);
/* set tab size for calltips */
- scintilla_send_message(doc->editor->sci, SCI_CALLTIPUSESTYLE, 20, NULL);
+ scintilla_send_message(doc->editor->sci, SCI_CALLTIPUSESTYLE, 20, (long)NULL);
/* set caret policy */
scintilla_send_message(doc->editor->sci, SCI_SETYCARETPOLICY, CARET_SLOP | CARET_JUMPS | CARET_EVEN , 3);
@@ -143,11 +143,10 @@
if (word->len)
{
- GString *calltip = debug_get_calltip_for_expression(word->str);
+ gchar *calltip = debug_get_calltip_for_expression(word->str);
if (calltip)
{
- scintilla_send_message (editor->sci, SCI_CALLTIPSHOW, nt->position, (long)calltip->str);
- g_string_free(calltip, TRUE);
+ scintilla_send_message (editor->sci, SCI_CALLTIPSHOW, nt->position, (long)calltip);
}
}
Modified: trunk/geany-plugins/debugger/src/debug.c
===================================================================
--- trunk/geany-plugins/debugger/src/debug.c 2011-08-03 09:49:27 UTC (rev 2117)
+++ trunk/geany-plugins/debugger/src/debug.c 2011-08-04 05:48:55 UTC (rev 2118)
@@ -145,6 +145,9 @@
{ NULL, NULL }
};
+/* calltips cache */
+static GHashTable *calltips = NULL;
+
/*
* Handlers for GUI maked changes in watches
*/
@@ -547,6 +550,9 @@
/* update debug state */
debug_state = DBS_STOPPED;
+ /* clear calltips cache */
+ g_hash_table_remove_all(calltips);
+
/* if the stop was requested for asyncronous exitig -
* stop debug module and exit */
if (exit_pending)
@@ -719,6 +725,10 @@
g_list_free(read_only_pages);
read_only_pages = NULL;
+ /* clear and destroy calltips cache */
+ g_hash_table_destroy(calltips);
+ calltips = NULL;
+
/* enable widgets */
enable_sensitive_widgets(TRUE);
@@ -1160,41 +1170,52 @@
* return list of strings for the calltip
* first line is a header, others should be shifted right with tab
*/
-GString* debug_get_calltip_for_expression(gchar* expression)
+gchar* debug_get_calltip_for_expression(gchar* expression)
{
- GString *calltip = NULL;
-
- variable *var = active_module->add_watch(expression);
- if (var)
+ gchar *calltip = NULL;
+ if (!calltips || !(calltip = g_hash_table_lookup(calltips, expression)))
{
- calltip = get_calltip_line(var, TRUE);
- if (var->has_children)
+ GString *calltip_str = NULL;
+ variable *var = active_module->add_watch(expression);
+ if (var)
{
- int lines_left = MAX_CALLTIP_HEIGHT - 1;
- GList* children = active_module->get_children(var->internal->str);
- GList* child = children;
- while(child && lines_left)
+ calltip_str = get_calltip_line(var, TRUE);
+ if (var->has_children)
{
- variable *varchild = (variable*)child->data;
- GString *child_string = get_calltip_line(varchild, FALSE);
- g_string_append_printf(calltip, "\n%s", child_string->str);
- g_string_free(child_string, TRUE);
+ int lines_left = MAX_CALLTIP_HEIGHT - 1;
+ GList* children = active_module->get_children(var->internal->str);
+ GList* child = children;
+ while(child && lines_left)
+ {
+ variable *varchild = (variable*)child->data;
+ GString *child_string = get_calltip_line(varchild, FALSE);
+ g_string_append_printf(calltip_str, "\n%s", child_string->str);
+ g_string_free(child_string, TRUE);
- child = child->next;
- lines_left--;
+ child = child->next;
+ lines_left--;
+ }
+ if (!lines_left && child)
+ {
+ g_string_append(calltip_str, "\n\t\t........");
+ }
+ g_list_foreach(children, (GFunc)variable_free, NULL);
+ g_list_free(children);
}
- if (!lines_left && child)
+
+ active_module->remove_watch(var->internal->str);
+ variable_free(var);
+
+ calltip = g_string_free(calltip_str, FALSE);
+
+ if (!calltips)
{
- g_string_append(calltip, "\n\t\t........");
+ calltips = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)g_free);
}
- g_list_foreach(children, (GFunc)variable_free, NULL);
- g_list_free(children);
+ g_hash_table_insert(calltips, g_strdup(expression), calltip);
}
+ }
- active_module->remove_watch(var->internal->str);
- variable_free(var);
- }
-
return calltip;
}
Modified: trunk/geany-plugins/debugger/src/debug.h
===================================================================
--- trunk/geany-plugins/debugger/src/debug.h 2011-08-03 09:49:27 UTC (rev 2117)
+++ trunk/geany-plugins/debugger/src/debug.h 2011-08-04 05:48:55 UTC (rev 2118)
@@ -54,5 +54,5 @@
gboolean debug_current_instruction_have_sources();
void debug_jump_to_current_instruction();
void debug_on_file_open(GeanyDocument *doc);
-GString* debug_get_calltip_for_expression(gchar* expression);
+gchar* debug_get_calltip_for_expression(gchar* expression);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Plugins-Commits
mailing list