public void VisitForKeyValueIterator(ForKeyValueIteratorNode node) { UpdateLine(node); PushScope(); asm.Declare(node.Key.Value, VariableFlags.NONE); asm.MarkLocal(node.Value.Value); asm.Declare(node.Value.Value, VariableFlags.NONE); asm.MarkLocal(node.Key.Value); var idx = "__idx_" + Guid.NewGuid().ToString("n"); asm.Declare(idx, VariableFlags.NONE); asm.MarkLocal(idx); asm.PushConstant(NeoInt.ValueOf(0)); asm.SetLocal(idx); var from = "__from_" + Guid.NewGuid().ToString("n"); asm.Declare(from, VariableFlags.NONE); asm.MarkLocal(from); node.From.Accept(this); asm.SetLocal(from); var start = asm.NewLabel(); asm.MarkLabel(start); asm.GetLocal(idx); asm.GetLocal(from); asm.Length(); asm.Eq(); var end = asm.NewLabel(); PushLoop(start, end, start); asm.Branch(end); asm.GetLocal(from); asm.GetLocal(idx); asm.ObjectIndex(); asm.SetLocal(node.Value.Value); asm.SetLocal(node.Key.Value); asm.GetLocal(idx); asm.Inc(); asm.SetLocal(idx); PreLoopCode(node.Code); node.Code.Accept(this); PostLoopCode(node.Code); asm.Jump(start); asm.MarkLabel(end); PopLoop(); PopScope(); }
public ForKeyValueIteratorNodeTests() { from = new IdentNode(SourcePosition.NIL, "foo"); code = new BlockNode(SourcePosition.NIL); subject = new ForKeyValueIteratorNode(SourcePosition.NIL, new IdentNode(SourcePosition.NIL, "k"), new IdentNode(SourcePosition.NIL, "v"), from, code); }
public void VisitForKeyValueIterator(ForKeyValueIteratorNode node) { VisitForKeyValueIteratorHandler(node); }