nydp 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +44 -0
  3. data/lib/lisp/core-010-precompile.nydp +13 -16
  4. data/lib/lisp/core-012-utils.nydp +21 -6
  5. data/lib/lisp/core-015-documentation.nydp +58 -24
  6. data/lib/lisp/core-017-builtin-dox.nydp +49 -42
  7. data/lib/lisp/core-020-utils.nydp +5 -5
  8. data/lib/lisp/core-030-syntax.nydp +191 -96
  9. data/lib/lisp/core-035-flow-control.nydp +41 -14
  10. data/lib/lisp/core-037-list-utils.nydp +36 -14
  11. data/lib/lisp/core-039-module.nydp +24 -0
  12. data/lib/lisp/core-040-utils.nydp +51 -23
  13. data/lib/lisp/core-041-string-utils.nydp +37 -9
  14. data/lib/lisp/core-042-date-utils.nydp +21 -1
  15. data/lib/lisp/core-043-list-utils.nydp +99 -73
  16. data/lib/lisp/core-045-dox-utils.nydp +5 -0
  17. data/lib/lisp/core-070-prefix-list.nydp +1 -1
  18. data/lib/lisp/core-080-pretty-print.nydp +57 -17
  19. data/lib/lisp/core-090-hook.nydp +35 -1
  20. data/lib/lisp/core-100-utils.nydp +110 -15
  21. data/lib/lisp/core-110-hash-utils.nydp +61 -0
  22. data/lib/lisp/core-120-settings.nydp +46 -0
  23. data/lib/lisp/core-130-validations.nydp +51 -0
  24. data/lib/lisp/{core-060-benchmarking.nydp → core-900-benchmarking.nydp} +107 -19
  25. data/lib/lisp/tests/accum-examples.nydp +28 -1
  26. data/lib/lisp/tests/aif-examples.nydp +8 -3
  27. data/lib/lisp/tests/andify-examples.nydp +7 -0
  28. data/lib/lisp/tests/at-syntax-examples.nydp +17 -0
  29. data/lib/lisp/tests/best-examples.nydp +9 -0
  30. data/lib/lisp/tests/builtin-tests.nydp +19 -0
  31. data/lib/lisp/tests/case-examples.nydp +14 -0
  32. data/lib/lisp/tests/cdr-set-examples.nydp +6 -0
  33. data/lib/lisp/tests/date-examples.nydp +56 -1
  34. data/lib/lisp/tests/destructuring-examples.nydp +46 -14
  35. data/lib/lisp/tests/detect-examples.nydp +12 -0
  36. data/lib/lisp/tests/dp-examples.nydp +24 -0
  37. data/lib/lisp/tests/each-tests.nydp +5 -0
  38. data/lib/lisp/tests/empty-examples.nydp +1 -1
  39. data/lib/lisp/tests/error-tests.nydp +4 -4
  40. data/lib/lisp/tests/explain-mac-examples.nydp +1 -1
  41. data/lib/lisp/tests/filter-forms-examples.nydp +15 -0
  42. data/lib/lisp/tests/foundation-test.nydp +12 -0
  43. data/lib/lisp/tests/hash-examples.nydp +26 -2
  44. data/lib/lisp/tests/list-grep-examples.nydp +40 -0
  45. data/lib/lisp/tests/list-tests.nydp +58 -1
  46. data/lib/lisp/tests/map-hash-examples.nydp +11 -0
  47. data/lib/lisp/tests/module-examples.nydp +10 -0
  48. data/lib/lisp/tests/multi-assign-examples.nydp +6 -0
  49. data/lib/lisp/tests/parser-tests.nydp +25 -0
  50. data/lib/lisp/tests/pretty-print-tests.nydp +17 -14
  51. data/lib/lisp/tests/set-difference-examples.nydp +8 -0
  52. data/lib/lisp/tests/set-intersection-examples.nydp +16 -0
  53. data/lib/lisp/tests/set-union-examples.nydp +8 -0
  54. data/lib/lisp/tests/settings-examples.nydp +40 -0
  55. data/lib/lisp/tests/sort-examples.nydp +8 -0
  56. data/lib/lisp/tests/string-tests.nydp +65 -1
  57. data/lib/lisp/tests/syntax-tests.nydp +5 -1
  58. data/lib/lisp/tests/to-integer-examples.nydp +16 -0
  59. data/lib/lisp/tests/validation-examples.nydp +15 -0
  60. data/lib/lisp/tests/zap-examples.nydp +12 -0
  61. data/lib/nydp.rb +13 -7
  62. data/lib/nydp/assignment.rb +10 -3
  63. data/lib/nydp/builtin.rb +1 -1
  64. data/lib/nydp/builtin/abs.rb +8 -0
  65. data/lib/nydp/builtin/cdr_set.rb +1 -6
  66. data/lib/nydp/builtin/date.rb +15 -1
  67. data/lib/nydp/builtin/error.rb +1 -1
  68. data/lib/nydp/builtin/handle_error.rb +1 -1
  69. data/lib/nydp/builtin/hash.rb +27 -45
  70. data/lib/nydp/builtin/inspect.rb +1 -1
  71. data/lib/nydp/builtin/plus.rb +10 -2
  72. data/lib/nydp/builtin/random_string.rb +2 -2
  73. data/lib/nydp/builtin/{car.rb → regexp.rb} +2 -2
  74. data/lib/nydp/builtin/ruby_wrap.rb +72 -0
  75. data/lib/nydp/builtin/string_match.rb +2 -2
  76. data/lib/nydp/builtin/string_pad_left.rb +7 -0
  77. data/lib/nydp/builtin/string_pad_right.rb +7 -0
  78. data/lib/nydp/builtin/string_replace.rb +1 -1
  79. data/lib/nydp/builtin/string_split.rb +4 -3
  80. data/lib/nydp/builtin/to_integer.rb +23 -0
  81. data/lib/nydp/builtin/to_string.rb +2 -9
  82. data/lib/nydp/builtin/type_of.rb +9 -6
  83. data/lib/nydp/closure.rb +0 -3
  84. data/lib/nydp/cond.rb +23 -1
  85. data/lib/nydp/context_symbol.rb +14 -6
  86. data/lib/nydp/core.rb +36 -28
  87. data/lib/nydp/core_ext.rb +54 -0
  88. data/lib/nydp/date.rb +37 -31
  89. data/lib/nydp/function_invocation.rb +34 -26
  90. data/lib/nydp/hash.rb +5 -6
  91. data/lib/nydp/helper.rb +41 -25
  92. data/lib/nydp/interpreted_function.rb +68 -40
  93. data/lib/nydp/literal.rb +1 -1
  94. data/lib/nydp/pair.rb +22 -5
  95. data/lib/nydp/parser.rb +11 -7
  96. data/lib/nydp/string_atom.rb +16 -22
  97. data/lib/nydp/symbol.rb +40 -27
  98. data/lib/nydp/symbol_lookup.rb +7 -7
  99. data/lib/nydp/tokeniser.rb +2 -2
  100. data/lib/nydp/truth.rb +17 -10
  101. data/lib/nydp/version.rb +1 -1
  102. data/lib/nydp/vm.rb +7 -2
  103. data/nydp.gemspec +2 -4
  104. data/spec/date_spec.rb +115 -22
  105. data/spec/embedded_spec.rb +12 -12
  106. data/spec/foreign_hash_spec.rb +14 -2
  107. data/spec/hash_non_hash_behaviour_spec.rb +7 -7
  108. data/spec/hash_spec.rb +24 -2
  109. data/spec/nydp_spec.rb +14 -2
  110. data/spec/pair_spec.rb +3 -1
  111. data/spec/parser_spec.rb +31 -20
  112. data/spec/rand_spec.rb +3 -3
  113. data/spec/spec_helper.rb +13 -1
  114. data/spec/symbol_spec.rb +31 -0
  115. data/spec/time_spec.rb +1 -1
  116. metadata +31 -38
  117. data/lib/nydp/builtin/cdr.rb +0 -7
  118. data/lib/nydp/builtin/cons.rb +0 -9
@@ -2,6 +2,6 @@ class Nydp::Builtin::Inspect
2
2
  include Nydp::Builtin::Base, Singleton
3
3
 
4
4
  def builtin_invoke vm, args
5
- vm.push_arg Nydp::StringAtom.new(args.car.inspect)
5
+ vm.push_arg args.car.inspect
6
6
  end
7
7
  end
@@ -10,13 +10,21 @@ class Nydp::Builtin::Plus
10
10
  vm.push_arg case args.car
11
11
  when Nydp::Pair
12
12
  sum(args, Nydp::NIL)
13
- when String, Nydp::StringAtom
14
- sum(args, Nydp::StringAtom.new(""))
13
+ when String
14
+ string_concat("", args)
15
15
  else
16
16
  sum(args.cdr, args.car)
17
17
  end
18
18
  end
19
19
 
20
+ def string_concat init, others
21
+ while others && !Nydp::NIL.is?(others)
22
+ init << others.car.to_s
23
+ others = others.cdr
24
+ end
25
+ init
26
+ end
27
+
20
28
  def sum args, accum
21
29
  while args && !Nydp::NIL.is?(args)
22
30
  accum += args.car
@@ -5,7 +5,7 @@ class Nydp::Builtin::RandomString
5
5
 
6
6
  def builtin_invoke vm, args
7
7
  length = args.car unless Nydp::NIL.is?(args)
8
- s = (0...(length || 10)).map { RANDOM_CHARS[rand(RANDOM_CHARS.size)] }.join
9
- vm.push_arg Nydp::StringAtom.new s
8
+ s = (0...(length || 10)).inject("") {|a,i| a << RANDOM_CHARS[rand(RANDOM_CHARS.size)] }
9
+ vm.push_arg s
10
10
  end
11
11
  end
@@ -1,7 +1,7 @@
1
- class Nydp::Builtin::Car
1
+ class Nydp::Builtin::Regexp
2
2
  include Nydp::Builtin::Base, Singleton
3
3
 
4
4
  def builtin_invoke vm, args
5
- vm.push_arg args.car.car
5
+ vm.push_arg Regexp.compile(args.car.to_s)
6
6
  end
7
7
  end
@@ -0,0 +1,72 @@
1
+ class Nydp::Builtin::RubyWrap
2
+ @@builtins = { }
3
+
4
+ def self.builtins
5
+ @@builtins
6
+ end
7
+
8
+ class Coder < Struct.new(:name, :size, :code, :helpers)
9
+ def msize ; size + 1 ; end
10
+
11
+ def arg_mapper
12
+ case size
13
+ when 0 ; ""
14
+ when 1 ; ", a0"
15
+ when 2 ; ", a0, a1"
16
+ when 3 ; ", a0, a1, a2"
17
+ when 4 ; ", a0, a1, a2, a3"
18
+ when 5 ; ", a0, a1, a2, a3, a4"
19
+ else ; raise "maximum 5 arguments!"
20
+ end
21
+ end
22
+
23
+ def to_ruby
24
+ generic_code = code.
25
+ gsub(/a0/, "args.car").
26
+ gsub(/a1/, "args.cdr.car").
27
+ gsub(/a2/, "args.cdr.cdr.car").
28
+ gsub(/a3/, "args.cdr.cdr.cdr.car").
29
+ gsub(/a4/, "args.cdr.cdr.cdr.cdr.car")
30
+ <<CODE
31
+ class #{name}
32
+ include Nydp::Builtin::Base, Singleton#{helpers}
33
+
34
+ def builtin_invoke_#{msize} vm#{ arg_mapper }
35
+ vm.push_arg(#{code})
36
+ end
37
+
38
+ def builtin_invoke vm, args
39
+ vm.push_arg(#{generic_code})
40
+ end
41
+ end
42
+ CODE
43
+ end
44
+ end
45
+
46
+ def self.const_missing const
47
+ coder = @@builtins[const]
48
+ coder ? class_eval(coder.to_ruby) : super
49
+ const_get const
50
+ end
51
+
52
+ class WrapperBuilder
53
+ def initialize default_helpers
54
+ @default_helpers = default_helpers.to_s.strip != "" ? ", #{default_helpers}" : ""
55
+ end
56
+
57
+ def build name, args, code, helpers=""
58
+ extra_helpers = helpers.to_s.strip != "" ? ", #{helpers}" : ""
59
+ Nydp::Builtin::RubyWrap.builtins[name.to_sym] = Coder.new(name.to_sym, args, code, "#{@default_helpers}#{extra_helpers}")
60
+ end
61
+ end
62
+
63
+ def self.builder includes
64
+ WrapperBuilder.new(includes)
65
+ end
66
+
67
+ core_builder = builder ""
68
+ core_builder.build(:Cons, 2, %{ Nydp::Pair.new(a0, a1) } )
69
+ core_builder.build(:Car , 1, %{ a0.car } )
70
+ core_builder.build(:Cdr , 1, %{ a0.cdr } )
71
+ core_builder.build(:Log , 1, %{ r2n Nydp.logger.info(a0.to_s) } )
72
+ end
@@ -10,8 +10,8 @@ class Nydp::Builtin::StringMatch
10
10
 
11
11
  if match
12
12
  result = Nydp::Hash.new
13
- result[kmatch] = Nydp::StringAtom.new match.to_s
14
- result[kcaptures] = Nydp::Pair.from_list match.captures.map { |cap| Nydp::StringAtom.new cap.to_s }
13
+ result[kmatch] = match.to_s
14
+ result[kcaptures] = Nydp::Pair.from_list match.captures.map { |cap| cap.to_s }
15
15
  else
16
16
  result = Nydp::NIL
17
17
  end
@@ -0,0 +1,7 @@
1
+ class Nydp::Builtin::StringPadLeft
2
+ include Nydp::Builtin::Base, Singleton
3
+
4
+ def builtin_invoke_4 vm, str, len, padding
5
+ vm.push_arg str.to_s.rjust(len, padding.to_s)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class Nydp::Builtin::StringPadRight
2
+ include Nydp::Builtin::Base, Singleton
3
+
4
+ def builtin_invoke_4 vm, str, len, padding
5
+ vm.push_arg str.to_s.ljust(len, padding.to_s)
6
+ end
7
+ end
@@ -7,6 +7,6 @@ class Nydp::Builtin::StringReplace
7
7
  target = args.cdr.cdr.car.to_s
8
8
  result = target.to_s.gsub to_remove, to_insert
9
9
 
10
- vm.push_arg Nydp::StringAtom.new result
10
+ vm.push_arg result
11
11
  end
12
12
  end
@@ -3,10 +3,11 @@ class Nydp::Builtin::StringSplit
3
3
 
4
4
  def builtin_invoke vm, args
5
5
  target = args.car.to_s
6
- separator = args.cdr.car.to_s
6
+ separator = args.cdr.car
7
+ separator = separator.to_s unless separator.is_a? Regexp
8
+
7
9
  result = target.split separator, -1
8
- list = result.map { |s| Nydp::StringAtom.new s }
9
10
 
10
- vm.push_arg Nydp::Pair.from_list list
11
+ vm.push_arg Nydp::Pair.from_list result
11
12
  end
12
13
  end
@@ -0,0 +1,23 @@
1
+ module Nydp::Builtin
2
+ class ToInteger
3
+ include Nydp::Builtin::Base, Singleton
4
+
5
+ def builtin_invoke_2 vm, arg
6
+ arg = n2r arg
7
+
8
+ i = if arg.respond_to? :to_i
9
+ arg.to_i
10
+ elsif arg.respond_to? :to_time
11
+ arg.to_time.to_i
12
+ else
13
+ arg.to_s.to_i
14
+ end
15
+
16
+ vm.push_arg r2n i
17
+ end
18
+
19
+ def builtin_invoke vm, args
20
+ builtin_invoke_2 vm, args.car
21
+ end
22
+ end
23
+ end
@@ -3,14 +3,7 @@ module Nydp::Builtin
3
3
  include Nydp::Builtin::Base, Singleton
4
4
 
5
5
  def builtin_invoke vm, args
6
- arg = args.car
7
- val = case arg.class
8
- when Nydp::StringAtom
9
- arg
10
- else
11
- Nydp::StringAtom.new arg.to_s
12
- end
13
- vm.push_arg val
6
+ vm.push_arg args.car.to_s
14
7
  end
15
8
  end
16
9
 
@@ -20,7 +13,7 @@ module Nydp::Builtin
20
13
  def builtin_invoke vm, args
21
14
  arg = args.car
22
15
  val = case arg
23
- when Nydp::StringAtom
16
+ when String
24
17
  arg.length
25
18
  else
26
19
  0
@@ -1,18 +1,21 @@
1
1
  class Nydp::Builtin::TypeOf
2
2
  include Nydp::Builtin::Base, Singleton
3
3
 
4
- def builtin_invoke vm, args
5
- arg = args.car
6
- typename = if arg.respond_to?(:nydp_type)
7
- arg.nydp_type.to_sym
8
- elsif arg.is_a? Numeric
4
+ def builtin_invoke_1 vm, a0
5
+ typename = if a0.respond_to?(:nydp_type)
6
+ a0.nydp_type.to_sym
7
+ elsif a0.is_a? Numeric
9
8
  :number
10
9
  else
11
- "ruby/#{arg.class.name}".to_sym
10
+ "ruby/#{a0.class.name}".to_sym
12
11
  end
13
12
 
14
13
  type = Nydp::Symbol.mk(typename, vm.ns)
15
14
 
16
15
  vm.push_arg(type || Nydp::NIL)
17
16
  end
17
+
18
+ def builtin_invoke vm, args
19
+ builtin_invoke_1 vm, args.car
20
+ end
18
21
  end
data/lib/nydp/closure.rb CHANGED
@@ -4,9 +4,6 @@ module Nydp
4
4
 
5
5
  def initialize ifn, context
6
6
  @ifn, @context = ifn, context
7
- # TODO don't create a closure where it's not needed (zero_arg functions), use parent context instead
8
- # TODO see SymbolLookup for how to ensure variable references stay on track
9
- # TODO see InterpretedFunction for where to not instantiate new LexicalContext
10
7
  end
11
8
 
12
9
  def invoke_1 vm
data/lib/nydp/cond.rb CHANGED
@@ -6,6 +6,10 @@ module Nydp
6
6
  @when_true, @when_false = when_true, when_false
7
7
  end
8
8
 
9
+ def lexical_reach n
10
+ [@when_true.lexical_reach(n), @when_false.lexical_reach(n)].max
11
+ end
12
+
9
13
  def execute vm
10
14
  (Nydp::NIL.is?(vm.args.pop) ? @when_false : @when_true).execute vm
11
15
  end
@@ -13,6 +17,7 @@ module Nydp
13
17
  def inspect
14
18
  "when_true:#{@when_true.inspect}:when_false:#{@when_false.inspect}"
15
19
  end
20
+
16
21
  def to_s
17
22
  "#{@when_true.to_s} #{@when_false.to_s}"
18
23
  end
@@ -27,6 +32,10 @@ module Nydp
27
32
  @condition, @conditional = cond, cons(ExecuteConditionalInstruction.new(when_true, when_false))
28
33
  end
29
34
 
35
+ def lexical_reach n
36
+ [@condition.lexical_reach(n), @conditional.car.lexical_reach(n)].max
37
+ end
38
+
30
39
  def execute vm
31
40
  vm.push_ctx_instructions conditional
32
41
  condition.execute vm
@@ -35,6 +44,7 @@ module Nydp
35
44
  def inspect
36
45
  "cond:#{condition.inspect}:#{conditional.inspect}"
37
46
  end
47
+
38
48
  def to_s
39
49
  "(cond #{condition.to_s} #{conditional.to_s})"
40
50
  end
@@ -57,7 +67,7 @@ module Nydp
57
67
  new(cond, when_true, when_false)
58
68
  end
59
69
  else
60
- raise "can't compile Cond: #{expr.inspect}"
70
+ raise "can't compile Cond: #{expressions.inspect}"
61
71
  end
62
72
  end
63
73
  end
@@ -70,6 +80,10 @@ module Nydp
70
80
  @condition, @when_true, @when_false = cond, when_true, when_false
71
81
  end
72
82
 
83
+ def lexical_reach n
84
+ [@condition.lexical_reach(n), @when_true.lexical_reach(n), @when_false.lexical_reach(n)].max
85
+ end
86
+
73
87
  def inspect ; "cond:#{@condition.inspect}:#{@when_true.inspect}:#{@when_false.inspect}" ; end
74
88
  def to_s ; "(cond #{@condition.to_s} #{@when_true.to_s} #{@when_false.to_s})" ; end
75
89
  end
@@ -80,6 +94,14 @@ module Nydp
80
94
  vm.push_ctx_instructions (truth ? @when_true : @when_false)
81
95
  end
82
96
 
97
+ def lexical_reach n
98
+ cr = @condition.lexical_reach(n)
99
+ ct = @when_true.car.lexical_reach(n)
100
+ cf = @when_false.car.lexical_reach(n)
101
+
102
+ [cr, ct, cf].max
103
+ end
104
+
83
105
  def self.build cond, when_true, when_false
84
106
  tsig = sig(when_true)
85
107
  fsig = sig(when_false)
@@ -25,12 +25,18 @@ module Nydp
25
25
  end
26
26
 
27
27
  code = <<-KLASS
28
- def initialize name
29
- @name = name
28
+ def initialize name, lexical_depth
29
+ @name, @lexical_depth = name, lexical_depth
30
+ end
31
+
32
+ def lexical_reach n
33
+ @lexical_depth + n
30
34
  end
31
35
 
32
36
  def value ctx
33
37
  ctx#{getctx}.#{at_index} || Nydp::NIL
38
+ rescue
39
+ raise "failed looking up \#{@name.inspect} (\#{@name.class.name})"
34
40
  end
35
41
 
36
42
  def assign value, ctx
@@ -45,16 +51,18 @@ module Nydp
45
51
 
46
52
  def depth ; #{depth} ; end
47
53
  def inspect ; to_s ; end
48
- def to_s ; "[#{depth}##{binding_index}]\#{@name}" ; end
54
+ def to_s ; "[#{depth}##{binding_index}#\#{@lexical_depth}]\#{@name}" ; end
49
55
  KLASS
50
56
 
51
57
  const_set name, Class.new(Nydp::ContextSymbol) {
52
- eval code
58
+ eval code, binding, name.to_s, 0
53
59
  }
54
60
  end
55
61
 
56
- def self.build depth, name, binding_index
57
- const_get(:"ContextSymbol_#{depth}_#{binding_index}").new(name)
62
+ def self.build effective_depth, name, binding_index, lexical_depth
63
+ const_get(:"ContextSymbol_#{effective_depth}_#{binding_index}").new(name, lexical_depth)
64
+ rescue
65
+ raise "building ContextSymbol #{[effective_depth, name, binding_index, lexical_depth].inspect}"
58
66
  end
59
67
  end
60
68
  end
data/lib/nydp/core.rb CHANGED
@@ -25,9 +25,11 @@ module Nydp
25
25
  end
26
26
 
27
27
  def setup ns
28
- Symbol.mk(:cons, ns).assign(Nydp::Builtin::Cons.instance)
29
- Symbol.mk(:car, ns).assign(Nydp::Builtin::Car.instance)
30
- Symbol.mk(:cdr, ns).assign(Nydp::Builtin::Cdr.instance)
28
+ Symbol.mk(:cons , ns).assign(Nydp::Builtin::RubyWrap::Cons.instance)
29
+ Symbol.mk(:car , ns).assign(Nydp::Builtin::RubyWrap::Car.instance )
30
+ Symbol.mk(:cdr , ns).assign(Nydp::Builtin::RubyWrap::Cdr.instance )
31
+ Symbol.mk(:log , ns).assign(Nydp::Builtin::RubyWrap::Log.instance )
32
+
31
33
  Symbol.mk(:+, ns).assign(Nydp::Builtin::Plus.instance)
32
34
  Symbol.mk(:-, ns).assign(Nydp::Builtin::Minus.instance)
33
35
  Symbol.mk(:*, ns).assign(Nydp::Builtin::Times.instance)
@@ -47,34 +49,40 @@ module Nydp
47
49
  Symbol.mk(:nil, ns).assign Nydp::NIL
48
50
  Symbol.mk(:rand, ns).assign Nydp::Builtin::Rand.instance
49
51
  Symbol.mk(:sort, ns).assign Nydp::Builtin::Sort.instance
52
+ Symbol.mk(:abs, ns).assign Nydp::Builtin::Abs.instance
50
53
  Symbol.mk(:sqrt, ns).assign Nydp::Builtin::Sqrt.instance
51
54
  Symbol.mk(:t, ns).assign Nydp::T
52
55
  Symbol.mk(:sym, ns).assign Nydp::Builtin::Sym.instance
53
- Symbol.mk(:ensuring, ns).assign(Nydp::Builtin::Ensuring.instance)
54
- Symbol.mk(:inspect, ns).assign(Nydp::Builtin::Inspect.instance)
55
- Symbol.mk(:comment, ns).assign(Nydp::Builtin::Comment.instance)
56
- Symbol.mk("handle-error" , ns).assign(Nydp::Builtin::HandleError.instance)
57
- Symbol.mk("parse-in-string", ns).assign(Nydp::Builtin::ParseInString.instance)
58
- Symbol.mk("random-string" , ns).assign(Nydp::Builtin::RandomString.instance)
59
- Symbol.mk("to-string" , ns).assign(Nydp::Builtin::ToString.instance)
60
- Symbol.mk("string-length" , ns).assign(Nydp::Builtin::StringLength.instance)
61
- Symbol.mk("string-replace" , ns).assign(Nydp::Builtin::StringReplace.instance)
62
- Symbol.mk("string-match" , ns).assign(Nydp::Builtin::StringMatch.instance)
63
- Symbol.mk("string-split" , ns).assign(Nydp::Builtin::StringSplit.instance)
64
- Symbol.mk("time" , ns).assign(Nydp::Builtin::Time.instance)
65
- Symbol.mk("thread-locals" , ns).assign(Nydp::Builtin::ThreadLocals.instance)
66
- Symbol.mk("type-of", ns).assign(Nydp::Builtin::TypeOf.instance)
67
- Symbol.mk(:"eq?", ns).assign(Nydp::Builtin::IsEqual.instance)
68
- Symbol.mk(:"cdr-set", ns).assign(Nydp::Builtin::CdrSet.instance)
69
- Symbol.mk(:"hash-get", ns).assign(Nydp::Builtin::HashGet.instance)
70
- Symbol.mk(:"hash-set", ns).assign(Nydp::Builtin::HashSet.instance)
71
- Symbol.mk(:"hash-keys", ns).assign(Nydp::Builtin::HashKeys.instance)
72
- Symbol.mk(:"hash-key?", ns).assign(Nydp::Builtin::HashKeyPresent.instance)
73
- Symbol.mk(:"hash-merge", ns).assign(Nydp::Builtin::HashMerge.instance)
74
- Symbol.mk(:"vm-info", ns).assign Nydp::Builtin::VmInfo.instance
75
- Symbol.mk(:"pre-compile" , ns).assign Nydp::Builtin::PreCompile.instance
76
- Symbol.mk(:"script-run" , ns).assign Nydp::Builtin::ScriptRun.instance
77
- Symbol.mk(:"**" , ns).assign Nydp::Builtin::MathPower.instance
56
+ Symbol.mk(:ensuring , ns).assign(Nydp::Builtin::Ensuring.instance)
57
+ Symbol.mk(:inspect , ns).assign(Nydp::Builtin::Inspect.instance)
58
+ Symbol.mk(:comment , ns).assign(Nydp::Builtin::Comment.instance)
59
+ Symbol.mk("handle-error" , ns).assign(Nydp::Builtin::HandleError.instance)
60
+ Symbol.mk("parse-in-string" , ns).assign(Nydp::Builtin::ParseInString.instance)
61
+ Symbol.mk("random-string" , ns).assign(Nydp::Builtin::RandomString.instance)
62
+ Symbol.mk("regexp" , ns).assign(Nydp::Builtin::Regexp.instance)
63
+ Symbol.mk("to-string" , ns).assign(Nydp::Builtin::ToString.instance)
64
+ Symbol.mk("to-integer" , ns).assign(Nydp::Builtin::ToInteger.instance)
65
+ Symbol.mk("string-length" , ns).assign(Nydp::Builtin::StringLength.instance)
66
+ Symbol.mk("string-replace" , ns).assign(Nydp::Builtin::StringReplace.instance)
67
+ Symbol.mk("string-match" , ns).assign(Nydp::Builtin::StringMatch.instance)
68
+ Symbol.mk("string-split" , ns).assign(Nydp::Builtin::StringSplit.instance)
69
+ Symbol.mk("string/pad-left" , ns).assign(Nydp::Builtin::StringPadLeft.instance)
70
+ Symbol.mk("string/pad-right" , ns).assign(Nydp::Builtin::StringPadRight.instance)
71
+ Symbol.mk("time" , ns).assign(Nydp::Builtin::Time.instance)
72
+ Symbol.mk("thread-locals" , ns).assign(Nydp::Builtin::ThreadLocals.instance)
73
+ Symbol.mk("type-of" , ns).assign(Nydp::Builtin::TypeOf.instance)
74
+ Symbol.mk(:"eq?" , ns).assign(Nydp::Builtin::IsEqual.instance)
75
+ Symbol.mk(:"cdr-set" , ns).assign(Nydp::Builtin::CdrSet.instance)
76
+ Symbol.mk(:"hash-get" , ns).assign(Nydp::Builtin::HashGet.instance)
77
+ Symbol.mk(:"hash-set" , ns).assign(Nydp::Builtin::HashSet.instance)
78
+ Symbol.mk(:"hash-keys" , ns).assign(Nydp::Builtin::HashKeys.instance)
79
+ Symbol.mk(:"hash-key?" , ns).assign(Nydp::Builtin::HashKeyPresent.instance)
80
+ Symbol.mk(:"hash-merge" , ns).assign(Nydp::Builtin::HashMerge.instance)
81
+ Symbol.mk(:"hash-slice" , ns).assign(Nydp::Builtin::HashSlice.instance)
82
+ Symbol.mk(:"vm-info" , ns).assign Nydp::Builtin::VmInfo.instance
83
+ Symbol.mk(:"pre-compile" , ns).assign Nydp::Builtin::PreCompile.instance
84
+ Symbol.mk(:"script-run" , ns).assign Nydp::Builtin::ScriptRun.instance
85
+ Symbol.mk(:"**" , ns).assign Nydp::Builtin::MathPower.instance
78
86
  Symbol.mk(:"⌊" , ns).assign Nydp::Builtin::MathFloor.instance
79
87
  Symbol.mk(:"math-floor" , ns).assign Nydp::Builtin::MathFloor.instance
80
88
  Symbol.mk(:"⌈" , ns).assign Nydp::Builtin::MathCeiling.instance