SweetTea 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,3 @@
1
1
  *.gem
2
2
  .bundle
3
- Gemfile.lock
4
3
  pkg/*
@@ -0,0 +1,18 @@
1
+ # Change Log
2
+
3
+ ### Release 0.0.6 - 6th April 2012
4
+ * 1 Major Feature
5
+ * Added executable to compile javascript
6
+ * 2 Minor Features
7
+ * Classes can now be initialised, with arguments
8
+ * Now developed using TDD
9
+ * 1 Bug Fix
10
+ * Empty variable would equal 'nil' instead of the correct 'null'
11
+
12
+ ### Release 0.0.5 - 2nd April 2012
13
+ * Initial Public Release
14
+ * 4 Major Features
15
+ * Classes
16
+ * Functions
17
+ * Variables
18
+ * Strings
@@ -0,0 +1,45 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ SweetTea (0.0.5.dev)
5
+ clamp (~> 0.3.1)
6
+ treetop
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ ZenTest (4.7.0)
12
+ autotest (4.4.6)
13
+ ZenTest (>= 4.4.1)
14
+ autotest-fsevent (0.2.8)
15
+ sys-uname
16
+ clamp (0.3.1)
17
+ diff-lcs (1.1.3)
18
+ ffi (1.0.11)
19
+ notifier (0.1.4)
20
+ polyglot (0.3.3)
21
+ rspec (2.9.0)
22
+ rspec-core (~> 2.9.0)
23
+ rspec-expectations (~> 2.9.0)
24
+ rspec-mocks (~> 2.9.0)
25
+ rspec-core (2.9.0)
26
+ rspec-expectations (2.9.0)
27
+ diff-lcs (~> 1.1.3)
28
+ rspec-mocks (2.9.0)
29
+ sys-uname (0.9.0)
30
+ ffi (>= 1.0.0)
31
+ test_notifier (1.0.0)
32
+ notifier
33
+ treetop (1.4.10)
34
+ polyglot
35
+ polyglot (>= 0.3.1)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ SweetTea!
42
+ autotest
43
+ autotest-fsevent
44
+ rspec
45
+ test_notifier
data/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright (c) 2012 James Birtles
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,134 @@
1
+ # SweetTea
2
+ SweetTea is a language that compiles down to javascript, similar to coffeescript.
3
+
4
+ ## Syntax
5
+ ### Classes
6
+ ##### Empty Class
7
+ ```javascript
8
+ // SweetTea
9
+ class-> MyClass
10
+ <-class
11
+
12
+ // JavaScript
13
+ var MyClass = (function() {
14
+ function MyClass() {}
15
+ return MyClass;
16
+ })();
17
+ ```
18
+
19
+ ##### Class Init
20
+ ```javascript
21
+ // SweetTea
22
+ class-> MyClass
23
+ function-> init arg1 arg2
24
+ var-> someVar = "value"
25
+ <-function
26
+ <-class
27
+
28
+ // JavaScript
29
+ var MyClass = (function() {
30
+ function MyClass(arg1, arg2) {
31
+ var someVar = "value";
32
+ }
33
+ return MyClass;
34
+ })();
35
+ ```
36
+
37
+ ##### Class Variables
38
+ ```javascript
39
+ // SweeTea
40
+ class-> MyClass
41
+ variable-> myVar = "Hello World"
42
+ <-class
43
+
44
+ // JavaScript
45
+ var MyClass = (function() {
46
+ function MyClass() {}
47
+ MyClass.prototype.myVar = "Hello World";
48
+ return MyClass;
49
+ })();
50
+
51
+ ```
52
+
53
+ ##### Class Functions
54
+ ```javascript
55
+ // SweetTea
56
+ class-> MyClass
57
+ function-> myFunction <-function
58
+ <-class
59
+
60
+ // JavaScript
61
+ var MyClass = (function() {
62
+ function MyClass() {}
63
+ MyClass.prototype.myFunction = function() {
64
+ };
65
+ return MyClass;
66
+ })();
67
+ ```
68
+
69
+ ### Functions
70
+ ##### Empty Function
71
+ ```javascript
72
+ // SweetTea
73
+ function-> myFunc <-function
74
+
75
+ // JavaScript
76
+ var myFunc = function() {
77
+ };
78
+ ```
79
+
80
+ ##### Function with arguments
81
+ ```javascript
82
+ // SweetTea
83
+ function-> myFunc arg1 arg2 arg3 <-function
84
+
85
+ // JavaScript
86
+ var myFunc = function(arg1, arg2, arg3) {
87
+ };
88
+ ```
89
+
90
+ ### Variables
91
+ ##### Empty Variable
92
+ ```javascript
93
+ // SweetTea
94
+ var-> myVar
95
+
96
+ // JavasScript
97
+ var myVar = null;
98
+ ```
99
+
100
+ ##### Variable with value
101
+ ```javascript
102
+ // SweetTea
103
+ var-> myVar = "Hello"
104
+
105
+ // JavaScript
106
+ var myVar = "Hello";
107
+ ```
108
+
109
+ ### Data Types
110
+ ```javascript
111
+ // Strings
112
+ "I am a String"
113
+ ```
114
+ _**Note**: Strings are currently the only data type_
115
+
116
+ ## Aliases
117
+ ```javascript
118
+ // Classes
119
+ class->
120
+ c->
121
+
122
+ // Functions
123
+ function->
124
+ func->
125
+ f->
126
+
127
+ // Variables
128
+ variable->
129
+ var->
130
+ v->
131
+ ```
132
+
133
+ ## License
134
+ All code in this project is licensed under MIT which can be found in the LICENSE file or at this url http://www.opensource.org/licenses/MIT
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.homepage = "http://jamesbirtles.org/sweettea"
11
11
  s.summary = %q{A language that compiles down to pure javascript}
12
12
  s.description = %q{SweetTea is a new language that can be compiled into javascript.}
13
+ s.license = "MIT"
13
14
 
14
15
  s.rubyforge_project = "SweetTea"
15
16
 
@@ -23,4 +24,5 @@ Gem::Specification.new do |s|
23
24
  s.add_development_dependency "autotest-fsevent"
24
25
  s.add_development_dependency "test_notifier"
25
26
  s.add_runtime_dependency "treetop"
27
+ s.add_runtime_dependency "clamp", "~> 0.3.1"
26
28
  end
data/bin/tea ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.expand_path("#{File.dirname(__FILE__)}/../lib"))
3
+
4
+ require "clamp"
5
+
6
+ class CompileCommand < Clamp::Command
7
+ option ["-o", "--output"], "OUTPUT", "What to call the file with the compiled javascript"
8
+
9
+ parameter "INPUT", "SweetTea file to compile to javascript", :attribute_name => :filepath
10
+
11
+ def default_output
12
+ dir = File.expand_path(File.dirname(filepath))
13
+ name = File.basename(filepath).split(".")
14
+ name[name.count-1] = "js"
15
+ "#{dir}/#{name.join(".")}"
16
+ end
17
+
18
+ def execute
19
+ require "SweetTea/parser"
20
+ parser = SweetTea::Parser.new
21
+ js = parser.parse File.read(File.expand_path(filepath))
22
+ File.open(output, 'w') {|f| f.write js }
23
+ end
24
+ end
25
+
26
+ CompileCommand.run
@@ -8,8 +8,14 @@ module SweetTea
8
8
  def parse code
9
9
  parser = SweetTeaParser.new
10
10
  results = parser.parse code
11
- @indent = 0
12
- @currentClass = nil
11
+ @options = {
12
+ :indent => 0,
13
+ :current_class => nil,
14
+ :init => {
15
+ :args => nil,
16
+ :content => nil
17
+ }
18
+ }
13
19
  to_js(results)
14
20
  end
15
21
 
@@ -21,8 +27,8 @@ module SweetTea
21
27
  return all.join
22
28
  when "SweetTea::ClassNode"
23
29
  className = node.elements[2].text_value
24
- @currentClass = className
25
- @indent += 1
30
+ @options[:current_class] = className
31
+ @options[:indent] += 1
26
32
  lines = ""
27
33
  node.elements[3].elements.each do |n|
28
34
  val = to_js(n, true)
@@ -30,10 +36,14 @@ module SweetTea
30
36
  lines << "#{val}"
31
37
  end
32
38
  end
33
- @indent -= 1
34
- @currentClass = nil
39
+ @options[:indent] -= 1
40
+ @options[:current_class] = nil
41
+ init = @options[:init][:content]
42
+ init_args = @options[:init][:args]
43
+ @options[:init][:content] = nil
44
+ @options[:init][:args] = nil
35
45
  return "#{ind}var #{className} = (function() {\n" +
36
- "#{ind} function #{className}() {}\n" +
46
+ "#{ind} function #{className}(#{init_args}) {#{init}}\n" +
37
47
  "#{lines}" +
38
48
  "#{ind} return #{className};\n" +
39
49
  "#{ind}})();\n"
@@ -51,18 +61,24 @@ module SweetTea
51
61
  end
52
62
  end
53
63
  lines = ""
54
- @indent += 1
64
+ @options[:indent] += 1
55
65
  node.elements[4].elements.each do |n|
56
66
  val = to_js(n)
57
67
  if val != ""
58
68
  lines << val
59
69
  end
60
70
  end
61
- @indent -= 1
71
+ @options[:indent] -= 1
62
72
  if inClass
63
- return "#{ind}#{@currentClass}.prototype.#{funcName} = function(#{args}) {\n" +
64
- "#{lines}" +
65
- "#{ind}};\n"
73
+ if funcName == "init"
74
+ @options[:init][:content] = "\n#{lines}#{ind}" if lines != ""
75
+ @options[:init][:args] = args
76
+ return ""
77
+ else
78
+ return "#{ind}#{@options[:current_class]}.prototype.#{funcName} = function(#{args}) {\n" +
79
+ "#{lines}" +
80
+ "#{ind}};\n"
81
+ end
66
82
  else
67
83
  return "#{ind}var #{funcName} = function(#{args}) {\n" +
68
84
  "#{lines}" +
@@ -71,12 +87,12 @@ module SweetTea
71
87
  when "SweetTea::VariableNode"
72
88
  varName = node.elements[2].text_value
73
89
  if node.elements[4].elements.nil?
74
- varValue = "nil"
90
+ varValue = "null"
75
91
  else
76
92
  varValue = to_js(node.elements[4].elements[2])
77
93
  end
78
94
  if inClass
79
- return "#{ind}#{@currentClass}.prototype.#{varName} = #{varValue};\n"
95
+ return "#{ind}#{@options[:current_class]}.prototype.#{varName} = #{varValue};\n"
80
96
  else
81
97
  return "#{ind}var #{varName} = #{varValue};\n"
82
98
  end
@@ -89,7 +105,7 @@ module SweetTea
89
105
  end
90
106
 
91
107
  def ind
92
- " " * @indent
108
+ " " * @options[:indent]
93
109
  end
94
110
  end
95
111
  end
@@ -1,3 +1,3 @@
1
1
  module SweetTea
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,6 @@
1
+ class-> MyClass <-class
2
+ ----
3
+ var MyClass = (function() {
4
+ function MyClass() {}
5
+ return MyClass;
6
+ })();
@@ -0,0 +1,12 @@
1
+ class-> MyClass
2
+ function-> init
3
+ var-> someVar = "value"
4
+ <-function
5
+ <-class
6
+ ----
7
+ var MyClass = (function() {
8
+ function MyClass() {
9
+ var someVar = "value";
10
+ }
11
+ return MyClass;
12
+ })();
@@ -0,0 +1,8 @@
1
+ class-> MyClass
2
+ function-> init arg1 arg2 arg3 <-function
3
+ <-class
4
+ ----
5
+ var MyClass = (function() {
6
+ function MyClass(arg1, arg2, arg3) {}
7
+ return MyClass;
8
+ })();
@@ -0,0 +1,4 @@
1
+ function-> myFunc arg1 arg2 arg3 <-function
2
+ ----
3
+ var myFunc = function(arg1, arg2, arg3) {
4
+ };
@@ -0,0 +1,11 @@
1
+ class-> MyClass
2
+ function-> myFunction
3
+ <-function
4
+ <-class
5
+ ----
6
+ var MyClass = (function() {
7
+ function MyClass() {}
8
+ MyClass.prototype.myFunction = function() {
9
+ };
10
+ return MyClass;
11
+ })();
@@ -0,0 +1,4 @@
1
+ function-> myFunc <-function
2
+ ----
3
+ var myFunc = function() {
4
+ };
@@ -0,0 +1,14 @@
1
+ class-> MyClass
2
+ function-> myFunction
3
+ function-> doSomething <-function
4
+ <-function
5
+ <-class
6
+ ----
7
+ var MyClass = (function() {
8
+ function MyClass() {}
9
+ MyClass.prototype.myFunction = function() {
10
+ var doSomething = function() {
11
+ };
12
+ };
13
+ return MyClass;
14
+ })();
@@ -0,0 +1,9 @@
1
+ class-> MyClass
2
+ var-> myVar = "Hello"
3
+ <-class
4
+ ----
5
+ var MyClass = (function() {
6
+ function MyClass() {}
7
+ MyClass.prototype.myVar = "Hello";
8
+ return MyClass;
9
+ })();
@@ -0,0 +1,3 @@
1
+ var-> myVar
2
+ ----
3
+ var myVar = null;
@@ -0,0 +1,13 @@
1
+ class-> MyClass
2
+ function-> myFunction
3
+ var-> myVar = "Hello"
4
+ <-function
5
+ <-class
6
+ ----
7
+ var MyClass = (function() {
8
+ function MyClass() {}
9
+ MyClass.prototype.myFunction = function() {
10
+ var myVar = "Hello";
11
+ };
12
+ return MyClass;
13
+ })();
@@ -0,0 +1,3 @@
1
+ var-> myVar = "Hello"
2
+ ----
3
+ var myVar = "Hello";
@@ -30,6 +30,10 @@ describe "SweetTea grammer" do
30
30
  subject.parse("f-> functionName <-f").should_not be_nil
31
31
  end
32
32
 
33
+ it "should allow arguments" do
34
+ subject.parse("f-> functionName arg1 arg2 arg3 <-function").should_not be_nil
35
+ end
36
+
33
37
  it "should allow content" do
34
38
  subject.parse(
35
39
  <<-CODE
@@ -0,0 +1,64 @@
1
+ require "spec_helper.rb"
2
+ require "SweetTea/parser"
3
+ base_path = File.expand_path(File.dirname(__FILE__))
4
+
5
+ code = { stea: {}, js: {} }
6
+ Dir["#{base_path}/expected_js/*.js"].each do |path|
7
+ contents = File.read(path).split("\n----\n")
8
+ refName = File.basename(path, ".js").to_sym
9
+ code[:stea][refName] = contents[0]
10
+ code[:js][refName] = contents[1]
11
+ end
12
+
13
+ describe "SweetTea parser" do
14
+ subject { SweetTea::Parser.new }
15
+ context "class" do
16
+ it "should generate the correct javascript for an empty class" do
17
+ subject.parse(code[:stea][:class_empty]).should == code[:js][:class_empty]
18
+ end
19
+
20
+ it "should transfer content of 'init' function to class constructor" do
21
+ subject.parse(code[:stea][:class_init]).should == code[:js][:class_init]
22
+ end
23
+
24
+ it "should transfer the args of 'init' function to class constructor" do
25
+ subject.parse(code[:stea][:class_init_args]).should == code[:js][:class_init_args]
26
+ end
27
+ end
28
+
29
+ context "function" do
30
+ it "should generate the correct javascript for an empty function" do
31
+ subject.parse(code[:stea][:func_empty]).should == code[:js][:func_empty]
32
+ end
33
+
34
+ it "should generate the correct javascript for a function with args" do
35
+ subject.parse(code[:stea][:func_args]).should == code[:js][:func_args]
36
+ end
37
+
38
+ it "should generate the correct type of function for a class method" do
39
+ subject.parse(code[:stea][:func_class]).should == code[:js][:func_class]
40
+ end
41
+
42
+ it "doesn't generate class function within class function" do
43
+ subject.parse(code[:stea][:func_gen_correct_type]).should == code[:js][:func_gen_correct_type]
44
+ end
45
+ end
46
+
47
+ context "variable" do
48
+ it "should generate the correct javascript for a initialised variable" do
49
+ subject.parse(code[:stea][:var_w_value]).should == code[:js][:var_w_value]
50
+ end
51
+
52
+ it "should generate the correct javascript for an empty variable" do
53
+ subject.parse(code[:stea][:var_empty]).should == code[:js][:var_empty]
54
+ end
55
+
56
+ it "should generate the correct type of variable for a class method" do
57
+ subject.parse(code[:stea][:var_class]).should == code[:js][:var_class]
58
+ end
59
+
60
+ it "doesn't generate class variable within class function" do
61
+ subject.parse(code[:stea][:var_gen_correct_type]).should == code[:js][:var_gen_correct_type]
62
+ end
63
+ end
64
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: SweetTea
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-02 00:00:00.000000000Z
12
+ date: 2012-04-06 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70115283002400 !ruby/object:Gem::Requirement
16
+ requirement: &70333014446300 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70115283002400
24
+ version_requirements: *70333014446300
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: autotest
27
- requirement: &70115283001740 !ruby/object:Gem::Requirement
27
+ requirement: &70333014445660 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70115283001740
35
+ version_requirements: *70333014445660
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: autotest-fsevent
38
- requirement: &70115283001280 !ruby/object:Gem::Requirement
38
+ requirement: &70333014445020 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70115283001280
46
+ version_requirements: *70333014445020
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: test_notifier
49
- requirement: &70115283000580 !ruby/object:Gem::Requirement
49
+ requirement: &70333014444400 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70115283000580
57
+ version_requirements: *70333014444400
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: treetop
60
- requirement: &70115282999940 !ruby/object:Gem::Requirement
60
+ requirement: &70333014443760 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,28 +65,58 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70115282999940
68
+ version_requirements: *70333014443760
69
+ - !ruby/object:Gem::Dependency
70
+ name: clamp
71
+ requirement: &70333014443020 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 0.3.1
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70333014443020
69
80
  description: SweetTea is a new language that can be compiled into javascript.
70
81
  email:
71
82
  - itsme@jamesbirtles.com
72
- executables: []
83
+ executables:
84
+ - tea
73
85
  extensions: []
74
86
  extra_rdoc_files: []
75
87
  files:
76
88
  - .gitignore
77
89
  - .rspec
90
+ - CHANGELOG.md
78
91
  - Gemfile
92
+ - Gemfile.lock
93
+ - LICENSE
94
+ - README.md
79
95
  - Rakefile
80
96
  - SweetTea.gemspec
97
+ - bin/tea
81
98
  - lib/SweetTea.rb
82
99
  - lib/SweetTea/grammar.treetop
83
100
  - lib/SweetTea/nodes.rb
84
101
  - lib/SweetTea/parser.rb
85
102
  - lib/SweetTea/version.rb
103
+ - spec/expected_js/class_empty.js
104
+ - spec/expected_js/class_init.js
105
+ - spec/expected_js/class_init_args.js
106
+ - spec/expected_js/func_args.js
107
+ - spec/expected_js/func_class.js
108
+ - spec/expected_js/func_empty.js
109
+ - spec/expected_js/func_gen_correct_type.js
110
+ - spec/expected_js/var_class.js
111
+ - spec/expected_js/var_empty.js
112
+ - spec/expected_js/var_gen_correct_type.js
113
+ - spec/expected_js/var_w_value.js
86
114
  - spec/grammar_spec.rb
115
+ - spec/parser_spec.rb
87
116
  - spec/spec_helper.rb
88
117
  homepage: http://jamesbirtles.org/sweettea
89
- licenses: []
118
+ licenses:
119
+ - MIT
90
120
  post_install_message:
91
121
  rdoc_options: []
92
122
  require_paths:
@@ -110,6 +140,18 @@ signing_key:
110
140
  specification_version: 3
111
141
  summary: A language that compiles down to pure javascript
112
142
  test_files:
143
+ - spec/expected_js/class_empty.js
144
+ - spec/expected_js/class_init.js
145
+ - spec/expected_js/class_init_args.js
146
+ - spec/expected_js/func_args.js
147
+ - spec/expected_js/func_class.js
148
+ - spec/expected_js/func_empty.js
149
+ - spec/expected_js/func_gen_correct_type.js
150
+ - spec/expected_js/var_class.js
151
+ - spec/expected_js/var_empty.js
152
+ - spec/expected_js/var_gen_correct_type.js
153
+ - spec/expected_js/var_w_value.js
113
154
  - spec/grammar_spec.rb
155
+ - spec/parser_spec.rb
114
156
  - spec/spec_helper.rb
115
157
  has_rdoc: