js2 0.3.2 → 0.3.3

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/CHANGELOG +3 -0
  2. data/lib/js2/js2.js +34 -17
  3. metadata +18 -7
data/CHANGELOG ADDED
@@ -0,0 +1,3 @@
1
+ 0.3.3
2
+ - using closure for classes instead of hashes
3
+ - adding static methods
data/lib/js2/js2.js CHANGED
@@ -123,14 +123,18 @@ function mainFunction (arg) {
123
123
  var oo = klass.oo;
124
124
  proto.oo = oo;
125
125
 
126
- for (var name in klassDef) {
127
- oo.addMember(name, klassDef[name]);
128
- }
129
-
130
126
  for (var name in this) {
131
127
  oo.addStaticMember(name, this[name]);
132
128
  }
133
129
 
130
+ if (typeof klassDef == 'function') {
131
+ klassDef(klass, oo);
132
+ } else {
133
+ for (var name in klassDef) {
134
+ oo.addMember(name, klassDef[name]);
135
+ }
136
+ }
137
+
134
138
  return klass;
135
139
  };
136
140
 
@@ -155,6 +159,7 @@ function mainFunction (arg) {
155
159
  [ 'SPACE', "\\s+" ],
156
160
  [ 'REGEX', "\\/" ],
157
161
  [ 'CLASS', "class" ],
162
+ [ 'STATIC', "static" ],
158
163
  [ 'SHORT_FUNCT', "#\\{|#\\(" ],
159
164
  [ 'FOREACH', "foreach" ],
160
165
  [ 'CURRY', "curry" ],
@@ -534,7 +539,7 @@ function mainFunction (arg) {
534
539
  }
535
540
  };
536
541
 
537
- var KEYWORDS = { 'var': null, 'class': null, 'function': null, 'in': null, 'with': null, 'curry': null};
542
+ var KEYWORDS = { 'var': null, 'class': null, 'function': null, 'in': null, 'with': null, 'curry': null, 'static': null };
538
543
  var IDS = JS2.Lexer.IDS;
539
544
  IDS['NODE'] = -1;
540
545
 
@@ -702,6 +707,7 @@ function mainFunction (arg) {
702
707
  switch (token[0]) {
703
708
  case 'var': return Member;
704
709
  case 'function': return Method;
710
+ case 'static': return StaticMember;
705
711
  }
706
712
  },
707
713
 
@@ -713,8 +719,27 @@ function mainFunction (arg) {
713
719
 
714
720
  toString: function() {
715
721
  var str = this.$super();
716
- return str.replace(/,(\s+\})$/, "$1");
717
- }
722
+ return str.replace(/^{/, 'function(KLASS, OO){').replace(/}$/, "}");
723
+ }
724
+ });
725
+
726
+ var StaticMember = Content.extend({
727
+ name: 'StaticMember',
728
+ handOff: function(token) {
729
+ if (this.started) this.closed = true;
730
+
731
+ switch (token[0]) {
732
+ case 'var': this.started = true; return Member;
733
+ case 'function': this.started = true; return Method;
734
+ }
735
+ },
736
+
737
+ toString: function() {
738
+ var member = this.handOffs[0];
739
+ if (!member) return '';
740
+ var ret = member.toString();
741
+ return ret.replace(/addMember/, 'addStaticMember');
742
+ }
718
743
  });
719
744
 
720
745
  var Method = Content.extend({
@@ -731,7 +756,7 @@ function mainFunction (arg) {
731
756
 
732
757
  toString: function () {
733
758
  var v = this.validate(/^(function)(\s+)(I)(\s*)(Braces)(\s*)(Block)/);
734
- return v[3] + ':' + "function" + v[2] + v[5] + ' ' + v[7] + ',';
759
+ return 'OO.addMember("' + v[3] + '",' + "function" + v[2] + v[5] + ' ' + v[7] + ');';
735
760
  }
736
761
  });
737
762
 
@@ -746,12 +771,10 @@ function mainFunction (arg) {
746
771
  var last = v.last.replace(/;$/, '');
747
772
  if (last.length == 0) last = 'null';
748
773
 
749
- return '"' + v[3] + '":' + last + ',';
774
+ return 'OO.addMember("' + v[3] + '",' + last + ');';
750
775
  }
751
776
  });
752
777
 
753
-
754
-
755
778
  var Braces = Content.extend({
756
779
  name: 'Braces',
757
780
  handleToken: function(token) {
@@ -950,7 +973,6 @@ JS2.Array.prototype.any = function() {
950
973
  return this.length > 0;
951
974
  };
952
975
 
953
-
954
976
  JS2.Class.extend('FileSystem', {
955
977
  initialize:function (adapter) {
956
978
  this.adapter = adapter;
@@ -1060,7 +1082,6 @@ JS2.Class.extend('FileSystem', {
1060
1082
  }
1061
1083
  });
1062
1084
 
1063
-
1064
1085
  JS2.Class.extend('Updater', {
1065
1086
  initialize:function (fs, inDir, outDir, recursive) {
1066
1087
  this.recursive = recursive;
@@ -1105,7 +1126,6 @@ JS2.Class.extend('Updater', {
1105
1126
  }
1106
1127
  });
1107
1128
 
1108
-
1109
1129
  JS2.Class.extend('Config', {
1110
1130
  "CLI_REGEX":/^-(r|i|f)(=(\w+))$/,
1111
1131
  "optsLookup":{
@@ -1168,7 +1188,6 @@ JS2.Class.extend('Config', {
1168
1188
 
1169
1189
  });
1170
1190
 
1171
-
1172
1191
  JS2.Class.extend('Commander', {
1173
1192
  "BANNER":"js2 <command> [options] <arguments>\n" +
1174
1193
  "Commands:\n" +
@@ -1251,7 +1270,6 @@ JS2.Class.extend('Commander', {
1251
1270
  });
1252
1271
 
1253
1272
 
1254
-
1255
1273
  JS2.Class.extend('BrowserDecorator', {
1256
1274
  file:function (code) {
1257
1275
  return code;
@@ -1285,7 +1303,6 @@ JS2.Class.extend('RingoDecorator', {
1285
1303
  JS2.DECORATOR = JS2.DECORATOR || new JS2.BrowserDecorator();
1286
1304
 
1287
1305
 
1288
-
1289
1306
  JS2.fs = new JS2.FileSystem(JS2_RUBY_FILE_ADAPTER);
1290
1307
  js2.DECORATOR = new JS2.BrowserDecorator();
1291
1308
  js2.ROOT = root;
metadata CHANGED
@@ -1,8 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js2
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.3.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 3
8
+ - 3
9
+ version: 0.3.3
6
10
  platform: ruby
7
11
  authors:
8
12
  - Jeff Su
@@ -10,7 +14,7 @@ autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
16
 
13
- date: 2011-03-09 00:00:00 +08:00
17
+ date: 2011-03-09 00:00:00 -08:00
14
18
  default_executable:
15
19
  dependencies:
16
20
  - !ruby/object:Gem::Dependency
@@ -21,6 +25,8 @@ dependencies:
21
25
  requirements:
22
26
  - - ">="
23
27
  - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
24
30
  version: "0"
25
31
  type: :runtime
26
32
  version_requirements: *id001
@@ -36,12 +42,13 @@ extra_rdoc_files: []
36
42
  files:
37
43
  - bin/js2
38
44
  - bin/js2-ruby
39
- - lib/js2.rb
40
- - lib/js2/context.rb
41
- - lib/js2/rack.rb
42
45
  - lib/js2/command.rb
46
+ - lib/js2/context.rb
43
47
  - lib/js2/fs.rb
48
+ - lib/js2/rack.rb
49
+ - lib/js2.rb
44
50
  - lib/js2/js2.js
51
+ - CHANGELOG
45
52
  has_rdoc: true
46
53
  homepage: http://jeffsu.github.com/js2
47
54
  licenses: []
@@ -56,17 +63,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
56
63
  requirements:
57
64
  - - ">="
58
65
  - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
59
68
  version: "0"
60
69
  required_rubygems_version: !ruby/object:Gem::Requirement
61
70
  none: false
62
71
  requirements:
63
72
  - - ">="
64
73
  - !ruby/object:Gem::Version
74
+ segments:
75
+ - 0
65
76
  version: "0"
66
77
  requirements: []
67
78
 
68
79
  rubyforge_project:
69
- rubygems_version: 1.5.2
80
+ rubygems_version: 1.3.7
70
81
  signing_key:
71
82
  specification_version: 3
72
83
  summary: Javascript Syntactic Sugar