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.
- checksums.yaml +4 -4
- data/lib/engine/engine.rb +7 -1
- data/lib/engine/ruby_to_eleet_wrapper.rb +1 -1
- data/lib/engine/values.rb +3 -1
- data/lib/lang/grammar.y +2 -1
- data/lib/lang/interpreter.rb +15 -9
- data/lib/lang/lexer.rb +4 -0
- data/lib/lang/nodes.rb +1 -0
- data/lib/lang/parser.rb +1142 -1123
- data/lib/lang/runtime/base_classes.rb +3 -2
- data/lib/lang/runtime/context.rb +9 -3
- data/lib/lang/runtime/eleetscript/object.es +4 -4
- data/lib/lang/runtime/eleetscript/symbol.es +5 -0
- data/lib/lang/runtime/memory.rb +7 -2
- data/lib/lang/runtime/ruby/list_methods.rb +27 -2
- data/lib/lang/runtime/ruby/string_methods.rb +4 -0
- data/lib/lang/runtime/ruby/symbol_methods.rb +26 -0
- metadata +3 -1
@@ -1,8 +1,9 @@
|
|
1
1
|
module EleetScript
|
2
2
|
class ListBase
|
3
|
-
|
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
|
data/lib/lang/runtime/context.rb
CHANGED
@@ -2,14 +2,20 @@ require "util/processed_key_hash"
|
|
2
2
|
|
3
3
|
module EleetScript
|
4
4
|
class BaseContext
|
5
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/lang/runtime/memory.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
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.
|
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
|