blob: 9b6e4088fdb2866690787aa49cc56f311c17659e (
plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
(.module:
[lux (#- int char)
[data
["." text
format]
[collection
[list ("list/." Functor<List>)]]]
[type
abstract]]
[//
["//." name (#+ Internal)]])
(abstract: #export Base' {} Any)
(abstract: #export Object' {} Any)
(abstract: #export Array' {} Any)
(abstract: #export Void' {} Any)
(abstract: #export (Value' kind) {} Any)
(abstract: #export (Return kind) {} Any)
(abstract: #export Method {} Any)
(abstract: #export (Descriptor kind)
{}
Text
(type: #export (Value kind) (Return (Value' kind)))
(type: #export Void (Return Void'))
(do-template [<refined> <raw>]
[(type: #export <refined> (Value <raw>))]
[Base Base']
[Object Object']
[Array Array'])
(do-template [<sigil> <name> <kind>]
[(def: #export <name>
(Descriptor <kind>)
(:abstraction <sigil>))]
["Z" boolean Base]
["B" byte Base]
["S" short Base]
["I" int Base]
["J" long Base]
["C" char Base]
["F" float Base]
["D" double Base]
["V" void Void])
(def: #export object
(-> Internal (Descriptor Object))
(|>> //name.read
(text.enclose ["L" ";"])
:abstraction))
(def: #export array
(-> (Descriptor (Value Any))
(Descriptor Array))
(|>> :representation
(format "[")
:abstraction))
(def: #export (method inputs output)
(-> (List (Descriptor (Value Any)))
(Descriptor (Return Any))
(Descriptor Method))
(:abstraction
(format (|> inputs
(list/map (|>> :representation))
(text.join-with "")
(text.enclose ["(" ")"]))
(:representation output))))
(def: #export descriptor
(-> (Descriptor Any) Text)
(|>> :representation))
)
|