11510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
21510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
31510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
41510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Redistribution and use in source and binary forms, with or without
51510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// modification, are permitted provided that the following conditions
61510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// are met:
71510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 1.  Redistributions of source code must retain the above copyright
81510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     notice, this list of conditions and the following disclaimer.
91510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 2.  Redistributions in binary form must reproduce the above copyright
101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     notice, this list of conditions and the following disclaimer in the
111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     documentation and/or other materials provided with the distribution.
121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction isReserved(word)
251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    try {
271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        eval("var " + word + ";");
281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        return false;
291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    } catch (e) {
301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        return true;
311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar reservedWords = [
351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "break",
361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "case",
371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "catch",
381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "class",
391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "const",
401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "continue",
411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "debugger",
421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "default",
431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "delete",
441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "do",
451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "else",
461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "enum",
471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "export",
481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "extends",
491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "false",
501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "finally",
511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "for",
521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "function",
531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "if",
541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "import",
551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "in",
561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "instanceof",
571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "new",
581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "null",
591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "return",
601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "super",
611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "switch",
621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "this",
631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "throw",
641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "true",
651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "try",
661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "typeof",
671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "var",
681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "void",
691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "while",
701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "with"
711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org];
721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar unreservedWords = [
741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "abstract",
751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "boolean",
761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "byte",
771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "char",
781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "double",
791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "final",
801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "float",
811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "goto",
821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "implements",
831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "int",
841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "interface",
851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "long",
861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "native",
871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "package",
881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "private",
891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "protected",
901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "public",
911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "short",
921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "static",
931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "synchronized",
941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "throws",
951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "transient",
961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "volatile"
971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org];
981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgdescription(
1001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org"This file checks which ECMAScript 3 keywords are treated as reserved words."
1011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org);
1021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgreservedWords.sort();
1041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgunreservedWords.sort();
1051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgdebug("SHOULD BE RESERVED:");
1071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfor (var p in reservedWords) {
1081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    shouldBeTrue("isReserved('" + reservedWords[p] + "')");
1091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
1101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgdebug("");
1121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgdebug("SHOULD NOT BE RESERVED:");
1141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfor (var p in unreservedWords) {
1151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    shouldBeFalse("isReserved('" + unreservedWords[p] + "')");
1161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
1171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgdebug("");
119