blob: 8312ec25980c2dc48fcd179093da344888f6544d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 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.ruby.typeinference;
import java.util.List;
import org.eclipse.dltk.ast.ASTNode;
import org.eclipse.dltk.ruby.ast.RubyAssignment;
/**
* Stores local variable information: it's kind (argument, simple,...) and
* evaluates all assignments to it relatively to given offset
*
* @author fourdman
*
*/
public class LocalVariableInfo {
public final static int KIND_DEFAULT = 0;
public final static int KIND_BLOCK_ARG = 1;
public final static int KIND_METHOD_ARG = 2;
public final static int KIND_LOOP_VAR = 3;
private ASTNode declaringScope;
private RubyAssignment[] conditionalAssignments;
private RubyAssignment lastAssignment;
private int kind;
public LocalVariableInfo(final ASTNode declaringScope,
final RubyAssignment[] assignments, final RubyAssignment last) {
this.declaringScope = declaringScope;
this.conditionalAssignments = assignments;
this.lastAssignment = last;
this.kind = 0;
}
public LocalVariableInfo(final ASTNode declaringScope,
final RubyAssignment[] assignments, final RubyAssignment last,
int kind) {
this.declaringScope = declaringScope;
this.conditionalAssignments = assignments;
lastAssignment = last;
this.kind = kind;
}
public LocalVariableInfo() {
}
/**
* Scoping node (if, for, while, block, method...), that encloses current
* node
*
* @return
*/
public ASTNode getDeclaringScope() {
return declaringScope;
}
/**
* Assignments, that could be or not executed
*
* @return
*/
public RubyAssignment[] getConditionalAssignments() {
if (conditionalAssignments == null)
return new RubyAssignment[0];
return conditionalAssignments;
}
/**
* Last assignment (could be null) to this variable, and which will be
* performed in any way
*
* @return
*/
public RubyAssignment getLastAssignment() {
return lastAssignment;
}
/**
* Kind of variable: simple, method argument, block argument, for-loop
* variable
*
* @return
*/
public int getKind() {
return kind;
}
public void setDeclaringScope(ASTNode declaringScope) {
this.declaringScope = declaringScope;
}
public void setConditionalAssignments(
RubyAssignment[] conditionalAssignments) {
this.conditionalAssignments = conditionalAssignments;
}
public void setConditionalAssignments(List<RubyAssignment> conditionalAssignments) {
this.conditionalAssignments = conditionalAssignments
.toArray(new RubyAssignment[conditionalAssignments.size()]);
}
public void setLastAssignment(RubyAssignment lastAssignment) {
this.lastAssignment = lastAssignment;
}
public void setKind(int kind) {
this.kind = kind;
}
}