blob: d862b4a813795e66d4c407deeedf0c3305b20204 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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
*
*******************************************************************************/
package org.eclipse.dltk.compiler.env.lookup;
import org.eclipse.dltk.internal.compiler.lookup.LookupEnvironment;
import org.eclipse.dltk.internal.compiler.lookup.MethodScope;
import org.eclipse.dltk.internal.compiler.lookup.SourceModuleScope;
import org.eclipse.dltk.internal.compiler.lookup.TypeScope;
public abstract class Scope {
/* Scope kinds */
public final static int BLOCK_SCOPE = 1;
public final static int METHOD_SCOPE = 2;
public final static int CLASS_SCOPE = 3;
public final static int COMPILATION_UNIT_SCOPE = 4;
/* Argument Compatibilities */
public final static int NOT_COMPATIBLE = -1;
public final static int COMPATIBLE = 0;
public final static int AUTOBOX_COMPATIBLE = 1;
public final static int VARARGS_COMPATIBLE = 2;
/* Type Compatibilities */
public static final int EQUAL_OR_MORE_SPECIFIC = -1;
public static final int NOT_RELATED = 0;
public static final int MORE_GENERIC = 1;
public int kind;
public Scope parent;
protected Scope(int kind, Scope parent) {
this.kind = kind;
this.parent = parent;
}
public final TypeScope classScope() {
Scope scope = this;
do {
if (scope instanceof TypeScope)
return (TypeScope) scope;
scope = scope.parent;
} while (scope != null);
return null;
}
public final SourceModuleScope sourceModuleScope() {
Scope lastScope = null;
Scope scope = this;
do {
lastScope = scope;
scope = scope.parent;
} while (scope != null);
return (SourceModuleScope) lastScope;
}
public final TypeScope enclosingClassScope() {
Scope scope = this;
while ((scope = scope.parent) != null) {
if (scope instanceof TypeScope)
return (TypeScope) scope;
}
return null; // may answer null if no type around
}
public final MethodScope enclosingMethodScope() {
Scope scope = this;
while ((scope = scope.parent) != null) {
if (scope instanceof MethodScope)
return (MethodScope) scope;
}
return null; // may answer null if no method around
}
public final LookupEnvironment environment() {
Scope scope, unitScope = this;
while ((scope = unitScope.parent) != null)
unitScope = scope;
return ((SourceModuleScope) unitScope).environment;
}
// start position in this scope - for ordering scopes vs. variables
public int startIndex() {
return 0;
}
}