eleetscript 0.0.14a → 0.0.15a

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1e9923530119b0319ffa8ce45c74d8554dac83ec
4
- data.tar.gz: a14bb0f0eb2f815c72d49b82526919b2e14ece5a
3
+ metadata.gz: 0e4f8b67c1f572dc4962a488a2922c6adc3ecb38
4
+ data.tar.gz: b1c43f3ea9c8893a1585a6f60043f1da8b627711
5
5
  SHA512:
6
- metadata.gz: 39efb36e6897c54457071dfb89779d247c34c7eee6c0926fc1d91bc9d25df6b691e57e48f91836fd9e9423d68f589f14c8b4f71eead668e5faa6d23581e47d71
7
- data.tar.gz: 2dda61db2fe4268ecd9a8f58d668e3a7e44d9464cdf0b2607547e4ada1b9516fafe32e453d2fcf167d8546eab2dd6f3822ed11183af10e34b8c9754fd35e5fcf
6
+ metadata.gz: 8f3049744c6a35f3e6ccb32fec32c0ade0b3944cb464b8b2156708f63e04c79f58fa4946489dbfc244407b86e0b83573b9cbb86b73760c5a9a72bf26f06d53eb
7
+ data.tar.gz: d4c968ee303abab77cbb49b6990aec2cac34b2959e0e8bcf225aeebbe4cc5d175fd198cef5f89db01d14f053576107c61b3e563ad1e32589d52392b09a26907b
data/bin/eleet CHANGED
@@ -66,7 +66,7 @@ if ARGV.empty?
66
66
  next
67
67
  end
68
68
  if value.kind_of?(ES::EleetScriptClass) || value.kind_of?(ES::EleetScriptClassInstance)
69
- if ["Integer", "Float", "String", "TrueClass", "FalseClass", "NilClass"].include?(value.class_name)
69
+ if value.instance? && ["Integer", "Float", "String", "TrueClass", "FalseClass", "NilClass"].include?(value.class_name)
70
70
  puts " => #{value.ruby_value.inspect}"
71
71
  else
72
72
  puts " => #{value.call(:inspect).ruby_value}"
@@ -27,7 +27,7 @@ module EleetScript
27
27
  if orig
28
28
  super
29
29
  else
30
- call(:class)
30
+ call(:class_ref)
31
31
  end
32
32
  end
33
33
 
data/lib/engine/engine.rb CHANGED
@@ -50,14 +50,14 @@ module EleetScript
50
50
  to_ruby_value(ns[name])
51
51
  end
52
52
 
53
- def []=(name, value)
53
+ def []=(name, value, options = {})
54
54
  load
55
55
  var, ns = unnest(name)
56
56
  if var[0] =~ /[A-Z]/ && ns.constants.has_key?(var)
57
57
  memory.root_namespace["Errors"].call("<", [memory.root_namespace["String"].new_with_value("Cannot reassign constant via the Engine.", memory.root_namespace)])
58
58
  return false
59
59
  else
60
- ns[var] = to_eleet_value(value)
60
+ ns[var] = to_eleet_value(value, options)
61
61
  end
62
62
  true
63
63
  end
@@ -71,8 +71,8 @@ module EleetScript
71
71
  end
72
72
  end
73
73
 
74
- def set(var, value)
75
- self[var] = value
74
+ def set(var, value, options = {})
75
+ send(:[]=, var, value, options)
76
76
  end
77
77
 
78
78
  def memory
@@ -93,8 +93,8 @@ module EleetScript
93
93
  @interpreter ||= Interpreter.new(memory)
94
94
  end
95
95
 
96
- def to_eleet_value(value)
97
- Values.to_eleet_value(value, self)
96
+ def to_eleet_value(value, options = {})
97
+ Values.to_eleet_value(value, self, options)
98
98
  end
99
99
 
100
100
  def to_ruby_value(value)
@@ -1,13 +1,23 @@
1
1
  module EleetScript
2
2
  class RubyToEleetWrapper
3
- def initialize(ruby_obj, engine)
3
+ def initialize(ruby_obj, engine, options = {})
4
4
  @ruby_obj = ruby_obj
5
5
  @engine = engine
6
+ @options = options
7
+ if @options[:lock]
8
+ @options[:lock] = [@options[:lock]] unless @options[:lock].kind_of?(Array)
9
+ end
6
10
  end
7
11
 
8
- def call(method_name, args)
12
+ def call(method_name, args = [])
13
+ unless can_call_method?(method_name)
14
+ @engine["Errors"] < "Attempt to call locked method \"#{method_name}\" failed."
15
+ return Values.to_eleet_value(@engine["nil"], @engine)
16
+ end
9
17
  if method_name.to_sym == :to_string
10
18
  method_name = :to_s
19
+ elsif method_name.to_sym == :class_ref
20
+ method_name = :class
11
21
  elsif method_name.to_sym == :class_name
12
22
  cls = if @ruby_obj.class == Class
13
23
  @ruby_obj
@@ -25,10 +35,17 @@ module EleetScript
25
35
  begin
26
36
  Values.to_eleet_value(@ruby_obj.send(method_name, *ruby_args, &block), @engine)
27
37
  rescue NoMethodError => e
28
- Values.to_eleet_value(@engine.get("nil"), @engine)
38
+ Values.to_eleet_value(@engine["nil"], @engine)
29
39
  end
30
40
  end
31
41
 
42
+ def can_call_method?(method_name)
43
+ method_name = method_name.to_sym
44
+ return false if @options[:lock] && @options[:lock].include?(method_name)
45
+ return false if @ruby_obj.respond_to?(:eleetscript_lock_methods) && @ruby_obj.eleetscript_lock_methods.include?(method_name)
46
+ true
47
+ end
48
+
32
49
  def raw
33
50
  @ruby_obj
34
51
  end
data/lib/engine/values.rb CHANGED
@@ -7,7 +7,7 @@ require "engine/ruby_lambda"
7
7
  module EleetScript
8
8
  module Values
9
9
  class << self
10
- def to_eleet_value(ruby_obj, engine)
10
+ def to_eleet_value(ruby_obj, engine, options = {})
11
11
  memory = if engine.kind_of?(Memory)
12
12
  engine
13
13
  else
@@ -40,7 +40,7 @@ module EleetScript
40
40
  elsif ruby_obj == false
41
41
  memory.root_namespace["false"]
42
42
  else
43
- RubyToEleetWrapper.new(ruby_obj, engine)
43
+ RubyToEleetWrapper.new(ruby_obj, engine, options)
44
44
  end
45
45
  end
46
46
 
@@ -4,6 +4,11 @@ module EleetScript
4
4
  int = root_namespace["Integer"]
5
5
  float = root_namespace["Float"]
6
6
 
7
+ number.class_def :new do |receiver, arguments|
8
+ root_namespace["Errors"].call(:<, [root_namespace["String"].new_with_value("Cannot call new on Number", root_namespace)])
9
+ root_namespace["nil"]
10
+ end
11
+
7
12
  number.def :+ do |receiver, arguments, context|
8
13
  arg = arguments.first
9
14
  if arg.is_a?("Number")
@@ -26,7 +26,7 @@ module EleetScript
26
26
  end
27
27
  end
28
28
 
29
- object.def :class do |receiver, arguments|
29
+ object.def :class_ref do |receiver, arguments|
30
30
  receiver.runtime_class
31
31
  end
32
32
 
@@ -2,6 +2,11 @@ module EleetScript
2
2
  Memory.define_core_methods do
3
3
  string = root_namespace["String"]
4
4
 
5
+ string.class_def :new do |receiver, arguments, context|
6
+ arg = arguments.length > 0 ? arguments.first.call(:to_string).ruby_value : ""
7
+ receiver.new_with_value(arg, context.namespace_context)
8
+ end
9
+
5
10
  string.def :+ do |receiver, arguments|
6
11
  arg = arguments.first
7
12
  arg_str = if arg.class?
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.14a
4
+ version: 0.0.15a
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Buck