UNPKG

js-forth

Version:

An implementation of [Forth](https://en.wikipedia.org/wiki/Forth_(programming_language)) in Javascript

54 lines (46 loc) 1.42 kB
function MemoryOperations(f) { function getAddress(address) { if (address < 0) { return f._currentInput.charCodeAt(address - f._INPUT_SOURCE); } else { var value = f.dataSpace[address]; if (typeof value == "string") return value.charCodeAt(0); else return value; } } function setAddress(address, value) { if (address < 0) { throw "Illegal attempt to change input"; } else { f.dataSpace[address] = value; } } f.defjs("!", function store() { var address = f.stack.pop(); var data = f.stack.pop(); setAddress(address, data); }); f.defjs("@", function fetch() { var address = f.stack.pop(); f.stack.push(getAddress(address)); }); f.defjs("+!", function addStore() { var address = f.stack.pop(); var data = f.stack.pop(); f.dataSpace[address] = f.dataSpace[address] + data; }); f.defjs("-!", function subtractStore() { var address = f.stack.pop(); var data = f.stack.pop(); f.dataSpace[address] = f.dataSpace[address] - data; }); f.defjs("here", function here() { f.stack.push(f.dataSpace.length); }); f._getAddress = getAddress; f._setAddress = setAddress; return f; } module.exports = MemoryOperations;