Ejemplo n.º 1
0
static GList*
database_symbol_list_member (IJsSymbol *obj)
{
	DatabaseSymbol* self = DATABASE_SYMBOL (obj);
	DatabaseSymbolPrivate *priv = DATABASE_SYMBOL_PRIVATE (self);

	GList *ret = NULL;
	ret = ijs_symbol_list_member (IJS_SYMBOL (priv->global));
	if (priv->local)
		ret = g_list_concat (ret, ijs_symbol_list_member (IJS_SYMBOL (priv->local)));
	ret = g_list_append (ret, g_strdup ("imports"));
	return ret;
}
Ejemplo n.º 2
0
GList*
database_symbol_list_member_with_line (DatabaseSymbol *object, gint line)
{
	g_assert (DATABASE_IS_SYMBOL (object));
	DatabaseSymbolPrivate *priv = DATABASE_SYMBOL_PRIVATE (object);

	GList *ret = NULL;
	ret = ijs_symbol_list_member (IJS_SYMBOL (priv->global));
	if (priv->local)
		ret = g_list_concat (ret, local_symbol_list_member_with_line (priv->local, line));
	ret = g_list_append (ret, g_strdup ("imports"));
	return ret;
}
Ejemplo n.º 3
0
static GList*
node_symbol_list_member (IJsSymbol *obj)
{
	NodeSymbol* self = NODE_SYMBOL (obj);
	NodeSymbolPrivate *priv = NODE_SYMBOL_PRIVATE(self);

	gchar *name = get_complex_node_type (priv->node, priv->my_cx);

	if (!name)
		return NULL;
	GList *t = js_context_get_member_list (priv->my_cx, name);
	if (t)
		return t;

	IJsSymbol *sym = global_search (name);
	if (sym)
		return ijs_symbol_list_member (sym);
	return NULL;
}
Ejemplo n.º 4
0
static IJsSymbol*
find (const gchar* name, IJsSymbol *sym)
{
	gchar *vname = NULL, *left = NULL;
	if (!sym)
		return NULL;
	if (!name)
		return NULL;
	int i;
	for (i = 0; i < strlen (name); i++)
	{
		if (name[i] != '.')
			continue;
		vname = g_strndup (name, i);
		left = g_strdup (name + i + 1);
		break;
	}
	if (!vname)
		vname = g_strdup (name);
	if (strlen (vname) == 0)
	{
		g_free (vname);
		g_free (left);
		return NULL;
	}
	gboolean is_func_call = *((vname + strlen (vname)) - 1) == ')';
	if (is_func_call)
		vname [strlen (vname) - 2] = '\0';
	GList *j;////TODO
	for (j = ijs_symbol_list_member (sym); j; j = g_list_next (j))
	{
		gchar *t = (gchar*)j->data;
//puts (t);
		if (strcmp (vname, t) != 0 )
			continue;
		if (!is_func_call)
		{
			if (!left)
				return ijs_symbol_get_member (sym, t);
			IJsSymbol *tjs = ijs_symbol_get_member (sym, t);
			IJsSymbol *ret = find (left, tjs);
			g_object_unref (tjs);
			return ret;
		}
		else
		{
			IJsSymbol *s = ijs_symbol_get_member (sym, t);
			if (!s)
				return NULL;
			if (ijs_symbol_get_base_type (s) != BASE_FUNC)
			{
				g_object_unref (s);
				return NULL;
			}
			GList* rets = ijs_symbol_get_func_ret_type (s);
			g_object_unref (s);
			if (rets == NULL)
			{
				return NULL;
			}
			//TODO: Fix
			IJsSymbol *ret = global_search (rets->data);
			if (!ret)
				return NULL;
			if (!left)
				return ret;
			s = find (left, ret);
			g_object_unref (ret);
			return s;
		}
	}
	return NULL;
}