[anjuta] fixed bug in js-debugger & language-support-js



commit b94a22b771f6fb25ecefcd3cfb63f731a0dd4862
Author: Maxim Ermilov <zaspire rambler ru>
Date:   Mon Dec 28 02:10:36 2009 +0300

    fixed bug in js-debugger & language-support-js
    
    js-debugger:
    1. Fixed crash on debugger error and show user friendly
    message.
    2. Fixed dead lock in js sample.
    3. Respect 'port' option in remote debug.
    4. Fixed errors(deal with absolute scipts name and NULL objects) in
    debug.c
    5. Implement idebugger_interrupt
    language-support-plugin:
    1. Add option 'min length of str for completion'.
    2. does not unref NULL objects.
    3. Fixed regression(Missed semicolon does not highlighted).

 plugins/js-debugger/debugger-js.c                  |   33 +++++++++--
 plugins/js-debugger/debugger-js.h                  |    2 +-
 plugins/js-debugger/debugger-server.c              |   56 +++++++++++++++-----
 plugins/js-debugger/plugin.c                       |   37 ++++++++++---
 .../anjuta-language-javascript.ui                  |   40 +++++++++++---
 plugins/language-support-js/plugin.c               |   13 ++++-
 .../templates/js_minimal/src/debug.c               |   14 ++++--
 .../symbol-db/anjuta-tags/js_parser/js-context.c   |    3 +-
 plugins/symbol-db/anjuta-tags/js_parser/js-node.c  |    6 ++-
 plugins/symbol-db/anjuta-tags/jscript.c            |    1 -
 10 files changed, 159 insertions(+), 46 deletions(-)
---
diff --git a/plugins/js-debugger/debugger-js.c b/plugins/js-debugger/debugger-js.c
index 6baaa67..887cd11 100644
--- a/plugins/js-debugger/debugger-js.c
+++ b/plugins/js-debugger/debugger-js.c
@@ -41,6 +41,7 @@ struct _DebuggerJsPrivate
 	pid_t pid;
 	DebuggerServer *server;
 	GList *task_queue;
+	gint port;
 };
 
 #define DEBUGGER_JS_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEBUGGER_TYPE_JS, DebuggerJsPrivate))
@@ -97,6 +98,7 @@ debugger_js_init (DebuggerJs *object)
 	priv->breakpoint = NULL;
 	priv->BID = 1234;
 	priv->pid = 0;
+	priv->port = 0;
 	priv->task_queue = NULL;
 
 	priv->terminal = NULL;
@@ -468,7 +470,7 @@ on_error (DebuggerServer *server, const gchar * error, gpointer user_data)
 	priv->started = TRUE;
 	priv->busy = FALSE;
 
-	g_signal_emit_by_name (object, "DebuggerError", error, G_TYPE_NONE);
+	g_signal_emit (object, js_signals[DEBUGGER_ERROR], 0, error);
 }
 
 DebuggerJs*
@@ -482,14 +484,18 @@ debugger_js_new (int port, const gchar* filename, IAnjutaDebugger *data)
 
 	priv->data = data;
 	priv->terminal = anjuta_shell_get_interface (ANJUTA_PLUGIN (data)->shell, IAnjutaTerminal, NULL);
-	if (priv->terminal)
+	if (!priv->terminal)
 	{
 		g_warning ("Terminal plugin does not installed.");
 	}
 	priv->server = debugger_server_new (port);
+	priv->port = port;
 
 	if (priv->server == NULL)
-		g_error ("Can not create server."); //TODO:FIX THIS
+	{
+		g_object_unref (object);
+		return NULL;
+	}
 	g_signal_connect (priv->server, "data-arrived", G_CALLBACK (on_data_arrived), object);
 	g_signal_connect (priv->server, "error", G_CALLBACK (on_error), object);
 
@@ -529,10 +535,20 @@ debugger_js_set_work_dir (DebuggerJs *object, const gchar* work_dir)
 }
 
 void
-debugger_js_start_remote (DebuggerJs *object)
+debugger_js_start_remote (DebuggerJs *object, gint port)
 {
 	DebuggerJsPrivate *priv = DEBUGGER_JS_PRIVATE(object);
 
+	g_assert (DEBUGGER_IS_SERVER (priv->server));
+	g_object_unref (priv->server);
+	priv->server = debugger_server_new (port);
+	if (!priv->server) {
+		on_error (NULL, _("Error: cant bind port"), object);
+		return;
+	}
+	g_signal_connect (priv->server, "data-arrived", G_CALLBACK (on_data_arrived), object);
+	g_signal_connect (priv->server, "error", G_CALLBACK (on_error), object);
+
 	g_signal_emit_by_name (priv->data, "program-running");
 	priv->started = TRUE;
 }
@@ -558,7 +574,11 @@ debugger_js_start (DebuggerJs *object, const gchar *arguments)
 {
 	DebuggerJsPrivate *priv = DEBUGGER_JS_PRIVATE(object);
 
-	gchar *str = g_strconcat (priv->filename, " --debug 127.0.0.1 ", arguments, NULL);
+	g_assert (priv->port);
+
+	gchar *port = g_strdup_printf ("--js-port %d", priv->port);
+	gchar *str = g_strconcat (priv->filename, " --debug 127.0.0.1 ", port, arguments, NULL);
+	g_free(port);
 
 	g_assert (priv->terminal != NULL);
 
@@ -617,7 +637,8 @@ debugger_js_stop (DebuggerJs *object)
 
 	debugger_server_stop (priv->server);
 	priv->exited = TRUE;
-	kill (priv->pid, SIGKILL);
+	if (priv->pid)
+		kill (priv->pid, SIGKILL);
 	g_signal_emit_by_name (priv->data, "debugger-ready", IANJUTA_DEBUGGER_STOPPED);
 }
 
diff --git a/plugins/js-debugger/debugger-js.h b/plugins/js-debugger/debugger-js.h
index 6aede02..1f2231b 100644
--- a/plugins/js-debugger/debugger-js.h
+++ b/plugins/js-debugger/debugger-js.h
@@ -51,7 +51,7 @@ GType debugger_js_get_type (void) G_GNUC_CONST;
 DebuggerJs* debugger_js_new (int port, const gchar* filename, IAnjutaDebugger *data);
 IAnjutaDebuggerState debugger_js_get_state (DebuggerJs *object);
 void debugger_js_set_work_dir (DebuggerJs *object, const gchar* work_dir);
-void debugger_js_start_remote (DebuggerJs *object);
+void debugger_js_start_remote (DebuggerJs *object, gint port);
 void debugger_js_start (DebuggerJs *object, const gchar *arguments);
 void debugger_js_continue (DebuggerJs *object);
 void debugger_js_stepin (DebuggerJs *object);
diff --git a/plugins/js-debugger/debugger-server.c b/plugins/js-debugger/debugger-server.c
index 205ebc4..54d7aff 100644
--- a/plugins/js-debugger/debugger-server.c
+++ b/plugins/js-debugger/debugger-server.c
@@ -25,6 +25,10 @@
 #include <unistd.h>
 #include <string.h>
 
+#include <glib.h>
+#include <errno.h>
+#include <glib/gi18n.h>
+
 #include "debugger-server.h"
 
 typedef struct _DebuggerServerPrivate DebuggerServerPrivate;
@@ -35,6 +39,7 @@ struct _DebuggerServerPrivate
 	int server_socket;
 	int socket;
 	gboolean work;
+	guint id;
 };
 
 #define DEBUGGER_SERVER_PRIVATE(o)  (G_TYPE_INSTANCE_GET_PRIVATE ((o), DEBUGGER_TYPE_SERVER, DebuggerServerPrivate))
@@ -46,6 +51,9 @@ enum
 	LAST_SIGNAL
 };
 
+#define CANT_SEND _("App exited unexpectedly.")
+#define CANT_RECV _("App exited unexpectedly.")
+
 
 static guint server_signals[LAST_SIGNAL] = { 0 };
 
@@ -57,6 +65,7 @@ debugger_server_init (DebuggerServer *object)
 	DebuggerServerPrivate *priv = DEBUGGER_SERVER_PRIVATE (object);
 	priv->in = NULL;
 	priv->out = NULL;
+	priv->id = 0;
 	priv->server_socket = 0;
 	priv->socket = 0;
 	priv->work = TRUE;
@@ -68,6 +77,12 @@ debugger_server_finalize (GObject *object)
 	DebuggerServerPrivate *priv = DEBUGGER_SERVER_PRIVATE (object);
 
 	g_assert (priv);
+	if (priv->socket)
+	{
+		close (priv->socket);
+	}
+	if (priv->id)
+		g_source_remove (priv->id);
 
 	g_list_foreach (priv->in, (GFunc)g_free, NULL);
 	g_list_free (priv->in);
@@ -107,7 +122,7 @@ debugger_server_class_init (DebuggerServerClass *klass)
 		              NULL, NULL,
 		              g_cclosure_marshal_VOID__VOID,
 		              G_TYPE_NONE, 0);
-	server_signals[DATA_ARRIVED] =
+	server_signals[ERROR_SIGNAL] =
 		g_signal_new ("error",
 		              G_OBJECT_CLASS_TYPE (klass),
 		              G_SIGNAL_RUN_FIRST,
@@ -141,7 +156,8 @@ SourceFunc (gpointer d)
 			{
 				if ((priv->socket = accept(priv->server_socket, cp, &sz)) == -1)
 				{
-					g_signal_emit_by_name (object, "error", "Can not accept.", G_TYPE_NONE);
+					g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, "Can not accept.");
+					return FALSE;
 				}
 				close (priv->server_socket);
 			}
@@ -152,7 +168,8 @@ SourceFunc (gpointer d)
 		int len;
 		if (ioctl (priv->socket, FIONREAD, &len) == -1)
 		{
-			g_signal_emit_by_name (object, "error", "Error in ioctl call.", G_TYPE_NONE);
+			g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, "Error in ioctl call.");
+			return FALSE;
 		}
 		if (len > 4)
 		{
@@ -160,51 +177,58 @@ SourceFunc (gpointer d)
 			gchar *buf;
 			if (recv (priv->socket, &len, 4, 0) == -1)
 			{
-				g_signal_emit_by_name (object, "error", "Can not recv.", G_TYPE_NONE);
+				g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, CANT_RECV);
+				return FALSE;
 			}
 			if (len <= 0)
 			{
-				g_signal_emit_by_name (object, "error", "Incorrect data recived.", G_TYPE_NONE);
+				g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, "Incorrect data recived.");
+				return FALSE;
 			}
 			buf = g_new (char, len + 1);
 			do
 			{
 				if (ioctl (priv->socket, FIONREAD, &in) == -1)
 				{
-					g_signal_emit_by_name (object, "error", "Error in ioctl call.", G_TYPE_NONE);
+					g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, "Error in ioctl call.");
+					return FALSE;
 				}
 				if (in < len)
 					usleep (20);
 			} while (in < len);
 			if (recv (priv->socket, buf, len, 0) == -1)
 			{
-				g_signal_emit_by_name (object, "error", "Can not recv.", G_TYPE_NONE);
+				g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, CANT_RECV);
+				return FALSE;
 			}
 			buf [len] = '\0';
 
 			priv->in = g_list_append (priv->in, buf);
-			g_signal_emit_by_name (object, "data-arrived", G_TYPE_NONE);
+			g_signal_emit (object, server_signals[DATA_ARRIVED], 0);
 		}
 		while (priv->out != NULL)
 		{
 			size = strlen ((gchar*)priv->out->data) + 1;
 			if (send(priv->socket, &size, 4, 0) == -1)
 			{
-				g_signal_emit_by_name (object, "error", "Can not send.", G_TYPE_NONE);
+				g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, CANT_SEND);
+				return FALSE;
 			}
 			if (send(priv->socket, priv->out->data, size, 0) == -1)
 			{
-				g_signal_emit_by_name (object, "error", "Can not send.", G_TYPE_NONE);
+				g_signal_emit (object, server_signals[ERROR_SIGNAL], 0, CANT_SEND);
+				return FALSE;
 			}
 			g_free (priv->out->data);
 			priv->out = g_list_delete_link (priv->out, priv->out);
 		}
-g_signal_emit_by_name (object, "data-arrived", G_TYPE_NONE);//TODO:FIX
+g_signal_emit (object, server_signals[DATA_ARRIVED], 0);//TODO:FIX
 	}
 
 	if (!priv->work)
 	{
 		close (priv->socket);
+		priv->socket = 0;
 	}
 	return priv->work;
 }
@@ -227,12 +251,15 @@ debugger_server_new (gint port)
 	serverAddr.sin_addr.s_addr= htonl (INADDR_ANY);
 	serverAddr.sin_port = htons (port);
 	setsockopt (priv->server_socket, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
-
 	if (bind (priv->server_socket, ((struct sockaddr*)&serverAddr), sizeof (serverAddr)) == -1)
+	{
+		g_warning("%s\n", strerror(errno));
+		g_object_unref (object);
 		return NULL;
+	}
 	listen (priv->server_socket , 5);
 
-	g_timeout_add (2, (GSourceFunc)SourceFunc, object);
+	priv->id = g_timeout_add (2, (GSourceFunc)SourceFunc, object);
 
 	return object;
 }
@@ -249,7 +276,8 @@ void
 debugger_server_stop (DebuggerServer *object)
 {
 	DebuggerServerPrivate *priv = DEBUGGER_SERVER_PRIVATE (object);
-	priv->work = FALSE;
+	if (priv)
+		priv->work = FALSE;
 }
 
 gchar*
diff --git a/plugins/js-debugger/plugin.c b/plugins/js-debugger/plugin.c
index f14dedb..d30797a 100644
--- a/plugins/js-debugger/plugin.c
+++ b/plugins/js-debugger/plugin.c
@@ -45,9 +45,8 @@ struct _JSDbgClass
 };
 
 static gpointer parent_class;
-#undef DEBUG_PRINT
-#define DEBUG_PRINT g_warning
-#define DEBUGGER_PORT 1235
+
+#define DEBUGGER_PORT 2234
 
 static gboolean
 js_debugger_activate (AnjutaPlugin *plugin)
@@ -135,9 +134,13 @@ idebugger_load (IAnjutaDebugger *plugin, const gchar *file, const gchar* mime_ty
 	JSDbg *self = ANJUTA_PLUGIN_JSDBG (plugin);
 	if (self->debugger != NULL)
 		g_object_unref (self->debugger);
-	self->debugger = debugger_js_new (DEBUGGER_PORT, file, plugin);
-	g_signal_connect (self->debugger, "DebuggerError", G_CALLBACK (on_error), self);
-	return TRUE;
+	if ( (self->debugger = debugger_js_new (DEBUGGER_PORT, file, plugin)) )
+	{
+		g_signal_connect (self->debugger, "DebuggerError", G_CALLBACK (on_error), self);
+		return TRUE;
+	}
+	on_error (NULL, _("Error: cant bind port"), self);
+	return FALSE;
 }
 
 static gboolean
@@ -193,7 +196,23 @@ idebugger_connect (IAnjutaDebugger *plugin, const gchar *server, const gchar *ar
 {
 	DEBUG_PRINT ("%s", "connect: Not Implemented");
 	JSDbg *self = ANJUTA_PLUGIN_JSDBG (plugin);
-	debugger_js_start_remote (self->debugger);
+	gint port = DEBUGGER_PORT;
+
+	if (server)
+	{
+		gint len = strlen (server), k;
+
+		for (k = len - 1; k >= 0; k--)
+		{
+			if (server[k] > '9' || server[k] < '0')
+				break;
+			port = port * 10 + server[k] - '0';
+		}
+		k++;
+		if (k != len - 1)
+			sscanf (server + k, "%d", &port);
+	}
+	debugger_js_start_remote (self->debugger, port);
 	return TRUE;
 }
 
@@ -276,7 +295,9 @@ idebugger_interrupt (IAnjutaDebugger *plugin, GError **err)
 {
 	DEBUG_PRINT ("%s", "interrupt: Not Implemented");
 
-	return FALSE;
+	JSDbg *self = ANJUTA_PLUGIN_JSDBG (plugin);
+	debugger_js_stop (self->debugger);
+	return TRUE;
 }
 
 static gboolean
diff --git a/plugins/language-support-js/anjuta-language-javascript.ui b/plugins/language-support-js/anjuta-language-javascript.ui
index f1627c3..d47cc0a 100644
--- a/plugins/language-support-js/anjuta-language-javascript.ui
+++ b/plugins/language-support-js/anjuta-language-javascript.ui
@@ -8,6 +8,12 @@
       <column type="gchararray"/>
     </columns>
   </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="value">4</property>
+    <property name="upper">10</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkWindow" id="preferences_dialog">
     <property name="title" translatable="yes">window1</property>
     <child>
@@ -108,7 +114,7 @@
             <child>
               <object class="GtkLabel" id="label2">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">Gir repository's directory:</property>
+                <property name="label" translatable="yes">Gir repository's directory:   </property>
                 <property name="use_underline">True</property>
                 <property name="mnemonic_widget">preferences_entry:text::0:javascript.girdir</property>
               </object>
@@ -139,7 +145,7 @@
             <child>
               <object class="GtkLabel" id="label3">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">Gjs repository's directory:</property>
+                <property name="label" translatable="yes">Gjs repository's directory:   </property>
                 <property name="use_underline">True</property>
                 <property name="mnemonic_widget">preferences_entry:text::0:javascript.girdir</property>
               </object>
@@ -164,13 +170,31 @@
           </packing>
         </child>
         <child>
-          <object class="GtkCheckButton" id="preferences_toggle:bool:1:1:javascript.auto">
-            <property name="label" translatable="yes">Auto code complete</property>
+          <object class="GtkHBox" id="hbox4">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
-            <property name="xalign">0.49000000953674316</property>
-            <property name="draw_indicator">True</property>
+            <child>
+              <object class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Min character for completion </property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSpinButton" id="preferences_spin:int:3:1:javascript.min">
+                  <property name="visible">True</property>
+                  <property name="can_focus">True</property>
+                  <property name="invisible_char">&#x2022;</property>
+                  <property name="adjustment">adjustment2</property>
+                  <property name="climb_rate">1</property>
+                  <property name="numeric">True</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="position">3</property>
diff --git a/plugins/language-support-js/plugin.c b/plugins/language-support-js/plugin.c
index 7d22117..b381df9 100644
--- a/plugins/language-support-js/plugin.c
+++ b/plugins/language-support-js/plugin.c
@@ -40,7 +40,7 @@
 #define ICON_FILE "anjuta-language-cpp-java-plugin.png"
 #define UI_FILE ANJUTA_UI_DIR"/anjuta-language-javascript.xml"
 
-#define AUTO_CODECOMPLETE "javascript.auto"
+#define MIN_CODECOMPLETE "javascript.min"
 #define ADD_BRACE_AFTER_FUNCCALL "javascript.add_brace_after_func"
 #define SHOW_CALLTIPS "javascript.show_calltips"
 
@@ -75,6 +75,7 @@ js_support_plugin_activate (AnjutaPlugin *plugin)
 					 on_value_removed_current_editor,
 					 plugin);
 
+	js_support_plugin->prefs = anjuta_shell_get_preferences (plugin->shell, NULL);
 	return TRUE;
 }
 
@@ -431,6 +432,15 @@ iprovider_populate (IAnjutaProvider *obj, IAnjutaIterable* iter, GError **err)
 
 	if (!str)
 		return;
+
+	g_assert (plugin->prefs);
+
+	if (strlen (str) < anjuta_preferences_get_int (plugin->prefs, MIN_CODECOMPLETE))
+	{
+		ianjuta_editor_assist_proposals ( IANJUTA_EDITOR_ASSIST (plugin->current_editor), obj,  NULL,  TRUE, NULL);
+		return;
+	}
+
 	gchar *file = file_completion (IANJUTA_EDITOR (plugin->current_editor), &depth);
 	gint i;
 	DEBUG_PRINT ("JSLang: Auto complete for %s (TMFILE=%s)", str, file);
@@ -475,6 +485,7 @@ iprovider_populate (IAnjutaProvider *obj, IAnjutaIterable* iter, GError **err)
 		ianjuta_editor_assist_proposals ( IANJUTA_EDITOR_ASSIST (plugin->current_editor), obj,  nsuggest,  TRUE, NULL);
 		g_list_free (nsuggest);
                 trash = suggestions;
+		return;
 	}
 	ianjuta_editor_assist_proposals ( IANJUTA_EDITOR_ASSIST (plugin->current_editor), obj,  NULL,  TRUE, NULL);
 }
diff --git a/plugins/project-wizard/templates/js_minimal/src/debug.c b/plugins/project-wizard/templates/js_minimal/src/debug.c
index cf81699..442b4ed 100644
--- a/plugins/project-wizard/templates/js_minimal/src/debug.c
+++ b/plugins/project-wizard/templates/js_minimal/src/debug.c
@@ -327,10 +327,14 @@ variable_get_desc(JSContext * cx, JSObject * obj)
 {
 	gchar *ret = g_strdup("");
 	JSPropertyDescArray pda;
-	JS_GetPropertyDescArray(cx, obj, &pda);
 	uint32 i;
 	gboolean first = TRUE;
 
+	if (!obj)
+		return ret;
+
+	JS_GetPropertyDescArray(cx, obj, &pda);
+
 	for (i = 0; i < pda.length; i++) {
 		JSString *str;
 		gchar *name;
@@ -420,9 +424,11 @@ command_get()
 		if (command_has) {
 			ret = command;
 			command_has--;
-		} else
+			g_mutex_unlock(command_mutex);
+		} else {
+			g_mutex_unlock(command_mutex);
 			usleep(2);
-		g_mutex_unlock(command_mutex);
+		}
 	}
 	return ret;
 }
@@ -433,7 +439,7 @@ NewScriptHook(JSContext * cx, const char *filename, uintN lineno,
 {
 	uintN i;
 	uintN col;
-	if (strstr(filename, ".js") == NULL || strlen(filename) > 10 || !script)
+	if (strstr(filename, ".js") == NULL || strncmp(filename, "/usr/", 5) == 0 || !script)
 		return;
 	DEBUG_PRINT("New Script : %s\n", filename);
 	col = JS_PCToLineNumber(cx, script, script->code + script->length - 1);
diff --git a/plugins/symbol-db/anjuta-tags/js_parser/js-context.c b/plugins/symbol-db/anjuta-tags/js_parser/js-context.c
index 796a891..007e79e 100644
--- a/plugins/symbol-db/anjuta-tags/js_parser/js-context.c
+++ b/plugins/symbol-db/anjuta-tags/js_parser/js-context.c
@@ -56,7 +56,8 @@ js_context_finalize (GObject *object)
 	JSContext *self = JS_CONTEXT (object);
 	JSContextPrivate *priv = JS_CONTEXT_GET_PRIVATE (self);
 
-	g_object_unref (priv->node);
+	if (priv->node)
+		g_object_unref (priv->node);
 
 	g_list_foreach (self->local_var, (GFunc)g_free, NULL);
 	g_list_free (self->local_var);
diff --git a/plugins/symbol-db/anjuta-tags/js_parser/js-node.c b/plugins/symbol-db/anjuta-tags/js_parser/js-node.c
index 7c995da..374374e 100644
--- a/plugins/symbol-db/anjuta-tags/js_parser/js-node.c
+++ b/plugins/symbol-db/anjuta-tags/js_parser/js-node.c
@@ -176,8 +176,7 @@ js_node_new_from_file (const gchar *name)
 	JSNodePrivate *priv;
 
 	line_missed_semicolon = NULL;
-	global = g_object_new (JS_TYPE_NODE, NULL);
-	priv = JS_NODE_GET_PRIVATE (global);
+	global = NULL;
 	yyset_lineno (1);
 	YY_BUFFER_STATE b = yy_create_buffer (f, 10000);
 	yy_switch_to_buffer (b);
@@ -187,6 +186,9 @@ js_node_new_from_file (const gchar *name)
 	fclose (f);
 
 	yy_delete_buffer (b);
+	if (!global)
+		return g_object_new (JS_TYPE_NODE, NULL);
+	priv = JS_NODE_GET_PRIVATE (global);
 
 	priv->missed = line_missed_semicolon;
 	return global;
diff --git a/plugins/symbol-db/anjuta-tags/jscript.c b/plugins/symbol-db/anjuta-tags/jscript.c
index f9eda46..a506e93 100755
--- a/plugins/symbol-db/anjuta-tags/jscript.c
+++ b/plugins/symbol-db/anjuta-tags/jscript.c
@@ -186,7 +186,6 @@ static kindOption JsKinds [] = {
 static void
 initialize (const langType language)
 {
-g_log_set_always_fatal(G_LOG_LEVEL_CRITICAL);
 	g_type_init ();
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]