blob: 1d3264ed8a43065c1c13e06f9b890a1b0de0d898 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2016 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.internal.compiler.lookup;
import org.eclipse.dltk.compiler.env.lookup.Scope;
public class BlockScope extends Scope {
public Scope[] subscopes = new Scope[1]; // need access from code assist
public int subscopeCount = 0; // need access from code assist
public BlockScope(BlockScope parent) {
this(parent, true);
}
public BlockScope(BlockScope parent, boolean addToParentScope) {
this(Scope.BLOCK_SCOPE, parent);
if (addToParentScope) {
parent.addSubscope(this);
}
}
public BlockScope(BlockScope parent, int variableCount) {
this(Scope.BLOCK_SCOPE, parent);
parent.addSubscope(this);
}
protected BlockScope(int kind, Scope parent) {
super(kind, parent);
}
public void addSubscope(Scope childScope) {
if (this.subscopeCount == this.subscopes.length)
System.arraycopy(this.subscopes, 0,
(this.subscopes = new Scope[this.subscopeCount * 2]), 0,
this.subscopeCount);
this.subscopes[this.subscopeCount++] = childScope;
}
/*
* Answer the index of this scope relatively to its parent. For method
* scope, answers -1 (not a classScope relative position)
*/
public int scopeIndex() {
if (this instanceof MethodScope)
return -1;
BlockScope parentScope = (BlockScope) this.parent;
Scope[] parentSubscopes = parentScope.subscopes;
for (int i = 0, max = parentScope.subscopeCount; i < max; i++) {
if (parentSubscopes[i] == this)
return i;
}
return -1;
}
@Override
public String toString() {
return toString(0);
}
public String toString(int tab) {
String s = ""; //$NON-NLS-1$
for (int i = 0; i < this.subscopeCount; i++)
if (this.subscopes[i] instanceof BlockScope)
s += ((BlockScope) this.subscopes[i]).toString(tab + 1) + "\n"; //$NON-NLS-1$
return s;
}
}