         f line boa
     ] with-destructors ;
 
-M: line dispose* [ font>> CFRelease ] [ line>> CFRelease ] bi ;
+M: line dispose* line>> CFRelease ;
 
 SYMBOL: cached-lines
 

    [ f CTLineGetOffsetForStringIndex round ] bi-curry@ bi
    [ drop nip 0 ] [ swap - swap second ] 3bi <CGRect> ;

:: fill-selection-background ( context loc dim line string -- )
    string selection? [
        context string color>> >rgba-components CGContextSetRGBFillColor
        context dim line string selection-rect
        dup CGRect-x loc first - over set-CGRect-x
        CGContextFillRect
    ] when ;


                ext [ (loc) (dim) [ + ceiling ] 2map ]
                dim [ ext loc [ - >integer ] 2map ]
                metrics [ open-font line compute-line-metrics ] |
            line metrics
            dim [
                {
                    [ font dim fill-background ]
