amber-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. data/.gitignore +2 -0
  2. data/.rvmrc +4 -0
  3. data/CHANGELOG.md +3 -0
  4. data/Gemfile +2 -0
  5. data/Gemfile.lock +96 -0
  6. data/LICENSE +7 -0
  7. data/README.md +13 -0
  8. data/Rakefile +15 -0
  9. data/amber-rails.gemspec +21 -0
  10. data/app/assets/.DS_Store +0 -0
  11. data/app/assets/javascripts/.DS_Store +0 -0
  12. data/app/assets/javascripts/codemirror/codemirror.js +2144 -0
  13. data/app/assets/javascripts/codemirror/overlay.js +51 -0
  14. data/app/assets/javascripts/codemirror/runmode.js +27 -0
  15. data/app/assets/javascripts/codemirror/smalltalk/index.html +56 -0
  16. data/app/assets/javascripts/codemirror/smalltalk/smalltalk.js +134 -0
  17. data/app/assets/javascripts/html5.js +35 -0
  18. data/app/assets/javascripts/jquery.js +8981 -0
  19. data/app/assets/javascripts/jquery.textarea.js +267 -0
  20. data/app/assets/javascripts/jquery.tmpl.js +503 -0
  21. data/app/assets/javascripts/jquery.ui.js +272 -0
  22. data/app/assets/javascripts/json2.js +481 -0
  23. data/app/assets/javascripts/jtalk-development.js.coffee +4 -0
  24. data/app/assets/javascripts/jtalk-todos.js.coffee +4 -0
  25. data/app/assets/javascripts/jtalk.js.coffee +16 -0
  26. data/app/assets/javascripts/jtalk_core/boot.js +466 -0
  27. data/app/assets/javascripts/jtalk_core/st/.DS_Store +0 -0
  28. data/app/assets/javascripts/jtalk_core/st/Benchfib.js +159 -0
  29. data/app/assets/javascripts/jtalk_core/st/Canvas.js +1479 -0
  30. data/app/assets/javascripts/jtalk_core/st/Compiler.js +1587 -0
  31. data/app/assets/javascripts/jtalk_core/st/Examples.js +863 -0
  32. data/app/assets/javascripts/jtalk_core/st/HTML5.js +54 -0
  33. data/app/assets/javascripts/jtalk_core/st/IDE.js +3457 -0
  34. data/app/assets/javascripts/jtalk_core/st/JQuery.js +898 -0
  35. data/app/assets/javascripts/jtalk_core/st/Kernel.js +6761 -0
  36. data/app/assets/javascripts/jtalk_core/st/Parser.js +1655 -0
  37. data/app/assets/javascripts/jtalk_core/st/SUnit.js +1059 -0
  38. data/app/assets/stylesheets/codemirror.css +67 -0
  39. data/app/assets/stylesheets/codemirror_jtalk.css +21 -0
  40. data/app/assets/stylesheets/jtalk.css +369 -0
  41. data/app/assets/stylesheets/sunit.css +65 -0
  42. data/config/routes.rb +10 -0
  43. data/examples/todos/.gitignore +5 -0
  44. data/examples/todos/.rvmrc +4 -0
  45. data/examples/todos/Gemfile +12 -0
  46. data/examples/todos/Gemfile.lock +126 -0
  47. data/examples/todos/README +261 -0
  48. data/examples/todos/Rakefile +15 -0
  49. data/examples/todos/app/assets/images/rails.png +0 -0
  50. data/examples/todos/app/assets/javascripts/application.js.coffee +5 -0
  51. data/examples/todos/app/assets/javascripts/jtalk/Examples.deploy.js +863 -0
  52. data/examples/todos/app/assets/javascripts/jtalk/Examples.js +863 -0
  53. data/examples/todos/app/assets/smalltalk/Examples.st +397 -0
  54. data/examples/todos/app/assets/stylesheets/application.css +8 -0
  55. data/examples/todos/app/assets/stylesheets/jtalk-todos.css +154 -0
  56. data/examples/todos/app/controllers/application_controller.rb +3 -0
  57. data/examples/todos/app/controllers/todos_controller.rb +5 -0
  58. data/examples/todos/app/helpers/application_helper.rb +2 -0
  59. data/examples/todos/app/models/.gitkeep +0 -0
  60. data/examples/todos/app/views/todos/index.html.haml +16 -0
  61. data/examples/todos/config.ru +4 -0
  62. data/examples/todos/config/application.rb +31 -0
  63. data/examples/todos/config/boot.rb +6 -0
  64. data/examples/todos/config/database.yml +25 -0
  65. data/examples/todos/config/environment.rb +5 -0
  66. data/examples/todos/config/environments/development.rb +27 -0
  67. data/examples/todos/config/environments/production.rb +60 -0
  68. data/examples/todos/config/environments/test.rb +42 -0
  69. data/examples/todos/config/initializers/backtrace_silencers.rb +7 -0
  70. data/examples/todos/config/initializers/inflections.rb +10 -0
  71. data/examples/todos/config/initializers/mime_types.rb +5 -0
  72. data/examples/todos/config/initializers/secret_token.rb +7 -0
  73. data/examples/todos/config/initializers/session_store.rb +8 -0
  74. data/examples/todos/config/initializers/wrap_parameters.rb +14 -0
  75. data/examples/todos/config/locales/en.yml +5 -0
  76. data/examples/todos/config/routes.rb +3 -0
  77. data/examples/todos/log/.gitkeep +0 -0
  78. data/examples/todos/public/404.html +26 -0
  79. data/examples/todos/public/422.html +26 -0
  80. data/examples/todos/public/500.html +26 -0
  81. data/examples/todos/public/favicon.ico +0 -0
  82. data/examples/todos/public/robots.txt +5 -0
  83. data/examples/todos/script/rails +6 -0
  84. data/examples/todos/vendor/assets/stylesheets/.gitkeep +0 -0
  85. data/examples/todos/vendor/plugins/.gitkeep +0 -0
  86. data/lib/amber-rails.rb +1 -0
  87. data/lib/amber/rails.rb +30 -0
  88. data/lib/amber/rails/engine.rb +12 -0
  89. data/lib/amber/rails/version.rb +5 -0
  90. metadata +167 -0
@@ -0,0 +1,4 @@
1
+ #= require jtalk_core/st/IDE
2
+ #= require jtalk_core/st/SUnit
3
+ #= require codemirror/codemirror
4
+ #= require codemirror/smalltalk/smalltalk
@@ -0,0 +1,4 @@
1
+ #= require html5
2
+ #= require json2
3
+ #= require jtalk
4
+ #= require jtalk-development
@@ -0,0 +1,16 @@
1
+ #= require jquery
2
+ #= require jquery.ui
3
+ #= require jquery.textarea
4
+ #= require jtalk_core/boot
5
+ #= require jtalk_core/st/Kernel
6
+ #= require jtalk_core/st/Canvas
7
+ #= require jtalk_core/st/JQuery
8
+ #= require jtalk_core/st/Parser
9
+ #= require jtalk_core/st/Compiler
10
+ #= require jtalk_core/st/Examples
11
+ #= require jtalk_core/st/Benchfib
12
+
13
+ $ ->
14
+ smalltalk.init smalltalk.Object
15
+ smalltalk.classes()._do_ (each) ->
16
+ each._initialize()
@@ -0,0 +1,466 @@
1
+ /* ====================================================================
2
+ |
3
+ | Jtalk Smalltalk
4
+ | http://jtalk-project.org
5
+ |
6
+ ======================================================================
7
+
8
+ ======================================================================
9
+ |
10
+ | Copyright (c) 2010-2011
11
+ | Nicolas Petton <petton.nicolas@gmail.com>
12
+ |
13
+ | Jtalk is released under the MIT license
14
+ |
15
+ | Permission is hereby granted, free of charge, to any person obtaining
16
+ | a copy of this software and associated documentation files (the
17
+ | 'Software'), to deal in the Software without restriction, including
18
+ | without limitation the rights to use, copy, modify, merge, publish,
19
+ | distribute, sublicense, and/or sell copies of the Software, and to
20
+ | permit persons to whom the Software is furnished to do so, subject to
21
+ | the following conditions:
22
+ |
23
+ | The above copyright notice and this permission notice shall be
24
+ | included in all copies or substantial portions of the Software.
25
+ |
26
+ | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
27
+ | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28
+ | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
29
+ | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
30
+ | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
31
+ | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
32
+ | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33
+ |
34
+ ==================================================================== */
35
+
36
+ /* Smalltalk constructors definition */
37
+
38
+ function SmalltalkObject(){};
39
+ function SmalltalkBehavior(){};
40
+ function SmalltalkClass(){};
41
+ function SmalltalkMetaclass(){
42
+ this.meta = true;
43
+ };
44
+ function SmalltalkMethod(){};
45
+ function SmalltalkNil(){};
46
+
47
+ function Smalltalk(){
48
+
49
+ var st = this;
50
+
51
+ /* Smalltalk class creation. A class is an instance of an automatically
52
+ created metaclass object. Newly created classes (not their metaclass)
53
+ should be added to the smalltalk object, see smalltalk.addClass().
54
+ Superclass linking is *not* handled here, see smalltalk.init() */
55
+
56
+ function klass(spec) {
57
+ var spec = spec || {};
58
+ var that;
59
+ if(spec.meta) {
60
+ that = new SmalltalkMetaclass();
61
+ } else {
62
+ that = new (klass({meta: true})).fn;
63
+ that.klass.instanceClass = that;
64
+ that.className = spec.className;
65
+ that.klass.className = that.className + ' class';
66
+ }
67
+
68
+ that.fn = spec.fn || function(){};
69
+ that.superclass = spec.superclass;
70
+ that.iVarNames = spec.iVarNames || [];
71
+ if(that.superclass) {
72
+ that.klass.superclass = that.superclass.klass;
73
+ }
74
+ that.category = spec.category || "";
75
+ that.fn.prototype.methods = {};
76
+ that.fn.prototype.inheritedMethods = {};
77
+ that.fn.prototype.klass = that;
78
+
79
+ return that;
80
+ };
81
+
82
+ /* Smalltalk method object. To add a method to a class,
83
+ use smalltalk.addMethod() */
84
+
85
+ st.method = function(spec) {
86
+ var that = new SmalltalkMethod();
87
+ that.selector = spec.selector;
88
+ that.jsSelector = spec.jsSelector;
89
+ that.category = spec.category;
90
+ that.source = spec.source;
91
+ that.messageSends = spec.messageSends || [];
92
+ that.referencedClasses = spec.referencedClasses || [];
93
+ that.fn = spec.fn;
94
+ return that
95
+ };
96
+
97
+ /* Initialize a class in its class hierarchy. Handle both class and
98
+ metaclasses. */
99
+
100
+ st.init = function(klass) {
101
+ var subclasses = st.subclasses(klass);
102
+ var methods;
103
+
104
+ if(klass.superclass && klass.superclass !== nil) {
105
+ methods = st.methods(klass.superclass);
106
+
107
+ //Methods linking
108
+ for(var i in methods) {
109
+ if(!klass.fn.prototype.methods[i]) {
110
+ klass.fn.prototype.inheritedMethods[i] = methods[i];
111
+ klass.fn.prototype[methods[i].jsSelector] = methods[i].fn;
112
+ }
113
+ }
114
+ }
115
+
116
+ for(var i=0;i<subclasses.length;i++) {
117
+ st.init(subclasses[i]);
118
+ }
119
+ if(klass.klass && !klass.meta) {
120
+ st.init(klass.klass);
121
+ }
122
+ };
123
+
124
+ /* Answer all registered Smalltalk classes */
125
+
126
+ st.classes = function() {
127
+ var classes = [];
128
+ for(var i in st) {
129
+ if(i.search(/^[A-Z]/g) != -1) {
130
+ classes.push(st[i]);
131
+ }
132
+
133
+ }
134
+ return classes
135
+ };
136
+
137
+ /* Answer all methods (included inherited ones) of klass. */
138
+
139
+ st.methods = function(klass) {
140
+ var methods = {};
141
+ for(var i in klass.fn.prototype.methods) {
142
+ methods[i] = klass.fn.prototype.methods[i]
143
+ }
144
+ for(var i in klass.fn.prototype.inheritedMethods) {
145
+ methods[i] = klass.fn.prototype.inheritedMethods[i]
146
+ }
147
+ return methods;
148
+ }
149
+
150
+ /* Answer the direct subclasses of klass. */
151
+
152
+ st.subclasses = function(klass) {
153
+ var subclasses = [];
154
+ var classes = st.classes();
155
+ for(var i in classes) {
156
+ if(classes[i].fn) {
157
+ //Metaclasses
158
+ if(classes[i].klass && classes[i].klass.superclass === klass) {
159
+ subclasses.push(classes[i].klass);
160
+ }
161
+ //Classes
162
+ if(classes[i].superclass === klass) {
163
+ subclasses.push(classes[i]);
164
+ }
165
+ }
166
+ }
167
+ return subclasses;
168
+ };
169
+
170
+ /* Create a new class wrapping a JavaScript constructor, and add it to the
171
+ global smalltalk object. */
172
+
173
+ st.mapClassName = function(className, category, fn, superclass) {
174
+ st[className] = klass({
175
+ className: className,
176
+ category: category,
177
+ superclass: superclass,
178
+ fn: fn
179
+ });
180
+ };
181
+
182
+ /* Add a class to the smalltalk object, creating a new one if needed. */
183
+
184
+ st.addClass = function(className, superclass, iVarNames, category) {
185
+ if(st[className]) {
186
+ st[className].superclass = superclass;
187
+ st[className].iVarNames = iVarNames;
188
+ st[className].category = category || st[className].category;
189
+ } else {
190
+ st[className] = klass({
191
+ className: className,
192
+ iVarNames: iVarNames,
193
+ superclass: superclass
194
+ });
195
+ st[className].category = category || '';
196
+ }
197
+ };
198
+
199
+ /* Add a method to a class */
200
+
201
+ st.addMethod = function(jsSelector, method, klass) {
202
+ klass.fn.prototype[jsSelector] = method.fn;
203
+ klass.fn.prototype.methods[method.selector] = method;
204
+ method.methodClass = klass;
205
+ method.jsSelector = jsSelector;
206
+ };
207
+
208
+ /* Handles Smalltalk message send. Automatically converts undefined to the nil object.
209
+ If the receiver does not understand the selector, call its #doesNotUnderstand: method */
210
+
211
+ sendWithoutContext = function(receiver, selector, args, klass) {
212
+ if(typeof receiver === "undefined") {
213
+ receiver = nil;
214
+ }
215
+ if(!klass && receiver.klass && receiver[selector]) {
216
+ return receiver[selector].apply(receiver, args);
217
+ } else if(klass && klass.fn.prototype[selector]) {
218
+ return klass.fn.prototype[selector].apply(receiver, args)
219
+ }
220
+ return messageNotUnderstood(receiver, selector, args);
221
+ };
222
+
223
+
224
+ /* Handles unhandled errors during message sends */
225
+
226
+ sendWithContext = function(receiver, selector, args, klass) {
227
+ if(thisContext) {
228
+ return withContextSend(receiver, selector, args, klass);
229
+ } else {
230
+ try {return withContextSend(receiver, selector, args, klass)}
231
+ catch(error) {
232
+ // Reset the context stack in any case
233
+ thisContext = undefined;
234
+ if(error.smalltalkError) {
235
+ handleError(error);
236
+ } else {
237
+ throw(error);
238
+ }
239
+ }
240
+ }
241
+ };
242
+
243
+ /* Same as sendWithoutContext but creates a methodContext. */
244
+
245
+ withContextSend = function(receiver, selector, args, klass) {
246
+ var call, context;
247
+ if(typeof receiver === "undefined") {
248
+ receiver = nil;
249
+ }
250
+ if(!klass && receiver.klass && receiver[selector]) {
251
+ context = pushContext(receiver, selector, args);
252
+ call = receiver[selector].apply(receiver, args);
253
+ popContext(context);
254
+ return call;
255
+ } else if(klass && klass.fn.prototype[selector]) {
256
+ context = pushContext(receiver, selector, args);
257
+ call = klass.fn.prototype[selector].apply(receiver, args);
258
+ popContext(context);
259
+ return call;
260
+ }
261
+ return messageNotUnderstood(receiver, selector, args);
262
+ };
263
+
264
+ /* Handles Smalltalk errors. Triggers the registered ErrorHandler
265
+ (See the Smalltalk class ErrorHandler and its subclasses */
266
+
267
+ function handleError(error) {
268
+ thisContext = undefined;
269
+ smalltalk.ErrorHandler._current()._handleError_(error);
270
+ }
271
+
272
+ /* Handles #dnu: *and* JavaScript method calls.
273
+ if the receiver has no klass, we consider it a JS object (outside of the
274
+ Jtalk system). Else assume that the receiver understands #doesNotUnderstand: */
275
+
276
+ function messageNotUnderstood(receiver, selector, args) {
277
+ /* Handles JS method calls. */
278
+ if(receiver.klass === undefined || receiver.allowJavaScriptCalls) {
279
+ return callJavaScriptMethod(receiver, selector, args);
280
+ }
281
+
282
+ /* Handles not understood messages. Also see the Jtalk counter-part
283
+ Object>>doesNotUnderstand: */
284
+
285
+ return receiver._doesNotUnderstand_(
286
+ st.Message._new()
287
+ ._selector_(st.convertSelector(selector))
288
+ ._arguments_(args)
289
+ );
290
+ };
291
+
292
+ function callJavaScriptMethod(receiver, selector, args) {
293
+ /* Call a method of a JS object, or answer a property.
294
+
295
+ Converts keyword-based selectors by using the first
296
+ keyword only, but keeping all message arguments.
297
+
298
+ Example:
299
+ "self do: aBlock with: anObject" -> "self.do(aBlock, anObject)" */
300
+
301
+ var jsSelector = selector
302
+ .replace(/^_/, '')
303
+ .replace(/_.*/g, '');
304
+ var jsProperty = receiver[jsSelector];
305
+ if(typeof jsProperty === "function") {
306
+ return jsProperty.apply(receiver, args);
307
+ } else if(jsProperty !== undefined) {
308
+ if(args[0]) {
309
+ receiver[jsSelector] = args[0];
310
+ return nil;
311
+ } else {
312
+ return jsProperty
313
+ }
314
+ }
315
+ smalltalk.Error._signal_(receiver + ' is not a Jtalk object and "' + jsSelector + '" is undefined')
316
+ };
317
+
318
+
319
+ /* Handle thisContext pseudo variable */
320
+
321
+ pushContext = function(receiver, selector, temps) {
322
+ if(thisContext) {
323
+ return thisContext = thisContext.newContext({receiver: receiver, selector: selector, temps: temps});
324
+ } else {
325
+ return thisContext = new SmalltalkMethodContext({receiver: receiver, selector: selector, temps: temps});
326
+ }
327
+ };
328
+
329
+ popContext = function(context) {
330
+ if(context) {
331
+ context.removeYourself();
332
+ }
333
+ };
334
+
335
+ /* Convert a string to a valid smalltalk selector.
336
+ if you modify the following functions, also change String>>asSelector
337
+ accordingly */
338
+
339
+ st.convertSelector = function(selector) {
340
+ if(selector.match(/__/)) {
341
+ return convertBinarySelector(selector);
342
+ } else {
343
+ return convertKeywordSelector(selector);
344
+ }
345
+ };
346
+
347
+ function convertKeywordSelector(selector) {
348
+ return selector.replace(/^_/, '').replace(/_/g, ':');
349
+ };
350
+
351
+ function convertBinarySelector(selector) {
352
+ return selector
353
+ .replace(/^_/, '')
354
+ .replace(/_plus/, '+')
355
+ .replace(/_minus/, '-')
356
+ .replace(/_star/, '*')
357
+ .replace(/_slash/, '/')
358
+ .replace(/_gt/, '>')
359
+ .replace(/_lt/, '<')
360
+ .replace(/_eq/, '=')
361
+ .replace(/_comma/, ',')
362
+ .replace(/_at/, '@')
363
+ };
364
+
365
+ /* Converts a JavaScript object to valid Smalltalk Object */
366
+ st.readJSObject = function(js) {
367
+ var object = js;
368
+ var readObject = (js.constructor === Object);
369
+ var readArray = (js.constructor === Array);
370
+
371
+ if(readObject) {
372
+ object = smalltalk.Dictionary._new();
373
+ }
374
+ for(var i in js) {
375
+ if(readObject) {
376
+ object._at_put_(i, st.readJSObject(js[i]));
377
+ }
378
+ if(readArray) {
379
+ object[i] = st.readJSObject(js[i]);
380
+ }
381
+ }
382
+ return object;
383
+ };
384
+
385
+ /* Toggle deployment mode (no context will be handled during message send */
386
+ st.setDeploymentMode = function() {
387
+ st.send = sendWithoutContext;
388
+ };
389
+
390
+ st.setDevelopmentMode = function() {
391
+ st.send = sendWithContext;
392
+ }
393
+
394
+ /* Set development mode by default */
395
+ st.setDevelopmentMode();
396
+ }
397
+
398
+ function SmalltalkMethodContext(spec) {
399
+ var that = this;
400
+ spec = spec || {};
401
+ that.homeContext = spec.homeContext;
402
+ that.selector = spec.selector;
403
+ that.receiver = spec.receiver;
404
+ that.temps = spec.temps || {};
405
+
406
+ that.newContext = function(spec) {
407
+ spec = spec || {};
408
+ return new SmalltalkMethodContext({homeContext: that, receiver: spec.receiver, selector: spec.selector, temps: spec.temps});
409
+ }
410
+
411
+ that.removeYourself = function() {
412
+ thisContext = that.homeContext;
413
+ }
414
+ }
415
+
416
+ /* Global Smalltalk objects. nil and thisContext shouldn't be globals. */
417
+
418
+ var nil = new SmalltalkNil();
419
+ var smalltalk = new Smalltalk();
420
+ var thisContext = undefined;
421
+
422
+
423
+ /* Utilities */
424
+
425
+ Array.prototype.remove = function(s){
426
+ var index = this.indexOf(s);
427
+ if(this.indexOf(s) != -1)this.splice(index, 1);
428
+ }
429
+
430
+ if(this.jQuery) {
431
+ this.jQuery.allowJavaScriptCalls = true;
432
+ }
433
+
434
+ /****************************************************************************************/
435
+
436
+
437
+ /* Base classes mapping. If you edit this part, do not forget to set the superclass of the
438
+ object metaclass to Class after the definition of Object */
439
+
440
+ smalltalk.mapClassName("Object", "Kernel", SmalltalkObject);
441
+ smalltalk.mapClassName("Smalltalk", "Kernel", Smalltalk, smalltalk.Object);
442
+ smalltalk.mapClassName("Behavior", "Kernel", SmalltalkBehavior, smalltalk.Object);
443
+ smalltalk.mapClassName("Class", "Kernel", SmalltalkClass, smalltalk.Behavior);
444
+ smalltalk.mapClassName("Metaclass", "Kernel", SmalltalkMetaclass, smalltalk.Behavior);
445
+ smalltalk.mapClassName("CompiledMethod", "Kernel", SmalltalkMethod, smalltalk.Object);
446
+
447
+ smalltalk.Object.klass.superclass = smalltalk.Class
448
+
449
+ smalltalk.mapClassName("Number", "Kernel", Number, smalltalk.Object);
450
+ smalltalk.mapClassName("BlockClosure", "Kernel", Function, smalltalk.Object);
451
+ smalltalk.mapClassName("Boolean", "Kernel", Boolean, smalltalk.Object);
452
+ smalltalk.mapClassName("Date", "Kernel", Date, smalltalk.Object);
453
+ smalltalk.mapClassName("UndefinedObject", "Kernel", SmalltalkNil, smalltalk.Object);
454
+
455
+ smalltalk.mapClassName("Collection", "Kernel", null, smalltalk.Object);
456
+ smalltalk.mapClassName("SequenceableCollection", "Kernel", null, smalltalk.Collection);
457
+ smalltalk.mapClassName("String", "Kernel", String, smalltalk.SequenceableCollection);
458
+ smalltalk.mapClassName("Array", "Kernel", Array, smalltalk.SequenceableCollection);
459
+ smalltalk.mapClassName("RegularExpression", "Kernel", RegExp, smalltalk.String);
460
+
461
+ smalltalk.mapClassName("Error", "Kernel", Error, smalltalk.Object);
462
+ smalltalk.mapClassName("MethodContext", "Kernel", SmalltalkMethodContext, smalltalk.Object);
463
+
464
+ if(this.CanvasRenderingContext2D) {
465
+ smalltalk.mapClassName("CanvasRenderingContext", "Canvas", CanvasRenderingContext2D, smalltalk.Object);
466
+ }