rubyjs 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/examples/client_server/README +18 -0
  2. data/examples/client_server/Rakefile +5 -0
  3. data/examples/client_server/client.js +749 -0
  4. data/examples/client_server/client.rb +12 -0
  5. data/examples/client_server/index.html +7 -0
  6. data/examples/client_server/server.rb +17 -0
  7. data/examples/hw/hw.js +234 -216
  8. data/rubyjs.gemspec +2 -2
  9. data/src/rubyjs.rb +0 -1
  10. data/src/rubyjs/compiler.rb +21 -8
  11. data/src/rubyjs/debug_name_generator.rb +23 -6
  12. data/src/rubyjs/model.rb +14 -8
  13. data/test/browser.test.html +1 -1
  14. data/test/browser.test.js +2337 -1992
  15. data/test/test_yield.rb +2 -0
  16. metadata +108 -158
  17. data/patches/parse_tree.rb.diff +0 -34
  18. data/vendor/ParseTree-1.7.1-patched/History.txt +0 -217
  19. data/vendor/ParseTree-1.7.1-patched/Manifest.txt +0 -22
  20. data/vendor/ParseTree-1.7.1-patched/README.txt +0 -110
  21. data/vendor/ParseTree-1.7.1-patched/Rakefile +0 -41
  22. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_abc +0 -89
  23. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_audit +0 -28
  24. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_deps +0 -62
  25. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_show +0 -49
  26. data/vendor/ParseTree-1.7.1-patched/demo/printer.rb +0 -20
  27. data/vendor/ParseTree-1.7.1-patched/lib/composite_sexp_processor.rb +0 -49
  28. data/vendor/ParseTree-1.7.1-patched/lib/parse_tree.rb +0 -1013
  29. data/vendor/ParseTree-1.7.1-patched/lib/sexp.rb +0 -235
  30. data/vendor/ParseTree-1.7.1-patched/lib/sexp_processor.rb +0 -330
  31. data/vendor/ParseTree-1.7.1-patched/lib/unique.rb +0 -15
  32. data/vendor/ParseTree-1.7.1-patched/test/pt_testcase.rb +0 -1221
  33. data/vendor/ParseTree-1.7.1-patched/test/something.rb +0 -53
  34. data/vendor/ParseTree-1.7.1-patched/test/test_all.rb +0 -13
  35. data/vendor/ParseTree-1.7.1-patched/test/test_composite_sexp_processor.rb +0 -69
  36. data/vendor/ParseTree-1.7.1-patched/test/test_parse_tree.rb +0 -216
  37. data/vendor/ParseTree-1.7.1-patched/test/test_sexp.rb +0 -291
  38. data/vendor/ParseTree-1.7.1-patched/test/test_sexp_processor.rb +0 -244
  39. data/vendor/ParseTree-1.7.1-patched/validate.sh +0 -31
  40. data/vendor/ParseTree-1.7.1/History.txt +0 -217
  41. data/vendor/ParseTree-1.7.1/Manifest.txt +0 -22
  42. data/vendor/ParseTree-1.7.1/README.txt +0 -110
  43. data/vendor/ParseTree-1.7.1/Rakefile +0 -41
  44. data/vendor/ParseTree-1.7.1/bin/parse_tree_abc +0 -89
  45. data/vendor/ParseTree-1.7.1/bin/parse_tree_audit +0 -28
  46. data/vendor/ParseTree-1.7.1/bin/parse_tree_deps +0 -62
  47. data/vendor/ParseTree-1.7.1/bin/parse_tree_show +0 -49
  48. data/vendor/ParseTree-1.7.1/demo/printer.rb +0 -20
  49. data/vendor/ParseTree-1.7.1/lib/composite_sexp_processor.rb +0 -49
  50. data/vendor/ParseTree-1.7.1/lib/parse_tree.rb +0 -1004
  51. data/vendor/ParseTree-1.7.1/lib/sexp.rb +0 -235
  52. data/vendor/ParseTree-1.7.1/lib/sexp_processor.rb +0 -330
  53. data/vendor/ParseTree-1.7.1/lib/unique.rb +0 -15
  54. data/vendor/ParseTree-1.7.1/test/pt_testcase.rb +0 -1221
  55. data/vendor/ParseTree-1.7.1/test/something.rb +0 -53
  56. data/vendor/ParseTree-1.7.1/test/test_all.rb +0 -13
  57. data/vendor/ParseTree-1.7.1/test/test_composite_sexp_processor.rb +0 -69
  58. data/vendor/ParseTree-1.7.1/test/test_parse_tree.rb +0 -216
  59. data/vendor/ParseTree-1.7.1/test/test_sexp.rb +0 -291
  60. data/vendor/ParseTree-1.7.1/test/test_sexp_processor.rb +0 -244
  61. data/vendor/ParseTree-1.7.1/validate.sh +0 -31
@@ -1,22 +0,0 @@
1
- History.txt
2
- Manifest.txt
3
- README.txt
4
- Rakefile
5
- bin/parse_tree_abc
6
- bin/parse_tree_audit
7
- bin/parse_tree_deps
8
- bin/parse_tree_show
9
- demo/printer.rb
10
- lib/composite_sexp_processor.rb
11
- lib/parse_tree.rb
12
- lib/sexp.rb
13
- lib/sexp_processor.rb
14
- lib/unique.rb
15
- test/pt_testcase.rb
16
- test/something.rb
17
- test/test_all.rb
18
- test/test_composite_sexp_processor.rb
19
- test/test_parse_tree.rb
20
- test/test_sexp.rb
21
- test/test_sexp_processor.rb
22
- validate.sh
@@ -1,110 +0,0 @@
1
- ParseTree
2
- http://rubyforge.org/projects/parsetree/
3
- http://www.zenspider.com/ZSS/Products/ParseTree/
4
- support@zenspider.com
5
-
6
- ** DESCRIPTION:
7
-
8
- ParseTree is a C extension (using RubyInline) that extracts the parse
9
- tree for an entire class or a specific method and returns it as a
10
- s-expression (aka sexp) using ruby's arrays, strings, symbols, and
11
- integers.
12
-
13
- As an example:
14
-
15
- def conditional1(arg1)
16
- if arg1 == 0 then
17
- return 1
18
- end
19
- return 0
20
- end
21
-
22
- becomes:
23
-
24
- [:defn,
25
- :conditional1,
26
- [:scope,
27
- [:block,
28
- [:args, :arg1],
29
- [:if,
30
- [:call, [:lvar, :arg1], :==, [:array, [:lit, 0]]],
31
- [:return, [:lit, 1]],
32
- nil],
33
- [:return, [:lit, 0]]]]]
34
-
35
- ** FEATURES/PROBLEMS:
36
-
37
- + Uses RubyInline, so it just drops in.
38
- + Includes SexpProcessor and CompositeSexpProcessor.
39
- + Allows you to write very clean filters.
40
- + Includes parse_tree_show, which lets you quickly snoop code.
41
- + echo "1+1" | parse_tree_show -f for quick snippet output.
42
- + Includes parse_tree_abc, which lets you get abc metrics on code.
43
- + abc metrics = numbers of assignments, branches, and calls.
44
- + whitespace independent metric for method complexity.
45
- + Includes parse_tree_deps, which shows you basic class level dependencies.
46
- + Only works on methods in classes/modules, not arbitrary code.
47
- + Does not work on the core classes, as they are not ruby (yet).
48
-
49
- ** SYNOPSYS:
50
-
51
- sexp_array = ParseTree.new.parse_tree(klass)
52
-
53
- or:
54
-
55
- class MyProcessor < SexpProcessor
56
- def initialize
57
- super
58
- self.strict = false
59
- end
60
- def process_lit(exp)
61
- val = exp.shift
62
- return val
63
- end
64
- end
65
-
66
- or:
67
-
68
- % ./parse_tree_show myfile.rb
69
-
70
- or:
71
-
72
- % echo "1+1" | ./parse_tree_show -f
73
-
74
- or:
75
-
76
- % ./parse_tree_abc myfile.rb
77
-
78
- ** REQUIREMENTS:
79
-
80
- + RubyInline 3 or better.
81
-
82
- ** INSTALL:
83
-
84
- + sudo rake install
85
- + or: sudo gem install ParseTree
86
-
87
- ** LICENSE:
88
-
89
- (The MIT License)
90
-
91
- Copyright (c) 2001-2004 Ryan Davis, Zen Spider Software
92
-
93
- Permission is hereby granted, free of charge, to any person obtaining
94
- a copy of this software and associated documentation files (the
95
- "Software"), to deal in the Software without restriction, including
96
- without limitation the rights to use, copy, modify, merge, publish,
97
- distribute, sublicense, and/or sell copies of the Software, and to
98
- permit persons to whom the Software is furnished to do so, subject to
99
- the following conditions:
100
-
101
- The above copyright notice and this permission notice shall be
102
- included in all copies or substantial portions of the Software.
103
-
104
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
105
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
106
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
107
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
108
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
109
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
110
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,41 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require 'rubygems'
4
- require 'hoe'
5
-
6
- $: << "../../RubyInline/dev"
7
- require './lib/parse_tree.rb'
8
-
9
- Hoe.new("ParseTree", ParseTree::VERSION) do |p|
10
- p.rubyforge_name = "parsetree"
11
- p.summary = "Extract and enumerate ruby parse trees."
12
- p.description = p.paragraphs_of("README.txt", 2).join("\n\n")
13
- p.changes = p.paragraphs_of("History.txt", 1).join("\n\n")
14
- p.clean_globs << File.expand_path("~/.ruby_inline")
15
- p.extra_deps << ['RubyInline', '>= 3.2.0']
16
- p.spec_extras[:require_paths] = proc { |paths| paths << 'test' }
17
- end
18
-
19
- desc 'Run against ruby 1.9 (from a multiruby install) with -d.'
20
- task :test19 do
21
- sh "~/.multiruby/install/1_9/bin/ruby -d #{Hoe::RUBY_FLAGS} test/test_all.rb #{Hoe::FILTER}"
22
- end
23
-
24
- desc 'Run in gdb'
25
- task :debug do
26
- puts "RUN: r -d #{Hoe::RUBY_FLAGS} test/test_all.rb #{Hoe::FILTER}"
27
- sh "gdb ~/.multiruby/install/19/bin/ruby"
28
- end
29
-
30
- desc 'Run a very basic demo'
31
- task :demo do
32
- sh "echo 1+1 | ruby #{Hoe::RUBY_FLAGS} ./bin/parse_tree_show -f"
33
- end
34
-
35
- desc 'Show what tests are not sorted'
36
- task :sort do
37
- sh "pgrep '^ \\\"(\\w+)' test/pt_testcase.rb | cut -f 2 -d\\\" > x"
38
- sh "sort x > y"
39
- sh "diff x y"
40
- sh "rm -f x y"
41
- end
@@ -1,89 +0,0 @@
1
- #!/usr/local/bin/ruby -ws
2
-
3
- # ABC metric
4
- #
5
- # Assignments, Branches, and Calls
6
- #
7
- # A simple way to measure the complexity of a function or method.
8
-
9
- if defined? $I and String === $I then
10
- $I.split(/:/).each do |dir|
11
- $: << dir
12
- end
13
- end
14
-
15
- PARSE_TREE_ABC=true
16
-
17
- begin require 'rubygems' rescue LoadError end
18
- require 'sexp'
19
- require 'parse_tree'
20
- require 'sexp_processor'
21
-
22
- old_classes = []
23
- ObjectSpace.each_object(Module) do |klass|
24
- old_classes << klass
25
- end
26
-
27
- ARGV.each do |name|
28
- begin
29
- require name
30
- rescue NameError => err
31
- $stderr.puts "ERROR requiring #{name}. Perhaps you need to add some -I's?\n\n#{err}"
32
- end
33
- end
34
-
35
- new_classes = []
36
- ObjectSpace.each_object(Module) do |klass|
37
- new_classes << klass
38
- end
39
-
40
- score = {}
41
-
42
- new_classes -= old_classes
43
-
44
- klasses = Sexp.from_array(ParseTree.new.parse_tree(*new_classes))
45
- klasses.each do |klass|
46
- klass.shift # :class
47
- klassname = klass.shift
48
- klass.shift # superclass
49
- methods = klass
50
-
51
- methods.each do |defn|
52
- a=b=c=0
53
- defn.shift
54
- methodname = defn.shift
55
- tokens = defn.structure.flatten
56
- tokens.each do |token|
57
- case token
58
- when :attrasgn, :attrset, :dasgn_curr, :iasgn, :lasgn, :masgn then
59
- a += 1
60
- when :and, :case, :else, :if, :iter, :or, :rescue, :until, :when, :while then
61
- b += 1
62
- when :call, :fcall, :super, :vcall, :yield then
63
- c += 1
64
- when :args, :argscat, :array, :begin, :block, :block_arg, :block_pass, :bool, :cfunc, :colon2, :const, :cvar, :defined, :defn, :dregx, :dstr, :dvar, :dxstr, :ensure, :false, :fbody, :gvar, :hash, :ivar, :lit, :long, :lvar, :match2, :match3, :nil, :not, :nth_ref, :return, :scope, :self, :splat, :str, :to_ary, :true, :unknown, :value, :void, :zarray, :zarray, :zclass, :zsuper then
65
- # ignore
66
- else
67
- puts "unhandled token #{token.inspect}" if $VERBOSE
68
- end
69
- end
70
- key = ["#{klassname}.#{methodname}", a, b, c]
71
- val = Math.sqrt(a*a+b*b+c*c)
72
- score[key] = val
73
- end
74
- end
75
-
76
- puts "|ABC| = Math.sqrt(assignments^2 + branches^2 + calls^2)"
77
- puts
78
- count = 1
79
- ta = tb = tc = tval = 0
80
- score.sort_by { |k,v| v }.reverse.each do |key,val|
81
- name, a, b, c = *key
82
- ta += a
83
- tb += b
84
- tc += c
85
- tval += val
86
- printf "%3d) %-50s = %2d + %2d + %2d = %6.2f\n", count, name, a, b, c, val
87
- count += 1
88
- end rescue nil
89
- printf "%3d) %-50s = %2d + %2d + %2d = %6.2f\n", count, "Total", ta, tb, tc, tval
@@ -1,28 +0,0 @@
1
- #!/usr/local/bin/ruby -w
2
-
3
- require 'parse_tree'
4
-
5
- all_nodes = ParseTree::NODE_NAMES
6
-
7
- ARGV.each do |processor|
8
- require processor
9
- end
10
-
11
- ObjectSpace.each_object(Class) do |klass|
12
- if klass < SexpProcessor then
13
-
14
- processor = klass.new
15
- processors = klass.public_instance_methods(true).grep(/process_/)
16
-
17
- if processor.strict then
18
- puts "#{klass.name}:"
19
- puts
20
-
21
- # TODO: check unsupported against supported
22
- processors = processors.map { |m| m[8..-1].intern } + processor.unsupported
23
- unsupported = all_nodes - processors
24
- p unsupported.sort_by { |sym| sym.to_s }
25
- puts
26
- end
27
- end
28
- end
@@ -1,62 +0,0 @@
1
- #!/usr/local/bin/ruby -ws
2
-
3
- old_classes = []; new_classes = []
4
-
5
- ObjectSpace.each_object(Module) { |klass| old_classes << klass } if defined? $a
6
-
7
- require 'pp'
8
-
9
- begin require 'rubygems' rescue LoadError end
10
- require 'parse_tree'
11
- require 'sexp_processor'
12
-
13
- ObjectSpace.each_object(Module) { |klass| old_classes << klass } unless defined? $a
14
-
15
- class DependencyAnalyzer < SexpProcessor
16
-
17
- attr_reader :dependencies
18
- attr_accessor :current_class
19
-
20
- def initialize
21
- super
22
- self.auto_shift_type = true
23
- @dependencies = Hash.new { |h,k| h[k] = [] }
24
- @current_method = nil
25
- @current_class = nil
26
- end
27
-
28
- def self.process(*klasses)
29
- analyzer = self.new
30
- klasses.each do |start_klass|
31
- analyzer.current_class = start_klass
32
- analyzer.process(ParseTree.new.parse_tree(start_klass))
33
- end
34
-
35
- deps = analyzer.dependencies
36
- deps.keys.sort_by {|k| k.to_s}.each do |dep_to|
37
- dep_from = deps[dep_to]
38
- puts "#{dep_to}: #{dep_from.uniq.sort.join(", ")}"
39
- end
40
- end
41
-
42
- def process_defn(exp)
43
- name = exp.shift
44
- @current_method = name
45
- return s(:defn, name, process(exp.shift), process(exp.shift))
46
- end
47
-
48
- def process_const(exp)
49
- name = exp.shift
50
- const = (defined?($c) ? @current_class.name : "#{@current_class}.#{@current_method}")
51
- is_class = ! (Object.const_get(name) rescue nil).nil?
52
- @dependencies[name] << const if is_class
53
- return s(:const, name)
54
- end
55
- end
56
-
57
- if __FILE__ == $0 then
58
- ARGV.each { |name| require name }
59
- ObjectSpace.each_object(Module) { |klass| new_classes << klass }
60
- new_classes.delete DependencyAnalyzer unless defined? $a
61
- DependencyAnalyzer.process(*(new_classes - old_classes))
62
- end
@@ -1,49 +0,0 @@
1
- #!/usr/local/bin/ruby -ws
2
-
3
- require 'pp'
4
- begin require 'rubygems' rescue LoadError end
5
- require 'parse_tree'
6
-
7
- def discover_new_classes_from
8
- old_classes = []
9
- ObjectSpace.each_object(Module) do |klass|
10
- old_classes << klass
11
- end
12
-
13
- yield
14
-
15
- new_classes = []
16
- ObjectSpace.each_object(Module) do |klass|
17
- new_classes << klass
18
- end
19
-
20
- new_classes -= old_classes
21
- new_classes = [ eval($c) ] if defined? $c
22
- new_classes
23
- end
24
-
25
- $f = false unless defined? $f
26
-
27
- new_classes = discover_new_classes_from do
28
- ARGV.unshift "-" if ARGV.empty?
29
- ARGV.each do |name|
30
- if name == "-" then
31
- code = $stdin.read
32
- code = "class Example; def example; #{code}; end; end" if $f
33
- eval code unless code.nil?
34
- else
35
- require name
36
- end
37
- end
38
- end
39
-
40
- result = ParseTree.new.parse_tree(*new_classes)
41
-
42
- result = result[0][3][2][1][2..-1] if $f
43
-
44
- unless defined? $q then
45
- pp result
46
- else
47
- p result
48
- end
49
-
@@ -1,20 +0,0 @@
1
- #!/usr/local/bin/ruby -w
2
- require 'rubygems'
3
- require 'sexp_processor'
4
-
5
- class QuickPrinter < SexpProcessor
6
- def initialize
7
- super
8
- self.strict = false
9
- self.auto_shift_type = true
10
- end
11
- def process_defn(exp)
12
- name = exp.shift
13
- args = process exp.shift
14
- body = process exp.shift
15
- puts " def #{name}"
16
- return s(:defn, name, args, body)
17
- end
18
- end
19
-
20
- QuickPrinter.new.process(*ParseTree.new.parse_tree(QuickPrinter))
@@ -1,49 +0,0 @@
1
- require 'sexp_processor'
2
-
3
- ##
4
- # Implements the Composite pattern on SexpProcessor. Need we say more?
5
- #
6
- # Yeah... probably. Implements a SexpProcessor of SexpProcessors so
7
- # you can easily chain multiple to each other. At some stage we plan
8
- # on having all of them run +process+ and but only ever output
9
- # something when +generate+ is called, allowing for deferred final
10
- # processing.
11
-
12
- class CompositeSexpProcessor < SexpProcessor
13
-
14
- ##
15
- # The list o' processors to run.
16
-
17
- attr_reader :processors
18
-
19
- def initialize # :nodoc:
20
- super
21
- @processors = []
22
- end
23
-
24
- ##
25
- # Add a +processor+ to the list of processors to run.
26
-
27
- def <<(processor)
28
- raise ArgumentError, "Can only add sexp processors" unless
29
- SexpProcessor === processor
30
- @processors << processor
31
- end
32
-
33
- ##
34
- # Run +exp+ through all of the processors, returning the final
35
- # result.
36
-
37
- def process(exp)
38
- @processors.each do |processor|
39
- exp = processor.process(exp)
40
- end
41
- exp
42
- end
43
-
44
- def on_error_in(node_type, &block)
45
- @processors.each do |processor|
46
- processor.on_error_in(node_type, &block)
47
- end
48
- end
49
- end