From 03312371daafe3a94d888474eb53d7361d5ed432 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 28 May 2015 17:40:55 +0200 Subject: cssmatcher: Speed up common matching first-child and last-child are the most common usages of the nth-child machinery, so special-casing them makes sense. --- gtk/gtkcssmatcher.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'gtk/gtkcssmatcher.c') diff --git a/gtk/gtkcssmatcher.c b/gtk/gtkcssmatcher.c index 14597ccf1b..a15232764b 100644 --- a/gtk/gtkcssmatcher.c +++ b/gtk/gtkcssmatcher.c @@ -358,6 +358,18 @@ gtk_css_matcher_node_nth_child (GtkCssNode *node, { int pos, x; + /* special-case the common "first-child" and "last-child" */ + if (a == 0) + { + while (b > 0 && node != NULL) + { + b--; + node = prev_node_func (node); + } + + return b == 0 && node == NULL; + } + /* count nodes */ for (pos = 0; node != NULL; pos++) node = prev_node_func (node); @@ -366,9 +378,6 @@ gtk_css_matcher_node_nth_child (GtkCssNode *node, * and return TRUE if X is integer >= 0 */ x = pos - b; - if (a == 0) - return x == 0; - if (x % a) return FALSE; -- cgit v1.2.1