Moved non-IO callbacks to c0ffi.js
This commit is contained in:
43
src/c0ffi.js
43
src/c0ffi.js
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user