nydp 0.1.9.1 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/lisp/core-060-benchmarking.nydp +20 -20
- data/lib/lisp/tests/builtin-tests.nydp +26 -12
- data/lib/nydp/builtin.rb +20 -3
- data/lib/nydp/builtin/minus.rb +5 -0
- data/lib/nydp/builtin/plus.rb +5 -0
- data/lib/nydp/builtin/times.rb +5 -0
- data/lib/nydp/closure.rb +4 -0
- data/lib/nydp/function_invocation.rb +14 -0
- data/lib/nydp/interpreted_function.rb +6 -0
- data/lib/nydp/lexical_context.rb +9 -0
- data/lib/nydp/lexical_context_builder.rb +90 -17
- data/lib/nydp/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6eec33bbcb86a9efa22b6e3fe9be0ab2f792e54c
|
4
|
+
data.tar.gz: 61bf6dde8f734b52a82779be3b8127714cd4775c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47dd8b9bdd75f050da422385256417a2ed334c1b988dbb718c53f2be91905174af5390a37817b9938eddc09b67b056e718310932fa00375f622240607a33f06c
|
7
|
+
data.tar.gz: d947fab3747a487f5d99db30ae90186ee8b2424fb3370b8463567430afc94ff533c1ec51b7770ecf93aeed1ed919dcdbc5b28886e92487aa1547168187454252
|
data/.gitignore
CHANGED
@@ -17,26 +17,26 @@
|
|
17
17
|
(assign times (+ elapsed times))
|
18
18
|
(p " took: ~elapsed ms, ~(/ elapsed iterations) ms per iteration"))))
|
19
19
|
(p "total ~(just times), average ~(/ times repeats) per run")
|
20
|
-
(p "================================================\n")
|
21
|
-
|
20
|
+
(p "================================================\n")
|
21
|
+
"~desc : total ~(just times), average ~(/ times repeats) per run"))
|
22
22
|
|
23
|
-
(let private-x 0
|
24
|
-
(let inc-x (fn () (assign private-x (+ 1 private-x)))
|
25
|
-
(def bm-zero-arg-call ()
|
26
|
-
(for i 0 400 (inc-x)))))
|
27
23
|
|
28
|
-
(
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
(def bm-0-arg-times-call () (*))
|
25
|
+
(def bm-1-arg-times-call () (* 23))
|
26
|
+
(def bm-2-arg-times-call () (* 23 24))
|
27
|
+
(def bm-3-arg-times-call () (* 23 24 25))
|
28
|
+
(def bm-4-arg-times-call () (* 23 24 25 26))
|
32
29
|
|
33
|
-
(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
(
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
30
|
+
(def rbs (name)
|
31
|
+
(let summary nil
|
32
|
+
;; (push (bm "pythag" bm-pythag 10 20) summary)
|
33
|
+
;; (push (bm "zero arg call" bm-zero-arg-call 10 100) summary)
|
34
|
+
;; (push (bm "one arg call" bm-one-arg-call 10 100) summary)
|
35
|
+
;; (push (bm "two arg call" bm-two-arg-call 10 100) summary)
|
36
|
+
;; (push (bm "three arg call" bm-three-arg-call 10 100) summary)
|
37
|
+
(push (bm "0 arg times" bm-0-arg-times-call 10 10000) summary)
|
38
|
+
(push (bm "1 arg times" bm-1-arg-times-call 10 10000) summary)
|
39
|
+
(push (bm "2 arg times" bm-2-arg-times-call 10 10000) summary)
|
40
|
+
(push (bm "3 arg times" bm-3-arg-times-call 10 10000) summary)
|
41
|
+
(push (bm "4 arg times" bm-4-arg-times-call 10 10000) summary)
|
42
|
+
(each s summary (p name " " s))))
|
@@ -42,19 +42,33 @@
|
|
42
42
|
))
|
43
43
|
|
44
44
|
(examples-for +
|
45
|
-
("adds
|
46
|
-
|
47
|
-
|
45
|
+
("adds nothing" (+) 0)
|
46
|
+
("adds 1 int" (+ 42) 42)
|
47
|
+
("adds 2 ints" (+ 42 45) 87)
|
48
|
+
("adds 3 ints" (+ 11 22 33) 66)
|
48
49
|
|
49
|
-
("adds
|
50
|
-
|
51
|
-
|
50
|
+
("adds 1 float" (+ 4.2) 4.2)
|
51
|
+
("adds 2 floats" (+ 4.2 4.5) 8.7)
|
52
|
+
("adds 3 floats" (+ 1.1 2.2 3.3) 6.6))
|
52
53
|
|
53
54
|
(examples-for -
|
54
|
-
("subtracts
|
55
|
-
|
56
|
-
|
55
|
+
("subtracts nothing" (-) 0)
|
56
|
+
("subtracts 1 int" (- 42) -42)
|
57
|
+
("subtracts 2 ints" (- 45 42) 3)
|
58
|
+
("subtracts 3 ints" (- 66 22 33) 11)
|
57
59
|
|
58
|
-
("subtracts
|
59
|
-
|
60
|
-
|
60
|
+
("subtracts 1 float" (- 4.2) -4.2)
|
61
|
+
("subtracts 2 floats" (- 4.2 4.7) -0.5)
|
62
|
+
("subtracts 3 floats" (- 6.6 1.1 3.3) 2.2))
|
63
|
+
|
64
|
+
(examples-for *
|
65
|
+
("multiplies nothing" (*) 1)
|
66
|
+
("multiplies 1 int" (* 42) 42)
|
67
|
+
("multiplies 2 ints" (* 5 42) 210)
|
68
|
+
("multiplies 3 ints" (* 2 3 5) 30)
|
69
|
+
("multiplies 3 ints" (* 2 3 5 7) 210)
|
70
|
+
|
71
|
+
("multiplies 1 float" (* 4.2) 4.2)
|
72
|
+
("multiplies 2 floats" (* 4.2 0.5) 2.1)
|
73
|
+
("multiplies 3 floats" (* 4.2 -2.5) -10.5)
|
74
|
+
("multiplies 4 floats" (* 6.6 1.1 3.3) 23.958))
|
data/lib/nydp/builtin.rb
CHANGED
@@ -5,16 +5,33 @@ module Nydp::Builtin
|
|
5
5
|
module Base
|
6
6
|
include Nydp::Helper
|
7
7
|
|
8
|
+
def builtin_invoke_1 vm ; builtin_invoke vm, Nydp.NIL ; end
|
9
|
+
def builtin_invoke_2 vm, a ; builtin_invoke vm, cons(a) ; end
|
10
|
+
def builtin_invoke_3 vm, a0, a1 ; builtin_invoke vm, cons(a0, cons(a1)) ; end
|
11
|
+
def builtin_invoke_4 vm, a0, a1, a2 ; builtin_invoke vm, cons(a0, cons(a1, cons(a2))) ; end
|
12
|
+
|
8
13
|
def invoke_1 vm
|
9
|
-
|
14
|
+
builtin_invoke_1 vm
|
15
|
+
rescue Exception => e
|
16
|
+
handle_error e, Nydp.NIL
|
10
17
|
end
|
11
18
|
|
12
19
|
def invoke_2 vm, arg
|
13
|
-
|
20
|
+
builtin_invoke_2 vm, arg
|
21
|
+
rescue Exception => e
|
22
|
+
handle_error e, cons(arg)
|
14
23
|
end
|
15
24
|
|
16
25
|
def invoke_3 vm, arg_0, arg_1
|
17
|
-
|
26
|
+
builtin_invoke_3 vm, arg_0, arg_1
|
27
|
+
rescue Exception => e
|
28
|
+
handle_error e, cons(arg_0, cons(arg_1))
|
29
|
+
end
|
30
|
+
|
31
|
+
def invoke_4 vm, arg_0, arg_1, arg_2
|
32
|
+
builtin_invoke_4 vm, arg_0, arg_1, arg_2
|
33
|
+
rescue Exception => e
|
34
|
+
handle_error e, cons(arg_0, cons(arg_1, cons(arg_2)))
|
18
35
|
end
|
19
36
|
|
20
37
|
def invoke vm, args
|
data/lib/nydp/builtin/minus.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
class Nydp::Builtin::Minus
|
2
2
|
include Nydp::Builtin::Base
|
3
3
|
|
4
|
+
def invoke_1 vm ; vm.push_arg 0 ; end
|
5
|
+
def invoke_2 vm, a ; vm.push_arg -a ; end
|
6
|
+
def invoke_3 vm, a0, a1 ; vm.push_arg(a0 - a1) ; end
|
7
|
+
def invoke_4 vm, a0, a1, a2 ; vm.push_arg(a0 - a1 - a2) ; end
|
8
|
+
|
4
9
|
def builtin_invoke vm, args
|
5
10
|
vm.push_arg diff(args.cdr, args.car)
|
6
11
|
end
|
data/lib/nydp/builtin/plus.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
class Nydp::Builtin::Plus
|
2
2
|
include Nydp::Builtin::Base
|
3
3
|
|
4
|
+
def builtin_invoke_1 vm ; vm.push_arg 0 ; end
|
5
|
+
def builtin_invoke_2 vm, a ; vm.push_arg a ; end
|
6
|
+
def builtin_invoke_3 vm, a0, a1 ; vm.push_arg(a0 + a1) ; end
|
7
|
+
def builtin_invoke_4 vm, a0, a1, a2 ; vm.push_arg(a0 + a1 + a2) ; end
|
8
|
+
|
4
9
|
def builtin_invoke vm, args
|
5
10
|
vm.push_arg case args.car
|
6
11
|
when Nydp::Pair
|
data/lib/nydp/builtin/times.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
class Nydp::Builtin::Times
|
2
2
|
include Nydp::Builtin::Base
|
3
3
|
|
4
|
+
def invoke_1 vm ; vm.push_arg 1 ; end
|
5
|
+
def invoke_2 vm, a ; vm.push_arg a ; end
|
6
|
+
def invoke_3 vm, a0, a1 ; vm.push_arg(a0 * a1) ; end
|
7
|
+
def invoke_4 vm, a0, a1, a2 ; vm.push_arg(a0 * a1 * a2) ; end
|
8
|
+
|
4
9
|
def builtin_invoke vm, args
|
5
10
|
vm.push_arg multiply(args, 1)
|
6
11
|
end
|
data/lib/nydp/closure.rb
CHANGED
@@ -58,6 +58,18 @@ module Nydp
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
class Invocation_4 < Invocation::Base
|
62
|
+
def execute vm
|
63
|
+
arg_2 = vm.pop_arg
|
64
|
+
arg_1 = vm.pop_arg
|
65
|
+
arg_0 = vm.pop_arg
|
66
|
+
f = vm.pop_arg
|
67
|
+
f.invoke_4 vm, arg_0, arg_1, arg_2
|
68
|
+
rescue Exception => e
|
69
|
+
handle e, f, cons(arg_0, cons(arg_1, cons(arg_2)))
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
61
73
|
class Invocation_N < Invocation::Base
|
62
74
|
def initialize arg_count, source_expression
|
63
75
|
super source_expression
|
@@ -85,6 +97,8 @@ module Nydp
|
|
85
97
|
Invocation::Invocation_2.new(expression)
|
86
98
|
when 3
|
87
99
|
Invocation::Invocation_3.new(expression)
|
100
|
+
when 4
|
101
|
+
Invocation::Invocation_4.new(expression)
|
88
102
|
else
|
89
103
|
Invocation::Invocation_N.new(expression.size, expression)
|
90
104
|
end
|
@@ -31,6 +31,12 @@ module Nydp
|
|
31
31
|
vm.push_instructions self.body, lc
|
32
32
|
end
|
33
33
|
|
34
|
+
def invoke_4 vm, parent_context, arg_0, arg_1, arg_2
|
35
|
+
lc = LexicalContext.new parent_context
|
36
|
+
set_args_3 lc, arg_0, arg_1, arg_2
|
37
|
+
vm.push_instructions self.body, lc
|
38
|
+
end
|
39
|
+
|
34
40
|
def invoke vm, parent_context, arg_values
|
35
41
|
lc = LexicalContext.new parent_context
|
36
42
|
set_args lc, arg_values
|
data/lib/nydp/lexical_context.rb
CHANGED
@@ -45,6 +45,15 @@ class Nydp::LexicalContext
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
+
def set_args_3 names, arg_0, arg_1, arg_2
|
49
|
+
if pair? names
|
50
|
+
set names.car, arg_0
|
51
|
+
set_args_2 names.cdr, arg_1, arg_2
|
52
|
+
elsif Nydp.NIL.isnt? names
|
53
|
+
set names, cons(arg_0, cons(arg_1, cons(arg_2)))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
48
57
|
def set_index index, value
|
49
58
|
values[index] = value
|
50
59
|
end
|
@@ -2,17 +2,19 @@ module Nydp::LexicalContextBuilder
|
|
2
2
|
extend Nydp::Helper
|
3
3
|
|
4
4
|
module B_0
|
5
|
-
def initialize_names _
|
6
|
-
def set_args_1 lc, a
|
7
|
-
def set_args_2 lc, a_0, a_1
|
8
|
-
def
|
5
|
+
def initialize_names _ ; end
|
6
|
+
def set_args_1 lc, a ; end
|
7
|
+
def set_args_2 lc, a_0, a_1 ; end
|
8
|
+
def set_args_3 lc, a_0, a_1, a_2 ; end
|
9
|
+
def set_args lc, args ; end
|
9
10
|
end
|
10
11
|
|
11
12
|
module B_1
|
12
|
-
def initialize_names names
|
13
|
-
def set_args_1 lc, arg
|
14
|
-
def set_args_2 lc, arg_0, arg_1
|
15
|
-
def
|
13
|
+
def initialize_names names ; @param_name = names.car ; end
|
14
|
+
def set_args_1 lc, arg ; lc.set @param_name, arg ; end
|
15
|
+
def set_args_2 lc, arg_0, arg_1 ; lc.set @param_name, arg_0 ; end
|
16
|
+
def set_args_3 lc, arg_0, arg_1, arg_2 ; lc.set @param_name, arg_0 ; end
|
17
|
+
def set_args lc, args ; lc.set @param_name, args.car ; end
|
16
18
|
end
|
17
19
|
|
18
20
|
module B_2
|
@@ -27,18 +29,48 @@ module Nydp::LexicalContextBuilder
|
|
27
29
|
lc.set @param_name_0, arg_0
|
28
30
|
lc.set @param_name_1, arg_1
|
29
31
|
end
|
32
|
+
def set_args_3 lc, arg_0, arg_1, arg_2
|
33
|
+
lc.set @param_name_0, arg_0
|
34
|
+
lc.set @param_name_1, arg_1
|
35
|
+
end
|
30
36
|
def set_args lc, args
|
31
37
|
lc.set @param_name_0, args.car
|
32
38
|
lc.set @param_name_1, args.cdr.car
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
42
|
+
module B_3
|
43
|
+
def initialize_names names
|
44
|
+
@param_name_0 = names.car
|
45
|
+
@param_name_1 = names.cdr.car
|
46
|
+
@param_name_2 = names.cdr.cdr.car
|
47
|
+
end
|
48
|
+
def set_args_1 lc, arg
|
49
|
+
lc.set @param_name_0, arg
|
50
|
+
end
|
51
|
+
def set_args_2 lc, arg_0, arg_1
|
52
|
+
lc.set @param_name_0, arg_0
|
53
|
+
lc.set @param_name_1, arg_1
|
54
|
+
end
|
55
|
+
def set_args_3 lc, arg_0, arg_1, arg_2
|
56
|
+
lc.set @param_name_0, arg_0
|
57
|
+
lc.set @param_name_1, arg_1
|
58
|
+
lc.set @param_name_2, arg_2
|
59
|
+
end
|
60
|
+
def set_args lc, args
|
61
|
+
lc.set @param_name_0, args.car
|
62
|
+
lc.set @param_name_1, args.cdr.car
|
63
|
+
lc.set @param_name_2, args.cdr.cdr.car
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
36
67
|
module B_0_Rest
|
37
68
|
include Nydp::Helper
|
38
|
-
def initialize_names names
|
39
|
-
def set_args_1 lc, arg
|
40
|
-
def set_args_2 lc, arg_0, arg_1
|
41
|
-
def
|
69
|
+
def initialize_names names ; @param_name = names ; end
|
70
|
+
def set_args_1 lc, arg ; lc.set @param_name, cons(arg) ; end
|
71
|
+
def set_args_2 lc, arg_0, arg_1 ; lc.set @param_name, cons(arg_0, cons(arg_1)) ; end
|
72
|
+
def set_args_3 lc, arg_0, arg_1, arg_2 ; lc.set @param_name, cons(arg_0, cons(arg_1, cons(arg_2))) ; end
|
73
|
+
def set_args lc, args ; lc.set @param_name, args ; end
|
42
74
|
end
|
43
75
|
|
44
76
|
module B_1_Rest
|
@@ -54,6 +86,10 @@ module Nydp::LexicalContextBuilder
|
|
54
86
|
lc.set @param_name_0, arg_0
|
55
87
|
lc.set @param_name_1, cons(arg_1)
|
56
88
|
end
|
89
|
+
def set_args_3 lc, arg_0, arg_1, arg_2
|
90
|
+
lc.set @param_name_0, arg_0
|
91
|
+
lc.set @param_name_1, cons(arg_1, cons(arg_2))
|
92
|
+
end
|
57
93
|
def set_args lc, args
|
58
94
|
lc.set @param_name_0, args.car
|
59
95
|
lc.set @param_name_1, args.cdr
|
@@ -73,6 +109,11 @@ module Nydp::LexicalContextBuilder
|
|
73
109
|
lc.set @param_name_0, arg_0
|
74
110
|
lc.set @param_name_1, arg_1
|
75
111
|
end
|
112
|
+
def set_args_3 lc, arg_0, arg_1, arg_2
|
113
|
+
lc.set @param_name_0, arg_0
|
114
|
+
lc.set @param_name_1, arg_1
|
115
|
+
lc.set @param_name_2, cons(arg_2)
|
116
|
+
end
|
76
117
|
def set_args lc, args
|
77
118
|
lc.set @param_name_0, args.car
|
78
119
|
lc.set @param_name_1, args.cdr.car
|
@@ -80,6 +121,32 @@ module Nydp::LexicalContextBuilder
|
|
80
121
|
end
|
81
122
|
end
|
82
123
|
|
124
|
+
module B_3_Rest
|
125
|
+
def initialize_names names
|
126
|
+
@param_name_0 = names.car
|
127
|
+
@param_name_1 = names.cdr.car
|
128
|
+
@param_name_2 = names.cdr.cdr
|
129
|
+
end
|
130
|
+
def set_args_1 lc, arg
|
131
|
+
lc.set @param_name_0, arg
|
132
|
+
end
|
133
|
+
def set_args_2 lc, arg_0, arg_1
|
134
|
+
lc.set @param_name_0, arg_0
|
135
|
+
lc.set @param_name_1, arg_1
|
136
|
+
end
|
137
|
+
def set_args_3 lc, arg_0, arg_1, arg_2
|
138
|
+
lc.set @param_name_0, arg_0
|
139
|
+
lc.set @param_name_1, arg_1
|
140
|
+
lc.set @param_name_2, arg_2
|
141
|
+
end
|
142
|
+
def set_args lc, args
|
143
|
+
lc.set @param_name_0, args.car
|
144
|
+
lc.set @param_name_1, args.cdr.car
|
145
|
+
lc.set @param_name_2, args.cdr.cdr.car
|
146
|
+
lc.set @param_name_3, args.cdr.cdr.cdr
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
83
150
|
module B_X
|
84
151
|
def initialize_names names
|
85
152
|
@param_names = names
|
@@ -91,6 +158,11 @@ module Nydp::LexicalContextBuilder
|
|
91
158
|
lc.set @param_names.car, arg_0
|
92
159
|
lc.set @param_names.cdr.car, arg_1
|
93
160
|
end
|
161
|
+
def set_args_3 lc, arg_0, arg_1, arg_2
|
162
|
+
lc.set @param_names.car, arg_0
|
163
|
+
lc.set @param_names.cdr.car, arg_1
|
164
|
+
lc.set @param_names.cdr.cdr.car, arg_2
|
165
|
+
end
|
94
166
|
def set_args lc, args
|
95
167
|
_set_args lc, @param_names, args
|
96
168
|
end
|
@@ -104,10 +176,11 @@ module Nydp::LexicalContextBuilder
|
|
104
176
|
|
105
177
|
module B_X_Rest
|
106
178
|
include Nydp::Helper
|
107
|
-
def initialize_names names
|
108
|
-
def set_args_1 lc, arg
|
109
|
-
def set_args_2 lc, arg_0, arg_1
|
110
|
-
def
|
179
|
+
def initialize_names names ; @param_names = names ; end
|
180
|
+
def set_args_1 lc, arg ; set_args lc, cons(arg) ; end
|
181
|
+
def set_args_2 lc, arg_0, arg_1 ; set_args lc, cons(arg_0, cons(arg_1)) ; end
|
182
|
+
def set_args_3 lc, arg_0, arg_1, arg_2 ; set_args lc, cons(arg_0, cons(arg_1, cons(arg_2))) ; end
|
183
|
+
def set_args lc, args ; _set_args lc, @param_names, args ; end
|
111
184
|
def _set_args lc, names, args
|
112
185
|
if pair? names
|
113
186
|
lc.set names.car, args.car
|
@@ -121,7 +194,7 @@ module Nydp::LexicalContextBuilder
|
|
121
194
|
def self.select arg_names
|
122
195
|
if pair? arg_names
|
123
196
|
size = pair?(arg_names) ? arg_names.size : 0
|
124
|
-
class_name = "B_#{size >
|
197
|
+
class_name = "B_#{size > 3 ? "X" : size}#{arg_names.proper? ? "" : "_Rest"}"
|
125
198
|
else
|
126
199
|
class_name = "B_0_Rest"
|
127
200
|
end
|
data/lib/nydp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nydp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Conan Dalton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|