goto 0

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.
Files changed (3) hide show
  1. data/README.textile +19 -0
  2. data/lib/goto.rb +46 -0
  3. metadata +72 -0
@@ -0,0 +1,19 @@
1
+ h1. ruby-goto
2
+
3
+ ruby-goto, version -1.0, by Ryan Pavlik
4
+
5
+ 'goto' for ruby. :-)
6
+
7
+ * Category: Library/Evil
8
+ * Status: squishy
9
+ * Created: 2003-06-06 05:06:14 GMT
10
+
11
+ h2. Description
12
+
13
+ This is a simple label-based goto for ruby. Just to show that it can be done.
14
+
15
+ Also to show that even though ruby may support certain features, even features that may be terribly abusable, does not mean that everyone will, in fact, terribly abuse them. ;-)
16
+
17
+ h2. License
18
+
19
+ GPL
@@ -0,0 +1,46 @@
1
+ STACK = []
2
+
3
+ class Label
4
+ attr_accessor :name;
5
+ attr_accessor :block;
6
+
7
+ def initialize(name, block);
8
+ @name = name
9
+ @block = block
10
+ end
11
+
12
+ def ==(sym)
13
+ @name == sym
14
+ end
15
+ end
16
+
17
+ class Goto < Exception;
18
+ attr_accessor :label
19
+ def initialize(label); @label = label; end
20
+ end
21
+
22
+ def label(sym, &block)
23
+ STACK.last << Label.new(sym, block)
24
+ end
25
+
26
+ def frame_start
27
+ STACK << []
28
+ end
29
+
30
+ def frame_end
31
+ frame = STACK.pop
32
+ idx = 0
33
+
34
+ begin
35
+ for i in (idx...frame.size)
36
+ frame[i].block.call if frame[i].block
37
+ end
38
+ rescue Goto => g
39
+ idx = frame.index(g.label)
40
+ retry
41
+ end
42
+ end
43
+
44
+ def goto(label)
45
+ raise Goto.new(label)
46
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: goto
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ version: "0"
8
+ platform: ruby
9
+ authors:
10
+ - Benjamin Bock
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+
15
+ date: 2010-02-23 00:00:00 +01:00
16
+ default_executable:
17
+ dependencies: []
18
+
19
+ description: |
20
+ ==== Goto for Ruby
21
+ This is a simple label-based goto for ruby. Just to show that it can be done.
22
+
23
+ Also to show that even though ruby may support certain features, even features that may be terribly abusable, does not mean that everyone will, in fact, terribly abuse them. ;-)
24
+
25
+ ==== Facts
26
+ * Category: Library/Evil
27
+ * Status: squishy
28
+ * Created: 2003-06-06 05:06:14 GMT
29
+ * Creator: Ryan Pavlik
30
+
31
+ email: bb--goto-gem@bock.be
32
+ executables: []
33
+
34
+ extensions: []
35
+
36
+ extra_rdoc_files: []
37
+
38
+ files:
39
+ - README.textile
40
+ - lib/goto.rb
41
+ has_rdoc: true
42
+ homepage: http://github.com/bb/ruby-goto
43
+ licenses: []
44
+
45
+ post_install_message:
46
+ rdoc_options: []
47
+
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ requirements: []
65
+
66
+ rubyforge_project:
67
+ rubygems_version: 1.3.6
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: goto for ruby
71
+ test_files: []
72
+