resin 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/amber/bin/amberc +4 -3
  2. data/amber/js/IDE.deploy.js +147 -45
  3. data/amber/js/IDE.js +155 -53
  4. data/amber/js/Kernel-Classes.deploy.js +20 -14
  5. data/amber/js/Kernel-Classes.js +29 -18
  6. data/amber/js/Kernel-Collections.deploy.js +82 -0
  7. data/amber/js/Kernel-Collections.js +102 -0
  8. data/amber/js/Kernel-Methods.deploy.js +374 -261
  9. data/amber/js/Kernel-Methods.js +417 -269
  10. data/amber/js/Kernel-Objects.deploy.js +90 -28
  11. data/amber/js/Kernel-Objects.js +121 -34
  12. data/amber/js/Kernel-Tests.deploy.js +35 -0
  13. data/amber/js/Kernel-Tests.js +45 -0
  14. data/amber/js/SUnit.deploy.js +175 -17
  15. data/amber/js/SUnit.js +237 -24
  16. data/amber/js/amber.js +2 -1
  17. data/amber/js/boot.js +74 -18
  18. data/amber/js/lib/es5-shim-2.0.2/CHANGES +93 -0
  19. data/amber/js/lib/es5-shim-2.0.2/CONTRIBUTORS.md +25 -0
  20. data/amber/js/lib/es5-shim-2.0.2/LICENSE +19 -0
  21. data/amber/js/lib/es5-shim-2.0.2/README.md +161 -0
  22. data/amber/js/lib/es5-shim-2.0.2/es5-sham.js +348 -0
  23. data/amber/js/lib/es5-shim-2.0.2/es5-sham.min.js +6 -0
  24. data/amber/js/lib/es5-shim-2.0.2/es5-shim.js +963 -0
  25. data/amber/js/lib/es5-shim-2.0.2/es5-shim.min.js +16 -0
  26. data/amber/js/lib/es5-shim-2.0.2/minify +2 -0
  27. data/amber/js/lib/es5-shim-2.0.2/package.json +31 -0
  28. data/amber/js/lib/es5-shim-2.0.2/tests/helpers/h-kill.js +59 -0
  29. data/amber/js/lib/es5-shim-2.0.2/tests/helpers/h-matchers.js +34 -0
  30. data/amber/js/lib/es5-shim-2.0.2/tests/helpers/h.js +3 -0
  31. data/amber/js/lib/es5-shim-2.0.2/tests/index.html +62 -0
  32. data/amber/js/lib/es5-shim-2.0.2/tests/lib/jasmine-html.js +190 -0
  33. data/amber/js/lib/es5-shim-2.0.2/tests/lib/jasmine.css +166 -0
  34. data/amber/js/lib/es5-shim-2.0.2/tests/lib/jasmine.js +2477 -0
  35. data/amber/js/lib/es5-shim-2.0.2/tests/lib/jasmine_favicon.png +0 -0
  36. data/amber/js/lib/es5-shim-2.0.2/tests/lib/json2.js +478 -0
  37. data/amber/js/lib/es5-shim-2.0.2/tests/spec/s-array.js +1138 -0
  38. data/amber/js/lib/es5-shim-2.0.2/tests/spec/s-date.js +117 -0
  39. data/amber/js/lib/es5-shim-2.0.2/tests/spec/s-function.js +147 -0
  40. data/amber/js/lib/es5-shim-2.0.2/tests/spec/s-object.js +84 -0
  41. data/amber/js/lib/es5-shim-2.0.2/tests/spec/s-string.js +24 -0
  42. data/amber/st/IDE.st +15 -16
  43. data/amber/st/Kernel-Classes.st +9 -9
  44. data/amber/st/Kernel-Collections.st +37 -0
  45. data/amber/st/Kernel-Methods.st +63 -8
  46. data/amber/st/Kernel-Objects.st +34 -7
  47. data/amber/st/Kernel-Tests.st +10 -0
  48. data/amber/st/SUnit.st +86 -9
  49. metadata +44 -21
  50. data/amber/js/compat.js +0 -22
@@ -0,0 +1,117 @@
1
+ describe('Date', function () {
2
+
3
+ describe('now', function () {
4
+ it('should be the current time', function () {
5
+ expect(Date.now() === new Date().getTime()).toBe(true);
6
+ });
7
+ });
8
+
9
+ describe("parse", function () {
10
+ // TODO: Write the rest of the test.
11
+
12
+ it('should support extended years', function () {
13
+
14
+ expect(Date.parse('0001-01-01T00:00:00Z')).toBe(-62135596800000);
15
+ expect(Date.parse('+275760-09-13T00:00:00.000Z')).toBe(8.64e15);
16
+ expect(Date.parse('+033658-09-27T01:46:40.000Z')).toBe(1e15);
17
+ expect(Date.parse('-000001-01-01T00:00:00Z')).toBe(-62198755200000);
18
+ expect(Date.parse('+002009-12-15T00:00:00Z')).toBe(1260835200000);
19
+
20
+ });
21
+
22
+ it('should work', function () {
23
+ //Chrome 19 Opera 12 Firefox 11 IE 9 Safari 5.1.1
24
+ expect(Date.parse("2012-11-31T23:59:59.000Z")).toBeFalsy(); //1354406399000 NaN NaN 1354406399000 NaN
25
+ expect(Date.parse("2012-12-31T23:59:59.000Z")).toBe(1356998399000); //1356998399000 1356998399000 1356998399000 1356998399000 1356998399000
26
+ expect(Date.parse("2012-12-31T23:59:60.000Z")).toBeFalsy(); //NaN NaN NaN NaN 1356998400000
27
+ expect(Date.parse("2012-04-04T05:02:02.170Z")).toBe(1333515722170); //1333515722170 1333515722170 1333515722170 1333515722170 1333515722170
28
+ expect(Date.parse("2012-04-04T24:00:00.000Z")).toBe(1333584000000); //NaN 1333584000000 1333584000000 1333584000000 1333584000000
29
+ expect(Date.parse("2012-04-04T24:00:00.500Z")).toBeFalsy(); //NaN NaN 1333584000500 1333584000500 NaN
30
+ expect(Date.parse("2012-12-31T10:08:60.000Z")).toBeFalsy(); //NaN NaN NaN NaN 1356948540000
31
+ expect(Date.parse("2012-13-01T12:00:00.000Z")).toBeFalsy(); //NaN NaN NaN NaN NaN
32
+ expect(Date.parse("2012-12-32T12:00:00.000Z")).toBeFalsy(); //NaN NaN NaN NaN NaN
33
+ expect(Date.parse("2012-12-31T25:00:00.000Z")).toBeFalsy(); //NaN NaN NaN NaN NaN
34
+ expect(Date.parse("2012-12-31T24:01:00.000Z")).toBeFalsy(); //NaN NaN NaN 1356998460000 NaN
35
+ expect(Date.parse("2012-12-31T12:60:00.000Z")).toBeFalsy(); //NaN NaN NaN NaN NaN
36
+ expect(Date.parse("2012-12-31T12:00:60.000Z")).toBeFalsy(); //NaN NaN NaN NaN 1356955260000
37
+ expect(Date.parse("2012-00-31T23:59:59.000Z")).toBeFalsy(); //NaN NaN NaN NaN NaN
38
+ expect(Date.parse("2012-12-00T23:59:59.000Z")).toBeFalsy(); //NaN NaN NaN NaN NaN
39
+ expect(Date.parse("2012-02-29T12:00:00.000Z")).toBe(1330516800000); //1330516800000 1330516800000 1330516800000 1330516800000 1330516800000
40
+ expect(Date.parse("2011-02-29T12:00:00.000Z")).toBeFalsy(); //1298980800000 NaN NaN 1298980800000 NaN
41
+ expect(Date.parse("2011-03-01T12:00:00.000Z")).toBe(1298980800000); //1298980800000 1298980800000 1298980800000 1298980800000 1298980800000
42
+
43
+ // extended years:
44
+ expect(Date.parse("0000-01-01T00:00:00.000Z")).toBe(-621672192e5); //-621672192e5 -621672192e5 -621672192e5 -621672192e5 -621672192e5
45
+ expect(Date.parse("+275760-09-13T00:00:00.000Z")).toBe(8.64e15); //8.64e15 NaN 8.64e15 8.64e15 8.64e15
46
+ expect(Date.parse("-271821-04-20T00:00:00.000Z")).toBe(-8.64e15); //-8.64e15 NaN -8.64e15 -8.64e15 -8.6400000864e15
47
+ expect(Date.parse("+275760-09-13T00:00:00.001Z")).toBeFalsy(); //NaN NaN NaN 8.64e15 + 1 8.64e15 + 1
48
+ expect(Date.parse("-271821-04-19T23:59:59.999Z")).toBeFalsy(); //NaN NaN NaN -8.64e15 - 1 -8.6400000864e15 - 1
49
+
50
+ // https://github.com/kriskowal/es5-shim/issues/80 Safari bug with leap day
51
+ expect(Date.parse("2034-03-01T00:00:00.000Z") -
52
+ Date.parse("2034-02-27T23:59:59.999Z")).toBe(86400001); //86400001 86400001 86400001 86400001 1
53
+
54
+ // Time Zone Offset
55
+ expect(Date.parse("2012-01-29T12:00:00.000+01:00")).toBe(132783480e4);//132783480e4 132783480e4 132783480e4 132783480e4 132783480e4
56
+ expect(Date.parse("2012-01-29T12:00:00.000-00:00")).toBe(132783840e4);//132783840e4 132783840e4 132783840e4 132783840e4 132783840e4
57
+ expect(Date.parse("2012-01-29T12:00:00.000+00:00")).toBe(132783840e4);//132783840e4 132783840e4 132783840e4 132783840e4 132783840e4
58
+ expect(Date.parse("2012-01-29T12:00:00.000+23:59")).toBe(132775206e4);//132775206e4 132775206e4 132775206e4 132775206e4 132775206e4
59
+ expect(Date.parse("2012-01-29T12:00:00.000-23:59")).toBe(132792474e4);//132792474e4 132792474e4 132792474e4 132792474e4 132792474e4
60
+ expect(Date.parse("2012-01-29T12:00:00.000+24:00")).toBeFalsy(); //NaN 1327752e6 NaN 1327752000000 1327752000000
61
+ expect(Date.parse("2012-01-29T12:00:00.000+24:01")).toBeFalsy(); //NaN NaN NaN 1327751940000 1327751940000
62
+ expect(Date.parse("2012-01-29T12:00:00.000+24:59")).toBeFalsy(); //NaN NaN NaN 1327748460000 1327748460000
63
+ expect(Date.parse("2012-01-29T12:00:00.000+25:00")).toBeFalsy(); //NaN NaN NaN NaN NaN
64
+ expect(Date.parse("2012-01-29T12:00:00.000+00:60")).toBeFalsy(); //NaN NaN NaN NaN NaN
65
+ expect(Date.parse("-271821-04-20T00:00:00.000+00:01")).toBeFalsy(); //NaN NaN NaN -864000000006e4 -864000008646e4
66
+ expect(Date.parse("-271821-04-20T00:01:00.000+00:01")).toBe(-8.64e15);//-8.64e15 NaN -8.64e15 -8.64e15 -864000008640e4
67
+
68
+ // When time zone is missed, local offset should be used (ES 5.1 bug)
69
+ // see https://bugs.ecmascript.org/show_bug.cgi?id=112
70
+ var tzOffset = Number(new Date(1970, 0));
71
+ // same as (new Date().getTimezoneOffset() * 60000)
72
+ expect(Date.parse('1970-01-01T00:00:00')).toBe(tzOffset); //tzOffset 0 0 0 NaN
73
+ });
74
+ });
75
+
76
+ describe("toISOString", function () {
77
+ // TODO: write the rest of the test.
78
+
79
+ it('should support extended years', function () {
80
+ expect(new Date(-62198755200000).toISOString().indexOf('-000001-01-01')).toBe(0);
81
+ expect(new Date(8.64e15).toISOString().indexOf('+275760-09-13')).toBe(0);
82
+ });
83
+
84
+ it('should return correct dates', function () {
85
+ expect(new Date(-1).toISOString()).toBe('1969-12-31T23:59:59.999Z');// Safari 5.1.5 "1969-12-31T23:59:59.-01Z"
86
+ expect(new Date(-3509827334573292).toISOString()).toBe('-109252-01-01T10:37:06.708Z'); // Opera 11.61/Opera 12 bug with Date#getUTCMonth
87
+ });
88
+
89
+ });
90
+
91
+ describe("toJSON", function () {
92
+
93
+ // Opera 11.6x/12 bug
94
+ it('should call toISOString', function () {
95
+ var date = new Date(0);
96
+ date.toISOString = function () {
97
+ return 1;
98
+ };
99
+ expect(date.toJSON()).toBe(1);
100
+ });
101
+
102
+ it('should return null for not finite dates', function () {
103
+ var date = new Date(NaN),
104
+ json;
105
+ try {
106
+ json = date.toJSON();
107
+ } catch (e) {}
108
+ expect(json).toBe(null);
109
+ });
110
+
111
+ it('should return the isoString when stringified', function () {
112
+ var date = new Date();
113
+ expect(JSON.stringify(date.toISOString())).toBe(JSON.stringify(date));
114
+ })
115
+ });
116
+
117
+ });
@@ -0,0 +1,147 @@
1
+
2
+ describe('Function', function() {
3
+ "use strict";
4
+ describe('bind', function() {
5
+ var actual, expected,
6
+ testSubject;
7
+
8
+ testSubject = {
9
+ push: function(o) {
10
+ this.a.push(o);
11
+ }
12
+ };
13
+
14
+ function func() {
15
+ Array.prototype.forEach.call(arguments, function(a) {
16
+ this.push(a);
17
+ }, this);
18
+ return this;
19
+ };
20
+
21
+ beforeEach(function() {
22
+ actual = [];
23
+ testSubject.a = [];
24
+ });
25
+
26
+ it('binds properly without a context', function() {
27
+ var context;
28
+ testSubject.func = function() {
29
+ context = this;
30
+ }.bind();
31
+ testSubject.func();
32
+ expect(context).toBe(function() {return this}.call());
33
+ });
34
+ it('binds properly without a context, and still supplies bound arguments', function() {
35
+ var a, context;
36
+ testSubject.func = function() {
37
+ a = Array.prototype.slice.call(arguments);
38
+ context = this;
39
+ }.bind(undefined, 1,2,3);
40
+ testSubject.func(1,2,3);
41
+ expect(a).toEqual([1,2,3,1,2,3]);
42
+ expect(context).toBe(function() {return this}.call());
43
+ });
44
+ it('binds a context properly', function() {
45
+ testSubject.func = func.bind(actual);
46
+ testSubject.func(1,2,3);
47
+ expect(actual).toEqual([1,2,3]);
48
+ expect(testSubject.a).toEqual([]);
49
+ });
50
+ it('binds a context and supplies bound arguments', function() {
51
+ testSubject.func = func.bind(actual, 1,2,3);
52
+ testSubject.func(4,5,6);
53
+ expect(actual).toEqual([1,2,3,4,5,6]);
54
+ expect(testSubject.a).toEqual([]);
55
+ });
56
+
57
+ it('returns properly without binding a context', function() {
58
+ testSubject.func = function() {
59
+ return this;
60
+ }.bind();
61
+ var context = testSubject.func();
62
+ expect(context).toBe(function() {return this}.call());
63
+ });
64
+ it('returns properly without binding a context, and still supplies bound arguments', function() {
65
+ var context;
66
+ testSubject.func = function() {
67
+ context = this;
68
+ return Array.prototype.slice.call(arguments);
69
+ }.bind(undefined, 1,2,3);
70
+ actual = testSubject.func(1,2,3);
71
+ expect(context).toBe(function() {return this}.call());
72
+ expect(actual).toEqual([1,2,3,1,2,3]);
73
+ });
74
+ it('returns properly while binding a context properly', function() {
75
+ var ret;
76
+ testSubject.func = func.bind(actual);
77
+ ret = testSubject.func(1,2,3);
78
+ expect(ret).toBe(actual);
79
+ expect(ret).not.toBe(testSubject);
80
+ });
81
+ it('returns properly while binding a context and supplies bound arguments', function() {
82
+ var ret;
83
+ testSubject.func = func.bind(actual, 1,2,3);
84
+ ret = testSubject.func(4,5,6);
85
+ expect(ret).toBe(actual);
86
+ expect(ret).not.toBe(testSubject);
87
+ });
88
+ it('passes the correct arguments as a constructor', function() {
89
+ var ret, expected = { name: "Correct" };
90
+ testSubject.func = function(arg) {
91
+ return arg;
92
+ }.bind({ name: "Incorrect" });
93
+ ret = new testSubject.func(expected);
94
+ expect(ret).toBe(expected);
95
+ });
96
+ it('returns the return value of the bound function when called as a constructor', function () {
97
+ var oracle = [1, 2, 3];
98
+ var subject = function () {
99
+ return oracle;
100
+ }.bind(null);
101
+ var result = new subject;
102
+ expect(result).toBe(oracle);
103
+ });
104
+ it('returns the correct value if constructor returns primitive', function() {
105
+ var oracle = [1, 2, 3];
106
+ var subject = function () {
107
+ return oracle;
108
+ }.bind(null);
109
+ var result = new subject;
110
+ expect(result).toBe(oracle);
111
+
112
+ oracle = {};
113
+ result = new subject;
114
+ expect(result).toBe(oracle);
115
+
116
+ oracle = function(){};
117
+ result = new subject;
118
+ expect(result).toBe(oracle);
119
+
120
+ oracle = "asdf";
121
+ result = new subject;
122
+ expect(result).not.toBe(oracle);
123
+
124
+ oracle = null;
125
+ result = new subject;
126
+ expect(result).not.toBe(oracle);
127
+
128
+ oracle = true;
129
+ result = new subject;
130
+ expect(result).not.toBe(oracle);
131
+
132
+ oracle = 1;
133
+ result = new subject;
134
+ expect(result).not.toBe(oracle);
135
+ });
136
+ it('returns the value that instance of original "class" when called as a constructor', function() {
137
+ var classA = function(x) {
138
+ this.name = x || "A";
139
+ }
140
+ var classB = classA.bind(null, "B");
141
+
142
+ var result = new classB;
143
+ expect(result instanceof classA).toBe(true);
144
+ expect(result instanceof classB).toBe(true);
145
+ });
146
+ });
147
+ });
@@ -0,0 +1,84 @@
1
+ describe('Object', function () {
2
+ "use strict";
3
+
4
+ describe("Object.keys", function () {
5
+ var obj = {
6
+ "str": "boz",
7
+ "obj": { },
8
+ "arr": [],
9
+ "bool": true,
10
+ "num": 42,
11
+ "null": null,
12
+ "undefined": undefined
13
+ };
14
+
15
+ var loopedValues = [];
16
+ for (var k in obj) {
17
+ loopedValues.push(k);
18
+ }
19
+
20
+ var keys = Object.keys(obj);
21
+ it('should have correct length', function () {
22
+ expect(keys.length).toBe(7);
23
+ });
24
+
25
+ it('should return an Array', function () {
26
+ expect(Array.isArray(keys)).toBe(true);
27
+ });
28
+
29
+ it('should return names which are own properties', function () {
30
+ keys.forEach(function (name) {
31
+ expect(obj.hasOwnProperty(name)).toBe(true);
32
+ });
33
+ });
34
+
35
+ it('should return names which are enumerable', function () {
36
+ keys.forEach(function (name) {
37
+ expect(loopedValues.indexOf(name)).toNotBe(-1);
38
+ })
39
+ });
40
+
41
+ it('should throw error for non object', function () {
42
+ var e = {};
43
+ expect(function () {
44
+ try {
45
+ Object.keys(42)
46
+ } catch (err) {
47
+ throw e;
48
+ }
49
+ }).toThrow(e);
50
+ });
51
+ });
52
+
53
+ describe("Object.isExtensible", function () {
54
+ var obj = { };
55
+
56
+ it('should return true if object is extensible', function () {
57
+ expect(Object.isExtensible(obj)).toBe(true);
58
+ });
59
+
60
+ it('should return false if object is not extensible', function () {
61
+ expect(Object.isExtensible(Object.preventExtensions(obj))).toBe(false);
62
+ });
63
+
64
+ it('should return false if object is seal', function () {
65
+ expect(Object.isExtensible(Object.seal(obj))).toBe(false);
66
+ });
67
+
68
+ it('should return false if object is freeze', function () {
69
+ expect(Object.isExtensible(Object.freeze(obj))).toBe(false);
70
+ });
71
+
72
+ it('should throw error for non object', function () {
73
+ var e1 = {};
74
+ expect(function () {
75
+ try {
76
+ Object.isExtensible(42)
77
+ } catch (err) {
78
+ throw e1;
79
+ }
80
+ }).toThrow(e1);
81
+ });
82
+ });
83
+
84
+ });
@@ -0,0 +1,24 @@
1
+ describe('String', function() {
2
+ "use strict";
3
+ describe("trim", function() {
4
+ var test = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFFHello, World!\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF";
5
+
6
+ it('trims all ES5 whitespace', function() {
7
+ expect(test.trim()).toEqual("Hello, World!");
8
+ expect(test.trim().length).toEqual(13);
9
+ });
10
+ });
11
+
12
+ describe("split", function() {
13
+ var test = "ab";
14
+
15
+ it('If "separator" is undefined must return Array with one String - "this" string', function() {
16
+ expect(test.split()).toEqual([test]);
17
+ expect(test.split(void 0)).toEqual([test]);
18
+ });
19
+
20
+ it('If "separator" is undefined and "limit" set to 0 must return Array[]', function() {
21
+ expect(test.split(void 0, 0)).toEqual([]);
22
+ });
23
+ });
24
+ });
@@ -1226,7 +1226,8 @@ updateSourceAndButtons
1226
1226
  with: [ |option|
1227
1227
  html option
1228
1228
  with: 'References';
1229
- at: 'disabled' put: 'disabled'.
1229
+ at: 'disabled' put: 'disabled';
1230
+ at: 'selected' put: 'selected'.
1230
1231
  html option
1231
1232
  class: 'important';
1232
1233
  with: selectedMethod selector.
@@ -2052,23 +2053,21 @@ testCases
2052
2053
  !TestRunner methodsFor: 'actions'!
2053
2054
 
2054
2055
  performFailure: aTestCase
2055
- aTestCase setUp.
2056
- [ aTestCase perform: aTestCase selector ]
2057
- ensure: [ aTestCase tearDown ]
2056
+ aTestCase runCase
2058
2057
  !
2059
2058
 
2060
2059
  run: aCollection
2061
- result := TestResult new.
2062
- self
2063
- updateStatusDiv;
2064
- updateMethodsList.
2065
- self progressBar updatePercent: 0.
2066
- result total: aCollection size.
2067
- aCollection do: [:each |
2068
- [each runCaseFor: result.
2069
- self progressBar updatePercent: result runs / result total * 100.
2070
- self updateStatusDiv.
2071
- self updateMethodsList] valueWithTimeout: 100].
2060
+ | worker |
2061
+ worker := TestSuiteRunner on: aCollection.
2062
+ result := worker result.
2063
+ worker announcer on: ResultAnnouncement do: [:ann |
2064
+ ann result == result ifTrue: [
2065
+ self progressBar updatePercent: result runs / result total * 100.
2066
+ self updateStatusDiv.
2067
+ self updateMethodsList
2068
+ ]
2069
+ ].
2070
+ worker run
2072
2071
  !
2073
2072
 
2074
2073
  selectAllCategories
@@ -2124,7 +2123,7 @@ printFailures
2124
2123
  !
2125
2124
 
2126
2125
  printPasses
2127
- ^(self result total - self result errors size - self result failures size) asString , ' passes, '
2126
+ ^(self result runs - self result errors size - self result failures size) asString , ' passes, '
2128
2127
  !
2129
2128
 
2130
2129
  printTotal
@@ -106,13 +106,12 @@ name
106
106
  <return self.className || nil>
107
107
  !
108
108
 
109
+ organization
110
+ ^ self basicAt: 'organization'
111
+ !
112
+
109
113
  protocols
110
- | protocols |
111
- protocols := Array new.
112
- self methodDictionary do: [:each |
113
- (protocols includes: each category) ifFalse: [
114
- protocols add: each category]].
115
- ^protocols sort
114
+ ^ self organization elements sorted
116
115
  !
117
116
 
118
117
  protocolsDo: aBlock
@@ -180,9 +179,10 @@ compile: aString category: anotherString
180
179
  !
181
180
 
182
181
  removeCompiledMethod: aMethod
183
- <delete self.fn.prototype[aMethod.selector._asSelector()];
184
- delete self.fn.prototype.methods[aMethod.selector];
185
- smalltalk.init(self);>.
182
+ <
183
+ smalltalk.removeMethod(aMethod)
184
+ smalltalk.init(self);
185
+ >.
186
186
 
187
187
  SystemAnnouncer current
188
188
  announce: (MethodRemoved new