Bug 1494930 - Part 2: Correctly generate JSOP_FUNCALL and JSOP_FUNAPPLY. (r=arai)

--HG--
extra : rebase_source : 3afd22c29202c2f8dbe6f491ec33c038afe113e3
This commit is contained in:
Eric Faust 2018-10-02 01:16:51 -07:00
Родитель 78cf35a8c8
Коммит 0a9e5a0040
2 изменённых файлов: 24 добавлений и 0 удалений

Просмотреть файл

@ -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())