static IJsSymbol* database_symbol_get_member (IJsSymbol *obj, const gchar * name) { DatabaseSymbol* self = DATABASE_SYMBOL (obj); DatabaseSymbolPrivate *priv = DATABASE_SYMBOL_PRIVATE (self); if (!name || strlen (name) == 0) { g_object_ref (priv->local); return IJS_SYMBOL (priv->local); } GList *i; for (i = priv->symbols; i; i = g_list_next (i)) { IJsSymbol *t = IJS_SYMBOL (i->data); if (strncmp (name, ijs_symbol_get_name (t), strlen (ijs_symbol_get_name (t))) != 0 ) continue; if (strlen (name + strlen (ijs_symbol_get_name (t))) == 0) { g_object_ref (t); return t; } return find (name + strlen (ijs_symbol_get_name (t)) + 1, t); } IJsSymbol *ret = find (name, IJS_SYMBOL (priv->local)); if (!ret) ret = find (name, IJS_SYMBOL (priv->global)); return ret; }
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; }
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; }
static IJsSymbol* node_symbol_get_member (IJsSymbol *obj, const gchar * name) { NodeSymbol* self = NODE_SYMBOL (obj); NodeSymbolPrivate *priv = NODE_SYMBOL_PRIVATE(self); gchar *tname = get_complex_node_type (priv->node, priv->my_cx); if (!tname) return NULL; if (js_context_get_member_list (priv->my_cx, tname)) //TODO:Fix mem leak { return IJS_SYMBOL ( node_symbol_new (js_context_get_member (priv->my_cx, tname, name), name, priv->my_cx)); } IJsSymbol *t = global_search (tname); if (t) return ijs_symbol_get_member (t, name); return NULL; }