blob: bd6050535e111f5ea9dcefe35f4620bd8216abfa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 xored software, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.internal.javascript.ti;
import org.eclipse.dltk.javascript.typeinference.IFunctionValueCollection;
import org.eclipse.dltk.javascript.typeinference.IValueCollection;
import org.eclipse.dltk.javascript.typeinference.IValueReference;
import org.eclipse.dltk.javascript.typeinference.ReferenceKind;
import org.eclipse.dltk.javascript.typeinfo.RTypes;
public class FunctionValueCollection extends ValueCollection implements
IFunctionValueCollection {
private final String functionName;
public FunctionValueCollection(IValueCollection parent, String functionName) {
this(parent, functionName, false);
}
public FunctionValueCollection(IValueCollection parent,
String functionName, boolean block) {
this(parent, functionName, new ThisValue(), block);
}
public FunctionValueCollection(IValueCollection parent,
String functionName, IValueReference thisValue, boolean block) {
super(parent);
this.functionName = functionName;
this.thisValue = thisValue;
this.block = block;
IValueReference arguments = createChild("arguments");
arguments.setKind(ReferenceKind.LOCAL);
IValueReference argumentsLength = arguments.getChild("length");
argumentsLength.setDeclaredType(RTypes.NUMBER);
IValueReference argumentsArray = arguments
.getChild(IValueReference.ARRAY_OP);
argumentsArray.setDeclaredType(RTypes.OBJECT);
}
private final boolean block;
public boolean isInlineBlock() {
return block;
}
public String getFunctionName() {
return functionName;
}
public boolean isScope() {
return true;
}
private final IValueReference returnValue = new AnonymousValue();
@Override
public IValueReference getReturnValue() {
return returnValue;
}
private final IValueReference thisValue;
@Override
public IValueReference getThis() {
return thisValue;
}
@Override
public String toString() {
return getClass().getSimpleName() + "<" + functionName + ">";
}
}