(module mztake-structs mzscheme
  (require (lib "more-useful-code.ss" "mztake"))
  
  (provide (all-defined-except loc make-loc)
           (rename loc loc$)
           (rename make-loc loc))
  
  (define (require-spec? sexp)
    (or string? list?))
  
  ;    ;;;;;   ;                          ;          
  ;   ;     ;  ;                          ;          
  ;  ;         ;                          ;          
  ;  ;        ;;;;;; ;;; ;      ;   ;;;  ;;;;; ;;;;  
  ;  ;         ;   ;;    ;      ;  ;   ;  ;   ;    ; 
  ;   ;;;      ;   ;     ;      ; ;       ;   ;      
  ;      ;;;   ;   ;     ;      ; ;       ;   ;      
  ;         ;  ;   ;     ;      ; ;       ;    ;;;;  
  ;         ;  ;   ;     ;      ; ;       ;        ; 
  ;         ;  ;   ;     ;      ; ;       ;        ; 
  ;  ;     ;   ;   ;      ;    ;;  ;   ;  ;   ;    ; 
  ;   ;;;;;     ;;;;       ;;;; ;   ;;;    ;;; ;;;;  
  
  (define-struct trace-struct (evnt-rcvr thunk))           ; frp:event-receiver
  
  (define-struct debug-client (modpath          ; complete-path of the module
                               tracepoints      ; hash-table of traces
                               line-col->pos    ; memoized O(n) function to map line/col -> byte offset
                               process))        ; parent debug-process
  
  (define-struct debug-process (custodian     ; If you shutdown-all it will kill the debugger process
                                run-semaphore ; When you post to this the debuggee will continue executing
                                running-e     ; #t on this event resumes, #f pauses
                                run-manager   ; saves behavior that actually pauses/resumes from GC
                                pause-requested?
                                resume-requested?
                                policy

                                exited?       ; FrTime cell receives #t when the target exits
                                exceptions    ; (an event stream) Exceptions thrown during the evaluation of the target
                                main-client   ; the main client module that will be run
                                clients       ; list of all the clients attached to this process
                                
                                where         ; a behavior signaling each position where we pause
                                marks))       ; while paused, the marks at the point of the pause (else false)
  
  (define-struct loc (reqspec line col))
                      
  ;###########################################################################################################
  
  
  
  
  ;    ;;;;;   ;                          ;           ;;;;;                         ;                         
  ;   ;     ;  ;                          ;         ;;     ;                        ;                         
  ;  ;         ;                          ;         ;                               ;                         
  ;  ;        ;;;;;; ;;; ;      ;   ;;;  ;;;;;     ;         ; ;;;   ;;;     ;;;;  ;;;;;  ;;;;   ; ;;;  ;;;;  
  ;  ;         ;   ;;    ;      ;  ;   ;  ;        ;         ;;     ;   ;   ;    ;  ;    ;    ;  ;;    ;    ; 
  ;   ;;;      ;   ;     ;      ; ;       ;        ;         ;     ;     ;       ;  ;   ;      ; ;     ;      
  ;      ;;;   ;   ;     ;      ; ;       ;        ;         ;     ;     ;   ;;;;;  ;   ;      ; ;     ;      
  ;         ;  ;   ;     ;      ; ;       ;        ;         ;     ;;;;;;;  ;    ;  ;   ;      ; ;      ;;;;  
  ;         ;  ;   ;     ;      ; ;       ;        ;         ;     ;       ;     ;  ;   ;      ; ;          ; 
  ;         ;  ;   ;     ;      ; ;       ;         ;        ;     ;       ;     ;  ;   ;      ; ;          ; 
  ;  ;     ;   ;   ;      ;    ;;  ;   ;  ;         ;;     ; ;      ;    ; ;    ;;  ;    ;    ;  ;     ;    ; 
  ;   ;;;;;     ;;;;       ;;;; ;   ;;;    ;;;        ;;;;;  ;       ;;;;   ;;;; ;   ;;;  ;;;;   ;      ;;;;  
  
  (define (create-empty-debug-client)
    (make-debug-client null        ; modpath
                       (make-hash) ; tracepoints
                       null        ; line-col->pos function
                       null))      ; process
  
  ;###########################################################################################################
  )