Fix crash on impossible tree movement

This commit is contained in:
Skylar Hill 2023-11-04 20:14:03 -05:00
parent 00f4935d3b
commit 5c5f7ff1ba
1 changed files with 29 additions and 19 deletions

View File

@ -121,31 +121,41 @@
(define (next-node state) (define (next-node state)
(define target (ts-node-next-sibling (define target (ts-node-next-sibling
(sloth-state-point-node state))) (sloth-state-point-node state)
(define point (ts-node-start-point target)) #t))
(move (sloth-state-win state) (if target
(car point) (cdr point)) (let ((point (ts-node-start-point target)))
(set-sloth-state-point-node state target)) (move (sloth-state-win state)
(car point) (cdr point))
(set-sloth-state-point-node state target))
state))
(define (prev-node state) (define (prev-node state)
(define target (ts-node-prev-sibling (define target (ts-node-prev-sibling
(sloth-state-point-node state) (sloth-state-point-node state)
#f)) #t))
(define point (ts-node-start-point target)) (if target
(move (sloth-state-win state) (let ((point (ts-node-start-point target)))
(car point) (cdr point)) (move (sloth-state-win state)
(set-sloth-state-point-node state target)) (car point) (cdr point))
(set-sloth-state-point-node state target))
state))
(define (down-node state) (define (down-node state)
(define target (ts-node-child (sloth-state-point-node state) 0)) (define nodes (ts-node-childs (sloth-state-point-node state)
(define point (ts-node-start-point target)) #t))
(move (sloth-state-win state) (if (not (null? nodes))
(car point) (cdr point)) (let ((point (ts-node-start-point (car nodes))))
(set-sloth-state-point-node state target)) (move (sloth-state-win state)
(car point) (cdr point))
(set-sloth-state-point-node state (car nodes)))
state))
(define (up-node state) (define (up-node state)
(define target (ts-node-parent (sloth-state-point-node state))) (define target (ts-node-parent (sloth-state-point-node state)))
(define point (ts-node-start-point target)) (if target
(move (sloth-state-win state) (let ((point (ts-node-start-point target)))
(car point) (cdr point)) (move (sloth-state-win state)
(set-sloth-state-point-node state target)) (car point) (cdr point))
(set-sloth-state-point-node state target))
state))