interfaces.scm 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395
  1. ; Copyright (c) 1993-2007 by Richard Kelsey and Jonathan Rees. See file COPYING.
  2. ; Some interfaces. Order of presentation is a bit random.
  3. (define-interface scheme-level-0-interface
  4. (export ((if begin lambda letrec quote set!
  5. define define-syntax let-syntax letrec-syntax)
  6. :syntax)
  7. ;; The basic derived expression types.
  8. ((and cond do let let* or) :syntax)
  9. apply
  10. ;; Scalar primitives
  11. eq?
  12. number? integer? rational? real? complex?
  13. exact? exact->inexact inexact->exact
  14. + - * / = < > <= >=
  15. quotient remainder
  16. floor numerator denominator
  17. real-part imag-part
  18. exp log sin cos tan asin acos atan sqrt
  19. angle magnitude make-polar make-rectangular
  20. char?
  21. char=? char<?
  22. eof-object?
  23. input-port? output-port?
  24. ;; Data manipulation
  25. pair? cons car cdr set-car! set-cdr!
  26. symbol? symbol->string
  27. string? make-string string-length string-ref string-set!
  28. vector? make-vector vector-length vector-ref vector-set!
  29. ;; Unnecessarily primitive
  30. string=?
  31. vector
  32. assq
  33. ;; New in Revised^5 Scheme
  34. values call-with-values
  35. ;; Things aren't primitive at the VM level, but they have
  36. ;; to be defined using VM primitives.
  37. string-copy
  38. string->symbol
  39. procedure?
  40. integer->char char->integer))
  41. ; Miscellaneous primitives.
  42. (define-interface primitives-interface
  43. (export add-finalizer!
  44. call-external-value
  45. channel-parameter
  46. checked-record-ref
  47. checked-record-set!
  48. collect ;,collect command
  49. continuation-length
  50. continuation-ref
  51. continuation-set!
  52. continuation?
  53. copy-bytes!
  54. copy-string-chars!
  55. current-thread ;fluids threads
  56. double?
  57. eof-object ;i/o-internal re-exports this
  58. extended-number-length
  59. extended-number-ref
  60. extended-number-set!
  61. extended-number?
  62. find-all ;externals, command-levels
  63. find-all-records ;threads
  64. immutable?
  65. make-continuation
  66. make-double
  67. make-extended-number
  68. make-immutable!
  69. make-record
  70. make-template
  71. make-weak-pointer
  72. memory-status ;interrupts
  73. os-error-message
  74. peek-byte
  75. peek-char
  76. read-byte
  77. read-char
  78. record
  79. record-length
  80. record-ref
  81. record-set!
  82. record?
  83. return-from-callback
  84. schedule-interrupt ;interrupts re-exports this
  85. session-data ;channels
  86. set-current-thread! ;fluids threads
  87. set-enabled-interrupts! ;interrupts
  88. set-exception-handlers!
  89. set-interrupt-handlers! ;interrupts
  90. set-session-data! ;channels
  91. string-hash
  92. system-parameter
  93. template-length
  94. template-ref
  95. template-set!
  96. template?
  97. time
  98. unspecific ;record
  99. vm-extension
  100. wait
  101. weak-pointer-ref
  102. weak-pointer?
  103. write-byte
  104. write-char
  105. encode-char
  106. decode-char))
  107. (define-interface bitwise-interface
  108. (export arithmetic-shift
  109. bitwise-not
  110. bit-count
  111. ((bitwise-and bitwise-ior bitwise-xor)
  112. (proc (&rest :exact-integer) :exact-integer))))
  113. (define-interface cells-interface
  114. (export cell?
  115. make-cell
  116. cell-ref
  117. cell-set!))
  118. (define-interface records-interface
  119. (export make-record
  120. record
  121. record?
  122. record-type
  123. record-length
  124. record-ref
  125. record-set!))
  126. (define-interface locations-interface
  127. (export location?
  128. location-defined?
  129. location-assigned?
  130. location-id
  131. set-location-id!
  132. make-undefined-location
  133. set-location-defined?!
  134. contents
  135. set-contents!))
  136. (define-interface closures-interface
  137. (export closure?
  138. make-closure
  139. closure-env
  140. closure-template))
  141. (define-interface byte-vectors-interface
  142. (export byte-vector?
  143. byte-vector-length
  144. byte-vector-ref
  145. byte-vector-set!
  146. make-byte-vector
  147. byte-vector))
  148. ; Same again, but with old names for compatibility.
  149. (define-interface code-vectors-interface
  150. (export code-vector?
  151. code-vector-length
  152. code-vector-ref
  153. code-vector-set!
  154. make-code-vector))
  155. (define-interface channels-interface
  156. (export channel?
  157. channel-id
  158. channel-status
  159. channel-os-index
  160. open-channel
  161. close-channel
  162. channel-ready?
  163. channel-maybe-read
  164. channel-maybe-write
  165. channel-abort
  166. open-channels-list))
  167. (define-interface ports-interface
  168. (export port?
  169. make-port
  170. port-handler
  171. port-text-codec-spec set-port-text-codec-spec!
  172. port-crlf? set-port-crlf?!
  173. port-buffer
  174. port-lock set-port-lock!
  175. port-status set-port-status!
  176. port-data set-port-data!
  177. port-index set-port-index!
  178. port-limit set-port-limit!
  179. port-pending-cr? set-port-pending-cr?!
  180. port-pending-eof? set-port-pending-eof?!
  181. provisional-port-status provisional-set-port-status!
  182. provisional-port-index provisional-set-port-index!
  183. provisional-port-limit provisional-set-port-limit!
  184. provisional-port-lock provisional-set-port-lock!
  185. provisional-port-pending-cr?
  186. provisional-set-port-pending-cr?!
  187. provisional-port-pending-eof?
  188. provisional-set-port-pending-eof?!))
  189. (define-interface condvars-interface
  190. (export make-condvar
  191. condvar?
  192. maybe-commit-and-wait-for-condvar
  193. maybe-commit-and-set-condvar!
  194. condvar-value set-condvar-value!
  195. condvar-has-value? set-condvar-has-value?!))
  196. (define-interface shared-bindings-interface
  197. (export shared-binding?
  198. shared-binding-is-import?
  199. shared-binding-name
  200. shared-binding-ref
  201. shared-binding-set!
  202. lookup-imported-binding
  203. define-imported-binding
  204. undefine-imported-binding
  205. lookup-exported-binding
  206. define-exported-binding
  207. undefine-exported-binding
  208. find-undefined-imported-bindings))
  209. (define-interface low-proposals-interface
  210. (export make-proposal
  211. current-proposal
  212. set-current-proposal!
  213. maybe-commit
  214. provisional-car
  215. provisional-cdr
  216. provisional-set-car!
  217. provisional-set-cdr!
  218. provisional-cell-ref
  219. provisional-cell-set!
  220. provisional-vector-ref
  221. provisional-vector-set!
  222. provisional-byte-vector-ref
  223. provisional-byte-vector-set!
  224. provisional-checked-record-ref
  225. provisional-checked-record-set!
  226. attempt-copy-bytes!))
  227. (define-interface proposals-interface
  228. (export ((ensure-atomicity
  229. ensure-atomicity!
  230. atomically
  231. atomically!
  232. with-new-proposal) :syntax)
  233. maybe-commit
  234. remove-current-proposal!
  235. invalidate-current-proposal!
  236. call-ensuring-atomicity
  237. call-ensuring-atomicity!
  238. call-atomically
  239. call-atomically!
  240. provisional-car
  241. provisional-cdr
  242. provisional-set-car!
  243. provisional-set-cdr!
  244. provisional-cell-ref
  245. provisional-cell-set!
  246. provisional-vector-ref
  247. provisional-vector-set!
  248. provisional-byte-vector-ref
  249. provisional-byte-vector-set!
  250. (define-synchronized-record-type :syntax)
  251. define-record-discloser ;users are likely to want it
  252. attempt-copy-bytes!))
  253. ; Miscellaneous useful procedures used in various random places.
  254. ; These are used in the byte-code compiler and the linker and so have
  255. ; alternative implementations in alt/...
  256. (define-interface features-interface
  257. (export immutable?
  258. make-immutable!
  259. string-hash
  260. force-output
  261. current-noise-port))
  262. ; Another hodge-podge.
  263. (define-interface low-level-interface
  264. (export vector-unassigned? ;inspector
  265. cell-unassigned?)) ;disclosers
  266. (define-interface vm-exposure-interface
  267. (export invoke-closure ;eval
  268. primitive-catch)) ;shadowing, start, command
  269. (define-interface escapes-interface
  270. (export primitive-cwcc
  271. with-continuation))
  272. (define-interface ascii-interface
  273. (export ascii->char
  274. char->ascii
  275. ascii-limit
  276. ascii-whitespaces))
  277. (define-interface unicode-interface
  278. (export scalar-value->char
  279. char->scalar-value
  280. scalar-value?))
  281. ; Level 1: The rest of Scheme except for I/O.
  282. (define-interface scheme-level-1-adds-interface
  283. (export ((case delay quasiquote syntax-rules) :syntax)
  284. abs
  285. append assoc assv
  286. boolean?
  287. caaaar caaadr caadar caaddr caaar caadr caar
  288. cadaar cadadr caddar cadddr cadar caddr cadr
  289. cdaaar cdaadr cdadar cdaddr cdaar cdadr cdar
  290. cddaar cddadr cdddar cddddr cddar cdddr cddr
  291. char-alphabetic?
  292. ceiling
  293. char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>?
  294. char-downcase char-lower-case? char-numeric?
  295. char-upcase
  296. char-upper-case? char-whitespace? char<=?
  297. char>=? char>?
  298. equal? eqv? even? expt
  299. for-each force
  300. gcd
  301. inexact?
  302. lcm length list list->string list->vector
  303. list? ;New in R4RS
  304. list-ref list-tail
  305. map max member memq memv min modulo
  306. negative? not null?
  307. odd?
  308. positive?
  309. rationalize
  310. reverse
  311. round
  312. string string->list
  313. string-append
  314. string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>?
  315. string-fill!
  316. string<=? string<? string=? string>=? string>?
  317. substring
  318. truncate
  319. vector->list vector-fill!
  320. zero?))
  321. (define-interface scheme-level-1-interface
  322. (compound-interface scheme-level-1-adds-interface
  323. scheme-level-0-interface))
  324. (define-interface util-interface
  325. (export any
  326. every
  327. filter
  328. fold fold->2 fold->3
  329. last
  330. posq
  331. posv
  332. posqual
  333. reduce
  334. sublist
  335. insert
  336. unspecific
  337. symbol-append
  338. (mvlet :syntax)))
  339. ; Level 2 consists of harder things built on level 1.
  340. (define-interface records-internal-interface
  341. (export :record-type
  342. disclose-record
  343. initialize-records!))
  344. (define-interface record-types-interface
  345. (export make-record-type
  346. record-constructor
  347. record-accessor
  348. record-modifier
  349. record-predicate
  350. define-record-discloser
  351. define-record-resumer
  352. record-type?
  353. record-type-field-names
  354. record-type-name))
  355. (define-interface define-record-types-interface
  356. (export (define-record-type :syntax)
  357. define-record-discloser))
  358. (define-interface methods-interface
  359. (export (define-generic :syntax)
  360. (define-method :syntax)
  361. (define-simple-type :syntax)
  362. :values
  363. :value
  364. :number
  365. :complex
  366. :real
  367. :rational
  368. :integer
  369. :exact-integer
  370. :boolean
  371. :symbol
  372. :char
  373. :null
  374. :pair
  375. :vector
  376. :string
  377. :procedure
  378. :input-port
  379. :output-port
  380. :eof-object
  381. :record
  382. :record-type
  383. :zero
  384. singleton
  385. disclose &disclose))
  386. (define-interface meta-methods-interface
  387. (export type-predicate &type-predicate
  388. type-priority &type-priority
  389. type-superiors &type-superiors
  390. same-type? &same-type?
  391. add-method! &add-method!
  392. set-final-method!
  393. make-method-table
  394. method-table-get-perform
  395. make-simple-type
  396. ;; Hooks for DOODL or other future extension
  397. :simple-type :method-info :method-table :singleton
  398. make-generic
  399. (method-info :syntax)
  400. methods->perform))
  401. (define-interface number-i/o-interface
  402. (export number->string &number->string
  403. string->number
  404. really-string->number &really-string->number ;exactness argument
  405. string->integer))
  406. (define-interface fluids-interface
  407. (export make-fluid
  408. let-fluid
  409. let-fluids
  410. fluid
  411. fluid-cell-ref
  412. fluid-cell-set!
  413. set-fluid!)) ; deprecated
  414. (define-interface fluids-internal-interface
  415. (export initialize-dynamic-state!
  416. current-thread
  417. set-current-thread!
  418. get-dynamic-env ; wind.scm, env/command-level.scm
  419. set-dynamic-env! ; wind.scm, env/command-level.scm
  420. get-dynamic-point ; wind.scm
  421. set-dynamic-point!)) ; wind.scm
  422. (define-interface enumerated-interface
  423. (export (define-enumeration :syntax)
  424. (enum :syntax)
  425. (enumerand->name :syntax)
  426. (name->enumerand :syntax)))
  427. (define :enumeration :syntax)
  428. (define-interface signals-interface
  429. (export error warn syntax-error call-error note
  430. signal signal-condition
  431. make-condition))
  432. (define-interface handle-interface
  433. (export ignore-errors report-errors-as-warnings with-handler))
  434. (define-interface simple-conditions-interface
  435. (export define-condition-type
  436. condition-predicate
  437. decode-condition condition-stuff condition-type
  438. define-condition-decoder
  439. error? warning? note? syntax-error? call-error? read-error?
  440. interrupt?
  441. ;; Do these belong here?... not really.
  442. vm-exception-arguments
  443. vm-exception-reason
  444. vm-exception-opcode
  445. vm-exception?
  446. make-vm-exception
  447. i/o-error?
  448. i/o-error-status
  449. i/o-error-message
  450. i/o-error-operation
  451. i/o-error-arguments
  452. make-i/o-error
  453. decoding-error?
  454. decoding-error-encoding-name
  455. decoding-error-message
  456. decoding-error-bytes
  457. decoding-error-start
  458. make-decoding-error))
  459. (define-interface wind-interface
  460. (export call-with-current-continuation
  461. dynamic-wind))
  462. (define-interface i/o-interface
  463. (export current-input-port current-output-port
  464. close-output-port close-input-port
  465. read-byte peek-byte write-byte byte-ready?
  466. read-char peek-char
  467. char-ready?
  468. write-char
  469. read-block write-block
  470. newline
  471. write-string ;write.scm
  472. with-current-ports
  473. current-error-port
  474. current-noise-port
  475. force-output ;xport.scm
  476. port-text-codec set-port-text-codec!
  477. output-port-ready?
  478. input-port?
  479. output-port?
  480. silently
  481. make-null-output-port))
  482. (define-interface text-codecs-interface
  483. (export spec->text-codec text-codec->spec
  484. text-codec? make-text-codec
  485. text-codec-names
  486. text-codec-decode-char-proc
  487. text-codec-encode-char-proc
  488. (define-text-codec :syntax)
  489. find-text-codec
  490. null-text-codec
  491. us-ascii-codec
  492. latin-1-codec
  493. utf-8-codec
  494. utf-16le-codec utf-16be-codec
  495. utf-32le-codec utf-32be-codec))
  496. (define-interface encodings-interface
  497. (export char-encoding-length
  498. string-encoding-length
  499. encode-char
  500. encode-string
  501. string->bytes-n
  502. string->bytes
  503. bytes-string-size
  504. decode-char
  505. decode-string
  506. bytes->string bytes->string-n
  507. char-encoding-length/utf-8
  508. string-encoding-length/utf-8
  509. encode-char/utf-8
  510. encode-string/utf-8
  511. string->utf-8-n
  512. string->utf-8
  513. bytes-string-size/utf-8
  514. decode-char/utf-8
  515. decode-string/utf-8
  516. utf-8->string utf-8->string-n
  517. (encoding-status :enumeration)
  518. (decoding-status :enumeration)))
  519. (define-interface os-strings-interface
  520. (export os-string?
  521. string->os-string byte-vector->os-string x->os-string
  522. os-string->string os-string->byte-vector
  523. call-with-os-string-text-codec
  524. current-os-string-text-codec))
  525. (define-interface i/o-internal-interface
  526. (export input-port-option ;read.scm
  527. output-port-option ;write.scm
  528. initialize-i/o ;init.scm
  529. initialize-i/o-handlers! ;init.scm
  530. disclose-port
  531. make-buffered-input-port
  532. make-buffered-output-port make-unbuffered-output-port
  533. make-port-handler
  534. port-handler-discloser port-handler-close
  535. port-handler-byte port-handler-char port-handler-block
  536. port-handler-ready? port-handler-force
  537. make-buffered-input-port-handler
  538. make-buffered-output-port-handler
  539. make-unbuffered-output-port-handler
  540. ;port-handler-buffer-proc ; extended-ports
  541. default-buffer-size
  542. open-input-port?
  543. open-input-port-status
  544. make-input-port-closed!
  545. open-output-port?
  546. open-output-port-status
  547. make-output-port-closed!
  548. eof-object ; users will probably want this
  549. note-buffer-reuse!
  550. check-buffer-timestamp!
  551. force-output-if-open
  552. periodically-force-output!
  553. periodically-flushed-ports
  554. output-port-forcers
  555. call-with-current-input-port
  556. call-with-current-output-port
  557. call-with-current-noise-port))
  558. (define-interface channel-i/o-interface
  559. (export channel-maybe-commit-and-read
  560. channel-maybe-commit-and-write
  561. channel-maybe-commit-and-close
  562. channel-write
  563. initialize-channel-i/o! ;scheduler
  564. waiting-for-i/o? ;scheduler
  565. abort-unwanted-reads! ;scheduler
  566. ; call this with interrupts disabled
  567. wait-for-channel)) ;big/socket.scm
  568. (define-interface channel-ports-interface
  569. (export call-with-input-file call-with-output-file
  570. with-input-from-file with-output-to-file
  571. open-input-file open-output-file
  572. input-channel->port ;usual-resumer, posix
  573. output-channel->port ;usual-resumer, posix
  574. input-channel+closer->port ;big/socket.scm
  575. output-channel+closer->port ;big/socket.scm
  576. port->channel ;posix
  577. force-channel-output-ports!)) ;posix
  578. (define-interface threads-interface
  579. (export thread?
  580. thread-name thread-uid ;for debugging
  581. current-thread
  582. spawn
  583. relinquish-timeslice
  584. sleep
  585. terminate-current-thread))
  586. (define-interface threads-internal-interface
  587. (export make-thread
  588. thread-data set-thread-data!
  589. thread-continuation ;debugger
  590. thread-uid->thread ;expensive!
  591. thread-scheduler set-thread-scheduler!
  592. thread-dynamic-env set-thread-dynamic-env!
  593. set-thread-arguments!
  594. event-pending?
  595. get-next-event!
  596. schedule-event
  597. (event-type :syntax)
  598. run
  599. running?
  600. maybe-commit-and-block
  601. maybe-commit-and-block-on-queue
  602. maybe-commit-and-make-ready
  603. maybe-commit-no-interrupts
  604. spawn-on-scheduler spawn-on-root
  605. wait
  606. upcall propogate-upcall
  607. interrupt-thread
  608. kill-thread!
  609. terminate-thread!
  610. thread-queue-empty?
  611. maybe-dequeue-thread!
  612. register-dozer!
  613. wake-some-threads
  614. all-threads ; for command-levels
  615. with-threads)) ; rts/init.scm
  616. (define-interface scheduler-interface
  617. (export run-threads
  618. run-threads-with-housekeeper
  619. round-robin-event-handler
  620. make-counter ; for thread counts
  621. counter-value set-counter!
  622. increment-counter!
  623. decrement-counter!))
  624. (define-interface queues-interface
  625. (export make-queue enqueue! dequeue! maybe-dequeue! queue-empty? empty-queue!
  626. queue? queue->list list->queue queue-head queue-length
  627. delete-from-queue! on-queue?))
  628. (define-interface exceptions-interface
  629. (export with-exception-handler
  630. raise
  631. (guard :syntax)))
  632. (define-interface exceptions-internal-interface
  633. (export initialize-exceptions!
  634. really-signal-condition))
  635. (define-interface vm-exceptions-interface
  636. (export define-vm-exception-handler
  637. initialize-vm-exceptions!
  638. extend-opcode!
  639. signal-vm-exception))
  640. (define-interface interrupts-interface
  641. (export initialize-interrupts! ;init.scm
  642. all-interrupts
  643. no-interrupts
  644. ;reset-timer-interrupts!
  645. set-interrupt-handler!
  646. get-interrupt-handler
  647. interrupt?
  648. ;set-timer-interrupt!
  649. schedule-interrupt
  650. set-enabled-interrupts! ;command.scm
  651. enabled-interrupts
  652. enable-interrupts!
  653. disable-interrupts!
  654. with-interrupts-allowed
  655. with-interrupts-inhibited
  656. call-after-gc!
  657. call-before-heap-overflow!
  658. (interrupt :syntax)))
  659. (define-interface writing-interface
  660. (export write
  661. display
  662. display-type-name
  663. recurring-write))
  664. (define-interface reading-interface
  665. (export read
  666. define-sharp-macro ;command.scm
  667. reading-error
  668. gobble-line))
  669. ; Level 2: the harder stuff.
  670. ; Various primitives get numeric types and promoted to n-ary at this point.
  671. (define-interface scheme-level-2-adds-interface
  672. (export (char-ready? (proc (&opt :input-port) :boolean))
  673. call-with-current-continuation
  674. call-with-input-file call-with-output-file
  675. current-input-port current-output-port
  676. dynamic-wind ;New in R5RS
  677. close-input-port close-output-port
  678. open-input-file open-output-file
  679. with-input-from-file with-output-to-file
  680. number->string string->number
  681. read-char peek-char write-char
  682. newline display write
  683. read))
  684. (define-interface scheme-level-2-interface
  685. (compound-interface scheme-level-2-adds-interface
  686. scheme-level-1-interface))
  687. (define-interface scheme-adds-interface
  688. (export eval load
  689. interaction-environment
  690. scheme-report-environment
  691. null-environment))
  692. (define-interface scheme-interface
  693. (compound-interface scheme-adds-interface
  694. scheme-level-2-interface))
  695. (define-interface continuations-interface
  696. (export continuation-arg
  697. continuation-arg-count
  698. continuation-cont
  699. continuation-pc
  700. continuation-code
  701. continuation-template
  702. continuation?
  703. :continuation
  704. vm-exception-continuation?
  705. vm-exception-continuation-exception
  706. continuation-preview)) ; env/debug.scm
  707. (define-interface templates-interface
  708. (export make-template
  709. template-code
  710. template-byte-code
  711. template-info
  712. template-package-id
  713. template-length
  714. template-ref
  715. template-overhead
  716. set-template-code!
  717. set-template-byte-code!
  718. set-template-info!
  719. set-template-package-id!
  720. template-set!
  721. template?))
  722. (define-interface weak-interface
  723. (export weak-pointer? ;disclosers.scm
  724. weak-pointer-ref
  725. make-weak-pointer
  726. make-population
  727. add-to-population!
  728. population->list
  729. walk-population))
  730. (define-interface filenames-interface
  731. (export namestring *scheme-file-type* *load-file-type*
  732. file-name-directory
  733. file-name-nondirectory
  734. translate
  735. set-translation!
  736. translations))
  737. ; Things for the compiler.
  738. (define-interface general-tables-interface
  739. (export make-table
  740. make-string-table
  741. make-symbol-table
  742. make-integer-table
  743. make-table-maker
  744. table?
  745. table-size
  746. table-ref
  747. table-set!
  748. table-walk
  749. make-table-immutable!
  750. string-hash
  751. default-hash-function))
  752. ;----------------
  753. ; Beginning of compiler interfaces
  754. (define-interface usual-macros-interface
  755. (export usual-transform))
  756. (define-interface meta-types-interface
  757. (export same-type?
  758. subtype?
  759. meet?
  760. join-type
  761. meet-type
  762. sexp->type type->sexp rail-type->sexp
  763. syntax-type
  764. any-values-type
  765. any-arguments-type
  766. value-type
  767. error-type
  768. make-some-values-type
  769. empty-rail-type
  770. rail-type
  771. make-optional-type
  772. make-rest-type
  773. empty-rail-type?
  774. rest-type?
  775. head-type
  776. tail-type
  777. procedure-type
  778. procedure-type-domain
  779. procedure-type-codomain
  780. restrictive?
  781. procedure-type?
  782. fixed-arity-procedure-type?
  783. procedure-type-argument-types
  784. procedure-type-arity
  785. any-procedure-type
  786. (proc :syntax)
  787. boolean-type
  788. char-type
  789. null-type
  790. unspecific-type
  791. exact-integer-type
  792. integer-type
  793. rational-type
  794. real-type
  795. complex-type
  796. number-type
  797. exact-type
  798. inexact-type
  799. pair-type
  800. string-type
  801. symbol-type
  802. vector-type
  803. escape-type
  804. structure-type
  805. ;; Stuff moved back from syntactic - why was it moved there?
  806. variable-type
  807. variable-type?
  808. variable-value-type
  809. usual-variable-type
  810. undeclared-type
  811. compatible-types?))
  812. (define-interface names-interface
  813. (export name?
  814. name->symbol
  815. make-name-generator
  816. generate-name ;qualified->name in opt/inline.scm
  817. generated?
  818. generated-name
  819. generated-token
  820. generated-env
  821. generated-parent-name
  822. generated-uid
  823. make-name-table
  824. make-qualified
  825. qualified?
  826. qualified-parent-name
  827. qualified-symbol
  828. qualified-uid
  829. desyntaxify
  830. ))
  831. (define-interface transforms-interface
  832. (export make-transform
  833. maybe-apply-macro-transform
  834. apply-inline-transform
  835. transform?
  836. transform-type
  837. transform-env ; These are used to reify transforms.
  838. transform-aux-names
  839. transform-source
  840. transform-id))
  841. (define-interface bindings-interface
  842. (export binding?
  843. make-binding
  844. binding-place
  845. set-binding-place! ;for package mutation, used in package.scm
  846. binding-static
  847. binding-type
  848. binding-path
  849. add-path
  850. clobber-binding!
  851. maybe-fix-place!
  852. forget-integration
  853. impose-type
  854. same-denotation?
  855. ))
  856. ;----------------
  857. ; Syntactic interfaces
  858. (define-interface compiler-envs-interface
  859. (export make-compiler-env ; re-exported by syntactic
  860. lookup
  861. bind1 bind bindrec
  862. bind-source-file-name ; re-exported by syntactic
  863. source-file-name
  864. environment-macro-eval
  865. environment-define!
  866. extract-package-from-environment)) ; temporary
  867. (define-interface syntactic-interface
  868. (export expand
  869. expand-form
  870. scan-forms
  871. expand-scanned-form
  872. syntax?
  873. static-value
  874. make-compiler-env
  875. bind-source-file-name))
  876. (define-interface nodes-interface
  877. (export make-node
  878. node?
  879. node-operator
  880. node-operator-id
  881. node-form
  882. node-ref
  883. node-set!
  884. node-predicate
  885. make-similar-node
  886. force-node
  887. schemify
  888. name->qualified
  889. get-operator
  890. make-operator-table
  891. operator-name
  892. operator-nargs
  893. operator-table-ref
  894. operator-define!
  895. operator-lookup
  896. operator-type
  897. operator-uid
  898. operator?
  899. operators-table ;config.scm comp-package.scm
  900. lambda-node?
  901. flat-lambda-node?
  902. name-node?
  903. call-node?
  904. literal-node?
  905. quote-node?
  906. define-node?
  907. loophole-node?
  908. operator/flat-lambda
  909. operator/lambda
  910. operator/set!
  911. operator/call
  912. operator/begin
  913. operator/name
  914. operator/letrec
  915. operator/pure-letrec
  916. operator/literal
  917. operator/quote
  918. operator/unassigned
  919. operator/unspecific
  920. operator/define
  921. operator/define-syntax
  922. operator/primitive-procedure
  923. operator/structure-ref
  924. ))
  925. ;----------------
  926. ; Compiler interfaces
  927. (define-interface segments-interface
  928. (export attach-label
  929. byte-limit two-byte-limit
  930. high-byte low-byte
  931. empty-segment
  932. instruction
  933. instruction-using-label
  934. using-optional-label
  935. jump-instruction
  936. computed-goto-instruction
  937. continuation-data
  938. lambda-protocol nary-lambda-protocol
  939. nary-primitive-protocol continuation-protocol
  940. cwv-continuation-protocol
  941. make-dispatch-protocol
  942. make-label
  943. label-reference
  944. note-environment
  945. note-source-code
  946. segment->cv segment->template
  947. segment-size
  948. sequentially
  949. with-package-key))
  950. (define-interface compiler-interface
  951. (export compile-forms
  952. make-startup-procedure ;link/link.scm
  953. set-type-check?! ; for timings
  954. define-compilator ;assem.scm
  955. deliver-value ;assem.scm
  956. ))
  957. (define-interface bc-generation-interface
  958. (export call-instruction
  959. stack-ref-instruction
  960. stack-set!-instruction
  961. stack-indirect-instruction
  962. integer-literal-instruction
  963. push+stack-ref-instruction
  964. push+stack-indirect-instruction
  965. push-instruction))
  966. (define-interface frames-interface
  967. (export make-frame
  968. frame-size
  969. frame-literals
  970. frame-debug-data
  971. template-offset
  972. environment-offset
  973. depth-check!
  974. index->offset
  975. literal->index
  976. binding->index))
  977. (define-interface primops-interface
  978. (export define-compiler-primitive
  979. primop?
  980. primop-name
  981. primop-type
  982. primop-closed
  983. primop-compilator
  984. get-primop
  985. walk-primops ;comp-package.scm
  986. ))
  987. (define-interface debug-data-interface
  988. (export debug-data-env-maps
  989. debug-data-env-shape
  990. debug-data-name
  991. debug-data-parent
  992. debug-data-jump-back-dests
  993. debug-data-source
  994. debug-data-uid
  995. debug-data?
  996. get-debug-data))
  997. (define-interface debug-data-internal-interface
  998. (export make-debug-data
  999. set-debug-data-source!
  1000. set-debug-data-env-maps!
  1001. set-debug-data-jump-back-dests!
  1002. debug-flag-names ; keep and flush commands
  1003. debug-flag-accessor
  1004. debug-flag-modifier
  1005. debug-data-table
  1006. with-fresh-compiler-state ;for linker
  1007. keep-source-code? ;for bcomp
  1008. keep-environment-maps?
  1009. keep-file-names?
  1010. keep-procedure-names?
  1011. new-debug-data
  1012. debug-data->info))
  1013. ;----------------
  1014. ; Module interfaces
  1015. ; Interfaces.
  1016. (define-interface interfaces-interface
  1017. (export make-simple-interface
  1018. make-compound-interface
  1019. make-modified-interface-maker
  1020. note-reference-to-interface!
  1021. interface-ref
  1022. interface-member?
  1023. interface?
  1024. interface-clients
  1025. for-each-declaration
  1026. note-interface-name!))
  1027. ; Packages.
  1028. (define-interface packages-interface
  1029. (export make-package
  1030. make-simple-package ;start.scm
  1031. make-structure
  1032. make-modified-structure
  1033. package-define!
  1034. package-lookup
  1035. package? ;command.scm
  1036. structure-lookup ;env.scm
  1037. generic-lookup ;inline.scm
  1038. structure-interface ;config.scm
  1039. package->environment
  1040. link!
  1041. structure?
  1042. package-uid ;reifier
  1043. make-new-location ;ctop.scm
  1044. structure-package
  1045. note-structure-name!
  1046. (:package :type)))
  1047. (define-interface packages-internal-interface
  1048. (export package-loaded? ;env/load-package.scm
  1049. set-package-loaded?! ;env/load-package.scm
  1050. package-name
  1051. flush-location-names
  1052. package-name-table ;debuginfo
  1053. location-info-table ;debuginfo, disclosers
  1054. package-definition
  1055. package-unstable? ;env/pacman.scm
  1056. environment-stable? ;comp/schemify.scm
  1057. package-integrate? ;env/debug.scm
  1058. package-add-static! ;opt/analyze.scm
  1059. package-refine-type! ;opt/usage.scm
  1060. ;; For scanner
  1061. for-each-export
  1062. package-accesses
  1063. package-clauses
  1064. package-file-name
  1065. package-opens
  1066. set-package-integrate?!
  1067. structure-name
  1068. ;; For package mutation
  1069. for-each-definition
  1070. set-package-opens!
  1071. set-structure-interface!
  1072. set-package-opens-thunk!
  1073. structure-clients
  1074. package-opens-thunk
  1075. package-opens-really
  1076. package-undefineds
  1077. package-undefined-but-assigneds
  1078. package-note-caching!
  1079. structure-interface-really
  1080. make-new-location
  1081. $get-location
  1082. set-package-get-location!
  1083. initialize-structure!
  1084. initialize-package!
  1085. location-for-reference
  1086. package-cached
  1087. package-definitions
  1088. package-clients))
  1089. (define-interface scan-package-interface
  1090. (export collect-packages
  1091. package-source
  1092. package-optimizer-names
  1093. check-structure))
  1094. (define-interface optimizer-interface
  1095. (export set-optimizer!
  1096. get-optimizer))
  1097. (define-interface undefined-interface
  1098. (export noting-undefined-variables
  1099. $note-undefined ;env/command.scm
  1100. ))
  1101. ;----------------
  1102. ; Inlining
  1103. (define-interface inline-interface
  1104. (export make-inline-transform
  1105. inline-transform ;bcomp/for-reify.scm
  1106. qualified->name))
  1107. (define-interface usages-interface
  1108. (export find-usages
  1109. find-node-usages
  1110. usage-name-node
  1111. usage-reference-count
  1112. usage-operator-count
  1113. usage-assignment-count))
  1114. ; End of compiler interfaces
  1115. ;----------------
  1116. (define-interface environments-interface ;cheesy
  1117. (export *structure-ref
  1118. environment-define!
  1119. environment-ref
  1120. environment-set!
  1121. interaction-environment
  1122. make-reflective-tower
  1123. scheme-report-environment
  1124. null-environment
  1125. set-interaction-environment!
  1126. set-scheme-report-environment!
  1127. with-interaction-environment
  1128. set-reflective-tower-maker!))
  1129. (define-interface defpackage-interface
  1130. (export ((def ;Formerly define-structure
  1131. define-interface ;Formerly define-signature
  1132. define-structures ;Formerly define-package
  1133. define-structure
  1134. define-module
  1135. define-syntax
  1136. define-reflective-tower-maker
  1137. export-reflective-tower-maker
  1138. compound-interface
  1139. modify subset with-prefix
  1140. export
  1141. structure structures let ; New
  1142. begin ; mostly for macros
  1143. define ; for compatibility?
  1144. a-package) ; cf. env/init-defpackage.scm
  1145. :syntax)
  1146. values
  1147. interface-of
  1148. set-verify-later!))
  1149. (define-interface types-interface
  1150. (export ((:syntax :values :arguments :value) :type)
  1151. (procedure (proc (:type :type) :type)) ; (procedure T1 T2)
  1152. (proc :syntax) ; (proc (T1 ... Tn) T)
  1153. ((:boolean
  1154. :char
  1155. :number
  1156. :complex :real :rational :integer :exact-integer
  1157. :null
  1158. :unspecific
  1159. :pair
  1160. :string
  1161. :symbol
  1162. :vector
  1163. :procedure
  1164. :input-port :output-port
  1165. :error
  1166. :escape)
  1167. :type)
  1168. (:structure :type)
  1169. :type)) ;Holy stratification, Batman!
  1170. (define-interface evaluation-interface
  1171. (export eval load load-into load-script-into eval-from-file
  1172. ; eval-scanned-forms
  1173. ))
  1174. ; Bindings needed by the form composed by REIFY-STRUCTURES.
  1175. (define-interface for-reification-interface
  1176. (export operator
  1177. simple-interface
  1178. package
  1179. transform
  1180. primop
  1181. ;; From usual-macros
  1182. usual-transform
  1183. ;; From inline
  1184. inline-transform
  1185. ;; From packages
  1186. package-define-static!
  1187. ;; From primops
  1188. make-structure
  1189. ))
  1190. ;(define-interface command-interface ...) -- moved to more-interfaces.scm