File: serial-lambda.rkt

package info (click to toggle)
racket 7.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 125,432 kB
  • sloc: ansic: 258,980; pascal: 59,975; sh: 33,650; asm: 13,558; lisp: 7,124; makefile: 3,329; cpp: 2,889; exp: 499; python: 274; xml: 11
file content (31 lines) | stat: -rw-r--r-- 1,013 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#lang racket/base
(require racket/contract
         racket/list
         racket/serialize
         (for-syntax racket/base
                     web-server/lang/closure
                     web-server/lang/labels))

(define-syntax (serial-lambda stx)
  (syntax-case stx ()
    [(_ . lmbda-stx)
     (let ([labeling (make-labeling (string->bytes/utf-8 (format "~a" (syntax->datum stx))))])
       (make-closure
        (quasisyntax/loc stx
          (_ #,(labeling) (lambda . lmbda-stx)))))]))

(define-syntax (serial-case-lambda stx)
  (syntax-case stx ()
    [(_ . lmbda-stx)
     (let ([labeling (make-labeling (string->bytes/utf-8 (format "~a" (syntax->datum stx))))])
       (make-closure
        (quasisyntax/loc stx
          (_ #,(labeling) (case-lambda . lmbda-stx)))))]))

(provide serial-lambda
         serial-case-lambda)

(provide/contract
 [closure->deserialize-name (serializable? . -> . symbol?)])
(define (closure->deserialize-name proc)
  (string->symbol (cdr (first (third (serialize proc))))))