Moved non-IO callbacks to c0ffi.js

This commit is contained in:
Mitchell Plamann
2015-04-19 19:18:49 -04:00
parent d39df5314d
commit 6138821c3a
2 changed files with 45 additions and 36 deletions

View File

@@ -108,3 +108,46 @@ exports.NATIVE_STRING_TERMINATED = 92
exports.NATIVE_STRING_TO_CHARARRAY = 93 exports.NATIVE_STRING_TO_CHARARRAY = 93
exports.NATIVE_STRING_TOLOWER = 94 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;

View File

@@ -2,7 +2,8 @@ parser = require("../src/bytecode-parser.js");
c0vm = require("../src/c0vm.js"); c0vm = require("../src/c0vm.js");
c0ffi = require("../src/c0ffi.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 = ""; var printout = "";
callbacks[c0ffi.NATIVE_PRINT] = function(args) { callbacks[c0ffi.NATIVE_PRINT] = function(args) {
@@ -20,41 +21,6 @@ callbacks[c0ffi.NATIVE_PRINTLN] = function(args) {
return 0; 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) { function doTest(filename, expected_result) {
return function(test) { return function(test) {
var result = c0vm.execute(parser.parse(filename), callbacks, false); var result = c0vm.execute(parser.parse(filename), callbacks, false);