[es6] Remove harmony-classes flag
authorarv <arv@chromium.org>
Fri, 26 Jun 2015 21:16:42 +0000 (14:16 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 26 Jun 2015 21:16:58 +0000 (21:16 +0000)
Move class tests to es6 directory

BUG=v8:3330
LOG=N
R=adamk

Review URL: https://codereview.chromium.org/1213813003

Cr-Commit-Position: refs/heads/master@{#29336}

51 files changed:
src/bootstrapper.cc
src/flag-definitions.h
src/parser.cc
src/preparser.h
src/scanner.cc
src/scanner.h
test/cctest/compiler/test-run-jsops.cc
test/cctest/test-api.cc
test/cctest/test-parsing.cc
test/js-perf-test/JSTests.json
test/message/class-constructor-accessor.js
test/message/class-constructor-generator.js
test/message/rest-param-class-setter-strict.js
test/message/super-constructor-extra-statement.js
test/message/super-constructor.js
test/message/super-in-function.js
test/mjsunit/es6/block-non-strict-errors.js
test/mjsunit/es6/class-property-name-eval-arguments.js [new file with mode: 0644]
test/mjsunit/es6/classes-experimental.js [new file with mode: 0644]
test/mjsunit/es6/classes-lazy-parsing.js [new file with mode: 0644]
test/mjsunit/es6/classes-maps.js [new file with mode: 0644]
test/mjsunit/es6/classes-subclass-arrays.js [new file with mode: 0644]
test/mjsunit/es6/classes.js [new file with mode: 0644]
test/mjsunit/es6/debug-step-into-class-extends.js [new file with mode: 0644]
test/mjsunit/es6/debug-step-into-constructor.js [new file with mode: 0644]
test/mjsunit/es6/regress/regress-3750.js [new file with mode: 0644]
test/mjsunit/es6/regress/regress-455141.js [new file with mode: 0644]
test/mjsunit/es6/toMethod.js [new file with mode: 0644]
test/mjsunit/harmony/array-concat.js
test/mjsunit/harmony/arrow-functions-lexical-arguments.js
test/mjsunit/harmony/class-computed-property-names-super.js
test/mjsunit/harmony/class-property-name-eval-arguments.js [deleted file]
test/mjsunit/harmony/classes-experimental.js [deleted file]
test/mjsunit/harmony/classes-lazy-parsing.js [deleted file]
test/mjsunit/harmony/classes-maps.js [deleted file]
test/mjsunit/harmony/classes-subclass-arrays.js [deleted file]
test/mjsunit/harmony/classes.js [deleted file]
test/mjsunit/harmony/computed-property-names-classes.js
test/mjsunit/harmony/computed-property-names-super.js
test/mjsunit/harmony/debug-step-into-class-extends.js [deleted file]
test/mjsunit/harmony/debug-step-into-constructor.js [deleted file]
test/mjsunit/harmony/object-literals-super.js
test/mjsunit/harmony/regress/regress-3750.js [deleted file]
test/mjsunit/harmony/regress/regress-455141.js [deleted file]
test/mjsunit/harmony/regress/regress-crbug-451770.js
test/mjsunit/harmony/rest-params.js
test/mjsunit/harmony/super.js
test/mjsunit/harmony/toMethod.js [deleted file]
test/mjsunit/strong/classes.js
test/mjsunit/strong/declaration-after-use.js
test/mjsunit/strong/super.js

index f3533c993f5a0eeadaa60c9ec5e2df0bb5e83670..867a0da57225e5b28fd51cee14ffcfcb66df48a2 100644 (file)
@@ -1800,7 +1800,6 @@ void Genesis::InitializeBuiltinTypedArrays() {
 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_modules)
 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_arrays)
 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_array_includes)
-EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_classes)
 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_regexps)
 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_arrow_functions)
 EMPTY_NATIVE_FUNCTIONS_FOR_FEATURE(harmony_tostring)
@@ -1837,7 +1836,6 @@ void Genesis::InstallNativeFunctions_harmony_proxies() {
 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_modules)
 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_arrays)
 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_array_includes)
-EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_classes)
 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_arrow_functions)
 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_proxies)
 EMPTY_INITIALIZE_GLOBAL_FOR_FEATURE(harmony_sloppy)
@@ -2471,7 +2469,6 @@ bool Genesis::InstallExperimentalNatives() {
   static const char* harmony_array_includes_natives[] = {
       "native harmony-array-includes.js", nullptr};
   static const char* harmony_proxies_natives[] = {"native proxy.js", nullptr};
-  static const char* harmony_classes_natives[] = {nullptr};
   static const char* harmony_modules_natives[] = {nullptr};
   static const char* harmony_regexps_natives[] = {"native harmony-regexp.js",
                                                   nullptr};
index fbf17bc10d7aba81e9112573ad92342b84cbe414..2f45087e0b6388c7316524b6aa539322d9611ae1 100644 (file)
@@ -204,7 +204,6 @@ DEFINE_IMPLICATION(es_staging, harmony)
 #define HARMONY_SHIPPING(V)                                             \
   V(harmony_arrays, "harmony array methods")                            \
   V(harmony_arrow_functions, "harmony arrow functions")                 \
-  V(harmony_classes, "harmony classes")                                 \
   V(harmony_computed_property_names, "harmony computed property names") \
   V(harmony_spreadcalls, "harmony spread-calls")                        \
   V(harmony_spread_arrays, "harmony spread in array literals")          \
index f450608259a9ae845280f38a274eb103771deddc..60c3eca857f17fdce5b506622c4b66a27febe54c 100644 (file)
@@ -907,7 +907,6 @@ Parser::Parser(ParseInfo* info)
   set_allow_natives(FLAG_allow_natives_syntax || info->is_native());
   set_allow_harmony_modules(!info->is_native() && FLAG_harmony_modules);
   set_allow_harmony_arrow_functions(FLAG_harmony_arrow_functions);
-  set_allow_harmony_classes(FLAG_harmony_classes);
   set_allow_harmony_sloppy(FLAG_harmony_sloppy);
   set_allow_harmony_unicode(FLAG_harmony_unicode);
   set_allow_harmony_computed_property_names(
@@ -4367,7 +4366,6 @@ PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser(
     SET_ALLOW(natives);
     SET_ALLOW(harmony_modules);
     SET_ALLOW(harmony_arrow_functions);
-    SET_ALLOW(harmony_classes);
     SET_ALLOW(harmony_sloppy);
     SET_ALLOW(harmony_unicode);
     SET_ALLOW(harmony_computed_property_names);
index c775fff86a286d6e16ed4543cf46dc4d22a6431e..5ddc5383c923d3a8113c7a70b2fe639ac41c4eec 100644 (file)
@@ -119,11 +119,9 @@ class ParserBase : public Traits {
 #undef ALLOW_ACCESSORS
 
   bool allow_harmony_modules() const { return scanner()->HarmonyModules(); }
-  bool allow_harmony_classes() const { return scanner()->HarmonyClasses(); }
   bool allow_harmony_unicode() const { return scanner()->HarmonyUnicode(); }
 
   void set_allow_harmony_modules(bool a) { scanner()->SetHarmonyModules(a); }
-  void set_allow_harmony_classes(bool a) { scanner()->SetHarmonyClasses(a); }
   void set_allow_harmony_unicode(bool a) { scanner()->SetHarmonyUnicode(a); }
 
  protected:
index a2ca30a9be5df0b08eede51835eb506ff78752a1..cf5a69c142de44b9d4e9d36db1aa911337872899 100644 (file)
@@ -42,7 +42,6 @@ Scanner::Scanner(UnicodeCache* unicode_cache)
       bookmark_c0_(kNoBookmark),
       octal_pos_(Location::invalid()),
       harmony_modules_(false),
-      harmony_classes_(false),
       harmony_unicode_(false) {
   bookmark_current_.literal_chars = &bookmark_current_literal_;
   bookmark_current_.raw_literal_chars = &bookmark_current_raw_literal_;
@@ -1099,79 +1098,74 @@ uc32 Scanner::ScanUnicodeEscape() {
 // ----------------------------------------------------------------------------
 // Keyword Matcher
 
-#define KEYWORDS(KEYWORD_GROUP, KEYWORD)                                  \
-  KEYWORD_GROUP('b')                                                      \
-  KEYWORD("break", Token::BREAK)                                          \
-  KEYWORD_GROUP('c')                                                      \
-  KEYWORD("case", Token::CASE)                                            \
-  KEYWORD("catch", Token::CATCH)                                          \
-  KEYWORD("class",                                                        \
-          harmony_classes ? Token::CLASS : Token::FUTURE_RESERVED_WORD)   \
-  KEYWORD("const", Token::CONST)                                          \
-  KEYWORD("continue", Token::CONTINUE)                                    \
-  KEYWORD_GROUP('d')                                                      \
-  KEYWORD("debugger", Token::DEBUGGER)                                    \
-  KEYWORD("default", Token::DEFAULT)                                      \
-  KEYWORD("delete", Token::DELETE)                                        \
-  KEYWORD("do", Token::DO)                                                \
-  KEYWORD_GROUP('e')                                                      \
-  KEYWORD("else", Token::ELSE)                                            \
-  KEYWORD("enum", Token::FUTURE_RESERVED_WORD)                            \
-  KEYWORD("export",                                                       \
-          harmony_modules ? Token::EXPORT : Token::FUTURE_RESERVED_WORD)  \
-  KEYWORD("extends",                                                      \
-          harmony_classes ? Token::EXTENDS : Token::FUTURE_RESERVED_WORD) \
-  KEYWORD_GROUP('f')                                                      \
-  KEYWORD("false", Token::FALSE_LITERAL)                                  \
-  KEYWORD("finally", Token::FINALLY)                                      \
-  KEYWORD("for", Token::FOR)                                              \
-  KEYWORD("function", Token::FUNCTION)                                    \
-  KEYWORD_GROUP('i')                                                      \
-  KEYWORD("if", Token::IF)                                                \
-  KEYWORD("implements", Token::FUTURE_STRICT_RESERVED_WORD)               \
-  KEYWORD("import",                                                       \
-          harmony_modules ? Token::IMPORT : Token::FUTURE_RESERVED_WORD)  \
-  KEYWORD("in", Token::IN)                                                \
-  KEYWORD("instanceof", Token::INSTANCEOF)                                \
-  KEYWORD("interface", Token::FUTURE_STRICT_RESERVED_WORD)                \
-  KEYWORD_GROUP('l')                                                      \
-  KEYWORD("let", Token::LET)                                              \
-  KEYWORD_GROUP('n')                                                      \
-  KEYWORD("new", Token::NEW)                                              \
-  KEYWORD("null", Token::NULL_LITERAL)                                    \
-  KEYWORD_GROUP('p')                                                      \
-  KEYWORD("package", Token::FUTURE_STRICT_RESERVED_WORD)                  \
-  KEYWORD("private", Token::FUTURE_STRICT_RESERVED_WORD)                  \
-  KEYWORD("protected", Token::FUTURE_STRICT_RESERVED_WORD)                \
-  KEYWORD("public", Token::FUTURE_STRICT_RESERVED_WORD)                   \
-  KEYWORD_GROUP('r')                                                      \
-  KEYWORD("return", Token::RETURN)                                        \
-  KEYWORD_GROUP('s')                                                      \
-  KEYWORD("static", harmony_classes ? Token::STATIC                       \
-                                    : Token::FUTURE_STRICT_RESERVED_WORD) \
-  KEYWORD("super",                                                        \
-          harmony_classes ? Token::SUPER : Token::FUTURE_RESERVED_WORD)   \
-  KEYWORD("switch", Token::SWITCH)                                        \
-  KEYWORD_GROUP('t')                                                      \
-  KEYWORD("this", Token::THIS)                                            \
-  KEYWORD("throw", Token::THROW)                                          \
-  KEYWORD("true", Token::TRUE_LITERAL)                                    \
-  KEYWORD("try", Token::TRY)                                              \
-  KEYWORD("typeof", Token::TYPEOF)                                        \
-  KEYWORD_GROUP('v')                                                      \
-  KEYWORD("var", Token::VAR)                                              \
-  KEYWORD("void", Token::VOID)                                            \
-  KEYWORD_GROUP('w')                                                      \
-  KEYWORD("while", Token::WHILE)                                          \
-  KEYWORD("with", Token::WITH)                                            \
-  KEYWORD_GROUP('y')                                                      \
+#define KEYWORDS(KEYWORD_GROUP, KEYWORD)                                 \
+  KEYWORD_GROUP('b')                                                     \
+  KEYWORD("break", Token::BREAK)                                         \
+  KEYWORD_GROUP('c')                                                     \
+  KEYWORD("case", Token::CASE)                                           \
+  KEYWORD("catch", Token::CATCH)                                         \
+  KEYWORD("class", Token::CLASS)                                         \
+  KEYWORD("const", Token::CONST)                                         \
+  KEYWORD("continue", Token::CONTINUE)                                   \
+  KEYWORD_GROUP('d')                                                     \
+  KEYWORD("debugger", Token::DEBUGGER)                                   \
+  KEYWORD("default", Token::DEFAULT)                                     \
+  KEYWORD("delete", Token::DELETE)                                       \
+  KEYWORD("do", Token::DO)                                               \
+  KEYWORD_GROUP('e')                                                     \
+  KEYWORD("else", Token::ELSE)                                           \
+  KEYWORD("enum", Token::FUTURE_RESERVED_WORD)                           \
+  KEYWORD("export",                                                      \
+          harmony_modules ? Token::EXPORT : Token::FUTURE_RESERVED_WORD) \
+  KEYWORD("extends", Token::EXTENDS)                                     \
+  KEYWORD_GROUP('f')                                                     \
+  KEYWORD("false", Token::FALSE_LITERAL)                                 \
+  KEYWORD("finally", Token::FINALLY)                                     \
+  KEYWORD("for", Token::FOR)                                             \
+  KEYWORD("function", Token::FUNCTION)                                   \
+  KEYWORD_GROUP('i')                                                     \
+  KEYWORD("if", Token::IF)                                               \
+  KEYWORD("implements", Token::FUTURE_STRICT_RESERVED_WORD)              \
+  KEYWORD("import",                                                      \
+          harmony_modules ? Token::IMPORT : Token::FUTURE_RESERVED_WORD) \
+  KEYWORD("in", Token::IN)                                               \
+  KEYWORD("instanceof", Token::INSTANCEOF)                               \
+  KEYWORD("interface", Token::FUTURE_STRICT_RESERVED_WORD)               \
+  KEYWORD_GROUP('l')                                                     \
+  KEYWORD("let", Token::LET)                                             \
+  KEYWORD_GROUP('n')                                                     \
+  KEYWORD("new", Token::NEW)                                             \
+  KEYWORD("null", Token::NULL_LITERAL)                                   \
+  KEYWORD_GROUP('p')                                                     \
+  KEYWORD("package", Token::FUTURE_STRICT_RESERVED_WORD)                 \
+  KEYWORD("private", Token::FUTURE_STRICT_RESERVED_WORD)                 \
+  KEYWORD("protected", Token::FUTURE_STRICT_RESERVED_WORD)               \
+  KEYWORD("public", Token::FUTURE_STRICT_RESERVED_WORD)                  \
+  KEYWORD_GROUP('r')                                                     \
+  KEYWORD("return", Token::RETURN)                                       \
+  KEYWORD_GROUP('s')                                                     \
+  KEYWORD("static", Token::STATIC)                                       \
+  KEYWORD("super", Token::SUPER)                                         \
+  KEYWORD("switch", Token::SWITCH)                                       \
+  KEYWORD_GROUP('t')                                                     \
+  KEYWORD("this", Token::THIS)                                           \
+  KEYWORD("throw", Token::THROW)                                         \
+  KEYWORD("true", Token::TRUE_LITERAL)                                   \
+  KEYWORD("try", Token::TRY)                                             \
+  KEYWORD("typeof", Token::TYPEOF)                                       \
+  KEYWORD_GROUP('v')                                                     \
+  KEYWORD("var", Token::VAR)                                             \
+  KEYWORD("void", Token::VOID)                                           \
+  KEYWORD_GROUP('w')                                                     \
+  KEYWORD("while", Token::WHILE)                                         \
+  KEYWORD("with", Token::WITH)                                           \
+  KEYWORD_GROUP('y')                                                     \
   KEYWORD("yield", Token::YIELD)
 
 
 static Token::Value KeywordOrIdentifierToken(const uint8_t* input,
                                              int input_length,
-                                             bool harmony_modules,
-                                             bool harmony_classes) {
+                                             bool harmony_modules) {
   DCHECK(input_length >= 1);
   const int kMinLength = 2;
   const int kMaxLength = 10;
@@ -1219,7 +1213,7 @@ bool Scanner::IdentifierIsFutureStrictReserved(
   }
   return Token::FUTURE_STRICT_RESERVED_WORD ==
          KeywordOrIdentifierToken(string->raw_data(), string->length(),
-                                  harmony_modules_, harmony_classes_);
+                                  harmony_modules_);
 }
 
 
@@ -1253,7 +1247,7 @@ Token::Value Scanner::ScanIdentifierOrKeyword() {
       literal.Complete();
       Vector<const uint8_t> chars = next_.literal_chars->one_byte_literal();
       return KeywordOrIdentifierToken(chars.start(), chars.length(),
-                                      harmony_modules_, harmony_classes_);
+                                      harmony_modules_);
     }
 
     HandleLeadSurrogate();
@@ -1303,10 +1297,8 @@ Token::Value Scanner::ScanIdentifierOrKeyword() {
 
   if (next_.literal_chars->is_one_byte()) {
     Vector<const uint8_t> chars = next_.literal_chars->one_byte_literal();
-    return KeywordOrIdentifierToken(chars.start(),
-                                    chars.length(),
-                                    harmony_modules_,
-                                    harmony_classes_);
+    return KeywordOrIdentifierToken(chars.start(), chars.length(),
+                                    harmony_modules_);
   }
   return Token::IDENTIFIER;
 }
index f387d84133f984ff5183b6b802d65cf5cb3293bb..5559b8424c389d763a4860656499ee0fb8ca4963 100644 (file)
@@ -483,12 +483,7 @@ class Scanner {
   void SetHarmonyModules(bool modules) {
     harmony_modules_ = modules;
   }
-  bool HarmonyClasses() const {
-    return harmony_classes_;
-  }
-  void SetHarmonyClasses(bool classes) {
-    harmony_classes_ = classes;
-  }
+
   bool HarmonyUnicode() const { return harmony_unicode_; }
   void SetHarmonyUnicode(bool unicode) { harmony_unicode_ = unicode; }
 
@@ -803,8 +798,6 @@ class Scanner {
   bool has_multiline_comment_before_next_;
   // Whether we scan 'module', 'import', 'export' as keywords.
   bool harmony_modules_;
-  // Whether we scan 'class', 'extends', 'static' and 'super' as keywords.
-  bool harmony_classes_;
   // Whether we allow \u{xxxxx}.
   bool harmony_unicode_;
 };
index d0db44e9084b87ee5803999b2b832924f0620f9b..56ac31cbc987663dcd3b113872ecbc2340b9b124 100644 (file)
@@ -523,7 +523,6 @@ TEST(RegExpLiteral) {
 
 
 TEST(ClassLiteral) {
-  FLAG_harmony_classes = true;
   FLAG_harmony_sloppy = true;
   const char* src =
       "(function(a,b) {"
index 50e9f1e670e43f9ef13d6814c06184418a3a0fd0..1433b7bed6b86a6a1a664818e34bb47c786618de 100644 (file)
@@ -8688,7 +8688,6 @@ THREADED_TEST(AccessControlGetOwnPropertyNames) {
 
 TEST(SuperAccessControl) {
   i::FLAG_allow_natives_syntax = true;
-  i::FLAG_harmony_classes = true;
   v8::Isolate* isolate = CcTest::isolate();
   v8::HandleScope handle_scope(isolate);
   v8::Handle<v8::ObjectTemplate> obj_template =
@@ -8742,7 +8741,6 @@ TEST(SuperAccessControl) {
 
 
 TEST(Regress470113) {
-  i::FLAG_harmony_classes = true;
   v8::Isolate* isolate = CcTest::isolate();
   v8::HandleScope handle_scope(isolate);
   v8::Handle<v8::ObjectTemplate> obj_template =
@@ -21327,7 +21325,6 @@ TEST(GetPrototypeHidden) {
 
 
 TEST(ClassPrototypeCreationContext) {
-  i::FLAG_harmony_classes = true;
   v8::Isolate* isolate = CcTest::isolate();
   v8::HandleScope handle_scope(isolate);
   LocalContext env;
index 74449b29b7195ae66a0c97ce9031d8c83fd9f693..a4293d662af36426f38b7c4863a3dea33892b7a5 100644 (file)
@@ -73,7 +73,6 @@ TEST(ScanKeywords) {
       i::Scanner scanner(&unicode_cache);
       // The scanner should parse Harmony keywords for this test.
       scanner.SetHarmonyModules(true);
-      scanner.SetHarmonyClasses(true);
       scanner.Initialize(&stream);
       CHECK_EQ(key_token.token, scanner.Next());
       CHECK_EQ(i::Token::EOS, scanner.Next());
@@ -1067,7 +1066,6 @@ TEST(ScopeUsesArgumentsSuperThis) {
       i::ParseInfo info(&zone, script);
       i::Parser parser(&info);
       parser.set_allow_harmony_arrow_functions(true);
-      parser.set_allow_harmony_classes(true);
       parser.set_allow_harmony_sloppy(true);
       info.set_global();
       CHECK(parser.Parse(&info));
@@ -1378,7 +1376,6 @@ enum ParserFlag {
   kAllowNatives,
   kAllowHarmonyModules,
   kAllowHarmonyArrowFunctions,
-  kAllowHarmonyClasses,
   kAllowHarmonyRestParameters,
   kAllowHarmonySloppy,
   kAllowHarmonyUnicode,
@@ -1405,7 +1402,6 @@ void SetParserFlags(i::ParserBase<Traits>* parser,
   parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules));
   parser->set_allow_harmony_arrow_functions(
       flags.Contains(kAllowHarmonyArrowFunctions));
-  parser->set_allow_harmony_classes(flags.Contains(kAllowHarmonyClasses));
   parser->set_allow_harmony_rest_params(
       flags.Contains(kAllowHarmonyRestParameters));
   parser->set_allow_harmony_spreadcalls(
@@ -1972,8 +1968,7 @@ TEST(NoErrorsFutureStrictReservedWords) {
   RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
                     always_flags, arraysize(always_flags));
 
-  static const ParserFlag classes_flags[] = {kAllowHarmonyArrowFunctions,
-                                             kAllowHarmonyClasses};
+  static const ParserFlag classes_flags[] = {kAllowHarmonyArrowFunctions};
   RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
                     classes_flags, arraysize(classes_flags));
 }
@@ -2986,10 +2981,7 @@ TEST(NoErrorsDeclsInCase) {
     nullptr
   };
 
-  static const ParserFlag always_flags[] = {kAllowHarmonyClasses};
-
-  RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
-                    always_flags, arraysize(always_flags));
+  RunParserSyncTest(context_data, statement_data, kSuccess);
 }
 
 
@@ -3721,7 +3713,6 @@ TEST(SuperNoErrors) {
 
   static const ParserFlag always_flags[] = {
     kAllowHarmonyArrowFunctions,
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
@@ -3752,10 +3743,7 @@ TEST(SuperErrors) {
     NULL
   };
 
-  static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
-    kAllowHarmonySloppy
-  };
+  static const ParserFlag always_flags[] = {kAllowHarmonySloppy};
   RunParserSyncTest(context_data, expression_data, kError, NULL, 0,
                     always_flags, arraysize(always_flags));
 }
@@ -3771,11 +3759,8 @@ TEST(SuperCall) {
     NULL
   };
 
-  static const ParserFlag always_flags[] = {
-    kAllowHarmonyArrowFunctions,
-    kAllowHarmonyClasses,
-    kAllowHarmonySloppy
-  };
+  static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions,
+                                            kAllowHarmonySloppy};
   RunParserSyncTest(context_data, success_data, kSuccess, NULL, 0,
                     always_flags, arraysize(always_flags));
 
@@ -3825,11 +3810,8 @@ TEST(SuperNewNoErrors) {
     NULL
   };
 
-  static const ParserFlag always_flags[] = {
-    kAllowHarmonyArrowFunctions,
-    kAllowHarmonyClasses,
-    kAllowHarmonySloppy
-  };
+  static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions,
+                                            kAllowHarmonySloppy};
   RunParserSyncTest(context_data, expression_data, kSuccess, NULL, 0,
                     always_flags, arraysize(always_flags));
 }
@@ -3862,11 +3844,8 @@ TEST(SuperNewErrors) {
     NULL
   };
 
-  static const ParserFlag always_flags[] = {
-    kAllowHarmonyArrowFunctions,
-    kAllowHarmonyClasses,
-    kAllowHarmonySloppy
-  };
+  static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions,
+                                            kAllowHarmonySloppy};
   RunParserSyncTest(context_data, statement_data, kError, NULL, 0,
                     always_flags, arraysize(always_flags));
 }
@@ -3907,7 +3886,6 @@ TEST(SuperErrorsNonMethods) {
   };
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, statement_data, kError, NULL, 0,
@@ -4124,8 +4102,7 @@ TEST(ClassExpressionNoErrors) {
     "class name extends class base {} {}",
     NULL};
 
-  static const ParserFlag always_flags[] = {
-      kAllowHarmonyClasses, kAllowHarmonySloppy};
+  static const ParserFlag always_flags[] = {kAllowHarmonySloppy};
   RunParserSyncTest(context_data, class_data, kSuccess, NULL, 0,
                     always_flags, arraysize(always_flags));
 }
@@ -4144,9 +4121,7 @@ TEST(ClassDeclarationNoErrors) {
     "class name extends class base {} {}",
     NULL};
 
-  static const ParserFlag always_flags[] = {kAllowHarmonyClasses};
-  RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
-                    always_flags, arraysize(always_flags));
+  RunParserSyncTest(context_data, statement_data, kSuccess);
 }
 
 
@@ -4188,7 +4163,6 @@ TEST(ClassBodyNoErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0,
@@ -4246,7 +4220,6 @@ TEST(ClassPropertyNameNoErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0,
@@ -4277,7 +4250,6 @@ TEST(ClassExpressionErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_data, kError, NULL, 0,
@@ -4314,7 +4286,6 @@ TEST(ClassDeclarationErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_data, kError, NULL, 0,
@@ -4344,7 +4315,6 @@ TEST(ClassNameErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_name, kError, NULL, 0,
@@ -4377,7 +4347,6 @@ TEST(ClassGetterParamNameErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_name, kError, NULL, 0,
@@ -4405,7 +4374,6 @@ TEST(ClassStaticPrototypeErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_body_data, kError, NULL, 0,
@@ -4432,7 +4400,6 @@ TEST(ClassSpecialConstructorErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_body_data, kError, NULL, 0,
@@ -4454,7 +4421,6 @@ TEST(ClassConstructorNoErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0,
@@ -4472,7 +4438,6 @@ TEST(ClassMultipleConstructorErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_body_data, kError, NULL, 0,
@@ -4494,7 +4459,6 @@ TEST(ClassMultiplePropertyNamesNoErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0,
@@ -4514,7 +4478,6 @@ TEST(ClassesAreStrictErrors) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonySloppy
   };
   RunParserSyncTest(context_data, class_body_data, kError, NULL, 0,
@@ -5100,8 +5063,8 @@ TEST(RestParameterInSetterMethodError) {
       {nullptr, nullptr}};
   const char* data[] = {"...a", "...arguments", "...eval", nullptr};
 
-  static const ParserFlag always_flags[] = {
-      kAllowHarmonyRestParameters, kAllowHarmonyClasses, kAllowHarmonySloppy};
+  static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters,
+                                            kAllowHarmonySloppy};
   RunParserSyncTest(context_data, data, kError, nullptr, 0, always_flags,
                     arraysize(always_flags));
 }
@@ -5224,18 +5187,15 @@ TEST(LexicalScopingSloppyMode) {
     "(class C {})",
     "(class C extends D {})",
     NULL};
-  static const ParserFlag always_true_flags[] = {kAllowHarmonyClasses};
   static const ParserFlag always_false_flags[] = {kAllowHarmonySloppy};
-  RunParserSyncTest(context_data, bad_data, kError, NULL, 0,
-                    always_true_flags, arraysize(always_true_flags),
+  RunParserSyncTest(context_data, bad_data, kError, NULL, 0, NULL, 0,
                     always_false_flags, arraysize(always_false_flags));
 
   const char* good_data[] = {
     "let = 1;",
     "for(let = 1;;){}",
     NULL};
-  RunParserSyncTest(context_data, good_data, kSuccess, NULL, 0,
-                    always_true_flags, arraysize(always_true_flags),
+  RunParserSyncTest(context_data, good_data, kSuccess, NULL, 0, NULL, 0,
                     always_false_flags, arraysize(always_false_flags));
 }
 
@@ -5257,7 +5217,6 @@ TEST(ComputedPropertyName) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonyComputedPropertyNames,
     kAllowHarmonySloppy,
   };
@@ -5287,7 +5246,6 @@ TEST(ComputedPropertyNameShorthandError) {
     NULL};
 
   static const ParserFlag always_flags[] = {
-    kAllowHarmonyClasses,
     kAllowHarmonyComputedPropertyNames,
     kAllowHarmonySloppy,
   };
@@ -5356,7 +5314,6 @@ TEST(BasicImportExportParsing) {
       i::Zone zone;
       i::ParseInfo info(&zone, script);
       i::Parser parser(&info);
-      parser.set_allow_harmony_classes(true);
       parser.set_allow_harmony_modules(true);
       info.set_module();
       if (!parser.Parse(&info)) {
@@ -5383,7 +5340,6 @@ TEST(BasicImportExportParsing) {
       i::Zone zone;
       i::ParseInfo info(&zone, script);
       i::Parser parser(&info);
-      parser.set_allow_harmony_classes(true);
       parser.set_allow_harmony_modules(true);
       info.set_global();
       CHECK(!parser.Parse(&info));
@@ -5473,7 +5429,6 @@ TEST(ImportExportParsingErrors) {
     i::Zone zone;
     i::ParseInfo info(&zone, script);
     i::Parser parser(&info);
-    parser.set_allow_harmony_classes(true);
     parser.set_allow_harmony_modules(true);
     info.set_module();
     CHECK(!parser.Parse(&info));
@@ -5613,8 +5568,7 @@ TEST(DeclarationsError) {
     "class C {}",
     NULL};
 
-  static const ParserFlag always_flags[] = {kAllowHarmonyClasses,
-                                            kAllowStrongMode};
+  static const ParserFlag always_flags[] = {kAllowStrongMode};
   RunParserSyncTest(context_data, statement_data, kError, NULL, 0,
                     always_flags, arraysize(always_flags));
 }
@@ -5698,8 +5652,7 @@ TEST(PropertyNameEvalArguments) {
 
       NULL};
 
-  static const ParserFlag always_flags[] = {kAllowHarmonyClasses,
-                                            kAllowStrongMode};
+  static const ParserFlag always_flags[] = {kAllowStrongMode};
   RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0,
                     always_flags, arraysize(always_flags));
 }
@@ -5883,8 +5836,8 @@ TEST(StrongConstructorThis) {
       "class C { constructor() { label: 0; this.a = 0; this.b = 6; } }",
       NULL};
 
-  static const ParserFlag always_flags[] = {
-      kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyArrowFunctions};
+  static const ParserFlag always_flags[] = {kAllowStrongMode,
+                                            kAllowHarmonyArrowFunctions};
   RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0,
                     always_flags, arraysize(always_flags));
   RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0,
@@ -5937,8 +5890,8 @@ TEST(StrongConstructorSuper) {
       "class C extends Object { constructor() { 3; super(3); this.x = 0; } }",
       NULL};
 
-  static const ParserFlag always_flags[] = {
-      kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyArrowFunctions};
+  static const ParserFlag always_flags[] = {kAllowStrongMode,
+                                            kAllowHarmonyArrowFunctions};
   RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0,
                     always_flags, arraysize(always_flags));
   RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0,
@@ -5983,8 +5936,7 @@ TEST(StrongConstructorReturns) {
       "class C extends Array { constructor() { super(); this.a = 9; return } }",
       NULL};
 
-  static const ParserFlag always_flags[] = {kAllowStrongMode,
-                                            kAllowHarmonyClasses};
+  static const ParserFlag always_flags[] = {kAllowStrongMode};
   RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0,
                     always_flags, arraysize(always_flags));
   RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0,
@@ -6748,7 +6700,6 @@ TEST(NewTarget) {
 
   static const ParserFlag always_flags[] = {
     kAllowHarmonyArrowFunctions,
-    kAllowHarmonyClasses,
     kAllowHarmonyNewTarget,
     kAllowHarmonySloppy,
   };
index 42cf84b96a9ba2203afd197020ac84c6d1415ca5..bff5b6536f66d24edf26eb7e48e75efc2a09c7e9 100644 (file)
@@ -28,7 +28,6 @@
       "path": ["Classes"],
       "main": "run.js",
       "resources": ["super.js", "default-constructor.js"],
-      "flags": ["--harmony-classes"],
       "results_regexp": "^%s\\-Classes\\(Score\\): (.+)$",
       "tests": [
         {"name": "Super"},
index edc3c131697ed513a7c7a15c95e9aae2c68788ad..fcc9868b1445b7c502e7dd236a37aa423ae605d5 100644 (file)
@@ -1,8 +1,8 @@
 // Copyright 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-//
-// Flags: --harmony-classes
+
+
 'use strict';
 
 class C {
index 5d370f865eaa84bd187aab7721acfc2a0a390eac..a9a0ef862d7057b34cdd3446aa21970243669781 100644 (file)
@@ -1,8 +1,8 @@
 // Copyright 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-//
-// Flags: --harmony-classes
+
+
 'use strict';
 
 class C {
index d37edb6f3f70373b0b513e29363eddcafb343f1b..2d478a6644c17bde8b2afde9965e81e51fdc3841 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Flags: --harmony-rest-parameters --harmony-classes
+// Flags: --harmony-rest-parameters
 'use strict';
 
 var _bad = "setting this should fail!";
index e8ffe2dbfa59d66d59034b4a54b939565f4802e2..541bddbde1ce1e5bc15a6d63b80e8700d22f7aa2 100644 (file)
@@ -1,8 +1,8 @@
 // Copyright 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-//
-// Flags: --harmony-classes
+
+
 'use strict';
 
 class C {
index 430dc58ce71b5cffc3150322eb91c408e5892ece..93ca61844a4ffd57b8e6b1195805a8f0b2810710 100644 (file)
@@ -1,8 +1,8 @@
 // Copyright 2014 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-//
-// Flags: --harmony-classes
+
+
 'use strict';
 
 class C {
index edaa0e4eadc7befdb7ed28a3e06eaa827c4388f0..f2e2342c31b9a3ba001555bcf484d0c773fbb79e 100644 (file)
@@ -1,8 +1,8 @@
 // Copyright 2015 the V8 project authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-//
-// Flags: --harmony-classes
+
+
 'use strict';
 
 function f() {
index 48cac211419ddaf2df0acfb08562ed8a82ca80ff..50d5f22cf1415163d2196eef9ac9d8a492041033 100644 (file)
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-classes
-
 function CheckError(source) {
   var exception = null;
   try {
diff --git a/test/mjsunit/es6/class-property-name-eval-arguments.js b/test/mjsunit/es6/class-property-name-eval-arguments.js
new file mode 100644 (file)
index 0000000..72ff60f
--- /dev/null
@@ -0,0 +1,79 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-sloppy
+
+
+(function Method() {
+  class C {
+    eval() {
+      return 1;
+    }
+    arguments() {
+      return 2;
+    }
+    static eval() {
+      return 3;
+    }
+    static arguments() {
+      return 4;
+    }
+  };
+
+  assertEquals(1, new C().eval());
+  assertEquals(2, new C().arguments());
+  assertEquals(3, C.eval());
+  assertEquals(4, C.arguments());
+})();
+
+
+(function Getters() {
+  class C {
+    get eval() {
+      return 1;
+    }
+    get arguments() {
+      return 2;
+    }
+    static get eval() {
+      return 3;
+    }
+    static get arguments() {
+      return 4;
+    }
+  };
+
+  assertEquals(1, new C().eval);
+  assertEquals(2, new C().arguments);
+  assertEquals(3, C.eval);
+  assertEquals(4, C.arguments);
+})();
+
+
+(function Setters() {
+  var x = 0;
+  class C {
+    set eval(v) {
+      x = v;
+    }
+    set arguments(v) {
+      x = v;
+    }
+    static set eval(v) {
+      x = v;
+    }
+    static set arguments(v) {
+      x = v;
+    }
+  };
+
+  new C().eval = 1;
+  assertEquals(1, x);
+  new C().arguments = 2;
+  assertEquals(2, x);
+  C.eval = 3;
+  assertEquals(3, x);
+  C.arguments = 4;
+  assertEquals(4, x);
+})();
diff --git a/test/mjsunit/es6/classes-experimental.js b/test/mjsunit/es6/classes-experimental.js
new file mode 100644 (file)
index 0000000..4607a25
--- /dev/null
@@ -0,0 +1,337 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+(function TestArgumentsAccess() {
+  class Base {
+    constructor() {
+      assertEquals(2, arguments.length);
+      assertEquals(1, arguments[0]);
+      assertEquals(2, arguments[1]);
+    }
+  }
+
+  let b = new Base(1,2);
+
+  class Subclass extends Base {
+    constructor() {
+      assertEquals(2, arguments.length);
+      assertEquals(3, arguments[0]);
+      assertEquals(4, arguments[1]);
+      super(1,2);
+    }
+  }
+
+  let s = new Subclass(3,4);
+  assertEquals(0, Subclass.length);
+
+  class Subclass2 extends Base {
+    constructor(x,y) {
+      assertEquals(2, arguments.length);
+      assertEquals(3, arguments[0]);
+      assertEquals(4, arguments[1]);
+      super(1,2);
+    }
+  }
+
+  let s2 = new Subclass2(3,4);
+  assertEquals(2, Subclass2.length);
+}());
+
+(function TestThisAccessRestriction() {
+  class Base {
+    constructor(a, b) {
+      let o = new Object();
+      o.prp = a + b;
+      return o;
+    }
+  }
+
+  class Subclass extends Base {
+    constructor(a, b) {
+      var exn;
+      try {
+        this.prp1 = 3;
+      } catch (e) {
+        exn = e;
+      }
+      assertTrue(exn instanceof ReferenceError);
+      super(a, b);
+      assertSame(a + b, this.prp);
+      assertSame(undefined, this.prp1);
+      assertFalse(this.hasOwnProperty("prp1"));
+      return this;
+    }
+  }
+
+  let b = new Base(1, 2);
+  assertSame(3, b.prp);
+
+
+  let s = new Subclass(2, -1);
+  assertSame(1, s.prp);
+  assertSame(undefined, s.prp1);
+  assertFalse(s.hasOwnProperty("prp1"));
+
+  class Subclass2 extends Base {
+    constructor(x) {
+      super(1,2);
+
+      if (x < 0) return;
+
+      let called = false;
+      function tmp() { called = true; return 3; }
+      var exn = null;
+      try {
+        super(tmp(),4);
+      } catch (e) { exn = e; }
+      assertTrue(exn instanceof ReferenceError);
+      assertTrue(called);
+    }
+  }
+
+  var s2 = new Subclass2(1);
+  assertSame(3, s2.prp);
+
+  var s3 = new Subclass2(-1);
+  assertSame(3, s3.prp);
+
+  assertThrows(function() { Subclass.call(new Object(), 1, 2); }, TypeError);
+  assertThrows(function() { Base.call(new Object(), 1, 2); }, TypeError);
+
+  class BadSubclass extends Base {
+    constructor() {}
+  }
+
+  assertThrows(function() { new BadSubclass(); }, ReferenceError);
+}());
+
+(function TestThisCheckOrdering() {
+  let baseCalled = 0;
+  class Base {
+    constructor() { baseCalled++ }
+  }
+
+  let fCalled = 0;
+  function f() { fCalled++; return 3; }
+
+  class Subclass1 extends Base {
+    constructor() {
+      baseCalled = 0;
+      super();
+      assertEquals(1, baseCalled);
+      let obj = this;
+
+      let exn = null;
+      baseCalled = 0;
+      fCalled = 0;
+      try {
+        super(f());
+      } catch (e) { exn = e; }
+      assertTrue(exn instanceof ReferenceError);
+      assertEquals(1, fCalled);
+      assertEquals(1, baseCalled);
+      assertSame(obj, this);
+
+      exn = null;
+      baseCalled = 0;
+      fCalled = 0;
+      try {
+        super(super(), f());
+      } catch (e) { exn = e; }
+      assertTrue(exn instanceof ReferenceError);
+      assertEquals(0, fCalled);
+      assertEquals(1, baseCalled);
+      assertSame(obj, this);
+
+      exn = null;
+      baseCalled = 0;
+      fCalled = 0;
+      try {
+        super(f(), super());
+      } catch (e) { exn = e; }
+      assertTrue(exn instanceof ReferenceError);
+      assertEquals(1, fCalled);
+      assertEquals(1, baseCalled);
+      assertSame(obj, this);
+    }
+  }
+
+  new Subclass1();
+}());
+
+
+(function TestPrototypeWiring() {
+  class Base {
+    constructor(x) {
+      this.foobar = x;
+    }
+  }
+
+  class Subclass extends Base {
+    constructor(x) {
+      super(x);
+    }
+  }
+
+  let s = new Subclass(1);
+  assertSame(1, s.foobar);
+  assertSame(Subclass.prototype, s.__proto__);
+
+  let s1 = new Subclass(1, 2);
+  assertSame(1, s1.foobar);
+  assertTrue(s1.__proto__ === Subclass.prototype);
+
+  let s2 = new Subclass();
+  assertSame(undefined, s2.foobar);
+  assertSame(Subclass.prototype, s2.__proto__);
+  assertThrows(function() { Subclass(1); }, TypeError);
+  assertThrows(function() { Subclass(1,2,3,4); }, TypeError);
+
+  class Subclass2 extends Subclass {
+    constructor() {
+      super(5, 6, 7);
+    }
+  }
+
+  let ss2 = new Subclass2();
+  assertSame(5, ss2.foobar);
+  assertSame(Subclass2.prototype, ss2.__proto__);
+
+  class Subclass3 extends Base {
+    constructor(x,y) {
+      super(x + y);
+    }
+  }
+
+  let ss3 = new Subclass3(27,42-27);
+  assertSame(42, ss3.foobar);
+  assertSame(Subclass3.prototype, ss3.__proto__);
+}());
+
+(function TestSublclassingBuiltins() {
+  class ExtendedUint8Array extends Uint8Array {
+    constructor() {
+      super(10);
+      this[0] = 255;
+      this[1] = 0xFFA;
+    }
+  }
+
+  var eua = new ExtendedUint8Array();
+  assertEquals(10, eua.length);
+  assertEquals(10, eua.byteLength);
+  assertEquals(0xFF, eua[0]);
+  assertEquals(0xFA, eua[1]);
+  assertSame(ExtendedUint8Array.prototype, eua.__proto__);
+  assertEquals("[object Uint8Array]", Object.prototype.toString.call(eua));
+}());
+
+(function TestSubclassingNull() {
+  let N = null;
+
+  class Foo extends N {
+    constructor(x,y) {
+      assertSame(1, x);
+      assertSame(2, y);
+      return {};
+    }
+  }
+
+  new Foo(1,2);
+}());
+
+(function TestSubclassBinding() {
+  class Base {
+    constructor(x, y) {
+      this.x = x;
+      this.y = y;
+    }
+  }
+
+  let obj = {};
+  class Subclass extends Base {
+    constructor(x,y) {
+      super(x,y);
+      assertTrue(this !== obj);
+    }
+  }
+
+  let f = Subclass.bind(obj);
+  assertThrows(function () { f(1, 2); }, TypeError);
+  let s = new f(1, 2);
+  assertSame(1, s.x);
+  assertSame(2, s.y);
+  assertSame(Subclass.prototype, s.__proto__);
+
+  let s1 = new f(1);
+  assertSame(1, s1.x);
+  assertSame(undefined, s1.y);
+  assertSame(Subclass.prototype, s1.__proto__);
+
+  let g = Subclass.bind(obj, 1);
+  assertThrows(function () { g(8); }, TypeError);
+  let s2 = new g(8);
+  assertSame(1, s2.x);
+  assertSame(8, s2.y);
+  assertSame(Subclass.prototype, s.__proto__);
+}());
+
+
+(function TestDefaultConstructor() {
+  class Base1 { }
+  assertThrows(function() { Base1(); }, TypeError);
+
+  class Subclass1 extends Base1 { }
+
+  assertThrows(function() { Subclass1(); }, TypeError);
+
+  let s1 = new Subclass1();
+  assertSame(s1.__proto__, Subclass1.prototype);
+
+  class Base2 {
+    constructor(x, y) {
+      this.x = x;
+      this.y = y;
+    }
+  }
+
+  class Subclass2 extends Base2 {};
+
+  let s2 = new Subclass2(1, 2);
+
+  assertSame(s2.__proto__, Subclass2.prototype);
+  assertSame(1, s2.x);
+  assertSame(2, s2.y);
+
+  let f = Subclass2.bind({}, 3, 4);
+  let s2prime = new f();
+  assertSame(s2prime.__proto__, Subclass2.prototype);
+  assertSame(3, s2prime.x);
+  assertSame(4, s2prime.y);
+
+  let obj = {};
+  class Base3 {
+    constructor() {
+      return obj;
+    }
+  }
+
+  class Subclass3 extends Base3 {};
+
+  let s3 = new Subclass3();
+  assertSame(obj, s3);
+
+  class ExtendedUint8Array extends Uint8Array { }
+
+  var eua = new ExtendedUint8Array(10);
+  assertEquals(10, eua.length);
+  assertEquals(10, eua.byteLength);
+  eua[0] = 0xFF;
+  eua[1] = 0xFFA;
+  assertEquals(0xFF, eua[0]);
+  assertEquals(0xFA, eua[1]);
+  assertSame(ExtendedUint8Array.prototype, eua.__proto__);
+  assertEquals("[object Uint8Array]", Object.prototype.toString.call(eua));
+}());
diff --git a/test/mjsunit/es6/classes-lazy-parsing.js b/test/mjsunit/es6/classes-lazy-parsing.js
new file mode 100644 (file)
index 0000000..c1bf31d
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --min-preparse-length=0
+
+'use strict';
+
+class Base {
+  m() {
+    return 42;
+  }
+}
+
+class Derived extends Base {
+  m() {
+    return super.m();
+  }
+  evalM() {
+    return eval('super.m()');
+  }
+}
+
+assertEquals(42, new Derived().m());
+assertEquals(42, new Derived().evalM());
+
+
+class LazyDerived extends Base {
+  constructor() {
+    eval('super()');
+  }
+}
+assertInstanceof(new LazyDerived(), LazyDerived);
+assertInstanceof(new LazyDerived(), Base);
diff --git a/test/mjsunit/es6/classes-maps.js b/test/mjsunit/es6/classes-maps.js
new file mode 100644 (file)
index 0000000..e519676
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Flags: --allow-natives-syntax
+'use strict';
+
+(function TestMaps() {
+  class Base {}
+  class Derived extends Base {}
+
+  let d1 = new Derived();
+  let d2 = new Derived();
+
+  assertTrue(%HaveSameMap(d1, d2));
+}());
+
+
+(function TestProtoModificationArray() {
+  let called = 0;
+  function F() {
+    called++;
+    assertFalse(Array.isArray(this));
+  }
+  class Derived extends Array {}
+  assertSame(Derived.__proto__, Array);
+
+  let d1 = new Derived();
+  assertTrue(Array.isArray(d1));
+
+  Derived.__proto__ = F;
+  called = 0;
+  let d2 = new Derived();
+  assertSame(1, called);
+  assertFalse(Array.isArray(d2));
+
+  assertFalse(%HaveSameMap(d1, d2));
+}());
+
+
+(function TestProtoModification() {
+  let called = 0;
+  function F() {
+    called++;
+    let exn = null;
+    try {
+      this.byteLength;
+    } catch (e) {
+      exn = e;
+    }
+    assertTrue(exn instanceof TypeError);
+  }
+  class Derived extends Uint8Array {
+    constructor() { super(10); }
+  }
+  assertSame(Derived.__proto__, Uint8Array);
+
+  let d1 = new Derived();
+  assertSame(10, d1.byteLength);
+
+  Derived.__proto__ = F;
+  called = 0;
+  let d2 = new Derived();
+  assertSame(1, called);
+  assertThrows(function() { d2.byteLength; }, TypeError);
+
+  assertFalse(%HaveSameMap(d1, d2));
+}());
diff --git a/test/mjsunit/es6/classes-subclass-arrays.js b/test/mjsunit/es6/classes-subclass-arrays.js
new file mode 100644 (file)
index 0000000..74feb6a
--- /dev/null
@@ -0,0 +1,149 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+(function TestDefaultConstructor() {
+  class Stack extends Array { }
+  {
+    let s1 = new Stack();
+    assertSame(Stack.prototype, s1.__proto__);
+    assertTrue(Array.isArray(s1));
+    assertSame(0, s1.length);
+    s1[0] = 'xyz';
+    assertSame(1, s1.length);
+    assertSame('xyz', s1[0]);
+    s1.push(42);
+    assertSame(2, s1.length);
+    assertSame('xyz', s1[0]);
+    assertSame(42, s1[1]);
+  }
+
+  {
+    let s2 = new Stack(10);
+    assertSame(Stack.prototype, s2.__proto__);
+    assertTrue(Array.isArray(s2));
+    assertSame(10, s2.length);
+    assertSame(undefined, s2[0]);
+  }
+
+  {
+    let a = [1,2,3];
+    let s3 = new Stack(a);
+    assertSame(Stack.prototype, s3.__proto__);
+    assertTrue(Array.isArray(s3));
+    assertSame(1, s3.length);
+    assertSame(a, s3[0]);
+  }
+
+  {
+    let s4 = new Stack(1, 2, 3);
+    assertSame(Stack.prototype, s4.__proto__);
+    assertTrue(Array.isArray(s4));
+    assertSame(3, s4.length);
+    assertSame(1, s4[0]);
+    assertSame(2, s4[1]);
+    assertSame(3, s4[2]);
+  }
+
+  {
+    let s5 = new Stack(undefined, undefined, undefined);
+    assertSame(Stack.prototype, s5.__proto__);
+    assertTrue(Array.isArray(s5));
+    assertSame(3, s5.length);
+    assertSame(undefined, s5[0]);
+    assertSame(undefined, s5[1]);
+    assertSame(undefined, s5[2]);
+  }
+}());
+
+
+(function TestEmptyArgsSuper() {
+  class Stack extends Array {
+    constructor() { super(); }
+  }
+  let s1 = new Stack();
+  assertSame(Stack.prototype, s1.__proto__);
+  assertTrue(Array.isArray(s1));
+  assertSame(0, s1.length);
+  s1[0] = 'xyz';
+  assertSame(1, s1.length);
+  assertSame('xyz', s1[0]);
+  s1.push(42);
+  assertSame(2, s1.length);
+  assertSame('xyz', s1[0]);
+  assertSame(42, s1[1]);
+}());
+
+
+(function TestOneArgSuper() {
+  class Stack extends Array {
+    constructor(x) {
+      super(x);
+    }
+  }
+
+  {
+    let s2 = new Stack(10, 'ignored arg');
+    assertSame(Stack.prototype, s2.__proto__);
+    assertTrue(Array.isArray(s2));
+    assertSame(10, s2.length);
+    assertSame(undefined, s2[0]);
+  }
+
+  {
+    let a = [1,2,3];
+    let s3 = new Stack(a, 'ignored arg');
+    assertSame(Stack.prototype, s3.__proto__);
+    assertTrue(Array.isArray(s3));
+    assertSame(1, s3.length);
+    assertSame(a, s3[0]);
+  }
+}());
+
+
+(function TestMultipleArgsSuper() {
+  class Stack extends Array {
+    constructor(x, y, z) {
+      super(x, y, z);
+    }
+  }
+  {
+    let s4 = new Stack(1, 2, 3, 4, 5);
+    assertSame(Stack.prototype, s4.__proto__);
+    assertTrue(Array.isArray(s4));
+    assertSame(3, s4.length);
+    assertSame(1, s4[0]);
+    assertSame(2, s4[1]);
+    assertSame(3, s4[2]);
+  }
+
+  {
+    let s5 = new Stack(undefined);
+    assertSame(Stack.prototype, s5.__proto__);
+    assertTrue(Array.isArray(s5));
+    assertTrue(s5.__proto__ == Stack.prototype);
+    assertSame(3, s5.length);
+    assertSame(undefined, s5[0]);
+    assertSame(undefined, s5[1]);
+    assertSame(undefined, s5[2]);
+  }
+}());
+
+
+(function TestArrayConcat() {
+  class Stack extends Array { }
+  let s1 = new Stack(1,2,3);
+
+  assertArrayEquals([1,2,3,4,5,6], s1.concat([4,5,6]));
+  assertArrayEquals([4,5,6,1,2,3], [4,5,6].concat(s1));
+}());
+
+
+(function TestJSONStringify() {
+  class Stack extends Array { }
+
+  let s1 = new Stack(1,2,3);
+  assertSame("[1,2,3]", JSON.stringify(s1));
+}());
diff --git a/test/mjsunit/es6/classes.js b/test/mjsunit/es6/classes.js
new file mode 100644 (file)
index 0000000..a1420be
--- /dev/null
@@ -0,0 +1,948 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-sloppy
+
+(function TestBasics() {
+  var C = class C {}
+  assertEquals(typeof C, 'function');
+  assertEquals(C.__proto__, Function.prototype);
+  assertEquals(Object.prototype, Object.getPrototypeOf(C.prototype));
+  assertEquals(Function.prototype, Object.getPrototypeOf(C));
+  assertEquals('C', C.name);
+
+  class D {}
+  assertEquals(typeof D, 'function');
+  assertEquals(D.__proto__, Function.prototype);
+  assertEquals(Object.prototype, Object.getPrototypeOf(D.prototype));
+  assertEquals(Function.prototype, Object.getPrototypeOf(D));
+  assertEquals('D', D.name);
+
+  class D2 { constructor() {} }
+  assertEquals('D2', D2.name);
+
+  // TODO(arv): The logic for the name of anonymous functions in ES6 requires
+  // the below to be 'E';
+  var E = class {}
+  assertEquals('', E.name);  // Should be 'E'.
+
+  var F = class { constructor() {} };
+  assertEquals('', F.name);  // Should be 'F'.
+})();
+
+
+(function TestBasicsExtends() {
+  class C extends null {}
+  assertEquals(typeof C, 'function');
+  assertEquals(C.__proto__, Function.prototype);
+  assertEquals(null, Object.getPrototypeOf(C.prototype));
+
+  class D extends C {}
+  assertEquals(typeof D, 'function');
+  assertEquals(D.__proto__, C);
+  assertEquals(C.prototype, Object.getPrototypeOf(D.prototype));
+})();
+
+
+(function TestSideEffectInExtends() {
+  var calls = 0;
+  class C {}
+  class D extends (calls++, C) {}
+  assertEquals(1, calls);
+  assertEquals(typeof D, 'function');
+  assertEquals(D.__proto__, C);
+  assertEquals(C.prototype, Object.getPrototypeOf(D.prototype));
+})();
+
+
+(function TestInvalidExtends() {
+  assertThrows(function() {
+    class C extends 42 {}
+  }, TypeError);
+
+  assertThrows(function() {
+    // Function but its .prototype is not null or a function.
+    class C extends Math.abs {}
+  }, TypeError);
+
+  assertThrows(function() {
+    Math.abs.prototype = 42;
+    class C extends Math.abs {}
+  }, TypeError);
+  delete Math.abs.prototype;
+
+  assertThrows(function() {
+    function* g() {}
+    class C extends g {}
+  }, TypeError);
+})();
+
+
+(function TestConstructorProperty() {
+  class C {}
+  assertEquals(C, C.prototype.constructor);
+  var descr = Object.getOwnPropertyDescriptor(C.prototype, 'constructor');
+  assertTrue(descr.configurable);
+  assertFalse(descr.enumerable);
+  assertTrue(descr.writable);
+})();
+
+
+(function TestPrototypeProperty() {
+  class C {}
+  var descr = Object.getOwnPropertyDescriptor(C, 'prototype');
+  assertFalse(descr.configurable);
+  assertFalse(descr.enumerable);
+  assertFalse(descr.writable);
+})();
+
+
+(function TestConstructor() {
+  var count = 0;
+  class C {
+    constructor() {
+      assertEquals(Object.getPrototypeOf(this), C.prototype);
+      count++;
+    }
+  }
+  assertEquals(C, C.prototype.constructor);
+  var descr = Object.getOwnPropertyDescriptor(C.prototype, 'constructor');
+  assertTrue(descr.configurable);
+  assertFalse(descr.enumerable);
+  assertTrue(descr.writable);
+
+  var c = new C();
+  assertEquals(1, count);
+  assertEquals(Object.getPrototypeOf(c), C.prototype);
+})();
+
+
+(function TestImplicitConstructor() {
+  class C {}
+  var c = new C();
+  assertEquals(Object.getPrototypeOf(c), C.prototype);
+})();
+
+
+(function TestConstructorStrict() {
+  class C {
+    constructor() {
+      assertThrows(function() {
+        nonExistingBinding = 42;
+      }, ReferenceError);
+    }
+  }
+  new C();
+})();
+
+
+(function TestSuperInConstructor() {
+  var calls = 0;
+  class B {}
+  B.prototype.x = 42;
+
+  class C extends B {
+    constructor() {
+      super();
+      calls++;
+      assertEquals(42, super.x);
+    }
+  }
+
+  new C;
+  assertEquals(1, calls);
+})();
+
+
+(function TestStrictMode() {
+  class C {}
+
+  with ({a: 1}) {
+    assertEquals(1, a);
+  }
+
+  assertThrows('class C extends function B() { with ({}); return B; }() {}',
+               SyntaxError);
+
+  var D = class extends function() {
+    arguments.caller;
+  } {};
+  assertThrows(function() {
+    Object.getPrototypeOf(D).arguments;
+  }, TypeError);
+  assertThrows(function() {
+    new D;
+  }, TypeError);
+})();
+
+
+(function TestToString() {
+  class C {}
+  assertEquals('class C {}', C.toString());
+
+  class D { constructor() { 42; } }
+  assertEquals('class D { constructor() { 42; } }', D.toString());
+
+  class E { x() { 42; } }
+  assertEquals('class E { x() { 42; } }', E.toString());
+})();
+
+
+function assertMethodDescriptor(object, name) {
+  var descr = Object.getOwnPropertyDescriptor(object, name);
+  assertTrue(descr.configurable);
+  assertFalse(descr.enumerable);
+  assertTrue(descr.writable);
+  assertEquals('function', typeof descr.value);
+  assertFalse('prototype' in descr.value);
+}
+
+
+function assertGetterDescriptor(object, name) {
+  var descr = Object.getOwnPropertyDescriptor(object, name);
+  assertTrue(descr.configurable);
+  assertFalse(descr.enumerable);
+  assertEquals('function', typeof descr.get);
+  assertFalse('prototype' in descr.get);
+  assertEquals(undefined, descr.set);
+}
+
+
+function assertSetterDescriptor(object, name) {
+  var descr = Object.getOwnPropertyDescriptor(object, name);
+  assertTrue(descr.configurable);
+  assertFalse(descr.enumerable);
+  assertEquals(undefined, descr.get);
+  assertEquals('function', typeof descr.set);
+  assertFalse('prototype' in descr.set);
+}
+
+
+function assertAccessorDescriptor(object, name) {
+  var descr = Object.getOwnPropertyDescriptor(object, name);
+  assertTrue(descr.configurable);
+  assertFalse(descr.enumerable);
+  assertEquals('function', typeof descr.get);
+  assertEquals('function', typeof descr.set);
+  assertFalse('prototype' in descr.get);
+  assertFalse('prototype' in descr.set);
+}
+
+
+(function TestMethods() {
+  class C {
+    method() { return 1; }
+    static staticMethod() { return 2; }
+    method2() { return 3; }
+    static staticMethod2() { return 4; }
+  }
+
+  assertMethodDescriptor(C.prototype, 'method');
+  assertMethodDescriptor(C.prototype, 'method2');
+  assertMethodDescriptor(C, 'staticMethod');
+  assertMethodDescriptor(C, 'staticMethod2');
+
+  assertEquals(1, new C().method());
+  assertEquals(2, C.staticMethod());
+  assertEquals(3, new C().method2());
+  assertEquals(4, C.staticMethod2());
+})();
+
+
+(function TestGetters() {
+  class C {
+    get x() { return 1; }
+    static get staticX() { return 2; }
+    get y() { return 3; }
+    static get staticY() { return 4; }
+  }
+
+  assertGetterDescriptor(C.prototype, 'x');
+  assertGetterDescriptor(C.prototype, 'y');
+  assertGetterDescriptor(C, 'staticX');
+  assertGetterDescriptor(C, 'staticY');
+
+  assertEquals(1, new C().x);
+  assertEquals(2, C.staticX);
+  assertEquals(3, new C().y);
+  assertEquals(4, C.staticY);
+})();
+
+
+
+(function TestSetters() {
+  var x, staticX, y, staticY;
+  class C {
+    set x(v) { x = v; }
+    static set staticX(v) { staticX = v; }
+    set y(v) { y = v; }
+    static set staticY(v) { staticY = v; }
+  }
+
+  assertSetterDescriptor(C.prototype, 'x');
+  assertSetterDescriptor(C.prototype, 'y');
+  assertSetterDescriptor(C, 'staticX');
+  assertSetterDescriptor(C, 'staticY');
+
+  assertEquals(1, new C().x = 1);
+  assertEquals(1, x);
+  assertEquals(2, C.staticX = 2);
+  assertEquals(2, staticX);
+  assertEquals(3, new C().y = 3);
+  assertEquals(3, y);
+  assertEquals(4, C.staticY = 4);
+  assertEquals(4, staticY);
+})();
+
+
+(function TestSideEffectsInPropertyDefine() {
+  function B() {}
+  B.prototype = {
+    constructor: B,
+    set m(v) {
+      throw Error();
+    }
+  };
+
+  class C extends B {
+    m() { return 1; }
+  }
+
+  assertEquals(1, new C().m());
+})();
+
+
+(function TestAccessors() {
+  class C {
+    constructor(x) {
+      this._x = x;
+    }
+
+    get x() { return this._x; }
+    set x(v) { this._x = v; }
+
+    static get staticX() { return this._x; }
+    static set staticX(v) { this._x = v; }
+  }
+
+  assertAccessorDescriptor(C.prototype, 'x');
+  assertAccessorDescriptor(C, 'staticX');
+
+  var c = new C(1);
+  c._x = 1;
+  assertEquals(1, c.x);
+  c.x = 2;
+  assertEquals(2, c._x);
+
+  C._x = 3;
+  assertEquals(3, C.staticX);
+  C._x = 4;
+  assertEquals(4, C.staticX );
+})();
+
+
+(function TestProto() {
+  class C {
+    __proto__() { return 1; }
+  }
+  assertMethodDescriptor(C.prototype, '__proto__');
+  assertEquals(1, new C().__proto__());
+})();
+
+
+(function TestProtoStatic() {
+  class C {
+    static __proto__() { return 1; }
+  }
+  assertMethodDescriptor(C, '__proto__');
+  assertEquals(1, C.__proto__());
+})();
+
+
+(function TestProtoAccessor() {
+  class C {
+    get __proto__() { return this._p; }
+    set __proto__(v) { this._p = v; }
+  }
+  assertAccessorDescriptor(C.prototype, '__proto__');
+  var c = new C();
+  c._p = 1;
+  assertEquals(1, c.__proto__);
+  c.__proto__ = 2;
+  assertEquals(2, c.__proto__);
+})();
+
+
+(function TestStaticProtoAccessor() {
+  class C {
+    static get __proto__() { return this._p; }
+    static set __proto__(v) { this._p = v; }
+  }
+  assertAccessorDescriptor(C, '__proto__');
+  C._p = 1;
+  assertEquals(1, C.__proto__);
+  C.__proto__ = 2;
+  assertEquals(2, C.__proto__);
+})();
+
+
+(function TestSettersOnProto() {
+  function Base() {}
+  Base.prototype = {
+    set constructor(_) {
+      assertUnreachable();
+    },
+    set m(_) {
+      assertUnreachable();
+    }
+  };
+  Object.defineProperty(Base, 'staticM', {
+    set: function() {
+      assertUnreachable();
+    }
+  });
+
+  class C extends Base {
+    m() {
+      return 1;
+    }
+    static staticM() {
+      return 2;
+    }
+  }
+
+  assertEquals(1, new C().m());
+  assertEquals(2, C.staticM());
+})();
+
+
+(function TestConstructableButNoPrototype() {
+  var Base = function() {}.bind();
+  assertThrows(function() {
+    class C extends Base {}
+  }, TypeError);
+})();
+
+
+(function TestPrototypeGetter() {
+  var calls = 0;
+  var Base = function() {}.bind();
+  Object.defineProperty(Base, 'prototype', {
+    get: function() {
+      calls++;
+      return null;
+    },
+    configurable: true
+  });
+  class C extends Base {}
+  assertEquals(1, calls);
+
+  calls = 0;
+  Object.defineProperty(Base, 'prototype', {
+    get: function() {
+      calls++;
+      return 42;
+    },
+    configurable: true
+  });
+  assertThrows(function() {
+    class C extends Base {}
+  }, TypeError);
+  assertEquals(1, calls);
+})();
+
+
+(function TestPrototypeSetter() {
+  var Base = function() {}.bind();
+  Object.defineProperty(Base, 'prototype', {
+    set: function() {
+      assertUnreachable();
+    }
+  });
+  assertThrows(function() {
+    class C extends Base {}
+  }, TypeError);
+})();
+
+
+(function TestSuperInMethods() {
+  class B {
+    method() {
+      return 1;
+    }
+    get x() {
+      return 2;
+    }
+  }
+  class C extends B {
+    method() {
+      assertEquals(2, super.x);
+      return super.method();
+    }
+  }
+  assertEquals(1, new C().method());
+})();
+
+
+(function TestSuperInGetter() {
+  class B {
+    method() {
+      return 1;
+    }
+    get x() {
+      return 2;
+    }
+  }
+  class C extends B {
+    get y() {
+      assertEquals(2, super.x);
+      return super.method();
+    }
+  }
+  assertEquals(1, new C().y);
+})();
+
+
+(function TestSuperInSetter() {
+  class B {
+    method() {
+      return 1;
+    }
+    get x() {
+      return 2;
+    }
+  }
+  class C extends B {
+    set y(v) {
+      assertEquals(3, v);
+      assertEquals(2, super.x);
+      assertEquals(1, super.method());
+    }
+  }
+  assertEquals(3, new C().y = 3);
+})();
+
+
+(function TestSuperInStaticMethods() {
+  class B {
+    static method() {
+      return 1;
+    }
+    static get x() {
+      return 2;
+    }
+  }
+  class C extends B {
+    static method() {
+      assertEquals(2, super.x);
+      return super.method();
+    }
+  }
+  assertEquals(1, C.method());
+})();
+
+
+(function TestSuperInStaticGetter() {
+  class B {
+    static method() {
+      return 1;
+    }
+    static get x() {
+      return 2;
+    }
+  }
+  class C extends B {
+    static get x() {
+      assertEquals(2, super.x);
+      return super.method();
+    }
+  }
+  assertEquals(1, C.x);
+})();
+
+
+(function TestSuperInStaticSetter() {
+  class B {
+    static method() {
+      return 1;
+    }
+    static get x() {
+      return 2;
+    }
+  }
+  class C extends B {
+    static set x(v) {
+      assertEquals(3, v);
+      assertEquals(2, super.x);
+      assertEquals(1, super.method());
+    }
+  }
+  assertEquals(3, C.x = 3);
+})();
+
+
+(function TestNumericPropertyNames() {
+  class B {
+    1() { return 1; }
+    get 2() { return 2; }
+    set 3(_) {}
+
+    static 4() { return 4; }
+    static get 5() { return 5; }
+    static set 6(_) {}
+  }
+
+  assertMethodDescriptor(B.prototype, '1');
+  assertGetterDescriptor(B.prototype, '2');
+  assertSetterDescriptor(B.prototype, '3');
+
+  assertMethodDescriptor(B, '4');
+  assertGetterDescriptor(B, '5');
+  assertSetterDescriptor(B, '6');
+
+  class C extends B {
+    1() { return super[1](); }
+    get 2() { return super[2]; }
+
+    static 4() { return super[4](); }
+    static get 5() { return super[5]; }
+  }
+
+  assertEquals(1, new C()[1]());
+  assertEquals(2, new C()[2]);
+  assertEquals(4, C[4]());
+  assertEquals(5, C[5]);
+})();
+
+
+(function TestDefaultConstructorNoCrash() {
+  // Regression test for https://code.google.com/p/v8/issues/detail?id=3661
+  class C {}
+  assertThrows(function () {C();}, TypeError);
+  assertThrows(function () {C(1);}, TypeError);
+  assertTrue(new C() instanceof C);
+  assertTrue(new C(1) instanceof C);
+})();
+
+
+(function TestDefaultConstructor() {
+  var calls = 0;
+  class Base {
+    constructor() {
+      calls++;
+    }
+  }
+  class Derived extends Base {}
+  var object = new Derived;
+  assertEquals(1, calls);
+
+  calls = 0;
+  assertThrows(function() { Derived(); }, TypeError);
+  assertEquals(0, calls);
+})();
+
+
+(function TestDefaultConstructorArguments() {
+  var args, self;
+  class Base {
+    constructor() {
+      self = this;
+      args = arguments;
+    }
+  }
+  class Derived extends Base {}
+
+  new Derived;
+  assertEquals(0, args.length);
+
+  new Derived(0, 1, 2);
+  assertEquals(3, args.length);
+  assertTrue(self instanceof Derived);
+
+  var arr = new Array(100);
+  var obj = {};
+  assertThrows(function() {Derived.apply(obj, arr);}, TypeError);
+})();
+
+
+(function TestDefaultConstructorArguments2() {
+  var args;
+  class Base {
+    constructor(x, y) {
+      args = arguments;
+    }
+  }
+  class Derived extends Base {}
+
+  new Derived;
+  assertEquals(0, args.length);
+
+  new Derived(1);
+  assertEquals(1, args.length);
+  assertEquals(1, args[0]);
+
+  new Derived(1, 2, 3);
+  assertEquals(3, args.length);
+  assertEquals(1, args[0]);
+  assertEquals(2, args[1]);
+  assertEquals(3, args[2]);
+})();
+
+
+(function TestNameBindingConst() {
+  assertThrows('class C { constructor() { C = 42; } }; new C();', TypeError);
+  assertThrows('new (class C { constructor() { C = 42; } })', TypeError);
+  assertThrows('class C { m() { C = 42; } }; new C().m()', TypeError);
+  assertThrows('new (class C { m() { C = 42; } }).m()', TypeError);
+  assertThrows('class C { get x() { C = 42; } }; new C().x', TypeError);
+  assertThrows('(new (class C { get x() { C = 42; } })).x', TypeError);
+  assertThrows('class C { set x(_) { C = 42; } }; new C().x = 15;', TypeError);
+  assertThrows('(new (class C { set x(_) { C = 42; } })).x = 15;', TypeError);
+})();
+
+
+(function TestNameBinding() {
+  var C2;
+  class C {
+    constructor() {
+      C2 = C;
+    }
+    m() {
+      C2 = C;
+    }
+    get x() {
+      C2 = C;
+    }
+    set x(_) {
+      C2 = C;
+    }
+  }
+  new C();
+  assertEquals(C, C2);
+
+  C2 = undefined;
+  new C().m();
+  assertEquals(C, C2);
+
+  C2 = undefined;
+  new C().x;
+  assertEquals(C, C2);
+
+  C2 = undefined;
+  new C().x = 1;
+  assertEquals(C, C2);
+})();
+
+
+(function TestNameBindingExpression() {
+  var C3;
+  var C = class C2 {
+    constructor() {
+      assertEquals(C2, C);
+      C3 = C2;
+    }
+    m() {
+      assertEquals(C2, C);
+      C3 = C2;
+    }
+    get x() {
+      assertEquals(C2, C);
+      C3 = C2;
+    }
+    set x(_) {
+      assertEquals(C2, C);
+      C3 = C2;
+    }
+  }
+  new C();
+  assertEquals(C, C3);
+
+  C3 = undefined;
+  new C().m();
+  assertEquals(C, C3);
+
+  C3 = undefined;
+  new C().x;
+  assertEquals(C, C3);
+
+  C3 = undefined;
+  new C().x = 1;
+  assertEquals(C, C3);
+})();
+
+
+(function TestNameBindingInExtendsExpression() {
+  assertThrows(function() {
+    class x extends x {}
+  }, ReferenceError);
+
+  assertThrows(function() {
+    (class x extends x {});
+  }, ReferenceError);
+
+  assertThrows(function() {
+    var x = (class x extends x {});
+  }, ReferenceError);
+})();
+
+
+(function TestThisAccessRestriction() {
+  class Base {}
+  (function() {
+    class C extends Base {
+      constructor() {
+        var y;
+        super();
+      }
+    }; new C();
+  }());
+  assertThrows(function() {
+    class C extends Base {
+      constructor() {
+        super(this.x);
+      }
+    }; new C();
+  }, ReferenceError);
+  assertThrows(function() {
+    class C extends Base {
+      constructor() {
+        super(this);
+      }
+    }; new C();
+  }, ReferenceError);
+  assertThrows(function() {
+    class C extends Base {
+      constructor() {
+        super.method();
+        super(this);
+      }
+    }; new C();
+  }, ReferenceError);
+  assertThrows(function() {
+    class C extends Base {
+      constructor() {
+        super(super.method());
+      }
+    }; new C();
+  }, ReferenceError);
+  assertThrows(function() {
+    class C extends Base {
+      constructor() {
+        super(super());
+      }
+    }; new C();
+  }, ReferenceError);
+  assertThrows(function() {
+    class C extends Base {
+      constructor() {
+        super(1, 2, Object.getPrototypeOf(this));
+      }
+    }; new C();
+  }, ReferenceError);
+  (function() {
+    class C extends Base {
+      constructor() {
+        { super(1, 2); }
+      }
+    }; new C();
+  }());
+  (function() {
+    class C extends Base {
+      constructor() {
+        if (1) super();
+      }
+    }; new C();
+  }());
+
+  class C1 extends Object {
+    constructor() {
+      'use strict';
+      super();
+    }
+  };
+  new C1();
+
+  class C2 extends Object {
+    constructor() {
+      ; 'use strict';;;;;
+      super();
+    }
+  };
+  new C2();
+
+  class C3 extends Object {
+    constructor() {
+      ; 'use strict';;;;;
+      // This is a comment.
+      super();
+    }
+  };
+  new C3();
+}());
+
+
+function testClassRestrictedProperties(C) {
+  assertEquals(false, C.hasOwnProperty("arguments"));
+  assertThrows(function() { return C.arguments; }, TypeError);
+  assertThrows(function() { C.arguments = {}; }, TypeError);
+
+  assertEquals(false, C.hasOwnProperty("caller"));
+  assertThrows(function() { return C.caller; }, TypeError);
+  assertThrows(function() { C.caller = {}; }, TypeError);
+
+  assertEquals(false, (new C).method.hasOwnProperty("arguments"));
+  assertThrows(function() { return new C().method.arguments; }, TypeError);
+  assertThrows(function() { new C().method.arguments = {}; }, TypeError);
+
+  assertEquals(false, (new C).method.hasOwnProperty("caller"));
+  assertThrows(function() { return new C().method.caller; }, TypeError);
+  assertThrows(function() { new C().method.caller = {}; }, TypeError);
+}
+
+
+(function testRestrictedPropertiesStrict() {
+  "use strict";
+  class ClassWithDefaultConstructor {
+    method() {}
+  }
+  class Class {
+    constructor() {}
+    method() {}
+  }
+  class DerivedClassWithDefaultConstructor extends Class {}
+  class DerivedClass extends Class { constructor() { super(); } }
+
+  testClassRestrictedProperties(ClassWithDefaultConstructor);
+  testClassRestrictedProperties(Class);
+  testClassRestrictedProperties(DerivedClassWithDefaultConstructor);
+  testClassRestrictedProperties(DerivedClass);
+  testClassRestrictedProperties(class { method() {} });
+  testClassRestrictedProperties(class { constructor() {} method() {} });
+  testClassRestrictedProperties(class extends Class { });
+  testClassRestrictedProperties(
+      class extends Class { constructor() { super(); } });
+})();
+
+
+(function testRestrictedPropertiesSloppy() {
+  class ClassWithDefaultConstructor {
+    method() {}
+  }
+  class Class {
+    constructor() {}
+    method() {}
+  }
+  class DerivedClassWithDefaultConstructor extends Class {}
+  class DerivedClass extends Class { constructor() { super(); } }
+
+  testClassRestrictedProperties(ClassWithDefaultConstructor);
+  testClassRestrictedProperties(Class);
+  testClassRestrictedProperties(DerivedClassWithDefaultConstructor);
+  testClassRestrictedProperties(DerivedClass);
+  testClassRestrictedProperties(class { method() {} });
+  testClassRestrictedProperties(class { constructor() {} method() {} });
+  testClassRestrictedProperties(class extends Class { });
+  testClassRestrictedProperties(
+      class extends Class { constructor() { super(); } });
+})();
diff --git a/test/mjsunit/es6/debug-step-into-class-extends.js b/test/mjsunit/es6/debug-step-into-class-extends.js
new file mode 100644 (file)
index 0000000..c368414
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-debug-as debug
+
+'use strict';
+
+var Debug = debug.Debug
+
+var done = false;
+var stepCount = 0;
+
+function listener(event, execState, eventData, data) {
+  if (event == Debug.DebugEvent.Break) {
+    if (!done) {
+      execState.prepareStep(Debug.StepAction.StepInto);
+      var s = execState.frame().sourceLineText();
+      assertTrue(s.indexOf('// ' + stepCount + '.') !== -1);
+      stepCount++;
+    }
+  }
+};
+
+Debug.setListener(listener);
+
+function GetBase() {
+  var x = 1;   // 1.
+  var y = 2;   // 2.
+  done = true; // 3.
+  return null;
+}
+
+function f() {
+  class Derived extends GetBase() {} // 0.
+}
+
+var bp = Debug.setBreakPoint(f, 0);
+f();
+assertEquals(4, stepCount);
+
+Debug.setListener(null);
diff --git a/test/mjsunit/es6/debug-step-into-constructor.js b/test/mjsunit/es6/debug-step-into-constructor.js
new file mode 100644 (file)
index 0000000..dfe98a9
--- /dev/null
@@ -0,0 +1,113 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --expose-debug-as debug
+
+'use strict';
+
+var Debug = debug.Debug
+var done, stepCount;
+
+function listener(event, execState, eventData, data) {
+  if (event == Debug.DebugEvent.Break) {
+    if (!done) {
+      execState.prepareStep(Debug.StepAction.StepInto);
+      var s = execState.frame().sourceLineText();
+      assertTrue(s.indexOf('// ' + stepCount + '.') !== -1);
+      stepCount++;
+    }
+  }
+};
+
+Debug.setListener(listener);
+
+
+class Base {
+  constructor() {
+    var x = 1;   // 1.
+    var y = 2;   // 2.
+    done = true; // 3.
+  }
+}
+
+class Derived extends Base {}
+
+
+(function TestBreakPointInConstructor() {
+  done = false;
+  stepCount = 1;
+  var bp = Debug.setBreakPoint(Base, 0);
+
+  new Base();
+  assertEquals(4, stepCount);
+
+  Debug.clearBreakPoint(bp);
+})();
+
+
+(function TestDefaultConstructor() {
+  done = false;
+  stepCount = 1;
+
+  var bp = Debug.setBreakPoint(Base, 0);
+  new Derived();
+  assertEquals(4, stepCount);
+
+  Debug.clearBreakPoint(bp);
+})();
+
+
+(function TestStepInto() {
+  done = false;
+  stepCount = 0;
+
+  function f() {
+    new Derived();  // 0.
+  }
+
+  var bp = Debug.setBreakPoint(f, 0);
+  f();
+  assertEquals(4, stepCount);
+
+  Debug.clearBreakPoint(bp);
+})();
+
+
+(function TestExtraIndirection() {
+  done = false;
+  stepCount = 0;
+
+  class Derived2 extends Derived {}
+
+  function f() {
+    new Derived2();  // 0.
+  }
+
+  var bp = Debug.setBreakPoint(f, 0);
+  f();
+  assertEquals(4, stepCount);
+
+  Debug.clearBreakPoint(bp);
+})();
+
+
+(function TestBoundClass() {
+  done = false;
+  stepCount = 0;
+
+  var bound = Derived.bind(null);
+
+  function f() {
+    new bound();  // 0.
+  }
+
+  var bp = Debug.setBreakPoint(f, 0);
+  f();
+  assertEquals(4, stepCount);
+
+  Debug.clearBreakPoint(bp);
+})();
+
+
+Debug.setListener(null);
diff --git a/test/mjsunit/es6/regress/regress-3750.js b/test/mjsunit/es6/regress/regress-3750.js
new file mode 100644 (file)
index 0000000..a425def
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+class Example { }
+Object.observe(Example.prototype, function(){});
diff --git a/test/mjsunit/es6/regress/regress-455141.js b/test/mjsunit/es6/regress/regress-455141.js
new file mode 100644 (file)
index 0000000..676adeb
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Flags: --no-lazy
+"use strict";
+class Base {
+}
+class Subclass extends Base {
+  constructor() {
+      this.prp1 = 3;
+  }
+}
+function __f_1(){
+}
diff --git a/test/mjsunit/es6/toMethod.js b/test/mjsunit/es6/toMethod.js
new file mode 100644 (file)
index 0000000..c18251b
--- /dev/null
@@ -0,0 +1,106 @@
+// Copyright 2014 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Flags: --allow-natives-syntax
+
+
+(function TestSingleClass() {
+  function f(x) {
+    var a = [0, 1, 2]
+    return a[x];
+  }
+
+  function ClassD() { }
+
+  assertEquals(1, f(1));
+  var g = %ToMethod(f, ClassD.prototype);
+  assertEquals(1, g(1));
+  assertEquals(undefined, f[%HomeObjectSymbol()]);
+  assertEquals(ClassD.prototype, g[%HomeObjectSymbol()]);
+}());
+
+
+(function TestClassHierarchy() {
+  function f(x) {
+    return function g(y)  { x++; return x + y; };
+  }
+
+  function Base() {}
+  function Derived() { }
+  Derived.prototype = Object.create(Base.prototype);
+
+  var q = f(0);
+  assertEquals(2, q(1));
+  assertEquals(3, q(1));
+  var g = %ToMethod(q, Derived.prototype);
+  assertFalse(g === q);
+  assertEquals(4, g(1));
+  assertEquals(5, q(1));
+}());
+
+
+(function TestPrototypeChain() {
+  var o = {};
+  var o1 = {};
+  function f() { }
+
+  function g() { }
+
+  var fMeth = %ToMethod(f, o);
+  assertEquals(o, fMeth[%HomeObjectSymbol()]);
+  g.__proto__ = fMeth;
+  assertEquals(undefined, g[%HomeObjectSymbol()]);
+  var gMeth = %ToMethod(g, o1);
+  assertEquals(fMeth, gMeth.__proto__);
+  assertEquals(o, fMeth[%HomeObjectSymbol()]);
+  assertEquals(o1, gMeth[%HomeObjectSymbol()]);
+}());
+
+
+(function TestBoundFunction() {
+  var o = {};
+  var p = {};
+
+
+  function f(x, y, z, w) {
+    assertEquals(o, this);
+    assertEquals(1, x);
+    assertEquals(2, y);
+    assertEquals(3, z);
+    assertEquals(4, w);
+    return x+y+z+w;
+  }
+
+  var fBound = f.bind(o, 1, 2, 3);
+  var fMeth = %ToMethod(fBound, p);
+  assertEquals(10, fMeth(4));
+  assertEquals(10, fMeth.call(p, 4));
+  var fBound1 = fBound.bind(o, 4);
+  assertEquals(10, fBound1());
+  var fMethBound = fMeth.bind(o, 4);
+  assertEquals(10, fMethBound());
+}());
+
+(function TestOptimized() {
+  function f(o) {
+    return o.x;
+  }
+  var o = {x : 15};
+  assertEquals(15, f(o));
+  assertEquals(15, f(o));
+  %OptimizeFunctionOnNextCall(f);
+  assertEquals(15, f(o));
+  var g = %ToMethod(f, {});
+  var o1 = {y : 1024, x : "abc"};
+  assertEquals("abc", f(o1));
+  assertEquals("abc", g(o1));
+} ());
+
+(function TestExtensibility() {
+  function f() {}
+  Object.preventExtensions(f);
+  assertFalse(Object.isExtensible(f));
+  var m = %ToMethod(f, {});
+  assertTrue(Object.isExtensible(m));
+}());
index b623a5cc114303a50a39f25e39bb40a6053e1459..89a884143dd3a898ea7bad72de54bc7df3c2f375 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-arrays --harmony-classes
+// Flags: --harmony-arrays
 
 (function testArrayConcatArity() {
   "use strict";
index e8511051ae33cfac85f9068e6ab5aa8ab435984c..b2498d78dcdb3acad4086b94935cb42ab357a66d 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-arrow-functions --harmony-classes
+// Flags: --harmony-arrow-functions
 
 
 (function testInFunctionDeclaration() {
index 5a5db67d4884cd7ef95672fda0336165ca4eca5c..a68b53c18fc3dde7d540c5199aff6bfad4530137 100644 (file)
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // Flags: --harmony-computed-property-names --harmony-sloppy
-// Flags: --harmony-classes --allow-natives-syntax
+// Flags: --allow-natives-syntax
 
 
 function ID(x) {
diff --git a/test/mjsunit/harmony/class-property-name-eval-arguments.js b/test/mjsunit/harmony/class-property-name-eval-arguments.js
deleted file mode 100644 (file)
index cc53030..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2015 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --harmony-classes --harmony-sloppy
-
-
-(function Method() {
-  class C {
-    eval() {
-      return 1;
-    }
-    arguments() {
-      return 2;
-    }
-    static eval() {
-      return 3;
-    }
-    static arguments() {
-      return 4;
-    }
-  };
-
-  assertEquals(1, new C().eval());
-  assertEquals(2, new C().arguments());
-  assertEquals(3, C.eval());
-  assertEquals(4, C.arguments());
-})();
-
-
-(function Getters() {
-  class C {
-    get eval() {
-      return 1;
-    }
-    get arguments() {
-      return 2;
-    }
-    static get eval() {
-      return 3;
-    }
-    static get arguments() {
-      return 4;
-    }
-  };
-
-  assertEquals(1, new C().eval);
-  assertEquals(2, new C().arguments);
-  assertEquals(3, C.eval);
-  assertEquals(4, C.arguments);
-})();
-
-
-(function Setters() {
-  var x = 0;
-  class C {
-    set eval(v) {
-      x = v;
-    }
-    set arguments(v) {
-      x = v;
-    }
-    static set eval(v) {
-      x = v;
-    }
-    static set arguments(v) {
-      x = v;
-    }
-  };
-
-  new C().eval = 1;
-  assertEquals(1, x);
-  new C().arguments = 2;
-  assertEquals(2, x);
-  C.eval = 3;
-  assertEquals(3, x);
-  C.arguments = 4;
-  assertEquals(4, x);
-})();
diff --git a/test/mjsunit/harmony/classes-experimental.js b/test/mjsunit/harmony/classes-experimental.js
deleted file mode 100644 (file)
index e7ebbda..0000000
+++ /dev/null
@@ -1,339 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Flags: --harmony-classes
-
-'use strict';
-(function TestArgumentsAccess() {
-  class Base {
-    constructor() {
-      assertEquals(2, arguments.length);
-      assertEquals(1, arguments[0]);
-      assertEquals(2, arguments[1]);
-    }
-  }
-
-  let b = new Base(1,2);
-
-  class Subclass extends Base {
-    constructor() {
-      assertEquals(2, arguments.length);
-      assertEquals(3, arguments[0]);
-      assertEquals(4, arguments[1]);
-      super(1,2);
-    }
-  }
-
-  let s = new Subclass(3,4);
-  assertEquals(0, Subclass.length);
-
-  class Subclass2 extends Base {
-    constructor(x,y) {
-      assertEquals(2, arguments.length);
-      assertEquals(3, arguments[0]);
-      assertEquals(4, arguments[1]);
-      super(1,2);
-    }
-  }
-
-  let s2 = new Subclass2(3,4);
-  assertEquals(2, Subclass2.length);
-}());
-
-(function TestThisAccessRestriction() {
-  class Base {
-    constructor(a, b) {
-      let o = new Object();
-      o.prp = a + b;
-      return o;
-    }
-  }
-
-  class Subclass extends Base {
-    constructor(a, b) {
-      var exn;
-      try {
-        this.prp1 = 3;
-      } catch (e) {
-        exn = e;
-      }
-      assertTrue(exn instanceof ReferenceError);
-      super(a, b);
-      assertSame(a + b, this.prp);
-      assertSame(undefined, this.prp1);
-      assertFalse(this.hasOwnProperty("prp1"));
-      return this;
-    }
-  }
-
-  let b = new Base(1, 2);
-  assertSame(3, b.prp);
-
-
-  let s = new Subclass(2, -1);
-  assertSame(1, s.prp);
-  assertSame(undefined, s.prp1);
-  assertFalse(s.hasOwnProperty("prp1"));
-
-  class Subclass2 extends Base {
-    constructor(x) {
-      super(1,2);
-
-      if (x < 0) return;
-
-      let called = false;
-      function tmp() { called = true; return 3; }
-      var exn = null;
-      try {
-        super(tmp(),4);
-      } catch (e) { exn = e; }
-      assertTrue(exn instanceof ReferenceError);
-      assertTrue(called);
-    }
-  }
-
-  var s2 = new Subclass2(1);
-  assertSame(3, s2.prp);
-
-  var s3 = new Subclass2(-1);
-  assertSame(3, s3.prp);
-
-  assertThrows(function() { Subclass.call(new Object(), 1, 2); }, TypeError);
-  assertThrows(function() { Base.call(new Object(), 1, 2); }, TypeError);
-
-  class BadSubclass extends Base {
-    constructor() {}
-  }
-
-  assertThrows(function() { new BadSubclass(); }, ReferenceError);
-}());
-
-(function TestThisCheckOrdering() {
-  let baseCalled = 0;
-  class Base {
-    constructor() { baseCalled++ }
-  }
-
-  let fCalled = 0;
-  function f() { fCalled++; return 3; }
-
-  class Subclass1 extends Base {
-    constructor() {
-      baseCalled = 0;
-      super();
-      assertEquals(1, baseCalled);
-      let obj = this;
-
-      let exn = null;
-      baseCalled = 0;
-      fCalled = 0;
-      try {
-        super(f());
-      } catch (e) { exn = e; }
-      assertTrue(exn instanceof ReferenceError);
-      assertEquals(1, fCalled);
-      assertEquals(1, baseCalled);
-      assertSame(obj, this);
-
-      exn = null;
-      baseCalled = 0;
-      fCalled = 0;
-      try {
-        super(super(), f());
-      } catch (e) { exn = e; }
-      assertTrue(exn instanceof ReferenceError);
-      assertEquals(0, fCalled);
-      assertEquals(1, baseCalled);
-      assertSame(obj, this);
-
-      exn = null;
-      baseCalled = 0;
-      fCalled = 0;
-      try {
-        super(f(), super());
-      } catch (e) { exn = e; }
-      assertTrue(exn instanceof ReferenceError);
-      assertEquals(1, fCalled);
-      assertEquals(1, baseCalled);
-      assertSame(obj, this);
-    }
-  }
-
-  new Subclass1();
-}());
-
-
-(function TestPrototypeWiring() {
-  class Base {
-    constructor(x) {
-      this.foobar = x;
-    }
-  }
-
-  class Subclass extends Base {
-    constructor(x) {
-      super(x);
-    }
-  }
-
-  let s = new Subclass(1);
-  assertSame(1, s.foobar);
-  assertSame(Subclass.prototype, s.__proto__);
-
-  let s1 = new Subclass(1, 2);
-  assertSame(1, s1.foobar);
-  assertTrue(s1.__proto__ === Subclass.prototype);
-
-  let s2 = new Subclass();
-  assertSame(undefined, s2.foobar);
-  assertSame(Subclass.prototype, s2.__proto__);
-  assertThrows(function() { Subclass(1); }, TypeError);
-  assertThrows(function() { Subclass(1,2,3,4); }, TypeError);
-
-  class Subclass2 extends Subclass {
-    constructor() {
-      super(5, 6, 7);
-    }
-  }
-
-  let ss2 = new Subclass2();
-  assertSame(5, ss2.foobar);
-  assertSame(Subclass2.prototype, ss2.__proto__);
-
-  class Subclass3 extends Base {
-    constructor(x,y) {
-      super(x + y);
-    }
-  }
-
-  let ss3 = new Subclass3(27,42-27);
-  assertSame(42, ss3.foobar);
-  assertSame(Subclass3.prototype, ss3.__proto__);
-}());
-
-(function TestSublclassingBuiltins() {
-  class ExtendedUint8Array extends Uint8Array {
-    constructor() {
-      super(10);
-      this[0] = 255;
-      this[1] = 0xFFA;
-    }
-  }
-
-  var eua = new ExtendedUint8Array();
-  assertEquals(10, eua.length);
-  assertEquals(10, eua.byteLength);
-  assertEquals(0xFF, eua[0]);
-  assertEquals(0xFA, eua[1]);
-  assertSame(ExtendedUint8Array.prototype, eua.__proto__);
-  assertEquals("[object Uint8Array]", Object.prototype.toString.call(eua));
-}());
-
-(function TestSubclassingNull() {
-  let N = null;
-
-  class Foo extends N {
-    constructor(x,y) {
-      assertSame(1, x);
-      assertSame(2, y);
-      return {};
-    }
-  }
-
-  new Foo(1,2);
-}());
-
-(function TestSubclassBinding() {
-  class Base {
-    constructor(x, y) {
-      this.x = x;
-      this.y = y;
-    }
-  }
-
-  let obj = {};
-  class Subclass extends Base {
-    constructor(x,y) {
-      super(x,y);
-      assertTrue(this !== obj);
-    }
-  }
-
-  let f = Subclass.bind(obj);
-  assertThrows(function () { f(1, 2); }, TypeError);
-  let s = new f(1, 2);
-  assertSame(1, s.x);
-  assertSame(2, s.y);
-  assertSame(Subclass.prototype, s.__proto__);
-
-  let s1 = new f(1);
-  assertSame(1, s1.x);
-  assertSame(undefined, s1.y);
-  assertSame(Subclass.prototype, s1.__proto__);
-
-  let g = Subclass.bind(obj, 1);
-  assertThrows(function () { g(8); }, TypeError);
-  let s2 = new g(8);
-  assertSame(1, s2.x);
-  assertSame(8, s2.y);
-  assertSame(Subclass.prototype, s.__proto__);
-}());
-
-
-(function TestDefaultConstructor() {
-  class Base1 { }
-  assertThrows(function() { Base1(); }, TypeError);
-
-  class Subclass1 extends Base1 { }
-
-  assertThrows(function() { Subclass1(); }, TypeError);
-
-  let s1 = new Subclass1();
-  assertSame(s1.__proto__, Subclass1.prototype);
-
-  class Base2 {
-    constructor(x, y) {
-      this.x = x;
-      this.y = y;
-    }
-  }
-
-  class Subclass2 extends Base2 {};
-
-  let s2 = new Subclass2(1, 2);
-
-  assertSame(s2.__proto__, Subclass2.prototype);
-  assertSame(1, s2.x);
-  assertSame(2, s2.y);
-
-  let f = Subclass2.bind({}, 3, 4);
-  let s2prime = new f();
-  assertSame(s2prime.__proto__, Subclass2.prototype);
-  assertSame(3, s2prime.x);
-  assertSame(4, s2prime.y);
-
-  let obj = {};
-  class Base3 {
-    constructor() {
-      return obj;
-    }
-  }
-
-  class Subclass3 extends Base3 {};
-
-  let s3 = new Subclass3();
-  assertSame(obj, s3);
-
-  class ExtendedUint8Array extends Uint8Array { }
-
-  var eua = new ExtendedUint8Array(10);
-  assertEquals(10, eua.length);
-  assertEquals(10, eua.byteLength);
-  eua[0] = 0xFF;
-  eua[1] = 0xFFA;
-  assertEquals(0xFF, eua[0]);
-  assertEquals(0xFA, eua[1]);
-  assertSame(ExtendedUint8Array.prototype, eua.__proto__);
-  assertEquals("[object Uint8Array]", Object.prototype.toString.call(eua));
-}());
diff --git a/test/mjsunit/harmony/classes-lazy-parsing.js b/test/mjsunit/harmony/classes-lazy-parsing.js
deleted file mode 100644 (file)
index ceac9aa..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --harmony-classes --min-preparse-length=0
-
-'use strict';
-
-class Base {
-  m() {
-    return 42;
-  }
-}
-
-class Derived extends Base {
-  m() {
-    return super.m();
-  }
-  evalM() {
-    return eval('super.m()');
-  }
-}
-
-assertEquals(42, new Derived().m());
-assertEquals(42, new Derived().evalM());
-
-
-class LazyDerived extends Base {
-  constructor() {
-    eval('super()');
-  }
-}
-assertInstanceof(new LazyDerived(), LazyDerived);
-assertInstanceof(new LazyDerived(), Base);
diff --git a/test/mjsunit/harmony/classes-maps.js b/test/mjsunit/harmony/classes-maps.js
deleted file mode 100644 (file)
index c82fc52..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Flags: --harmony-classes --allow-natives-syntax
-'use strict';
-
-(function TestMaps() {
-  class Base {}
-  class Derived extends Base {}
-
-  let d1 = new Derived();
-  let d2 = new Derived();
-
-  assertTrue(%HaveSameMap(d1, d2));
-}());
-
-
-(function TestProtoModificationArray() {
-  let called = 0;
-  function F() {
-    called++;
-    assertFalse(Array.isArray(this));
-  }
-  class Derived extends Array {}
-  assertSame(Derived.__proto__, Array);
-
-  let d1 = new Derived();
-  assertTrue(Array.isArray(d1));
-
-  Derived.__proto__ = F;
-  called = 0;
-  let d2 = new Derived();
-  assertSame(1, called);
-  assertFalse(Array.isArray(d2));
-
-  assertFalse(%HaveSameMap(d1, d2));
-}());
-
-
-(function TestProtoModification() {
-  let called = 0;
-  function F() {
-    called++;
-    let exn = null;
-    try {
-      this.byteLength;
-    } catch (e) {
-      exn = e;
-    }
-    assertTrue(exn instanceof TypeError);
-  }
-  class Derived extends Uint8Array {
-    constructor() { super(10); }
-  }
-  assertSame(Derived.__proto__, Uint8Array);
-
-  let d1 = new Derived();
-  assertSame(10, d1.byteLength);
-
-  Derived.__proto__ = F;
-  called = 0;
-  let d2 = new Derived();
-  assertSame(1, called);
-  assertThrows(function() { d2.byteLength; }, TypeError);
-
-  assertFalse(%HaveSameMap(d1, d2));
-}());
diff --git a/test/mjsunit/harmony/classes-subclass-arrays.js b/test/mjsunit/harmony/classes-subclass-arrays.js
deleted file mode 100644 (file)
index e0363c7..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright 2015 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Flags: --harmony-classes
-'use strict';
-
-(function TestDefaultConstructor() {
-  class Stack extends Array { }
-  {
-    let s1 = new Stack();
-    assertSame(Stack.prototype, s1.__proto__);
-    assertTrue(Array.isArray(s1));
-    assertSame(0, s1.length);
-    s1[0] = 'xyz';
-    assertSame(1, s1.length);
-    assertSame('xyz', s1[0]);
-    s1.push(42);
-    assertSame(2, s1.length);
-    assertSame('xyz', s1[0]);
-    assertSame(42, s1[1]);
-  }
-
-  {
-    let s2 = new Stack(10);
-    assertSame(Stack.prototype, s2.__proto__);
-    assertTrue(Array.isArray(s2));
-    assertSame(10, s2.length);
-    assertSame(undefined, s2[0]);
-  }
-
-  {
-    let a = [1,2,3];
-    let s3 = new Stack(a);
-    assertSame(Stack.prototype, s3.__proto__);
-    assertTrue(Array.isArray(s3));
-    assertSame(1, s3.length);
-    assertSame(a, s3[0]);
-  }
-
-  {
-    let s4 = new Stack(1, 2, 3);
-    assertSame(Stack.prototype, s4.__proto__);
-    assertTrue(Array.isArray(s4));
-    assertSame(3, s4.length);
-    assertSame(1, s4[0]);
-    assertSame(2, s4[1]);
-    assertSame(3, s4[2]);
-  }
-
-  {
-    let s5 = new Stack(undefined, undefined, undefined);
-    assertSame(Stack.prototype, s5.__proto__);
-    assertTrue(Array.isArray(s5));
-    assertSame(3, s5.length);
-    assertSame(undefined, s5[0]);
-    assertSame(undefined, s5[1]);
-    assertSame(undefined, s5[2]);
-  }
-}());
-
-
-(function TestEmptyArgsSuper() {
-  class Stack extends Array {
-    constructor() { super(); }
-  }
-  let s1 = new Stack();
-  assertSame(Stack.prototype, s1.__proto__);
-  assertTrue(Array.isArray(s1));
-  assertSame(0, s1.length);
-  s1[0] = 'xyz';
-  assertSame(1, s1.length);
-  assertSame('xyz', s1[0]);
-  s1.push(42);
-  assertSame(2, s1.length);
-  assertSame('xyz', s1[0]);
-  assertSame(42, s1[1]);
-}());
-
-
-(function TestOneArgSuper() {
-  class Stack extends Array {
-    constructor(x) {
-      super(x);
-    }
-  }
-
-  {
-    let s2 = new Stack(10, 'ignored arg');
-    assertSame(Stack.prototype, s2.__proto__);
-    assertTrue(Array.isArray(s2));
-    assertSame(10, s2.length);
-    assertSame(undefined, s2[0]);
-  }
-
-  {
-    let a = [1,2,3];
-    let s3 = new Stack(a, 'ignored arg');
-    assertSame(Stack.prototype, s3.__proto__);
-    assertTrue(Array.isArray(s3));
-    assertSame(1, s3.length);
-    assertSame(a, s3[0]);
-  }
-}());
-
-
-(function TestMultipleArgsSuper() {
-  class Stack extends Array {
-    constructor(x, y, z) {
-      super(x, y, z);
-    }
-  }
-  {
-    let s4 = new Stack(1, 2, 3, 4, 5);
-    assertSame(Stack.prototype, s4.__proto__);
-    assertTrue(Array.isArray(s4));
-    assertSame(3, s4.length);
-    assertSame(1, s4[0]);
-    assertSame(2, s4[1]);
-    assertSame(3, s4[2]);
-  }
-
-  {
-    let s5 = new Stack(undefined);
-    assertSame(Stack.prototype, s5.__proto__);
-    assertTrue(Array.isArray(s5));
-    assertTrue(s5.__proto__ == Stack.prototype);
-    assertSame(3, s5.length);
-    assertSame(undefined, s5[0]);
-    assertSame(undefined, s5[1]);
-    assertSame(undefined, s5[2]);
-  }
-}());
-
-
-(function TestArrayConcat() {
-  class Stack extends Array { }
-  let s1 = new Stack(1,2,3);
-
-  assertArrayEquals([1,2,3,4,5,6], s1.concat([4,5,6]));
-  assertArrayEquals([4,5,6,1,2,3], [4,5,6].concat(s1));
-}());
-
-
-(function TestJSONStringify() {
-  class Stack extends Array { }
-
-  let s1 = new Stack(1,2,3);
-  assertSame("[1,2,3]", JSON.stringify(s1));
-}());
diff --git a/test/mjsunit/harmony/classes.js b/test/mjsunit/harmony/classes.js
deleted file mode 100644 (file)
index 9c09041..0000000
+++ /dev/null
@@ -1,948 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --harmony-classes --harmony-sloppy
-
-(function TestBasics() {
-  var C = class C {}
-  assertEquals(typeof C, 'function');
-  assertEquals(C.__proto__, Function.prototype);
-  assertEquals(Object.prototype, Object.getPrototypeOf(C.prototype));
-  assertEquals(Function.prototype, Object.getPrototypeOf(C));
-  assertEquals('C', C.name);
-
-  class D {}
-  assertEquals(typeof D, 'function');
-  assertEquals(D.__proto__, Function.prototype);
-  assertEquals(Object.prototype, Object.getPrototypeOf(D.prototype));
-  assertEquals(Function.prototype, Object.getPrototypeOf(D));
-  assertEquals('D', D.name);
-
-  class D2 { constructor() {} }
-  assertEquals('D2', D2.name);
-
-  // TODO(arv): The logic for the name of anonymous functions in ES6 requires
-  // the below to be 'E';
-  var E = class {}
-  assertEquals('', E.name);  // Should be 'E'.
-
-  var F = class { constructor() {} };
-  assertEquals('', F.name);  // Should be 'F'.
-})();
-
-
-(function TestBasicsExtends() {
-  class C extends null {}
-  assertEquals(typeof C, 'function');
-  assertEquals(C.__proto__, Function.prototype);
-  assertEquals(null, Object.getPrototypeOf(C.prototype));
-
-  class D extends C {}
-  assertEquals(typeof D, 'function');
-  assertEquals(D.__proto__, C);
-  assertEquals(C.prototype, Object.getPrototypeOf(D.prototype));
-})();
-
-
-(function TestSideEffectInExtends() {
-  var calls = 0;
-  class C {}
-  class D extends (calls++, C) {}
-  assertEquals(1, calls);
-  assertEquals(typeof D, 'function');
-  assertEquals(D.__proto__, C);
-  assertEquals(C.prototype, Object.getPrototypeOf(D.prototype));
-})();
-
-
-(function TestInvalidExtends() {
-  assertThrows(function() {
-    class C extends 42 {}
-  }, TypeError);
-
-  assertThrows(function() {
-    // Function but its .prototype is not null or a function.
-    class C extends Math.abs {}
-  }, TypeError);
-
-  assertThrows(function() {
-    Math.abs.prototype = 42;
-    class C extends Math.abs {}
-  }, TypeError);
-  delete Math.abs.prototype;
-
-  assertThrows(function() {
-    function* g() {}
-    class C extends g {}
-  }, TypeError);
-})();
-
-
-(function TestConstructorProperty() {
-  class C {}
-  assertEquals(C, C.prototype.constructor);
-  var descr = Object.getOwnPropertyDescriptor(C.prototype, 'constructor');
-  assertTrue(descr.configurable);
-  assertFalse(descr.enumerable);
-  assertTrue(descr.writable);
-})();
-
-
-(function TestPrototypeProperty() {
-  class C {}
-  var descr = Object.getOwnPropertyDescriptor(C, 'prototype');
-  assertFalse(descr.configurable);
-  assertFalse(descr.enumerable);
-  assertFalse(descr.writable);
-})();
-
-
-(function TestConstructor() {
-  var count = 0;
-  class C {
-    constructor() {
-      assertEquals(Object.getPrototypeOf(this), C.prototype);
-      count++;
-    }
-  }
-  assertEquals(C, C.prototype.constructor);
-  var descr = Object.getOwnPropertyDescriptor(C.prototype, 'constructor');
-  assertTrue(descr.configurable);
-  assertFalse(descr.enumerable);
-  assertTrue(descr.writable);
-
-  var c = new C();
-  assertEquals(1, count);
-  assertEquals(Object.getPrototypeOf(c), C.prototype);
-})();
-
-
-(function TestImplicitConstructor() {
-  class C {}
-  var c = new C();
-  assertEquals(Object.getPrototypeOf(c), C.prototype);
-})();
-
-
-(function TestConstructorStrict() {
-  class C {
-    constructor() {
-      assertThrows(function() {
-        nonExistingBinding = 42;
-      }, ReferenceError);
-    }
-  }
-  new C();
-})();
-
-
-(function TestSuperInConstructor() {
-  var calls = 0;
-  class B {}
-  B.prototype.x = 42;
-
-  class C extends B {
-    constructor() {
-      super();
-      calls++;
-      assertEquals(42, super.x);
-    }
-  }
-
-  new C;
-  assertEquals(1, calls);
-})();
-
-
-(function TestStrictMode() {
-  class C {}
-
-  with ({a: 1}) {
-    assertEquals(1, a);
-  }
-
-  assertThrows('class C extends function B() { with ({}); return B; }() {}',
-               SyntaxError);
-
-  var D = class extends function() {
-    arguments.caller;
-  } {};
-  assertThrows(function() {
-    Object.getPrototypeOf(D).arguments;
-  }, TypeError);
-  assertThrows(function() {
-    new D;
-  }, TypeError);
-})();
-
-
-(function TestToString() {
-  class C {}
-  assertEquals('class C {}', C.toString());
-
-  class D { constructor() { 42; } }
-  assertEquals('class D { constructor() { 42; } }', D.toString());
-
-  class E { x() { 42; } }
-  assertEquals('class E { x() { 42; } }', E.toString());
-})();
-
-
-function assertMethodDescriptor(object, name) {
-  var descr = Object.getOwnPropertyDescriptor(object, name);
-  assertTrue(descr.configurable);
-  assertFalse(descr.enumerable);
-  assertTrue(descr.writable);
-  assertEquals('function', typeof descr.value);
-  assertFalse('prototype' in descr.value);
-}
-
-
-function assertGetterDescriptor(object, name) {
-  var descr = Object.getOwnPropertyDescriptor(object, name);
-  assertTrue(descr.configurable);
-  assertFalse(descr.enumerable);
-  assertEquals('function', typeof descr.get);
-  assertFalse('prototype' in descr.get);
-  assertEquals(undefined, descr.set);
-}
-
-
-function assertSetterDescriptor(object, name) {
-  var descr = Object.getOwnPropertyDescriptor(object, name);
-  assertTrue(descr.configurable);
-  assertFalse(descr.enumerable);
-  assertEquals(undefined, descr.get);
-  assertEquals('function', typeof descr.set);
-  assertFalse('prototype' in descr.set);
-}
-
-
-function assertAccessorDescriptor(object, name) {
-  var descr = Object.getOwnPropertyDescriptor(object, name);
-  assertTrue(descr.configurable);
-  assertFalse(descr.enumerable);
-  assertEquals('function', typeof descr.get);
-  assertEquals('function', typeof descr.set);
-  assertFalse('prototype' in descr.get);
-  assertFalse('prototype' in descr.set);
-}
-
-
-(function TestMethods() {
-  class C {
-    method() { return 1; }
-    static staticMethod() { return 2; }
-    method2() { return 3; }
-    static staticMethod2() { return 4; }
-  }
-
-  assertMethodDescriptor(C.prototype, 'method');
-  assertMethodDescriptor(C.prototype, 'method2');
-  assertMethodDescriptor(C, 'staticMethod');
-  assertMethodDescriptor(C, 'staticMethod2');
-
-  assertEquals(1, new C().method());
-  assertEquals(2, C.staticMethod());
-  assertEquals(3, new C().method2());
-  assertEquals(4, C.staticMethod2());
-})();
-
-
-(function TestGetters() {
-  class C {
-    get x() { return 1; }
-    static get staticX() { return 2; }
-    get y() { return 3; }
-    static get staticY() { return 4; }
-  }
-
-  assertGetterDescriptor(C.prototype, 'x');
-  assertGetterDescriptor(C.prototype, 'y');
-  assertGetterDescriptor(C, 'staticX');
-  assertGetterDescriptor(C, 'staticY');
-
-  assertEquals(1, new C().x);
-  assertEquals(2, C.staticX);
-  assertEquals(3, new C().y);
-  assertEquals(4, C.staticY);
-})();
-
-
-
-(function TestSetters() {
-  var x, staticX, y, staticY;
-  class C {
-    set x(v) { x = v; }
-    static set staticX(v) { staticX = v; }
-    set y(v) { y = v; }
-    static set staticY(v) { staticY = v; }
-  }
-
-  assertSetterDescriptor(C.prototype, 'x');
-  assertSetterDescriptor(C.prototype, 'y');
-  assertSetterDescriptor(C, 'staticX');
-  assertSetterDescriptor(C, 'staticY');
-
-  assertEquals(1, new C().x = 1);
-  assertEquals(1, x);
-  assertEquals(2, C.staticX = 2);
-  assertEquals(2, staticX);
-  assertEquals(3, new C().y = 3);
-  assertEquals(3, y);
-  assertEquals(4, C.staticY = 4);
-  assertEquals(4, staticY);
-})();
-
-
-(function TestSideEffectsInPropertyDefine() {
-  function B() {}
-  B.prototype = {
-    constructor: B,
-    set m(v) {
-      throw Error();
-    }
-  };
-
-  class C extends B {
-    m() { return 1; }
-  }
-
-  assertEquals(1, new C().m());
-})();
-
-
-(function TestAccessors() {
-  class C {
-    constructor(x) {
-      this._x = x;
-    }
-
-    get x() { return this._x; }
-    set x(v) { this._x = v; }
-
-    static get staticX() { return this._x; }
-    static set staticX(v) { this._x = v; }
-  }
-
-  assertAccessorDescriptor(C.prototype, 'x');
-  assertAccessorDescriptor(C, 'staticX');
-
-  var c = new C(1);
-  c._x = 1;
-  assertEquals(1, c.x);
-  c.x = 2;
-  assertEquals(2, c._x);
-
-  C._x = 3;
-  assertEquals(3, C.staticX);
-  C._x = 4;
-  assertEquals(4, C.staticX );
-})();
-
-
-(function TestProto() {
-  class C {
-    __proto__() { return 1; }
-  }
-  assertMethodDescriptor(C.prototype, '__proto__');
-  assertEquals(1, new C().__proto__());
-})();
-
-
-(function TestProtoStatic() {
-  class C {
-    static __proto__() { return 1; }
-  }
-  assertMethodDescriptor(C, '__proto__');
-  assertEquals(1, C.__proto__());
-})();
-
-
-(function TestProtoAccessor() {
-  class C {
-    get __proto__() { return this._p; }
-    set __proto__(v) { this._p = v; }
-  }
-  assertAccessorDescriptor(C.prototype, '__proto__');
-  var c = new C();
-  c._p = 1;
-  assertEquals(1, c.__proto__);
-  c.__proto__ = 2;
-  assertEquals(2, c.__proto__);
-})();
-
-
-(function TestStaticProtoAccessor() {
-  class C {
-    static get __proto__() { return this._p; }
-    static set __proto__(v) { this._p = v; }
-  }
-  assertAccessorDescriptor(C, '__proto__');
-  C._p = 1;
-  assertEquals(1, C.__proto__);
-  C.__proto__ = 2;
-  assertEquals(2, C.__proto__);
-})();
-
-
-(function TestSettersOnProto() {
-  function Base() {}
-  Base.prototype = {
-    set constructor(_) {
-      assertUnreachable();
-    },
-    set m(_) {
-      assertUnreachable();
-    }
-  };
-  Object.defineProperty(Base, 'staticM', {
-    set: function() {
-      assertUnreachable();
-    }
-  });
-
-  class C extends Base {
-    m() {
-      return 1;
-    }
-    static staticM() {
-      return 2;
-    }
-  }
-
-  assertEquals(1, new C().m());
-  assertEquals(2, C.staticM());
-})();
-
-
-(function TestConstructableButNoPrototype() {
-  var Base = function() {}.bind();
-  assertThrows(function() {
-    class C extends Base {}
-  }, TypeError);
-})();
-
-
-(function TestPrototypeGetter() {
-  var calls = 0;
-  var Base = function() {}.bind();
-  Object.defineProperty(Base, 'prototype', {
-    get: function() {
-      calls++;
-      return null;
-    },
-    configurable: true
-  });
-  class C extends Base {}
-  assertEquals(1, calls);
-
-  calls = 0;
-  Object.defineProperty(Base, 'prototype', {
-    get: function() {
-      calls++;
-      return 42;
-    },
-    configurable: true
-  });
-  assertThrows(function() {
-    class C extends Base {}
-  }, TypeError);
-  assertEquals(1, calls);
-})();
-
-
-(function TestPrototypeSetter() {
-  var Base = function() {}.bind();
-  Object.defineProperty(Base, 'prototype', {
-    set: function() {
-      assertUnreachable();
-    }
-  });
-  assertThrows(function() {
-    class C extends Base {}
-  }, TypeError);
-})();
-
-
-(function TestSuperInMethods() {
-  class B {
-    method() {
-      return 1;
-    }
-    get x() {
-      return 2;
-    }
-  }
-  class C extends B {
-    method() {
-      assertEquals(2, super.x);
-      return super.method();
-    }
-  }
-  assertEquals(1, new C().method());
-})();
-
-
-(function TestSuperInGetter() {
-  class B {
-    method() {
-      return 1;
-    }
-    get x() {
-      return 2;
-    }
-  }
-  class C extends B {
-    get y() {
-      assertEquals(2, super.x);
-      return super.method();
-    }
-  }
-  assertEquals(1, new C().y);
-})();
-
-
-(function TestSuperInSetter() {
-  class B {
-    method() {
-      return 1;
-    }
-    get x() {
-      return 2;
-    }
-  }
-  class C extends B {
-    set y(v) {
-      assertEquals(3, v);
-      assertEquals(2, super.x);
-      assertEquals(1, super.method());
-    }
-  }
-  assertEquals(3, new C().y = 3);
-})();
-
-
-(function TestSuperInStaticMethods() {
-  class B {
-    static method() {
-      return 1;
-    }
-    static get x() {
-      return 2;
-    }
-  }
-  class C extends B {
-    static method() {
-      assertEquals(2, super.x);
-      return super.method();
-    }
-  }
-  assertEquals(1, C.method());
-})();
-
-
-(function TestSuperInStaticGetter() {
-  class B {
-    static method() {
-      return 1;
-    }
-    static get x() {
-      return 2;
-    }
-  }
-  class C extends B {
-    static get x() {
-      assertEquals(2, super.x);
-      return super.method();
-    }
-  }
-  assertEquals(1, C.x);
-})();
-
-
-(function TestSuperInStaticSetter() {
-  class B {
-    static method() {
-      return 1;
-    }
-    static get x() {
-      return 2;
-    }
-  }
-  class C extends B {
-    static set x(v) {
-      assertEquals(3, v);
-      assertEquals(2, super.x);
-      assertEquals(1, super.method());
-    }
-  }
-  assertEquals(3, C.x = 3);
-})();
-
-
-(function TestNumericPropertyNames() {
-  class B {
-    1() { return 1; }
-    get 2() { return 2; }
-    set 3(_) {}
-
-    static 4() { return 4; }
-    static get 5() { return 5; }
-    static set 6(_) {}
-  }
-
-  assertMethodDescriptor(B.prototype, '1');
-  assertGetterDescriptor(B.prototype, '2');
-  assertSetterDescriptor(B.prototype, '3');
-
-  assertMethodDescriptor(B, '4');
-  assertGetterDescriptor(B, '5');
-  assertSetterDescriptor(B, '6');
-
-  class C extends B {
-    1() { return super[1](); }
-    get 2() { return super[2]; }
-
-    static 4() { return super[4](); }
-    static get 5() { return super[5]; }
-  }
-
-  assertEquals(1, new C()[1]());
-  assertEquals(2, new C()[2]);
-  assertEquals(4, C[4]());
-  assertEquals(5, C[5]);
-})();
-
-
-(function TestDefaultConstructorNoCrash() {
-  // Regression test for https://code.google.com/p/v8/issues/detail?id=3661
-  class C {}
-  assertThrows(function () {C();}, TypeError);
-  assertThrows(function () {C(1);}, TypeError);
-  assertTrue(new C() instanceof C);
-  assertTrue(new C(1) instanceof C);
-})();
-
-
-(function TestDefaultConstructor() {
-  var calls = 0;
-  class Base {
-    constructor() {
-      calls++;
-    }
-  }
-  class Derived extends Base {}
-  var object = new Derived;
-  assertEquals(1, calls);
-
-  calls = 0;
-  assertThrows(function() { Derived(); }, TypeError);
-  assertEquals(0, calls);
-})();
-
-
-(function TestDefaultConstructorArguments() {
-  var args, self;
-  class Base {
-    constructor() {
-      self = this;
-      args = arguments;
-    }
-  }
-  class Derived extends Base {}
-
-  new Derived;
-  assertEquals(0, args.length);
-
-  new Derived(0, 1, 2);
-  assertEquals(3, args.length);
-  assertTrue(self instanceof Derived);
-
-  var arr = new Array(100);
-  var obj = {};
-  assertThrows(function() {Derived.apply(obj, arr);}, TypeError);
-})();
-
-
-(function TestDefaultConstructorArguments2() {
-  var args;
-  class Base {
-    constructor(x, y) {
-      args = arguments;
-    }
-  }
-  class Derived extends Base {}
-
-  new Derived;
-  assertEquals(0, args.length);
-
-  new Derived(1);
-  assertEquals(1, args.length);
-  assertEquals(1, args[0]);
-
-  new Derived(1, 2, 3);
-  assertEquals(3, args.length);
-  assertEquals(1, args[0]);
-  assertEquals(2, args[1]);
-  assertEquals(3, args[2]);
-})();
-
-
-(function TestNameBindingConst() {
-  assertThrows('class C { constructor() { C = 42; } }; new C();', TypeError);
-  assertThrows('new (class C { constructor() { C = 42; } })', TypeError);
-  assertThrows('class C { m() { C = 42; } }; new C().m()', TypeError);
-  assertThrows('new (class C { m() { C = 42; } }).m()', TypeError);
-  assertThrows('class C { get x() { C = 42; } }; new C().x', TypeError);
-  assertThrows('(new (class C { get x() { C = 42; } })).x', TypeError);
-  assertThrows('class C { set x(_) { C = 42; } }; new C().x = 15;', TypeError);
-  assertThrows('(new (class C { set x(_) { C = 42; } })).x = 15;', TypeError);
-})();
-
-
-(function TestNameBinding() {
-  var C2;
-  class C {
-    constructor() {
-      C2 = C;
-    }
-    m() {
-      C2 = C;
-    }
-    get x() {
-      C2 = C;
-    }
-    set x(_) {
-      C2 = C;
-    }
-  }
-  new C();
-  assertEquals(C, C2);
-
-  C2 = undefined;
-  new C().m();
-  assertEquals(C, C2);
-
-  C2 = undefined;
-  new C().x;
-  assertEquals(C, C2);
-
-  C2 = undefined;
-  new C().x = 1;
-  assertEquals(C, C2);
-})();
-
-
-(function TestNameBindingExpression() {
-  var C3;
-  var C = class C2 {
-    constructor() {
-      assertEquals(C2, C);
-      C3 = C2;
-    }
-    m() {
-      assertEquals(C2, C);
-      C3 = C2;
-    }
-    get x() {
-      assertEquals(C2, C);
-      C3 = C2;
-    }
-    set x(_) {
-      assertEquals(C2, C);
-      C3 = C2;
-    }
-  }
-  new C();
-  assertEquals(C, C3);
-
-  C3 = undefined;
-  new C().m();
-  assertEquals(C, C3);
-
-  C3 = undefined;
-  new C().x;
-  assertEquals(C, C3);
-
-  C3 = undefined;
-  new C().x = 1;
-  assertEquals(C, C3);
-})();
-
-
-(function TestNameBindingInExtendsExpression() {
-  assertThrows(function() {
-    class x extends x {}
-  }, ReferenceError);
-
-  assertThrows(function() {
-    (class x extends x {});
-  }, ReferenceError);
-
-  assertThrows(function() {
-    var x = (class x extends x {});
-  }, ReferenceError);
-})();
-
-
-(function TestThisAccessRestriction() {
-  class Base {}
-  (function() {
-    class C extends Base {
-      constructor() {
-        var y;
-        super();
-      }
-    }; new C();
-  }());
-  assertThrows(function() {
-    class C extends Base {
-      constructor() {
-        super(this.x);
-      }
-    }; new C();
-  }, ReferenceError);
-  assertThrows(function() {
-    class C extends Base {
-      constructor() {
-        super(this);
-      }
-    }; new C();
-  }, ReferenceError);
-  assertThrows(function() {
-    class C extends Base {
-      constructor() {
-        super.method();
-        super(this);
-      }
-    }; new C();
-  }, ReferenceError);
-  assertThrows(function() {
-    class C extends Base {
-      constructor() {
-        super(super.method());
-      }
-    }; new C();
-  }, ReferenceError);
-  assertThrows(function() {
-    class C extends Base {
-      constructor() {
-        super(super());
-      }
-    }; new C();
-  }, ReferenceError);
-  assertThrows(function() {
-    class C extends Base {
-      constructor() {
-        super(1, 2, Object.getPrototypeOf(this));
-      }
-    }; new C();
-  }, ReferenceError);
-  (function() {
-    class C extends Base {
-      constructor() {
-        { super(1, 2); }
-      }
-    }; new C();
-  }());
-  (function() {
-    class C extends Base {
-      constructor() {
-        if (1) super();
-      }
-    }; new C();
-  }());
-
-  class C1 extends Object {
-    constructor() {
-      'use strict';
-      super();
-    }
-  };
-  new C1();
-
-  class C2 extends Object {
-    constructor() {
-      ; 'use strict';;;;;
-      super();
-    }
-  };
-  new C2();
-
-  class C3 extends Object {
-    constructor() {
-      ; 'use strict';;;;;
-      // This is a comment.
-      super();
-    }
-  };
-  new C3();
-}());
-
-
-function testClassRestrictedProperties(C) {
-  assertEquals(false, C.hasOwnProperty("arguments"));
-  assertThrows(function() { return C.arguments; }, TypeError);
-  assertThrows(function() { C.arguments = {}; }, TypeError);
-
-  assertEquals(false, C.hasOwnProperty("caller"));
-  assertThrows(function() { return C.caller; }, TypeError);
-  assertThrows(function() { C.caller = {}; }, TypeError);
-
-  assertEquals(false, (new C).method.hasOwnProperty("arguments"));
-  assertThrows(function() { return new C().method.arguments; }, TypeError);
-  assertThrows(function() { new C().method.arguments = {}; }, TypeError);
-
-  assertEquals(false, (new C).method.hasOwnProperty("caller"));
-  assertThrows(function() { return new C().method.caller; }, TypeError);
-  assertThrows(function() { new C().method.caller = {}; }, TypeError);
-}
-
-
-(function testRestrictedPropertiesStrict() {
-  "use strict";
-  class ClassWithDefaultConstructor {
-    method() {}
-  }
-  class Class {
-    constructor() {}
-    method() {}
-  }
-  class DerivedClassWithDefaultConstructor extends Class {}
-  class DerivedClass extends Class { constructor() { super(); } }
-
-  testClassRestrictedProperties(ClassWithDefaultConstructor);
-  testClassRestrictedProperties(Class);
-  testClassRestrictedProperties(DerivedClassWithDefaultConstructor);
-  testClassRestrictedProperties(DerivedClass);
-  testClassRestrictedProperties(class { method() {} });
-  testClassRestrictedProperties(class { constructor() {} method() {} });
-  testClassRestrictedProperties(class extends Class { });
-  testClassRestrictedProperties(
-      class extends Class { constructor() { super(); } });
-})();
-
-
-(function testRestrictedPropertiesSloppy() {
-  class ClassWithDefaultConstructor {
-    method() {}
-  }
-  class Class {
-    constructor() {}
-    method() {}
-  }
-  class DerivedClassWithDefaultConstructor extends Class {}
-  class DerivedClass extends Class { constructor() { super(); } }
-
-  testClassRestrictedProperties(ClassWithDefaultConstructor);
-  testClassRestrictedProperties(Class);
-  testClassRestrictedProperties(DerivedClassWithDefaultConstructor);
-  testClassRestrictedProperties(DerivedClass);
-  testClassRestrictedProperties(class { method() {} });
-  testClassRestrictedProperties(class { constructor() {} method() {} });
-  testClassRestrictedProperties(class extends Class { });
-  testClassRestrictedProperties(
-      class extends Class { constructor() { super(); } });
-})();
index e8cae460a534917bf32479baca00ec7cc7ef4dad..46a9e9ec2de7025f5ebc8b988ff106eed562c0d0 100644 (file)
@@ -4,7 +4,7 @@
 
 'use strict';
 
-// Flags: --harmony-computed-property-names --harmony-classes
+// Flags: --harmony-computed-property-names
 
 
 function ID(x) {
index 0d15b27968b696a7aac23411af299129183a6b7a..bfc31c668fc7ae3a3f2223c3b1a92c101542e074 100644 (file)
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-computed-property-names
-// Flags: --harmony-classes --allow-natives-syntax
+// Flags: --harmony-computed-property-names --allow-natives-syntax
 
 
 function ID(x) {
diff --git a/test/mjsunit/harmony/debug-step-into-class-extends.js b/test/mjsunit/harmony/debug-step-into-class-extends.js
deleted file mode 100644 (file)
index ffc6fda..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --expose-debug-as debug --harmony-classes
-
-'use strict';
-
-var Debug = debug.Debug
-
-var done = false;
-var stepCount = 0;
-
-function listener(event, execState, eventData, data) {
-  if (event == Debug.DebugEvent.Break) {
-    if (!done) {
-      execState.prepareStep(Debug.StepAction.StepInto);
-      var s = execState.frame().sourceLineText();
-      assertTrue(s.indexOf('// ' + stepCount + '.') !== -1);
-      stepCount++;
-    }
-  }
-};
-
-Debug.setListener(listener);
-
-function GetBase() {
-  var x = 1;   // 1.
-  var y = 2;   // 2.
-  done = true; // 3.
-  return null;
-}
-
-function f() {
-  class Derived extends GetBase() {} // 0.
-}
-
-var bp = Debug.setBreakPoint(f, 0);
-f();
-assertEquals(4, stepCount);
-
-Debug.setListener(null);
diff --git a/test/mjsunit/harmony/debug-step-into-constructor.js b/test/mjsunit/harmony/debug-step-into-constructor.js
deleted file mode 100644 (file)
index dbef60f..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --expose-debug-as debug --harmony-classes
-
-'use strict';
-
-var Debug = debug.Debug
-var done, stepCount;
-
-function listener(event, execState, eventData, data) {
-  if (event == Debug.DebugEvent.Break) {
-    if (!done) {
-      execState.prepareStep(Debug.StepAction.StepInto);
-      var s = execState.frame().sourceLineText();
-      assertTrue(s.indexOf('// ' + stepCount + '.') !== -1);
-      stepCount++;
-    }
-  }
-};
-
-Debug.setListener(listener);
-
-
-class Base {
-  constructor() {
-    var x = 1;   // 1.
-    var y = 2;   // 2.
-    done = true; // 3.
-  }
-}
-
-class Derived extends Base {}
-
-
-(function TestBreakPointInConstructor() {
-  done = false;
-  stepCount = 1;
-  var bp = Debug.setBreakPoint(Base, 0);
-
-  new Base();
-  assertEquals(4, stepCount);
-
-  Debug.clearBreakPoint(bp);
-})();
-
-
-(function TestDefaultConstructor() {
-  done = false;
-  stepCount = 1;
-
-  var bp = Debug.setBreakPoint(Base, 0);
-  new Derived();
-  assertEquals(4, stepCount);
-
-  Debug.clearBreakPoint(bp);
-})();
-
-
-(function TestStepInto() {
-  done = false;
-  stepCount = 0;
-
-  function f() {
-    new Derived();  // 0.
-  }
-
-  var bp = Debug.setBreakPoint(f, 0);
-  f();
-  assertEquals(4, stepCount);
-
-  Debug.clearBreakPoint(bp);
-})();
-
-
-(function TestExtraIndirection() {
-  done = false;
-  stepCount = 0;
-
-  class Derived2 extends Derived {}
-
-  function f() {
-    new Derived2();  // 0.
-  }
-
-  var bp = Debug.setBreakPoint(f, 0);
-  f();
-  assertEquals(4, stepCount);
-
-  Debug.clearBreakPoint(bp);
-})();
-
-
-(function TestBoundClass() {
-  done = false;
-  stepCount = 0;
-
-  var bound = Derived.bind(null);
-
-  function f() {
-    new bound();  // 0.
-  }
-
-  var bp = Debug.setBreakPoint(f, 0);
-  f();
-  assertEquals(4, stepCount);
-
-  Debug.clearBreakPoint(bp);
-})();
-
-
-Debug.setListener(null);
index ccf492bf5874ac471b804895fc27392239d8eb8b..c6fb6334de8ab93737fed622c0bfdf183de8bc75 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-classes --harmony-arrow-functions --allow-natives-syntax
+// Flags: --harmony-arrow-functions --allow-natives-syntax
 
 
 (function TestHomeObject() {
diff --git a/test/mjsunit/harmony/regress/regress-3750.js b/test/mjsunit/harmony/regress/regress-3750.js
deleted file mode 100644 (file)
index d1f21f9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Flags: --harmony-classes
-'use strict';
-class Example { }
-Object.observe(Example.prototype, function(){});
diff --git a/test/mjsunit/harmony/regress/regress-455141.js b/test/mjsunit/harmony/regress/regress-455141.js
deleted file mode 100644 (file)
index cf2141f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2015 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Flags: --harmony-classes --no-lazy
-"use strict";
-class Base {
-}
-class Subclass extends Base {
-  constructor() {
-      this.prp1 = 3;
-  }
-}
-function __f_1(){
-}
index 942814a3169c7b04faefed3a2170df72d3411860..eaf1d1961f67956c949fffe5341c5f43048d8a19 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-computed-property-names --harmony-classes --harmony-sloppy
+// Flags: --harmony-computed-property-names --harmony-sloppy
 
 assertThrows(function f() {
   var t = { toString: function() { throw new Error(); } };
index 341cb3308755207438349ab57e7af42b24cfffdf..fe7ee2adb81186076d1a32bee92642d1a2cdc430 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-rest-parameters --harmony-classes
+// Flags: --harmony-rest-parameters
 
 (function testRestIndex() {
   assertEquals(5, (function(...args) { return args.length; })(1,2,3,4,5));
index 1a0dd2add796fc9afb0ed27c807e295555a3eaef..21b31d96c9b9bcac827f5c9a11e8f80f7050a164 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --harmony-classes --harmony-arrow-functions --allow-natives-syntax
+// Flags: --harmony-arrow-functions --allow-natives-syntax
 // Flags: --harmony-spreadcalls
 
 (function TestSuperNamedLoads() {
diff --git a/test/mjsunit/harmony/toMethod.js b/test/mjsunit/harmony/toMethod.js
deleted file mode 100644 (file)
index 81db583..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Flags: --harmony-classes --allow-natives-syntax
-
-
-(function TestSingleClass() {
-  function f(x) {
-    var a = [0, 1, 2]
-    return a[x];
-  }
-
-  function ClassD() { }
-
-  assertEquals(1, f(1));
-  var g = %ToMethod(f, ClassD.prototype);
-  assertEquals(1, g(1));
-  assertEquals(undefined, f[%HomeObjectSymbol()]);
-  assertEquals(ClassD.prototype, g[%HomeObjectSymbol()]);
-}());
-
-
-(function TestClassHierarchy() {
-  function f(x) {
-    return function g(y)  { x++; return x + y; };
-  }
-
-  function Base() {}
-  function Derived() { }
-  Derived.prototype = Object.create(Base.prototype);
-
-  var q = f(0);
-  assertEquals(2, q(1));
-  assertEquals(3, q(1));
-  var g = %ToMethod(q, Derived.prototype);
-  assertFalse(g === q);
-  assertEquals(4, g(1));
-  assertEquals(5, q(1));
-}());
-
-
-(function TestPrototypeChain() {
-  var o = {};
-  var o1 = {};
-  function f() { }
-
-  function g() { }
-
-  var fMeth = %ToMethod(f, o);
-  assertEquals(o, fMeth[%HomeObjectSymbol()]);
-  g.__proto__ = fMeth;
-  assertEquals(undefined, g[%HomeObjectSymbol()]);
-  var gMeth = %ToMethod(g, o1);
-  assertEquals(fMeth, gMeth.__proto__);
-  assertEquals(o, fMeth[%HomeObjectSymbol()]);
-  assertEquals(o1, gMeth[%HomeObjectSymbol()]);
-}());
-
-
-(function TestBoundFunction() {
-  var o = {};
-  var p = {};
-
-
-  function f(x, y, z, w) {
-    assertEquals(o, this);
-    assertEquals(1, x);
-    assertEquals(2, y);
-    assertEquals(3, z);
-    assertEquals(4, w);
-    return x+y+z+w;
-  }
-
-  var fBound = f.bind(o, 1, 2, 3);
-  var fMeth = %ToMethod(fBound, p);
-  assertEquals(10, fMeth(4));
-  assertEquals(10, fMeth.call(p, 4));
-  var fBound1 = fBound.bind(o, 4);
-  assertEquals(10, fBound1());
-  var fMethBound = fMeth.bind(o, 4);
-  assertEquals(10, fMethBound());
-}());
-
-(function TestOptimized() {
-  function f(o) {
-    return o.x;
-  }
-  var o = {x : 15};
-  assertEquals(15, f(o));
-  assertEquals(15, f(o));
-  %OptimizeFunctionOnNextCall(f);
-  assertEquals(15, f(o));
-  var g = %ToMethod(f, {});
-  var o1 = {y : 1024, x : "abc"};
-  assertEquals("abc", f(o1));
-  assertEquals("abc", g(o1));
-} ());
-
-(function TestExtensibility() {
-  function f() {}
-  Object.preventExtensions(f);
-  assertFalse(Object.isExtensible(f));
-  var m = %ToMethod(f, {});
-  assertTrue(Object.isExtensible(m));
-}());
index c329043ae16e3166b2e1f383c3f68202d061a8f8..c8d261760d2059f736a8f28123992e8754b8c6ae 100644 (file)
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --strong-mode
-// Flags: --harmony-classes --harmony-arrow-functions
+// Flags: --strong-mode --harmony-arrow-functions
 
 'use strong';
 
index 05df8e835c9b4e9bc8f280374353f270983dac2f..5d99060ea7541521c68b1eb8e968cf2a31635554 100644 (file)
@@ -2,7 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --strong-mode --harmony_rest_parameters --harmony_arrow_functions --harmony_classes --harmony_computed-property_names
+// Flags: --strong-mode --harmony-rest-parameters --harmony-arrow-functions
+// Flags: --harmony-computed-property-names
 
 // Note that it's essential for these tests that the reference is inside dead
 // code (because we already produce ReferenceErrors for run-time unresolved
index 0cf985c0ee4fb64b61b47a0dc8a3a462fd346e7b..bd289f204f91896eca16e71fb4e6933b17bcfa62 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Flags: --strong-mode --harmony-classes --allow-natives-syntax
+// Flags: --strong-mode --allow-natives-syntax
 
 'use strong';