A strict arrow function with no parameters and no variable bindings
won't need a context object because it will never have any
locals. (This is unlike strict normal functions, which do have
"arguments" and "this" locals.)
R=rossberg@chromium.org
BUG=v8:4056
LOG=N
Review URL: https://codereview.chromium.org/
1093183003
Cr-Commit-Position: refs/heads/master@{#28031}
FunctionVariableField::decode(Flags()) == CONTEXT;
bool has_context = context_locals > 0 || function_name_context_slot ||
scope_type() == WITH_SCOPE ||
- (scope_type() == ARROW_SCOPE && CallsEval()) ||
- (scope_type() == FUNCTION_SCOPE && CallsEval()) ||
+ (scope_type() == ARROW_SCOPE && CallsSloppyEval()) ||
+ (scope_type() == FUNCTION_SCOPE && CallsSloppyEval()) ||
scope_type() == MODULE_SCOPE;
if (has_context) {
return Context::MIN_CONTEXT_SLOTS + context_locals +
// even if no local variables were statically allocated in the scope.
// Likewise for modules.
bool must_have_context = is_with_scope() || is_module_scope() ||
- (is_function_scope() && calls_eval());
+ (is_function_scope() && calls_sloppy_eval());
// If we didn't allocate any locals in the local context, then we only
// need the minimal number of slots if we must have a context.
--- /dev/null
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-arrow-functions
+
+function strictFunctionArrowEval(s) {
+ "use strict";
+ return (()=>eval(s))();
+};
+
+assertEquals(strictFunctionArrowEval("42"), 42)