ruby2js 1.12.1 → 1.12.2

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.
@@ -10,5 +10,12 @@ module Ruby2JS
10
10
  raise NotImplementedError, "argument #{ unknown.inspect }" if unknown
11
11
  arg
12
12
  end
13
+
14
+ # (shadowarg :a)
15
+
16
+ handle :shadowarg do |arg, unknown=nil|
17
+ raise NotImplementedError, "argument #{ unknown.inspect }" if unknown
18
+ nil
19
+ end
13
20
  end
14
21
  end
@@ -7,7 +7,7 @@ module Ruby2JS
7
7
  # (blockarg :c))
8
8
 
9
9
  handle :args do |*args|
10
- args.map { |arg| parse arg }.join(', ')
10
+ args.map { |arg| parse arg }.compact.join(', ')
11
11
  end
12
12
  end
13
13
  end
@@ -79,7 +79,12 @@ module Ruby2JS
79
79
  s(:lvasgn, argname, value), nil)
80
80
  body = s(:begin, default, *body.children)
81
81
  end
82
- vars[arg.children.first] = true
82
+
83
+ if arg.type == :shadowarg
84
+ vars.delete(arg.children.first)
85
+ else
86
+ vars[arg.children.first] = true
87
+ end
83
88
  end
84
89
  end
85
90
 
@@ -11,10 +11,11 @@ module Ruby2JS
11
11
  raise NotImplementedError, "kwsplat" if node.type == :kwsplat
12
12
 
13
13
  begin
14
- block_this, block_depth = @block_this, @block_depth
15
- @block_this, @block_depth = false, 0
16
-
14
+ block_depth = @block_depth
17
15
  left, right = node.children
16
+
17
+ @block_depth = 0 if Hash === right or right.type == :block
18
+
18
19
  if left.type == :prop
19
20
  result = []
20
21
  if right[:get]
@@ -33,7 +34,7 @@ module Ruby2JS
33
34
  end
34
35
 
35
36
  ensure
36
- @block_this, @block_depth = block_this, block_depth
37
+ @block_depth = block_depth
37
38
  end
38
39
  end
39
40
 
@@ -85,43 +85,54 @@ module Ruby2JS
85
85
  elsif method =~ /=$/
86
86
  "#{ parse receiver }#{ '.' if receiver }#{ method.to_s.sub(/=$/, ' =') } #{ parse args.first }"
87
87
 
88
- elsif method == :new and receiver
89
- # map Ruby's "Regexp" to JavaScript's "Regexp"
90
- if receiver == s(:const, nil, :Regexp)
91
- receiver = s(:const, nil, :RegExp)
92
- end
93
-
94
- # allow a RegExp to be constructed from another RegExp
95
- if receiver == s(:const, nil, :RegExp)
96
- if args.first.type == :regexp
97
- opts = ''
98
- if args.first.children.last.children.length > 0
99
- opts = args.first.children.last.children.join
100
- end
101
-
102
- if args.length > 1
103
- opts += args.last.children.last
104
- end
88
+ elsif method == :new
89
+ if receiver
90
+ # map Ruby's "Regexp" to JavaScript's "Regexp"
91
+ if receiver == s(:const, nil, :Regexp)
92
+ receiver = s(:const, nil, :RegExp)
93
+ end
105
94
 
106
- return parse s(:regexp, *args.first.children[0...-1],
107
- s(:regopt, *opts.split('').map(&:to_sym)))
108
- elsif args.first.type == :str
109
- if args.length == 2 and args[1].type == :str
110
- opts = args[1].children[0]
111
- else
95
+ # allow a RegExp to be constructed from another RegExp
96
+ if receiver == s(:const, nil, :RegExp)
97
+ if args.first.type == :regexp
112
98
  opts = ''
99
+ if args.first.children.last.children.length > 0
100
+ opts = args.first.children.last.children.join
101
+ end
102
+
103
+ if args.length > 1
104
+ opts += args.last.children.last
105
+ end
106
+
107
+ return parse s(:regexp, *args.first.children[0...-1],
108
+ s(:regopt, *opts.split('').map(&:to_sym)))
109
+ elsif args.first.type == :str
110
+ if args.length == 2 and args[1].type == :str
111
+ opts = args[1].children[0]
112
+ else
113
+ opts = ''
114
+ end
115
+ return parse s(:regexp, args.first,
116
+ s(:regopt, *opts.each_char.map {|c| c}))
113
117
  end
114
- return parse s(:regexp, args.first,
115
- s(:regopt, *opts.each_char.map {|c| c}))
116
118
  end
117
- end
118
119
 
119
- args = args.map {|a| parse a}.join(', ')
120
+ args = args.map {|a| parse a}.join(', ')
120
121
 
121
- if ast.is_method?
122
- "new #{ parse receiver }(#{ args })"
122
+ if ast.is_method?
123
+ "new #{ parse receiver }(#{ args })"
124
+ else
125
+ "new #{ parse receiver }"
126
+ end
127
+ elsif args.length == 1 and args.first.type == :send
128
+ # accommodation for JavaScript like new syntax w/argument list
129
+ parse s(:send, s(:const, nil, args.first.children[1]), :new,
130
+ *args.first.children[2..-1]), @state
131
+ elsif args.length == 1 and args.first.type == :const
132
+ # accommodation for JavaScript like new syntax w/o argument list
133
+ parse s(:attr, args.first, :new), @state
123
134
  else
124
- "new #{ parse receiver }"
135
+ raise NotImplementedError, "use of JavaScript keyword new"
125
136
  end
126
137
 
127
138
  elsif method == :raise and receiver == nil
@@ -186,7 +186,7 @@ module Ruby2JS
186
186
 
187
187
  begin
188
188
  if simple
189
- # in the normal case, each process each argument
189
+ # in the normal case, process each argument
190
190
  reactApply, @reactApply = @reactApply, false
191
191
  params += args.map {|arg| process(arg)}
192
192
  else
@@ -196,13 +196,14 @@ module Ruby2JS
196
196
  # will look something like the following:
197
197
  #
198
198
  # React.createElement(*proc {
199
- # $_ = ['tag', hash]
199
+ # var $_ = ['tag', hash]
200
200
  # $_.push(React.createElement(...))
201
201
  # }())
202
202
  #
203
203
  # Base Ruby2JS processing will convert the 'splat' to 'apply'
204
204
  params = [s(:splat, s(:send, s(:block, s(:send, nil, :proc),
205
- s(:args), s(:begin, s(:lvasgn, :$_, s(:array, *params)),
205
+ s(:args, s(:shadowarg, :$_)), s(:begin,
206
+ s(:lvasgn, :$_, s(:array, *params)),
206
207
  *args.map {|arg| process arg},
207
208
  s(:return, s(:lvar, :$_)))), :[]))]
208
209
  end
@@ -2,7 +2,7 @@ module Ruby2JS
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 12
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/ruby2js.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "ruby2js"
5
- s.version = "1.12.1"
5
+ s.version = "1.12.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Sam Ruby"]
9
- s.date = "2015-01-23"
9
+ s.date = "2015-01-25"
10
10
  s.description = " The base package maps Ruby syntax to JavaScript semantics.\n Filters may be provided to add Ruby-specific or framework specific\n behavior.\n"
11
11
  s.email = "rubys@intertwingly.net"
12
12
  s.files = ["ruby2js.gemspec", "README.md", "lib/ruby2js", "lib/ruby2js/converter.rb", "lib/ruby2js/version.rb", "lib/ruby2js/filter", "lib/ruby2js/filter/jquery.rb", "lib/ruby2js/filter/return.rb", "lib/ruby2js/filter/underscore.rb", "lib/ruby2js/filter/angularrb.rb", "lib/ruby2js/filter/minitest-jasmine.rb", "lib/ruby2js/filter/camelCase.rb", "lib/ruby2js/filter/strict.rb", "lib/ruby2js/filter/functions.rb", "lib/ruby2js/filter/angular-resource.rb", "lib/ruby2js/filter/react.rb", "lib/ruby2js/filter/angular-route.rb", "lib/ruby2js/sinatra.rb", "lib/ruby2js/rails.rb", "lib/ruby2js/cgi.rb", "lib/ruby2js/converter", "lib/ruby2js/converter/self.rb", "lib/ruby2js/converter/arg.rb", "lib/ruby2js/converter/dstr.rb", "lib/ruby2js/converter/xstr.rb", "lib/ruby2js/converter/sym.rb", "lib/ruby2js/converter/return.rb", "lib/ruby2js/converter/break.rb", "lib/ruby2js/converter/for.rb", "lib/ruby2js/converter/defined.rb", "lib/ruby2js/converter/cvasgn.rb", "lib/ruby2js/converter/whilepost.rb", "lib/ruby2js/converter/logical.rb", "lib/ruby2js/converter/args.rb", "lib/ruby2js/converter/def.rb", "lib/ruby2js/converter/prototype.rb", "lib/ruby2js/converter/class.rb", "lib/ruby2js/converter/nthref.rb", "lib/ruby2js/converter/opasgn.rb", "lib/ruby2js/converter/module.rb", "lib/ruby2js/converter/kwbegin.rb", "lib/ruby2js/converter/send.rb", "lib/ruby2js/converter/boolean.rb", "lib/ruby2js/converter/masgn.rb", "lib/ruby2js/converter/hash.rb", "lib/ruby2js/converter/cvar.rb", "lib/ruby2js/converter/ivasgn.rb", "lib/ruby2js/converter/case.rb", "lib/ruby2js/converter/const.rb", "lib/ruby2js/converter/vasgn.rb", "lib/ruby2js/converter/untilpost.rb", "lib/ruby2js/converter/begin.rb", "lib/ruby2js/converter/ivar.rb", "lib/ruby2js/converter/while.rb", "lib/ruby2js/converter/next.rb", "lib/ruby2js/converter/nil.rb", "lib/ruby2js/converter/blockpass.rb", "lib/ruby2js/converter/super.rb", "lib/ruby2js/converter/defs.rb", "lib/ruby2js/converter/array.rb", "lib/ruby2js/converter/block.rb", "lib/ruby2js/converter/if.rb", "lib/ruby2js/converter/until.rb", "lib/ruby2js/converter/regexp.rb", "lib/ruby2js/converter/casgn.rb", "lib/ruby2js/converter/undef.rb", "lib/ruby2js/converter/literal.rb", "lib/ruby2js/converter/var.rb", "lib/ruby2js.rb"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2js
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.1
4
+ version: 1.12.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-01-23 00:00:00.000000000 Z
12
+ date: 2015-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parser