fOOrth 0.6.0 → 0.6.1

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: 1d0d6f091b373efebb5abe63ef8640ff9b6ccb19
4
- data.tar.gz: ac4726f91899a582360c249d6a56fbdb5a392c6e
3
+ metadata.gz: 30474940c4c3e0647c0c1205d6165d3c3d11ee3a
4
+ data.tar.gz: 8e65265692a9ed674814aa78c9fd2892da3456a1
5
5
  SHA512:
6
- metadata.gz: 81570f5d034eb8507fb59a6121b0e205b3edcbfea451fcba3a49127a5a535ed92828b1fecd1da8a0359c802543f76830234201c38d9302dfe75024f489d8add5
7
- data.tar.gz: 68e73dbaba411571709f779ba5b10f8af82a5d2a572be1fbc9b1bcf1a138c43cf02f344c91bf53f1dabd520699baee8d22ae754359dce8fb3c4976cd7982cf5f
6
+ metadata.gz: e53b8c014e66a4f7f0401292c00e4e361a0a0667ade42bc26be9db1a93976f8686ca0c874fabca16efad207a6c89c45994bf4be17ea712861ecdf64c84cf2446
7
+ data.tar.gz: 79cfd83122d97e5b83a357d6b7df7c8083a163c7467131d963396f13a300aae0c7a7e003dd51ec62776aa3adc33e8607bd711bf623808564fb5498baabb54758
@@ -49,14 +49,15 @@ class CloneLibraryTester < Minitest::Test
49
49
  foorth_run('$tscx1 .clone val$: $tscx2')
50
50
 
51
51
  foorth_equal('$tscx1 .clone_exclude', [["@b"]])
52
+ foorth_equal('$tscx2 .clone_exclude', [["@b"]])
52
53
 
53
54
  foorth_equal('$tscx1 .a', ["a"])
54
55
  foorth_equal('$tscx1 .b', ["b"])
55
56
  foorth_equal('$tscx2 .a', ["a"])
56
57
  foorth_equal('$tscx2 .b', ["b"])
57
58
 
58
- foorth_run('$tscx1 .a "1" <<')
59
- foorth_run('$tscx1 .b "1" <<')
59
+ foorth_equal('$tscx1 .a "1" << ', ["a1"])
60
+ foorth_equal('$tscx1 .b "1" << ', ["b1"])
60
61
 
61
62
  foorth_equal('$tscx1 .a', ["a1"])
62
63
  foorth_equal('$tscx1 .b', ["b1"])
@@ -35,4 +35,32 @@ class ObjectLibraryTester < Minitest::Test
35
35
  foorth_equal("4 .strlen", [1])
36
36
  end
37
37
 
38
+ def test_for_mutable_and_protect
39
+ foorth_equal('"abc" .mutable?', [false])
40
+ foorth_equal('"abc" dup .protect .mutable?', [false])
41
+ foorth_equal('"abc" protect .mutable?', [false])
42
+
43
+ foorth_equal('"abc"* .mutable?', [true])
44
+ foorth_equal('"abc"* dup .protect .mutable?', [false])
45
+ foorth_equal('"abc"* protect .mutable?', [false])
46
+ foorth_raises('"abc"* dup .protect "a" <<', RuntimeError)
47
+ foorth_raises('"abc"* protect "a" <<', RuntimeError)
48
+
49
+ foorth_equal('42 .mutable?', [false])
50
+ foorth_equal('42.5 .mutable?', [false])
51
+ foorth_equal('42/5 .mutable?', [false])
52
+ foorth_equal('42+5i .mutable?', [false])
53
+
54
+ foorth_equal('[ "abc" ] .mutable?', [true])
55
+ foorth_equal('[ "abc" ] dup .protect .mutable?', [false])
56
+ foorth_equal('[ "abc" ] protect .mutable?', [false])
57
+
58
+ foorth_equal('true .mutable?', [false])
59
+ foorth_equal('false .mutable?', [false])
60
+ foorth_equal('nil .mutable?', [false])
61
+
62
+ foorth_equal('Object .new dup .protect .mutable?', [false])
63
+ foorth_equal('Object .new protect .mutable?', [false])
64
+ end
65
+
38
66
  end
@@ -72,6 +72,25 @@ class StringLibraryTester < Minitest::Test
72
72
  foorth_equal('"A"* "B" >>', ["BA"])
73
73
  end
74
74
 
75
+ def test_some_additionelle_stuff
76
+ foorth_equal('"A"* .to_s .class ', [String])
77
+
78
+ foorth_equal('"A"* .to_s .mutable? ', [false])
79
+
80
+ foorth_equal('"A"* protect .class ', [StringBuffer])
81
+ foorth_equal('"A"* dup .protect .class ', [StringBuffer])
82
+
83
+ foorth_equal('"A"* protect .mutable? ', [false])
84
+ foorth_equal('"A"* dup .protect .mutable? ', [false])
85
+
86
+ foorth_equal('"A"* .to_s* .class ', [StringBuffer])
87
+ foorth_equal('"A"* .to_s* .mutable? ', [true])
88
+ foorth_equal('"A"* dup .to_s* distinct? ', [true])
89
+
90
+ foorth_equal('"A"* protect .to_s* .class ', [StringBuffer])
91
+ foorth_equal('"A"* protect .to_s* .mutable? ', [true])
92
+ end
93
+
75
94
  def test_file_loading
76
95
  foorth_equal('"integration/load_test_one.foorth" .load ', [42])
77
96
  foorth_equal('4 double ', [8])
@@ -87,4 +87,38 @@ module XfOOrth
87
87
  end
88
88
  })
89
89
 
90
+ #Is this object mutable?
91
+ # [a] .mutable? [flag]
92
+ Object.create_shared_method('.mutable?', TosSpec, [],
93
+ &lambda {|vm| vm.push(!self.frozen?); })
94
+
95
+ #Is this number mutable? No!
96
+ # [a] .mutable? [false]
97
+ Numeric.create_shared_method('.mutable?', TosSpec, [],
98
+ &lambda {|vm| vm.push(false); })
99
+
100
+ #Is this boolean mutable? No!
101
+ # [a] .mutable? [false]
102
+ TrueClass.create_shared_method('.mutable?', TosSpec, [],
103
+ &lambda {|vm| vm.push(false); })
104
+
105
+ #Is this boolean mutable? No!
106
+ # [a] .mutable? [false]
107
+ FalseClass.create_shared_method('.mutable?', TosSpec, [],
108
+ &lambda {|vm| vm.push(false); })
109
+
110
+ #Is nil mutable? No!
111
+ # [a] .mutable? [false]
112
+ NilClass.create_shared_method('.mutable?', TosSpec, [],
113
+ &lambda {|vm| vm.push(false); })
114
+
115
+ #Protect this object from change!
116
+ # [a] .protect [] The object is protected against change.
117
+ Object.create_shared_method('.protect', TosSpec, [],
118
+ &lambda{|vm| self.freeze })
119
+
120
+ #Protect this object from change!
121
+ # [a] protect [a] The object is protected against change.
122
+ VirtualMachine.create_shared_method('protect', VmSpec, [],
123
+ &lambda{|vm| vm.poke(vm.peek.freeze) })
90
124
  end
@@ -12,11 +12,6 @@ module XfOOrth
12
12
  # A no operation place holder for string literals
13
13
  VirtualMachine.create_shared_method('"', MacroSpec, [:macro, " "])
14
14
 
15
- #Is this mutable? StringBuffers are, Strings are not.
16
- # [a] .mutable? [flag]
17
- String.create_shared_method('.mutable?', TosSpec, [],
18
- &lambda {|vm| vm.push(!self.frozen?); })
19
-
20
15
  # [string] .each{{ ... }} [unspecified]
21
16
  String.create_shared_method('.each{{', NosSpec, [], &lambda { |vm|
22
17
  block, idx = vm.pop, 0
@@ -105,6 +105,20 @@ class SystemCallError
105
105
 
106
106
  end
107
107
 
108
+ #Extensions to the RunTimeError to support fOOrth
109
+ class RuntimeError
110
+
111
+ #Massage the messages a bit
112
+ def message
113
+ msg = super
114
+
115
+ msg["frozen"] && msg["frozen"] = "protected"
116
+
117
+ msg
118
+ end
119
+
120
+ end
121
+
108
122
  # Extensions to Interrupt to support fOOrth.
109
123
  class Interrupt
110
124
 
@@ -3,5 +3,5 @@
3
3
  #* version.rb - The version string for fOOrth.
4
4
  module XfOOrth
5
5
  #The version string for fOOrth.
6
- VERSION = "0.6.0"
6
+ VERSION = "0.6.1"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fOOrth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Camilleri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-13 00:00:00.000000000 Z
11
+ date: 2016-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler