minigrace
Version:
A compiler for the Grace programming language
578 lines (568 loc) • 25.5 kB
JavaScript
let gracecode_sys_sourceFile = "/Users/black/Development/mg/gracelang/minigrace/sys.grace";
let gracecode_sys_sha256 = "cb194af55700376f853b803d84554667b792a21625737ad901b479bf78dfad01";
let gracecode_sys_minigraceRevision = "b57591d29fc5ee5270d114920bf671367b8c3ecb";
let gracecode_sys_minigraceGeneration = "5171";
if (typeof gctCache !== "undefined")
gctCache["sys"] = "dialect:\n standard\nfreshScopes:\nmethodTypes:$100:\n argv \u2192 Sequence\u27e6String\u27e7\n elapsedTime \u2192 Number\n environ \u2192 Environment\n execPath \u2192 String\n exit(code:Number) \u2192 Done\nmethodTypes:$101:\n at(key:String) \u2192 String\n at(key:String)put(value:String) \u2192 Boolean\n contains(key:String) \u2192 Boolean\n remove(key:String) \u2192 Done\nmodules:\n standard\npath:\n /Users/black/Development/mg/gracelang/minigrace/sys.grace\nscope:$100:\n Environment type\n argv Sequence (mth) $scope_done\n asDebugString String (go) $scope_string\n asString String (go) $scope_string\n basicAsString String (go) $scope_string\n cwd Unknown (mth) $scope_done\n elapsedTime Number (mth) $scope_done\n environ Environment (def) $101 public\n execPath String (mth) $scope_done\n exit(1) Done (mth) $scope_done\n isMe(1) Boolean (go) $scope_boolean\n myIdentityHash Number (go) $scope_number\n requestCount Unknown (mth) $scope_done\nscope:$101:\n asDebugString String (go) $scope_string\n asString Unknown (mth) $scope_done\n at(1) String (mth) $scope_done\n at(1)put(1) Boolean (mth) $scope_done\n basicAsString String (go) $scope_string\n contains(1) Boolean (mth) $scope_done\n isMe(1) Boolean (go) $scope_boolean\n myIdentityHash Number (go) $scope_number\n remove(1) Done (mth) $scope_done\nself:\n $100\ntypedec:$100.Environment:\n type Environment = Object & interface {\n at(key:String) \u2192 String\n at(key:String)put(value:String) \u2192 Boolean\n contains(key:String) \u2192 Boolean\n remove(key:String) \u2192 Done}\ntypes:\n $100.Environment\n";
if (typeof originalSourceLines !== "undefined") {
originalSourceLines["sys"] = [
"dialect \"standard\"",
"type Environment = Object & interface {",
" at(key:String) -> String",
" at(key:String) put(value:String) -> Boolean",
" contains(key:String) -> Boolean",
" remove(key:String) -> Done",
"}",
"",
"native \"js\" code ‹var startTime = (new Date).getTime()/1000;›",
"",
"method argv -> Sequence⟦String⟧ {",
" native \"js\" code ‹",
" if (!inBrowser) {",
" var list = [];",
" process.argv.forEach(function(val, index, array) {",
" if (index > 0) // element 0 is /usr/local/bin/node, or similar",
" list.push(new GraceString(val));",
" });",
" return new GraceSequence(list);",
" } else {",
" return new GraceSequence([",
" new GraceString(\"minigrace\"),",
" new GraceString(\"--target\"),",
" new GraceString(\"js\")",
" ]);",
" };",
" ›",
"}",
"",
"method cwd {",
" native \"js\" code ‹",
" if (inBrowser) return new GraceString(\"\");",
" return new GraceString(process.cwd() + require('path').sep);",
" ›",
"}",
"",
"method elapsedTime -> Number {",
" native \"js\" code ‹",
" return new GraceNum(((new Date).getTime()/1000)-startTime);",
" ›",
"}",
"method exit(code:Number) -> Done {",
" native \"js\" code‹",
" if (typeof process === \"undefined\") {",
" throw \"SystemExit\";",
" } else {",
" process.exit(var_code._value);",
" }",
" ›",
"}",
"method execPath -> String {",
" // the path to this executable",
" native \"js\" code ‹",
" if (typeof minigrace.execFile === \"undefined\") {",
" return new GraceString(\".\");",
" }",
" var execFile = minigrace.execFile;",
" var slashIx = execFile.lastIndexOf(\"/\");",
" var execDir = execFile.substring(0, slashIx + 1); // includes the trailing /",
" return new GraceString(execDir);",
" ›",
"}",
"method requestCount {",
" // the number of Grace requests that have been executed since startup",
" native \"js\" code ‹return new GraceNum(invocationCount);›",
"}",
"",
"def environ:Environment is public = object {",
" // the Unix \"Environment\" as a Grace object",
"",
" method asString { \"the Environment object\" }",
" method at(key:String) -> String {",
" native \"js\" code ‹",
" if (!inBrowser) {",
" const str = safeJsString(var_key);",
" if (str in process.env)",
" return new GraceString(process.env[str]);",
" }",
" return GraceEmptyString;",
" ›",
" }",
" method at(key:String) put(value:String) -> Boolean {",
" native \"js\" code ‹",
" if (inBrowser) { return GraceFalse; }",
" const kstr = safeJsString(var_key);",
" const vstr = safeJsString(var_value);",
" process.env[kstr] = vstr;",
" return GraceTrue;",
" ›",
" }",
" method contains(key:String) -> Boolean {",
" native \"js\" code ‹",
" if (inBrowser) { return GraceFalse; }",
" return (safeJsString(var_key) in process.env) ? GraceTrue : GraceFalse;",
" ›",
" }",
" method remove(key:String) -> Done {",
" native \"js\" code ‹",
" const kstr = safeJsString(var_key);",
" delete process.env[kstr];",
" ›",
" }",
"}" ];
}
function gracecode_sys() {
importedModules["sys"] = this;
const var_$module = this;
this.definitionModule = "sys";
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_sys_1");
this.outer_sys_1 = var_$dialect;
setLineNumber(2); // compilenode typedec
// Type decl Environment
var func1 = function(argcv) { // method Environment, line 1
var returnTarget = invocationCount;
invocationCount++;
setLineNumber(1); // compilenode string
var string3 = new GraceString("Environment");
// call case 4: other requests
setLineNumber(2); // compilenode interfaceliteral
// interface literal
var iface5 = new GraceInterface("\u2039anon\u203a");
sig6 = () => {
setLineNumber(3); // compilenode member
var call7 = selfRequest(var_$dialect, "String", [0]);
var call8 = selfRequest(var_$dialect, "String", [0]);
return new GraceSignature("at(1)", ["key"], [], [call7], call8);
}
sig9 = () => {
setLineNumber(4); // compilenode member
var call10 = selfRequest(var_$dialect, "String", [0]);
var call11 = selfRequest(var_$dialect, "String", [0]);
var call12 = selfRequest(var_$dialect, "Boolean", [0]);
return new GraceSignature("at(1)put(1)", ["key", "value"], [], [call10, call11], call12);
}
sig13 = () => {
setLineNumber(5); // compilenode member
var call14 = selfRequest(var_$dialect, "String", [0]);
var call15 = selfRequest(var_$dialect, "Boolean", [0]);
return new GraceSignature("contains(1)", ["key"], [], [call14], call15);
}
sig16 = () => {
setLineNumber(6); // compilenode member
var call17 = selfRequest(var_$dialect, "String", [0]);
var call18 = selfRequest(var_$dialect, "Done", [0]);
return new GraceSignature("remove(1)", ["key"], [], [call17], call18);
}
iface5.typeMethods = {
"at(1)": sig6
, "at(1)put(1)": sig9
, "contains(1)": sig13
, "remove(1)": sig16
};
// call case 4: other requests
setLineNumber(2); // compilenode member
var call19 = selfRequest(var_$dialect, "Object", [0]);
var term4 = request(call19, "&(1)", [1], iface5);
var call2 = selfRequest(term4, "setTypeName(1)", [1], string3);
return call2;
}; // end of method Environment
function memofunc1(argcv) {
if (! this.data["memo$Environment"]) // parameterless memo function
this.data["memo$Environment"] = func1.call(this, argcv);
return this.data["memo$Environment"];
};
this.methods["Environment"] = memofunc1;
memofunc1.methodName = "Environment";
memofunc1.paramCounts = [0];
memofunc1.paramNames = [];
memofunc1.definitionLine = 1;
memofunc1.definitionModule = "sys";
func1.methodName = "Environment";
func1.paramCounts = [0];
func1.paramNames = [];
func1.definitionLine = 1;
func1.definitionModule = "sys";
var func20 = function(argcv) { // method argv, line 11
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 0) && (numArgs !== 0)) {
raiseTypeArgError("argv", 0, numArgs - 0);
}
setLineNumber(12); // compilenode call
var result = GraceDone; // start native code from line 12
if (!inBrowser) {
var list = [];
process.argv.forEach(function(val, index, array) {
if (index > 0) // element 0 is /usr/local/bin/node, or similar
list.push(new GraceString(val));
});
return new GraceSequence(list);
} else {
return new GraceSequence([
new GraceString("minigrace"),
new GraceString("--target"),
new GraceString("js")
]);
};
// end native code insertion
setLineNumber(11); // compilenode member
var call22 = selfRequest(var_$dialect, "Sequence", [0]);
setLineNumber(12); // typecheck
assertTypeOrMsg(result, call22, "result of method argv", "Sequence");
return result;
}; // end of method argv
setLineNumber(11); // compilenode member
var call23 = selfRequest(var_$dialect, "Sequence", [0]);
func20.returnType = call23;
this.methods["argv"] = func20;
func20.methodName = "argv";
func20.paramCounts = [0];
func20.paramNames = [];
func20.definitionLine = 11;
func20.definitionModule = "sys";
var func24 = function(argcv) { // method cwd, line 30
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 0) && (numArgs !== 0)) {
raiseTypeArgError("cwd", 0, numArgs - 0);
}
setLineNumber(31); // compilenode call
var result = GraceDone; // start native code from line 31
if (inBrowser) return new GraceString("");
return new GraceString(process.cwd() + require('path').sep);
// end native code insertion
return result;
}; // end of method cwd
this.methods["cwd"] = func24;
func24.methodName = "cwd";
func24.paramCounts = [0];
func24.paramNames = [];
func24.definitionLine = 30;
func24.definitionModule = "sys";
var func26 = function(argcv) { // method elapsedTime, line 37
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 0) && (numArgs !== 0)) {
raiseTypeArgError("elapsedTime", 0, numArgs - 0);
}
setLineNumber(38); // compilenode call
var result = GraceDone; // start native code from line 38
return new GraceNum(((new Date).getTime()/1000)-startTime);
// end native code insertion
setLineNumber(37); // compilenode member
var call28 = selfRequest(var_$dialect, "Number", [0]);
setLineNumber(38); // typecheck
assertTypeOrMsg(result, call28, "result of method elapsedTime", "Number");
return result;
}; // end of method elapsedTime
setLineNumber(37); // compilenode member
var call29 = selfRequest(var_$dialect, "Number", [0]);
func26.returnType = call29;
this.methods["elapsedTime"] = func26;
func26.methodName = "elapsedTime";
func26.paramCounts = [0];
func26.paramNames = [];
func26.definitionLine = 37;
func26.definitionModule = "sys";
var func30 = function(argcv, var_code) { // method exit(_), line 42
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 1) && (numArgs !== 1)) {
raiseTypeArgError("exit(_)", 0, numArgs - 1);
}
setLineNumber(42); // compilenode member
var call31 = selfRequest(var_$dialect, "Number", [0]);
assertTypeOrMsg(var_code, call31, "argument to request of `exit(_)`", "Number");
setLineNumber(43); // compilenode call
var result = GraceDone; // start native code from line 43
if (typeof process === "undefined") {
throw "SystemExit";
} else {
process.exit(var_code._value);
}
// end native code insertion
return result;
}; // end of method exit(_)
setLineNumber(42); // compilenode member
var call33 = selfRequest(var_$dialect, "Number", [0]);
func30.paramTypes = [call33];
var call34 = selfRequest(var_$dialect, "Done", [0]);
func30.returnType = call34;
this.methods["exit(1)"] = func30;
func30.methodName = "exit(1)";
func30.paramCounts = [1];
func30.paramNames = ["code"];
func30.definitionLine = 42;
func30.definitionModule = "sys";
var func35 = function(argcv) { // method execPath, line 51
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 0) && (numArgs !== 0)) {
raiseTypeArgError("execPath", 0, numArgs - 0);
}
setLineNumber(53); // compilenode call
var result = GraceDone; // start native code from line 53
if (typeof minigrace.execFile === "undefined") {
return new GraceString(".");
}
var execFile = minigrace.execFile;
var slashIx = execFile.lastIndexOf("/");
var execDir = execFile.substring(0, slashIx + 1); // includes the trailing /
return new GraceString(execDir);
// end native code insertion
setLineNumber(51); // compilenode member
var call37 = selfRequest(var_$dialect, "String", [0]);
setLineNumber(53); // typecheck
assertTypeOrMsg(result, call37, "result of method execPath", "String");
return result;
}; // end of method execPath
setLineNumber(51); // compilenode member
var call38 = selfRequest(var_$dialect, "String", [0]);
func35.returnType = call38;
this.methods["execPath"] = func35;
func35.methodName = "execPath";
func35.paramCounts = [0];
func35.paramNames = [];
func35.definitionLine = 51;
func35.definitionModule = "sys";
var func39 = function(argcv) { // method requestCount, line 63
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 0) && (numArgs !== 0)) {
raiseTypeArgError("requestCount", 0, numArgs - 0);
}
setLineNumber(65); // compilenode call
var result = GraceDone; // start native code from line 65
return new GraceNum(invocationCount); // end native code insertion
return result;
}; // end of method requestCount
this.methods["requestCount"] = func39;
func39.methodName = "requestCount";
func39.paramCounts = [0];
func39.paramNames = [];
func39.definitionLine = 63;
func39.definitionModule = "sys";
setLineNumber(9); // compilenode call
var result = GraceDone; // start native code from line 9
var startTime = (new Date).getTime()/1000; // end native code insertion
setLineNumber(68); // compilenode object
var obj42_build = function(ignore, outerObj, aliases, exclusions) {
this.closureKeys = this.closureKeys || [];
this.closureKeys.push("outer_sys_68");
this.outer_sys_68 = outerObj;
const inheritedExclusions = { };
for (var eix = 0, eLen = exclusions.length; eix < eLen; eix ++) {
const exMeth = exclusions[eix];
inheritedExclusions[exMeth] = this.methods[exMeth]; };
var func43 = function(argcv) { // method asString, line 71
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 0) && (numArgs !== 0)) {
raiseTypeArgError("asString", 0, numArgs - 0);
}
setLineNumber(71); // compilenode string
var string44 = new GraceString("the Environment object");
return string44;
}; // end of method asString
this.methods["asString"] = func43;
func43.methodName = "asString";
func43.paramCounts = [0];
func43.paramNames = [];
func43.definitionLine = 71;
func43.definitionModule = "sys";
var func45 = function(argcv, var_key) { // method at(_), line 72
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 1) && (numArgs !== 1)) {
raiseTypeArgError("at(_)", 0, numArgs - 1);
}
setLineNumber(72); // compilenode member
var call46 = selfRequest(var_$dialect, "String", [0]);
assertTypeOrMsg(var_key, call46, "argument to request of `at(_)`", "String");
setLineNumber(73); // compilenode call
var result = GraceDone; // start native code from line 73
if (!inBrowser) {
const str = safeJsString(var_key);
if (str in process.env)
return new GraceString(process.env[str]);
}
return GraceEmptyString;
// end native code insertion
setLineNumber(72); // compilenode member
var call48 = selfRequest(var_$dialect, "String", [0]);
setLineNumber(73); // typecheck
assertTypeOrMsg(result, call48, "result of method at(_)", "String");
return result;
}; // end of method at(_)
setLineNumber(72); // compilenode member
var call49 = selfRequest(var_$dialect, "String", [0]);
func45.paramTypes = [call49];
var call50 = selfRequest(var_$dialect, "String", [0]);
func45.returnType = call50;
this.methods["at(1)"] = func45;
func45.methodName = "at(1)";
func45.paramCounts = [1];
func45.paramNames = ["key"];
func45.definitionLine = 72;
func45.definitionModule = "sys";
var func51 = function(argcv, var_key, var_value) { // method at(_)put(_), line 82
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 2) && (numArgs !== 2)) {
raiseTypeArgError("at(_)put(_)", 0, numArgs - 2);
}
setLineNumber(82); // compilenode member
var call52 = selfRequest(var_$dialect, "String", [0]);
assertTypeOrMsg(var_key, call52, "argument 1 in request of `at(_)put(_)`", "String");
var call53 = selfRequest(var_$dialect, "String", [0]);
assertTypeOrMsg(var_value, call53, "argument 2 in request of `at(_)put(_)`", "String");
setLineNumber(83); // compilenode call
var result = GraceDone; // start native code from line 83
if (inBrowser) { return GraceFalse; }
const kstr = safeJsString(var_key);
const vstr = safeJsString(var_value);
process.env[kstr] = vstr;
return GraceTrue;
// end native code insertion
setLineNumber(82); // compilenode member
var call55 = selfRequest(var_$dialect, "Boolean", [0]);
setLineNumber(83); // typecheck
assertTypeOrMsg(result, call55, "result of method at(_)put(_)", "Boolean");
return result;
}; // end of method at(_)put(_)
setLineNumber(82); // compilenode member
var call56 = selfRequest(var_$dialect, "String", [0]);
var call57 = selfRequest(var_$dialect, "String", [0]);
func51.paramTypes = [call56, call57];
var call58 = selfRequest(var_$dialect, "Boolean", [0]);
func51.returnType = call58;
this.methods["at(1)put(1)"] = func51;
func51.methodName = "at(1)put(1)";
func51.paramCounts = [1, 1];
func51.paramNames = ["key", "value"];
func51.definitionLine = 82;
func51.definitionModule = "sys";
var func59 = function(argcv, var_key) { // method contains(_), line 91
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 1) && (numArgs !== 1)) {
raiseTypeArgError("contains(_)", 0, numArgs - 1);
}
setLineNumber(91); // compilenode member
var call60 = selfRequest(var_$dialect, "String", [0]);
assertTypeOrMsg(var_key, call60, "argument to request of `contains(_)`", "String");
setLineNumber(92); // compilenode call
var result = GraceDone; // start native code from line 92
if (inBrowser) { return GraceFalse; }
return (safeJsString(var_key) in process.env) ? GraceTrue : GraceFalse;
// end native code insertion
setLineNumber(91); // compilenode member
var call62 = selfRequest(var_$dialect, "Boolean", [0]);
setLineNumber(92); // typecheck
assertTypeOrMsg(result, call62, "result of method contains(_)", "Boolean");
return result;
}; // end of method contains(_)
setLineNumber(91); // compilenode member
var call63 = selfRequest(var_$dialect, "String", [0]);
func59.paramTypes = [call63];
var call64 = selfRequest(var_$dialect, "Boolean", [0]);
func59.returnType = call64;
this.methods["contains(1)"] = func59;
func59.methodName = "contains(1)";
func59.paramCounts = [1];
func59.paramNames = ["key"];
func59.definitionLine = 91;
func59.definitionModule = "sys";
var func65 = function(argcv, var_key) { // method remove(_), line 97
var returnTarget = invocationCount;
invocationCount++;
const numArgs = arguments.length - 1;
if ((numArgs > 1) && (numArgs !== 1)) {
raiseTypeArgError("remove(_)", 0, numArgs - 1);
}
setLineNumber(97); // compilenode member
var call66 = selfRequest(var_$dialect, "String", [0]);
assertTypeOrMsg(var_key, call66, "argument to request of `remove(_)`", "String");
setLineNumber(98); // compilenode call
var result = GraceDone; // start native code from line 98
const kstr = safeJsString(var_key);
delete process.env[kstr];
// end native code insertion
return result;
}; // end of method remove(_)
setLineNumber(97); // compilenode member
var call68 = selfRequest(var_$dialect, "String", [0]);
func65.paramTypes = [call68];
var call69 = selfRequest(var_$dialect, "Done", [0]);
func65.returnType = call69;
this.methods["remove(1)"] = func65;
func65.methodName = "remove(1)";
func65.paramCounts = [1];
func65.paramNames = ["key"];
func65.definitionLine = 97;
func65.definitionModule = "sys";
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 = 68;
m.definitionModule = "sys";
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 obj42_init = function() { // init of object on line 68
};
return obj42_init; // from compileBuildAndInitFunctions(_)inMethod(_)
};
var obj42 = emptyGraceObject("environ", "sys", 68);
var obj42_init = obj42_build.call(obj42, null, this, [], []);
obj42_init.call(obj42); // end of compileobject
var var_environ = obj42;
var reader70_environ = function() { // reader method environ
if (var_environ === undefined) raiseUninitializedVariable("environ");
return var_environ;
};
reader70_environ.isDef = true;
this.methods["environ"] = reader70_environ;
setLineNumber(68); // compilenode member
var call71 = selfRequest(var_$module, "Environment", [0]);
assertTypeOrMsg(var_environ, call71, "value of def environ", "Environment");
return this;
}
if (typeof global !== "undefined")
global.gracecode_sys = gracecode_sys;
if (typeof window !== "undefined")
window.gracecode_sys = gracecode_sys;
gracecode_sys.definitionModule = "sys";
gracecode_sys.sourceFile = gracecode_sys_sourceFile;
gracecode_sys.sha256 = gracecode_sys_sha256;
gracecode_sys.minigraceRevision = gracecode_sys_minigraceRevision;
gracecode_sys.minigraceGeneration = gracecode_sys_minigraceGeneration;
gracecode_sys.imports = [ ["standard", "5016aa3a5b2e0d35a67289d21c1e41cf8d73bef931ceea7b35f6a8b10a1386cf"] ];
gracecode_sys.definitionLine = 1;