#lang s-exp "../kernel.rkt"

(require (for-syntax racket/base))

(provide traced-app traced-app-key traced-callee-key)

(define traced-app-key (gensym 'traced-app-key))
(define traced-callee-key (gensym 'traced-callee-key))


(define-syntax-parameter traced-app
  (lambda (stx)
    (syntax-case stx ()
      [(_ operator operands ...)
       (with-syntax ([key #'traced-app-key]
                     [pos  (vector (format "~s" (syntax-source stx))
                                   (syntax-position stx)
                                   (syntax-line stx)
                                   (syntax-column stx)
                                   (syntax-span stx))])
         (syntax/loc stx
           (with-continuation-mark key 'pos
                                   (#%plain-app operator operands ...))))]
      [(_)
       (syntax/loc stx
         (#%app))])))
