using System;
using System.Collections.Generic;
using Jint.Native.Function;
using Jint.Native.Object;
using Jint.Runtime;
using Jint.Runtime.Descriptors;
using Jint.Runtime.Descriptors.Specialized;
using Jint.Runtime.Environments;
namespace Jint.Native.Argument
{
///
/// http://www.ecma-international.org/ecma-262/5.1/#sec-10.6
///
public class ArgumentsInstance : ObjectInstance
{
public ArgumentsInstance(Engine engine) : base(engine)
{
// todo: complete implementation
}
public bool Strict { get; set; }
public static ArgumentsInstance CreateArgumentsObject(Engine engine, FunctionInstance func, string[] names, object[] args, EnvironmentRecord env, bool strict)
{
var len = args.Length;
var obj = new ArgumentsInstance(engine);
obj.Prototype = engine.Object.PrototypeObject;
obj.Extensible = true;
obj.FastAddProperty("length", len, true, false, true);
obj.Strict = strict;
var map = engine.Object.Construct(Arguments.Empty);
var mappedNamed = new List();
var indx = len - 1;
while (indx >= 0)
{
var indxStr = TypeConverter.ToString(indx);
var val = args[indx];
obj.FastAddProperty(indxStr, val, true, true, true);
if (indx < names.Length)
{
var name = names[indx];
if (!strict && !mappedNamed.Contains(name))
{
mappedNamed.Add(name);
Func