| Index: src/stub-cache.h
|
| diff --git a/src/stub-cache.h b/src/stub-cache.h
|
| index 2e0faf6a897b2fee0f8401e0300dd1f23c178012..45aaf75c91796a35ad6fbb29330eed2df088e5c2 100644
|
| --- a/src/stub-cache.h
|
| +++ b/src/stub-cache.h
|
| @@ -559,8 +559,30 @@ class KeyedStoreStubCompiler: public StubCompiler {
|
| };
|
|
|
|
|
| +// List of functions with custom constant call IC stubs.
|
| +//
|
| +// Installation of custom call generators for the selected builtins is
|
| +// handled by the bootstrapper.
|
| +//
|
| +// Each entry has a name of a global function (lowercased), a name of
|
| +// a builtin function on its instance prototype (the one the generator
|
| +// is set for), and a name of a generator itself (used to build ids
|
| +// and generator function names).
|
| +#define CUSTOM_CALL_IC_GENERATORS(V) \
|
| + V(array, push, ArrayPush) \
|
| + V(array, pop, ArrayPop)
|
| +
|
| +
|
| class CallStubCompiler: public StubCompiler {
|
| public:
|
| + enum {
|
| +#define DECLARE_CALL_GENERATOR_ID(ignored1, ignored2, name) \
|
| + k##name##CallGenerator,
|
| + CUSTOM_CALL_IC_GENERATORS(DECLARE_CALL_GENERATOR_ID)
|
| +#undef DECLARE_CALL_GENERATOR_ID
|
| + kNumCallGenerators
|
| + };
|
| +
|
| CallStubCompiler(int argc, InLoopFlag in_loop)
|
| : arguments_(argc), in_loop_(in_loop) { }
|
|
|
| @@ -582,17 +604,22 @@ class CallStubCompiler: public StubCompiler {
|
| JSFunction* function,
|
| String* name);
|
|
|
| - Object* CompileArrayPushCall(Object* object,
|
| - JSObject* holder,
|
| - JSFunction* function,
|
| - String* name,
|
| - CheckType check);
|
| + // Compiles a custom call constant IC using the generator with given id.
|
| + Object* CompileCustomCall(int generator_id,
|
| + Object* object,
|
| + JSObject* holder,
|
| + JSFunction* function,
|
| + String* name,
|
| + CheckType check);
|
|
|
| - Object* CompileArrayPopCall(Object* object,
|
| - JSObject* holder,
|
| - JSFunction* function,
|
| - String* name,
|
| +#define DECLARE_CALL_GENERATOR(ignored1, ignored2, name) \
|
| + Object* Compile##name##Call(Object* object, \
|
| + JSObject* holder, \
|
| + JSFunction* function, \
|
| + String* fname, \
|
| CheckType check);
|
| + CUSTOM_CALL_IC_GENERATORS(DECLARE_CALL_GENERATOR)
|
| +#undef DECLARE_CALL_GENERATOR
|
|
|
| private:
|
| const ParameterCount arguments_;
|
| @@ -601,6 +628,10 @@ class CallStubCompiler: public StubCompiler {
|
| const ParameterCount& arguments() { return arguments_; }
|
|
|
| Object* GetCode(PropertyType type, String* name);
|
| +
|
| + // Convenience function. Calls GetCode above passing
|
| + // CONSTANT_FUNCTION type and the name of the given function.
|
| + Object* GetCode(JSFunction* function);
|
| };
|
|
|
|
|
| @@ -663,31 +694,6 @@ class CallOptimization BASE_EMBEDDED {
|
| CallHandlerInfo* api_call_info_;
|
| };
|
|
|
| -
|
| -typedef Object* (*CustomCallGenerator)(CallStubCompiler* compiler,
|
| - Object* object,
|
| - JSObject* holder,
|
| - JSFunction* function,
|
| - String* name,
|
| - StubCompiler::CheckType check);
|
| -
|
| -
|
| -Object* CompileArrayPushCall(CallStubCompiler* compiler,
|
| - Object* object,
|
| - JSObject* holder,
|
| - JSFunction* function,
|
| - String* name,
|
| - StubCompiler::CheckType check);
|
| -
|
| -
|
| -Object* CompileArrayPopCall(CallStubCompiler* compiler,
|
| - Object* object,
|
| - JSObject* holder,
|
| - JSFunction* function,
|
| - String* name,
|
| - StubCompiler::CheckType check);
|
| -
|
| -
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_STUB_CACHE_H_
|
|
|