minigrace
Version:
A compiler for the Grace programming language
1,077 lines • 92.3 kB
JavaScript
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