resin 0.3.0 → 0.3.1

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 (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