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 }