aboutsummaryrefslogtreecommitdiff
path: root/examples/working/macro.ey
blob: fdaf0cfe6a8a2beee179fff97ffaf9b0c8e9aeb2 (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
# an alternative to }, moving the top stack element
# into closure storage and pushing it back before
# executing the block

{ "}" | *
  { /f deff /x defv
    { x f }
  } quoted { } { * } ? *
} "}0" defq

5 { { dump }0 } * /dumpfive deff
5 { dump }0 /dumpfivetwo deff

7 dumpfive -
7 dumpfivetwo -


# import members of other objects into local scope

{
  "_" | "-021" | ".|" | "-01" | |deff
} /usef defq


# codewalker

{ "lol" dump } /lol deff

{
  1 /cont defv

  { cont } { 0 {
    exe /walkelem deff
    { sys .out .writestr } /out deff

    _ { { " " out } rep }0 /indent deff
      { 2 add walkelem }0 /walk deff

    _ code [ {
      indent [ "\"" -102 "\"\n" ] |out each
    } {
      indent _ sym _ out
                     "{" streq { 0 =cont |lol } { - } ? *
      "\n" out
    } {
      blk |walk each
    } ] * *
  } * } loop
} /codewalk defq

{ f "t" g h { a b { c d } e } codewalk } *