nydp 0.4.3 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lisp/core-010-precompile.nydp +5 -6
- data/lib/lisp/core-012-utils.nydp +2 -1
- data/lib/lisp/core-015-documentation.nydp +17 -11
- data/lib/lisp/core-020-utils.nydp +5 -5
- data/lib/lisp/core-030-syntax.nydp +29 -9
- data/lib/lisp/core-035-flow-control.nydp +15 -6
- data/lib/lisp/core-037-list-utils.nydp +22 -0
- data/lib/lisp/core-039-module.nydp +24 -0
- data/lib/lisp/core-040-utils.nydp +11 -12
- data/lib/lisp/core-041-string-utils.nydp +24 -0
- data/lib/lisp/core-042-date-utils.nydp +16 -0
- data/lib/lisp/core-043-list-utils.nydp +72 -50
- data/lib/lisp/core-080-pretty-print.nydp +50 -17
- data/lib/lisp/core-090-hook.nydp +13 -1
- data/lib/lisp/core-100-utils.nydp +82 -2
- data/lib/lisp/core-110-hash-utils.nydp +38 -0
- data/lib/lisp/core-120-settings.nydp +11 -2
- data/lib/lisp/core-900-benchmarking.nydp +17 -17
- data/lib/lisp/tests/accum-examples.nydp +28 -1
- data/lib/lisp/tests/at-syntax-examples.nydp +17 -0
- data/lib/lisp/tests/best-examples.nydp +9 -0
- data/lib/lisp/tests/builtin-tests.nydp +10 -0
- data/lib/lisp/tests/case-examples.nydp +14 -0
- data/lib/lisp/tests/date-examples.nydp +54 -1
- data/lib/lisp/tests/detect-examples.nydp +12 -0
- data/lib/lisp/tests/dp-examples.nydp +24 -0
- data/lib/lisp/tests/empty-examples.nydp +1 -1
- data/lib/lisp/tests/error-tests.nydp +4 -4
- data/lib/lisp/tests/hash-examples.nydp +17 -0
- data/lib/lisp/tests/list-grep-examples.nydp +40 -0
- data/lib/lisp/tests/list-tests.nydp +39 -0
- data/lib/lisp/tests/module-examples.nydp +10 -0
- data/lib/lisp/tests/parser-tests.nydp +16 -0
- data/lib/lisp/tests/pretty-print-tests.nydp +8 -2
- data/lib/lisp/tests/settings-examples.nydp +1 -1
- data/lib/lisp/tests/string-tests.nydp +48 -0
- data/lib/lisp/tests/syntax-tests.nydp +5 -1
- data/lib/nydp.rb +6 -3
- data/lib/nydp/assignment.rb +10 -3
- data/lib/nydp/builtin.rb +1 -1
- data/lib/nydp/builtin/abs.rb +8 -0
- data/lib/nydp/builtin/date.rb +9 -0
- data/lib/nydp/builtin/error.rb +1 -1
- data/lib/nydp/builtin/hash.rb +11 -1
- data/lib/nydp/builtin/ruby_wrap.rb +69 -0
- data/lib/nydp/builtin/string_pad_left.rb +7 -0
- data/lib/nydp/builtin/string_pad_right.rb +7 -0
- data/lib/nydp/builtin/type_of.rb +9 -6
- data/lib/nydp/closure.rb +0 -3
- data/lib/nydp/cond.rb +23 -1
- data/lib/nydp/context_symbol.rb +14 -6
- data/lib/nydp/core.rb +33 -29
- data/lib/nydp/core_ext.rb +5 -4
- data/lib/nydp/date.rb +17 -17
- data/lib/nydp/function_invocation.rb +33 -25
- data/lib/nydp/helper.rb +12 -2
- data/lib/nydp/interpreted_function.rb +68 -40
- data/lib/nydp/literal.rb +1 -1
- data/lib/nydp/pair.rb +13 -2
- data/lib/nydp/parser.rb +3 -0
- data/lib/nydp/symbol_lookup.rb +7 -7
- data/lib/nydp/version.rb +1 -1
- data/nydp.gemspec +2 -4
- data/spec/date_spec.rb +79 -0
- data/spec/parser_spec.rb +11 -0
- metadata +15 -36
- data/lib/nydp/builtin/car.rb +0 -7
- data/lib/nydp/builtin/cdr.rb +0 -7
- data/lib/nydp/builtin/cons.rb +0 -9
@@ -85,6 +85,16 @@
|
|
85
85
|
(examples-for mod
|
86
86
|
("modulus for two ints" (mod 64 6) 4))
|
87
87
|
|
88
|
+
(examples-for abs
|
89
|
+
("a positive integer" (abs 64) 64)
|
90
|
+
("a negative integer" (abs -42) 42)
|
91
|
+
("zero" (abs 0) 0)
|
92
|
+
("negative zero" (abs -0) 0)
|
93
|
+
("float zero" (abs 0.0) 0)
|
94
|
+
("float negative zero" (abs -0.0) 0)
|
95
|
+
("float negative" (abs -1.6) 1.6)
|
96
|
+
("float positive" (abs 4.2) 4.2))
|
97
|
+
|
88
98
|
(examples-for inspect
|
89
99
|
("truth" (inspect t) "t")
|
90
100
|
("nil" (inspect nil) "nil")
|
@@ -0,0 +1,14 @@
|
|
1
|
+
(examples-for 'case
|
2
|
+
("expands to an if-expression"
|
3
|
+
(do (reset-uniq-counter)
|
4
|
+
(explain-mac 1
|
5
|
+
`(case eq? person.name
|
6
|
+
"conan" (greet person)
|
7
|
+
"egg" (delete person)
|
8
|
+
"bach" (play person)
|
9
|
+
else (interrogate person))))
|
10
|
+
(let caseval-1 (dot-syntax person name)
|
11
|
+
(if (eq? caseval-1 "conan") (greet person)
|
12
|
+
(eq? caseval-1 "egg") (delete person)
|
13
|
+
(eq? caseval-1 "bach") (play person)
|
14
|
+
(interrogate person)))))
|
@@ -18,6 +18,9 @@
|
|
18
18
|
("navigates to week end from sun" (let d (date 2015 11 1) (to-string d.end-of-week)) "2015-11-01" )
|
19
19
|
("navigates to week end" (let d (date 2015 11 6) (to-string d.end-of-week)) "2015-11-08" )
|
20
20
|
|
21
|
+
("works with apply" (to-string (apply date '(2006 6 21))) "2006-06-21")
|
22
|
+
("works with apply again" (to-string (apply date 2006 6 21 nil)) "2006-06-21")
|
23
|
+
|
21
24
|
("parses string" (let d (date "2004-03-12") (list d.year d.month d.day)) (2004 3 12))
|
22
25
|
|
23
26
|
("can act as hash key"
|
@@ -47,4 +50,54 @@
|
|
47
50
|
("adds days" (let d (date 2015 11 8) (to-string (+ d 1))) "2015-11-09")
|
48
51
|
("adds more days" (let d (date 2015 11 8) (to-string (+ d 10))) "2015-11-18")
|
49
52
|
("subtracts a day" (let d (date 2015 11 18) (to-string (- d 1))) "2015-11-17")
|
50
|
-
("subtracts more days" (let d (date 2015 11 18) (to-string (- d 5))) "2015-11-13")
|
53
|
+
("subtracts more days" (let d (date 2015 11 18) (to-string (- d 5))) "2015-11-13")
|
54
|
+
|
55
|
+
("advances by -2 weeks" (let d (date 1965 6 8) (to-string (+ d '(-2 week)))) "1965-05-25")
|
56
|
+
("advances by -1 week" (let d (date 1965 6 8) (to-string (+ d '(-1 week)))) "1965-06-01")
|
57
|
+
("advances by 1 week" (let d (date 1965 6 8) (to-string (+ d '( 1 week)))) "1965-06-15")
|
58
|
+
("advances by 2 weeks" (let d (date 1965 6 8) (to-string (+ d '( 2 week)))) "1965-06-22")
|
59
|
+
|
60
|
+
("advances by -2 weeks" (let d (date 1965 6 8) (to-string (+ d '(-2 week)))) "1965-05-25")
|
61
|
+
("advances by -1 week" (let d (date 1965 6 8) (to-string (+ d '(-1 week)))) "1965-06-01")
|
62
|
+
("advances by 1 week" (let d (date 1965 6 8) (to-string (+ d '( 1 week)))) "1965-06-15")
|
63
|
+
("advances by 2 weeks" (let d (date 1965 6 8) (to-string (+ d '( 2 week)))) "1965-06-22")
|
64
|
+
|
65
|
+
("advances by -2 days" (let d (date 1965 6 8) (to-string (+ d '(-2 day)))) "1965-06-06")
|
66
|
+
("advances by -1 day" (let d (date 1965 6 8) (to-string (+ d '(-1 day)))) "1965-06-07")
|
67
|
+
("advances by 1 day" (let d (date 1965 6 8) (to-string (+ d '( 1 day)))) "1965-06-09")
|
68
|
+
("advances by 2 days" (let d (date 1965 6 8) (to-string (+ d '( 2 day)))) "1965-06-10")
|
69
|
+
|
70
|
+
("advances by -2 months" (let d (date 1965 6 8) (to-string (+ d '(-2 month)))) "1965-04-08")
|
71
|
+
("advances by -1 month" (let d (date 1965 6 8) (to-string (+ d '(-1 month)))) "1965-05-08")
|
72
|
+
("advances by 1 month" (let d (date 1965 6 8) (to-string (+ d '( 1 month)))) "1965-07-08")
|
73
|
+
("advances by 2 months" (let d (date 1965 6 8) (to-string (+ d '( 2 month)))) "1965-08-08")
|
74
|
+
|
75
|
+
("advances by -2 years" (let d (date 1965 6 8) (to-string (+ d '(-2 year)))) "1963-06-08")
|
76
|
+
("advances by -1 year" (let d (date 1965 6 8) (to-string (+ d '(-1 year)))) "1964-06-08")
|
77
|
+
("advances by 1 year" (let d (date 1965 6 8) (to-string (+ d '( 1 year)))) "1966-06-08")
|
78
|
+
("advances by 2 years" (let d (date 1965 6 8) (to-string (+ d '( 2 year)))) "1967-06-08")
|
79
|
+
|
80
|
+
("adapts for leap years" (let d (date 2019 12 31) (to-string (+ d '( 2 month)))) "2020-02-29")
|
81
|
+
("jumps one year" (let d (date 2019 12 31) (to-string (+ d '( 1 year) ))) "2020-12-31")
|
82
|
+
("jumps to 28 feb a year later" (let d (date 2019 12 31) (to-string (+ d '(14 month)))) "2021-02-28")
|
83
|
+
("jumps to end of june" (let d (date 2019 12 31) (to-string (+ d '( 6 month)))) "2020-06-30")
|
84
|
+
("jumps to end of july" (let d (date 2019 12 31) (to-string (+ d '( 7 month)))) "2020-07-31")
|
85
|
+
("jumps from end feb to end feb" (let d (date 2020 02 29) (to-string (+ d '(12 month)))) "2021-02-28")
|
86
|
+
|
87
|
+
("finds anniversary before a given date in previous year"
|
88
|
+
(to-string (anniversary/previous (date 2019 6 21) (date 1949 10 3)))
|
89
|
+
"2018-10-03")
|
90
|
+
|
91
|
+
("finds anniversary before a given date in same year"
|
92
|
+
(to-string (anniversary/previous (date 2019 11 20) (date 1949 10 3)))
|
93
|
+
"2019-10-03")
|
94
|
+
|
95
|
+
("finds anniversary after a given date in same year"
|
96
|
+
(to-string (anniversary/next (date 2019 6 21) (date 1949 10 3)))
|
97
|
+
"2019-10-03")
|
98
|
+
|
99
|
+
|
100
|
+
("finds anniversary after a given date in following year"
|
101
|
+
(to-string (anniversary/next (date 2019 11 20) (date 1949 10 3)))
|
102
|
+
"2020-10-03")
|
103
|
+
)
|
@@ -26,6 +26,18 @@
|
|
26
26
|
"zz")
|
27
27
|
nil)
|
28
28
|
|
29
|
+
("empty list"
|
30
|
+
(detect present? nil)
|
31
|
+
nil)
|
32
|
+
|
33
|
+
("present? for list of empty things"
|
34
|
+
(detect present? (list "" nil {} ()))
|
35
|
+
nil)
|
36
|
+
|
37
|
+
("present? for mostly empty things"
|
38
|
+
(detect present? (list "" nil 42 {} ()))
|
39
|
+
42)
|
40
|
+
|
29
41
|
("nil for nil"
|
30
42
|
(detect nil nil)
|
31
43
|
nil)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
(examples-for dp
|
2
|
+
("returns nil for nil"
|
3
|
+
(dp)
|
4
|
+
nil)
|
5
|
+
|
6
|
+
("returns nil when everything is empty"
|
7
|
+
(dp "" nil {} ())
|
8
|
+
nil)
|
9
|
+
|
10
|
+
("returns the first item if not empty"
|
11
|
+
(dp 'a "" {} ())
|
12
|
+
a)
|
13
|
+
|
14
|
+
("returns the second item if not empty"
|
15
|
+
(dp "" 'b "" {} ())
|
16
|
+
b)
|
17
|
+
|
18
|
+
("returns the third item if not empty"
|
19
|
+
(dp "" {} 'c "" {} ())
|
20
|
+
c)
|
21
|
+
|
22
|
+
("returns the last item if not empty"
|
23
|
+
(dp "" {} () 'd)
|
24
|
+
d))
|
@@ -20,10 +20,10 @@
|
|
20
20
|
(on-err (error "bar")
|
21
21
|
(on-err (error "toto")
|
22
22
|
(error "primum errorum")))))
|
23
|
-
"
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
"foo
|
24
|
+
bar
|
25
|
+
toto
|
26
|
+
primum errorum")
|
27
27
|
|
28
28
|
("handles errors but any ensuring clause gets called first"
|
29
29
|
(with (x nil y nil)
|
@@ -1,3 +1,20 @@
|
|
1
|
+
(examples-for hash-replace-keys
|
2
|
+
("changes strings to symbols"
|
3
|
+
(let h (hash-replace-keys λk(sym k) { "a" 1 "b" 2 "c" 3 })
|
4
|
+
(list (hash-keys h) (hash-values h)))
|
5
|
+
((a b c) (1 2 3)))
|
6
|
+
|
7
|
+
("appends a character to keys"
|
8
|
+
(let h (hash-replace-keys λk(string-pieces k "!") { "a" 1 "b" 2 "c" 3 })
|
9
|
+
(list (hash-keys h) (hash-values h)))
|
10
|
+
(("a!" "b!" "c!") (1 2 3))))
|
11
|
+
|
12
|
+
(examples-for hash
|
13
|
+
("builds a hash"
|
14
|
+
(let h (hash "a" 1 'b 2 '(x y) 3)
|
15
|
+
(list (hash-keys h) (hash-values h)))
|
16
|
+
(("a" b (x y)) (1 2 3))))
|
17
|
+
|
1
18
|
(examples-for hash-values
|
2
19
|
("returns the list of values of the given hash"
|
3
20
|
(hash-values { a 1 b 2 c 'c d "hello" })
|
@@ -0,0 +1,40 @@
|
|
1
|
+
(examples-for list/grep
|
2
|
+
("it finds strings"
|
3
|
+
(list/grep
|
4
|
+
string?
|
5
|
+
(list 'foo "bar" '(a b "c d" e) { ignores "hash elements" }))
|
6
|
+
("bar" "c d"))
|
7
|
+
|
8
|
+
("it finds items whose car is carryon"
|
9
|
+
(list/grep
|
10
|
+
λf(caris 'carryon f)
|
11
|
+
'(foo
|
12
|
+
(carryon 1 2 3 42)
|
13
|
+
(bar (40 41 42 (carryon 43 (carryon 42) 41)))
|
14
|
+
42
|
15
|
+
99))
|
16
|
+
((carryon 1 2 3 42)
|
17
|
+
(carryon 43 (carryon 42) 41)
|
18
|
+
(carryon 42)))
|
19
|
+
|
20
|
+
("it finds items of length 3"
|
21
|
+
(list/grep
|
22
|
+
λf(eq? 3 (len f))
|
23
|
+
'(foo
|
24
|
+
(2 3 42)
|
25
|
+
(bar (40 41 42) (43 (x y z) 41))
|
26
|
+
42
|
27
|
+
99))
|
28
|
+
((2 3 42)
|
29
|
+
(bar (40 41 42) (43 (x y z) 41))
|
30
|
+
(40 41 42)
|
31
|
+
(43 (x y z) 41)
|
32
|
+
(x y z)))
|
33
|
+
|
34
|
+
("it finds code within interpolated strings"
|
35
|
+
(list/seek-cars 'include (parse-in-string "
|
36
|
+
<div>~~(include \"empty-name.html\")</div>
|
37
|
+
<div>~~(map λn(let name n (include \"show-name.html\")) {names})'</div>
|
38
|
+
"))
|
39
|
+
((include "empty-name.html")
|
40
|
+
(include "show-name.html"))))
|
@@ -205,3 +205,42 @@
|
|
205
205
|
("finds value corresponding to given key"
|
206
206
|
(alref 'c '((a b) (c d)))
|
207
207
|
d))
|
208
|
+
|
209
|
+
(examples-for list/fill
|
210
|
+
("returns an overfull list unchanged"
|
211
|
+
(list/fill '(a b c) λ(just 'x) 2)
|
212
|
+
(a b c))
|
213
|
+
|
214
|
+
("returns a full list unchanged"
|
215
|
+
(list/fill '(a b c) λ(just 'x) 3)
|
216
|
+
(a b c))
|
217
|
+
|
218
|
+
("returns an unfull list with extra items"
|
219
|
+
(list/fill '(a b c) λ(just 'x) 4)
|
220
|
+
(a b c x))
|
221
|
+
|
222
|
+
("returns an unfull list with extra items"
|
223
|
+
(let idx 0
|
224
|
+
(list/fill '(a b c) λ(++ idx) 10))
|
225
|
+
(a b c 1 2 3 4 5 6 7)))
|
226
|
+
|
227
|
+
(examples-for list/last
|
228
|
+
("returns the thing if it's nil"
|
229
|
+
(list/last nil)
|
230
|
+
nil)
|
231
|
+
|
232
|
+
("returns the thing if it's not a pair"
|
233
|
+
(list/last 42)
|
234
|
+
42)
|
235
|
+
|
236
|
+
("returns the cdr if it's not a pair"
|
237
|
+
(list/last '(x . y))
|
238
|
+
y)
|
239
|
+
|
240
|
+
("returns the last item in the list"
|
241
|
+
(list/last '(x y z))
|
242
|
+
z)
|
243
|
+
|
244
|
+
("returns nil if it's the last item in the list"
|
245
|
+
(list/last '(x y z nil))
|
246
|
+
nil))
|
@@ -0,0 +1,10 @@
|
|
1
|
+
(examples-for module
|
2
|
+
("it overrides external namespace internally"
|
3
|
+
(with (x (fn (n) "the old outside x ~n")
|
4
|
+
y (fn (n) "the old outside y ~n"))
|
5
|
+
(module foo
|
6
|
+
(def x (n) (* 2 n))
|
7
|
+
(def y (n) (+ 2 n))
|
8
|
+
(export bar (a b) (* (x a) (y b))))
|
9
|
+
(list (foo/bar 3 5) (x 43) (y 44)))
|
10
|
+
(42 "the old outside x 43" "the old outside y 44")))
|
@@ -29,6 +29,22 @@
|
|
29
29
|
(parse "%this.and.that")
|
30
30
|
((percent-syntax || (dot-syntax this and that))) )
|
31
31
|
|
32
|
+
("parses a plain at-symbol"
|
33
|
+
(pre-compile (car (parse "@")))
|
34
|
+
@)
|
35
|
+
|
36
|
+
("parses a plain at-prefix-syntax symbol"
|
37
|
+
(parse "@this")
|
38
|
+
((at-syntax || this)))
|
39
|
+
|
40
|
+
("parses an at-prefix-mixed-with-dot-syntax symbol"
|
41
|
+
(parse "@this.and.that")
|
42
|
+
((dot-syntax (at-syntax || this) and that)))
|
43
|
+
|
44
|
+
("at-prefix-mixed-with-dot-syntax expands to plain hash lookup: @this.and.that equivalent to @.this.and.that"
|
45
|
+
(pre-compile (car (parse "@this.and.that")))
|
46
|
+
(hash-get (hash-get (hash-get @ (quote this)) (quote and)) (quote that)))
|
47
|
+
|
32
48
|
("parses a dot-syntax symbol"
|
33
49
|
(parse "this.that.zozo")
|
34
50
|
((dot-syntax this that zozo)) )
|
@@ -286,5 +286,11 @@ toto")
|
|
286
286
|
"%x.y")
|
287
287
|
|
288
288
|
("brace list"
|
289
|
-
(pp '(
|
290
|
-
|
289
|
+
(pp '(let hello {a 1 b "two" c 'three d ,four e (sub invocation) f {sub brace list here} }))
|
290
|
+
"(let hello { a 1
|
291
|
+
b \"two\"
|
292
|
+
c 'three
|
293
|
+
d ,four
|
294
|
+
e (sub invocation)
|
295
|
+
f { sub brace
|
296
|
+
list here } })"))
|
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
("wraps arg in a fn expression if it is a hash"
|
19
19
|
(settings/fn '{ a 1 b 2 })
|
20
|
-
(
|
20
|
+
(k { a 1 b 2 }))
|
21
21
|
|
22
22
|
("wraps arg in a fn expression if it is a complex expression"
|
23
23
|
(settings/fn '(let foo this that (rfnwith (complex stuff) (%td.tricky#syntax))))
|
@@ -1,3 +1,51 @@
|
|
1
|
+
(examples-for string-eval-fn
|
2
|
+
("returns a function to eval a user-supplied string"
|
3
|
+
(let s "hello \~|u|, \~x + \~y is \~(+ x y), thank you!"
|
4
|
+
(let f (string-eval-fn s '(u x y))
|
5
|
+
(f "world" 37 5)))
|
6
|
+
"hello world, 37 + 5 is 42, thank you!"))
|
7
|
+
|
8
|
+
(examples-for string/eval-with-args
|
9
|
+
("evals a user-supplied string"
|
10
|
+
(let s "hello \~|u|, \~x + \~y is \~(+ x y), thank heavens!"
|
11
|
+
(string/eval-with-args s '(u x y) "world" 36 6))
|
12
|
+
"hello world, 36 + 6 is 42, thank heavens!")
|
13
|
+
|
14
|
+
("reports errors"
|
15
|
+
(on-err errors
|
16
|
+
(let s "hello \~|u|, \~x + \~y is \~(+ x y), thank heavens!"
|
17
|
+
(string/eval-with-args s '(a b c) "world" 36 6)))
|
18
|
+
("error evaluating \"hello \~|u|, \~x + \~y is \~(+ x y), thank heavens!\"
|
19
|
+
with arg names (a b c)
|
20
|
+
and args (\"world\" 36 6)"
|
21
|
+
"unbound symbol: y")))
|
22
|
+
|
23
|
+
(examples-for string/pad-left
|
24
|
+
("does not change a string whose length is greater than the given length"
|
25
|
+
(string/pad-left "Toronto" 3 "X")
|
26
|
+
"Toronto")
|
27
|
+
|
28
|
+
("adds left padding to a string such that the result is the given length"
|
29
|
+
(string/pad-left "toto" 8 "X")
|
30
|
+
"XXXXtoto")
|
31
|
+
|
32
|
+
("accepts multi-character padding"
|
33
|
+
(string/pad-left "toto" 12 "XYZ")
|
34
|
+
"XYZXYZXYtoto"))
|
35
|
+
|
36
|
+
(examples-for string/pad-right
|
37
|
+
("does not change a string whose length is greater than the given length"
|
38
|
+
(string/pad-right "Toronto" 3 "X")
|
39
|
+
"Toronto")
|
40
|
+
|
41
|
+
("adds right padding to a string such that the result is the given length"
|
42
|
+
(string/pad-right "toto" 8 "X")
|
43
|
+
"totoXXXX")
|
44
|
+
|
45
|
+
("accepts multi-character padding"
|
46
|
+
(string/pad-right "toto" 12 "XYZ")
|
47
|
+
"totoXYZXYZXY"))
|
48
|
+
|
1
49
|
(examples-for string-split
|
2
50
|
("splits a string using given expression"
|
3
51
|
(string-split "a and b and c and d" " and ")
|
@@ -10,7 +10,11 @@
|
|
10
10
|
("dislikes no-prefix"
|
11
11
|
(on-err (joinstr "\n" errors)
|
12
12
|
(pre-compile '(:foo 1 2 3)))
|
13
|
-
"
|
13
|
+
"expanding
|
14
|
+
(colon-syntax || foo)
|
15
|
+
with
|
16
|
+
(fn names ((orf (hash-get colon-syntax-overrides car [0#0#0]names) default-colon-syntax) [0#0#0]names))
|
17
|
+
Irregular ': syntax: got (|| foo) : not prefix-syntax : in :foo"))
|
14
18
|
|
15
19
|
(examples-for prefix-list
|
16
20
|
("one argument"
|
data/lib/nydp.rb
CHANGED
@@ -11,6 +11,9 @@ module Nydp
|
|
11
11
|
function = Symbol.mk(function_name.to_sym, ns).value
|
12
12
|
function.invoke vm, r2n(args)
|
13
13
|
vm.thread
|
14
|
+
rescue StandardError => e
|
15
|
+
friendly_args = args.map { |a| a.respond_to?(:_nydp_compact_inspect) ? a._nydp_compact_inspect : a }
|
16
|
+
raise Nydp::Error.new("Invoking #{function_name}\nwith args #{friendly_args.inspect}")
|
14
17
|
end
|
15
18
|
|
16
19
|
def self.reader txt ; Nydp::StringReader.new txt ; end
|
@@ -48,9 +51,9 @@ module Nydp
|
|
48
51
|
|
49
52
|
def self.repl options={ }
|
50
53
|
toplevel do
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
+
launch_time = Time.now
|
55
|
+
silent = options.delete :silent
|
56
|
+
ns = options.delete :ns
|
54
57
|
last_script_time = Time.now
|
55
58
|
puts "welcome to nydp #{options.inspect}" unless silent
|
56
59
|
reader = Nydp::ReadlineReader.new $stdin, "nydp > "
|
data/lib/nydp/assignment.rb
CHANGED
@@ -8,6 +8,8 @@ module Nydp
|
|
8
8
|
|
9
9
|
def execute vm
|
10
10
|
@name.assign vm.peek_arg, vm.current_context
|
11
|
+
rescue
|
12
|
+
raise "assigning #{@name.inspect}"
|
11
13
|
end
|
12
14
|
|
13
15
|
def to_s
|
@@ -26,9 +28,12 @@ module Nydp
|
|
26
28
|
end
|
27
29
|
|
28
30
|
def initialize name, value, value_src
|
29
|
-
@value_src = value_src
|
30
|
-
|
31
|
-
|
31
|
+
@name, @value, @value_src = name, value, value_src
|
32
|
+
@instructions = cons(value, cons(AssignmentInstruction.new(name)))
|
33
|
+
end
|
34
|
+
|
35
|
+
def lexical_reach n
|
36
|
+
[@name.lexical_reach(n), @value.lexical_reach(n)].max
|
32
37
|
end
|
33
38
|
|
34
39
|
def to_s
|
@@ -39,6 +44,8 @@ module Nydp
|
|
39
44
|
|
40
45
|
def execute vm
|
41
46
|
vm.push_ctx_instructions @instructions
|
47
|
+
rescue
|
48
|
+
raise "assigning #{@value.inspect} to #{@name.inspect}"
|
42
49
|
end
|
43
50
|
end
|
44
51
|
end
|