UNPKG

minigrace

Version:

A compiler for the Grace programming language

1,077 lines 92.3 kB
let gracecode_turtle_sourceFile = "/Users/black/Development/mg/gracelang/minigrace/modules/turtle.grace"; let gracecode_turtle_sha256 = "4dbcecfe088139475f1131ec4d957a27917081edce6a0b0d41b832904319fbc1"; let gracecode_turtle_minigraceRevision = "b57591d29fc5ee5270d114920bf671367b8c3ecb"; let gracecode_turtle_minigraceGeneration = "5171"; if (typeof gctCache !== "undefined") gctCache["turtle"] = "dialect:\n standard\nfreshScopes:\n $101\nmethodTypes:$100:\n useCanvas(size:Point) \u2192 Unknown\nmodules:\n dom\n intrinsic\n standard\n sys\npath:\n /Users/black/Development/mg/gracelang/minigrace/modules/turtle.grace\nscope:$100:\n asDebugString String (go) $scope_string\n asString String (go) $scope_string\n basicAsString String (go) $scope_string\n black Unknown (def) $scope_done public\n blue Unknown (def) $scope_done public\n createPopupWindow Unknown (mth) $scope_done\n drawTurtle(1) Unknown (mth) $scope_done\n green Unknown (def) $scope_done public\n initialise Unknown (mth) $scope_done\n isMe(1) Boolean (go) $scope_boolean\n move(3) Unknown (mth) $scope_done\n myIdentityHash Number (go) $scope_number\n penDown Unknown (mth) $scope_done\n penUp Unknown (mth) $scope_done\n r(1)g(1)b(1) Unknown (mth) $101\n red Unknown (def) $scope_done public\n speed Unknown (var) $scopeEmpty public\n speed:=(1) Unknown (var) $scopeEmpty public\n start Unknown (mth) $scope_done\n turnLeft(1) Unknown (mth) $scope_done\n turnRight(1) Unknown (mth) $scope_done\n turtlePosition Unknown (mth) $scope_done\n useCanvas(1) Unknown (mth) $scope_done\nscope:$101:\n asDebugString String (go) $scope_string\n asString String (go) $scope_string\n b Unknown (def) $scopeEmpty readable\n basicAsString String (go) $scope_string\n g Unknown (def) $scopeEmpty readable\n isMe(1) Boolean (go) $scope_boolean\n myIdentityHash Number (go) $scope_number\n r Unknown (def) $scopeEmpty readable\nself:\n $100\ntypes:\n"; if (typeof originalSourceLines !== "undefined") { originalSourceLines["turtle"] = [ "dialect \"standard\"", "import \"dom\" as dom", "import \"sys\" as sys", "import \"intrinsic\" as intrinsic", "", "// These are vars to allow updating them only when \"start\" runs", "var document", "var canvas", "var ctx", "var theWindow", "var canvasElement", "var useCanvas", "", "class r(r')g(g')b(b') {", " def r is readable = r'", " def g is readable = g'", " def b is readable = b'", "}", "def black is public = r 0 g 0 b 0", "def blue is public = r 0 g 0 b 255", "def green is public = r 0 g 255 b 0", "def red is public = r 255 g 0 b 0", "", "var x", "var y", "var started := false", "var maxActionsDrawn := -1", "var delay := 1", "var usePopup := false", "var windowHeight := 700", "var windowWidth := 850", "", "var speed is public := 1", "", "var turtleAngle is readable := 0", "", "method turtlePosition {", " initialise", " x@y", "}", "", "// Each frame of the image is a step", "def steps = list []", "", "method drawTurtle(angle) {", " initialise", " def mctx = canvas.getContext \"2d\"", " def triangleSize = 30", " def x' = x + (angle / 180 * π).sin * triangleSize / 2", " def y' = y - (angle / 180 * π).cos * triangleSize / 2", " mctx.beginPath", " mctx.fillStyle := \"rgb(0, 128, 0)\"", " mctx.lineWidth := 3", " mctx.moveTo(x', y')", " mctx.lineTo(x' - ((angle - 75) / 180 * π).cos * triangleSize,", " y' - ((angle - 75) / 180 * π).sin * triangleSize)", " mctx.lineTo(x' + ((angle + 75) / 180 * π).cos * triangleSize,", " y' + ((angle + 75) / 180 * π).sin * triangleSize)", " mctx.lineTo(x', y')", " mctx.fill", " mctx.closePath", "}", "", "var backingCanvas", "var drawingEnabled := true", "", "method move(dist, lineCol, lineWidth) {", " initialise", " def angle = turtleAngle", " def y' = (angle / 180 * π).cos * dist", " def x' = (angle / 180 * π).sin * dist", " def startX = x", " def startY = y", " def startAngle = turtleAngle", " y := y - y'", " x := x + x'", " def mctx = canvas.getContext(\"2d\")", " // One frame for each unit of distance", " for (1..dist.floor) do {i->", " if ((i % speed) == 0) then {", " steps.push {", " def y'' = (angle / 180 * π).cos * i", " def x'' = (angle / 180 * π).sin * i", " mctx.beginPath", " mctx.strokeStyle := \"rgb({lineCol.r}, {lineCol.g}, {lineCol.b})\"", " mctx.lineWidth := lineWidth", " mctx.moveTo(startX, startY)", " y := startY - y''", " x := startX + x''", " if (drawingEnabled) then {", " mctx.lineTo(x, y)", " mctx.stroke", " }", " turtleAngle := startAngle", " }", " }", " }", " steps.push {", " def y'' = (angle / 180 * π).cos * dist", " def x'' = (angle / 180 * π).sin * dist", " ctx.beginPath", " ctx.strokeStyle := \"rgb({lineCol.r}, {lineCol.g}, {lineCol.b})\"", " ctx.lineWidth := lineWidth", " ctx.moveTo(startX, startY)", " y := startY - y''", " x := startX + x''", " if (drawingEnabled) then {", " ctx.lineTo(x, y)", " ctx.stroke", " }", " turtleAngle := startAngle", " }", "}", "method turnRight(ang) {", " initialise", " def startX = x", " def startY = y", " def startAngle = turtleAngle", " for (0..ang.floor) do {i->", " if ((i % speed) == 0) then {", " steps.push {", " x := startX", " y := startY", " turtleAngle := (startAngle + i) % 360", " }", " }", " }", " steps.push {", " x := startX", " y := startY", " turtleAngle := (startAngle + ang) % 360", " }", " turtleAngle := (turtleAngle + ang) % 360", "}", "method turnLeft(ang) {", " initialise", " def startX = x", " def startY = y", " def startAngle = turtleAngle", " for (0..ang.floor) do { i ->", " if ((i % speed) == 0) then {", " steps.push {", " x := startX", " y := startY", " turtleAngle := (startAngle - i) % 360", " }", " }", " }", " steps.push {", " x := startX", " y := startY", " turtleAngle := (startAngle - ang) % 360", " }", " turtleAngle := (turtleAngle - ang) % 360", "}", "method penUp {", " initialise", " steps.push {", " drawingEnabled := false", " }", "}", "method penDown {", " initialise", " steps.push {", " drawingEnabled := true", " }", "}", "var initialised := false", "method initialise {", " if (initialised) then {", " return false", " }", " document := dom.document", "", " def tab = document.getElementById \"tab_canvas\"", " if (dom.noObject != tab) then {", " tab.click", " }", " initialised := true", "", " // Get the canvas: if the user requested a pop-up, use one", " if (usePopup) then {", " createPopupWindow", " } else {", " // Look for the canvas in the embedded web editor", " canvas := document.getElementById \"standard-canvas\"", "", " // Look for the canvas in the web IDE", " if (dom.noObject == canvas) then {", " canvas := document.getElementById \"graphics\"", " }", "", " // If these are not found, use a seperate window", " if (dom.noObject == canvas) then {", " createPopupWindow", " }", " }", "", " ctx := canvas.getContext(\"2d\")", " ctx.lineWidth := 1", " ctx.fillStyle := \"white\"", " ctx.fillRect(0, 0, canvas.width, canvas.height)", " ctx.strokeStyle := \"black\"", " ctx.rect(0, 0, canvas.width, canvas.height)", " ctx.stroke", "", " //Put the cursor in the center", " x := canvas.width/2;", " y := canvas.height/2;", "}", "", "method createPopupWindow {", " // create a pop-up window with a canvas for graphics", " theWindow := dom.window.open(\"\", \"\", \"width={windowWidth}+50, height={windowHeight}+50\")", "", " // check to make sure window is open", " if (intrinsic.inBrowser && (dom.noObject == theWindow)) then {", " print \"Failed to open the graphics window.\\nIs your browser blocking pop-ups?\"", " sys.exit(1)", " }", "", " // set the window attributes", " canvasElement := document.createElement \"canvas\"", " canvasElement.width := windowWidth", " canvasElement.height := windowHeight", " canvasElement.style.alignSelf:= \"center\"", " theWindow.document.body.appendChild(canvasElement)", " theWindow.document.title := \"Logo Graphics\"", "", " // register the window", " if (dom.doesObject(dom.window) haveProperty \"graceRegisterWindow\") then {", " dom.window.graceRegisterWindow(theWindow)", " }", " // set the canvas", " canvas := canvasElement", "}", "", "method start {", " initialise", " // Iterate through the frames of the image and draw them,", " // each separated in time by 10ms. dom.for()waiting()do", " // uses setTimeout internally so it runs asynchronously.", " backingCanvas := dom.document.createElement \"canvas\"", " backingCanvas.height := canvas.height", " backingCanvas.width := canvas.width", " ctx := backingCanvas.getContext \"2d\"", " def mctx = canvas.getContext \"2d\"", " dom.for (steps) waiting (delay) do { step ->", " mctx.fillStyle := \"white\"", " mctx.fillRect(0, 0, canvas.width, canvas.height)", " step.apply", " mctx.drawImage(backingCanvas, 0, 0)", " drawTurtle(turtleAngle)", " }", "}", "", "method useCanvas(size:Point) {", " // API for Logo to signal popup use", " usePopup := true", " windowWidth := size.x", " windowHeight := size.y", "}" ]; } function gracecode_turtle() { importedModules["turtle"] = this; const var_$module = this; this.definitionModule = "turtle"; this.definitionLine = 1; setLineNumber(1); // compilenode dialect // Dialect "standard" const var_$dialect = do_import("standard", gracecode_standard); this.outer = var_$dialect; setLineNumber(2); // compilenode import // Import of "dom" as dom if (typeof gracecode_dom == "undefined") throw new GraceExceptionPacket(EnvironmentExceptionObject, new GraceString("could not find module dom")); var var_dom = do_import("dom", gracecode_dom); var func0 = function(argcv) { // accessor method dom, line 2 const numArgs = arguments.length - 1; if (numArgs > 0) raiseTypeArgError("dom", 0, numArgs - 0); return var_dom; }; // end of method dom this.methods["dom"] = func0; func0.methodName = "dom"; func0.paramCounts = [0]; func0.paramNames = []; func0.definitionLine = 2; func0.definitionModule = "turtle"; func0.debug = "import"; func0.confidential = true; setLineNumber(3); // compilenode import // Import of "sys" as sys if (typeof gracecode_sys == "undefined") throw new GraceExceptionPacket(EnvironmentExceptionObject, new GraceString("could not find module sys")); var var_sys = do_import("sys", gracecode_sys); var func1 = function(argcv) { // accessor method sys, line 3 const numArgs = arguments.length - 1; if (numArgs > 0) raiseTypeArgError("sys", 0, numArgs - 0); return var_sys; }; // end of method sys this.methods["sys"] = func1; func1.methodName = "sys"; func1.paramCounts = [0]; func1.paramNames = []; func1.definitionLine = 3; func1.definitionModule = "turtle"; func1.debug = "import"; func1.confidential = true; setLineNumber(4); // compilenode import // Import of "intrinsic" as intrinsic if (typeof gracecode_intrinsic == "undefined") throw new GraceExceptionPacket(EnvironmentExceptionObject, new GraceString("could not find module intrinsic")); var var_intrinsic = do_import("intrinsic", gracecode_intrinsic); var func2 = function(argcv) { // accessor method intrinsic, line 4 const numArgs = arguments.length - 1; if (numArgs > 0) raiseTypeArgError("intrinsic", 0, numArgs - 0); return var_intrinsic; }; // end of method intrinsic this.methods["intrinsic"] = func2; func2.methodName = "intrinsic"; func2.paramCounts = [0]; func2.paramNames = []; func2.definitionLine = 4; func2.definitionModule = "turtle"; func2.debug = "import"; func2.confidential = true; this.closureKeys = this.closureKeys || []; this.closureKeys.push("outer_turtle_1"); this.outer_turtle_1 = var_$dialect; var func3 = function(argcv, var_r__39__, var_g__39__, var_b__39__) { // method r(_)g(_)b(_), line 14 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 3) && (numArgs !== 3)) { raiseTypeArgError("r(_)g(_)b(_)", 0, numArgs - 3); } var ouc = emptyGraceObject("r(_)g(_)b(_)", "turtle", 14); var ouc_init = this.methods["r(1)g(1)b(1)$build(3)"].call(this, null, var_r__39__, var_g__39__, var_b__39__, ouc, [], []); ouc_init.call(ouc); return ouc; }; // end of method r(_)g(_)b(_) this.methods["r(1)g(1)b(1)"] = func3; func3.methodName = "r(1)g(1)b(1)"; func3.paramCounts = [1, 1, 1]; func3.paramNames = ["r'", "g'", "b'"]; func3.definitionLine = 14; func3.definitionModule = "turtle"; var func4 = function(argcv, var_r__39__, var_g__39__, var_b__39__, inheritingObject, aliases, exclusions) { // method r(_)g(_)b(_)$build(_,_,_), line 14 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 4; if ((numArgs > 3) && (numArgs !== 3)) { raiseTypeArgError("r(_)g(_)b(_)", 0, numArgs - 3); } var obj5_build = function(ignore, var_r__39__, var_g__39__, var_b__39__, outerObj, aliases, exclusions) { this.closureKeys = this.closureKeys || []; this.closureKeys.push("outer_turtle_14"); this.outer_turtle_14 = outerObj; const inheritedExclusions = { }; for (var eix = 0, eLen = exclusions.length; eix < eLen; eix ++) { const exMeth = exclusions[eix]; inheritedExclusions[exMeth] = this.methods[exMeth]; }; this.data.r = undefined; var reader6_r = function() { // reader method r if (this.data.r === undefined) raiseUninitializedVariable("r"); return this.data.r; }; reader6_r.isDef = true; this.methods["r"] = reader6_r; this.data.g = undefined; var reader7_g = function() { // reader method g if (this.data.g === undefined) raiseUninitializedVariable("g"); return this.data.g; }; reader7_g.isDef = true; this.methods["g"] = reader7_g; this.data.b = undefined; var reader8_b = function() { // reader method b if (this.data.b === undefined) raiseUninitializedVariable("b"); return this.data.b; }; reader8_b.isDef = true; this.methods["b"] = reader8_b; const overridenByAliases = { }; for (let aix = 0, aLen = aliases.length; aix < aLen; aix ++) { const a = aliases[aix]; const newNm = a.newName; const oldNm = a.oldName; overridenByAliases[newNm] = this.methods[newNm]; const m = confidentialVersion(overridenByAliases[oldNm] || this.methods[oldNm], newNm); m.definitionLine = 14; m.definitionModule = "turtle"; this.methods[newNm] = m; } for (let exName in inheritedExclusions) { if (inheritedExclusions.hasOwnProperty(exName)) { if (inheritedExclusions[exName]) { this.methods[exName] = inheritedExclusions[exName]; } else { delete this.methods[exName]; } } } var obj5_init = function() { // init of object on line 14 this.data.r = var_r__39__; this.data.g = var_g__39__; this.data.b = var_b__39__; }; return obj5_init; // from compileBuildAndInitFunctions(_)inMethod(_) }; var obj5_init = obj5_build.call(inheritingObject, null, var_r__39__, var_g__39__, var_b__39__, this, aliases, exclusions); return obj5_init; // from compileBuildMethodFor(_)withObjCon(_)inside(_) }; // end of method r(_)g(_)b(_)$build(_,_,_) this.methods["r(1)g(1)b(1)$build(3)"] = func4; func4.methodName = "r(1)g(1)b(1)$build(3)"; func4.paramCounts = [1, 1, 1]; func4.paramNames = ["r'", "g'", "b'"]; func4.definitionLine = 14; func4.definitionModule = "turtle"; var func9 = function(argcv) { // method turtlePosition, line 37 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 0) && (numArgs !== 0)) { raiseTypeArgError("turtlePosition", 0, numArgs - 0); } setLineNumber(38); // compilenode member var call10 = selfRequest(var_$module, "initialise", [0]); setLineNumber(39); // compilenode op if (var_y === undefined) raiseUninitializedVariable("y"); // call case 4: other requests if (var_x === undefined) raiseUninitializedVariable("x"); var term11 = request(var_x, "@(1)", [1], var_y); return term11; }; // end of method turtlePosition this.methods["turtlePosition"] = func9; func9.methodName = "turtlePosition"; func9.paramCounts = [0]; func9.paramNames = []; func9.definitionLine = 37; func9.definitionModule = "turtle"; var func12 = function(argcv, var_angle) { // method drawTurtle(_), line 45 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 1) && (numArgs !== 1)) { raiseTypeArgError("drawTurtle(_)", 0, numArgs - 1); } setLineNumber(46); // compilenode member var call13 = selfRequest(var_$module, "initialise", [0]); setLineNumber(47); // compilenode string var string15 = new GraceString("2d"); // call case 4: other requests if (var_canvas === undefined) raiseUninitializedVariable("canvas"); var call14 = request(var_canvas, "getContext(1)", [1], string15); var var_mctx = call14; setLineNumber(48); // compilenode num var var_triangleSize = new GraceNum(30); setLineNumber(49); // compilenode num // call case 4: other requests if (var_triangleSize === undefined) raiseUninitializedVariable("triangleSize"); // call case 4: other requests // call case 4: other requests var call21 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests var quotient22 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod20 = request(quotient22, "*(1)", [1], call21); var call19 = request(prod20, "sin", [0]); var prod18 = request(call19, "*(1)", [1], var_triangleSize); var quotient17 = request(prod18, "/(1)", [1], new GraceNum(2)); // call case 4: other requests if (var_x === undefined) raiseUninitializedVariable("x"); var sum16 = request(var_x, "+(1)", [1], quotient17); var var_x__39__ = sum16; setLineNumber(50); // compilenode num // call case 4: other requests if (var_triangleSize === undefined) raiseUninitializedVariable("triangleSize"); // call case 4: other requests // call case 4: other requests var call28 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests var quotient29 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod27 = request(quotient29, "*(1)", [1], call28); var call26 = request(prod27, "cos", [0]); var prod25 = request(call26, "*(1)", [1], var_triangleSize); var quotient24 = request(prod25, "/(1)", [1], new GraceNum(2)); // call case 4: other requests if (var_y === undefined) raiseUninitializedVariable("y"); var diff23 = request(var_y, "-(1)", [1], quotient24); var var_y__39__ = diff23; setLineNumber(51); // compilenode member // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call30 = request(var_mctx, "beginPath", [0]); setLineNumber(52); // compilenode string var string32 = new GraceString("rgb(0, 128, 0)"); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call31 = request(var_mctx, "fillStyle:=(1)", [1], string32); setLineNumber(53); // compilenode num // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call33 = request(var_mctx, "lineWidth:=(1)", [1], new GraceNum(3)); setLineNumber(54); // compilenode call if (var_x__39__ === undefined) raiseUninitializedVariable("x'"); if (var_y__39__ === undefined) raiseUninitializedVariable("y'"); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call34 = request(var_mctx, "moveTo(2)", [2], var_x__39__, var_y__39__); setLineNumber(55); // compilenode op if (var_triangleSize === undefined) raiseUninitializedVariable("triangleSize"); // call case 4: other requests // call case 4: other requests var call40 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests // call case 4: other requests var diff42 = request(var_angle, "-(1)", [1], new GraceNum(75)); var quotient41 = request(diff42, "/(1)", [1], new GraceNum(180)); var prod39 = request(quotient41, "*(1)", [1], call40); var call38 = request(prod39, "cos", [0]); var prod37 = request(call38, "*(1)", [1], var_triangleSize); // call case 4: other requests if (var_x__39__ === undefined) raiseUninitializedVariable("x'"); var diff36 = request(var_x__39__, "-(1)", [1], prod37); setLineNumber(56); // compilenode op if (var_triangleSize === undefined) raiseUninitializedVariable("triangleSize"); // call case 4: other requests // call case 4: other requests var call47 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests // call case 4: other requests var diff49 = request(var_angle, "-(1)", [1], new GraceNum(75)); var quotient48 = request(diff49, "/(1)", [1], new GraceNum(180)); var prod46 = request(quotient48, "*(1)", [1], call47); var call45 = request(prod46, "sin", [0]); var prod44 = request(call45, "*(1)", [1], var_triangleSize); // call case 4: other requests if (var_y__39__ === undefined) raiseUninitializedVariable("y'"); var diff43 = request(var_y__39__, "-(1)", [1], prod44); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call35 = request(var_mctx, "lineTo(2)", [2], diff36, diff43); setLineNumber(57); // compilenode op if (var_triangleSize === undefined) raiseUninitializedVariable("triangleSize"); // call case 4: other requests // call case 4: other requests var call55 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests // call case 4: other requests var sum57 = request(var_angle, "+(1)", [1], new GraceNum(75)); var quotient56 = request(sum57, "/(1)", [1], new GraceNum(180)); var prod54 = request(quotient56, "*(1)", [1], call55); var call53 = request(prod54, "cos", [0]); var prod52 = request(call53, "*(1)", [1], var_triangleSize); // call case 4: other requests if (var_x__39__ === undefined) raiseUninitializedVariable("x'"); var sum51 = request(var_x__39__, "+(1)", [1], prod52); setLineNumber(58); // compilenode op if (var_triangleSize === undefined) raiseUninitializedVariable("triangleSize"); // call case 4: other requests // call case 4: other requests var call62 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests // call case 4: other requests var sum64 = request(var_angle, "+(1)", [1], new GraceNum(75)); var quotient63 = request(sum64, "/(1)", [1], new GraceNum(180)); var prod61 = request(quotient63, "*(1)", [1], call62); var call60 = request(prod61, "sin", [0]); var prod59 = request(call60, "*(1)", [1], var_triangleSize); // call case 4: other requests if (var_y__39__ === undefined) raiseUninitializedVariable("y'"); var sum58 = request(var_y__39__, "+(1)", [1], prod59); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call50 = request(var_mctx, "lineTo(2)", [2], sum51, sum58); setLineNumber(59); // compilenode call if (var_x__39__ === undefined) raiseUninitializedVariable("x'"); if (var_y__39__ === undefined) raiseUninitializedVariable("y'"); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call65 = request(var_mctx, "lineTo(2)", [2], var_x__39__, var_y__39__); setLineNumber(60); // compilenode member // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call66 = request(var_mctx, "fill", [0]); setLineNumber(61); // compilenode member // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call67 = request(var_mctx, "closePath", [0]); return call67; }; // end of method drawTurtle(_) this.methods["drawTurtle(1)"] = func12; func12.methodName = "drawTurtle(1)"; func12.paramCounts = [1]; func12.paramNames = ["angle"]; func12.definitionLine = 45; func12.definitionModule = "turtle"; var func68 = function(argcv, var_dist, var_lineCol, var_lineWidth) { // method move(_,_,_), line 67 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 3) && (numArgs !== 3)) { raiseTypeArgError("move(_,_,_)", 0, numArgs - 3); } setLineNumber(68); // compilenode member var call69 = selfRequest(var_$module, "initialise", [0]); setLineNumber(69); // compilenode defdec if (var_turtleAngle === undefined) raiseUninitializedVariable("turtleAngle"); var var_angle = var_turtleAngle; setLineNumber(70); // compilenode op // call case 4: other requests // call case 4: other requests var call73 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests if (var_angle === undefined) raiseUninitializedVariable("angle"); var quotient74 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod72 = request(quotient74, "*(1)", [1], call73); var call71 = request(prod72, "cos", [0]); var prod70 = request(call71, "*(1)", [1], var_dist); var var_y__39__ = prod70; setLineNumber(71); // compilenode op // call case 4: other requests // call case 4: other requests var call78 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests if (var_angle === undefined) raiseUninitializedVariable("angle"); var quotient79 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod77 = request(quotient79, "*(1)", [1], call78); var call76 = request(prod77, "sin", [0]); var prod75 = request(call76, "*(1)", [1], var_dist); var var_x__39__ = prod75; setLineNumber(72); // compilenode defdec if (var_x === undefined) raiseUninitializedVariable("x"); var var_startX = var_x; setLineNumber(73); // compilenode defdec if (var_y === undefined) raiseUninitializedVariable("y"); var var_startY = var_y; setLineNumber(74); // compilenode defdec var var_startAngle = var_turtleAngle; setLineNumber(75); // compilenode op if (var_y__39__ === undefined) raiseUninitializedVariable("y'"); // call case 4: other requests var diff81 = request(var_y, "-(1)", [1], var_y__39__); var call80 = selfRequest(var_$module, "y:=(1)", [1], diff81); setLineNumber(76); // compilenode op if (var_x__39__ === undefined) raiseUninitializedVariable("x'"); // call case 4: other requests var sum83 = request(var_x, "+(1)", [1], var_x__39__); var call82 = selfRequest(var_$module, "x:=(1)", [1], sum83); setLineNumber(77); // compilenode string var string85 = new GraceString("2d"); // call case 4: other requests if (var_canvas === undefined) raiseUninitializedVariable("canvas"); var call84 = request(var_canvas, "getContext(1)", [1], string85); var var_mctx = call84; setLineNumber(79); // compilenode member // call case 4: other requests var call88 = request(var_dist, "floor", [0]); // call case 4: other requests var term87 = request(new GraceNum(1), "..(1)", [1], call88); var block89 = new GraceBlock(this, 79, 1); block89.guard = jsTrue; block89.real = function block89(var_i) { var if90 = GraceDone; setLineNumber(80); // compilenode num // call case 4: other requests if (var_speed === undefined) raiseUninitializedVariable("speed"); // call case 4: other requests var modulus92 = request(var_i, "%(1)", [1], var_speed); var term91 = request(modulus92, "==(1)", [1], new GraceNum(0)); if (Grace_isTrue(term91)) { setLineNumber(81); // compilenode block var block94 = new GraceBlock(this, 81, 0); block94.guard = jsTrue; block94.real = function block94() { setLineNumber(82); // compilenode op // call case 4: other requests // call case 4: other requests var call98 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests if (var_angle === undefined) raiseUninitializedVariable("angle"); var quotient99 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod97 = request(quotient99, "*(1)", [1], call98); var call96 = request(prod97, "cos", [0]); var prod95 = request(call96, "*(1)", [1], var_i); var var_y__39____39__ = prod95; setLineNumber(83); // compilenode op // call case 4: other requests // call case 4: other requests var call103 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests if (var_angle === undefined) raiseUninitializedVariable("angle"); var quotient104 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod102 = request(quotient104, "*(1)", [1], call103); var call101 = request(prod102, "sin", [0]); var prod100 = request(call101, "*(1)", [1], var_i); var var_x__39____39__ = prod100; setLineNumber(84); // compilenode member // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call105 = request(var_mctx, "beginPath", [0]); setLineNumber(85); // compilenode string var string108 = new GraceString(")"); // call case 4: other requests // call case 4: other requests var call110 = request(var_lineCol, "b", [0]); // call case 4: other requests var string112 = new GraceString(", "); // call case 4: other requests // call case 4: other requests var call114 = request(var_lineCol, "g", [0]); // call case 4: other requests var string116 = new GraceString(", "); // call case 4: other requests // call case 4: other requests var call118 = request(var_lineCol, "r", [0]); // call case 4: other requests var string119 = new GraceString("rgb("); var concat117 = request(string119, "++(1)", [1], call118); var concat115 = request(concat117, "++(1)", [1], string116); var concat113 = request(concat115, "++(1)", [1], call114); var concat111 = request(concat113, "++(1)", [1], string112); var concat109 = request(concat111, "++(1)", [1], call110); var concat107 = request(concat109, "++(1)", [1], string108); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call106 = request(var_mctx, "strokeStyle:=(1)", [1], concat107); setLineNumber(86); // compilenode call // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call120 = request(var_mctx, "lineWidth:=(1)", [1], var_lineWidth); setLineNumber(87); // compilenode call if (var_startX === undefined) raiseUninitializedVariable("startX"); if (var_startY === undefined) raiseUninitializedVariable("startY"); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call121 = request(var_mctx, "moveTo(2)", [2], var_startX, var_startY); setLineNumber(88); // compilenode op if (var_y__39____39__ === undefined) raiseUninitializedVariable("y''"); // call case 4: other requests if (var_startY === undefined) raiseUninitializedVariable("startY"); var diff123 = request(var_startY, "-(1)", [1], var_y__39____39__); var call122 = selfRequest(var_$module, "y:=(1)", [1], diff123); setLineNumber(89); // compilenode op if (var_x__39____39__ === undefined) raiseUninitializedVariable("x''"); // call case 4: other requests if (var_startX === undefined) raiseUninitializedVariable("startX"); var sum125 = request(var_startX, "+(1)", [1], var_x__39____39__); var call124 = selfRequest(var_$module, "x:=(1)", [1], sum125); var if126 = GraceDone; setLineNumber(90); // compilenode if if (var_drawingEnabled === undefined) raiseUninitializedVariable("drawingEnabled"); if (Grace_isTrue(var_drawingEnabled)) { setLineNumber(91); // compilenode call if (var_x === undefined) raiseUninitializedVariable("x"); if (var_y === undefined) raiseUninitializedVariable("y"); // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call127 = request(var_mctx, "lineTo(2)", [2], var_x, var_y); setLineNumber(92); // compilenode member // call case 4: other requests if (var_mctx === undefined) raiseUninitializedVariable("mctx"); var call128 = request(var_mctx, "stroke", [0]); if126 = call128; } setLineNumber(94); // compilenode call if (var_startAngle === undefined) raiseUninitializedVariable("startAngle"); var call129 = selfRequest(var_$module, "turtleAngle:=(1)", [1], var_startAngle); return call129; }; let applyMeth94 = function apply (argcv) { return this.real.apply(this.receiver); }; applyMeth94.methodName = "apply"; applyMeth94.paramCounts = [0]; applyMeth94.paramNames = []; applyMeth94.definitionLine = 81; applyMeth94.definitionModule = "turtle"; block94.methods["apply"] = applyMeth94; // call case 4: other requests if (var_steps === undefined) raiseUninitializedVariable("steps"); var call93 = request(var_steps, "push(1)", [1], block94); if90 = call93; } return if90; }; let applyMeth89 = function apply_1 (argcv, ...args) { if (this.guard.apply(this.receiver, args)) return this.real.apply(this.receiver, args); badBlockArgs.apply(this, args); }; applyMeth89.methodName = "apply(1)"; applyMeth89.paramCounts = [1]; applyMeth89.paramNames = ["i"]; applyMeth89.definitionLine = 79; applyMeth89.definitionModule = "turtle"; block89.methods["apply(1)"] = applyMeth89; let matchesMeth89 = function matches_1 (argcv, ...args) { return this.guard.apply(this.receiver, args) ? GraceTrue : GraceFalse; }; matchesMeth89.methodName = "matches(1)"; matchesMeth89.paramCounts = [1]; matchesMeth89.paramNames = ["i"]; matchesMeth89.definitionLine = 79; matchesMeth89.definitionModule = "turtle"; block89.methods["matches(1)"] = matchesMeth89; var call86 = selfRequest(var_$dialect, "for(1)do(1)", [1, 1], term87, block89); setLineNumber(98); // compilenode block var block131 = new GraceBlock(this, 98, 0); block131.guard = jsTrue; block131.real = function block131() { setLineNumber(99); // compilenode op // call case 4: other requests // call case 4: other requests var call135 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests if (var_angle === undefined) raiseUninitializedVariable("angle"); var quotient136 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod134 = request(quotient136, "*(1)", [1], call135); var call133 = request(prod134, "cos", [0]); var prod132 = request(call133, "*(1)", [1], var_dist); var var_y__39____39__ = prod132; setLineNumber(100); // compilenode op // call case 4: other requests // call case 4: other requests var call140 = selfRequest(var_$dialect, "\u03c0", [0]); // call case 4: other requests // call case 4: other requests if (var_angle === undefined) raiseUninitializedVariable("angle"); var quotient141 = request(var_angle, "/(1)", [1], new GraceNum(180)); var prod139 = request(quotient141, "*(1)", [1], call140); var call138 = request(prod139, "sin", [0]); var prod137 = request(call138, "*(1)", [1], var_dist); var var_x__39____39__ = prod137; setLineNumber(101); // compilenode member // call case 4: other requests if (var_ctx === undefined) raiseUninitializedVariable("ctx"); var call142 = request(var_ctx, "beginPath", [0]); setLineNumber(102); // compilenode string var string145 = new GraceString(")"); // call case 4: other requests // call case 4: other requests var call147 = request(var_lineCol, "b", [0]); // call case 4: other requests var string149 = new GraceString(", "); // call case 4: other requests // call case 4: other requests var call151 = request(var_lineCol, "g", [0]); // call case 4: other requests var string153 = new GraceString(", "); // call case 4: other requests // call case 4: other requests var call155 = request(var_lineCol, "r", [0]); // call case 4: other requests var string156 = new GraceString("rgb("); var concat154 = request(string156, "++(1)", [1], call155); var concat152 = request(concat154, "++(1)", [1], string153); var concat150 = request(concat152, "++(1)", [1], call151); var concat148 = request(concat150, "++(1)", [1], string149); var concat146 = request(concat148, "++(1)", [1], call147); var concat144 = request(concat146, "++(1)", [1], string145); // call case 4: other requests var call143 = request(var_ctx, "strokeStyle:=(1)", [1], concat144); setLineNumber(103); // compilenode call // call case 4: other requests var call157 = request(var_ctx, "lineWidth:=(1)", [1], var_lineWidth); setLineNumber(104); // compilenode call if (var_startX === undefined) raiseUninitializedVariable("startX"); if (var_startY === undefined) raiseUninitializedVariable("startY"); // call case 4: other requests var call158 = request(var_ctx, "moveTo(2)", [2], var_startX, var_startY); setLineNumber(105); // compilenode op if (var_y__39____39__ === undefined) raiseUninitializedVariable("y''"); // call case 4: other requests if (var_startY === undefined) raiseUninitializedVariable("startY"); var diff160 = request(var_startY, "-(1)", [1], var_y__39____39__); var call159 = selfRequest(var_$module, "y:=(1)", [1], diff160); setLineNumber(106); // compilenode op if (var_x__39____39__ === undefined) raiseUninitializedVariable("x''"); // call case 4: other requests if (var_startX === undefined) raiseUninitializedVariable("startX"); var sum162 = request(var_startX, "+(1)", [1], var_x__39____39__); var call161 = selfRequest(var_$module, "x:=(1)", [1], sum162); var if163 = GraceDone; setLineNumber(107); // compilenode if if (var_drawingEnabled === undefined) raiseUninitializedVariable("drawingEnabled"); if (Grace_isTrue(var_drawingEnabled)) { setLineNumber(108); // compilenode call if (var_x === undefined) raiseUninitializedVariable("x"); if (var_y === undefined) raiseUninitializedVariable("y"); // call case 4: other requests if (var_ctx === undefined) raiseUninitializedVariable("ctx"); var call164 = request(var_ctx, "lineTo(2)", [2], var_x, var_y); setLineNumber(109); // compilenode member // call case 4: other requests var call165 = request(var_ctx, "stroke", [0]); if163 = call165; } setLineNumber(111); // compilenode call if (var_startAngle === undefined) raiseUninitializedVariable("startAngle"); var call166 = selfRequest(var_$module, "turtleAngle:=(1)", [1], var_startAngle); return call166; }; let applyMeth131 = function apply (argcv) { return this.real.apply(this.receiver); }; applyMeth131.methodName = "apply"; applyMeth131.paramCounts = [0]; applyMeth131.paramNames = []; applyMeth131.definitionLine = 98; applyMeth131.definitionModule = "turtle"; block131.methods["apply"] = applyMeth131; // call case 4: other requests if (var_steps === undefined) raiseUninitializedVariable("steps"); var call130 = request(var_steps, "push(1)", [1], block131); return call130; }; // end of method move(_,_,_) this.methods["move(3)"] = func68; func68.methodName = "move(3)"; func68.paramCounts = [3]; func68.paramNames = ["dist", "lineCol", "lineWidth"]; func68.definitionLine = 67; func68.definitionModule = "turtle"; var func167 = function(argcv, var_ang) { // method turnRight(_), line 114 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 1) && (numArgs !== 1)) { raiseTypeArgError("turnRight(_)", 0, numArgs - 1); } setLineNumber(115); // compilenode member var call168 = selfRequest(var_$module, "initialise", [0]); setLineNumber(116); // compilenode defdec if (var_x === undefined) raiseUninitializedVariable("x"); var var_startX = var_x; setLineNumber(117); // compilenode defdec if (var_y === undefined) raiseUninitializedVariable("y"); var var_startY = var_y; setLineNumber(118); // compilenode defdec if (var_turtleAngle === undefined) raiseUninitializedVariable("turtleAngle"); var var_startAngle = var_turtleAngle; setLineNumber(119); // compilenode member // call case 4: other requests var call171 = request(var_ang, "floor", [0]); // call case 4: other requests var term170 = request(new GraceNum(0), "..(1)", [1], call171); var block172 = new GraceBlock(this, 119, 1); block172.guard = jsTrue; block172.real = function block172(var_i) { var if173 = GraceDone; setLineNumber(120); // compilenode num // call case 4: other requests if (var_speed === undefined) raiseUninitializedVariable("speed"); // call case 4: other requests var modulus175 = request(var_i, "%(1)", [1], var_speed); var term174 = request(modulus175, "==(1)", [1], new GraceNum(0)); if (Grace_isTrue(term174)) { setLineNumber(121); // compilenode block var block177 = new GraceBlock(this, 121, 0); block177.guard = jsTrue; block177.real = function block177() { setLineNumber(122); // compilenode call if (var_startX === undefined) raiseUninitializedVariable("startX"); var call178 = selfRequest(var_$module, "x:=(1)", [1], var_startX); setLineNumber(123); // compilenode call if (var_startY === undefined) raiseUninitializedVariable("startY"); var call179 = selfRequest(var_$module, "y:=(1)", [1], var_startY); setLineNumber(124); // compilenode num // call case 4: other requests // call case 4: other requests if (var_startAngle === undefined) raiseUninitializedVariable("startAngle"); var sum182 = request(var_startAngle, "+(1)", [1], var_i); var modulus181 = request(sum182, "%(1)", [1], new GraceNum(360)); var call180 = selfRequest(var_$module, "turtleAngle:=(1)", [1], modulus181); return call180; }; let applyMeth177 = function apply (argcv) { return this.real.apply(this.receiver); }; applyMeth177.methodName = "apply"; applyMeth177.paramCounts = [0]; applyMeth177.paramNames = []; applyMeth177.definitionLine = 121; applyMeth177.definitionModule = "turtle"; block177.methods["apply"] = applyMeth177; // call case 4: other requests if (var_steps === undefined) raiseUninitializedVariable("steps"); var call176 = request(var_steps, "push(1)", [1], block177); if173 = call176; } return if173; }; let applyMeth172 = function apply_1 (argcv, ...args) { if (this.guard.apply(this.receiver, args)) return this.real.apply(this.receiver, args); badBlockArgs.apply(this, args); }; applyMeth172.methodName = "apply(1)"; applyMeth172.paramCounts = [1]; applyMeth172.paramNames = ["i"]; applyMeth172.definitionLine = 119; applyMeth172.definitionModule = "turtle"; block172.methods["apply(1)"] = applyMeth172; let matchesMeth172 = function matches_1 (argcv, ...args) { return this.guard.apply(this.receiver, args) ? GraceTrue : GraceFalse; }; matchesMeth172.methodName = "matches(1)"; matchesMeth172.paramCounts = [1]; matchesMeth172.paramNames = ["i"]; matchesMeth172.definitionLine = 119; matchesMeth172.definitionModule = "turtle"; block172.methods["matches(1)"] = matchesMeth172; var call169 = selfRequest(var_$dialect, "for(1)do(1)", [1, 1], term170, block172); setLineNumber(128); // compilenode block var block184 = new GraceBlock(this, 128, 0); block184.guard = jsTrue; block184.real = function block184() { setLineNumber(129); // compilenode call if (var_startX === undefined) raiseUninitializedVariable("startX"); var call185 = selfRequest(var_$module, "x:=(1)", [1], var_startX); setLineNumber(130); // compilenode call if (var_startY === undefined) raiseUninitializedVariable("startY"); var call186 = selfRequest(var_$module, "y:=(1)", [1], var_startY); setLineNumber(131); // compilenode num // call case 4: other requests // call case 4: other requests if (var_startAngle === undefined) raiseUninitializedVariable("startAngle"); var sum189 = request(var_startAngle, "+(1)", [1], var_ang); var modulus188 = request(sum189, "%(1)", [1], new GraceNum(360)); var call187 = selfRequest(var_$module, "turtleAngle:=(1)", [1], modulus188); return call187; }; let applyMeth184 = function apply (argcv) { return this.real.apply(this.receiver); }; applyMeth184.methodName = "apply"; applyMeth184.paramCounts = [0]; applyMeth184.paramNames = []; applyMeth184.definitionLine = 128; applyMeth184.definitionModule = "turtle"; block184.methods["apply"] = applyMeth184; // call case 4: other requests if (var_steps === undefined) raiseUninitializedVariable("steps"); var call183 = request(var_steps, "push(1)", [1], block184); setLineNumber(133); // compilenode num // call case 4: other requests // call case 4: other requests var sum192 = request(var_turtleAngle, "+(1)", [1], var_ang); var modulus191 = request(sum192, "%(1)", [1], new GraceNum(360)); var call190 = selfRequest(var_$module, "turtleAngle:=(1)", [1], modulus191); return call190; }; // end of method turnRight(_) this.methods["turnRight(1)"] = func167; func167.methodName = "turnRight(1)"; f