Lines Matching defs:tree

74 /* Inserts all the classes defined in module in a tree of classes that
75 resembles the class hierarchy. This tree is traversed in preorder
102 /* This function is used when building the class tree used to send
103 ordinately the +load message to all classes needing it. The tree
107 This tree will contain classes which are being loaded (or have just
115 Unfortunately, the tree might also contain classes which had been
121 building the tree.
146 /* Creates a tree of classes whose topmost class is directly inherited
147 from `upper' and the bottom class in this tree is
148 `bottom_class'. The classes in this tree are super classes of
149 `bottom_class'. `subclasses' member of each tree node point to the
150 next subclass tree node. */
159 objc_class_tree *tree, *prev;
166 tree = prev = objc_calloc (1, sizeof (objc_class_tree));
171 tree = objc_calloc (1, sizeof (objc_class_tree));
172 tree->class = superclass;
173 tree->subclasses = list_cons (prev, tree->subclasses);
175 prev = tree;
178 return tree;
181 /* Insert the `class' into the proper place in the `tree' class
182 hierarchy. This function returns a new tree if the class has been
183 successfully inserted into the tree or NULL if the class is not
184 part of the classes hierarchy described by `tree'. This function is
189 __objc_tree_insert_class (objc_class_tree *tree, Class class)
191 DEBUG_PRINTF ("__objc_tree_insert_class: tree = %x, class = %s\n",
192 tree, class->name);
194 if (tree == NULL)
196 else if (class == tree->class)
200 return tree;
202 else if (class_superclass_of_class (class) == tree->class)
204 /* If class is a direct subclass of tree->class then add class to the
207 struct objc_list *list = tree->subclasses;
213 the tree. */
218 return tree;
226 tree->subclasses = list_cons (node, tree->subclasses);
228 return tree;
232 /* The class is not a direct subclass of tree->class. Search for
234 struct objc_list *subclasses = tree->subclasses;
236 /* Precondition: the class must be a subclass of tree->class;
238 take the next tree. */
239 if (! class_is_subclass_of_class (class, tree->class))
249 class into its subtree and return the original tree
254 return tree;
259 list. Create a new tree of classes whose topmost class is a
260 direct subclass of tree->class. */
263 = create_tree_of_subclasses_inherited_from (class, tree->class);
264 tree->subclasses = list_cons (new_tree, tree->subclasses);
266 return tree;
271 /* This function inserts `class' in the right tree hierarchy classes. */
277 objc_class_tree *tree;
282 tree = __objc_tree_insert_class (list_node->head, class);
283 if (tree)
285 list_node->head = tree;
301 /* Traverse tree in preorder. Used to send +load. */
304 objc_preorder_traverse (objc_class_tree *tree,
310 (*function) (tree, level);
311 for (node = tree->subclasses; node; node = node->tail)
315 /* Traverse tree in postorder. Used to destroy a tree. */
318 objc_postorder_traverse (objc_class_tree *tree,
324 for (node = tree->subclasses; node; node = node->tail)
326 (*function) (tree, level);
329 /* Used to print a tree class hierarchy. */
333 __objc_tree_print (objc_class_tree *tree, int level)
339 printf ("%s\n", tree->class->name);
384 __objc_send_load (objc_class_tree *tree,
388 Class class = tree->class;
398 __objc_destroy_class_tree_node (objc_class_tree *tree,
401 objc_free (tree);
742 creates a tree of classes that resembles the class hierarchy. */
773 the classes tree hierarchy. */