nashorn/src/jdk/nashorn/internal/objects/NativeArguments.java
author sundar
Sat, 09 Mar 2013 21:49:32 +0530
changeset 16277 fd698c5ee684
parent 16256 f2d9a0c49914
child 17770 3c8602ec5565
permissions -rw-r--r--
8009559: clean up method handle lookup code. Reviewed-by: ahgross, jlaskey, attila, sundar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     1
/*
16151
97c1e756ae1e 8005663: Update copyright year to 2013
jlaskey
parents: 16147
diff changeset
     2
 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     4
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    10
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    15
 * accompanied this code).
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    16
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    20
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    23
 * questions.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    24
 */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    25
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    26
package jdk.nashorn.internal.objects;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    27
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    28
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    29
import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    30
import static jdk.nashorn.internal.runtime.arrays.ArrayIndex.getArrayIndexNoThrow;
16277
fd698c5ee684 8009559: clean up method handle lookup code.
sundar
parents: 16256
diff changeset
    31
import static jdk.nashorn.internal.lookup.Lookup.MH;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    32
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    33
import java.lang.invoke.MethodHandle;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    34
import java.lang.invoke.MethodHandles;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    35
import java.util.Arrays;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    36
import java.util.BitSet;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    37
import jdk.nashorn.internal.runtime.Property;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    38
import jdk.nashorn.internal.runtime.PropertyDescriptor;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    39
import jdk.nashorn.internal.runtime.PropertyMap;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    40
import jdk.nashorn.internal.runtime.ScriptFunction;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    41
import jdk.nashorn.internal.runtime.ScriptObject;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    42
import jdk.nashorn.internal.runtime.ScriptRuntime;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    43
import jdk.nashorn.internal.runtime.arrays.ArrayData;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    44
import jdk.nashorn.internal.runtime.arrays.ArrayIndex;
16277
fd698c5ee684 8009559: clean up method handle lookup code.
sundar
parents: 16256
diff changeset
    45
import jdk.nashorn.internal.lookup.Lookup;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    46
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    47
/**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    48
 * ECMA 10.6 Arguments Object.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    49
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    50
 * Arguments object used for non-strict mode functions. For strict mode, we use
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    51
 * a different implementation (@see NativeStrictArguments). In non-strict mode,
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    52
 * named argument access and index argument access (arguments[i]) are linked.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    53
 * Modifications reflect on each other access -- till arguments indexed element
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    54
 * is deleted. After delete, there is no link between named access and indexed
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    55
 * access for that deleted index alone.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    56
 */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    57
public final class NativeArguments extends ScriptObject {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    58
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    59
    private static final MethodHandle G$LENGTH = findOwnMH("G$length", Object.class, Object.class);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    60
    private static final MethodHandle S$LENGTH = findOwnMH("S$length", void.class, Object.class, Object.class);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    61
    private static final MethodHandle G$CALLEE = findOwnMH("G$callee", Object.class, Object.class);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    62
    private static final MethodHandle S$CALLEE = findOwnMH("S$callee", void.class, Object.class, Object.class);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    63
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    64
    private static final PropertyMap nasgenmap$;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    65
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    66
    static {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    67
        PropertyMap map = PropertyMap.newMap(NativeArguments.class);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    68
        map = Lookup.newProperty(map, "length", Property.NOT_ENUMERABLE, G$LENGTH, S$LENGTH);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    69
        map = Lookup.newProperty(map, "callee", Property.NOT_ENUMERABLE, G$CALLEE, S$CALLEE);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    70
        nasgenmap$ = map;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    71
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    72
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    73
    private Object length;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    74
    private Object callee;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    75
    private ArrayData namedArgs;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    76
    // This is lazily initialized - only when delete is invoked at all
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    77
    private BitSet deleted;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    78
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    79
    NativeArguments(final Object[] arguments, final Object callee, final int numParams) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    80
        super(nasgenmap$);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    81
        setIsArguments();
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    82
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    83
        setArray(ArrayData.allocate(arguments));
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    84
        this.length = arguments.length;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    85
        this.callee = callee;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    86
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    87
        /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    88
         * Declared number of parameters may be more or less than the actual passed
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    89
         * runtime arguments count. We need to truncate or extend with undefined values.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    90
         *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    91
         * Example:
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    92
         *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    93
         * // less declared params
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    94
         * (function (x) { print(arguments); })(20, 44);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    95
         *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    96
         * // more declared params
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    97
         * (function (x, y) { print(arguments); })(3);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    98
         */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    99
        final Object[] newValues = new Object[numParams];
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   100
        if (numParams > arguments.length) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   101
            Arrays.fill(newValues, UNDEFINED);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   102
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   103
        System.arraycopy(arguments, 0, newValues, 0, Math.min(newValues.length, arguments.length));
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   104
        this.namedArgs = ArrayData.allocate(newValues);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   105
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   106
        // set Object.prototype as __proto__
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   107
        this.setProto(Global.objectPrototype());
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   108
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   109
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   110
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   111
    public String getClassName() {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   112
        return "Arguments";
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   113
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   114
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   115
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   116
     * getArgument is used for named argument access.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   117
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   118
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   119
    public Object getArgument(final int key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   120
        return namedArgs.has(key) ? namedArgs.getObject(key) : UNDEFINED;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   121
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   122
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   123
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   124
     * setArgument is used for named argument set.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   125
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   126
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   127
    public void setArgument(final int key, final Object value) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   128
        if (namedArgs.has(key)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   129
            namedArgs.set(key, value, false);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   130
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   131
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   132
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   133
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   134
    public int getInt(final Object key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   135
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   136
        return isMapped(index) ? namedArgs.getInt(index) : super.getInt(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   137
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   138
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   139
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   140
    public int getInt(final double key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   141
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   142
        return isMapped(index) ? namedArgs.getInt(index) : super.getInt(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   143
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   144
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   145
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   146
    public int getInt(final long key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   147
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   148
        return isMapped(index) ? namedArgs.getInt(index) : super.getInt(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   149
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   150
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   151
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   152
    public int getInt(final int key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   153
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   154
        return isMapped(index) ? namedArgs.getInt(index) : super.getInt(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   155
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   156
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   157
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   158
    public long getLong(final Object key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   159
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   160
        return isMapped(index) ? namedArgs.getLong(index) : super.getLong(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   161
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   162
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   163
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   164
    public long getLong(final double key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   165
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   166
        return isMapped(index) ? namedArgs.getLong(index) : super.getLong(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   167
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   168
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   169
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   170
    public long getLong(final long key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   171
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   172
        return isMapped(index) ? namedArgs.getLong(index) : super.getLong(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   173
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   174
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   175
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   176
    public long getLong(final int key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   177
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   178
        return isMapped(index) ? namedArgs.getLong(index) : super.getLong(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   179
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   180
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   181
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   182
    public double getDouble(final Object key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   183
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   184
        return isMapped(index) ? namedArgs.getDouble(index) : super.getDouble(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   185
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   186
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   187
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   188
    public double getDouble(final double key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   189
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   190
        return isMapped(index) ? namedArgs.getDouble(index) : super.getDouble(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   191
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   192
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   193
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   194
    public double getDouble(final long key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   195
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   196
        return isMapped(index) ? namedArgs.getDouble(index) : super.getDouble(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   197
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   198
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   199
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   200
    public double getDouble(final int key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   201
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   202
        return isMapped(index) ? namedArgs.getDouble(index) : super.getDouble(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   203
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   204
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   205
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   206
    public Object get(final Object key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   207
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   208
        return isMapped(index) ? namedArgs.getObject(index) : super.get(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   209
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   210
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   211
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   212
    public Object get(final double key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   213
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   214
        return isMapped(index) ? namedArgs.getObject(index) : super.get(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   215
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   216
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   217
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   218
    public Object get(final long key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   219
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   220
        return isMapped(index) ? namedArgs.getObject(index) : super.get(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   221
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   222
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   223
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   224
    public Object get(final int key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   225
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   226
        return isMapped(index) ? namedArgs.getObject(index) : super.get(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   227
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   228
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   229
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   230
    public void set(final Object key, final int value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   231
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   232
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   233
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   234
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   235
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   236
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   237
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   238
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   239
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   240
    public void set(final Object key, final long value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   241
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   242
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   243
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   244
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   245
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   246
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   247
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   248
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   249
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   250
    public void set(final Object key, final double value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   251
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   252
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   253
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   254
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   255
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   256
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   257
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   258
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   259
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   260
    public void set(final Object key, final Object value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   261
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   262
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   263
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   264
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   265
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   266
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   267
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   268
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   269
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   270
    public void set(final double key, final int value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   271
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   272
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   273
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   274
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   275
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   276
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   277
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   278
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   279
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   280
    public void set(final double key, final long value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   281
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   282
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   283
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   284
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   285
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   286
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   287
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   288
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   289
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   290
    public void set(final double key, final double value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   291
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   292
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   293
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   294
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   295
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   296
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   297
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   298
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   299
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   300
    public void set(final double key, final Object value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   301
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   302
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   303
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   304
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   305
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   306
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   307
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   308
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   309
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   310
    public void set(final long key, final int value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   311
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   312
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   313
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   314
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   315
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   316
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   317
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   318
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   319
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   320
    public void set(final long key, final long value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   321
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   322
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   323
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   324
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   325
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   326
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   327
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   328
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   329
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   330
    public void set(final long key, final double value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   331
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   332
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   333
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   334
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   335
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   336
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   337
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   338
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   339
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   340
    public void set(final long key, final Object value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   341
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   342
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   343
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   344
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   345
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   346
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   347
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   348
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   349
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   350
    public void set(final int key, final int value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   351
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   352
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   353
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   354
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   355
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   356
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   357
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   358
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   359
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   360
    public void set(final int key, final long value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   361
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   362
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   363
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   364
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   365
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   366
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   367
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   368
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   369
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   370
    public void set(final int key, final double value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   371
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   372
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   373
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   374
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   375
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   376
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   377
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   378
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   379
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   380
    public void set(final int key, final Object value, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   381
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   382
        if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   383
            namedArgs = namedArgs.set(index, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   384
        } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   385
            super.set(key, value, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   386
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   387
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   388
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   389
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   390
    public boolean has(final Object key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   391
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   392
        return isMapped(index) || super.has(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   393
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   394
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   395
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   396
    public boolean has(final double key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   397
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   398
        return isMapped(index) || super.has(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   399
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   400
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   401
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   402
    public boolean has(final long key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   403
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   404
        return isMapped(index) || super.has(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   405
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   406
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   407
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   408
    public boolean has(final int key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   409
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   410
        return isMapped(index) || super.has(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   411
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   412
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   413
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   414
    public boolean hasOwnProperty(final Object key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   415
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   416
        return isMapped(index) || super.hasOwnProperty(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   417
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   418
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   419
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   420
    public boolean hasOwnProperty(final int key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   421
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   422
        return isMapped(index) || super.hasOwnProperty(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   423
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   424
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   425
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   426
    public boolean hasOwnProperty(final long key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   427
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   428
        return isMapped(index) || super.hasOwnProperty(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   429
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   430
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   431
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   432
    public boolean hasOwnProperty(final double key) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   433
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   434
        return isMapped(index) || super.hasOwnProperty(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   435
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   436
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   437
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   438
    public boolean delete(final int key, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   439
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   440
        final boolean success = super.delete(key, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   441
        if (success && namedArgs.has(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   442
            setDeleted(index);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   443
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   444
        return success;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   445
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   446
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   447
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   448
    public boolean delete(final long key, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   449
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   450
        final boolean success = super.delete(key, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   451
        if (success && namedArgs.has(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   452
            setDeleted(index);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   453
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   454
        return success;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   455
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   456
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   457
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   458
    public boolean delete(final double key, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   459
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   460
        final boolean success = super.delete(key, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   461
        if (success && namedArgs.has(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   462
            setDeleted(index);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   463
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   464
        return success;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   465
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   466
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   467
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   468
    public boolean delete(final Object key, final boolean strict) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   469
        final int index = getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   470
        final boolean success = super.delete(key, strict);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   471
        if (success && namedArgs.has(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   472
            setDeleted(index);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   473
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   474
        return success;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   475
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   476
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   477
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   478
     * ECMA 15.4.5.1 [[DefineOwnProperty]] ( P, Desc, Throw ) as specialized in
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   479
     * ECMA 10.6 for Arguments object.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   480
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   481
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   482
    public boolean defineOwnProperty(final String key, final Object propertyDesc, final boolean reject) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   483
        final int index = ArrayIndex.getArrayIndexNoThrow(key);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   484
        if (index >= 0) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   485
            final boolean allowed = super.defineOwnProperty(key, propertyDesc, false);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   486
            if (!allowed) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   487
                if (reject) {
16256
f2d9a0c49914 8007002: Replace implicit exception throwing methods with explicit throws - simplify control flow and remove useless code
lagergren
parents: 16206
diff changeset
   488
                    throw typeError("cant.redefine.property",  key, ScriptRuntime.safeToString(this));
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   489
                }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   490
                return false;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   491
            }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   492
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   493
            if (isMapped(index)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   494
                // When mapped argument is redefined, if new descriptor is accessor property
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   495
                // or data-non-writable property, we have to "unmap" (unlink).
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   496
                final PropertyDescriptor desc = toPropertyDescriptor(Global.instance(), propertyDesc);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   497
                if (desc.type() == PropertyDescriptor.ACCESSOR) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   498
                    setDeleted(index);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   499
                } else {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   500
                    // set "value" from new descriptor to named args
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   501
                    if (desc.has(PropertyDescriptor.VALUE)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   502
                        namedArgs = namedArgs.set(index, desc.getValue(), false);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   503
                    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   504
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   505
                    if (desc.has(PropertyDescriptor.WRITABLE) && !desc.isWritable()) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   506
                        setDeleted(index);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   507
                    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   508
                }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   509
            }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   510
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   511
            return true;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   512
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   513
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   514
        return super.defineOwnProperty(key, propertyDesc, reject);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   515
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   516
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   517
    // Internals below this point
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   518
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   519
    // We track deletions using a bit set (delete arguments[index])
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   520
    private boolean isDeleted(final int index) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   521
        return (deleted != null) ? deleted.get(index) : false;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   522
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   523
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   524
    private void setDeleted(final int index) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   525
        if (deleted == null) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   526
            deleted = new BitSet((int)namedArgs.length());
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   527
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   528
        deleted.set(index, true);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   529
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   530
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   531
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   532
     * Are arguments[index] and corresponding named parameter linked?
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   533
     *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   534
     * In non-strict mode, arguments[index] and corresponding named param
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   535
     * are "linked" or "mapped". Modifications are tacked b/w each other - till
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   536
     * (delete arguments[index]) is used. Once deleted, the corresponding arg
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   537
     * is no longer 'mapped'. Please note that delete can happen only through
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   538
     * the arguments array - named param can not be deleted. (delete is one-way).
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   539
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   540
    private boolean isMapped(final int index) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   541
        // in named args and not marked as "deleted"
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   542
        return namedArgs.has(index) && !isDeleted(index);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   543
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   544
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   545
        /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   546
     * Factory to create correct Arguments object based on strict mode.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   547
     *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   548
     * @param arguments the actual arguments array passed
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   549
     * @param callee the callee function that uses arguments object
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   550
     * @param numParams the number of declared (named) function parameters
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   551
     * @return Arguments Object
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   552
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   553
    public static ScriptObject allocate(final Object[] arguments, final ScriptFunction callee, final int numParams) {
16206
83069fa0935b 8006529: Methods always get callee - it should be conditional
attila
parents: 16188
diff changeset
   554
        // Strict functions won't always have a callee for arguments, and will pass null instead.
83069fa0935b 8006529: Methods always get callee - it should be conditional
attila
parents: 16188
diff changeset
   555
        final boolean isStrict = callee == null || callee.isStrict();
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   556
        return isStrict ? new NativeStrictArguments(arguments, numParams) : new NativeArguments(arguments, callee, numParams);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   557
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   558
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   559
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   560
     * Length getter
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   561
     * @param self self reference
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   562
     * @return length property value
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   563
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   564
    public static Object G$length(final Object self) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   565
        if (self instanceof NativeArguments) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   566
            return ((NativeArguments)self).getArgumentsLength();
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   567
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   568
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   569
        return 0;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   570
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   571
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   572
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   573
     * Length setter
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   574
     * @param self self reference
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   575
     * @param value value for length property
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   576
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   577
    public static void S$length(final Object self, final Object value) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   578
        if (self instanceof NativeArguments) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   579
            ((NativeArguments)self).setArgumentsLength(value);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   580
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   581
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   582
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   583
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   584
     * Callee getter
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   585
     * @param self self reference
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   586
     * @return value for callee property
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   587
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   588
    public static Object G$callee(final Object self) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   589
        if (self instanceof NativeArguments) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   590
            return ((NativeArguments)self).getCallee();
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   591
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   592
        return UNDEFINED;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   593
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   594
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   595
    /**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   596
     * Callee setter
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   597
     * @param self self reference
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   598
     * @param value value for callee property
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   599
     */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   600
    public static void S$callee(final Object self, final Object value) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   601
        if (self instanceof NativeArguments) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   602
            ((NativeArguments)self).setCallee(value);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   603
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   604
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   605
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   606
    private Object getArgumentsLength() {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   607
        return length;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   608
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   609
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   610
    private void setArgumentsLength(final Object length) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   611
        this.length = length;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   612
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   613
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   614
    private Object getCallee() {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   615
        return callee;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   616
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   617
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   618
    private void setCallee(final Object callee) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   619
        this.callee = callee;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   620
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   621
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   622
    private static MethodHandle findOwnMH(final String name, final Class<?> rtype, final Class<?>... types) {
16181
f6a125580f62 8006562: findOwnMH in nashorn "objects" package should be cleaned up
sundar
parents: 16151
diff changeset
   623
        return MH.findStatic(MethodHandles.publicLookup(), NativeArguments.class, name, MH.type(rtype, types));
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   624
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   625
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   626
}