minigrace
Version:
A compiler for the Grace programming language
408 lines (407 loc) • 18.8 kB
JavaScript
let gracecode_typeComparison_sourceFile = "/Users/black/Development/mg/gracelang/minigrace/typeComparison.grace";
let gracecode_typeComparison_sha256 = "53b1074e506778b207cb977896a7a515f8e7a2a10eb0c685d19c34b95738e07e";
let gracecode_typeComparison_minigraceRevision = "b57591d29fc5ee5270d114920bf671367b8c3ecb";
let gracecode_typeComparison_minigraceGeneration = "5171";
if (typeof gctCache !== "undefined")
gctCache["typeComparison"] = "dialect:\n standard\nfreshScopes:\nmethodTypes:$100:\n methodsIn(DesiredType:Unknown)missingFrom(value:Unknown) \u2192 String\n protocolOf(value:Unknown)notCoveredBy(Q:Type) \u2192 String\nmodules:\n mirror\n standard\npath:\n /Users/black/Development/mg/gracelang/minigrace/typeComparison.grace\nscope:$100:\n asDebugString String (go) $scope_string\n asString String (go) $scope_string\n basicAsString String (go) $scope_string\n isMe(1) Boolean (go) $scope_boolean\n methodsIn(1)missingFrom(1) String (mth) $scope_done\n myIdentityHash Number (go) $scope_number\n protocolOf(1)notCoveredBy(1) String (mth) $scope_done\nself:\n $100\ntypes:\n";
if (typeof originalSourceLines !== "undefined") {
originalSourceLines["typeComparison"] = [
"#pragma noTypeChecks",
"dialect \"standard\"",
"import \"mirror\" as mirror",
"",
"method methodsIn(DesiredType) missingFrom (value) -> String {",
" def vMethods = mirror.reflect(value).methodNames >> set",
" def tMethods = DesiredType.methodNames >> set",
" def missing = list.withAll(tMethods -- vMethods).sort",
" def n = missing.size",
" if (n == 0) then {",
" ProgrammingError.raise \"{value.asDebugString} seems to have all the methods of {DesiredType}\"",
" }",
" var s := \"\"",
" missing.keysAndValuesDo { ix, each ->",
" s := s ++ each",
" if (ix == (n - 1)) then {",
" if (n > 2) then {",
" s := s ++ \", and \" // Oxford comma",
" } else {",
" s := s ++ \" and \"",
" }",
" } elseif { ix < n } then {",
" s := s ++ \", \"",
" }",
" }",
" return s",
"}",
"method protocolOf(value) notCoveredBy (Q:Type) -> String {",
" def vMethods = mirror.reflect(value).methodNames >> set",
" def qMethods = Q.methodNames >> set",
" def missing = list.withAll(vMethods -- qMethods).sort",
" def n = missing.size",
" if (n == 0) then { return \"\" }",
" var s := \"\"",
" missing.keysAndValuesDo { ix, each ->",
" s := s ++ each",
" if (ix == (n - 1)) then {",
" if (n > 2) then {",
" s := s ++ \", and \" // Oxford comma",
" } else {",
" s := s ++ \" and \"",
" }",
" } elseif { ix < n } then {",
" s := s ++ \", \"",
" }",
" }",
" return s",
"}" ];
}
function gracecode_typeComparison() {
importedModules["typeComparison"] = this;
const var_$module = this;
this.definitionModule = "typeComparison";
this.definitionLine = 1;
setLineNumber(2); // compilenode dialect
// Dialect "standard"
const var_$dialect = do_import("standard", gracecode_standard);
this.outer = var_$dialect;
setLineNumber(3); // compilenode import
// Import of "mirror" as mirror
if (typeof gracecode_mirror == "undefined")
throw new GraceExceptionPacket(EnvironmentExceptionObject,
new GraceString("could not find module mirror"));
var var_mirror = do_import("mirror", gracecode_mirror);
var func0 = function(argcv) { // accessor method mirror, line 3
const numArgs = arguments.length - 1;
if (numArgs > 0) raiseTypeArgError("mirror", 0, numArgs - 0);
return var_mirror;
}; // end of method mirror
this.methods["mirror"] = func0;
func0.methodName = "mirror";
func0.paramCounts = [0];
func0.paramNames = [];
func0.definitionLine = 3;
func0.definitionModule = "typeComparison";
func0.debug = "import";
func0.confidential = true;
this.closureKeys = this.closureKeys || [];
this.closureKeys.push("outer_typeComparison_1");
this.outer_typeComparison_1 = var_$dialect;
var func1 = function(argcv, var_DesiredType, var_value) { // method methodsIn(_)missingFrom(_), line 5
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 2) && (numArgs !== 2)) {
raiseTypeArgError("methodsIn(_)missingFrom(_)", 0, numArgs - 2);
}
setLineNumber(6); // compilenode member
var call3 = selfRequest(var_$dialect, "set", [0]);
// call case 4: other requests
// call case 4: other requests
// call case 4: other requests
var call5 = request(var_mirror, "reflect(1)", [1], var_value);
var call4 = request(call5, "methodNames", [0]);
var term2 = request(call4, ">>(1)", [1], call3);
var var_vMethods = term2;
setLineNumber(7); // compilenode member
var call7 = selfRequest(var_$dialect, "set", [0]);
// call case 4: other requests
// call case 4: other requests
var call8 = request(var_DesiredType, "methodNames", [0]);
var term6 = request(call8, ">>(1)", [1], call7);
var var_tMethods = term6;
setLineNumber(8); // compilenode member
// call case 4: other requests
if (var_vMethods === undefined) raiseUninitializedVariable("vMethods");
// call case 4: other requests
if (var_tMethods === undefined) raiseUninitializedVariable("tMethods");
var term11 = request(var_tMethods, "--(1)", [1], var_vMethods);
// call case 4: other requests
var call12 = selfRequest(var_$dialect, "list", [0]);
var call10 = request(call12, "withAll(1)", [1], term11);
var call9 = request(call10, "sort", [0]);
var var_missing = call9;
setLineNumber(9); // compilenode member
// call case 4: other requests
if (var_missing === undefined) raiseUninitializedVariable("missing");
var call13 = request(var_missing, "size", [0]);
var var_n = call13;
var if14 = GraceDone;
setLineNumber(10); // compilenode num
// call case 4: other requests
if (var_n === undefined) raiseUninitializedVariable("n");
var term15 = request(var_n, "==(1)", [1], new GraceNum(0));
if (Grace_isTrue(term15)) {
setLineNumber(11); // compilenode string
// call case 4: other requests
// call case 4: other requests
var string20 = new GraceString(" seems to have all the methods of ");
// call case 4: other requests
// call case 4: other requests
var call22 = request(var_value, "asDebugString", [0]);
// call case 4: other requests
var concat21 = request(GraceEmptyString, "++(1)", [1], call22);
var concat19 = request(concat21, "++(1)", [1], string20);
var concat18 = request(concat19, "++(1)", [1], var_DesiredType);
var concat17 = request(concat18, "++(1)", [1], GraceEmptyString);
// call case 4: other requests
var call23 = selfRequest(var_$dialect, "ProgrammingError", [0]);
var call16 = request(call23, "raise(1)", [1], concat17);
if14 = call16;
}
setLineNumber(13); // compilenode string
var var_s = GraceEmptyString;
setLineNumber(14); // compilenode block
var block25 = new GraceBlock(this, 14, 2);
block25.guard = jsTrue;
block25.real = function block25(var_ix, var_each) {
setLineNumber(15); // compilenode op
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat26 = request(var_s, "++(1)", [1], var_each);
var_s = concat26;
var if27 = GraceDone;
setLineNumber(16); // compilenode num
// call case 4: other requests
if (var_n === undefined) raiseUninitializedVariable("n");
var diff29 = request(var_n, "-(1)", [1], new GraceNum(1));
// call case 4: other requests
var term28 = request(var_ix, "==(1)", [1], diff29);
if (Grace_isTrue(term28)) {
var if30 = GraceDone;
setLineNumber(17); // compilenode num
// call case 4: other requests
if (var_n === undefined) raiseUninitializedVariable("n");
var term31 = request(var_n, ">(1)", [1], new GraceNum(2));
if (Grace_isTrue(term31)) {
setLineNumber(18); // compilenode string
var string33 = new GraceString(", and ");
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat32 = request(var_s, "++(1)", [1], string33);
var_s = concat32;
if30 = GraceDone;
} else {
setLineNumber(20); // compilenode string
var string35 = new GraceString(" and ");
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat34 = request(var_s, "++(1)", [1], string35);
var_s = concat34;
if30 = GraceDone;
}
if27 = if30;
} else {
var if36 = GraceDone;
setLineNumber(22); // compilenode op
if (var_n === undefined) raiseUninitializedVariable("n");
// call case 4: other requests
var term37 = request(var_ix, "<(1)", [1], var_n);
if (Grace_isTrue(term37)) {
setLineNumber(23); // compilenode string
var string39 = new GraceString(", ");
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat38 = request(var_s, "++(1)", [1], string39);
var_s = concat38;
if36 = GraceDone;
}
if27 = if36;
}
return if27;
};
let applyMeth25 = function apply_2 (argcv, ...args) {
if (this.guard.apply(this.receiver, args))
return this.real.apply(this.receiver, args);
badBlockArgs.apply(this, args);
};
applyMeth25.methodName = "apply(2)";
applyMeth25.paramCounts = [2];
applyMeth25.paramNames = ["ix", "each"];
applyMeth25.definitionLine = 14;
applyMeth25.definitionModule = "typeComparison";
block25.methods["apply(2)"] = applyMeth25;
let matchesMeth25 = function matches_2 (argcv, ...args) {
return this.guard.apply(this.receiver, args) ? GraceTrue : GraceFalse;
};
matchesMeth25.methodName = "matches(2)";
matchesMeth25.paramCounts = [2];
matchesMeth25.paramNames = ["ix", "each"];
matchesMeth25.definitionLine = 14;
matchesMeth25.definitionModule = "typeComparison";
block25.methods["matches(2)"] = matchesMeth25;
// call case 4: other requests
if (var_missing === undefined) raiseUninitializedVariable("missing");
var call24 = request(var_missing, "keysAndValuesDo(1)", [1], block25);
setLineNumber(26); // compilenode return
if (var_s === undefined) raiseUninitializedVariable("s");
return var_s;
}; // end of method methodsIn(_)missingFrom(_)
setLineNumber(5); // compilenode member
var call40 = selfRequest(var_$dialect, "String", [0]);
func1.returnType = call40;
this.methods["methodsIn(1)missingFrom(1)"] = func1;
func1.methodName = "methodsIn(1)missingFrom(1)";
func1.paramCounts = [1, 1];
func1.paramNames = ["DesiredType", "value"];
func1.definitionLine = 5;
func1.definitionModule = "typeComparison";
var func41 = function(argcv, var_value, var_Q) { // method protocolOf(_)notCoveredBy(_), line 28
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 2) && (numArgs !== 2)) {
raiseTypeArgError("protocolOf(_)notCoveredBy(_)", 0, numArgs - 2);
}
setLineNumber(29); // compilenode member
var call43 = selfRequest(var_$dialect, "set", [0]);
// call case 4: other requests
// call case 4: other requests
// call case 4: other requests
var call45 = request(var_mirror, "reflect(1)", [1], var_value);
var call44 = request(call45, "methodNames", [0]);
var term42 = request(call44, ">>(1)", [1], call43);
var var_vMethods = term42;
setLineNumber(30); // compilenode member
var call47 = selfRequest(var_$dialect, "set", [0]);
// call case 4: other requests
// call case 4: other requests
var call48 = request(var_Q, "methodNames", [0]);
var term46 = request(call48, ">>(1)", [1], call47);
var var_qMethods = term46;
setLineNumber(31); // compilenode member
// call case 4: other requests
if (var_qMethods === undefined) raiseUninitializedVariable("qMethods");
// call case 4: other requests
if (var_vMethods === undefined) raiseUninitializedVariable("vMethods");
var term51 = request(var_vMethods, "--(1)", [1], var_qMethods);
// call case 4: other requests
var call52 = selfRequest(var_$dialect, "list", [0]);
var call50 = request(call52, "withAll(1)", [1], term51);
var call49 = request(call50, "sort", [0]);
var var_missing = call49;
setLineNumber(32); // compilenode member
// call case 4: other requests
if (var_missing === undefined) raiseUninitializedVariable("missing");
var call53 = request(var_missing, "size", [0]);
var var_n = call53;
var if54 = GraceDone;
setLineNumber(33); // compilenode num
// call case 4: other requests
if (var_n === undefined) raiseUninitializedVariable("n");
var term55 = request(var_n, "==(1)", [1], new GraceNum(0));
if (Grace_isTrue(term55)) {
return GraceEmptyString;
}
setLineNumber(34); // compilenode string
var var_s = GraceEmptyString;
setLineNumber(35); // compilenode block
var block57 = new GraceBlock(this, 35, 2);
block57.guard = jsTrue;
block57.real = function block57(var_ix, var_each) {
setLineNumber(36); // compilenode op
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat58 = request(var_s, "++(1)", [1], var_each);
var_s = concat58;
var if59 = GraceDone;
setLineNumber(37); // compilenode num
// call case 4: other requests
if (var_n === undefined) raiseUninitializedVariable("n");
var diff61 = request(var_n, "-(1)", [1], new GraceNum(1));
// call case 4: other requests
var term60 = request(var_ix, "==(1)", [1], diff61);
if (Grace_isTrue(term60)) {
var if62 = GraceDone;
setLineNumber(38); // compilenode num
// call case 4: other requests
if (var_n === undefined) raiseUninitializedVariable("n");
var term63 = request(var_n, ">(1)", [1], new GraceNum(2));
if (Grace_isTrue(term63)) {
setLineNumber(39); // compilenode string
var string65 = new GraceString(", and ");
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat64 = request(var_s, "++(1)", [1], string65);
var_s = concat64;
if62 = GraceDone;
} else {
setLineNumber(41); // compilenode string
var string67 = new GraceString(" and ");
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat66 = request(var_s, "++(1)", [1], string67);
var_s = concat66;
if62 = GraceDone;
}
if59 = if62;
} else {
var if68 = GraceDone;
setLineNumber(43); // compilenode op
if (var_n === undefined) raiseUninitializedVariable("n");
// call case 4: other requests
var term69 = request(var_ix, "<(1)", [1], var_n);
if (Grace_isTrue(term69)) {
setLineNumber(44); // compilenode string
var string71 = new GraceString(", ");
// call case 4: other requests
if (var_s === undefined) raiseUninitializedVariable("s");
var concat70 = request(var_s, "++(1)", [1], string71);
var_s = concat70;
if68 = GraceDone;
}
if59 = if68;
}
return if59;
};
let applyMeth57 = function apply_2 (argcv, ...args) {
if (this.guard.apply(this.receiver, args))
return this.real.apply(this.receiver, args);
badBlockArgs.apply(this, args);
};
applyMeth57.methodName = "apply(2)";
applyMeth57.paramCounts = [2];
applyMeth57.paramNames = ["ix", "each"];
applyMeth57.definitionLine = 35;
applyMeth57.definitionModule = "typeComparison";
block57.methods["apply(2)"] = applyMeth57;
let matchesMeth57 = function matches_2 (argcv, ...args) {
return this.guard.apply(this.receiver, args) ? GraceTrue : GraceFalse;
};
matchesMeth57.methodName = "matches(2)";
matchesMeth57.paramCounts = [2];
matchesMeth57.paramNames = ["ix", "each"];
matchesMeth57.definitionLine = 35;
matchesMeth57.definitionModule = "typeComparison";
block57.methods["matches(2)"] = matchesMeth57;
// call case 4: other requests
if (var_missing === undefined) raiseUninitializedVariable("missing");
var call56 = request(var_missing, "keysAndValuesDo(1)", [1], block57);
setLineNumber(47); // compilenode return
if (var_s === undefined) raiseUninitializedVariable("s");
return var_s;
}; // end of method protocolOf(_)notCoveredBy(_)
setLineNumber(28); // compilenode member
var call72 = selfRequest(var_$dialect, "Type", [0]);
func41.paramTypes = [type_Unknown, call72];
var call73 = selfRequest(var_$dialect, "String", [0]);
func41.returnType = call73;
this.methods["protocolOf(1)notCoveredBy(1)"] = func41;
func41.methodName = "protocolOf(1)notCoveredBy(1)";
func41.paramCounts = [1, 1];
func41.paramNames = ["value", "Q"];
func41.definitionLine = 28;
func41.definitionModule = "typeComparison";
return this;
}
if (typeof global !== "undefined")
global.gracecode_typeComparison = gracecode_typeComparison;
if (typeof window !== "undefined")
window.gracecode_typeComparison = gracecode_typeComparison;
gracecode_typeComparison.definitionModule = "typeComparison";
gracecode_typeComparison.sourceFile = gracecode_typeComparison_sourceFile;
gracecode_typeComparison.sha256 = gracecode_typeComparison_sha256;
gracecode_typeComparison.minigraceRevision = gracecode_typeComparison_minigraceRevision;
gracecode_typeComparison.minigraceGeneration = gracecode_typeComparison_minigraceGeneration;
gracecode_typeComparison.imports = [ ["standard", "5016aa3a5b2e0d35a67289d21c1e41cf8d73bef931ceea7b35f6a8b10a1386cf"],
["mirror", "50f3da794fdf32fc3f5de55752f15752f46ae09666701a8c24a3578df41bc6bf"] ];
gracecode_typeComparison.definitionLine = 1;