Dimension

CodeOut.java

Dec 10th, 2011
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.89 KB | None | 0 0
  1. package emulator.editor;
  2.  
  3. import static emulator.memory.Memory.Access.StructureAccess.simpleStructureAccess;
  4.  
  5. import java.awt.Color;
  6. import java.util.*;
  7. import java.util.Map.Entry;
  8.  
  9. import emulator.*;
  10. import emulator.Hypervisor.Call;
  11. import emulator.code.*;
  12. import emulator.code.Code.Decl;
  13. import emulator.code.Operation.OperationType;
  14. import emulator.editor.CodeIn.CodeInDef;
  15. import emulator.editor.CodeIn.CodeInDef.EditToken;
  16. import emulator.editor.Context.CodeContext;
  17. import emulator.editor.Context.CodeTreeContext;
  18. import emulator.editor.Context.TreePosition;
  19. import emulator.io.Video2d;
  20. import emulator.memory.*;
  21. import emulator.memory.Identifier.Property;
  22. import emulator.memory.Identifier.Stack;
  23. import emulator.memory.Memory.Access;
  24. import emulator.memory.Memory.Access.StackAccess;
  25. import emulator.memory.Memory.Access.StructureAccess;
  26.  
  27. public class CodeOut {
  28.     public static final LinkedHashMap<Operation.OperationType, CodeOutDef> codeOut = new LinkedHashMap<Operation.OperationType, CodeOut.CodeOutDef>();
  29.    
  30.     public static void initCodeOut() {
  31.        
  32.         // Control
  33.  
  34.         codeOut.put(Operation.OperationType.Control.OP_SEQUENCE, new CodeOutDef(
  35.             new DisplayScript() {
  36.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  37.                     //...
  38.                 }
  39.             },
  40.             new ExecuteScript[] {
  41.             new ExecuteScript() { // 0
  42.                 public void exec(CodeContext context, Call call) {
  43.                     int size2 = call.declInitList.size();
  44.                    
  45.                     if(call.step2 >= size2) {
  46.                         call.step2 = 0;
  47.                         call.step = 2;
  48.                     }
  49.                     else {
  50.                         Code.Decl decl = call.declInitList.get(call.step2);
  51.                         assert decl.initType == Code.Decl.InitType.EXPRESSION;
  52.                        
  53.                         Code code2 = (Code) Memory.Process.resolveExecuteItem(context.process, decl.initExpression)[0];
  54.                         Hypervisor.pushExecuteExpression(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code2), true));
  55.                     }
  56.                 }
  57.             },
  58.             new ExecuteScript() { // 1
  59.                 public void exec(CodeContext context, Call call) {
  60.                     int size2 = call.declInitList.size();
  61.                    
  62.                     assert call.step2 < size2;
  63.                    
  64.                     {
  65.                         Code.Decl decl = call.declInitList.get(call.step2);
  66.                         assert decl.initType == Code.Decl.InitType.EXPRESSION;
  67.                        
  68.                         Object[] access2 = Memory.Process.resolveItem(context.process, decl.access);
  69.                        
  70.                         access2[0] = Hypervisor.popEvaluate(context.threadStackContext);
  71.                     }
  72.                    
  73.                     call.step2++;
  74.                     call.step = 0;
  75.                 }
  76.             },
  77.             new ExecuteScript() { // 2
  78.                 public void exec(CodeContext context, Call call) {
  79.                     int size2 = ((Structure.List.Vector) Memory.Process.resolveExecuteItem(context.process, context.code.codeList.get(new Identifier.Property("code")))[0]).size();
  80.                    
  81.                     if(call.step2 >= size2) {
  82.                         call.step = -1;
  83.                     }
  84.                     else {
  85.                         Code code2 = (Code) Memory.Process.resolveExecuteItem(context.process, new Access.MultipleAccess(context.code.codeList.get(new Identifier.Property("code")), new StructureAccess(new Identifier.Property("index", call.step2))))[0];
  86.                         Hypervisor.pushExecute(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code2), false));
  87.                        
  88.                         call.step2++;
  89.                         call.step = 2;
  90.                     }
  91.                 }
  92.             }
  93.             }
  94.         ));
  95.  
  96.         codeOut.put(Operation.OperationType.Control.OP_ENVIRONMENT, new CodeOutDef(
  97.             new DisplayScript() {
  98.                     //...
  99.             },
  100.             new ExecuteScript[] {
  101.             new ExecuteScript() {
  102.                 public void exec(CodeContext context, Call call) {
  103.                
  104.                 }
  105.             }
  106.             }
  107.         ));
  108.        
  109.         codeOut.put(Operation.OperationType.Control.OP_IF, new CodeOutDef(
  110.                 // TODO expression syntax
  111.                 // TODO switch syntax
  112.                 // TODO fall through (, inner break)
  113.             new DisplayScript() {
  114.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  115.                     //...
  116.                 }
  117.             },
  118.             new ExecuteScript[] {
  119.             new ExecuteScript() { // 0
  120.                 public void exec(CodeContext context, Call call) {
  121.                     int size2 = ((Structure.List.Vector) Memory.Process.resolveExecuteItem(context.process, context.code.dataList.get(new Identifier.Property("cond")))[0]).size();
  122.                     assert call.step2 < size2;
  123.                    
  124.                     Code code1 = (Code) Memory.Process.resolveExecuteItem(context.process, new Access.MultipleAccess(context.code.dataList.get(new Identifier.Property("cond")), new StructureAccess(new Identifier.Property("index", call.step2))))[0];
  125.                     Hypervisor.pushExecuteExpression(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code1), true));
  126.                 }
  127.             },
  128.             new ExecuteScript() { // 1
  129.                 public void exec(CodeContext context, Call call) {
  130.                     int size2 = ((Structure.List.Vector) Memory.Process.resolveExecuteItem(context.process, context.code.dataList.get(new Identifier.Property("cond")))[0]).size();
  131.                     int size3 = ((Structure.List.Vector) Memory.Process.resolveExecuteItem(context.process, context.code.codeList.get(new Identifier.Property("code")))[0]).size();
  132.                     assert call.step2 < size2;
  133.                     assert call.step2 < size3;
  134.                    
  135.                     boolean expression1 = (Boolean) Hypervisor.popEvaluate(context.threadStackContext);
  136.                     if(expression1) {
  137.                         Code code2 = (Code) Memory.Process.resolveExecuteItem(context.process, new Access.MultipleAccess(context.code.codeList.get(new Identifier.Property("code")), new StructureAccess(new Identifier.Property("index", call.step2))))[0];
  138.                         Hypervisor.pushExecutePassthrough(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code2), call.executeAsExpression), call);
  139.                        
  140.                         call.step = -1;
  141.                     }
  142.                     else {
  143.                         call.step2++;
  144.                        
  145.                         if(call.step2 < size2) {
  146.                             call.step = 0;
  147.                         }
  148.                     }
  149.                 }
  150.             },
  151.             new ExecuteScript() { // 2
  152.                 public void exec(CodeContext context, Call call) {
  153.                     int size3 = ((Structure.List.Vector) Memory.Process.resolveExecuteItem(context.process, context.code.codeList.get(new Identifier.Property("code")))[0]).size();
  154.                    
  155.                     if(call.step2 < size3) {
  156.                         Code code2 = (Code) Memory.Process.resolveExecuteItem(context.process, new Access.MultipleAccess(context.code.codeList.get(new Identifier.Property("code")), new StructureAccess(new Identifier.Property("index", call.step2))))[0];
  157.                         Hypervisor.pushExecutePassthrough(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code2), call.executeAsExpression), call);
  158.                     }
  159.                    
  160.                     call.step = -1;
  161.                 }
  162.             }
  163.             }
  164.         ));
  165.  
  166.         codeOut.put(Operation.OperationType.Control.OP_FOR_STEP, new CodeOutDef(
  167.             new DisplayScript() {
  168.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  169.                     //...
  170.                 }
  171.             },
  172.             new ExecuteScript[] {
  173.             // OP_WHILE + step + decl
  174.             // TODO provide iterator
  175.             new ExecuteScript() { // 0
  176.                 public void exec(CodeContext context, Call call) {
  177.                     Code code1 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.dataList.get(new Identifier.Property("cond")))[0];
  178.                     Hypervisor.pushExecuteExpression(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code1), true));
  179.                 }
  180.             },
  181.             new ExecuteScript() { // 1
  182.                 public void exec(CodeContext context, Call call) {
  183.                     boolean expression1 = (Boolean) Hypervisor.popEvaluate(context.threadStackContext);
  184.                     if(expression1) {
  185.                         Code code2 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.codeList.get(new Identifier.Property("code")))[0];
  186.                         Hypervisor.pushExecutePassthrough(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code2), call.executeAsExpression), call);
  187.                        
  188.                         call.step2++;
  189.                     }
  190.                     else {
  191.                         call.step = -1;
  192.                     }
  193.                 }
  194.             },
  195.             new ExecuteScript() { // 2
  196.                 public void exec(CodeContext context, Call call) {
  197.                     Code code1 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.codeList.get(new Identifier.Property("step")))[0];
  198.                     Hypervisor.pushExecute(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code1), false));
  199.  
  200.                     call.step = 0;
  201.                 }
  202.             }
  203.             }
  204.         ));
  205.  
  206.         codeOut.put(Operation.OperationType.Control.OP_FOR_LIST, new CodeOutDef(
  207.             new DisplayScript() {
  208.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  209.                     //...
  210.                 }
  211.             },
  212.             new ExecuteScript[] {
  213.             // TODO provide iterator
  214.             new ExecuteScript() {
  215.                 public void exec(CodeContext context, Call call) {
  216.                
  217.                 }
  218.             }
  219.             }
  220.         ));
  221.  
  222.         codeOut.put(Operation.OperationType.Control.OP_FOR_LOOP, new CodeOutDef(
  223.             new DisplayScript() {
  224.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  225.                     //...
  226.                 }
  227.             },
  228.             new ExecuteScript[] {
  229.             // TODO provide iterator
  230.             new ExecuteScript() {
  231.                 public void exec(CodeContext context, Call call) {
  232.                
  233.                 }
  234.             }
  235.             }
  236.         ));
  237.  
  238.         codeOut.put(Operation.OperationType.Control.OP_WHILE, new CodeOutDef(
  239.             new DisplayScript() {
  240.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  241.                    
  242.                 }
  243.             },
  244.             new ExecuteScript[] {
  245.             // OP_IF as loop
  246.             // TODO provide iterator
  247.             new ExecuteScript() { // 0
  248.                 public void exec(CodeContext context, Call call) {
  249.                     if(call.step2 == 0 && context.code.propertyList.containsKey(new Identifier.Property("do while"))) {
  250.                        
  251.                     }
  252.                     else {
  253.                         Code code1 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.dataList.get(new Identifier.Property("cond")))[0];
  254.                         Hypervisor.pushExecuteExpression(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code1), true));
  255.                     }
  256.                 }
  257.             },
  258.             new ExecuteScript() { // 1
  259.                 public void exec(CodeContext context, Call call) {
  260.                     boolean expression1 = (Boolean) Hypervisor.popEvaluate(context.threadStackContext);
  261.                     if(expression1) {
  262.                         Code code2 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.codeList.get(new Identifier.Property("code")))[0];
  263.                         Hypervisor.pushExecutePassthrough(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code2), call.executeAsExpression), call);
  264.  
  265.                         call.step2++;
  266.                         call.step = 0;
  267.                     }
  268.                     else {
  269.                         call.step = -1;
  270.                     }
  271.                 }
  272.             }
  273.             }
  274.         ));
  275.  
  276.         codeOut.put(Operation.OperationType.Control.OP_INTERRUPT, new CodeOutDef(
  277.             new DisplayScript() {
  278.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  279.                    
  280.                 }
  281.             },
  282.             new ExecuteScript[] {
  283.             }
  284.         ));
  285.  
  286.         codeOut.put(Operation.OperationType.Control.OP_ASSERT, new CodeOutDef(
  287.             new DisplayScript() {
  288.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  289.                    
  290.                 }
  291.             },
  292.             new ExecuteScript[] {
  293.             new ExecuteScript() { // 0
  294.                 public void exec(CodeContext context, Call call) {
  295.                     Code code1 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.dataList.get(new Identifier.Property("cond")))[0];
  296.                     Hypervisor.pushExecuteExpression(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code1), true));
  297.                 }
  298.             },
  299.             new ExecuteScript() { // 1
  300.                 public void exec(CodeContext context, Call call) {
  301.                     boolean expression1 = (Boolean) Hypervisor.popEvaluate(context.threadStackContext);
  302.                     if(!expression1) {
  303.                         // TODO
  304.                         //Code code2 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.codeList.get(new Identifier.Property("code")))[0];
  305.                         //Hypervisor.pushExecutePassthrough(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code2), call.executeAsExpression), call);
  306.                     }
  307.                     call.step = -1;
  308.                 }
  309.             }
  310.             }
  311.         ));
  312.  
  313.         // Expression
  314.  
  315.         codeOut.put(Operation.OperationType.Expression.OP_ACCESS, new CodeOutDef(
  316.             new DisplayScript() {
  317.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  318.                    
  319.                    
  320.                     TreePosition treePosition = new TreePosition(treeContext);
  321.                    
  322.                     displayAccess(context, treeContext, treePosition);
  323.  
  324.                     treePosition.applySize();
  325.                 }
  326.             },
  327.             new ExecuteScript[] {
  328.             new ExecuteScript() {
  329.                 public void exec(CodeContext context, Call call) {
  330.                     Access access1 = (Access) Memory.Process.resolveItem(context.process, context.code.dataList.get(new Identifier.Property("source")))[0];
  331.                     Object expression1 = Memory.Process.resolveItem(context.process, access1)[0];
  332.                    
  333.                     Hypervisor.pushEvaluate(context.threadStackContext, expression1);
  334.                 }
  335.             }
  336.             }
  337.         ));
  338.  
  339.         codeOut.put(Operation.OperationType.Expression.OP_ASSIGN, new CodeOutDef(
  340.             new DisplayScript() {
  341.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  342.                    
  343.                 }
  344.             },
  345.             new ExecuteScript[] {
  346.             new ExecuteScript() {
  347.                 public void exec(CodeContext context, Call call) {
  348.                     Code code1 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.dataList.get(new Identifier.Property("source")))[0];
  349.                     Hypervisor.pushExecuteExpression(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code1), true));
  350.                 }
  351.             },
  352.             new ExecuteScript() {
  353.                 public void exec(CodeContext context, Call call) {
  354.                     Access access1 = (Access) Memory.Process.resolveItem(context.process, context.code.dataList.get(new Identifier.Property("destination")))[0];
  355.                     Object[] access2 = Memory.Process.resolveItem(context.process, access1);
  356.                    
  357.                     access2[0] = Hypervisor.getEvaluate(context.threadStackContext); // keep on stack
  358.                 }
  359.             }
  360.             }
  361.         ));
  362.  
  363.         codeOut.put(Operation.OperationType.Expression.OP_ASSIGN_OP, new CodeOutDef(
  364.             new DisplayScript() {
  365.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  366.                    
  367.                 }
  368.             },
  369.             new ExecuteScript[] {
  370.             new ExecuteScript() {
  371.                 public void exec(CodeContext context, Call call) {
  372.                     Code code1 = (Code) Memory.Process.resolveExecuteItem(context.process, context.code.dataList.get(new Identifier.Property("source")))[0];
  373.                     Hypervisor.pushExecuteExpression(context.threadStackContext, new Call(new CodeContext.CodeContextNew(context, code1), true));
  374.                    
  375.                     // TODO push evaluate and execute operator
  376.                 }
  377.             },
  378.             new ExecuteScript() {
  379.                 public void exec(CodeContext context, Call call) {
  380.                     Access access1 = (Access) Memory.Process.resolveItem(context.process, context.code.dataList.get(new Identifier.Property("destination")))[0];
  381.                     Object[] access2 = Memory.Process.resolveItem(context.process, access1);
  382.                    
  383.                     access2[0] = Hypervisor.getEvaluate(context.threadStackContext); // keep on stack
  384.                 }
  385.             }
  386.             }
  387.         ));
  388.  
  389.         codeOut.put(Operation.OperationType.Expression.OP_TRIGGER, new CodeOutDef(
  390.             new DisplayScript() {
  391.                 public void exec(CodeContext context, CodeTreeContext treeContext) {
  392.                     //...
  393.                 }
  394.             },
  395.             new ExecuteScript[] {
  396.             }
  397.         ));
  398.        
  399.         // Arithmetic
  400.        
  401.         {
  402.         CodeOutDef codeOutDef1 = new CodeOutDef(
  403.             CodeOutGroup.multipleExpressionDisplayScript,
  404.             CodeOutGroup.multipleArithmeticExecuteScript
  405.         );
  406.         codeOut.put(Operation.OperationType.Arithmetic.OP_ADD, codeOutDef1);
  407.         codeOut.put(Operation.OperationType.Arithmetic.OP_MUL, codeOutDef1);
  408.         }
  409.        
  410.         {
  411.         CodeOutDef codeOutDef1 = new CodeOutDef(
  412.             CodeOutGroup.binaryExpressionDisplayScript,
  413.             CodeOutGroup.binaryArithmeticExecuteScript
  414.         );
  415.         codeOut.put(Operation.OperationType.Arithmetic.OP_SUB, codeOutDef1);
  416.         codeOut.put(Operation.OperationType.Arithmetic.OP_DIV, codeOutDef1);
  417.         codeOut.put(Operation.OperationType.Arithmetic.OP_MOD, codeOutDef1);
  418.         }
  419.        
  420.         {
  421.         CodeOutDef codeOutDef1 = new CodeOutDef(
  422.             CodeOutGroup.unaryExpressionDisplayScript,
  423.             CodeOutGroup.unaryArithmeticExecuteScript
  424.         );
  425.         codeOut.put(Operation.OperationType.Arithmetic.OP_NEGATE, codeOutDef1);
  426.         }
  427.        
  428.         codeOut.put(Operation.OperationType.Arithmetic.OP_INC, new CodeOutDef(
  429.             CodeOutGroup.unaryExpressionDisplayScript,
  430.             new ExecuteScript[] {
  431.             new ExecuteScript() {
  432.                 public void exec(CodeContext context, Call call) {
  433.                     //TODO resolve access and execute (single step)
  434.                     // expect access
  435.                    
  436.  
  437.                     //assert code1.get(0).operationType == Operation.OperationType.Expression.OP_ACCESS;
  438.                 }
  439.             }
  440.             }
  441.         ));
  442.         codeOut.put(Operation.OperationType.Arithmetic.OP_DEC, new CodeOutDef(
  443.             CodeOutGroup.unaryExpressionDisplayScript,
  444.             new ExecuteScript[] {
  445.             new ExecuteScript() {
  446.                 public void exec(CodeContext context, Call call) {
  447.                     //TODO resolve access and execute (single step)
  448.                     // expect access
  449.                 }
  450.             }
  451.             }
  452.         ));
  453.        
  454.         // Bitwise
  455.        
  456.         {
  457.         CodeOutDef codeOutDef1 = new CodeOutDef(
  458.             CodeOutGroup.multipleExpressionDisplayScript,
  459.             CodeOutGroup.multipleBitwiseExecuteScript
  460.         );
  461.         codeOut.put(Operation.OperationType.Bitwise.OP_AND, codeOutDef1);
  462.         codeOut.put(Operation.OperationType.Bitwise.OP_OR, codeOutDef1);
  463.         codeOut.put(Operation.OperationType.Bitwise.OP_XOR, codeOutDef1);
  464.         }
  465.        
  466.         {
  467.         CodeOutDef codeOutDef1 = new CodeOutDef(
  468.             CodeOutGroup.binaryExpressionDisplayScript,
  469.             CodeOutGroup.binaryBitwiseExecuteScript
  470.         );
  471.         codeOut.put(Operation.OperationType.Bitwise.OP_SHR, codeOutDef1);
  472.         codeOut.put(Operation.OperationType.Bitwise.OP_SHL, codeOutDef1);
  473.         codeOut.put(Operation.OperationType.Bitwise.OP_ROR, codeOutDef1);
  474.         codeOut.put(Operation.OperationType.Bitwise.OP_ROL, codeOutDef1);
  475.         }
  476.        
  477.         {
  478.         CodeOutDef codeOutDef1 = new CodeOutDef(
  479.             CodeOutGroup.unaryExpressionDisplayScript,
  480.             CodeOutGroup.unaryBitwiseExecuteScript
  481.         );
  482.         codeOut.put(Operation.OperationType.Bitwise.OP_COMPLEMENT, codeOutDef1);
  483.         }
  484.        
  485.         // Logic
  486.        
  487.         {
  488.         CodeOutDef codeOutDef1 = new CodeOutDef(
  489.             CodeOutGroup.multipleExpressionDisplayScript,
  490.             CodeOutGroup.multipleLogicExecuteScript
  491.         );
  492.         codeOut.put(Operation.OperationType.Logic.OP_AND, codeOutDef1);
  493.         codeOut.put(Operation.OperationType.Logic.OP_OR, codeOutDef1);
  494.         codeOut.put(Operation.OperationType.Logic.OP_XOR, codeOutDef1);
  495.         }
  496.        
  497.         {
  498.         CodeOutDef codeOutDef1 = new CodeOutDef(
  499.             CodeOutGroup.binaryExpressionDisplayScript,
  500.             CodeOutGroup.binaryLogicExecuteScript
  501.         );
  502.         codeOut.put(Operation.OperationType.Logic.OP_EQ, codeOutDef1);
  503.         codeOut.put(Operation.OperationType.Logic.OP_NEQ, codeOutDef1);
  504.         codeOut.put(Operation.OperationType.Logic.OP_GT, codeOutDef1);
  505.         codeOut.put(Operation.OperationType.Logic.OP_GTE, codeOutDef1);
  506.         codeOut.put(Operation.OperationType.Logic.OP_LT, codeOutDef1);
  507.         codeOut.put(Operation.OperationType.Logic.OP_LTE, codeOutDef1);
  508.         }
  509.        
  510.         {
  511.         CodeOutDef codeOutDef1 = new CodeOutDef(
  512.             CodeOutGroup.unaryExpressionDisplayScript,
  513.             CodeOutGroup.unaryLogicExecuteScript
  514.         );
  515.         codeOut.put(Operation.OperationType.Logic.OP_NOT, codeOutDef1);
  516.         }
  517.     }
  518.  
  519.     //...
  520.  
  521.     public static class CodeOutDef {
  522.         public DisplayScript displayScript;
  523.         public ExecuteScript[] executeScript;
  524.  
  525.         public CodeOutDef(DisplayScript displayScript, ExecuteScript[] executeScript) {
  526.             this.displayScript = displayScript;
  527.             this.executeScript = executeScript;
  528.         };
  529.     }
  530.  
  531.     public static abstract class DisplayScript {
  532.         public abstract void exec(CodeContext context, CodeTreeContext treeContext);
  533.     }
  534.  
  535.     public static abstract class ExecuteScript {
  536.         public abstract void exec(CodeContext context, Call call);
  537.     }
  538. }
  539.  
  540.  
Advertisement
Add Comment
Please, Sign In to add comment