package org.jruby.ir;

import org.jruby.parser.StaticScope;
import org.jruby.util.ByteList;

public class IRModuleBody extends IRScope {
    private boolean executesOnce;

    public IRModuleBody(IRManager manager, IRScope lexicalParent, ByteList name, int lineNumber,
                        StaticScope staticScope, boolean executesOnce) {
        super(manager, lexicalParent, name, lineNumber, staticScope);

        this.executesOnce = executesOnce;

        if (!getManager().isDryRun()) {
            if (staticScope != null) staticScope.setIRScope(this);
        }
    }

    @Override
    public int getNearestModuleReferencingScopeDepth() {
        return 0;
    }

    @Override
    public IRScopeType getScopeType() {
        return IRScopeType.MODULE_BODY;
     }

    @Override
    public boolean isModuleBody() {
        return true;
    }

    @Override
    public void cleanupAfterExecution() {
        if (executesOnce && getClosures().isEmpty()) {
            interpreterContext = null;
            fullInterpreterContext = null;
            localVars = null;
        }
    }

    public boolean executesOnce() {
        return executesOnce;
    }
}