зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1494930 - Part 2: Correctly generate JSOP_FUNCALL and JSOP_FUNAPPLY. (r=arai)
--HG-- extra : rebase_source : 3afd22c29202c2f8dbe6f491ec33c038afe113e3
This commit is contained in:
Родитель
78cf35a8c8
Коммит
0a9e5a0040
|
@ -3860,6 +3860,18 @@ BinASTParser<Tok>::parseInterfaceCallExpression(const size_t start, const BinKin
|
|||
BINJS_MOZ_TRY_DECL(arguments, parseArguments());
|
||||
|
||||
auto op = JSOP_CALL;
|
||||
|
||||
// Try to optimize funcall and funapply at the bytecode level
|
||||
if (PropertyName* prop = factory_.maybeDottedProperty(callee)) {
|
||||
if (prop == cx_->names().apply) {
|
||||
op = JSOP_FUNAPPLY;
|
||||
if (parseContext_->isFunctionBox())
|
||||
parseContext_->functionBox()->usesApply = true;
|
||||
} else if (prop == cx_->names().call) {
|
||||
op = JSOP_FUNCALL;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for direct calls to `eval`.
|
||||
if (factory_.isEvalName(callee, cx_)) {
|
||||
if (!parseContext_->varScope().lookupDeclaredNameForAdd(callee->name())
|
||||
|
|
|
@ -482,6 +482,18 @@ BreakStatement:
|
|||
CallExpression:
|
||||
build: |
|
||||
auto op = JSOP_CALL;
|
||||
|
||||
// Try to optimize funcall and funapply at the bytecode level
|
||||
if (PropertyName* prop = factory_.maybeDottedProperty(callee)) {
|
||||
if (prop == cx_->names().apply) {
|
||||
op = JSOP_FUNAPPLY;
|
||||
if (parseContext_->isFunctionBox())
|
||||
parseContext_->functionBox()->usesApply = true;
|
||||
} else if (prop == cx_->names().call) {
|
||||
op = JSOP_FUNCALL;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for direct calls to `eval`.
|
||||
if (factory_.isEvalName(callee, cx_)) {
|
||||
if (!parseContext_->varScope().lookupDeclaredNameForAdd(callee->name())
|
||||
|
|
Загрузка…
Ссылка в новой задаче