16d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// Copyright 2011 the V8 project authors. All rights reserved.
2c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// Redistribution and use in source and binary forms, with or without
3c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// modification, are permitted provided that the following conditions are
4c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// met:
5c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//
6c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//     * Redistributions of source code must retain the above copyright
7c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//       notice, this list of conditions and the following disclaimer.
8c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//     * Redistributions in binary form must reproduce the above
9c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//       copyright notice, this list of conditions and the following
10c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//       disclaimer in the documentation and/or other materials provided
11c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//       with the distribution.
12c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//     * Neither the name of Google Inc. nor the names of its
13c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//       contributors may be used to endorse or promote products derived
14c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//       from this software without specific prior written permission.
15c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org//
16c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
285f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org// Flags: --allow-natives-syntax
29c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
305c838251403b0be9a882540f1922577abba4c872ager@chromium.orgvar RUN_WITH_ALL_ARGUMENT_ENTRIES = false;
315c838251403b0be9a882540f1922577abba4c872ager@chromium.orgvar kOnManyArgumentsRemove = 5;
325c838251403b0be9a882540f1922577abba4c872ager@chromium.org
33c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgfunction makeArguments() {
34c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var result = [ ];
35c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push(17);
36c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push(-31);
377be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org  result.push(new Array(100));
387be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org  result.push(new Array(100003));
39c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push(Number.MIN_VALUE);
40c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push("whoops");
41c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push("x");
42c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push({"x": 1, "y": 2});
43c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var slowCaseObj = {"a": 3, "b": 4, "c": 5};
44c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  delete slowCaseObj.c;
45c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push(slowCaseObj);
46c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  result.push(function () { return 8; });
47c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  return result;
48c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org}
49c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
50c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgvar kArgObjects = makeArguments().length;
51c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
52c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgfunction makeFunction(name, argc) {
53c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var args = [];
54c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  for (var i = 0; i < argc; i++)
55c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    args.push("x" + i);
56c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var argsStr = args.join(", ");
57c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  return new Function(args.join(", "), "return %" + name + "(" + argsStr + ");");
58c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org}
59c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
60f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.orgfunction testArgumentCount(name, argc) {
61c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  for (var i = 0; i < 10; i++) {
62f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    var func = null;
63f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    try {
64f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org      func = makeFunction(name, i);
65f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    } catch (e) {
664a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com      if (e != "SyntaxError: Illegal access") throw e;
67f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    }
68f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    if (func === null && i == argc) {
69f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org      throw "unexpected exception";
70f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    }
71c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var args = [ ];
72c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    for (var j = 0; j < i; j++)
73c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org      args.push(0);
74c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    try {
75c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org      func.apply(void 0, args);
76c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    } catch (e) {
77c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org      // we don't care what happens as long as we don't crash
78c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    }
79c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  }
80c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org}
81c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
82c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgfunction testArgumentTypes(name, argc) {
83c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var type = 0;
84c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var hasMore = true;
85c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var func = makeFunction(name, argc);
86c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  while (hasMore) {
87c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var argPool = makeArguments();
885c838251403b0be9a882540f1922577abba4c872ager@chromium.org    // When we have 5 or more arguments we lower the amount of tests cases
895c838251403b0be9a882540f1922577abba4c872ager@chromium.org    // by randomly removing kOnManyArgumentsRemove entries
905c838251403b0be9a882540f1922577abba4c872ager@chromium.org    var numArguments = RUN_WITH_ALL_ARGUMENT_ENTRIES ?
915c838251403b0be9a882540f1922577abba4c872ager@chromium.org      kArgObjects : kArgObjects-kOnManyArgumentsRemove;
925c838251403b0be9a882540f1922577abba4c872ager@chromium.org    if (argc >= 5 && !RUN_WITH_ALL_ARGUMENT_ENTRIES) {
935c838251403b0be9a882540f1922577abba4c872ager@chromium.org      for (var i = 0; i < kOnManyArgumentsRemove; i++) {
945c838251403b0be9a882540f1922577abba4c872ager@chromium.org        var rand = Math.floor(Math.random() * (kArgObjects - i));
955c838251403b0be9a882540f1922577abba4c872ager@chromium.org        argPool.splice(rand,1);
965c838251403b0be9a882540f1922577abba4c872ager@chromium.org      }
975c838251403b0be9a882540f1922577abba4c872ager@chromium.org    }
98c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var current = type;
99c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var hasMore = false;
100c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var argList = [ ];
101c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    for (var i = 0; i < argc; i++) {
1025c838251403b0be9a882540f1922577abba4c872ager@chromium.org      var index = current % numArguments;
1035c838251403b0be9a882540f1922577abba4c872ager@chromium.org      current = (current / numArguments) << 0;
1045c838251403b0be9a882540f1922577abba4c872ager@chromium.org      if (index != (numArguments - 1))
105c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org        hasMore = true;
106c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org      argList.push(argPool[index]);
107c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    }
108c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    try {
109c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org      func.apply(void 0, argList);
110c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    } catch (e) {
111c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org      // we don't care what happens as long as we don't crash
112c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    }
113c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    type++;
114c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  }
115c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org}
116c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
117c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgvar knownProblems = {
118c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  "Abort": true,
1199af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org  "ThrowMessage": true,
1200c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org
1210c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org  // Avoid calling the concat operation, because weird lengths
12249edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org  // may lead to out-of-memory.  Ditto for StringBuilderJoin.
1230c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org  "StringBuilderConcat": true,
12449edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.org  "StringBuilderJoin": true,
1250c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org
126c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  // These functions use pseudo-stack-pointers and are not robust
127c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  // to unexpected integer values.
128c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  "DebugEvaluate": true,
129c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
130c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  // These functions do nontrivial error checking in recursive calls,
131c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  // which means that we have to propagate errors back.
132c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  "SetFunctionBreakPoint": true,
133c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  "SetScriptBreakPoint": true,
134c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  "PrepareStep": true,
135870a0b67c822d289024711912e2512af01b66c3bager@chromium.org
136870a0b67c822d289024711912e2512af01b66c3bager@chromium.org  // Too slow.
137870a0b67c822d289024711912e2512af01b66c3bager@chromium.org  "DebugReferencedBy": true,
138870a0b67c822d289024711912e2512af01b66c3bager@chromium.org
139870a0b67c822d289024711912e2512af01b66c3bager@chromium.org  // Calling disable/enable access checks may interfere with the
140870a0b67c822d289024711912e2512af01b66c3bager@chromium.org  // the rest of the tests.
141870a0b67c822d289024711912e2512af01b66c3bager@chromium.org  "DisableAccessChecks": true,
142870a0b67c822d289024711912e2512af01b66c3bager@chromium.org  "EnableAccessChecks": true,
1430c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org
144c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  // These functions should not be callable as runtime functions.
1456d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org  "NewFunctionContext": true,
14641044eb0969b0d7d5c041a077519a36efa6aff27kasperl@chromium.org  "NewArgumentsFast": true,
1477b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org  "NewStrictArgumentsFast": true,
1486d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org  "PushWithContext": true,
1496d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org  "PushCatchContext": true,
1504acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org  "PushBlockContext": true,
1518e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org  "PushModuleContext": true,
152c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  "LazyCompile": true,
153a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  "LazyRecompile": true,
1549259716434187c932704601f700375e53d865de8rossberg@chromium.org  "ConcurrentRecompile": true,
155a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  "NotifyDeoptimized": true,
15659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org  "NotifyStubFailure": true,
157a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  "NotifyOSR": true,
158c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  "CreateObjectLiteralBoilerplate": true,
159bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org  "CloneLiteralBoilerplate": true,
160bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org  "CloneShallowLiteralBoilerplate": true,
161bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org  "CreateArrayLiteralBoilerplate": true,
162a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org  "IS_VAR": true,
16337abdec9cad6edeba05b5c7a9ff73c25f5df2b70christian.plesner.hansen@gmail.com  "ResolvePossiblyDirectEval": true,
16486f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org  "Log": true,
1653811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org  "DeclareGlobals": true,
16693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org  "ArrayConstructor": true,
16793a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org  "InternalArrayConstructor": true,
16886f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org
169c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org  "PromoteScheduledException": true,
170ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  "DeleteHandleScopeExtensions": true,
171ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org
172c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org  // Vararg with minimum number > 0.
173c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org  "Call": true,
174c612e0211bdb8821cbd7886e15b0273ed82d2e9edanno@chromium.org
17534e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org  // Requires integer arguments to be non-negative.
17634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org  "Apply": true,
17734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org
178ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  // That can only be invoked on Array.prototype.
179ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org  "FinishArrayPrototypeSetup": true,
180ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org
1814111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org  "_SwapElements": true,
1824111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org
1834f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  // Performance critical functions which cannot afford type checks.
1844f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org  "_IsNativeOrStrictMode": true,
185357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org  "_CallFunction": true,
186357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org
187b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org  // Tries to allocate based on argument, and (correctly) throws
188b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org  // out-of-memory if the request is too large. In practice, the
189b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org  // size will be the number of captures of a RegExp.
190b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org  "RegExpConstructResult": true,
191b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org  "_RegExpConstructResult": true,
192b6e43bb9b1cd7673592be9dfd0a036fe8dab4dcdwhesse@chromium.org
1934efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  // This functions perform some checks compile time (they require one of their
1944efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  // arguments to be a compile time smi).
1954efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org  "_DateField": true,
196c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org  "_GetFromCache": true,
197ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org
198ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org  // This function expects its first argument to be a non-smi.
199d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.org  "_IsStringWrapperSafeForDefaultValueOf" : true,
200d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.org
201d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.org  // Only applicable to strings.
202d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.org  "_HasCachedArrayIndex": true,
203fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org  "_GetCachedArrayIndex": true,
20432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org  "_OneByteSeqStringSetChar": true,
20532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org  "_TwoByteSeqStringSetChar": true,
2068a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org
20737be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org  // Only applicable to TypedArrays.
20837be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org  "TypedArrayInitialize": true,
20937be408adf363bbe682921a4a690752fa0ec33femachenbach@chromium.org
2108a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  // Only applicable to generators.
2118a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  "_GeneratorNext": true,
2128a00e82ec5c3dbedfd3dcb56996c7df2452da4a5verwaest@chromium.org  "_GeneratorThrow": true,
2131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  // Only applicable to DataViews.
215af9cfcbed5daf6e636e189bce451c6fafdbb127dmachenbach@chromium.org  "DataViewInitialize": true,
2161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  "DataViewGetBuffer": true,
2171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  "DataViewGetByteLength": true,
2181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  "DataViewGetByteOffset": true
219c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org};
220c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
221c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgvar currentlyUncallable = {
222c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  // We need to find a way to test this without breaking the system.
22393a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org  "SystemBreak": true,
22493a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org  // Inserts an int3/stop instruction when run with --always-opt.
22593a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.org  "_DebugBreakInOptimizedCode": true
226c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org};
227c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
228c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgfunction testNatives() {
229c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  var allNatives = %ListNatives();
23033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  var start = 0;
23133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  var stop = (allNatives.length >> 2);
23233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org  for (var i = start; i < stop; i++) {
233c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var nativeInfo = allNatives[i];
234c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var name = nativeInfo[0];
235c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    if (name in knownProblems || name in currentlyUncallable)
236c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org      continue;
237c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    print(name);
238c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    var argc = nativeInfo[1];
239f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org    testArgumentCount(name, argc);
240c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org    testArgumentTypes(name, argc);
241c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org  }
242c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org}
243c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.org
244c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgtestNatives();
245