eleetscript 0.0.12a → 0.0.13a

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.
@@ -1,8 +1,9 @@
1
1
  module EleetScript
2
2
  class ListBase
3
- attr_reader :array_value, :hash_value
3
+ attr_accessor :array_value, :hash_value
4
4
 
5
5
  def initialize(nil_val)
6
+ @nil_val = nil_val
6
7
  @array_value = []
7
8
  @hash_value = Hash.new(nil_val)
8
9
  end
@@ -17,7 +18,7 @@ module EleetScript
17
18
  end
18
19
 
19
20
  def dup
20
- lst = ListBase.new
21
+ lst = ListBase.new(@nil_val)
21
22
  lst.array_value = @array_value.dup
22
23
  lst.hash_value = @hash_value.dup
23
24
  lst
@@ -2,14 +2,20 @@ require "util/processed_key_hash"
2
2
 
3
3
  module EleetScript
4
4
  class BaseContext
5
- @@_init_funcs = []
5
+
6
6
 
7
7
  attr_reader :constants, :local_vars, :global_vars, :namespaces
8
8
  attr_accessor :current_self, :current_class
9
9
 
10
10
  class << self
11
+ attr_writer :init_funcs
12
+
11
13
  def init_with(*func_symbols)
12
- @@_init_funcs += func_symbols
14
+ self.init_funcs += func_symbols
15
+ end
16
+
17
+ def init_funcs
18
+ @init_funcs ||= []
13
19
  end
14
20
  end
15
21
 
@@ -128,7 +134,7 @@ module EleetScript
128
134
  @constants = ProcessedKeyHash.new
129
135
  @global_vars = {}
130
136
  @namespaces = {}
131
- @@_init_funcs.each do |symbol|
137
+ self.class.init_funcs.each do |symbol|
132
138
  send(symbol, *args) if respond_to?(symbol, true)
133
139
  end
134
140
  end
@@ -21,10 +21,6 @@ class Object
21
21
  IO.print(msg)
22
22
  end
23
23
 
24
- to_string do
25
- class_name
26
- end
27
-
28
24
  println do |msg|
29
25
  IO.println(msg)
30
26
  end
@@ -37,6 +33,10 @@ class Object
37
33
  to_string
38
34
  end
39
35
 
36
+ to_string do
37
+ class_name
38
+ end
39
+
40
40
  =~ do
41
41
  false
42
42
  end
@@ -0,0 +1,5 @@
1
+ class Symbol
2
+ inspect do
3
+ ":" + to_string
4
+ end
5
+ end
@@ -16,6 +16,7 @@ module EleetScript
16
16
  "Enumerable" => nil,
17
17
  "List" => "Enumerable",
18
18
  "String" => "Enumerable",
19
+ "Symbol" => nil,
19
20
  "Regex" => nil,
20
21
  "IO" => nil,
21
22
  "Lambda" => nil,
@@ -26,7 +27,11 @@ module EleetScript
26
27
 
27
28
  class << self
28
29
  def define_core_methods(&block)
29
- (@@core_definers ||= []) << block
30
+ core_definers << block
31
+ end
32
+
33
+ def core_definers
34
+ @core_definers ||= []
30
35
  end
31
36
  end
32
37
 
@@ -58,7 +63,7 @@ module EleetScript
58
63
  # Global Errors Object
59
64
  root_namespace["Errors"] = root_namespace["List"].new_with_value(ListBase.new(root_namespace.es_nil))
60
65
 
61
- @@core_definers.each do |definer_block|
66
+ self.class.core_definers.each do |definer_block|
62
67
  instance_eval(&definer_block)
63
68
  end
64
69
 
@@ -46,12 +46,37 @@ module EleetScript
46
46
  value
47
47
  end
48
48
 
49
- list.def :merge! do |receiver, arguments|
50
- lst = receiver.ruby_value
49
+ list.def :merge do |receiver, arguments|
50
+ lst = receiver.ruby_value.dup
51
51
  arg = arguments.first
52
52
  if arg.is_a?("List")
53
53
  lst.merge!(arg.ruby_value)
54
+ # For Ruby Bridge
55
+ elsif arg.kind_of?(RubyToEleetWrapper)
56
+ olst = ListBase.new(root_namespace.es_nil)
57
+ if arg.raw.kind_of?(Hash)
58
+ new_hash = Hash.new(root_namespace.es_nil)
59
+ keys = arg.call(:keys, [])
60
+ keys.raw.length.times do |i|
61
+ key = keys.call(:[], [root_namespace["Integer"].new_with_value(i)])
62
+ new_hash[key] = arg.call(:[], [key])
63
+ end
64
+ olst.hash_value = new_hash
65
+ elsif arg.raw.kind_of?("Array")
66
+ new_arr = []
67
+ arg.call(:length, []).ruby_value.times do |i|
68
+ new_arr << arg.call(:[], [root_namespace["Integer"].new_with_value(i)])
69
+ end
70
+ olst.array_value = new_arr
71
+ end
72
+ lst.merge!(olst)
54
73
  end
74
+ root_namespace["List"].new_with_value(lst)
75
+ end
76
+
77
+ list.def :merge! do |receiver, arguments|
78
+ new_list = receiver.call(:merge, arguments)
79
+ receiver.ruby_value = new_list.ruby_value
55
80
  receiver
56
81
  end
57
82
 
@@ -84,6 +84,10 @@ module EleetScript
84
84
  end
85
85
  end
86
86
 
87
+ string.def :to_symbol do |receiver, arguments|
88
+ root_namespace["Symbol"].new_with_value(receiver.ruby_value.to_sym)
89
+ end
90
+
87
91
  string.def :replace do |receiver, arguments|
88
92
  if arguments.length < 2
89
93
  string.new_with_value(receiver.ruby_value)
@@ -0,0 +1,26 @@
1
+ module EleetScript
2
+ Memory.define_core_methods do
3
+ symbol = root_namespace["Symbol"]
4
+
5
+ symbol.class_def :new do |receiver, arguments|
6
+ if arguments.length > 0
7
+ receiver.new_with_value(arguments.first.call(:to_string).ruby_value.intern)
8
+ else
9
+ reciever.new_with_value(:nil)
10
+ end
11
+ end
12
+
13
+ symbol.def :is do |receiver, arguments|
14
+ t, f = root_namespace["true"], root_namespace["false"]
15
+ if arguments.length == 0
16
+ f
17
+ else
18
+ (receiver.ruby_value == arguments.first.ruby_value ? t : f)
19
+ end
20
+ end
21
+
22
+ symbol.def :to_string do |receiver, arguments|
23
+ root_namespace["String"].new_with_value("#{receiver.ruby_value.to_s}")
24
+ end
25
+ end
26
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eleetscript
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12a
4
+ version: 0.0.13a
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Buck
@@ -49,6 +49,7 @@ files:
49
49
  - lib/lang/runtime/eleetscript/regex.es
50
50
  - lib/lang/runtime/eleetscript/stack.es
51
51
  - lib/lang/runtime/eleetscript/string.es
52
+ - lib/lang/runtime/eleetscript/symbol.es
52
53
  - lib/lang/runtime/eleetscript/trueclass.es
53
54
  - lib/lang/runtime/memory.rb
54
55
  - lib/lang/runtime/method.rb
@@ -62,6 +63,7 @@ files:
62
63
  - lib/lang/runtime/ruby/object_methods.rb
63
64
  - lib/lang/runtime/ruby/regex_methods.rb
64
65
  - lib/lang/runtime/ruby/string_methods.rb
66
+ - lib/lang/runtime/ruby/symbol_methods.rb
65
67
  - lib/util/processed_key_hash.rb
66
68
  - bin/eleet
67
69
  homepage: http://github.com/bbuck/eleetscript