aboutsummaryrefslogtreecommitdiff
path: root/examples/working/macro.ey
blob: f09a7ded312dd633f9e1a462e12d852830f8b48a (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 { } { * } ? *
} "}_" defq

5 { { dump }_ } * /dumpfive deff
5 { dump }_ /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 }_ /indent deff
      { 2 add walkelem }_ /walk deff

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

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