UNPKG

minigrace

Version:

A compiler for the Grace programming language

578 lines (568 loc) 25.5 kB
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;