Sfoglia il codice sorgente

- New function in smalltalk to convert JavaScript objects to Smalltalk
- Wrap the Error constructor to the Smalltalk Error class directly

Nicolas Petton 14 anni fa
parent
commit
69f03dd466
2 ha cambiato i file con 38 aggiunte e 2 eliminazioni
  1. 16 2
      js/Kernel.js
  2. 22 0
      js/boot.js

+ 16 - 2
js/Kernel.js

@@ -683,6 +683,19 @@ fn: function (aBoolean) {
 source: unescape('debugMode%3A%20aBoolean%0A%09%7B%27self.debugMode%20%3D%20aBoolean%27%7D')}),
 smalltalk.Smalltalk);
 
+smalltalk.addMethod(
+'_readJSON_',
+smalltalk.method({
+selector: 'readJSON:',
+category: 'accessing',
+fn: function (anObject) {
+    var self = this;
+    return self.readJSObject(anObject);
+    return self;
+},
+source: unescape('readJSON%3A%20anObject%0A%09%7B%27return%20self.readJSObject%28anObject%29%3B%27%7D')}),
+smalltalk.Smalltalk);
+
 
 smalltalk.Smalltalk.klass.iVarNames = ['current'];
 smalltalk.addMethod(
@@ -4098,10 +4111,11 @@ selector: 'signal',
 category: 'signaling',
 fn: function () {
     var self = this;
-    throw new Error(self._messageText());
+    console.log(self._messageText());
+    throw self;
     return self;
 },
-source: unescape('signal%0A%09%7B%27throw%28new%20Error%28self._messageText%28%29%29%29%27%7D')}),
+source: unescape('signal%0A%09%7B%27console.log%28self._messageText%28%29%29%3B%20throw%28self%29%27%7D')}),
 smalltalk.Error);
 
 

+ 22 - 0
js/boot.js

@@ -241,6 +241,26 @@ function Smalltalk(){
 	    .replace(/_comma/, ',')
 	    .replace(/_at/, '@')
     };
+
+    /* Converts a JavaScript object to valid Smalltalk Object */
+    st.readJSObject = function(js) {
+	var object = js;
+	var readObject = (js.constructor === Object);
+	var readArray = (js.constructor === Array);
+	
+	if(readObject) {
+	    object = smalltalk.Dictionary._new();
+	}
+	for(var i in js) {
+	    if(readObject) {
+		object._at_put_(i, st.readJSObject(js[i]));
+	    } 
+	    if(readArray) {
+		object[i] = st.readJSObject(js[i]);
+	    }
+	}
+	return object;
+    };
 }
 
 function SmalltalkMethodContext() {
@@ -288,6 +308,8 @@ smalltalk.mapClassName("String", "Kernel", String, smalltalk.SequenceableCollect
 smalltalk.mapClassName("Array", "Kernel", Array, smalltalk.SequenceableCollection);
 smalltalk.mapClassName("RegularExpression", "Kernel", RegExp, smalltalk.String);
 
+smalltalk.mapClassName("Error", "Kernel", Error, smalltalk.Object);
+
 if(CanvasRenderingContext2D) {
     smalltalk.mapClassName("CanvasRenderingContext", "Canvas", CanvasRenderingContext2D, smalltalk.Object);
 }