1 /** 2 This module implements functions for the "console" namespace in the scripting language. 3 See https://pillager86.github.io/dmildew/console.html for more details. 4 5 ──────────────────────────────────────────────────────────────────────────────── 6 7 Copyright (C) 2021 pillager86.rf.gd 8 9 This program is free software: you can redistribute it and/or modify it under 10 the terms of the GNU General Public License as published by the Free Software 11 Foundation, either version 3 of the License, or (at your option) any later 12 version. 13 14 This program is distributed in the hope that it will be useful, but WITHOUT ANY 15 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 16 PARTICULAR PURPOSE. See the GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License along with 19 this program. If not, see <https://www.gnu.org/licenses/>. 20 */ 21 module mildew.stdlib.console; 22 23 import mildew.environment; 24 import mildew.interpreter; 25 import mildew.types; 26 27 /** 28 * Initializes the console library. This is called by Interpreter.initializeStdlib. The console 29 * functions are stored in the "console" global variable and are accessed such as "console.log". 30 * Documentation for these functions can be found at https://pillager86.github.io/dmildew/console.html 31 * Params: 32 * interpreter = The Interpreter object for which to load the namespace and functions. 33 */ 34 public void initializeConsoleLibrary(Interpreter interpreter) 35 { 36 auto consoleNamespace = new ScriptObject("Console", null); 37 consoleNamespace["log"] = ScriptAny(new ScriptFunction("console.log", &native_console_log)); 38 consoleNamespace["put"] = ScriptAny(new ScriptFunction("console.put", &native_console_put)); 39 consoleNamespace["error"] = ScriptAny(new ScriptFunction("console.error", &native_console_error)); 40 interpreter.forceSetGlobal("console", consoleNamespace, true); 41 } 42 43 private ScriptAny native_console_log(Environment environment, 44 ScriptAny* thisObj, 45 ScriptAny[] args, 46 ref NativeFunctionError nfe) 47 { 48 import std.stdio: write, writeln; 49 if(args.length > 0) 50 write(args[0].toString()); 51 if(args.length > 1) 52 foreach(arg ; args[1..$]) 53 write(" " ~ arg.toString); 54 writeln(); 55 return ScriptAny.UNDEFINED; 56 } 57 58 private ScriptAny native_console_put(Environment environment, 59 ScriptAny* thisObj, 60 ScriptAny[] args, 61 ref NativeFunctionError nfe) 62 { 63 import std.stdio: write, writeln; 64 if(args.length > 0) 65 write(args[0].toString()); 66 if(args.length > 1) 67 foreach(arg ; args[1..$]) 68 write(" " ~ arg.toString); 69 return ScriptAny.UNDEFINED; 70 } 71 72 private ScriptAny native_console_error(Environment environment, 73 ScriptAny* thisObj, 74 ScriptAny[] args, 75 ref NativeFunctionError nfe) 76 { 77 import std.stdio: stderr; 78 foreach(arg ; args) 79 stderr.write(arg.toString ~ " "); 80 stderr.writeln(); 81 return ScriptAny.UNDEFINED; 82 }