2012-06-22 14:56:48 +00:00
|
|
|
|
2012-06-25 12:07:52 +00:00
|
|
|
var Foreign = function() {
|
2012-06-22 14:56:48 +00:00
|
|
|
var JavaScript = function() {
|
2012-06-25 12:14:04 +00:00
|
|
|
function castJSBoolToBool(b) { return b; }
|
|
|
|
function castBoolToJSBool(b) { return b; }
|
|
|
|
|
2012-06-22 14:56:48 +00:00
|
|
|
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('');
|
|
|
|
}
|
|
|
|
|
2012-06-25 12:14:04 +00:00
|
|
|
return {castJSBoolToBool:castJSBoolToBool,
|
|
|
|
castBoolToJSBool:castBoolToJSBool,
|
|
|
|
castJSNumberToFloat:castJSNumberToFloat,
|
2012-06-22 14:56:48 +00:00
|
|
|
castFloatToJSNumber:castFloatToJSNumber,
|
|
|
|
castJSNumberToInt:castJSNumberToInt,
|
|
|
|
castIntToJSNumber:castIntToJSNumber,
|
|
|
|
castJSElementToElement:castJSElementToElement,
|
|
|
|
castElementToJSElement:castElementToJSElement,
|
|
|
|
castJSArrayToList:castJSArrayToList,
|
|
|
|
castListToJSArray:castListToJSArray,
|
|
|
|
castJSStringToString:castJSStringToString,
|
|
|
|
castStringToJSString:castStringToJSString
|
|
|
|
};
|
|
|
|
}();
|
|
|
|
return {JavaScript:JavaScript};
|
|
|
|
}();
|