Sha256: 307a398e612fd72935275853429b4d29dd2e06cc41b5e347e8c1e78d285bd724

Contents?: true

Size: 1.63 KB

Versions: 6

Compression:

Stored size: 1.63 KB

Contents

package com.gsamokovarov.bindex;

import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.DynamicScope;
import org.jruby.runtime.Binding;
import org.jruby.runtime.Frame;
import org.jruby.runtime.DynamicScope;
import org.jruby.runtime.backtrace.BacktraceElement;
import java.util.Iterator;
import java.util.NoSuchElementException;

class CurrentBindingsIterator implements Iterator<Binding> {
    private Frame[] frameStack;
    private int frameIndex;

    private DynamicScope[] scopeStack;
    private int scopeIndex;

    private BacktraceElement[] backtrace;
    private int backtraceIndex;

    CurrentBindingsIterator(ThreadContext context) {
        ThreadContextInternals contextInternals = new ThreadContextInternals(context);

        this.frameStack = contextInternals.getFrameStack();
        this.frameIndex = contextInternals.getFrameIndex();

        this.scopeStack = contextInternals.getScopeStack();
        this.scopeIndex = contextInternals.getScopeIndex();

        this.backtrace = contextInternals.getBacktrace();
        this.backtraceIndex = contextInternals.getBacktraceIndex();
    }

    public boolean hasNext() {
        return frameIndex >= 0 && scopeIndex >= 0 && backtraceIndex >= 0;
    }

    public Binding next() {
        if (!hasNext()) {
            throw new NoSuchElementException();
        }

        Frame frame = frameStack[frameIndex--];
        DynamicScope scope = scopeStack[scopeIndex--];
        BacktraceElement element = backtrace[backtraceIndex--];

        return BindingBuilder.build(frame, scope, element);
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
bindex-0.5.0 ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java
bindex-0.4.0 ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java
bindex-0.3.0 ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java
bindex-0.2.0 ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java
bindex-0.1.1 ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java
bindex-0.1.0 ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java