aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/target/jvm/program/resources.lux
blob: fa83c40715676214c9b37adf98cebe2fcd135ddd (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
(.module:
  [lux #*
   [abstract
    ["." equivalence (#+ Equivalence)]]
   [data
    [format
     [".F" binary (#+ Writer) ("#@." monoid)]]]]
  ["." /// #_
   [encoding
    ["#." unsigned (#+ U2)]]])

(type: #export Resources
  {#max-stack U2
   #max-locals U2})

(def: #export start
  Resources
  {#max-stack (///unsigned.u2 0)
   #max-locals (///unsigned.u2 0)})

(def: #export length
  ($_ n/+
      ## u2 max_stack;
      ///unsigned.u2-bytes
      ## u2 max_locals;
      ///unsigned.u2-bytes))

(def: #export equivalence
  (Equivalence Resources)
  ($_ equivalence.product
      ## u2 max_stack;
      ///unsigned.equivalence
      ## u2 max_locals;
      ///unsigned.equivalence
      ))

(def: #export (writer resources)
  (Writer Resources)
  ($_ binaryF@compose
      ## u2 max_stack;
      (///unsigned.u2-writer (get@ #max-stack resources))
      ## u2 max_locals;
      (///unsigned.u2-writer (get@ #max-locals resources))
      ))