| Index: src/stub-cache.h
|
| diff --git a/src/stub-cache.h b/src/stub-cache.h
|
| index bf14a4fe28c49517474729fa2153e75396a6bfe3..388bb52ca689865f2715be15bfa1c98c6328022b 100644
|
| --- a/src/stub-cache.h
|
| +++ b/src/stub-cache.h
|
| @@ -612,21 +612,29 @@ class KeyedStoreStubCompiler: public StubCompiler {
|
| // 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) \
|
| - V(string, charCodeAt, StringCharCodeAt) \
|
| - V(string, charAt, StringCharAt)
|
| +// Each entry has a name of a global function (lowercased), a flag
|
| +// controlling whether the generator is set on the function itself or
|
| +// on its instance prototype, a name of a builtin function on the
|
| +// function or 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, INSTANCE_PROTOTYPE, push, ArrayPush) \
|
| + V(array, INSTANCE_PROTOTYPE, pop, ArrayPop) \
|
| + V(string, INSTANCE_PROTOTYPE, charCodeAt, StringCharCodeAt) \
|
| + V(string, INSTANCE_PROTOTYPE, charAt, StringCharAt) \
|
| + V(string, FUNCTION, fromCharCode, StringFromCharCode)
|
|
|
|
|
| class CallStubCompiler: public StubCompiler {
|
| public:
|
| + enum CustomGeneratorOwner {
|
| + FUNCTION,
|
| + INSTANCE_PROTOTYPE
|
| + };
|
| +
|
| enum {
|
| -#define DECLARE_CALL_GENERATOR_ID(ignored1, ignored2, name) \
|
| +#define DECLARE_CALL_GENERATOR_ID(ignored1, ignore2, ignored3, name) \
|
| k##name##CallGenerator,
|
| CUSTOM_CALL_IC_GENERATORS(DECLARE_CALL_GENERATOR_ID)
|
| #undef DECLARE_CALL_GENERATOR_ID
|
| @@ -656,20 +664,21 @@ class CallStubCompiler: public StubCompiler {
|
| JSFunction* function,
|
| String* name);
|
|
|
| - // Compiles a custom call constant IC using the generator with given id.
|
| + // Compiles a custom call constant/global IC using the generator
|
| + // with given id. For constant calls cell is NULL.
|
| Object* CompileCustomCall(int generator_id,
|
| Object* object,
|
| JSObject* holder,
|
| + JSGlobalPropertyCell* cell,
|
| JSFunction* function,
|
| - String* name,
|
| - CheckType check);
|
| + String* name);
|
|
|
| -#define DECLARE_CALL_GENERATOR(ignored1, ignored2, name) \
|
| - Object* Compile##name##Call(Object* object, \
|
| - JSObject* holder, \
|
| - JSFunction* function, \
|
| - String* fname, \
|
| - CheckType check);
|
| +#define DECLARE_CALL_GENERATOR(ignored1, ignored2, ignored3, name) \
|
| + Object* Compile##name##Call(Object* object, \
|
| + JSObject* holder, \
|
| + JSGlobalPropertyCell* cell, \
|
| + JSFunction* function, \
|
| + String* fname);
|
| CUSTOM_CALL_IC_GENERATORS(DECLARE_CALL_GENERATOR)
|
| #undef DECLARE_CALL_GENERATOR
|
|
|
| @@ -689,6 +698,17 @@ class CallStubCompiler: public StubCompiler {
|
|
|
| void GenerateNameCheck(String* name, Label* miss);
|
|
|
| + void GenerateGlobalReceiverCheck(JSObject* object,
|
| + JSObject* holder,
|
| + String* name,
|
| + Label* miss);
|
| +
|
| + // Generates code to load the function from the cell checking that
|
| + // it still contains the same function.
|
| + void GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell,
|
| + JSFunction* function,
|
| + Label* miss);
|
| +
|
| // Generates a jump to CallIC miss stub. Returns Failure if the jump cannot
|
| // be generated.
|
| Object* GenerateMissBranch();
|
|
|