| ############################################################################### | |
| # Copyright (c) 2005, 2007 IBM Corporation and others. | |
| # All rights reserved. This program and the accompanying materials | |
| # are made available under the terms of the Eclipse Public License v1.0 | |
| # which accompanies this distribution, and is available at | |
| # http://www.eclipse.org/legal/epl-v10.html | |
| # | |
| ############################################################################### | |
| module XoredDebugger | |
| # DBGP stack model, depth = N, zero-index is for top-level frame | |
| #==================================== | |
| # N - 1 | ... | 1 | 0 | <= push | |
| #==================================== | |
| class Stack | |
| def initialize | |
| @levels = [] | |
| end | |
| def update(binding, file, line, where) | |
| unless empty? | |
| pop | |
| end | |
| push(binding, file, line, where) | |
| end | |
| def push(binding, file, line, where) | |
| level = { :binding => binding, | |
| :file => file, | |
| :line => line, | |
| :where => where } | |
| @levels.push(level) | |
| end | |
| def pop | |
| @levels.pop | |
| end | |
| def [] (index) | |
| @levels[depth - 1 - index] | |
| end | |
| def eval(text, index = 0) | |
| level = self[index] | |
| Kernel.eval(text, level[:binding], level[:file], level[:line]) | |
| end | |
| def depth | |
| @levels.length | |
| end | |
| def empty? | |
| @levels.empty? | |
| end | |
| def to_a | |
| @levels | |
| end | |
| end # Stack | |
| end # module |