1
0
Prechádzať zdrojové kódy

Merge branch 'master' of https://github.com/NicolasPetton/amber

paul laptop 13 rokov pred
rodič
commit
68a87d2885

+ 125 - 100
js/Kernel-Collections.deploy.js

@@ -1,4 +1,86 @@
 smalltalk.addPackage('Kernel-Collections', {});
+smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel-Collections');
+smalltalk.addMethod(
+unescape('__eq'),
+smalltalk.method({
+selector: unescape('%3D'),
+fn: function (anAssociation) {
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(anAssociation, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_key", []), "__eq", [smalltalk.send(anAssociation, "_key", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_value", []), "__eq", [smalltalk.send(anAssociation, "_value", [])]);})]);})]);
+return self;}
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_key_'),
+smalltalk.method({
+selector: unescape('key%3A'),
+fn: function (aKey) {
+var self=this;
+(self['@key']=aKey);
+return self;}
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_key'),
+smalltalk.method({
+selector: unescape('key'),
+fn: function () {
+var self=this;
+return self['@key'];
+return self;}
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_value_'),
+smalltalk.method({
+selector: unescape('value%3A'),
+fn: function (aValue) {
+var self=this;
+(self['@value']=aValue);
+return self;}
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_value'),
+smalltalk.method({
+selector: unescape('value'),
+fn: function () {
+var self=this;
+return self['@value'];
+return self;}
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_storeOn_'),
+smalltalk.method({
+selector: unescape('storeOn%3A'),
+fn: function (aStream) {
+var self=this;
+smalltalk.send(self['@key'], "_storeOn_", [aStream]);
+smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]);
+smalltalk.send(self['@value'], "_storeOn_", [aStream]);
+return self;}
+}),
+smalltalk.Association);
+
+
+smalltalk.addMethod(
+unescape('_key_value_'),
+smalltalk.method({
+selector: unescape('key%3Avalue%3A'),
+fn: function (aKey, aValue) {
+var self=this;
+return (function($rec){smalltalk.send($rec, "_key_", [aKey]);smalltalk.send($rec, "_value_", [aValue]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;}
+}),
+smalltalk.Association.klass);
+
+
 smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections');
 smalltalk.addMethod(
 unescape('_collection'),
@@ -272,88 +354,6 @@ return self;}
 smalltalk.Stream.klass);
 
 
-smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel-Collections');
-smalltalk.addMethod(
-unescape('__eq'),
-smalltalk.method({
-selector: unescape('%3D'),
-fn: function (anAssociation) {
-var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(anAssociation, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_key", []), "__eq", [smalltalk.send(anAssociation, "_key", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_value", []), "__eq", [smalltalk.send(anAssociation, "_value", [])]);})]);})]);
-return self;}
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_key_'),
-smalltalk.method({
-selector: unescape('key%3A'),
-fn: function (aKey) {
-var self=this;
-(self['@key']=aKey);
-return self;}
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_key'),
-smalltalk.method({
-selector: unescape('key'),
-fn: function () {
-var self=this;
-return self['@key'];
-return self;}
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_value_'),
-smalltalk.method({
-selector: unescape('value%3A'),
-fn: function (aValue) {
-var self=this;
-(self['@value']=aValue);
-return self;}
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_value'),
-smalltalk.method({
-selector: unescape('value'),
-fn: function () {
-var self=this;
-return self['@value'];
-return self;}
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_storeOn_'),
-smalltalk.method({
-selector: unescape('storeOn%3A'),
-fn: function (aStream) {
-var self=this;
-smalltalk.send(self['@key'], "_storeOn_", [aStream]);
-smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]);
-smalltalk.send(self['@value'], "_storeOn_", [aStream]);
-return self;}
-}),
-smalltalk.Association);
-
-
-smalltalk.addMethod(
-unescape('_key_value_'),
-smalltalk.method({
-selector: unescape('key%3Avalue%3A'),
-fn: function (aKey, aValue) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_key_", [aKey]);smalltalk.send($rec, "_value_", [aValue]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
-return self;}
-}),
-smalltalk.Association.klass);
-
-
 smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel-Collections');
 smalltalk.addMethod(
 unescape('_compile_'),
@@ -756,23 +756,23 @@ return self;}
 smalltalk.Collection);
 
 smalltalk.addMethod(
-unescape('_asJSONString'),
+unescape('_asOrderedCollection'),
 smalltalk.method({
-selector: unescape('asJSONString'),
+selector: unescape('asOrderedCollection'),
 fn: function () {
 var self=this;
-return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_collect_", [(function(each){return smalltalk.send(each, "_asJSONString", []);})])]);
+return smalltalk.send(self, "_asArray", []);
 return self;}
 }),
 smalltalk.Collection);
 
 smalltalk.addMethod(
-unescape('_asOrderedCollection'),
+unescape('_asJSON'),
 smalltalk.method({
-selector: unescape('asOrderedCollection'),
-fn: function () {
+selector: unescape('asJSON'),
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_asArray", []);
+return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]);
 return self;}
 }),
 smalltalk.Collection);
@@ -1779,23 +1779,23 @@ return self;}
 smalltalk.String);
 
 smalltalk.addMethod(
-unescape('_asJSONString'),
+unescape('_asSymbol'),
 smalltalk.method({
-selector: unescape('asJSONString'),
+selector: unescape('asSymbol'),
 fn: function () {
 var self=this;
-return self;
+return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]);
 return self;}
 }),
 smalltalk.String);
 
 smalltalk.addMethod(
-unescape('_asSymbol'),
+unescape('_asJSON'),
 smalltalk.method({
-selector: unescape('asSymbol'),
-fn: function () {
+selector: unescape('asJSON'),
+fn: function (){
 var self=this;
-return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]);
+return self;
 return self;}
 }),
 smalltalk.String);
@@ -2083,6 +2083,17 @@ return self;}
 }),
 smalltalk.Symbol);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []);
+return self;}
+}),
+smalltalk.Symbol);
+
 
 smalltalk.addMethod(
 unescape('_lookup_'),
@@ -3144,6 +3155,20 @@ return self;}
 }),
 smalltalk.HashedCollection);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+fn: function (){
+var self=this;
+var c=nil;
+(c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", []));
+smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(c, "_at_put_", [key, smalltalk.send(value, "_asJSON", [])]);})]);
+return c;
+return self;}
+}),
+smalltalk.HashedCollection);
+
 
 smalltalk.addMethod(
 unescape('_fromPairs_'),
@@ -3281,12 +3306,12 @@ return self;}
 smalltalk.Dictionary);
 
 smalltalk.addMethod(
-unescape('_asJSONString'),
+unescape('_asJSON'),
 smalltalk.method({
-selector: unescape('asJSONString'),
-fn: function () {
+selector: unescape('asJSON'),
+fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSONString", []);
+return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []);
 return self;}
 }),
 smalltalk.Dictionary);

+ 183 - 148
js/Kernel-Collections.js

@@ -1,4 +1,121 @@
 smalltalk.addPackage('Kernel-Collections', {});
+smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel-Collections');
+smalltalk.addMethod(
+unescape('__eq'),
+smalltalk.method({
+selector: unescape('%3D'),
+category: 'comparing',
+fn: function (anAssociation) {
+var self=this;
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(anAssociation, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_key", []), "__eq", [smalltalk.send(anAssociation, "_key", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_value", []), "__eq", [smalltalk.send(anAssociation, "_value", [])]);})]);})]);
+return self;},
+args: ["anAssociation"],
+source: unescape('%3D%20anAssociation%0A%09%5Eself%20class%20%3D%20anAssociation%20class%20and%3A%20%5B%0A%09%20%20%20%20self%20key%20%3D%20anAssociation%20key%20and%3A%20%5B%0A%09%09self%20value%20%3D%20anAssociation%20value%5D%5D'),
+messageSends: ["and:", unescape("%3D"), "class", "key", "value"],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_key_'),
+smalltalk.method({
+selector: unescape('key%3A'),
+category: 'accessing',
+fn: function (aKey) {
+var self=this;
+(self['@key']=aKey);
+return self;},
+args: ["aKey"],
+source: unescape('key%3A%20aKey%0A%09key%20%3A%3D%20aKey'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_key'),
+smalltalk.method({
+selector: unescape('key'),
+category: 'accessing',
+fn: function () {
+var self=this;
+return self['@key'];
+return self;},
+args: [],
+source: unescape('key%0A%09%5Ekey'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_value_'),
+smalltalk.method({
+selector: unescape('value%3A'),
+category: 'accessing',
+fn: function (aValue) {
+var self=this;
+(self['@value']=aValue);
+return self;},
+args: ["aValue"],
+source: unescape('value%3A%20aValue%0A%09value%20%3A%3D%20aValue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_value'),
+smalltalk.method({
+selector: unescape('value'),
+category: 'accessing',
+fn: function () {
+var self=this;
+return self['@value'];
+return self;},
+args: [],
+source: unescape('value%0A%09%5Evalue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+smalltalk.addMethod(
+unescape('_storeOn_'),
+smalltalk.method({
+selector: unescape('storeOn%3A'),
+category: 'comparing',
+fn: function (aStream) {
+var self=this;
+smalltalk.send(self['@key'], "_storeOn_", [aStream]);
+smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]);
+smalltalk.send(self['@value'], "_storeOn_", [aStream]);
+return self;},
+args: ["aStream"],
+source: unescape('storeOn%3A%20aStream%0A%09%22Store%20in%20the%20format%20%28key-%3Evalue%29%22%0A%0A%09%22aStream%20nextPutAll%3A%20%27%28%27.%22%0A%09key%20storeOn%3A%20aStream.%0A%09aStream%20nextPutAll%3A%20%27-%3E%27.%0A%09value%20storeOn%3A%20aStream.%0A%09%22aStream%20nextPutAll%3A%20%27%29%27%22'),
+messageSends: ["storeOn:", "nextPutAll:"],
+referencedClasses: []
+}),
+smalltalk.Association);
+
+
+smalltalk.addMethod(
+unescape('_key_value_'),
+smalltalk.method({
+selector: unescape('key%3Avalue%3A'),
+category: 'instance creation',
+fn: function (aKey, aValue) {
+var self=this;
+return (function($rec){smalltalk.send($rec, "_key_", [aKey]);smalltalk.send($rec, "_value_", [aValue]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
+return self;},
+args: ["aKey", "aValue"],
+source: unescape('key%3A%20aKey%20value%3A%20aValue%0A%09%20%20%20%20%5Eself%20new%0A%09%09key%3A%20aKey%3B%0A%09%09value%3A%20aValue%3B%0A%09%09yourself'),
+messageSends: ["key:", "value:", "yourself", "new"],
+referencedClasses: []
+}),
+smalltalk.Association.klass);
+
+
 smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections');
 smalltalk.addMethod(
 unescape('_collection'),
@@ -392,123 +509,6 @@ referencedClasses: []
 smalltalk.Stream.klass);
 
 
-smalltalk.addClass('Association', smalltalk.Object, ['key', 'value'], 'Kernel-Collections');
-smalltalk.addMethod(
-unescape('__eq'),
-smalltalk.method({
-selector: unescape('%3D'),
-category: 'comparing',
-fn: function (anAssociation) {
-var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "__eq", [smalltalk.send(anAssociation, "_class", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(smalltalk.send(self, "_key", []), "__eq", [smalltalk.send(anAssociation, "_key", [])]), "_and_", [(function(){return smalltalk.send(smalltalk.send(self, "_value", []), "__eq", [smalltalk.send(anAssociation, "_value", [])]);})]);})]);
-return self;},
-args: ["anAssociation"],
-source: unescape('%3D%20anAssociation%0A%09%5Eself%20class%20%3D%20anAssociation%20class%20and%3A%20%5B%0A%09%20%20%20%20self%20key%20%3D%20anAssociation%20key%20and%3A%20%5B%0A%09%09self%20value%20%3D%20anAssociation%20value%5D%5D'),
-messageSends: ["and:", unescape("%3D"), "class", "key", "value"],
-referencedClasses: []
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_key_'),
-smalltalk.method({
-selector: unescape('key%3A'),
-category: 'accessing',
-fn: function (aKey) {
-var self=this;
-(self['@key']=aKey);
-return self;},
-args: ["aKey"],
-source: unescape('key%3A%20aKey%0A%09key%20%3A%3D%20aKey'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_key'),
-smalltalk.method({
-selector: unescape('key'),
-category: 'accessing',
-fn: function () {
-var self=this;
-return self['@key'];
-return self;},
-args: [],
-source: unescape('key%0A%09%5Ekey'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_value_'),
-smalltalk.method({
-selector: unescape('value%3A'),
-category: 'accessing',
-fn: function (aValue) {
-var self=this;
-(self['@value']=aValue);
-return self;},
-args: ["aValue"],
-source: unescape('value%3A%20aValue%0A%09value%20%3A%3D%20aValue'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_value'),
-smalltalk.method({
-selector: unescape('value'),
-category: 'accessing',
-fn: function () {
-var self=this;
-return self['@value'];
-return self;},
-args: [],
-source: unescape('value%0A%09%5Evalue'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.Association);
-
-smalltalk.addMethod(
-unescape('_storeOn_'),
-smalltalk.method({
-selector: unescape('storeOn%3A'),
-category: 'comparing',
-fn: function (aStream) {
-var self=this;
-smalltalk.send(self['@key'], "_storeOn_", [aStream]);
-smalltalk.send(aStream, "_nextPutAll_", [unescape("-%3E")]);
-smalltalk.send(self['@value'], "_storeOn_", [aStream]);
-return self;},
-args: ["aStream"],
-source: unescape('storeOn%3A%20aStream%0A%09%22Store%20in%20the%20format%20%28key-%3Evalue%29%22%0A%0A%09%22aStream%20nextPutAll%3A%20%27%28%27.%22%0A%09key%20storeOn%3A%20aStream.%0A%09aStream%20nextPutAll%3A%20%27-%3E%27.%0A%09value%20storeOn%3A%20aStream.%0A%09%22aStream%20nextPutAll%3A%20%27%29%27%22'),
-messageSends: ["storeOn:", "nextPutAll:"],
-referencedClasses: []
-}),
-smalltalk.Association);
-
-
-smalltalk.addMethod(
-unescape('_key_value_'),
-smalltalk.method({
-selector: unescape('key%3Avalue%3A'),
-category: 'instance creation',
-fn: function (aKey, aValue) {
-var self=this;
-return (function($rec){smalltalk.send($rec, "_key_", [aKey]);smalltalk.send($rec, "_value_", [aValue]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
-return self;},
-args: ["aKey", "aValue"],
-source: unescape('key%3A%20aKey%20value%3A%20aValue%0A%09%20%20%20%20%5Eself%20new%0A%09%09key%3A%20aKey%3B%0A%09%09value%3A%20aValue%3B%0A%09%09yourself'),
-messageSends: ["key:", "value:", "yourself", "new"],
-referencedClasses: []
-}),
-smalltalk.Association.klass);
-
-
 smalltalk.addClass('RegularExpression', smalltalk.Object, [], 'Kernel-Collections');
 smalltalk.addMethod(
 unescape('_compile_'),
@@ -1081,33 +1081,33 @@ referencedClasses: []
 smalltalk.Collection);
 
 smalltalk.addMethod(
-unescape('_asJSONString'),
+unescape('_asOrderedCollection'),
 smalltalk.method({
-selector: unescape('asJSONString'),
+selector: unescape('asOrderedCollection'),
 category: 'converting',
 fn: function () {
 var self=this;
-return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_collect_", [(function(each){return smalltalk.send(each, "_asJSONString", []);})])]);
+return smalltalk.send(self, "_asArray", []);
 return self;},
 args: [],
-source: unescape('asJSONString%0A%09%5EJSON%20stringify%3A%20%28self%20collect%3A%20%5B%3Aeach%20%7C%20each%20asJSONString%5D%29'),
-messageSends: ["stringify:", "collect:", "asJSONString"],
-referencedClasses: ["JSON"]
+source: unescape('asOrderedCollection%0A%09%5Eself%20asArray'),
+messageSends: ["asArray"],
+referencedClasses: []
 }),
 smalltalk.Collection);
 
 smalltalk.addMethod(
-unescape('_asOrderedCollection'),
+unescape('_asJSON'),
 smalltalk.method({
-selector: unescape('asOrderedCollection'),
+selector: unescape('asJSON'),
 category: 'converting',
-fn: function () {
+fn: function (){
 var self=this;
-return smalltalk.send(self, "_asArray", []);
+return smalltalk.send(smalltalk.send(self, "_asArray", []), "_collect_", [(function(each){return smalltalk.send(each, "_asJSON", []);})]);
 return self;},
 args: [],
-source: unescape('asOrderedCollection%0A%09%5Eself%20asArray'),
-messageSends: ["asArray"],
+source: unescape('asJSON%0A%09%5Eself%20asArray%20collect%3A%20%5B%3Aeach%20%7C%20each%20asJSON%5D'),
+messageSends: ["collect:", "asArray", "asJSON"],
 referencedClasses: []
 }),
 smalltalk.Collection);
@@ -2534,34 +2534,34 @@ referencedClasses: []
 smalltalk.String);
 
 smalltalk.addMethod(
-unescape('_asJSONString'),
+unescape('_asSymbol'),
 smalltalk.method({
-selector: unescape('asJSONString'),
+selector: unescape('asSymbol'),
 category: 'converting',
 fn: function () {
 var self=this;
-return self;
+return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]);
 return self;},
 args: [],
-source: unescape('asJSONString%0A%09%5Eself'),
-messageSends: [],
-referencedClasses: []
+source: unescape('asSymbol%0A%09%5ESymbol%20lookup%3A%20self'),
+messageSends: ["lookup:"],
+referencedClasses: ["Symbol"]
 }),
 smalltalk.String);
 
 smalltalk.addMethod(
-unescape('_asSymbol'),
+unescape('_asJSON'),
 smalltalk.method({
-selector: unescape('asSymbol'),
+selector: unescape('asJSON'),
 category: 'converting',
-fn: function () {
+fn: function (){
 var self=this;
-return smalltalk.send((smalltalk.Symbol || Symbol), "_lookup_", [self]);
+return self;
 return self;},
 args: [],
-source: unescape('asSymbol%0A%09%5ESymbol%20lookup%3A%20self'),
-messageSends: ["lookup:"],
-referencedClasses: ["Symbol"]
+source: unescape('asJSON%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
 }),
 smalltalk.String);
 
@@ -2973,6 +2973,22 @@ referencedClasses: []
 }),
 smalltalk.Symbol);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+category: 'converting',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_asString", []), "_asJSON", []);
+return self;},
+args: [],
+source: unescape('asJSON%0A%09%5Eself%20asString%20asJSON'),
+messageSends: ["asJSON", "asString"],
+referencedClasses: []
+}),
+smalltalk.Symbol);
+
 
 smalltalk.addMethod(
 unescape('_lookup_'),
@@ -4470,6 +4486,25 @@ referencedClasses: ["Dictionary"]
 }),
 smalltalk.HashedCollection);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+category: 'converting',
+fn: function (){
+var self=this;
+var c=nil;
+(c=smalltalk.send(smalltalk.send(self, "_class", []), "_new", []));
+smalltalk.send(self, "_keysAndValuesDo_", [(function(key, value){return smalltalk.send(c, "_at_put_", [key, smalltalk.send(value, "_asJSON", [])]);})]);
+return c;
+return self;},
+args: [],
+source: unescape('asJSON%0A%09%7C%20c%20%7C%0A%09c%20%3A%3D%20self%20class%20new.%0A%09self%20keysAndValuesDo%3A%20%5B%3Akey%20%3Avalue%20%7C%0A%09%09c%20at%3A%20key%20put%3A%20value%20asJSON%5D.%0A%09%5Ec'),
+messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "asJSON"],
+referencedClasses: []
+}),
+smalltalk.HashedCollection);
+
 
 smalltalk.addMethod(
 unescape('_fromPairs_'),
@@ -4652,17 +4687,17 @@ referencedClasses: ["HashedCollection"]
 smalltalk.Dictionary);
 
 smalltalk.addMethod(
-unescape('_asJSONString'),
+unescape('_asJSON'),
 smalltalk.method({
-selector: unescape('asJSONString'),
+selector: unescape('asJSON'),
 category: 'converting',
-fn: function () {
+fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSONString", []);
+return smalltalk.send(smalltalk.send(self, "_asHashedCollection", []), "_asJSON", []);
 return self;},
 args: [],
-source: unescape('asJSONString%0A%09%5Eself%20asHashedCollection%20asJSONString'),
-messageSends: ["asJSONString", "asHashedCollection"],
+source: unescape('asJSON%0A%09%5Eself%20asHashedCollection%20asJSON'),
+messageSends: ["asJSON", "asHashedCollection"],
 referencedClasses: []
 }),
 smalltalk.Dictionary);

+ 44 - 10
js/Kernel-Objects.deploy.js

@@ -528,11 +528,13 @@ smalltalk.addMethod(
 unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.JSON || JSON, "_parse_", [smalltalk.send(self, "_asJSONString", [])]);
-    return self;
-}
+fn: function (){
+var self=this;
+var variables=nil;
+(variables=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(smalltalk.send(self, "_instVarAt_", [each]), "_asJSON", [])]);})]);
+return variables;
+return self;}
 }),
 smalltalk.Object);
 
@@ -626,11 +628,10 @@ smalltalk.addMethod(
 unescape('_asJSONString'),
 smalltalk.method({
 selector: unescape('asJSONString'),
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.JSON || JSON, "_stringify_", [self]);
-    return self;
-}
+fn: function (){
+var self=this;
+return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_asJSON", [])]);
+return self;}
 }),
 smalltalk.Object);
 
@@ -1818,6 +1819,17 @@ fn: function () {
 }),
 smalltalk.Number);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+fn: function (){
+var self=this;
+return self;
+return self;}
+}),
+smalltalk.Number);
+
 
 smalltalk.addMethod(
 unescape('_pi'),
@@ -2009,6 +2021,17 @@ fn: function (aBoolean) {
 }),
 smalltalk.Boolean);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+fn: function (){
+var self=this;
+return self;
+return self;}
+}),
+smalltalk.Boolean);
+
 
 
 smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects');
@@ -2643,6 +2666,17 @@ fn: function (aString, aString2, aString3) {
 }),
 smalltalk.UndefinedObject);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+fn: function (){
+var self=this;
+return (typeof null == 'undefined' ? nil : null);
+return self;}
+}),
+smalltalk.UndefinedObject);
+
 
 smalltalk.addMethod(
 unescape('_new'),

+ 64 - 15
js/Kernel-Objects.js

@@ -740,15 +740,17 @@ unescape('_asJSON'),
 smalltalk.method({
 selector: unescape('asJSON'),
 category: 'converting',
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.JSON || JSON, "_parse_", [smalltalk.send(self, "_asJSONString", [])]);
-    return self;
-},
+fn: function (){
+var self=this;
+var variables=nil;
+(variables=smalltalk.send((smalltalk.HashedCollection || HashedCollection), "_new", []));
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_allInstanceVariableNames", []), "_do_", [(function(each){return smalltalk.send(variables, "_at_put_", [each, smalltalk.send(smalltalk.send(self, "_instVarAt_", [each]), "_asJSON", [])]);})]);
+return variables;
+return self;},
 args: [],
-source: unescape('asJSON%0A%09%5EJSON%20parse%3A%20self%20asJSONString'),
-messageSends: ["parse:", "asJSONString"],
-referencedClasses: ["JSON"]
+source: unescape('asJSON%0A%09%7C%20variables%20%7C%0A%09variables%20%3A%3D%20HashedCollection%20new.%0A%09self%20class%20allInstanceVariableNames%20do%3A%20%5B%3Aeach%20%7C%0A%09%09variables%20at%3A%20each%20put%3A%20%28self%20instVarAt%3A%20each%29%20asJSON%5D.%0A%09%5Evariables'),
+messageSends: ["new", "do:", "allInstanceVariableNames", "class", "at:put:", "asJSON", "instVarAt:"],
+referencedClasses: ["HashedCollection"]
 }),
 smalltalk.Object);
 
@@ -878,14 +880,13 @@ unescape('_asJSONString'),
 smalltalk.method({
 selector: unescape('asJSONString'),
 category: 'converting',
-fn: function () {
-    var self = this;
-    return smalltalk.send(smalltalk.JSON || JSON, "_stringify_", [self]);
-    return self;
-},
+fn: function (){
+var self=this;
+return smalltalk.send((smalltalk.JSON || JSON), "_stringify_", [smalltalk.send(self, "_asJSON", [])]);
+return self;},
 args: [],
-source: unescape('asJSONString%0A%09%5EJSON%20stringify%3A%20self'),
-messageSends: ["stringify:"],
+source: unescape('asJSONString%0A%09%5EJSON%20stringify%3A%20self%20asJSON'),
+messageSends: ["stringify:", "asJSON"],
 referencedClasses: ["JSON"]
 }),
 smalltalk.Object);
@@ -2532,6 +2533,22 @@ referencedClasses: []
 }),
 smalltalk.Number);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+category: 'converting',
+fn: function (){
+var self=this;
+return self;
+return self;},
+args: [],
+source: unescape('asJSON%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
 
 smalltalk.addMethod(
 unescape('_pi'),
@@ -2794,6 +2811,22 @@ referencedClasses: []
 }),
 smalltalk.Boolean);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+category: 'converting',
+fn: function (){
+var self=this;
+return self;
+return self;},
+args: [],
+source: unescape('asJSON%0A%09%5Eself'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Boolean);
+
 
 
 smalltalk.addClass('Date', smalltalk.Object, [], 'Kernel-Objects');
@@ -3690,6 +3723,22 @@ referencedClasses: ["ClassBuilder"]
 }),
 smalltalk.UndefinedObject);
 
+smalltalk.addMethod(
+unescape('_asJSON'),
+smalltalk.method({
+selector: unescape('asJSON'),
+category: 'converting',
+fn: function (){
+var self=this;
+return (typeof null == 'undefined' ? nil : null);
+return self;},
+args: [],
+source: unescape('asJSON%0A%09%5Enull'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.UndefinedObject);
+
 
 smalltalk.addMethod(
 unescape('_new'),

+ 71 - 59
st/Kernel-Collections.st

@@ -1,4 +1,53 @@
 Smalltalk current createPackage: 'Kernel-Collections' properties: #{}!
+Object subclass: #Association
+	instanceVariableNames: 'key value'
+	category: 'Kernel-Collections'!
+
+!Association methodsFor: 'accessing'!
+
+key: aKey
+	key := aKey
+!
+
+key
+	^key
+!
+
+value: aValue
+	value := aValue
+!
+
+value
+	^value
+! !
+
+!Association methodsFor: 'comparing'!
+
+= anAssociation
+	^self class = anAssociation class and: [
+	    self key = anAssociation key and: [
+		self value = anAssociation value]]
+!
+
+storeOn: aStream
+	"Store in the format (key->value)"
+
+	"aStream nextPutAll: '('."
+	key storeOn: aStream.
+	aStream nextPutAll: '->'.
+	value storeOn: aStream.
+	"aStream nextPutAll: ')'"
+! !
+
+!Association class methodsFor: 'instance creation'!
+
+key: aKey value: aValue
+	    ^self new
+		key: aKey;
+		value: aValue;
+		yourself
+! !
+
 Object subclass: #Stream
 	instanceVariableNames: 'collection position streamSize'
 	category: 'Kernel-Collections'!
@@ -132,55 +181,6 @@ on: aCollection
 		yourself
 ! !
 
-Object subclass: #Association
-	instanceVariableNames: 'key value'
-	category: 'Kernel-Collections'!
-
-!Association methodsFor: 'accessing'!
-
-key: aKey
-	key := aKey
-!
-
-key
-	^key
-!
-
-value: aValue
-	value := aValue
-!
-
-value
-	^value
-! !
-
-!Association methodsFor: 'comparing'!
-
-= anAssociation
-	^self class = anAssociation class and: [
-	    self key = anAssociation key and: [
-		self value = anAssociation value]]
-!
-
-storeOn: aStream
-	"Store in the format (key->value)"
-
-	"aStream nextPutAll: '('."
-	key storeOn: aStream.
-	aStream nextPutAll: '->'.
-	value storeOn: aStream.
-	"aStream nextPutAll: ')'"
-! !
-
-!Association class methodsFor: 'instance creation'!
-
-key: aKey value: aValue
-	    ^self new
-		key: aKey;
-		value: aValue;
-		yourself
-! !
-
 Object subclass: #RegularExpression
 	instanceVariableNames: ''
 	category: 'Kernel-Collections'!
@@ -265,12 +265,12 @@ asSet
 	^Set withAll: self
 !
 
-asJSONString
-	^JSON stringify: (self collect: [:each | each asJSONString])
-!
-
 asOrderedCollection
 	^self asArray
+!
+
+asJSON
+	^self asArray collect: [:each | each asJSON]
 ! !
 
 !Collection methodsFor: 'copying'!
@@ -758,12 +758,12 @@ asJavaScriptSelector
 	^(self asSelector replace: '^_' with: '') replace: '_.*' with: ''.
 !
 
-asJSONString
-	^self
-!
-
 asSymbol
 	^Symbol lookup: self
+!
+
+asJSON
+	^self
 ! !
 
 !String methodsFor: 'copying'!
@@ -1013,6 +1013,10 @@ asJavascript
 
 asSelector
 	^self asString asSelector
+!
+
+asJSON
+	^self asString asJSON
 ! !
 
 !Symbol methodsFor: 'copying'!
@@ -1511,6 +1515,14 @@ removeKey: aKey ifAbsent: aBlock
 
 asDictionary
 	^Dictionary fromPairs: self associations
+!
+
+asJSON
+	| c |
+	c := self class new.
+	self keysAndValuesDo: [:key :value |
+		c at: key put: value asJSON].
+	^c
 ! !
 
 !HashedCollection methodsFor: 'copying'!
@@ -1681,8 +1693,8 @@ asHashedCollection
 	^HashedCollection fromPairs: self associations
 !
 
-asJSONString
-	^self asHashedCollection asJSONString
+asJSON
+	^self asHashedCollection asJSON
 ! !
 
 !Dictionary methodsFor: 'initialization'!

+ 22 - 2
st/Kernel-Objects.st

@@ -114,11 +114,15 @@ asJavascript
 !
 
 asJSON
-	^JSON parse: self asJSONString
+	| variables |
+	variables := HashedCollection new.
+	self class allInstanceVariableNames do: [:each |
+		variables at: each put: (self instVarAt: each) asJSON].
+	^variables
 !
 
 asJSONString
-	^JSON stringify: self
+	^JSON stringify: self asJSON
 ! !
 
 !Object methodsFor: 'copying'!
@@ -823,6 +827,10 @@ to: stop by: step
 	  			pos := pos + 1.
 	    			value := value + step]].
 	^array
+!
+
+asJSON
+	^self
 ! !
 
 !Number methodsFor: 'copying'!
@@ -1005,6 +1013,12 @@ not
 	>
 ! !
 
+!Boolean methodsFor: 'converting'!
+
+asJSON
+	^self
+! !
+
 !Boolean methodsFor: 'copying'!
 
 shallowCopy
@@ -1231,6 +1245,12 @@ subclass: aString instanceVariableNames: aString2 package: aString3
 	    superclass: self subclass: aString instanceVariableNames: aString2 package: aString3
 ! !
 
+!UndefinedObject methodsFor: 'converting'!
+
+asJSON
+	^null
+! !
+
 !UndefinedObject methodsFor: 'copying'!
 
 shallowCopy