public void Visit(ASTNode_Application node)
 {
     node.procedureNode.AcceptVisitor(this);
     foreach (var n in node.actualNodes)
     {
         n.AcceptVisitor(this);
     }
 }
Example #2
0
            public void Visit(ASTNode_Application node)
            {
                node.procedureNode.AcceptVisitor(this);
                var p       = (Procedure)Value;
                var actuals = new List <object>();

                foreach (var e in node.actualNodes)
                {
                    e.AcceptVisitor(this);
                    actuals.Add(Value);
                }
                Value = p(actuals);
            }
Example #3
0
            public void Visit(ASTNode_Application node)
            {
                mTailFlag.Push(false);
                node.procedureNode.AcceptVisitor(this);
                mTailFlag.Pop();

                foreach (var n in node.actualNodes)
                {
                    mTailFlag.Push(false);
                    n.AcceptVisitor(this);
                    mTailFlag.Pop();
                }

                if (mTailFlag.All(b => b))
                {
                    ByteCodes.Add(ByteCodeEnum.TAIL_CALL);
                }
                else
                {
                    ByteCodes.Add(ByteCodeEnum.CALL);
                }
                ByteCodes.Add(node.actualNodes.Count);
            }
Example #4
0
 public void Visit(ASTNode_Application node)
 {
     node.procedureNode.AcceptVisitor(this);
     var p = (Procedure)Value;
     var actuals = new List<object>();
     foreach (var e in node.actualNodes) {
         e.AcceptVisitor(this);
         actuals.Add(Value);
     }
     Value = p(actuals);
 }
Example #5
0
 public void Visit(ASTNode_Application node)
 {
     node.procedureNode.AcceptVisitor(this);
     foreach (var n in node.actualNodes) n.AcceptVisitor(this);
 }
            public void Visit(ASTNode_Application node)
            {
                mTailFlag.Push(false);
                node.procedureNode.AcceptVisitor(this);
                mTailFlag.Pop();

                foreach (var n in node.actualNodes) {
                    mTailFlag.Push(false);
                    n.AcceptVisitor(this);
                    mTailFlag.Pop();
                }

                if (mTailFlag.All(b => b)) {
                    ByteCodes.Add(ByteCodeEnum.TAIL_CALL);
                } else {
                    ByteCodes.Add(ByteCodeEnum.CALL);
                }
                ByteCodes.Add(node.actualNodes.Count);
            }