rts-packages.scm 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Jonathan Rees, Mike Sperber, Robert Ransom,
  3. ; Marcus Crestani, David Frese
  4. (define-structures ((scheme-level-1 scheme-level-1-interface)
  5. (util util-interface)
  6. (set-text-procedures (export set-char-map-procedures!
  7. set-string-ci-procedures!))
  8. (syntax-rules-data syntax-rules-data-interface)
  9. (syntax-rules-apply syntax-rules-apply-interface))
  10. (open scheme-level-0 ascii low-exceptions
  11. (subset primitives (unspecific))
  12. bitwise
  13. debug-messages
  14. code-quotation syntax-transformers) ; needed by SYNTAX-RULES
  15. (usual-transforms case quasiquote syntax-rules)
  16. (files (rts charmap)
  17. (rts base)
  18. (rts util)
  19. (rts number)
  20. (rts lize) ; Rationalize
  21. (rts syntax-rules-data)
  22. (rts syntax-rules-apply))
  23. (optimize auto-integrate))
  24. ; "Level 2"
  25. (define-structures ((record-types record-types-interface)
  26. (records-internal records-internal-interface))
  27. (open scheme-level-1 records low-exceptions
  28. primitives)
  29. (files (rts record))
  30. (optimize auto-integrate))
  31. ; The external code needs this to check the types of records.
  32. (define-structure export-the-record-type (export)
  33. (open scheme-level-1 records-internal shared-bindings)
  34. (begin
  35. (define-exported-binding "s48-the-record-type" :record-type)))
  36. (define-structures ((define-record-types define-record-types-interface)
  37. (define-sync-record-types
  38. (export (define-synchronized-record-type :syntax))))
  39. (open scheme-level-1
  40. records record-types records-internal
  41. loopholes
  42. low-proposals ;provisional-checked-record-{ref|set!}
  43. primitives) ;unspecific, record-type<=?
  44. (files (rts jar-defrecord)))
  45. (define-structures ((methods methods-interface)
  46. (meta-methods meta-methods-interface))
  47. (open scheme-level-1
  48. define-record-types
  49. records record-types records-internal
  50. bitwise util primitives
  51. low-exceptions)
  52. (files (rts method))
  53. (optimize auto-integrate))
  54. (define-structure number-i/o number-i/o-interface
  55. (open scheme-level-1 methods low-exceptions ascii)
  56. (files (rts numio)))
  57. (define-structures ((fluids fluids-interface)
  58. (fluids-internal fluids-internal-interface))
  59. (open scheme-level-1 define-record-types primitives cells)
  60. (files (rts fluid))
  61. (optimize auto-integrate))
  62. (define-structure wind wind-interface
  63. (open scheme-level-1 low-exceptions define-record-types
  64. fluids fluids-internal
  65. low-proposals
  66. escapes)
  67. (files (rts wind))
  68. (optimize auto-integrate))
  69. (define-structure session-data (export make-session-data-slot!
  70. initialize-session-data!
  71. session-data-ref
  72. session-data-set!)
  73. (open scheme-level-1
  74. primitives)
  75. (files (rts session))
  76. (optimize auto-integrate))
  77. (define-structure text-codecs text-codecs-interface
  78. (open scheme-level-1
  79. define-record-types
  80. bitwise
  81. unicode
  82. byte-vectors
  83. (subset primitives (char->utf utf->char))
  84. (subset architecture (text-encoding-option))
  85. enumerated enum-case)
  86. (files (rts text-codec))
  87. (optimize auto-integrate))
  88. (define-structure encodings encodings-interface
  89. (open scheme-level-1
  90. unicode
  91. byte-vectors
  92. (subset primitives (char->utf utf->char))
  93. (subset architecture (text-encoding-option))
  94. text-codecs
  95. enumerated
  96. conditions exceptions
  97. proposals
  98. (subset silly (reverse-list->string)))
  99. (optimize auto-integrate)
  100. (files (rts encoding)))
  101. (define-structures ((os-strings os-strings-interface)
  102. (os-strings-internal (export initialize-os-string-text-codec!)))
  103. (open scheme-level-1
  104. define-record-types
  105. exceptions
  106. byte-vectors
  107. (subset primitives (system-parameter make-immutable! copy-bytes!))
  108. (subset architecture (system-parameter-option))
  109. text-codecs encodings
  110. enumerated
  111. fluids)
  112. (files (rts os-string)))
  113. (define-structures ((i/o i/o-interface)
  114. (i/o-internal i/o-internal-interface))
  115. (open scheme-level-1
  116. exceptions
  117. fluids
  118. architecture
  119. primitives
  120. ascii unicode
  121. ports byte-vectors bitwise
  122. define-record-types
  123. proposals
  124. (subset threads-internal (maybe-commit-no-interrupts))
  125. session-data
  126. debug-messages ; for error messages
  127. methods ; &disclose <input-port> <output-port>
  128. number-i/o ; number->string for debugging
  129. text-codecs
  130. handle ; report-errors-as-warnings
  131. vm-exceptions) ; wrong-number-of-args stuff
  132. (files (rts port)
  133. (rts port-buffer)
  134. (rts current-port))
  135. (optimize auto-integrate))
  136. (define-structure channel-i/o channel-i/o-interface
  137. (open scheme-level-1 byte-vectors cells
  138. channels
  139. i/o i/o-internal
  140. (subset primitives (os-error-message))
  141. os-strings
  142. conditions
  143. (subset threads-internal (maybe-commit-no-interrupts))
  144. proposals
  145. condvars condvars-internal
  146. interrupts
  147. architecture
  148. session-data
  149. debug-messages) ; for error messages
  150. (files (rts channel)))
  151. (define-structure channel-ports channel-ports-interface
  152. (open scheme-level-1 byte-vectors define-record-types ascii
  153. ports
  154. i/o i/o-internal text-codecs
  155. channels channel-i/o
  156. os-strings
  157. proposals
  158. condvars
  159. exceptions conditions signal-conditions
  160. architecture ; channel-opening options
  161. (subset primitives (channel-parameter))
  162. handle
  163. debug-messages ; for error messages
  164. (subset util (unspecific))
  165. (subset primitives (add-finalizer! os-error-message)))
  166. (files (rts channel-port)))
  167. (define-structure conditions conditions-interface
  168. (open scheme-level-1 low-exceptions
  169. define-record-types
  170. record-types
  171. (subset records (record-type)))
  172. (files (rts condition)))
  173. (define-structure writing writing-interface
  174. (open scheme-level-1
  175. unicode
  176. number-i/o
  177. (subset i/o (write-char write-string))
  178. (subset i/o-internal (output-port-option))
  179. (subset methods (disclose))
  180. (subset i/o-internal (open-output-port?))
  181. exceptions
  182. (subset channels (channel? channel-id))
  183. (subset code-vectors (code-vector?)))
  184. (files (rts write)))
  185. (define-structure reading reading-interface
  186. (open scheme-level-1
  187. number-i/o
  188. (subset i/o-internal (input-port-option))
  189. ascii ;for dispatch table
  190. unicode
  191. conditions ;define-condition-type
  192. exceptions ;raise
  193. primitives ;make-immutable!
  194. silly) ;reverse-list->string
  195. (files (rts read)
  196. (rts syntax-info))
  197. (optimize auto-integrate))
  198. (define-structure scheme-level-2 scheme-level-2-interface
  199. (open scheme-level-1
  200. number-i/o
  201. writing
  202. reading
  203. wind
  204. i/o
  205. channel-ports))
  206. (define-structure features features-interface
  207. (open primitives i/o))
  208. ; Hairier stuff now.
  209. (define-structure templates templates-interface
  210. (open scheme-level-1 primitives)
  211. (files (rts template))
  212. (optimize auto-integrate))
  213. (define-structure continuations continuations-interface
  214. (open scheme-level-1 primitives
  215. architecture code-vectors
  216. templates closures all-operators
  217. methods)
  218. (files (rts continuation))
  219. (optimize auto-integrate))
  220. (define-structure more-types (export <closure> <code-vector> <location> <double>
  221. <template> <channel> <port> <weak-pointer>
  222. <shared-binding> <cell> <transport-link-cell>)
  223. (open scheme-level-1 methods
  224. closures code-vectors locations cells templates channels ports
  225. primitives shared-bindings)
  226. (begin (define-simple-type <closure> (<value>) closure?)
  227. (define-simple-type <code-vector> (<value>) code-vector?)
  228. (define-simple-type <location> (<value>) location?)
  229. (define-simple-type <cell> (<value>) cell?)
  230. (define-simple-type <template> (<value>) template?)
  231. (define-simple-type <channel> (<value>) channel?)
  232. (define-simple-type <port> (<value>) port?)
  233. (define-simple-type <double> (<rational>) double?)
  234. (define-simple-type <weak-pointer> (<value>) weak-pointer?)
  235. (define-method &disclose ((obj <weak-pointer>)) (list 'weak-pointer))
  236. (define-simple-type <transport-link-cell> (<value>) transport-link-cell?)
  237. (define-method &disclose ((obj <transport-link-cell>)) (list 'transport-link-cell))
  238. (define-simple-type <shared-binding> (<value>) shared-binding?)
  239. (define-method &disclose ((obj <shared-binding>))
  240. (list (if (shared-binding-is-import? obj)
  241. 'imported-binding
  242. 'exported-binding)
  243. (shared-binding-name obj)))))
  244. (define-structure enumerated enumerated-interface
  245. (open scheme-level-1 low-exceptions)
  246. (files (rts defenum scm)))
  247. (define-structure architecture vm-architecture-interface
  248. (open scheme-level-1 low-exceptions enumerated platform)
  249. (files (vm/interp arch)))
  250. (define-structure vm-data vm-data-interface
  251. (open scheme-level-1 enumerated bitwise ascii
  252. architecture platform)
  253. (begin
  254. ; Scheme/Pre-Scheme differences
  255. (define (arithmetic-shift-right n k)
  256. (arithmetic-shift n (- k)))
  257. (define shift-left arithmetic-shift)
  258. ; From vm/vm-utilities.scm
  259. (define (adjoin-bits high low k)
  260. (+ (arithmetic-shift high k) low))
  261. (define (low-bits n k)
  262. (bitwise-and n (- (arithmetic-shift 1 k) 1)))
  263. (define high-bits arithmetic-shift-right)
  264. (define unsigned-high-bits high-bits)
  265. (define-syntax assert
  266. (syntax-rules ()
  267. ((assert foo) #t)))
  268. (define (integer->unsigned x) x)
  269. (define un> >)
  270. ; We just know this.
  271. (define useful-bits-per-word c-useful-bits-per-word))
  272. (files (vm/data data)))
  273. (define-structure vm-exceptions vm-exceptions-interface
  274. (open scheme-level-1
  275. conditions
  276. enumerated enum-case
  277. architecture
  278. locations
  279. (subset primitives (set-exception-handlers! unspecific)))
  280. (files (rts vm-exception)))
  281. (define-structures ((exceptions exceptions-interface)
  282. (exceptions-internal exceptions-internal-interface)
  283. (handle handle-interface))
  284. (open scheme-level-1
  285. low-exceptions-internal
  286. signal-conditions
  287. fluids cells
  288. conditions
  289. vm-exceptions
  290. primitives ;set-exception-handlers!, etc.
  291. wind ;CWCC
  292. methods
  293. meta-methods
  294. more-types
  295. architecture
  296. enumerated
  297. debug-messages ; for printing from last-resort-condition handler
  298. vm-exposure ;primitive-catch
  299. templates ;template-code, template-info
  300. continuations ;continuation-pc, etc.
  301. locations ;location?, location-id
  302. closures ;closure-template
  303. number-i/o) ; number->string, for backtrace
  304. (files (rts exception))) ; Needs generic, arch
  305. (define-structure interrupts interrupts-interface
  306. (open scheme-level-1
  307. fluids
  308. conditions exceptions signal-conditions
  309. bitwise
  310. escapes
  311. session-data
  312. primitives
  313. architecture)
  314. (files (rts interrupt))
  315. (optimize auto-integrate)) ;mostly for threads package...
  316. (define-structure external-events external-events-interface
  317. (open scheme-level-1
  318. (subset wind (dynamic-wind))
  319. enumerated
  320. condvars condvars-internal proposals
  321. session-data
  322. interrupts
  323. (subset primitives (new-external-event-uid
  324. unregister-external-event-uid!)))
  325. (files (rts external-event)))
  326. (define-structures ((threads threads-interface)
  327. (threads-internal threads-internal-interface))
  328. (open (modify scheme-level-1 (hide min))
  329. enumerated queues cells
  330. (subset proposals (define-synchronized-record-type))
  331. define-record-types
  332. interrupts
  333. wind
  334. fluids
  335. fluids-internal ;get-dynamic-env
  336. proposals ;maybe-commit
  337. escapes ;primitive-cwcc
  338. conditions ;error?
  339. signal-conditions
  340. handle ;with-handler
  341. exceptions
  342. loopholes ;for converting #f to a continuation
  343. architecture ;time-option
  344. session-data
  345. debug-messages
  346. (subset primitives (find-all-records
  347. current-thread set-current-thread!
  348. unspecific
  349. collect
  350. time)))
  351. (optimize auto-integrate)
  352. (files (rts thread)
  353. (rts sleep)))
  354. (define-structure proposals proposals-interface
  355. (open scheme-level-1 low-proposals
  356. util
  357. define-record-types define-sync-record-types
  358. primitives) ;unspecific
  359. (files (rts proposal)))
  360. (define-structure scheduler scheduler-interface
  361. (open scheme-level-1 threads threads-internal enumerated enum-case queues
  362. debug-messages
  363. exceptions) ;error
  364. (files (rts scheduler)))
  365. (define-structure root-scheduler (export root-scheduler
  366. spawn-on-root
  367. scheme-exit-now
  368. call-when-deadlocked!)
  369. (open scheme-level-1 threads threads-internal scheduler queues
  370. session-data
  371. conditions ;warning?, error?
  372. writing ;display
  373. debug-messages ;for debugging
  374. (subset i/o (current-error-port newline))
  375. (subset exceptions (error))
  376. (subset handle (with-handler))
  377. (subset i/o-internal (output-port-forcers output-forcer-id))
  378. (subset fluids-internal (get-dynamic-env))
  379. (subset interrupts (with-interrupts-inhibited
  380. all-interrupts
  381. set-enabled-interrupts!))
  382. (subset external-events (zap-external-event-orphans!))
  383. (subset wind (call-with-current-continuation))
  384. (subset channel-i/o (zap-i/o-orphans!
  385. initialize-channel-i/o!
  386. abort-unwanted-reads!))
  387. (modify primitives (expose wait unspecific)))
  388. (files (rts root-scheduler)))
  389. (define-structure enum-case (export (enum-case :syntax))
  390. (open scheme-level-1 enumerated util)
  391. (begin
  392. (define-syntax enum-case
  393. (syntax-rules (else)
  394. ((enum-case enumeration (x ...) clause ...)
  395. (let ((temp (x ...)))
  396. (enum-case enumeration temp clause ...)))
  397. ((enum-case enumeration value ((name ...) body ...) rest ...)
  398. (if (or (= value (enum enumeration name)) ...)
  399. (begin body ...)
  400. (enum-case enumeration value rest ...)))
  401. ((enum-case enumeration value (else body ...))
  402. (begin body ...))
  403. ((enum-case enumeration value)
  404. (unspecific))))))
  405. (define-structures ((queues queues-interface)
  406. (queues-internal queues-internal-interface))
  407. (open scheme-level-1
  408. util
  409. proposals
  410. cells
  411. exceptions)
  412. (files (big queue))
  413. (optimize auto-integrate))
  414. ; No longer used
  415. ;(define-structure linked-queues (compound-interface
  416. ; queues-interface
  417. ; (export delete-queue-entry!
  418. ; queue-head))
  419. ; (open scheme-level-1 define-record-types exceptions primitives)
  420. ; (files (big linked-queue))
  421. ; (optimize auto-integrate))
  422. (define-structures ((condvars condvars-interface)
  423. (condvars-internal (export condvar-has-waiters?)))
  424. (open scheme-level-1 queues
  425. proposals
  426. threads threads-internal)
  427. (optimize auto-integrate)
  428. (files (rts condvar)))
  429. (define-structure usual-resumer (export usual-resumer
  430. make-usual-resumer
  431. add-initialization-thunk!)
  432. (open scheme-level-1
  433. os-strings
  434. (subset i/o-internal (initialize-i/o initialize-i/o-handlers!))
  435. (subset i/o (set-port-text-codec!))
  436. channel-i/o ;initialize-channel-i/o
  437. channel-ports ;{in,out}put-channel->port
  438. (subset text-codecs (find-text-codec))
  439. os-strings-internal
  440. session-data ;initialize-session-data!
  441. fluids-internal ;initialize-dynamic-state!
  442. exceptions-internal
  443. vm-exceptions
  444. interrupts ;initialize-interrupts!
  445. (subset external-events (initialize-external-events!))
  446. records-internal ;initialize-records!
  447. shared-bindings ;find-undefined-imported-bindings
  448. debug-messages ;warn about undefined bindings
  449. threads-internal ;start threads
  450. root-scheduler) ;start a scheduler
  451. (files (rts init)))
  452. ; Weak pointers & populations
  453. (define-structure weak weak-interface
  454. (open scheme-level-1 exceptions
  455. primitives) ;Open primitives instead of loading (alt weak)
  456. (files ;;(alt weak) ;Only needed if VM's weak pointers are buggy
  457. (rts population)))