From a29f60dc247a325555fc7297ffbea454fb6fb158 Mon Sep 17 00:00:00 2001 From: evancz Date: Fri, 22 Jun 2012 09:56:48 -0500 Subject: [PATCH] The beginnings of a JavaScript FFI --- core-js/foriegn/JavaScript.js | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 core-js/foriegn/JavaScript.js diff --git a/core-js/foriegn/JavaScript.js b/core-js/foriegn/JavaScript.js new file mode 100644 index 0000000..67dce88 --- /dev/null +++ b/core-js/foriegn/JavaScript.js @@ -0,0 +1,48 @@ + +var Foriegn = function() { + var JavaScript = function() { + function castJSNumberToFloat(n) { return n; } + function castFloatToJSNumber(n) { return n; } + + function castJSNumberToInt(n) { return ~~n; } + function castIntToJSNumber(n) { return n; } + + var castJSElementToElement = Element.jsElement; + function castElementToJSElement(elem) { return elem; } + + function castJSArrayToList(arr) { + var list = ["Nil"]; + for (var i = arr.length; i--; ) { + list = [ "Cons", arr[i], list ]; + } + return list; + } + function castListToJSArray(list) { + var a = []; + while (list[0] === "Cons") { + a.push(list[1]); + list = list[2]; + } + return a; + } + + var castJSStringToString = castJSArrayToList + function castStringToJSString(str) { + if (typeof str === "string") return str; + return castListToJSArray(str).join(''); + } + + return {castJSNumberToFloat:castJSNumberToFloat, + castFloatToJSNumber:castFloatToJSNumber, + castJSNumberToInt:castJSNumberToInt, + castIntToJSNumber:castIntToJSNumber, + castJSElementToElement:castJSElementToElement, + castElementToJSElement:castElementToJSElement, + castJSArrayToList:castJSArrayToList, + castListToJSArray:castListToJSArray, + castJSStringToString:castJSStringToString, + castStringToJSString:castStringToJSString + }; + }(); + return {JavaScript:JavaScript}; +}(); \ No newline at end of file