about summary refs log tree commit diff stats
path: root/src/css
diff options
context:
space:
mode:
Diffstat (limited to 'src/css')
-rw-r--r--src/css/match.nim13
-rw-r--r--src/css/selectorparser.nim34
2 files changed, 25 insertions, 22 deletions
diff --git a/src/css/match.nim b/src/css/match.nim
index 737dd1d6..bb1acd9c 100644
--- a/src/css/match.nim
+++ b/src/css/match.nim
@@ -219,13 +219,14 @@ func matches*(element: Element; cxsel: ComplexSelector;
   var mdepends = DependencyInfo.default
   for i in countdown(cxsel.high, 0):
     var match = mtFalse
-    case cxsel[i].ct
+    let csel = cxsel[i]
+    case csel.ct
     of ctNone:
-      match = e.matches(cxsel[i], mdepends)
+      match = e.matches(csel, mdepends)
     of ctDescendant:
       e = e.parentElement
       while e != nil:
-        case e.matches(cxsel[i], mdepends)
+        case e.matches(csel, mdepends)
         of mtFalse: discard
         of mtTrue:
           match = mtTrue
@@ -235,19 +236,19 @@ func matches*(element: Element; cxsel: ComplexSelector;
     of ctChild:
       e = e.parentElement
       if e != nil:
-        match = e.matches(cxsel[i], mdepends)
+        match = e.matches(csel, mdepends)
     of ctNextSibling:
       let prev = e.previousElementSibling
       if prev != nil:
         e = prev
-        match = e.matches(cxsel[i], mdepends)
+        match = e.matches(csel, mdepends)
     of ctSubsequentSibling:
       let parent = e.parentNode
       for j in countdown(e.index - 1, 0):
         let child = parent.childList[j]
         if child of Element:
           let child = Element(child)
-          case child.matches(cxsel[i], mdepends)
+          case child.matches(csel, mdepends)
           of mtTrue:
             e = child
             match = mtTrue
diff --git a/src/css/selectorparser.nim b/src/css/selectorparser.nim
index 70da9119..e1dffcea 100644
--- a/src/css/selectorparser.nim
+++ b/src/css/selectorparser.nim
@@ -45,11 +45,11 @@ type
     failed: bool
     nested: bool
 
-  RelationType* {.size: sizeof(int) div 2.} = enum
-    rtExists, rtEquals, rtToken, rtBeginDash,
-    rtStartsWith, rtEndsWith, rtContains
+  RelationType* = enum
+    rtExists, rtEquals, rtToken, rtBeginDash, rtStartsWith, rtEndsWith,
+    rtContains
 
-  RelationFlag* {.size: sizeof(int) div 2.} = enum
+  RelationFlag* = enum
     rfNone, rfI, rfS
 
   SelectorRelation* = object
@@ -111,28 +111,29 @@ proc parseSelectorList(cvals: seq[CSSComponentValue]; factory: CAtomFactory;
 proc parseComplexSelector(state: var SelectorParser): ComplexSelector
 func `$`*(cxsel: ComplexSelector): string
 
-iterator items*(sels: CompoundSelector): Selector {.inline.} =
-  for it in sels.sels:
+iterator items*(csel: CompoundSelector): lent Selector {.inline.} =
+  for it in csel.sels:
     yield it
 
-func `[]`*(sels: CompoundSelector; i: int): Selector {.inline.} =
-  return sels.sels[i]
+func `[]`*(csel: CompoundSelector; i: int): lent Selector {.inline.} =
+  return csel.sels[i]
 
-func `[]`*(sels: CompoundSelector; i: BackwardsIndex): Selector {.inline.} =
-  return sels.sels[i]
+func `[]`*(csel: CompoundSelector; i: BackwardsIndex): lent Selector
+    {.inline.} =
+  return csel[csel.sels.len - int(i)]
 
-func len*(sels: CompoundSelector): int {.inline.} =
-  return sels.sels.len
+func len*(csel: CompoundSelector): int {.inline.} =
+  return csel.sels.len
 
-proc add*(sels: var CompoundSelector; sel: Selector) {.inline.} =
-  sels.sels.add(sel)
+proc add*(csel: var CompoundSelector; sel: sink Selector) {.inline.} =
+  csel.sels.add(sel)
 
 func `[]`*(cxsel: ComplexSelector; i: int): lent CompoundSelector {.inline.} =
   return cxsel.csels[i]
 
-func `[]`*(cxsel: ComplexSelector; i: BackwardsIndex): CompoundSelector
+func `[]`*(cxsel: ComplexSelector; i: BackwardsIndex): lent CompoundSelector
     {.inline.} =
-  return cxsel.csels[i]
+  return cxsel[cxsel.csels.len - int(i)]
 
 func `[]`*(cxsel: var ComplexSelector; i: BackwardsIndex): var CompoundSelector
     {.inline.} =
@@ -209,6 +210,7 @@ func `$`*(sel: Selector): string =
     return "::" & $sel.elem
 
 func `$`*(sels: CompoundSelector): string =
+  result = ""
   for sel in sels:
     result &= $sel