return (code_ & kTypeMask) == kTypeStringLiteral;
}
- bool IsUseStrictLiteral() {
+ bool IsUseStrictLiteral() const {
return (code_ & kUseStrictString) == kUseStrictString;
}
- bool IsThis() { return code_ == kThisExpression; }
+ bool IsThis() const { return (code_ & kThisExpression) == kThisExpression; }
- bool IsThisProperty() { return code_ == kThisPropertyExpression; }
+ bool IsThisProperty() const {
+ return (code_ & kThisPropertyExpression) == kThisPropertyExpression;
+ }
- bool IsProperty() {
- return code_ == kPropertyExpression || code_ == kThisPropertyExpression;
+ bool IsProperty() const {
+ return (code_ & kPropertyExpression) == kPropertyExpression ||
+ (code_ & kThisPropertyExpression) == kThisPropertyExpression;
}
- bool IsCall() { return code_ == kCallExpression; }
+ bool IsCall() const { return (code_ & kCallExpression) == kCallExpression; }
- bool IsValidReferenceExpression() {
+ bool IsValidReferenceExpression() const {
return IsIdentifier() || IsProperty();
}
--- /dev/null
+// Copyright 2014 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: --min-preparse-length 1
+
+// Arrow function parsing (commit r22366) changed the flags stored in
+// PreParserExpression, and IsValidReferenceExpression() would return
+// false for certain valid expressions. This case is the minimum amount
+// of code needed to validate that IsValidReferenceExpression() works
+// properly. If it does not, a ReferenceError is thrown during parsing.
+
+function f() { ++(this.foo) }