diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-22 20:32:22 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-22 20:32:22 +0100 |
commit | f53a20f12bf07844402ece62c920c8dfbc6cb825 (patch) | |
tree | 043cdb4b1b43fa0e9d27a8212f8c8a330b5cf8f0 /src/css/selectorparser.nim | |
parent | 9df15b2b3c5a7897d2314c0b68a4faf05b8d7459 (diff) | |
download | chawan-f53a20f12bf07844402ece62c920c8dfbc6cb825.tar.gz |
Add annotations for move semantics
Supposedly they aren't broken in refc after 2.0.0, so we can do this now that 1.6.14 is dropped. I've confirmed lent to work as advertised; it indeed reduces copies. sink doesn't seem to help much, but I guess it will be useful once we switch to ORC.
Diffstat (limited to 'src/css/selectorparser.nim')
-rw-r--r-- | src/css/selectorparser.nim | 34 |
1 files changed, 18 insertions, 16 deletions
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 |