js2 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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