diff --git a/src/c0ffi.js b/src/c0ffi.js index c3ce859..d8b1412 100644 --- a/src/c0ffi.js +++ b/src/c0ffi.js @@ -108,3 +108,46 @@ exports.NATIVE_STRING_TERMINATED = 92 exports.NATIVE_STRING_TO_CHARARRAY = 93 exports.NATIVE_STRING_TOLOWER = 94 +callbacks = {}; +callbacks[exports.NATIVE_STRING_LENGTH] = + function(args) { + return args[0].length; + }; + +callbacks[exports.NATIVE_STRING_TO_CHARARRAY] = + function(args, vm) { + var address = vm.heap.length; + vm.heap.push(args[0].length+1); + vm.heap.push(1); + for (var i = 0; i < args[0].length; i++) { + vm.heap.push(args[0][i]); + } + vm.heap.push(0); + return address; + }; + + +callbacks[exports.NATIVE_STRING_FROM_CHARARRAY] = + function(args, vm) { + var i = args[0] + 2; + var result = ""; + while (vm.heap[i] !== 0) { + result += vm.heap[i]; + i++; + } + return result; + }; + +callbacks[exports.NATIVE_CHAR_CHR] = + function(args) { + return String.fromCharCode(args[0]); + }; + +callbacks[exports.NATIVE_CHAR_ORD] = + function(args) { + if (typeof args[0] == "string") + return args[0].charCodeAt(0); + return args[0]; + }; + +exports.default_callbacks = callbacks; diff --git a/test/tests.js b/test/tests.js index ad533a2..96e1d7d 100644 --- a/test/tests.js +++ b/test/tests.js @@ -2,7 +2,8 @@ parser = require("../src/bytecode-parser.js"); c0vm = require("../src/c0vm.js"); c0ffi = require("../src/c0ffi.js"); -var callbacks = {} +var callbacks = c0ffi.default_callbacks; +console.log("Initial callbacks: " + callbacks[c0ffi.NATIVE_STRING_LENGTH](["hi"])); var printout = ""; callbacks[c0ffi.NATIVE_PRINT] = function(args) { @@ -20,41 +21,6 @@ callbacks[c0ffi.NATIVE_PRINTLN] = function(args) { return 0; } -callbacks[c0ffi.NATIVE_STRING_LENGTH] = function(args) { - return args[0].length; -} - -callbacks[c0ffi.NATIVE_STRING_TO_CHARARRAY] = function(args, vm) { - var address = vm.heap.length; - vm.heap.push(args[0].length+1); - vm.heap.push(1); - for (var i = 0; i < args[0].length; i++) { - vm.heap.push(args[0][i]); - } - vm.heap.push(0); - return address; -} - -callbacks[c0ffi.NATIVE_STRING_FROM_CHARARRAY] = function(args, vm) { - var i = args[0] + 2; - var result = ""; - while (vm.heap[i] !== 0) { - result += vm.heap[i]; - i++; - } - return result; -} - -callbacks[c0ffi.NATIVE_CHAR_CHR] = function(args) { - return String.fromCharCode(args[0]); -} - -callbacks[c0ffi.NATIVE_CHAR_ORD] = function(args) { - if (typeof args[0] == "string") - return args[0].charCodeAt(0); - return args[0]; -} - function doTest(filename, expected_result) { return function(test) { var result = c0vm.execute(parser.parse(filename), callbacks, false);