#lang racket/base (require (prefix-in math: (only-in racket/math pi sinh)) (prefix-in racket: racket/base) racket/local (for-syntax racket/base)) ;; constants (define constant:true #t) (define constant:false #f) (define constant:pi math:pi) (define constant:e (racket:exp 1)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Primitive function stubs ;; provide-stub-function (define-syntax (provide-stub-function stx) (syntax-case stx () [(_ name-or-name-pair ...) (with-syntax ([(provided-name ...) (map (lambda (name-or-pair) (syntax-case name-or-pair () [x (identifier? #'x) #'x] [(x y) #'x])) (syntax->list #'(name-or-name-pair ...)))] [(impl-name ...) (map (lambda (name) (syntax-case name () [an-id (identifier? #'an-id) (datum->syntax name (string->symbol (string-append "racket:" (symbol->string (syntax-e name)))) name)] [(an-id an-impl-name) #'an-impl-name])) (syntax->list #'(name-or-name-pair ...)))]) (syntax/loc stx (begin (begin (define (provided-name . args) (racket:apply impl-name args)) (provide provided-name)) ...)))])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Provides (provide (rename-out (constant:true true) (constant:false false) (constant:pi pi) (constant:e e)) #%module-begin #%datum #%app #%top-interaction #%top module define define-values let-values let*-values define-struct if cond else case quote quasiquote unquote unquote-splicing lambda case-lambda let let* letrec letrec-values local begin begin0 set! and or when unless require for-syntax define-for-syntax begin-for-syntax prefix-in only-in provide planet all-defined-out all-from-out except-out rename-out struct-out define-syntax define-syntaxes let/cc with-continuation-mark null ;; Kernel inlinable * - + = / sub1 add1 < > <= >= cons car cdr list null? not eq?) (define (-identity x) x) (define (-undefined? x) (letrec ([y y]) (eq? x y))) ;; Many of these should be pushed upward rather than stubbed, so that ;; Racket's compiler can optimize these. (provide-stub-function write display newline ;; displayln ;; current-print ;; current-continuation-marks ;; continuation-mark-set? ;; continuation-mark-set->list ;; make-struct-type ;; make-struct-field-accessor ;; make-struct-field-mutator ;; struct-type? ;; struct-constructor-procedure? ;; struct-predicate-procedure? ;; struct-accessor-procedure? ;; struct-mutator-procedure? ;; procedure-arity ;; procedure-arity-includes? ;; make-arity-at-least ;; arity-at-least? ;; arity-at-least-value ;; apply ;; values ;; call-with-values ;; compose ;; current-inexact-milliseconds ;; current-seconds void ;; random ;; sleep ;; (identity -identity) ;; raise ;; error ;; make-exn ;; make-exn:fail ;; make-exn:fail:contract ;; make-exn:fail:contract:arity ;; make-exn:fail:contract:variable ;; make-exn:fail:contract:divide-by-zero ;; exn-message ;; exn-continuation-marks ;; exn? ;; exn:fail? ;; exn:fail:contract? ;; exn:fail:contract:arity? ;; exn:fail:contract:variable? ;; exn:fail:contract:divide-by-zero? ;; abs ;; quotient ;; remainder ;; modulo ;; max ;; min ;; gcd ;; lcm ;; floor ;; ceiling ;; round ;; truncate ;; numerator ;; denominator ;; expt ;; exp ;; log ;; sin ;; cos ;; tan ;; asin ;; acos ;; atan ;; sqrt ;; integer-sqrt ;; make-rectangular ;; make-polar ;; real-part ;; imag-part ;; angle ;; magnitude ;; inexact->exact ;; exact->inexact ;; number->string ;; string->number ;; procedure? pair? ;; (undefined? -undefined?) ;; immutable? ;; void? ;; symbol? ;; string? ;; char? ;; boolean? ;; vector? ;; struct? ;; eof-object? ;; bytes? ;; byte? ;; number? ;; complex? ;; real? ;; rational? ;; integer? ;; exact? ;; inexact? ;; odd? ;; even? ;; zero? ;; positive? ;; negative? ;; box? ;; hash? ;; eqv? equal? ;; caar ;; cadr ;; cdar ;; cddr ;; caaar ;; caadr ;; cadar ;; cdaar ;; cdadr ;; cddar ;; caddr ;; cdddr ;; cadddr length ;; list? ;; list* ;; list-ref ;; list-tail append reverse ;; for-each map ;; andmap ;; ormap ;; memq ;; memv member ;; memf ;; assq ;; assv ;; assoc ;; remove ;; filter ;; foldl ;; foldr ;; sort ;; build-list ;; box ;; box-immutable ;; unbox ;; set-box! ;; make-hash ;; make-hasheq ;; hash-set! ;; hash-ref ;; hash-remove! ;; hash-map ;; hash-for-each ;; make-string ;; string ;; string-length ;; string-ref ;; string=? ;; string-ci=? ;; string<? ;; string>? ;; string<=? ;; string>=? ;; string-ci<? ;; string-ci>? ;; string-ci<=? ;; string-ci>=? ;; substring ;; string-append ;; string->list ;; list->string ;; string-copy ;; string->symbol ;; symbol->string ;; format ;; printf ;; build-string ;; string->immutable-string ;; string-set! ;; string-fill! ;; make-bytes ;; bytes ;; bytes->immutable-bytes ;; bytes-length ;; bytes-ref ;; bytes-set! ;; subbytes ;; bytes-copy ;; bytes-fill! ;; bytes-append ;; bytes->list ;; list->bytes ;; bytes=? ;; bytes<? ;; bytes>? make-vector vector vector-length vector-ref vector-set! vector->list list->vector ;; build-vector ;; char=? ;; char<? ;; char>? ;; char<=? ;; char>=? ;; char-ci=? ;; char-ci<? ;; char-ci>? ;; char-ci<=? ;; char-ci>=? ;; char-alphabetic? ;; char-numeric? ;; char-whitespace? ;; char-upper-case? ;; char-lower-case? ;; char->integer ;; integer->char ;; char-upcase ;; char-downcase ;; call-with-current-continuation ;; call/cc ;; call-with-continuation-prompt ;; abort-current-continuation ;; default-continuation-prompt-tag ;; make-continuation-prompt-tag ;; continuation-prompt-tag? ;; make-reader-graph ;; make-placeholder ;; placeholder-set! ) (provide ;; FIXME: ;; Extensions: these may need to be hidden in a JavaScript-implemented module in-javascript-context? viewport-width viewport-height) ;; in-javascript-context: -> boolean ;; Produces true if we're in a JavaScript context. (define (in-javascript-context?) #f) ;; viewport-width: -> natural ;; The viewport width in pixels. (define (viewport-width) (error 'viewport-width "Not available outside JavaScript context.")) ;; viewport-height: -> natural ;; The viewport height in pixels. (define (viewport-height) (error 'viewport-width "Not available outside JavaScript context."))