/*******************************************************************************
 * 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 + ">";
	}

}
