Revision: 7772 Author: [email protected] Date: Wed May 4 00:28:27 2011 Log: Make Date and RegExp inherit from Object in the API.
They are objects and the API inheritance hierarchy should reflect that. [email protected] BUG= TEST= Review URL: http://codereview.chromium.org/6929008 http://code.google.com/p/v8/source/detail?r=7772 Modified: /branches/bleeding_edge/include/v8.h /branches/bleeding_edge/src/api.h /branches/bleeding_edge/test/cctest/test-api.cc ======================================= --- /branches/bleeding_edge/include/v8.h Mon May 2 22:40:47 2011 +++ /branches/bleeding_edge/include/v8.h Wed May 4 00:28:27 2011 @@ -1349,87 +1349,6 @@ }; -/** - * An instance of the built-in Date constructor (ECMA-262, 15.9). - */ -class Date : public Value { - public: - V8EXPORT static Local<Value> New(double time); - - /** - * A specialization of Value::NumberValue that is more efficient - * because we know the structure of this object. - */ - V8EXPORT double NumberValue() const; - - static inline Date* Cast(v8::Value* obj); - - /** - * Notification that the embedder has changed the time zone, - * daylight savings time, or other date / time configuration - * parameters. V8 keeps a cache of various values used for - * date / time computation. This notification will reset - * those cached values for the current context so that date / - * time configuration changes would be reflected in the Date - * object. - * - * This API should not be called more than needed as it will - * negatively impact the performance of date operations. - */ - V8EXPORT static void DateTimeConfigurationChangeNotification(); - - private: - V8EXPORT static void CheckCast(v8::Value* obj); -}; - - -/** - * An instance of the built-in RegExp constructor (ECMA-262, 15.10). - */ -class RegExp : public Value { - public: - /** - * Regular expression flag bits. They can be or'ed to enable a set - * of flags. - */ - enum Flags { - kNone = 0, - kGlobal = 1, - kIgnoreCase = 2, - kMultiline = 4 - }; - - /** - * Creates a regular expression from the given pattern string and - * the flags bit field. May throw a JavaScript exception as - * described in ECMA-262, 15.10.4.1. - * - * For example, - * RegExp::New(v8::String::New("foo"), - * static_cast<RegExp::Flags>(kGlobal | kMultiline)) - * is equivalent to evaluating "/foo/gm". - */ - V8EXPORT static Local<RegExp> New(Handle<String> pattern, - Flags flags); - - /** - * Returns the value of the source property: a string representing - * the regular expression. - */ - V8EXPORT Local<String> GetSource() const; - - /** - * Returns the flags bit field. - */ - V8EXPORT Flags GetFlags() const; - - static inline RegExp* Cast(v8::Value* obj); - - private: - V8EXPORT static void CheckCast(v8::Value* obj); -}; - - enum PropertyAttribute { None = 0, ReadOnly = 1 << 0, @@ -1756,6 +1675,87 @@ }; +/** + * An instance of the built-in Date constructor (ECMA-262, 15.9). + */ +class Date : public Object { + public: + V8EXPORT static Local<Value> New(double time); + + /** + * A specialization of Value::NumberValue that is more efficient + * because we know the structure of this object. + */ + V8EXPORT double NumberValue() const; + + static inline Date* Cast(v8::Value* obj); + + /** + * Notification that the embedder has changed the time zone, + * daylight savings time, or other date / time configuration + * parameters. V8 keeps a cache of various values used for + * date / time computation. This notification will reset + * those cached values for the current context so that date / + * time configuration changes would be reflected in the Date + * object. + * + * This API should not be called more than needed as it will + * negatively impact the performance of date operations. + */ + V8EXPORT static void DateTimeConfigurationChangeNotification(); + + private: + V8EXPORT static void CheckCast(v8::Value* obj); +}; + + +/** + * An instance of the built-in RegExp constructor (ECMA-262, 15.10). + */ +class RegExp : public Object { + public: + /** + * Regular expression flag bits. They can be or'ed to enable a set + * of flags. + */ + enum Flags { + kNone = 0, + kGlobal = 1, + kIgnoreCase = 2, + kMultiline = 4 + }; + + /** + * Creates a regular expression from the given pattern string and + * the flags bit field. May throw a JavaScript exception as + * described in ECMA-262, 15.10.4.1. + * + * For example, + * RegExp::New(v8::String::New("foo"), + * static_cast<RegExp::Flags>(kGlobal | kMultiline)) + * is equivalent to evaluating "/foo/gm". + */ + V8EXPORT static Local<RegExp> New(Handle<String> pattern, + Flags flags); + + /** + * Returns the value of the source property: a string representing + * the regular expression. + */ + V8EXPORT Local<String> GetSource() const; + + /** + * Returns the flags bit field. + */ + V8EXPORT Flags GetFlags() const; + + static inline RegExp* Cast(v8::Value* obj); + + private: + V8EXPORT static void CheckCast(v8::Value* obj); +}; + + /** * A JavaScript value that wraps a C++ void*. This type of value is * mainly used to associate C++ data structures with JavaScript ======================================= --- /branches/bleeding_edge/src/api.h Fri Apr 29 15:16:45 2011 +++ /branches/bleeding_edge/src/api.h Wed May 4 00:28:27 2011 @@ -1,4 +1,4 @@ -// Copyright 2008 the V8 project authors. All rights reserved. +// Copyright 2011 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: ======================================= --- /branches/bleeding_edge/test/cctest/test-api.cc Mon May 2 22:40:47 2011 +++ /branches/bleeding_edge/test/cctest/test-api.cc Wed May 4 00:28:27 2011 @@ -1050,8 +1050,10 @@ v8::HandleScope scope; LocalContext env; double PI = 3.1415926; - Local<Value> date_obj = v8::Date::New(PI); - CHECK_EQ(3.0, date_obj->NumberValue()); + Local<Value> date = v8::Date::New(PI); + CHECK_EQ(3.0, date->NumberValue()); + date.As<v8::Date>()->Set(v8_str("property"), v8::Integer::New(42)); + CHECK_EQ(42, date.As<v8::Date>()->Get(v8_str("property"))->Int32Value()); } @@ -13740,6 +13742,11 @@ context->Global()->Set(v8_str("re"), re); ExpectTrue("re.test('FoobarbaZ')"); + // RegExps are objects on which you can set properties. + re->Set(v8_str("property"), v8::Integer::New(32)); + v8::Handle<v8::Value> value = CompileRun("re.property"); + ASSERT_EQ(32, value->Int32Value()); + v8::TryCatch try_catch; re = v8::RegExp::New(v8_str("foo["), v8::RegExp::kNone); CHECK(re.IsEmpty()); -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
