UNPKG

minigrace

Version:

A compiler for the Grace programming language

883 lines (859 loc) 36.6 kB
let gracecode_dom_sourceFile = "/Users/black/Development/mg/gracelang/minigrace/modules/dom.grace"; let gracecode_dom_sha256 = "42771c2147130776ea6f89f96bc53e3db613e647cc0b7f5438053fd082ad997f"; let gracecode_dom_minigraceRevision = "b57591d29fc5ee5270d114920bf671367b8c3ecb"; let gracecode_dom_minigraceGeneration = "5171"; if (typeof gctCache !== "undefined") gctCache["dom"] = "dialect:\n standard\nfreshScopes:\nmethodTypes:$100:\n document \u2192 Object\n doesObject(domObj:Unknown)haveProperty(name:Unknown) \u2192 Boolean\n draw(ctx:Unknown, graphics:Unknown, width:Unknown, height:Unknown) \u2192 Done\n filledOval(ctx:Unknown, g:Unknown) \u2192 Done\n filledRect(ctx:Unknown, g:Unknown) \u2192 Done\n for(iterable:Unknown)waiting(delay:Number)do(block:Unknown) \u2192 Object\n framedOval(ctx:Unknown, g:Unknown) \u2192 Done\n framedRect(ctx:Unknown, g:Unknown) \u2192 Done\n image(ctx:Unknown, g:Unknown) \u2192 Done\n while(cond:Unknown)waiting(delay:Unknown)do(block:Unknown) \u2192 Object\n window \u2192 Object\nmodules:\n standard\npath:\n /Users/black/Development/mg/gracelang/minigrace/modules/dom.grace\nscope:$100:\n asDebugString String (go) $scope_string\n asString String (go) $scope_string\n basicAsString String (go) $scope_string\n document Object (mth) $scope_done\n doesObject(1)haveProperty(1) Boolean (mth) $scope_done\n draw(4) Done (mth) $scope_done\n filledOval(2) Done (mth) $scope_done\n filledRect(2) Done (mth) $scope_done\n for(1)waiting(1)do(1) Object (mth) $scope_done\n framedOval(2) Done (mth) $scope_done\n framedRect(2) Done (mth) $scope_done\n image(2) Done (mth) $scope_done\n isMe(1) Boolean (go) $scope_boolean\n myIdentityHash Number (go) $scope_number\n noObject Unknown (def) $scope_done public\n while(1)waiting(1)do(1) Object (mth) $scope_done\n window Object (mth) $scope_done\nself:\n $100\ntypes:\n"; if (typeof originalSourceLines !== "undefined") { originalSourceLines["dom"] = [ "dialect \"standard\"", "native \"js\" code ‹", "", " function unwrapDOMObject(obj) {", " if (obj.hasOwnProperty(\"_wrappedDOMObject\")) {", " return obj._wrappedDOMObject;", " }", "", " return obj;", " }", "", " function wrapDOMFunction(obj, fn) {", " return function(argcv) {", " var args = [];", " var numArgs = argcv.sum();", " for (var i=1; i <= numArgs; i++)", " args.push(wrapGraceObject(arguments[i]));", " return wrapDOMObject(obj[fn].apply(obj, args));", " };", " }", "", " function wrapDOMField(o, obj, k) {", " o.methods[k + \":=(1)\"] = function(argcv, val) {", " obj[k] = wrapGraceObject(val);", " return GraceDone;", " };", " return function() {", " return wrapDOMObject(obj[k]);", " };", " }", "", " function wrapDOMObject(obj) {", " switch(typeof obj) {", " case \"boolean\":", " return new GraceBoolean(obj);", " case \"string\":", " return new GraceString(obj);", " case \"number\":", " return new GraceNum(obj);", " case \"undefined\":", " return var_noObject;", " default:", " break;", " }", " if (obj === null) {", " return var_noObject;", " }", " if (obj._graceWrapper)", " return obj._graceWrapper;", " var o = Grace_allocObject(GraceObject, \"wrappedDomObject\");", " o._wrappedDOMObject = obj;", " o.methods.asString = function() {", " return new GraceString(\"DOMObject(\" + obj + \")\");", " };", " o.methods[\"==(1)\"] = function(argcv, other) {", " return (this === other) ? GraceTrue : GraceFalse;", " };", " o.methods[\"≠(1)\"] = function(argcv, other) {", " return (this !== other) ? GraceTrue : GraceFalse;", " };", " o.methods.hash = publicVersion(object_identityHash, 'hash');", " for (var k in obj) {", " switch(typeof obj[k]) {", " case \"function\":", " var wrappedFun = wrapDOMFunction(obj, k);", " if (k === \"drawImage\") {", " o.methods[k + \"(3)\"] = wrappedFun;", " o.methods[k + \"(5)\"] = wrappedFun;", " o.methods[k + \"(9)\"] = wrappedFun;", " } else if (k === \"arc\") {", " o.methods[k + \"(5)\"] = wrappedFun;", " o.methods[k + \"(6)\"] = wrappedFun;", " } else {", " o.methods[k] = wrappedFun;", " o.methods[k + \"(1)\"] = wrappedFun;", " o.methods[k + \"(2)\"] = wrappedFun;", " o.methods[k + \"(3)\"] = wrappedFun;", " o.methods[k + \"(4)\"] = wrappedFun;", " // we don't know how many arguments this method takes", " }", " break;", " case \"string\":", " case \"boolean\":", " case \"number\":", " case \"object\":", " o.methods[k] = wrapDOMField(o, obj, k);", " break;", " case \"undefined\":", " o.methods[k] = null;", " break;", " default:", " throw new GraceExceptionPacket(ExceptionObject,", " new GraceString(\"JavaScript value \" + obj[k] + \" has unknown type\"));", " }", " }", " o.methods._methods = function() {", " var l = [];", " for (var m in o.methods) {", " l.push(new GraceString(m));", " }", " return new GraceList(l);", " };", " try {", " obj._graceWrapper = o;", " } catch(e) {}", " return o;", " }", "", " function wrapGraceObject(o) {", " if (o === undefined || o === null) {", " return var_noObject;", " }", " if (o instanceof GraceString) {", " return o._value;", " }", " if (o instanceof GraceNum) {", " return o._value;", " }", " if (o instanceof GraceBoolean) {", " return o._value;", " }", " if (o.real) { // A block", " if (o._wrappedDOMObject)", " return o._wrappedDOMObject;", " var f = function() {", " var args = [];", " for (var i=0; i<arguments.length; i++) {", " args.push(wrapDOMObject(arguments[i]));", " }", " var ret;", " minigrace.trapErrors(function() {", " ret = wrapGraceObject(o.real.apply(o.receiver, args));", " });", " return ret;", " };", " o._wrappedDOMObject = f;", " }", " if (o._wrappedDOMObject)", " return o._wrappedDOMObject;", " return o;", " }", "", " function arc(ctx, g) {", " var p = g.location.data;", " var w = g.theWidth._value;", " var h = g.theHeight._value;", " ctx.translate(p.x._value + w, p.y._value + h);", " ctx.scale(w / 2, h / 2);", " ctx.arc(0, 0, 1, 0, 2 * Math.PI);", " }", "", " function run(ctx, name, g) {", " var p = g.location.data;", " ctx[name](p.x._value, p.y._value, g.theWidth._value, g.theHeight._value);", " }", "›", "", "def noObject is public = singleton \"noObject\"", "", "native \"js\" code ‹", " if (typeof window !== \"undefined\") {", " if (!window.var_domNoObject) {", " window.var_domNoObject = var_noObject;", " } else {", " var_noObject = window.var_domNoObject;", " }", " }", "›", "// This horrible piece of code ensures that noObject (local to this module) is", "// unchanged from one program run to the next. Why does this matter?", "// Because DOM objects survive from one run to the next, and wrappedDOMObjects", "// cache Grace objects, including noObject.", "", "method document -> Object {", " native \"js\" code ‹", " if (typeof(document) === \"undefined\") {", " return wrapDOMObject(null);", " // This return is here because objectdraw requests `dom.document` in", " // its initialization. When used as a dialect, the initialization", " // code runs inside the compiler, where there is no document.", " // Raising an exception at this point kills the compiler.", " // throw new GraceExceptionPacket(EnvironmentExceptionObject,", " // new GraceString(\"There is no 'document' in this context.\"));", " }", " return wrapDOMObject(document);", " ›", "}", "method window -> Object {", " native \"js\" code ‹", " return wrapDOMObject(window);", " ›", "}", "method for(iterable) waiting(delay:Number) do(block) -> Object {", " native \"js\" code ‹", " result = Grace_allocObject(GraceObject, \"dom.for(1)waiting(1)do(1)\");", " result.methods[\"then(1)\"] = function(argcv, b) {", " this.data.then = b;", " };", " var iter = callmethod(var_iterable, \"iterator\", [0]);", " const func = function() {", " minigrace.trapErrors(function() {", " if (Grace_isTrue(callmethod(iter, \"hasNext\", [0]))) {", " const val = callmethod(iter, \"next\", [0]);", " callmethod(var_block, \"apply(1)\", [1], val);", " setTimeout(func, var_delay._value);", " } else {", " if (result.data.then)", " callmethod(result.data.then, \"apply\", [0]);", " }", " });", " };", " func();", " ›", "}", "method while(cond) waiting(delay) do(block) -> Object {", " native \"js\" code ‹", " var result = Grace_allocObject(GraceObject, \"dom.while(1)waiting(1)do(1)\");", " result.methods[\"then(1)\"] = function(argcv, block) {", " this.data.then = block;", " };", " const func = function() {", " minigrace.trapErrors(function() {", " if (Grace_isTrue(callmethod(var_cond, \"apply\", [0]))) {", " callmethod(var_block, \"apply\", [0]);", " setTimeout(func, var_delay._value);", " } else {", " if (result.data.then)", " callmethod(result.data.then, \"apply\", [0]);", " }", " });", " };", " func();", " ›", "}", "method doesObject(domObj) haveProperty (name) -> Boolean {", " native \"js\" code ‹", " return var_name._value in unwrapDOMObject(var_domObj) ? GraceTrue : GraceFalse;", " ›", "}", "method framedRect(ctx, g) -> Done {", " native \"js\" code ‹", " var_ctx = var_ctx._wrappedDOMObject;", " var_g = var_g.data;", " var_ctx.save();", " var_ctx.strokeStyle = color(var_g);", " run(var_ctx, \"strokeRect\", var_g);", " var_ctx.restore();", " ›", "}", "method filledRect(ctx, g) -> Done {", " native \"js\" code ‹", " var_ctx = var_ctx._wrappedDOMObject;", " var_g = var_g.data;", " var_ctx.save();", " var_ctx.fillStyle = color(var_g);", " run(var_ctx, \"fillRect\", var_g);", " var_ctx.restore();", " ›", "}", "method framedOval(ctx, g) -> Done {", " native \"js\" code ‹", " var_ctx = var_ctx._wrappedDOMObject;", " var_g = var_g.data;", " var_ctx.beginPath();", " var_ctx.save();", " arc(var_ctx, var_g);", " var_ctx.restore();", " var_ctx.save();", " var_ctx.strokeStyle = color(var_g);", " var_ctx.stroke();", " var_ctx.restore();", " var_ctx.closePath();", " ›", "}", "method filledOval(ctx, g) -> Done {", " native \"js\" code ‹", " var_ctx = var_ctx._wrappedDOMObject;", " var_g = var_g.data;", " var_ctx.beginPath();", " var_ctx.save();", " arc(var_ctx, var_g);", " var_ctx.restore();", " var_ctx.save();", " var_ctx.fillStyle = color(var_g);", " var_ctx.fill();", " var_ctx.restore();", " var_ctx.closePath();", " ›", "}", "method image(ctx, g) -> Done {", " native \"js\" code ‹", " var_ctx = var_ctx._wrappedDOMObject;", " var_g = var_g.data;", " var_ctx.drawImage(var_g.theImage, var_g.x._value, var_g.y._value, var_g.theWidth._value, var_g.theHeight._value);", " ›", "}", "method draw(ctx, graphics, width, height) -> Done {", " native \"js\" code ‹", " var_ctx._wrappedDOMObject.clearRect(0, 0, var_width._value, var_height._value);", "", " const list = var_graphics._value;", "", " for (var i = 0, l = list.length; i < l; i++) {", " const graphic = list[i];", " if (Grace_isTrue(graphic.data.isVisible)) {", " graphic.methods[\"draw(1)\"].call(graphic, [1], var_ctx);", " }", " }", " ›", "}" ]; } function gracecode_dom() { importedModules["dom"] = this; const var_$module = this; this.definitionModule = "dom"; this.definitionLine = 1; setLineNumber(1); // compilenode dialect // Dialect "standard" const var_$dialect = do_import("standard", gracecode_standard); this.outer = var_$dialect; this.closureKeys = this.closureKeys || []; this.closureKeys.push("outer_dom_1"); this.outer_dom_1 = var_$dialect; var func0 = function(argcv) { // method document, line 174 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 0) && (numArgs !== 0)) { raiseTypeArgError("document", 0, numArgs - 0); } setLineNumber(175); // compilenode call var result = GraceDone; // start native code from line 175 if (typeof(document) === "undefined") { return wrapDOMObject(null); // This return is here because objectdraw requests `dom.document` in // its initialization. When used as a dialect, the initialization // code runs inside the compiler, where there is no document. // Raising an exception at this point kills the compiler. // throw new GraceExceptionPacket(EnvironmentExceptionObject, // new GraceString("There is no 'document' in this context.")); } return wrapDOMObject(document); // end native code insertion setLineNumber(174); // compilenode member var call2 = selfRequest(var_$dialect, "Object", [0]); setLineNumber(175); // typecheck assertTypeOrMsg(result, call2, "result of method document", "Object"); return result; }; // end of method document setLineNumber(174); // compilenode member var call3 = selfRequest(var_$dialect, "Object", [0]); func0.returnType = call3; this.methods["document"] = func0; func0.methodName = "document"; func0.paramCounts = [0]; func0.paramNames = []; func0.definitionLine = 174; func0.definitionModule = "dom"; var func4 = function(argcv) { // method window, line 188 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 0) && (numArgs !== 0)) { raiseTypeArgError("window", 0, numArgs - 0); } setLineNumber(189); // compilenode call var result = GraceDone; // start native code from line 189 return wrapDOMObject(window); // end native code insertion setLineNumber(188); // compilenode member var call6 = selfRequest(var_$dialect, "Object", [0]); setLineNumber(189); // typecheck assertTypeOrMsg(result, call6, "result of method window", "Object"); return result; }; // end of method window setLineNumber(188); // compilenode member var call7 = selfRequest(var_$dialect, "Object", [0]); func4.returnType = call7; this.methods["window"] = func4; func4.methodName = "window"; func4.paramCounts = [0]; func4.paramNames = []; func4.definitionLine = 188; func4.definitionModule = "dom"; var func8 = function(argcv, var_iterable, var_delay, var_block) { // method for(_)waiting(_)do(_), line 193 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 3) && (numArgs !== 3)) { raiseTypeArgError("for(_)waiting(_)do(_)", 0, numArgs - 3); } setLineNumber(193); // compilenode member var call9 = selfRequest(var_$dialect, "Number", [0]); assertTypeOrMsg(var_delay, call9, "argument 2 in request of `for(_)waiting(_)do(_)`", "Number"); setLineNumber(194); // compilenode call var result = GraceDone; // start native code from line 194 result = Grace_allocObject(GraceObject, "dom.for(1)waiting(1)do(1)"); result.methods["then(1)"] = function(argcv, b) { this.data.then = b; }; var iter = callmethod(var_iterable, "iterator", [0]); const func = function() { minigrace.trapErrors(function() { if (Grace_isTrue(callmethod(iter, "hasNext", [0]))) { const val = callmethod(iter, "next", [0]); callmethod(var_block, "apply(1)", [1], val); setTimeout(func, var_delay._value); } else { if (result.data.then) callmethod(result.data.then, "apply", [0]); } }); }; func(); // end native code insertion setLineNumber(193); // compilenode member var call11 = selfRequest(var_$dialect, "Object", [0]); setLineNumber(194); // typecheck assertTypeOrMsg(result, call11, "result of method for(_)waiting(_)do(_)", "Object"); return result; }; // end of method for(_)waiting(_)do(_) setLineNumber(193); // compilenode member var call12 = selfRequest(var_$dialect, "Number", [0]); func8.paramTypes = [type_Unknown, call12, type_Unknown]; var call13 = selfRequest(var_$dialect, "Object", [0]); func8.returnType = call13; this.methods["for(1)waiting(1)do(1)"] = func8; func8.methodName = "for(1)waiting(1)do(1)"; func8.paramCounts = [1, 1, 1]; func8.paramNames = ["iterable", "delay", "block"]; func8.definitionLine = 193; func8.definitionModule = "dom"; var func14 = function(argcv, var_cond, var_delay, var_block) { // method while(_)waiting(_)do(_), line 215 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 3) && (numArgs !== 3)) { raiseTypeArgError("while(_)waiting(_)do(_)", 0, numArgs - 3); } setLineNumber(216); // compilenode call var result = GraceDone; // start native code from line 216 var result = Grace_allocObject(GraceObject, "dom.while(1)waiting(1)do(1)"); result.methods["then(1)"] = function(argcv, block) { this.data.then = block; }; const func = function() { minigrace.trapErrors(function() { if (Grace_isTrue(callmethod(var_cond, "apply", [0]))) { callmethod(var_block, "apply", [0]); setTimeout(func, var_delay._value); } else { if (result.data.then) callmethod(result.data.then, "apply", [0]); } }); }; func(); // end native code insertion setLineNumber(215); // compilenode member var call16 = selfRequest(var_$dialect, "Object", [0]); setLineNumber(216); // typecheck assertTypeOrMsg(result, call16, "result of method while(_)waiting(_)do(_)", "Object"); return result; }; // end of method while(_)waiting(_)do(_) setLineNumber(215); // compilenode member var call17 = selfRequest(var_$dialect, "Object", [0]); func14.returnType = call17; this.methods["while(1)waiting(1)do(1)"] = func14; func14.methodName = "while(1)waiting(1)do(1)"; func14.paramCounts = [1, 1, 1]; func14.paramNames = ["cond", "delay", "block"]; func14.definitionLine = 215; func14.definitionModule = "dom"; var func18 = function(argcv, var_domObj, var_name) { // method doesObject(_)haveProperty(_), line 235 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 2) && (numArgs !== 2)) { raiseTypeArgError("doesObject(_)haveProperty(_)", 0, numArgs - 2); } setLineNumber(236); // compilenode call var result = GraceDone; // start native code from line 236 return var_name._value in unwrapDOMObject(var_domObj) ? GraceTrue : GraceFalse; // end native code insertion setLineNumber(235); // compilenode member var call20 = selfRequest(var_$dialect, "Boolean", [0]); setLineNumber(236); // typecheck assertTypeOrMsg(result, call20, "result of method doesObject(_)haveProperty(_)", "Boolean"); return result; }; // end of method doesObject(_)haveProperty(_) setLineNumber(235); // compilenode member var call21 = selfRequest(var_$dialect, "Boolean", [0]); func18.returnType = call21; this.methods["doesObject(1)haveProperty(1)"] = func18; func18.methodName = "doesObject(1)haveProperty(1)"; func18.paramCounts = [1, 1]; func18.paramNames = ["domObj", "name"]; func18.definitionLine = 235; func18.definitionModule = "dom"; var func22 = function(argcv, var_ctx, var_g) { // method framedRect(_,_), line 240 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 2) && (numArgs !== 2)) { raiseTypeArgError("framedRect(_,_)", 0, numArgs - 2); } setLineNumber(241); // compilenode call var result = GraceDone; // start native code from line 241 var_ctx = var_ctx._wrappedDOMObject; var_g = var_g.data; var_ctx.save(); var_ctx.strokeStyle = color(var_g); run(var_ctx, "strokeRect", var_g); var_ctx.restore(); // end native code insertion return result; }; // end of method framedRect(_,_) setLineNumber(240); // compilenode member var call24 = selfRequest(var_$dialect, "Done", [0]); func22.returnType = call24; this.methods["framedRect(2)"] = func22; func22.methodName = "framedRect(2)"; func22.paramCounts = [2]; func22.paramNames = ["ctx", "g"]; func22.definitionLine = 240; func22.definitionModule = "dom"; var func25 = function(argcv, var_ctx, var_g) { // method filledRect(_,_), line 250 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 2) && (numArgs !== 2)) { raiseTypeArgError("filledRect(_,_)", 0, numArgs - 2); } setLineNumber(251); // compilenode call var result = GraceDone; // start native code from line 251 var_ctx = var_ctx._wrappedDOMObject; var_g = var_g.data; var_ctx.save(); var_ctx.fillStyle = color(var_g); run(var_ctx, "fillRect", var_g); var_ctx.restore(); // end native code insertion return result; }; // end of method filledRect(_,_) setLineNumber(250); // compilenode member var call27 = selfRequest(var_$dialect, "Done", [0]); func25.returnType = call27; this.methods["filledRect(2)"] = func25; func25.methodName = "filledRect(2)"; func25.paramCounts = [2]; func25.paramNames = ["ctx", "g"]; func25.definitionLine = 250; func25.definitionModule = "dom"; var func28 = function(argcv, var_ctx, var_g) { // method framedOval(_,_), line 260 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 2) && (numArgs !== 2)) { raiseTypeArgError("framedOval(_,_)", 0, numArgs - 2); } setLineNumber(261); // compilenode call var result = GraceDone; // start native code from line 261 var_ctx = var_ctx._wrappedDOMObject; var_g = var_g.data; var_ctx.beginPath(); var_ctx.save(); arc(var_ctx, var_g); var_ctx.restore(); var_ctx.save(); var_ctx.strokeStyle = color(var_g); var_ctx.stroke(); var_ctx.restore(); var_ctx.closePath(); // end native code insertion return result; }; // end of method framedOval(_,_) setLineNumber(260); // compilenode member var call30 = selfRequest(var_$dialect, "Done", [0]); func28.returnType = call30; this.methods["framedOval(2)"] = func28; func28.methodName = "framedOval(2)"; func28.paramCounts = [2]; func28.paramNames = ["ctx", "g"]; func28.definitionLine = 260; func28.definitionModule = "dom"; var func31 = function(argcv, var_ctx, var_g) { // method filledOval(_,_), line 275 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 2) && (numArgs !== 2)) { raiseTypeArgError("filledOval(_,_)", 0, numArgs - 2); } setLineNumber(276); // compilenode call var result = GraceDone; // start native code from line 276 var_ctx = var_ctx._wrappedDOMObject; var_g = var_g.data; var_ctx.beginPath(); var_ctx.save(); arc(var_ctx, var_g); var_ctx.restore(); var_ctx.save(); var_ctx.fillStyle = color(var_g); var_ctx.fill(); var_ctx.restore(); var_ctx.closePath(); // end native code insertion return result; }; // end of method filledOval(_,_) setLineNumber(275); // compilenode member var call33 = selfRequest(var_$dialect, "Done", [0]); func31.returnType = call33; this.methods["filledOval(2)"] = func31; func31.methodName = "filledOval(2)"; func31.paramCounts = [2]; func31.paramNames = ["ctx", "g"]; func31.definitionLine = 275; func31.definitionModule = "dom"; var func34 = function(argcv, var_ctx, var_g) { // method image(_,_), line 290 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 2) && (numArgs !== 2)) { raiseTypeArgError("image(_,_)", 0, numArgs - 2); } setLineNumber(291); // compilenode call var result = GraceDone; // start native code from line 291 var_ctx = var_ctx._wrappedDOMObject; var_g = var_g.data; var_ctx.drawImage(var_g.theImage, var_g.x._value, var_g.y._value, var_g.theWidth._value, var_g.theHeight._value); // end native code insertion return result; }; // end of method image(_,_) setLineNumber(290); // compilenode member var call36 = selfRequest(var_$dialect, "Done", [0]); func34.returnType = call36; this.methods["image(2)"] = func34; func34.methodName = "image(2)"; func34.paramCounts = [2]; func34.paramNames = ["ctx", "g"]; func34.definitionLine = 290; func34.definitionModule = "dom"; var func37 = function(argcv, var_ctx, var_graphics, var_width, var_height) { // method draw(_,_,_,_), line 297 var returnTarget = invocationCount; invocationCount++; const numArgs = arguments.length - 1; if ((numArgs > 4) && (numArgs !== 4)) { raiseTypeArgError("draw(_,_,_,_)", 0, numArgs - 4); } setLineNumber(298); // compilenode call var result = GraceDone; // start native code from line 298 var_ctx._wrappedDOMObject.clearRect(0, 0, var_width._value, var_height._value); const list = var_graphics._value; for (var i = 0, l = list.length; i < l; i++) { const graphic = list[i]; if (Grace_isTrue(graphic.data.isVisible)) { graphic.methods["draw(1)"].call(graphic, [1], var_ctx); } } // end native code insertion return result; }; // end of method draw(_,_,_,_) setLineNumber(297); // compilenode member var call39 = selfRequest(var_$dialect, "Done", [0]); func37.returnType = call39; this.methods["draw(4)"] = func37; func37.methodName = "draw(4)"; func37.paramCounts = [4]; func37.paramNames = ["ctx", "graphics", "width", "height"]; func37.definitionLine = 297; func37.definitionModule = "dom"; setLineNumber(2); // compilenode call var result = GraceDone; // start native code from line 2 function unwrapDOMObject(obj) { if (obj.hasOwnProperty("_wrappedDOMObject")) { return obj._wrappedDOMObject; } return obj; } function wrapDOMFunction(obj, fn) { return function(argcv) { var args = []; var numArgs = argcv.sum(); for (var i=1; i <= numArgs; i++) args.push(wrapGraceObject(arguments[i])); return wrapDOMObject(obj[fn].apply(obj, args)); }; } function wrapDOMField(o, obj, k) { o.methods[k + ":=(1)"] = function(argcv, val) { obj[k] = wrapGraceObject(val); return GraceDone; }; return function() { return wrapDOMObject(obj[k]); }; } function wrapDOMObject(obj) { switch(typeof obj) { case "boolean": return new GraceBoolean(obj); case "string": return new GraceString(obj); case "number": return new GraceNum(obj); case "undefined": return var_noObject; default: break; } if (obj === null) { return var_noObject; } if (obj._graceWrapper) return obj._graceWrapper; var o = Grace_allocObject(GraceObject, "wrappedDomObject"); o._wrappedDOMObject = obj; o.methods.asString = function() { return new GraceString("DOMObject(" + obj + ")"); }; o.methods["==(1)"] = function(argcv, other) { return (this === other) ? GraceTrue : GraceFalse; }; o.methods["≠(1)"] = function(argcv, other) { return (this !== other) ? GraceTrue : GraceFalse; }; o.methods.hash = publicVersion(object_identityHash, 'hash'); for (var k in obj) { switch(typeof obj[k]) { case "function": var wrappedFun = wrapDOMFunction(obj, k); if (k === "drawImage") { o.methods[k + "(3)"] = wrappedFun; o.methods[k + "(5)"] = wrappedFun; o.methods[k + "(9)"] = wrappedFun; } else if (k === "arc") { o.methods[k + "(5)"] = wrappedFun; o.methods[k + "(6)"] = wrappedFun; } else { o.methods[k] = wrappedFun; o.methods[k + "(1)"] = wrappedFun; o.methods[k + "(2)"] = wrappedFun; o.methods[k + "(3)"] = wrappedFun; o.methods[k + "(4)"] = wrappedFun; // we don't know how many arguments this method takes } break; case "string": case "boolean": case "number": case "object": o.methods[k] = wrapDOMField(o, obj, k); break; case "undefined": o.methods[k] = null; break; default: throw new GraceExceptionPacket(ExceptionObject, new GraceString("JavaScript value " + obj[k] + " has unknown type")); } } o.methods._methods = function() { var l = []; for (var m in o.methods) { l.push(new GraceString(m)); } return new GraceList(l); }; try { obj._graceWrapper = o; } catch(e) {} return o; } function wrapGraceObject(o) { if (o === undefined || o === null) { return var_noObject; } if (o instanceof GraceString) { return o._value; } if (o instanceof GraceNum) { return o._value; } if (o instanceof GraceBoolean) { return o._value; } if (o.real) { // A block if (o._wrappedDOMObject) return o._wrappedDOMObject; var f = function() { var args = []; for (var i=0; i<arguments.length; i++) { args.push(wrapDOMObject(arguments[i])); } var ret; minigrace.trapErrors(function() { ret = wrapGraceObject(o.real.apply(o.receiver, args)); }); return ret; }; o._wrappedDOMObject = f; } if (o._wrappedDOMObject) return o._wrappedDOMObject; return o; } function arc(ctx, g) { var p = g.location.data; var w = g.theWidth._value; var h = g.theHeight._value; ctx.translate(p.x._value + w, p.y._value + h); ctx.scale(w / 2, h / 2); ctx.arc(0, 0, 1, 0, 2 * Math.PI); } function run(ctx, name, g) { var p = g.location.data; ctx[name](p.x._value, p.y._value, g.theWidth._value, g.theHeight._value); } // end native code insertion setLineNumber(158); // compilenode string var string42 = new GraceString("noObject"); var call41 = selfRequest(var_$dialect, "singleton(1)", [1], string42); var var_noObject = call41; var reader43_noObject = function() { // reader method noObject if (var_noObject === undefined) raiseUninitializedVariable("noObject"); return var_noObject; }; reader43_noObject.isDef = true; this.methods["noObject"] = reader43_noObject; setLineNumber(160); // compilenode call var result = GraceDone; // start native code from line 160 if (typeof window !== "undefined") { if (!window.var_domNoObject) { window.var_domNoObject = var_noObject; } else { var_noObject = window.var_domNoObject; } } // end native code insertion return this; } if (typeof global !== "undefined") global.gracecode_dom = gracecode_dom; if (typeof window !== "undefined") window.gracecode_dom = gracecode_dom; gracecode_dom.definitionModule = "dom"; gracecode_dom.sourceFile = gracecode_dom_sourceFile; gracecode_dom.sha256 = gracecode_dom_sha256; gracecode_dom.minigraceRevision = gracecode_dom_minigraceRevision; gracecode_dom.minigraceGeneration = gracecode_dom_minigraceGeneration; gracecode_dom.imports = [ ["standard", "5016aa3a5b2e0d35a67289d21c1e41cf8d73bef931ceea7b35f6a8b10a1386cf"] ]; gracecode_dom.definitionLine = 1;