1 module orelang.operator.DebugOperators; 2 import orelang.operator.DynamicOperator, 3 orelang.expression.SymbolValue, 4 orelang.operator.IOperator, 5 orelang.Closure, 6 orelang.Engine, 7 orelang.Value; 8 import std.stdio; 9 10 class DumpVaribalesOperator : IOperator { 11 public Value call(Engine engine, Value[] args) { 12 auto storage = engine.variables; 13 14 writeln("[DEBUG - DumpVaribalesOperator]"); 15 foreach (key, value; storage) { 16 writeln("[Varibale] ", key, " <=> ", value); 17 } 18 19 return new Value; 20 } 21 } 22 23 class PeekClosureOperator : IOperator { 24 public Value call(Engine engine, Value[] args) { 25 Closure cls = engine.eval(args[0]).getClosure; 26 auto storage = cls.engine.variables; 27 28 writeln("[DEBUG - PeekClosureOperator]"); 29 writeln(" - cls.engine -> ", cls.engine); 30 writeln(" - cls.operator -> ", cls.operator); 31 32 foreach (key, value; storage) { 33 writeln("[Varibale] ", key, " <=> ", value); 34 } 35 36 return new Value; 37 } 38 } 39 40 class CallClosureOperator : IOperator { 41 public Value call(Engine engine, Value[] args) { 42 Closure cls = engine.eval(args[0]).getClosure; 43 writeln("[DEBUG - CallClosureOperator]"); 44 writeln(" - cls.engine -> ", cls.engine); 45 writeln(" - cls.operator -> ", cls.operator); 46 47 return cls.eval(args[1..$]); 48 } 49 } 50 51 class LookupSymbolOperator : IOperator { 52 public Value call(Engine engine, Value[] args) { 53 SymbolValue cls = engine.eval(args[0]).getSymbolValue; 54 55 return new Value; 56 } 57 }