Spaces:
Running
Running
| /* Smalltalk from Squeak4.5 with VMMaker 4.13.6 translated as JS source on 13 November 2014 7:11:01 pm */ | |
| /* Automatically generated by | |
| JSPluginCodeGenerator VMMakerJS-bf.16 uuid: aa9fd3da-7901-4c62-ae34-c166f1492d3b | |
| from | |
| KedamaPlugin2 Kedama-Plugins-yo.1 uuid: 3fc7d691-0149-ba4d-a339-5d27cd44a2f8 | |
| */ | |
| (function KedamaPlugin2() { | |
| ; | |
| var VM_PROXY_MAJOR = 1; | |
| var VM_PROXY_MINOR = 11; | |
| /*** Functions ***/ | |
| function CLASSOF(obj) { return typeof obj === "number" ? interpreterProxy.classSmallInteger() : obj.sqClass } | |
| function SIZEOF(obj) { return obj.pointers ? obj.pointers.length : obj.words ? obj.words.length : obj.bytes ? obj.bytes.length : 0 } | |
| function BYTESIZEOF(obj) { return obj.bytes ? obj.bytes.length : obj.words ? obj.words.length * 4 : 0 } | |
| function DIV(a, b) { return Math.floor(a / b) | 0; } // integer division | |
| function MOD(a, b) { return a - DIV(a, b) * b | 0; } // signed modulus | |
| function SHL(a, b) { return b > 31 ? 0 : a << b; } // fix JS shift | |
| function SHR(a, b) { return b > 31 ? 0 : a >>> b; } // fix JS shift | |
| function SHIFT(a, b) { return b < 0 ? (b < -31 ? 0 : a >>> (0-b) ) : (b > 31 ? 0 : a << b); } | |
| /*** Variables ***/ | |
| var interpreterProxy = null; | |
| var kedamaRandomSeed = 0; | |
| var moduleName = "KedamaPlugin2 13 November 2014 (e)"; | |
| var randA = 0; | |
| var randM = 0; | |
| var randQ = 0; | |
| var randR = 0; | |
| function degreesFromXy(x, y) { | |
| var tanVal; | |
| var theta; | |
| /* inline: true */; | |
| if (x === 0.0) { | |
| if (y >= 0.0) { | |
| return 90.0; | |
| } else { | |
| return 270.0; | |
| } | |
| } else { | |
| tanVal = y / x; | |
| theta = Math.atan(tanVal); | |
| if (x >= 0.0) { | |
| if (y >= 0.0) { | |
| return theta / 0.0174532925199433; | |
| } else { | |
| return 360.0 + (theta / 0.0174532925199433); | |
| } | |
| } else { | |
| return 180.0 + (theta / 0.0174532925199433); | |
| } | |
| } | |
| return 0.0; | |
| } | |
| function degreesToRadians(degrees) { | |
| var deg; | |
| var headingRadians; | |
| var q; | |
| /* inline: true */; | |
| deg = 90.0 - degrees; | |
| q = deg / 360.0|0; | |
| if (deg < 0.0) { | |
| --q; | |
| } | |
| headingRadians = (deg - (q * 360.0)) * 0.0174532925199433; | |
| return headingRadians; | |
| } | |
| function drawTurtlesInArray() { | |
| var bitsIndex; | |
| var colorArray; | |
| var colorOop; | |
| var destBits; | |
| var destHeight; | |
| var destOop; | |
| var destWidth; | |
| var i; | |
| var size; | |
| var visible; | |
| var visibleArray; | |
| var visibleOop; | |
| var x; | |
| var xArray; | |
| var xOop; | |
| var y; | |
| var yArray; | |
| var yOop; | |
| /* inline: true */; | |
| visibleOop = interpreterProxy.stackValue(0); | |
| colorOop = interpreterProxy.stackValue(1); | |
| yOop = interpreterProxy.stackValue(2); | |
| xOop = interpreterProxy.stackValue(3); | |
| destHeight = interpreterProxy.stackIntegerValue(4); | |
| destWidth = interpreterProxy.stackIntegerValue(5); | |
| destOop = interpreterProxy.stackValue(6); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(destOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(colorOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(visibleOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if ((destHeight * destWidth) !== SIZEOF(destOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(xOop); | |
| if (SIZEOF(yOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(colorOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(visibleOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| xArray = xOop.wordsAsFloat32Array(); | |
| yArray = yOop.wordsAsFloat32Array(); | |
| colorArray = colorOop.words; | |
| visibleArray = visibleOop.bytes; | |
| destBits = destOop.words; | |
| for (i = 0; i <= (size - 1); i++) { | |
| x = (xArray[i]|0); | |
| ; | |
| y = (yArray[i]|0); | |
| ; | |
| visible = visibleArray[i]; | |
| if ((visible !== 0) && (((x >= 0) && (y >= 0)) && ((x < destWidth) && (y < destHeight)))) { | |
| bitsIndex = (y * destWidth) + x; | |
| destBits[bitsIndex] = colorArray[i]; | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(7); | |
| } | |
| function getHeadingArrayInto() { | |
| var heading; | |
| var headingArray; | |
| var headingOop; | |
| var i; | |
| var resultArray; | |
| var resultOop; | |
| var size; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackValue(0); | |
| headingOop = interpreterProxy.stackValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(resultOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(headingOop); | |
| if (SIZEOF(resultOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| resultArray = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (size - 1); i++) { | |
| heading = headingArray[i]; | |
| heading = heading / 0.0174532925199433; | |
| heading = 90.0 - heading; | |
| if (!(heading > 0.0)) { | |
| heading += 360.0; | |
| } | |
| resultArray[i] = heading; | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(2); | |
| } | |
| /* Note: This is hardcoded so it can be run from Squeak. | |
| The module name is used for validating a module *after* | |
| it is loaded to check if it does really contain the module | |
| we're thinking it contains. This is important! */ | |
| function getModuleName() { | |
| return moduleName; | |
| } | |
| function getScalarHeading() { | |
| var heading; | |
| var headingArray; | |
| var headingOop; | |
| var index; | |
| /* inline: true */; | |
| headingOop = interpreterProxy.stackValue(0); | |
| index = interpreterProxy.stackIntegerValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(headingOop) < index) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| heading = headingArray[index - 1]; | |
| heading = radiansToDegrees(heading); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(3); | |
| interpreterProxy.pushFloat(heading); | |
| } | |
| function halt() { | |
| ; | |
| } | |
| function initialiseModule() { | |
| kedamaRandomSeed = 17; | |
| /* magic constant = 16807 */ | |
| randA = 16807; | |
| /* magic constant = 2147483647 */ | |
| randM = 2147483647; | |
| randQ = DIV(randM, randA); | |
| randR = MOD(randM, randA); | |
| } | |
| function kedamaRandom2(range) { | |
| var hi; | |
| var lo; | |
| var r; | |
| var v; | |
| var val; | |
| /* inline: true */; | |
| if (range < 0) { | |
| r = 0 - range; | |
| } else { | |
| r = range; | |
| } | |
| hi = DIV(kedamaRandomSeed, randQ); | |
| lo = MOD(kedamaRandomSeed, randQ); | |
| kedamaRandomSeed = (randA * lo) - (randR * hi); | |
| v = kedamaRandomSeed & 65535; | |
| val = (v * (r + 1)) >>> 16; | |
| if (range < 0) { | |
| return 0 - val; | |
| } else { | |
| return val; | |
| } | |
| } | |
| function kedamaSetRandomSeed() { | |
| var seed; | |
| /* inline: true */; | |
| seed = interpreterProxy.stackIntegerValue(0); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| kedamaRandomSeed = seed & 65536; | |
| interpreterProxy.pop(1); | |
| } | |
| function makeMask() { | |
| var alpha; | |
| var dOrigin; | |
| var data; | |
| var dataBits; | |
| var dataSize; | |
| var highMask; | |
| var i; | |
| var mOrigin; | |
| var maskBits; | |
| var maskSize; | |
| var pixel; | |
| var shiftAmount; | |
| /* inline: true */; | |
| shiftAmount = interpreterProxy.stackIntegerValue(0); | |
| pixel = interpreterProxy.stackIntegerValue(1); | |
| maskBits = interpreterProxy.stackValue(2); | |
| dataBits = interpreterProxy.stackValue(3); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| dataSize = SIZEOF(dataBits); | |
| maskSize = SIZEOF(maskBits); | |
| if (dataSize !== maskSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (shiftAmount < -32) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (shiftAmount > 8) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| dOrigin = dataBits.words; | |
| mOrigin = maskBits.words; | |
| highMask = 4278190080; | |
| for (i = 0; i <= (dataSize - 1); i++) { | |
| data = dOrigin[i]; | |
| alpha = SHIFT(data, shiftAmount); | |
| if (alpha > 255) { | |
| alpha = 255; | |
| } | |
| if (alpha < 0) { | |
| alpha = 0; | |
| } | |
| mOrigin[i] = (((alpha << 24) & highMask) | pixel); | |
| } | |
| interpreterProxy.pop(4); | |
| } | |
| function makeMaskLog() { | |
| var alpha; | |
| var dOrigin; | |
| var data; | |
| var dataBits; | |
| var dataSize; | |
| var highMask; | |
| var i; | |
| var mOrigin; | |
| var maskBits; | |
| var maskSize; | |
| var max; | |
| var maxFirst; | |
| var maxLog; | |
| var maxOop; | |
| var pixel; | |
| /* inline: true */; | |
| maxOop = interpreterProxy.stackValue(0); | |
| pixel = interpreterProxy.stackIntegerValue(1); | |
| maskBits = interpreterProxy.stackValue(2); | |
| dataBits = interpreterProxy.stackValue(3); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| maxFirst = maxOop.words; | |
| max = maxFirst[0]; | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| maxLog = Math.log(max); | |
| dataSize = SIZEOF(dataBits); | |
| maskSize = SIZEOF(maskBits); | |
| if (dataSize !== maskSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| dOrigin = dataBits.words; | |
| mOrigin = maskBits.words; | |
| highMask = 4278190080; | |
| for (i = 0; i <= (dataSize - 1); i++) { | |
| data = dOrigin[i]; | |
| if (data === 0) { | |
| alpha = 0; | |
| } else { | |
| alpha = (((255.0 / maxLog) * Math.log(data))|0); | |
| } | |
| if (alpha > 255) { | |
| alpha = 255; | |
| } | |
| mOrigin[i] = (((alpha << 24) & highMask) | pixel); | |
| } | |
| interpreterProxy.pop(4); | |
| } | |
| function makeTurtlesMap() { | |
| var height; | |
| var index; | |
| var map; | |
| var mapIndex; | |
| var mapOop; | |
| var size; | |
| var whoArray; | |
| var whoOop; | |
| var width; | |
| var x; | |
| var xArray; | |
| var xOop; | |
| var y; | |
| var yArray; | |
| var yOop; | |
| /* inline: true */; | |
| height = interpreterProxy.stackIntegerValue(0); | |
| width = interpreterProxy.stackIntegerValue(1); | |
| yOop = interpreterProxy.stackValue(2); | |
| xOop = interpreterProxy.stackValue(3); | |
| whoOop = interpreterProxy.stackValue(4); | |
| mapOop = interpreterProxy.stackValue(5); | |
| if (!interpreterProxy.isWords(yOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(whoOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(mapOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(whoOop); | |
| if (SIZEOF(xOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(yOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(mapOop) !== (height * width)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| xArray = xOop.wordsAsFloat32Array(); | |
| yArray = yOop.wordsAsFloat32Array(); | |
| whoArray = whoOop.words; | |
| map = mapOop.words; | |
| for (index = 0; index <= ((height * width) - 1); index++) { | |
| map[index] = 0; | |
| } | |
| for (index = 0; index <= (size - 1); index++) { | |
| x = xArray[index]; | |
| y = yArray[index]; | |
| mapIndex = (width * y) + x; | |
| if ((mapIndex >= 0) && (mapIndex < (height * width))) { | |
| map[mapIndex] = whoArray[index]; | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(6); | |
| } | |
| function primPixelAtXY() { | |
| var bits; | |
| var bitsOop; | |
| var height; | |
| var index; | |
| var ret; | |
| var width; | |
| var x; | |
| var xPos; | |
| var y; | |
| var yPos; | |
| /* inline: true */; | |
| height = interpreterProxy.stackIntegerValue(0); | |
| width = interpreterProxy.stackIntegerValue(1); | |
| yPos = interpreterProxy.stackFloatValue(2); | |
| xPos = interpreterProxy.stackFloatValue(3); | |
| bitsOop = interpreterProxy.stackValue(4); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(bitsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(bitsOop) !== (height * width)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| x = xPos|0; | |
| y = yPos|0; | |
| bits = bitsOop.words; | |
| if ((((x >= 0) && (x < width)) && (y >= 0)) && (y < height)) { | |
| index = (y * width) + x; | |
| ret = bits[index]; | |
| } else { | |
| ret = 0; | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(6); | |
| interpreterProxy.pushInteger(ret); | |
| } | |
| function primPixelAtXYPut() { | |
| var bits; | |
| var bitsOop; | |
| var height; | |
| var index; | |
| var v; | |
| var value; | |
| var width; | |
| var x; | |
| var xPos; | |
| var y; | |
| var yPos; | |
| /* inline: true */; | |
| height = interpreterProxy.stackIntegerValue(0); | |
| width = interpreterProxy.stackIntegerValue(1); | |
| value = interpreterProxy.stackIntegerValue(2); | |
| yPos = interpreterProxy.stackFloatValue(3); | |
| xPos = interpreterProxy.stackFloatValue(4); | |
| bitsOop = interpreterProxy.stackValue(5); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(bitsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(bitsOop) !== (height * width)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| x = xPos|0; | |
| y = yPos|0; | |
| v = value; | |
| if (v > 1073741823) { | |
| v = 1073741823; | |
| } | |
| if (v < 0) { | |
| v = 0; | |
| } | |
| bits = bitsOop.words; | |
| if ((((x >= 0) && (x < width)) && (y >= 0)) && (y < height)) { | |
| index = (y * width) + x; | |
| bits[index] = v; | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(6); | |
| } | |
| function primPixelsAtXY() { | |
| var bits; | |
| var bitsHeight; | |
| var bitsIndex; | |
| var bitsOop; | |
| var bitsWidth; | |
| var destWords; | |
| var destWordsOop; | |
| var i; | |
| var size; | |
| var x; | |
| var xArray; | |
| var xArrayOop; | |
| var y; | |
| var yArray; | |
| var yArrayOop; | |
| /* inline: true */; | |
| destWordsOop = interpreterProxy.stackValue(0); | |
| bitsHeight = interpreterProxy.stackIntegerValue(1); | |
| bitsWidth = interpreterProxy.stackIntegerValue(2); | |
| bitsOop = interpreterProxy.stackValue(3); | |
| yArrayOop = interpreterProxy.stackValue(4); | |
| xArrayOop = interpreterProxy.stackValue(5); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(destWordsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(bitsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if ((bitsHeight * bitsWidth) !== SIZEOF(bitsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(xArrayOop); | |
| if (SIZEOF(yArrayOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(destWordsOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| xArray = xArrayOop.wordsAsFloat32Array(); | |
| yArray = yArrayOop.wordsAsFloat32Array(); | |
| destWords = destWordsOop.words; | |
| bits = bitsOop.words; | |
| for (i = 0; i <= (size - 1); i++) { | |
| x = (xArray[i]|0); | |
| ; | |
| y = (yArray[i]|0); | |
| ; | |
| if (((x >= 0) && (y >= 0)) && ((x < bitsWidth) && (y < bitsHeight))) { | |
| bitsIndex = (y * bitsWidth) + x; | |
| destWords[i] = bits[bitsIndex]; | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(6); | |
| } | |
| function primScalarForward() { | |
| var bottomEdgeMode; | |
| var destHeight; | |
| var destWidth; | |
| var dist; | |
| var headingArray; | |
| var headingOop; | |
| var i; | |
| var index; | |
| var leftEdgeMode; | |
| var newX; | |
| var newY; | |
| var rightEdgeMode; | |
| var size; | |
| var topEdgeMode; | |
| var val; | |
| var xArray; | |
| var xOop; | |
| var yArray; | |
| var yOop; | |
| /* inline: true */; | |
| bottomEdgeMode = interpreterProxy.stackIntegerValue(0); | |
| topEdgeMode = interpreterProxy.stackIntegerValue(1); | |
| rightEdgeMode = interpreterProxy.stackIntegerValue(2); | |
| leftEdgeMode = interpreterProxy.stackIntegerValue(3); | |
| destHeight = interpreterProxy.stackFloatValue(4); | |
| destWidth = interpreterProxy.stackFloatValue(5); | |
| val = interpreterProxy.stackFloatValue(6); | |
| headingOop = interpreterProxy.stackValue(7); | |
| yOop = interpreterProxy.stackValue(8); | |
| xOop = interpreterProxy.stackValue(9); | |
| index = interpreterProxy.stackIntegerValue(10); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(xOop); | |
| if (SIZEOF(yOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(headingOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| xArray = xOop.wordsAsFloat32Array(); | |
| yArray = yOop.wordsAsFloat32Array(); | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| dist = val; | |
| i = index - 1; | |
| newX = xArray[i] + (dist * Math.cos(headingArray[i])); | |
| newY = yArray[i] - (dist * Math.sin(headingArray[i])); | |
| scalarXAtxArrayheadingArrayvaluedestWidthleftEdgeModerightEdgeMode(i, xArray, headingArray, newX, destWidth, leftEdgeMode, rightEdgeMode); | |
| scalarYAtyArrayheadingArrayvaluedestHeighttopEdgeModebottomEdgeMode(i, yArray, headingArray, newY, destHeight, topEdgeMode, bottomEdgeMode); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(11); | |
| } | |
| function primSetPixelsAtXY() { | |
| var bits; | |
| var bitsHeight; | |
| var bitsIndex; | |
| var bitsOop; | |
| var bitsWidth; | |
| var floatsValue; | |
| var fv; | |
| var i; | |
| var intValue; | |
| var isValueInt; | |
| var isValueWordArray; | |
| var pArray; | |
| var pArrayOop; | |
| var size; | |
| var value; | |
| var valueOop; | |
| var wordsValue; | |
| var x; | |
| var xArray; | |
| var xArrayOop; | |
| var y; | |
| var yArray; | |
| var yArrayOop; | |
| /* inline: true */; | |
| valueOop = interpreterProxy.stackValue(0); | |
| bitsHeight = interpreterProxy.stackIntegerValue(1); | |
| bitsWidth = interpreterProxy.stackIntegerValue(2); | |
| bitsOop = interpreterProxy.stackValue(3); | |
| yArrayOop = interpreterProxy.stackValue(4); | |
| xArrayOop = interpreterProxy.stackValue(5); | |
| pArrayOop = interpreterProxy.stackValue(6); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(pArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(bitsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if ((bitsHeight * bitsWidth) !== SIZEOF(bitsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(xArrayOop); | |
| if (SIZEOF(pArrayOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(yArrayOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| pArray = pArrayOop.bytes; | |
| xArray = xArrayOop.wordsAsFloat32Array(); | |
| yArray = yArrayOop.wordsAsFloat32Array(); | |
| isValueInt = typeof valueOop === "number"; | |
| if (isValueInt) { | |
| intValue = valueOop; | |
| value = intValue; | |
| } else { | |
| if (SIZEOF(valueOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| isValueWordArray = interpreterProxy.isMemberOf(valueOop, "WordArray"); | |
| if (isValueWordArray) { | |
| wordsValue = valueOop.words; | |
| } else { | |
| floatsValue = valueOop.wordsAsFloat32Array(); | |
| } | |
| } | |
| bits = bitsOop.words; | |
| for (i = 0; i <= (size - 1); i++) { | |
| if (pArray[i] === 1) { | |
| x = (xArray[i]|0); | |
| ; | |
| y = (yArray[i]|0); | |
| ; | |
| if (((x >= 0) && (y >= 0)) && ((x < bitsWidth) && (y < bitsHeight))) { | |
| bitsIndex = (y * bitsWidth) + x; | |
| if (isValueInt) { | |
| bits[bitsIndex] = value; | |
| } else { | |
| if (isValueWordArray) { | |
| bits[bitsIndex] = wordsValue[i]; | |
| } else { | |
| fv = floatsValue[i]; | |
| ; | |
| bits[bitsIndex] = fv; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(7); | |
| } | |
| function primTurtlesForward() { | |
| var bottomEdgeMode; | |
| var destHeight; | |
| var destWidth; | |
| var dist; | |
| var headingArray; | |
| var headingOop; | |
| var i; | |
| var isValVector; | |
| var leftEdgeMode; | |
| var newX; | |
| var newY; | |
| var pArray; | |
| var pOop; | |
| var rightEdgeMode; | |
| var size; | |
| var topEdgeMode; | |
| var val; | |
| var valArray; | |
| var valOop; | |
| var xArray; | |
| var xOop; | |
| var yArray; | |
| var yOop; | |
| /* inline: true */; | |
| bottomEdgeMode = interpreterProxy.stackIntegerValue(0); | |
| topEdgeMode = interpreterProxy.stackIntegerValue(1); | |
| rightEdgeMode = interpreterProxy.stackIntegerValue(2); | |
| leftEdgeMode = interpreterProxy.stackIntegerValue(3); | |
| destHeight = interpreterProxy.stackFloatValue(4); | |
| destWidth = interpreterProxy.stackFloatValue(5); | |
| valOop = interpreterProxy.stackValue(6); | |
| headingOop = interpreterProxy.stackValue(7); | |
| yOop = interpreterProxy.stackValue(8); | |
| xOop = interpreterProxy.stackValue(9); | |
| pOop = interpreterProxy.stackValue(10); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(pOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (valOop.isFloat) { | |
| isValVector = false; | |
| } else { | |
| if (interpreterProxy.isWords(valOop)) { | |
| isValVector = true; | |
| } else { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| size = SIZEOF(xOop); | |
| if (SIZEOF(yOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(headingOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(pOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (isValVector) { | |
| if (SIZEOF(valOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| pArray = pOop.bytes; | |
| xArray = xOop.wordsAsFloat32Array(); | |
| yArray = yOop.wordsAsFloat32Array(); | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| if (isValVector) { | |
| valArray = valOop.wordsAsFloat32Array(); | |
| } else { | |
| val = interpreterProxy.floatValueOf(valOop); | |
| } | |
| for (i = 0; i <= (size - 1); i++) { | |
| if (pArray[i] === 1) { | |
| if (isValVector) { | |
| dist = valArray[i]; | |
| } else { | |
| dist = val; | |
| } | |
| newX = xArray[i] + (dist * Math.cos(headingArray[i])); | |
| newY = yArray[i] - (dist * Math.sin(headingArray[i])); | |
| scalarXAtxArrayheadingArrayvaluedestWidthleftEdgeModerightEdgeMode(i, xArray, headingArray, newX, destWidth, leftEdgeMode, rightEdgeMode); | |
| scalarYAtyArrayheadingArrayvaluedestHeighttopEdgeModebottomEdgeMode(i, yArray, headingArray, newY, destHeight, topEdgeMode, bottomEdgeMode); | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(11); | |
| } | |
| function primUpHill() { | |
| var bits; | |
| var bitsOop; | |
| var endX; | |
| var endY; | |
| var height; | |
| var maxVal; | |
| var maxValX; | |
| var maxValY; | |
| var ret; | |
| var rowOffset; | |
| var sniffRange; | |
| var startX; | |
| var startY; | |
| var tH; | |
| var tX; | |
| var tY; | |
| var thisVal; | |
| var turtleX; | |
| var turtleY; | |
| var width; | |
| var x; | |
| var y; | |
| /* inline: true */; | |
| sniffRange = interpreterProxy.stackIntegerValue(0); | |
| height = interpreterProxy.stackIntegerValue(1); | |
| width = interpreterProxy.stackIntegerValue(2); | |
| bitsOop = interpreterProxy.stackValue(3); | |
| tH = interpreterProxy.stackFloatValue(4); | |
| tY = interpreterProxy.stackFloatValue(5); | |
| tX = interpreterProxy.stackFloatValue(6); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(bitsOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(bitsOop) !== (height * width)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| bits = bitsOop.words; | |
| turtleX = tX; | |
| turtleY = tY; | |
| turtleX = Math.max(turtleX, 0); | |
| turtleY = Math.max(turtleY, 0); | |
| turtleX = Math.min(turtleX, (width - 1)); | |
| turtleY = Math.min(turtleY, (height - 1)); | |
| startX = Math.max((turtleX - sniffRange), 0); | |
| endX = Math.min((turtleX + sniffRange), (width - 1)); | |
| startY = Math.max((turtleY - sniffRange), 0); | |
| endY = Math.min((turtleY + sniffRange), (height - 1)); | |
| maxVal = bits[(turtleY * width) + turtleX]; | |
| maxValX = -1; | |
| for (y = startY; y <= endY; y++) { | |
| rowOffset = y * width; | |
| for (x = startX; x <= endX; x++) { | |
| thisVal = bits[rowOffset + x]; | |
| if (thisVal > maxVal) { | |
| maxValX = x; | |
| maxValY = y; | |
| maxVal = thisVal; | |
| } | |
| } | |
| } | |
| if (-1 === maxValX) { | |
| ret = radiansToDegrees(tH); | |
| } else { | |
| ret = degreesFromXy((maxValX - turtleX), (maxValY - turtleY)) + 90.0|0; | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(8); | |
| interpreterProxy.pushFloat(ret); | |
| } | |
| function primitiveAddArrays() { | |
| var argOop; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgWords && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (wordsRcvr[i] + wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] + floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] + wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] + floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveAddScalar() { | |
| var argOop; | |
| var floatArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgInt && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (wordsRcvr[i] + intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] + floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] + intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] + floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveAndByteArray() { | |
| var i; | |
| var length; | |
| var length1; | |
| var length2; | |
| var otherArray; | |
| var otherOop; | |
| var rcvrArray; | |
| var rcvrOop; | |
| /* inline: true */; | |
| otherOop = interpreterProxy.stackObjectValue(0); | |
| rcvrOop = interpreterProxy.stackValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isBytes(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(otherOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length1 = SIZEOF(rcvrOop); | |
| length2 = SIZEOF(otherOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = length1; | |
| if (length1 > length2) { | |
| length = length2; | |
| } | |
| otherArray = otherOop.bytes; | |
| rcvrArray = rcvrOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| rcvrArray[i] = ((rcvrArray[i] + otherArray[i]) === 2); | |
| } | |
| interpreterProxy.pop(1); | |
| } | |
| function primitiveDivArrays() { | |
| var argOop; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgWords && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (wordsRcvr[i] / wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] / floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] / wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] / floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveDivScalar() { | |
| var argOop; | |
| var floatArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgInt && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (DIV(wordsRcvr[i], intArg)); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] / floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] / intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] / floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveEQArrays() { | |
| var argOop; | |
| var bytesResult; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] === wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] === floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] === wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] === floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveEQScalar() { | |
| var argOop; | |
| var bytesResult; | |
| var floatArg; | |
| var floatsRcvr; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] === intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] === floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] === intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] === floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveGEArrays() { | |
| var argOop; | |
| var bytesResult; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] >= wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] >= floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] >= wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] >= floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveGEScalar() { | |
| var argOop; | |
| var bytesResult; | |
| var floatArg; | |
| var floatsRcvr; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] >= intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] >= floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] >= intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] >= floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveGTArrays() { | |
| var argOop; | |
| var bytesResult; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] > wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] > floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] > wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] > floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveGTScalar() { | |
| var argOop; | |
| var bytesResult; | |
| var floatArg; | |
| var floatsRcvr; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] > intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] > floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] > intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] > floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveLEArrays() { | |
| var argOop; | |
| var bytesResult; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] <= wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] <= floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] <= wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] <= floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveLEScalar() { | |
| var argOop; | |
| var bytesResult; | |
| var floatArg; | |
| var floatsRcvr; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] <= intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] <= floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] <= intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] <= floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveLTArrays() { | |
| var argOop; | |
| var bytesResult; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] < wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] < floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] < wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] < floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveLTScalar() { | |
| var argOop; | |
| var bytesResult; | |
| var floatArg; | |
| var floatsRcvr; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] < intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] < floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] < intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] < floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveMulArrays() { | |
| var argOop; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgWords && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (wordsRcvr[i] * wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] * floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] * wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] * floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveMulScalar() { | |
| var argOop; | |
| var floatArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgInt && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (wordsRcvr[i] * intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] * floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] * intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] * floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveNEArrays() { | |
| var argOop; | |
| var bytesResult; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] !== wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] !== floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] !== wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] !== floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveNEScalar() { | |
| var argOop; | |
| var bytesResult; | |
| var floatArg; | |
| var floatsRcvr; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] !== intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (wordsRcvr[i] !== floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] !== intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| bytesResult = resultOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| bytesResult[i] = (floatsRcvr[i] !== floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveNotByteArray() { | |
| var i; | |
| var length; | |
| var rcvrArray; | |
| var rcvrOop; | |
| /* inline: true */; | |
| rcvrOop = interpreterProxy.stackValue(0); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isBytes(rcvrOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| rcvrArray = rcvrOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| if (rcvrArray[i] === 0) { | |
| rcvrArray[i] = 1; | |
| } else { | |
| rcvrArray[i] = 0; | |
| } | |
| } | |
| } | |
| function primitiveOrByteArray() { | |
| var i; | |
| var length; | |
| var length1; | |
| var length2; | |
| var otherArray; | |
| var otherOop; | |
| var rcvrArray; | |
| var rcvrOop; | |
| /* inline: true */; | |
| otherOop = interpreterProxy.stackObjectValue(0); | |
| rcvrOop = interpreterProxy.stackValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isBytes(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isBytes(otherOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length1 = SIZEOF(rcvrOop); | |
| length2 = SIZEOF(otherOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = length1; | |
| if (length1 > length2) { | |
| length = length2; | |
| } | |
| otherArray = otherOop.bytes; | |
| rcvrArray = rcvrOop.bytes; | |
| for (i = 0; i <= (length - 1); i++) { | |
| rcvrArray[i] = ((rcvrArray[i] + otherArray[i]) > 0); | |
| } | |
| interpreterProxy.pop(1); | |
| } | |
| function primitivePredicateAtAllPutBoolean() { | |
| var i; | |
| var predicates; | |
| var predicatesOop; | |
| var rcvrOop; | |
| var val; | |
| var valOop; | |
| var values; | |
| var valuesOop; | |
| /* inline: true */; | |
| valOop = interpreterProxy.stackValue(0); | |
| rcvrOop = interpreterProxy.stackObjectValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (interpreterProxy.isIntegerValue(valOop)) { | |
| val = valOop; | |
| } else { | |
| val = interpreterProxy.booleanValueOf(valOop); | |
| } | |
| valuesOop = interpreterProxy.fetchPointerofObject(1, rcvrOop); | |
| predicatesOop = interpreterProxy.fetchPointerofObject(0, rcvrOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(predicatesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(valuesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| values = valuesOop.bytes; | |
| predicates = predicatesOop.bytes; | |
| for (i = 0; i <= (SIZEOF(valuesOop) - 1); i++) { | |
| if (predicates[i] === 1) { | |
| values[i] = val; | |
| } | |
| } | |
| interpreterProxy.pop(1); | |
| } | |
| function primitivePredicateAtAllPutColor() { | |
| var i; | |
| var predicates; | |
| var predicatesOop; | |
| var rcvrOop; | |
| var val; | |
| var values; | |
| var valuesOop; | |
| /* inline: true */; | |
| val = interpreterProxy.stackIntegerValue(0); | |
| rcvrOop = interpreterProxy.stackObjectValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| val = val | 4278190080; | |
| valuesOop = interpreterProxy.fetchPointerofObject(1, rcvrOop); | |
| predicatesOop = interpreterProxy.fetchPointerofObject(0, rcvrOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(predicatesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(valuesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| values = valuesOop.words; | |
| predicates = predicatesOop.bytes; | |
| for (i = 0; i <= (SIZEOF(valuesOop) - 1); i++) { | |
| if (predicates[i] === 1) { | |
| values[i] = val; | |
| } | |
| } | |
| interpreterProxy.pop(1); | |
| } | |
| function primitivePredicateAtAllPutNumber() { | |
| var i; | |
| var predicates; | |
| var predicatesOop; | |
| var rcvrOop; | |
| var val; | |
| var values; | |
| var valuesOop; | |
| /* inline: true */; | |
| val = interpreterProxy.stackFloatValue(0); | |
| rcvrOop = interpreterProxy.stackObjectValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| valuesOop = interpreterProxy.fetchPointerofObject(1, rcvrOop); | |
| predicatesOop = interpreterProxy.fetchPointerofObject(0, rcvrOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(predicatesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(valuesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| values = valuesOop.wordsAsFloat32Array(); | |
| predicates = predicatesOop.bytes; | |
| for (i = 0; i <= (SIZEOF(valuesOop) - 1); i++) { | |
| if (predicates[i] === 1) { | |
| values[i] = val; | |
| } | |
| } | |
| interpreterProxy.pop(1); | |
| } | |
| function primitivePredicateAtAllPutObject() { | |
| var i; | |
| var predicates; | |
| var predicatesOop; | |
| var rcvrOop; | |
| var valOop; | |
| var values; | |
| var valuesOop; | |
| /* inline: true */; | |
| valOop = interpreterProxy.stackValue(0); | |
| rcvrOop = interpreterProxy.stackObjectValue(1); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| valuesOop = interpreterProxy.fetchPointerofObject(1, rcvrOop); | |
| predicatesOop = interpreterProxy.fetchPointerofObject(0, rcvrOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(predicatesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isPointers(valuesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| values = valuesOop.wordsAsInt32Array(); | |
| predicates = predicatesOop.bytes; | |
| for (i = 0; i <= (SIZEOF(valuesOop) - 1); i++) { | |
| if (predicates[i] === 1) { | |
| values[i] = valOop; | |
| } | |
| } | |
| interpreterProxy.pop(1); | |
| } | |
| function primitivePredicateReplaceBytes() { | |
| var i; | |
| var predicates; | |
| var predicatesOop; | |
| var predicatesSize; | |
| var rcvrOop; | |
| var repOop; | |
| var repStart; | |
| var replacement; | |
| var replacementSize; | |
| var start; | |
| var stop; | |
| var values; | |
| var valuesOop; | |
| var valuesSize; | |
| /* inline: true */; | |
| repStart = interpreterProxy.stackIntegerValue(0); | |
| repOop = interpreterProxy.stackObjectValue(1); | |
| stop = interpreterProxy.stackIntegerValue(2); | |
| start = interpreterProxy.stackIntegerValue(3); | |
| rcvrOop = interpreterProxy.stackObjectValue(4); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| valuesOop = interpreterProxy.fetchPointerofObject(1, rcvrOop); | |
| predicatesOop = interpreterProxy.fetchPointerofObject(0, rcvrOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(predicatesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!(interpreterProxy.isBytes(valuesOop) && (interpreterProxy.isBytes(repOop)))) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| values = valuesOop.bytes; | |
| predicates = predicatesOop.bytes; | |
| replacement = repOop.bytes; | |
| valuesSize = SIZEOF(valuesOop); | |
| predicatesSize = SIZEOF(predicatesOop); | |
| replacementSize = SIZEOF(repOop); | |
| if (start > stop) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (start < 1) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (start > valuesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (start > predicatesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (stop > valuesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (stop > predicatesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (repStart < 1) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (repStart > replacementSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (((replacementSize - repStart) + 1) < ((stop - start) + 1)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| for (i = (start - 1); i <= (stop - 1); i++) { | |
| if (predicates[i] === 1) { | |
| values[i] = replacement[(repStart + i) - start]; | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| } | |
| function primitivePredicateReplaceWords() { | |
| var floatReplacement; | |
| var floatValues; | |
| var fv; | |
| var i; | |
| var predicates; | |
| var predicatesOop; | |
| var predicatesSize; | |
| var rIsFloat; | |
| var rcvrOop; | |
| var repOop; | |
| var repStart; | |
| var replacement; | |
| var replacementSize; | |
| var start; | |
| var stop; | |
| var vIsFloat; | |
| var values; | |
| var valuesOop; | |
| var valuesSize; | |
| /* inline: true */; | |
| repStart = interpreterProxy.stackIntegerValue(0); | |
| repOop = interpreterProxy.stackObjectValue(1); | |
| stop = interpreterProxy.stackIntegerValue(2); | |
| start = interpreterProxy.stackIntegerValue(3); | |
| rcvrOop = interpreterProxy.stackObjectValue(4); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| valuesOop = interpreterProxy.fetchPointerofObject(1, rcvrOop); | |
| predicatesOop = interpreterProxy.fetchPointerofObject(0, rcvrOop); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(predicatesOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!((interpreterProxy.isWords(valuesOop) && (interpreterProxy.isWords(repOop))) || (interpreterProxy.isPointers(valuesOop) && (interpreterProxy.isPointers(repOop))))) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| predicates = predicatesOop.bytes; | |
| valuesSize = SIZEOF(valuesOop); | |
| predicatesSize = SIZEOF(predicatesOop); | |
| replacementSize = SIZEOF(repOop); | |
| if (start > stop) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (start < 1) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (start > valuesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (start > predicatesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (stop > valuesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (stop > predicatesSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (repStart < 1) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (repStart > replacementSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (((replacementSize - repStart) + 1) < ((stop - start) + 1)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| vIsFloat = interpreterProxy.isMemberOf(valuesOop, "KedamaFloatArray"); | |
| rIsFloat = interpreterProxy.isMemberOf(repOop, "KedamaFloatArray"); | |
| if (vIsFloat && (rIsFloat)) { | |
| floatValues = valuesOop.wordsAsFloat32Array(); | |
| floatReplacement = repOop.wordsAsFloat32Array(); | |
| for (i = (start - 1); i <= (stop - 1); i++) { | |
| if (predicates[i] === 1) { | |
| floatValues[i] = floatReplacement[(repStart + i) - start]; | |
| } | |
| } | |
| } | |
| if (vIsFloat && (!rIsFloat)) { | |
| floatValues = valuesOop.wordsAsFloat32Array(); | |
| replacement = repOop.words; | |
| for (i = (start - 1); i <= (stop - 1); i++) { | |
| if (predicates[i] === 1) { | |
| floatValues[i] = replacement[(repStart + i) - start]; | |
| } | |
| } | |
| } | |
| if (!vIsFloat && (rIsFloat)) { | |
| values = valuesOop.words; | |
| floatReplacement = repOop.wordsAsFloat32Array(); | |
| for (i = (start - 1); i <= (stop - 1); i++) { | |
| if (predicates[i] === 1) { | |
| fv = (floatReplacement[(repStart + i) - start]>>>0); | |
| ; | |
| values[i] = fv; | |
| } | |
| } | |
| } | |
| if (!vIsFloat && (!rIsFloat)) { | |
| values = valuesOop.words; | |
| replacement = repOop.words; | |
| for (i = (start - 1); i <= (stop - 1); i++) { | |
| if (predicates[i] === 1) { | |
| values[i] = replacement[(repStart + i) - start]; | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| } | |
| function primitiveRemArrays() { | |
| var argOop; | |
| var floatArg; | |
| var floatRcvr; | |
| var floatResult; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordArg; | |
| var wordRcvr; | |
| var wordResult; | |
| var wordsArg; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgWords && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordRcvr = wordsRcvr[i]; | |
| wordArg = wordsArg[i]; | |
| /* In this primitive, words are supposed to be unsigned. */ | |
| wordResult = MOD(wordRcvr, wordArg); | |
| wordsResult[i] = wordResult; | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordRcvr = wordsRcvr[i]; | |
| floatArg = floatsArg[i]; | |
| floatResult = wordRcvr / floatArg; | |
| floatResult = Math.floor(floatResult); | |
| floatsResult[i] = (wordRcvr - (floatResult * floatArg)); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatRcvr = floatsRcvr[i]; | |
| wordArg = wordsArg[i]; | |
| floatResult = floatRcvr / wordArg; | |
| floatResult = Math.floor(floatResult); | |
| floatsResult[i] = (floatRcvr - (floatResult * wordArg)); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatRcvr = floatsRcvr[i]; | |
| floatArg = floatsArg[i]; | |
| floatResult = floatRcvr / floatArg; | |
| floatResult = Math.floor(floatResult); | |
| floatsResult[i] = (floatRcvr - (floatResult * floatArg)); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveRemScalar() { | |
| var argOop; | |
| var floatArg; | |
| var floatRcvr; | |
| var floatResult; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordRcvr; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgInt && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (MOD(wordsRcvr[i], intArg)); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordRcvr = wordsRcvr[i]; | |
| floatResult = wordRcvr / floatArg; | |
| floatResult = Math.floor(floatResult); | |
| floatsResult[i] = (wordRcvr - (floatResult * floatArg)); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatRcvr = floatsRcvr[i]; | |
| floatResult = floatRcvr / intArg; | |
| floatResult = Math.floor(floatResult); | |
| floatsResult[i] = (floatRcvr - (floatResult * intArg)); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatRcvr = floatsRcvr[i]; | |
| floatResult = floatRcvr / floatArg; | |
| floatResult = Math.floor(floatResult); | |
| floatsResult[i] = (floatRcvr - (floatResult * floatArg)); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveSubArrays() { | |
| var argOop; | |
| var floatsArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var isArgWords; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsArg; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackObjectValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(argOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(argOop); | |
| interpreterProxy.success(length === SIZEOF(rcvrOop)); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgWords = interpreterProxy.isMemberOf(argOop, "WordArray"); | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgWords && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgWords) { | |
| wordsRcvr = rcvrOop.words; | |
| wordsArg = argOop.words; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (wordsRcvr[i] - wordsArg[i]); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] - floatsArg[i]); | |
| } | |
| } | |
| } else { | |
| if (isArgWords) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| wordsArg = argOop.words; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] - wordsArg[i]); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatsArg = argOop.wordsAsFloat32Array(); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] - floatsArg[i]); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function primitiveSubScalar() { | |
| var argOop; | |
| var floatArg; | |
| var floatsRcvr; | |
| var floatsResult; | |
| var i; | |
| var intArg; | |
| var isArgInt; | |
| var isRcvrWords; | |
| var length; | |
| var rcvrOop; | |
| var resultOop; | |
| var wordsRcvr; | |
| var wordsResult; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackObjectValue(0); | |
| argOop = interpreterProxy.stackValue(1); | |
| rcvrOop = interpreterProxy.stackObjectValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.success(interpreterProxy.isWords(rcvrOop)); | |
| interpreterProxy.success(interpreterProxy.isWords(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| length = SIZEOF(rcvrOop); | |
| interpreterProxy.success(length === SIZEOF(resultOop)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| isArgInt = typeof argOop === "number"; | |
| isRcvrWords = interpreterProxy.isMemberOf(rcvrOop, "WordArray"); | |
| if (isArgInt && isRcvrWords) { | |
| if (!interpreterProxy.isMemberOf(resultOop, "WordArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (!interpreterProxy.isMemberOf(resultOop, "KedamaFloatArray")) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| if (isRcvrWords) { | |
| if (isArgInt) { | |
| wordsRcvr = rcvrOop.words; | |
| intArg = argOop; | |
| wordsResult = resultOop.words; | |
| for (i = 0; i <= (length - 1); i++) { | |
| wordsResult[i] = (wordsRcvr[i] - intArg); | |
| } | |
| } else { | |
| wordsRcvr = rcvrOop.words; | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (wordsRcvr[i] - floatArg); | |
| } | |
| } | |
| } else { | |
| if (isArgInt) { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| intArg = argOop; | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] - intArg); | |
| } | |
| } else { | |
| floatsRcvr = rcvrOop.wordsAsFloat32Array(); | |
| floatArg = interpreterProxy.floatValueOf(argOop); | |
| floatsResult = resultOop.wordsAsFloat32Array(); | |
| for (i = 0; i <= (length - 1); i++) { | |
| floatsResult[i] = (floatsRcvr[i] - floatArg); | |
| } | |
| } | |
| } | |
| interpreterProxy.pop(4); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function radiansToDegrees(radians) { | |
| var deg; | |
| var degrees; | |
| /* inline: true */; | |
| degrees = radians / 0.0174532925199433; | |
| deg = 90.0 - degrees; | |
| if (!(deg > 0.0)) { | |
| deg += 360.0; | |
| } | |
| return deg; | |
| } | |
| function randomIntoFloatArray() { | |
| var factor; | |
| var floatArray; | |
| var floatArrayOop; | |
| var from; | |
| var index; | |
| var range; | |
| var size; | |
| var to; | |
| /* inline: true */; | |
| factor = interpreterProxy.stackFloatValue(0); | |
| floatArrayOop = interpreterProxy.stackValue(1); | |
| to = interpreterProxy.stackIntegerValue(2); | |
| from = interpreterProxy.stackIntegerValue(3); | |
| range = interpreterProxy.stackIntegerValue(4); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(floatArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(floatArrayOop); | |
| if (!((size >= to) && ((from >= 1) && (to >= from)))) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| floatArray = floatArrayOop.wordsAsFloat32Array(); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| for (index = from; index <= to; index++) { | |
| floatArray[index - 1] = (kedamaRandom2(range) * factor); | |
| } | |
| interpreterProxy.pop(5); | |
| } | |
| function randomIntoIntegerArray() { | |
| var factor; | |
| var from; | |
| var index; | |
| var integerArray; | |
| var integerArrayOop; | |
| var range; | |
| var size; | |
| var to; | |
| /* inline: true */; | |
| factor = interpreterProxy.stackFloatValue(0); | |
| integerArrayOop = interpreterProxy.stackValue(1); | |
| to = interpreterProxy.stackIntegerValue(2); | |
| from = interpreterProxy.stackIntegerValue(3); | |
| range = interpreterProxy.stackIntegerValue(4); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(integerArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(integerArrayOop); | |
| if (!((size >= to) && ((from >= 1) && (to >= from)))) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| integerArray = integerArrayOop.words; | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| for (index = from; index <= to; index++) { | |
| integerArray[index - 1] = ((kedamaRandom2(range) * factor)|0); | |
| } | |
| interpreterProxy.pop(5); | |
| } | |
| function randomRange() { | |
| var range; | |
| var ret; | |
| /* inline: true */; | |
| range = interpreterProxy.stackIntegerValue(0); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| ret = kedamaRandom2(range); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(2); | |
| interpreterProxy.pushInteger(ret); | |
| } | |
| function scalarGetAngleTo() { | |
| var fromX; | |
| var fromY; | |
| var r; | |
| var toX; | |
| var toY; | |
| var x; | |
| var y; | |
| /* inline: true */; | |
| fromY = interpreterProxy.stackFloatValue(0); | |
| fromX = interpreterProxy.stackFloatValue(1); | |
| toY = interpreterProxy.stackFloatValue(2); | |
| toX = interpreterProxy.stackFloatValue(3); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| x = toX - fromX; | |
| y = toY - fromY; | |
| r = degreesFromXy(x, y); | |
| r += 90.0; | |
| if (r > 360.0) { | |
| r -= 360.0; | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(5); | |
| interpreterProxy.pushFloat(r); | |
| } | |
| function scalarGetDistanceTo() { | |
| var fromX; | |
| var fromY; | |
| var r; | |
| var toX; | |
| var toY; | |
| var x; | |
| var y; | |
| /* inline: true */; | |
| fromY = interpreterProxy.stackFloatValue(0); | |
| fromX = interpreterProxy.stackFloatValue(1); | |
| toY = interpreterProxy.stackFloatValue(2); | |
| toX = interpreterProxy.stackFloatValue(3); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| x = fromX - toX; | |
| y = fromY - toY; | |
| r = Math.sqrt((x * x) + (y * y)); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(5); | |
| interpreterProxy.pushFloat(r); | |
| } | |
| function scalarXAtxArrayheadingArrayvaluedestWidthleftEdgeModerightEdgeMode(index, xArray, headingArray, val, destWidth, leftEdgeMode, rightEdgeMode) { | |
| var headingRadians; | |
| var newX; | |
| /* inline: true */; | |
| newX = val; | |
| if (newX < 0.0) { | |
| if (leftEdgeMode === 1) { | |
| /* wrap */ | |
| newX += destWidth; | |
| } | |
| if (leftEdgeMode === 2) { | |
| /* stick */ | |
| newX = 0.0; | |
| } | |
| if (leftEdgeMode === 3) { | |
| /* bounce */ | |
| newX = 0.0 - newX; | |
| headingRadians = headingArray[index]; | |
| if (headingRadians < 3.141592653589793) { | |
| headingArray[index] = (3.141592653589793 - headingRadians); | |
| } else { | |
| headingArray[index] = (9.42477796076938 - headingRadians); | |
| } | |
| } | |
| } | |
| if (newX >= destWidth) { | |
| if (rightEdgeMode === 1) { | |
| newX -= destWidth; | |
| } | |
| if (rightEdgeMode === 2) { | |
| newX = destWidth - 1.0e-6; | |
| } | |
| if (rightEdgeMode === 3) { | |
| newX = (destWidth - 1.0e-6) - (newX - destWidth); | |
| headingRadians = headingArray[index]; | |
| if (headingRadians < 3.141592653589793) { | |
| headingArray[index] = (3.141592653589793 - headingRadians); | |
| } else { | |
| headingArray[index] = (9.42477796076938 - headingRadians); | |
| } | |
| } | |
| } | |
| xArray[index] = newX; | |
| } | |
| function scalarYAtyArrayheadingArrayvaluedestHeighttopEdgeModebottomEdgeMode(index, yArray, headingArray, val, destHeight, topEdgeMode, bottomEdgeMode) { | |
| var newY; | |
| /* inline: true */; | |
| newY = val; | |
| if (newY < 0.0) { | |
| if (topEdgeMode === 1) { | |
| /* wrap */ | |
| newY += destHeight; | |
| } | |
| if (topEdgeMode === 2) { | |
| /* stick */ | |
| newY = 0.0; | |
| } | |
| if (topEdgeMode === 3) { | |
| /* bounce */ | |
| newY = 0.0 - newY; | |
| headingArray[index] = (6.283185307179586 - headingArray[index]); | |
| } | |
| } | |
| if (newY >= destHeight) { | |
| if (bottomEdgeMode === 1) { | |
| newY -= destHeight; | |
| } | |
| if (bottomEdgeMode === 2) { | |
| newY = destHeight - 1.0e-6; | |
| } | |
| if (bottomEdgeMode === 3) { | |
| newY = (destHeight - 1.0e-6) - (newY - destHeight); | |
| headingArray[index] = (6.283185307179586 - headingArray[index]); | |
| } | |
| } | |
| yArray[index] = newY; | |
| } | |
| function setHeadingArrayFrom() { | |
| var heading; | |
| var headingArray; | |
| var headingOop; | |
| var i; | |
| var isValVector; | |
| var pArray; | |
| var pOop; | |
| var resultArray; | |
| var resultOop; | |
| var size; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackValue(0); | |
| headingOop = interpreterProxy.stackValue(1); | |
| pOop = interpreterProxy.stackValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(pOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(headingOop); | |
| if (resultOop.isFloat) { | |
| isValVector = false; | |
| } else { | |
| if (interpreterProxy.isWords(resultOop)) { | |
| if (SIZEOF(resultOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| isValVector = true; | |
| } else { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| pArray = pOop.bytes; | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| if (isValVector) { | |
| resultArray = resultOop.wordsAsFloat32Array(); | |
| } else { | |
| heading = interpreterProxy.floatValueOf(resultOop); | |
| heading = degreesToRadians(heading); | |
| } | |
| for (i = 0; i <= (size - 1); i++) { | |
| if (pArray[i] === 1) { | |
| if (isValVector) { | |
| heading = resultArray[i]; | |
| heading = degreesToRadians(heading); | |
| } | |
| headingArray[i] = heading; | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(3); | |
| } | |
| /* Note: This is coded so that is can be run from Squeak. */ | |
| function setInterpreter(anInterpreter) { | |
| var ok; | |
| interpreterProxy = anInterpreter; | |
| ok = interpreterProxy.majorVersion() == VM_PROXY_MAJOR; | |
| if (ok === false) { | |
| return false; | |
| } | |
| ok = interpreterProxy.minorVersion() >= VM_PROXY_MINOR; | |
| return ok; | |
| } | |
| function setScalarHeading() { | |
| var heading; | |
| var headingArray; | |
| var headingOop; | |
| var index; | |
| /* inline: true */; | |
| heading = interpreterProxy.stackFloatValue(0); | |
| headingOop = interpreterProxy.stackValue(1); | |
| index = interpreterProxy.stackIntegerValue(2); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(headingOop) < index) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| headingArray[index - 1] = degreesToRadians(heading); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(3); | |
| } | |
| function shutdownModule() { | |
| return true; | |
| } | |
| function turtleScalarSetX() { | |
| var destWidth; | |
| var headingArray; | |
| var headingOop; | |
| var leftEdgeMode; | |
| var rightEdgeMode; | |
| var size; | |
| var val; | |
| var xArray; | |
| var xIndex; | |
| var xOop; | |
| /* inline: true */; | |
| rightEdgeMode = interpreterProxy.stackIntegerValue(0); | |
| leftEdgeMode = interpreterProxy.stackIntegerValue(1); | |
| destWidth = interpreterProxy.stackFloatValue(2); | |
| val = interpreterProxy.stackFloatValue(3); | |
| headingOop = interpreterProxy.stackValue(4); | |
| xIndex = interpreterProxy.stackIntegerValue(5); | |
| xOop = interpreterProxy.stackValue(6); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(xOop); | |
| if (SIZEOF(headingOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| xArray = xOop.wordsAsFloat32Array(); | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| scalarXAtxArrayheadingArrayvaluedestWidthleftEdgeModerightEdgeMode(xIndex - 1, xArray, headingArray, val, destWidth, leftEdgeMode, rightEdgeMode); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(7); | |
| } | |
| function turtleScalarSetY() { | |
| var bottomEdgeMode; | |
| var destHeight; | |
| var headingArray; | |
| var headingOop; | |
| var size; | |
| var topEdgeMode; | |
| var val; | |
| var yArray; | |
| var yIndex; | |
| var yOop; | |
| /* inline: true */; | |
| bottomEdgeMode = interpreterProxy.stackIntegerValue(0); | |
| topEdgeMode = interpreterProxy.stackIntegerValue(1); | |
| destHeight = interpreterProxy.stackFloatValue(2); | |
| val = interpreterProxy.stackFloatValue(3); | |
| headingOop = interpreterProxy.stackValue(4); | |
| yIndex = interpreterProxy.stackIntegerValue(5); | |
| yOop = interpreterProxy.stackValue(6); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(yOop); | |
| if (SIZEOF(headingOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| yArray = yOop.wordsAsFloat32Array(); | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| scalarYAtyArrayheadingArrayvaluedestHeighttopEdgeModebottomEdgeMode(yIndex - 1, yArray, headingArray, val, destHeight, topEdgeMode, bottomEdgeMode); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(7); | |
| } | |
| function turtlesSetX() { | |
| var destWidth; | |
| var headingArray; | |
| var headingOop; | |
| var i; | |
| var isValVector; | |
| var isWordVector; | |
| var leftEdgeMode; | |
| var newX; | |
| var pArray; | |
| var pOop; | |
| var rightEdgeMode; | |
| var size; | |
| var val; | |
| var valArray; | |
| var valOop; | |
| var wordValArray; | |
| var xArray; | |
| var xOop; | |
| /* inline: true */; | |
| rightEdgeMode = interpreterProxy.stackIntegerValue(0); | |
| leftEdgeMode = interpreterProxy.stackIntegerValue(1); | |
| destWidth = interpreterProxy.stackFloatValue(2); | |
| valOop = interpreterProxy.stackValue(3); | |
| headingOop = interpreterProxy.stackValue(4); | |
| xOop = interpreterProxy.stackValue(5); | |
| pOop = interpreterProxy.stackValue(6); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(pOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (valOop.isFloat) { | |
| isValVector = false; | |
| } else { | |
| if (interpreterProxy.isWords(valOop)) { | |
| isValVector = true; | |
| isWordVector = interpreterProxy.isMemberOf(valOop, "WordArray"); | |
| } else { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| size = SIZEOF(xOop); | |
| if (SIZEOF(pOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(headingOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (isValVector) { | |
| if (SIZEOF(valOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| pArray = pOop.bytes; | |
| xArray = xOop.wordsAsFloat32Array(); | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| if (isValVector) { | |
| if (isWordVector) { | |
| wordValArray = valOop.words; | |
| } else { | |
| valArray = valOop.wordsAsFloat32Array(); | |
| } | |
| } else { | |
| val = interpreterProxy.floatValueOf(valOop); | |
| } | |
| for (i = 0; i <= (size - 1); i++) { | |
| if (pArray[i] === 1) { | |
| if (isValVector) { | |
| if (isWordVector) { | |
| newX = wordValArray[i]; | |
| ; | |
| } else { | |
| newX = valArray[i]; | |
| } | |
| } else { | |
| newX = val; | |
| } | |
| scalarXAtxArrayheadingArrayvaluedestWidthleftEdgeModerightEdgeMode(i, xArray, headingArray, newX, destWidth, leftEdgeMode, rightEdgeMode); | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(7); | |
| } | |
| function turtlesSetY() { | |
| var bottomEdgeMode; | |
| var destHeight; | |
| var headingArray; | |
| var headingOop; | |
| var i; | |
| var isValVector; | |
| var isWordVector; | |
| var newY; | |
| var pArray; | |
| var pOop; | |
| var size; | |
| var topEdgeMode; | |
| var val; | |
| var valArray; | |
| var valOop; | |
| var wordValArray; | |
| var yArray; | |
| var yOop; | |
| /* inline: true */; | |
| bottomEdgeMode = interpreterProxy.stackIntegerValue(0); | |
| topEdgeMode = interpreterProxy.stackIntegerValue(1); | |
| destHeight = interpreterProxy.stackFloatValue(2); | |
| valOop = interpreterProxy.stackValue(3); | |
| headingOop = interpreterProxy.stackValue(4); | |
| yOop = interpreterProxy.stackValue(5); | |
| pOop = interpreterProxy.stackValue(6); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isBytes(pOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(headingOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (valOop.isFloat) { | |
| isValVector = false; | |
| } else { | |
| if (interpreterProxy.isWords(valOop)) { | |
| isValVector = true; | |
| isWordVector = interpreterProxy.isMemberOf(valOop, "WordArray"); | |
| } else { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| size = SIZEOF(yOop); | |
| if (SIZEOF(pOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(headingOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (isValVector) { | |
| if (SIZEOF(valOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| pArray = pOop.bytes; | |
| yArray = yOop.wordsAsFloat32Array(); | |
| headingArray = headingOop.wordsAsFloat32Array(); | |
| if (isValVector) { | |
| if (isWordVector) { | |
| wordValArray = valOop.words; | |
| } else { | |
| valArray = valOop.wordsAsFloat32Array(); | |
| } | |
| } else { | |
| val = interpreterProxy.floatValueOf(valOop); | |
| } | |
| for (i = 0; i <= (size - 1); i++) { | |
| if (pArray[i] === 1) { | |
| if (isValVector) { | |
| if (isWordVector) { | |
| newY = wordValArray[i]; | |
| ; | |
| } else { | |
| newY = valArray[i]; | |
| } | |
| } else { | |
| newY = val; | |
| } | |
| scalarYAtyArrayheadingArrayvaluedestHeighttopEdgeModebottomEdgeMode(i, yArray, headingArray, newY, destHeight, topEdgeMode, bottomEdgeMode); | |
| } | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(7); | |
| } | |
| function vectorGetAngleTo() { | |
| var index; | |
| var isVector; | |
| var pX; | |
| var pXOop; | |
| var pY; | |
| var pYOop; | |
| var ppx; | |
| var ppy; | |
| var r; | |
| var result; | |
| var resultOop; | |
| var size; | |
| var x; | |
| var xArray; | |
| var xArrayOop; | |
| var y; | |
| var yArray; | |
| var yArrayOop; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackValue(0); | |
| yArrayOop = interpreterProxy.stackValue(1); | |
| xArrayOop = interpreterProxy.stackValue(2); | |
| pYOop = interpreterProxy.stackValue(3); | |
| pXOop = interpreterProxy.stackValue(4); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(resultOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(resultOop); | |
| if (size < 0) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(xArrayOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(yArrayOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (pXOop.isFloat) { | |
| if (pYOop.isFloat) { | |
| isVector = false; | |
| } else { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (pYOop.isFloat) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } else { | |
| isVector = true; | |
| } | |
| } | |
| if (isVector) { | |
| if (SIZEOF(pXOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(pYOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| result = resultOop.wordsAsFloat32Array(); | |
| xArray = xArrayOop.wordsAsFloat32Array(); | |
| yArray = yArrayOop.wordsAsFloat32Array(); | |
| if (isVector) { | |
| pX = pXOop.wordsAsFloat32Array(); | |
| pY = pYOop.wordsAsFloat32Array(); | |
| } | |
| if (!isVector) { | |
| ppx = interpreterProxy.floatValueOf(pXOop); | |
| ppy = interpreterProxy.floatValueOf(pYOop); | |
| } | |
| for (index = 0; index <= (size - 1); index++) { | |
| if (isVector) { | |
| ppx = pX[index]; | |
| ppy = pY[index]; | |
| } | |
| x = ppx - xArray[index]; | |
| y = ppy - yArray[index]; | |
| r = degreesFromXy(x, y); | |
| r += 90.0; | |
| if (r > 360.0) { | |
| r -= 360.0; | |
| } | |
| result[index] = r; | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(6); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function vectorGetDistanceTo() { | |
| var index; | |
| var isVector; | |
| var pX; | |
| var pXOop; | |
| var pY; | |
| var pYOop; | |
| var ppx; | |
| var ppy; | |
| var result; | |
| var resultOop; | |
| var size; | |
| var x; | |
| var xArray; | |
| var xArrayOop; | |
| var y; | |
| var yArray; | |
| var yArrayOop; | |
| /* inline: true */; | |
| resultOop = interpreterProxy.stackValue(0); | |
| yArrayOop = interpreterProxy.stackValue(1); | |
| xArrayOop = interpreterProxy.stackValue(2); | |
| pYOop = interpreterProxy.stackValue(3); | |
| pXOop = interpreterProxy.stackValue(4); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(resultOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(xArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (!interpreterProxy.isWords(yArrayOop)) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| size = SIZEOF(resultOop); | |
| if (size < 0) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(xArrayOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(yArrayOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (pXOop.isFloat) { | |
| if (pYOop.isFloat) { | |
| isVector = false; | |
| } else { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } else { | |
| if (pYOop.isFloat) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } else { | |
| isVector = true; | |
| } | |
| } | |
| if (isVector) { | |
| if (SIZEOF(pXOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (SIZEOF(pYOop) !== size) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| } | |
| result = resultOop.wordsAsFloat32Array(); | |
| xArray = xArrayOop.wordsAsFloat32Array(); | |
| yArray = yArrayOop.wordsAsFloat32Array(); | |
| if (isVector) { | |
| pX = pXOop.wordsAsFloat32Array(); | |
| pY = pYOop.wordsAsFloat32Array(); | |
| } | |
| if (!isVector) { | |
| ppx = interpreterProxy.floatValueOf(pXOop); | |
| ppy = interpreterProxy.floatValueOf(pYOop); | |
| } | |
| for (index = 0; index <= (size - 1); index++) { | |
| if (isVector) { | |
| ppx = pX[index]; | |
| ppy = pY[index]; | |
| } | |
| x = ppx - xArray[index]; | |
| y = ppy - yArray[index]; | |
| result[index] = Math.sqrt((x * x) + (y * y)); | |
| } | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| interpreterProxy.pop(6); | |
| interpreterProxy.push(resultOop); | |
| } | |
| function zoomBitmap() { | |
| var bit; | |
| var dOrigin; | |
| var dst; | |
| var dstIndex; | |
| var dstSize; | |
| var dummy; | |
| var sHeight; | |
| var sOrigin; | |
| var sWidth; | |
| var src; | |
| var srcIndex; | |
| var srcOrigin; | |
| var srcSize; | |
| var sx; | |
| var sy; | |
| var xFactor; | |
| var y; | |
| var yFactor; | |
| /* inline: true */; | |
| yFactor = interpreterProxy.stackIntegerValue(0); | |
| xFactor = interpreterProxy.stackIntegerValue(1); | |
| sHeight = interpreterProxy.stackIntegerValue(2); | |
| sWidth = interpreterProxy.stackIntegerValue(3); | |
| dst = interpreterProxy.stackValue(4); | |
| src = interpreterProxy.stackValue(5); | |
| if (interpreterProxy.failed()) { | |
| return null; | |
| } | |
| srcSize = SIZEOF(src); | |
| dstSize = SIZEOF(dst); | |
| if ((sWidth * sHeight) !== srcSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| if (((srcSize * xFactor) * yFactor) !== dstSize) { | |
| interpreterProxy.primitiveFail(); | |
| return null; | |
| } | |
| sOrigin = src.words; | |
| dOrigin = dst.words; | |
| srcIndex = 0; | |
| srcOrigin = 0; | |
| dstIndex = 0; | |
| for (sy = 0; sy <= (sHeight - 1); sy++) { | |
| for (y = 0; y <= (yFactor - 1); y++) { | |
| for (sx = 0; sx <= (sWidth - 1); sx++) { | |
| bit = sOrigin[srcIndex]; | |
| ++srcIndex; | |
| for (dummy = 0; dummy <= (xFactor - 1); dummy++) { | |
| dOrigin[dstIndex] = bit; | |
| ++dstIndex; | |
| } | |
| } | |
| srcIndex = srcOrigin; | |
| } | |
| srcOrigin += sWidth; | |
| srcIndex = srcOrigin; | |
| } | |
| interpreterProxy.pop(6); | |
| } | |
| function registerPlugin() { | |
| if (typeof Squeak === "object" && Squeak.registerExternalModule) { | |
| Squeak.registerExternalModule("KedamaPlugin2", { | |
| primitiveAddArrays: primitiveAddArrays, | |
| getModuleName: getModuleName, | |
| primitiveMulArrays: primitiveMulArrays, | |
| drawTurtlesInArray: drawTurtlesInArray, | |
| primitiveGTScalar: primitiveGTScalar, | |
| setScalarHeading: setScalarHeading, | |
| primitiveSubScalar: primitiveSubScalar, | |
| turtleScalarSetY: turtleScalarSetY, | |
| vectorGetAngleTo: vectorGetAngleTo, | |
| primitiveRemArrays: primitiveRemArrays, | |
| primitiveLTArrays: primitiveLTArrays, | |
| primitiveAddScalar: primitiveAddScalar, | |
| primPixelsAtXY: primPixelsAtXY, | |
| primitiveMulScalar: primitiveMulScalar, | |
| primSetPixelsAtXY: primSetPixelsAtXY, | |
| setHeadingArrayFrom: setHeadingArrayFrom, | |
| primPixelAtXYPut: primPixelAtXYPut, | |
| makeMaskLog: makeMaskLog, | |
| primitiveLTScalar: primitiveLTScalar, | |
| scalarGetAngleTo: scalarGetAngleTo, | |
| primitiveOrByteArray: primitiveOrByteArray, | |
| primitiveLEArrays: primitiveLEArrays, | |
| primitiveRemScalar: primitiveRemScalar, | |
| getHeadingArrayInto: getHeadingArrayInto, | |
| turtlesSetX: turtlesSetX, | |
| primitivePredicateReplaceBytes: primitivePredicateReplaceBytes, | |
| primitiveDivArrays: primitiveDivArrays, | |
| makeMask: makeMask, | |
| primitiveLEScalar: primitiveLEScalar, | |
| kedamaSetRandomSeed: kedamaSetRandomSeed, | |
| randomIntoIntegerArray: randomIntoIntegerArray, | |
| setInterpreter: setInterpreter, | |
| primitivePredicateAtAllPutColor: primitivePredicateAtAllPutColor, | |
| makeTurtlesMap: makeTurtlesMap, | |
| randomIntoFloatArray: randomIntoFloatArray, | |
| primUpHill: primUpHill, | |
| shutdownModule: shutdownModule, | |
| primitiveDivScalar: primitiveDivScalar, | |
| primitiveGEArrays: primitiveGEArrays, | |
| primitiveNotByteArray: primitiveNotByteArray, | |
| randomRange: randomRange, | |
| initialiseModule: initialiseModule, | |
| getScalarHeading: getScalarHeading, | |
| primPixelAtXY: primPixelAtXY, | |
| primitivePredicateAtAllPutNumber: primitivePredicateAtAllPutNumber, | |
| primitiveEQArrays: primitiveEQArrays, | |
| primitiveNEArrays: primitiveNEArrays, | |
| primScalarForward: primScalarForward, | |
| vectorGetDistanceTo: vectorGetDistanceTo, | |
| turtlesSetY: turtlesSetY, | |
| turtleScalarSetX: turtleScalarSetX, | |
| primTurtlesForward: primTurtlesForward, | |
| primitiveGEScalar: primitiveGEScalar, | |
| primitiveAndByteArray: primitiveAndByteArray, | |
| primitivePredicateReplaceWords: primitivePredicateReplaceWords, | |
| primitiveGTArrays: primitiveGTArrays, | |
| primitivePredicateAtAllPutObject: primitivePredicateAtAllPutObject, | |
| primitiveEQScalar: primitiveEQScalar, | |
| primitivePredicateAtAllPutBoolean: primitivePredicateAtAllPutBoolean, | |
| zoomBitmap: zoomBitmap, | |
| primitiveNEScalar: primitiveNEScalar, | |
| scalarGetDistanceTo: scalarGetDistanceTo, | |
| primitiveSubArrays: primitiveSubArrays, | |
| }); | |
| } else self.setTimeout(registerPlugin, 100); | |
| } | |
| registerPlugin(); | |
| })(); // Register module/plugin | |