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-standalone Show documentation
Show all versions of jython-standalone 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);
}
}