src.org.python.indexer.ast.NBody Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython Show documentation
Show all versions of jython Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
/**
* Copyright 2009, Google Inc. All rights reserved.
* Licensed to PSF under a Contributor Agreement.
*/
package org.python.indexer.ast;
import org.python.indexer.Indexer;
import org.python.indexer.Scope;
import org.python.indexer.types.NType;
import java.util.List;
/**
* An {@link NBlock} variant used for the bodies of functions, lambdas,
* classes and modules.
*/
public class NBody extends NBlock {
static final long serialVersionUID = 1518962862898927516L;
public NBody(NBlock block) {
this(block == null ? null : block.seq);
}
public NBody(List seq) {
super(seq);
}
public NBody(List seq, int start, int end) {
super(seq, start, end);
}
private class GlobalFinder extends DefaultNodeVisitor {
private Scope scope; // starting scope
public GlobalFinder(Scope scope) {
this.scope = scope;
}
@Override
public boolean visit(NGlobal n) {
resolveExpr(n, scope);
return false;
}
// Do not descend into new scopes.
@Override
public boolean visit(NFunctionDef n) {
return false;
}
@Override
public boolean visit(NLambda n) {
return false;
}
@Override
public boolean visit(NClassDef n) {
return false;
}
}
@Override
public NType resolve(Scope scope) throws Exception {
try {
scope.setNameBindingPhase(true);
visit(new GlobalFinder(scope));
visit(new BindingFinder(scope));
} finally {
scope.setNameBindingPhase(false);
}
return super.resolve(scope);
}
}