Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: src/preparser.h

Issue 943543002: [strong] Declaration-after-use errors. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: computed prop names comment fix Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/parser.cc ('k') | src/scopes.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_PREPARSER_H 5 #ifndef V8_PREPARSER_H
6 #define V8_PREPARSER_H 6 #define V8_PREPARSER_H
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 1396 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 return PreParserExpression::Default(); 1407 return PreParserExpression::Default();
1408 } 1408 }
1409 1409
1410 static PreParserExpression ExpressionFromLiteral( 1410 static PreParserExpression ExpressionFromLiteral(
1411 Token::Value token, int pos, Scanner* scanner, 1411 Token::Value token, int pos, Scanner* scanner,
1412 PreParserFactory* factory) { 1412 PreParserFactory* factory) {
1413 return PreParserExpression::Default(); 1413 return PreParserExpression::Default();
1414 } 1414 }
1415 1415
1416 static PreParserExpression ExpressionFromIdentifier( 1416 static PreParserExpression ExpressionFromIdentifier(
1417 PreParserIdentifier name, int pos, Scope* scope, 1417 PreParserIdentifier name, int start_position, int end_position,
1418 PreParserFactory* factory) { 1418 Scope* scope, PreParserFactory* factory) {
1419 return PreParserExpression::FromIdentifier(name); 1419 return PreParserExpression::FromIdentifier(name);
1420 } 1420 }
1421 1421
1422 PreParserExpression ExpressionFromString(int pos, 1422 PreParserExpression ExpressionFromString(int pos,
1423 Scanner* scanner, 1423 Scanner* scanner,
1424 PreParserFactory* factory = NULL); 1424 PreParserFactory* factory = NULL);
1425 1425
1426 PreParserExpression GetIterator(PreParserExpression iterable, 1426 PreParserExpression GetIterator(PreParserExpression iterable,
1427 PreParserFactory* factory) { 1427 PreParserFactory* factory) {
1428 return PreParserExpression::Default(); 1428 return PreParserExpression::Default();
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
1858 // Identifier 1858 // Identifier
1859 // Number 1859 // Number
1860 // String 1860 // String
1861 // ArrayLiteral 1861 // ArrayLiteral
1862 // ObjectLiteral 1862 // ObjectLiteral
1863 // RegExpLiteral 1863 // RegExpLiteral
1864 // ClassLiteral 1864 // ClassLiteral
1865 // '(' Expression ')' 1865 // '(' Expression ')'
1866 // TemplateLiteral 1866 // TemplateLiteral
1867 1867
1868 int pos = peek_position(); 1868 int beg_pos = scanner()->peek_location().beg_pos;
1869 int end_pos = scanner()->peek_location().end_pos;
1869 ExpressionT result = this->EmptyExpression(); 1870 ExpressionT result = this->EmptyExpression();
1870 Token::Value token = peek(); 1871 Token::Value token = peek();
1871 switch (token) { 1872 switch (token) {
1872 case Token::THIS: { 1873 case Token::THIS: {
1873 Consume(Token::THIS); 1874 Consume(Token::THIS);
1874 scope_->RecordThisUsage(); 1875 scope_->RecordThisUsage();
1875 result = this->ThisExpression(scope_, factory(), pos); 1876 result = this->ThisExpression(scope_, factory(), beg_pos);
1876 break; 1877 break;
1877 } 1878 }
1878 1879
1879 case Token::NULL_LITERAL: 1880 case Token::NULL_LITERAL:
1880 case Token::TRUE_LITERAL: 1881 case Token::TRUE_LITERAL:
1881 case Token::FALSE_LITERAL: 1882 case Token::FALSE_LITERAL:
1882 case Token::NUMBER: 1883 case Token::NUMBER:
1883 Next(); 1884 Next();
1884 result = this->ExpressionFromLiteral(token, pos, scanner(), factory()); 1885 result =
1886 this->ExpressionFromLiteral(token, beg_pos, scanner(), factory());
1885 break; 1887 break;
1886 1888
1887 case Token::IDENTIFIER: 1889 case Token::IDENTIFIER:
1888 case Token::LET: 1890 case Token::LET:
1889 case Token::STATIC: 1891 case Token::STATIC:
1890 case Token::YIELD: 1892 case Token::YIELD:
1891 case Token::FUTURE_STRICT_RESERVED_WORD: { 1893 case Token::FUTURE_STRICT_RESERVED_WORD: {
1892 // Using eval or arguments in this context is OK even in strict mode. 1894 // Using eval or arguments in this context is OK even in strict mode.
1893 IdentifierT name = ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); 1895 IdentifierT name = ParseIdentifier(kAllowEvalOrArguments, CHECK_OK);
1894 result = this->ExpressionFromIdentifier(name, pos, scope_, factory()); 1896 result = this->ExpressionFromIdentifier(name, beg_pos, end_pos, scope_,
1897 factory());
1895 break; 1898 break;
1896 } 1899 }
1897 1900
1898 case Token::STRING: { 1901 case Token::STRING: {
1899 Consume(Token::STRING); 1902 Consume(Token::STRING);
1900 result = this->ExpressionFromString(pos, scanner(), factory()); 1903 result = this->ExpressionFromString(beg_pos, scanner(), factory());
1901 break; 1904 break;
1902 } 1905 }
1903 1906
1904 case Token::ASSIGN_DIV: 1907 case Token::ASSIGN_DIV:
1905 result = this->ParseRegExpLiteral(true, CHECK_OK); 1908 result = this->ParseRegExpLiteral(true, CHECK_OK);
1906 break; 1909 break;
1907 1910
1908 case Token::DIV: 1911 case Token::DIV:
1909 result = this->ParseRegExpLiteral(false, CHECK_OK); 1912 result = this->ParseRegExpLiteral(false, CHECK_OK);
1910 break; 1913 break;
1911 1914
1912 case Token::LBRACK: 1915 case Token::LBRACK:
1913 result = this->ParseArrayLiteral(CHECK_OK); 1916 result = this->ParseArrayLiteral(CHECK_OK);
1914 break; 1917 break;
1915 1918
1916 case Token::LBRACE: 1919 case Token::LBRACE:
1917 result = this->ParseObjectLiteral(CHECK_OK); 1920 result = this->ParseObjectLiteral(CHECK_OK);
1918 break; 1921 break;
1919 1922
1920 case Token::LPAREN: 1923 case Token::LPAREN:
1921 Consume(Token::LPAREN); 1924 Consume(Token::LPAREN);
1922 if (allow_harmony_arrow_functions() && peek() == Token::RPAREN) { 1925 if (allow_harmony_arrow_functions() && peek() == Token::RPAREN) {
1923 // Arrow functions are the only expression type constructions 1926 // Arrow functions are the only expression type constructions
1924 // for which an empty parameter list "()" is valid input. 1927 // for which an empty parameter list "()" is valid input.
1925 Consume(Token::RPAREN); 1928 Consume(Token::RPAREN);
1926 result = this->ParseArrowFunctionLiteral( 1929 result = this->ParseArrowFunctionLiteral(
1927 pos, this->EmptyArrowParamList(), CHECK_OK); 1930 beg_pos, this->EmptyArrowParamList(), CHECK_OK);
1928 } else { 1931 } else {
1929 // Heuristically try to detect immediately called functions before 1932 // Heuristically try to detect immediately called functions before
1930 // seeing the call parentheses. 1933 // seeing the call parentheses.
1931 parenthesized_function_ = (peek() == Token::FUNCTION); 1934 parenthesized_function_ = (peek() == Token::FUNCTION);
1932 result = this->ParseExpression(true, CHECK_OK); 1935 result = this->ParseExpression(true, CHECK_OK);
1933 result->increase_parenthesization_level(); 1936 result->increase_parenthesization_level();
1934 Expect(Token::RPAREN, CHECK_OK); 1937 Expect(Token::RPAREN, CHECK_OK);
1935 } 1938 }
1936 break; 1939 break;
1937 1940
(...skipping 14 matching lines...) Expand all
1952 class_name_location = scanner()->location(); 1955 class_name_location = scanner()->location();
1953 } 1956 }
1954 result = this->ParseClassLiteral(name, class_name_location, 1957 result = this->ParseClassLiteral(name, class_name_location,
1955 is_strict_reserved_name, 1958 is_strict_reserved_name,
1956 class_token_position, CHECK_OK); 1959 class_token_position, CHECK_OK);
1957 break; 1960 break;
1958 } 1961 }
1959 1962
1960 case Token::TEMPLATE_SPAN: 1963 case Token::TEMPLATE_SPAN:
1961 case Token::TEMPLATE_TAIL: 1964 case Token::TEMPLATE_TAIL:
1962 result = 1965 result = this->ParseTemplateLiteral(Traits::NoTemplateTag(), beg_pos,
1963 this->ParseTemplateLiteral(Traits::NoTemplateTag(), pos, CHECK_OK); 1966 CHECK_OK);
1964 break; 1967 break;
1965 1968
1966 case Token::MOD: 1969 case Token::MOD:
1967 if (allow_natives() || extension_ != NULL) { 1970 if (allow_natives() || extension_ != NULL) {
1968 result = this->ParseV8Intrinsic(CHECK_OK); 1971 result = this->ParseV8Intrinsic(CHECK_OK);
1969 break; 1972 break;
1970 } 1973 }
1971 // If we're not allowing special syntax we fall-through to the 1974 // If we're not allowing special syntax we fall-through to the
1972 // default case. 1975 // default case.
1973 1976
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
2099 bool* ok) { 2102 bool* ok) {
2100 DCHECK(!in_class || is_static || has_seen_constructor != nullptr); 2103 DCHECK(!in_class || is_static || has_seen_constructor != nullptr);
2101 ExpressionT value = this->EmptyExpression(); 2104 ExpressionT value = this->EmptyExpression();
2102 IdentifierT name = this->EmptyIdentifier(); 2105 IdentifierT name = this->EmptyIdentifier();
2103 bool is_get = false; 2106 bool is_get = false;
2104 bool is_set = false; 2107 bool is_set = false;
2105 bool name_is_static = false; 2108 bool name_is_static = false;
2106 bool is_generator = allow_harmony_object_literals_ && Check(Token::MUL); 2109 bool is_generator = allow_harmony_object_literals_ && Check(Token::MUL);
2107 2110
2108 Token::Value name_token = peek(); 2111 Token::Value name_token = peek();
2109 int next_pos = peek_position(); 2112 int next_beg_pos = scanner()->peek_location().beg_pos;
2113 int next_end_pos = scanner()->peek_location().end_pos;
2110 ExpressionT name_expression = ParsePropertyName( 2114 ExpressionT name_expression = ParsePropertyName(
2111 &name, &is_get, &is_set, &name_is_static, is_computed_name, 2115 &name, &is_get, &is_set, &name_is_static, is_computed_name,
2112 CHECK_OK_CUSTOM(EmptyObjectLiteralProperty)); 2116 CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
2113 2117
2114 if (fni_ != nullptr && !*is_computed_name) { 2118 if (fni_ != nullptr && !*is_computed_name) {
2115 this->PushLiteralName(fni_, name); 2119 this->PushLiteralName(fni_, name);
2116 } 2120 }
2117 2121
2118 if (!in_class && !is_generator && peek() == Token::COLON) { 2122 if (!in_class && !is_generator && peek() == Token::COLON) {
2119 // PropertyDefinition : PropertyName ':' AssignmentExpression 2123 // PropertyDefinition : PropertyName ':' AssignmentExpression
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
2194 return factory()->NewObjectLiteralProperty( 2198 return factory()->NewObjectLiteralProperty(
2195 name_expression, value, 2199 name_expression, value,
2196 is_get ? ObjectLiteralProperty::GETTER : ObjectLiteralProperty::SETTER, 2200 is_get ? ObjectLiteralProperty::GETTER : ObjectLiteralProperty::SETTER,
2197 is_static, *is_computed_name); 2201 is_static, *is_computed_name);
2198 2202
2199 } else if (!in_class && allow_harmony_object_literals_ && 2203 } else if (!in_class && allow_harmony_object_literals_ &&
2200 Token::IsIdentifier(name_token, language_mode(), 2204 Token::IsIdentifier(name_token, language_mode(),
2201 this->is_generator())) { 2205 this->is_generator())) {
2202 DCHECK(!*is_computed_name); 2206 DCHECK(!*is_computed_name);
2203 DCHECK(!is_static); 2207 DCHECK(!is_static);
2204 value = this->ExpressionFromIdentifier(name, next_pos, scope_, factory()); 2208 value = this->ExpressionFromIdentifier(name, next_beg_pos, next_end_pos,
2209 scope_, factory());
2205 return factory()->NewObjectLiteralProperty( 2210 return factory()->NewObjectLiteralProperty(
2206 name_expression, value, ObjectLiteralProperty::COMPUTED, false, false); 2211 name_expression, value, ObjectLiteralProperty::COMPUTED, false, false);
2207 2212
2208 } else { 2213 } else {
2209 Token::Value next = Next(); 2214 Token::Value next = Next();
2210 ReportUnexpectedToken(next); 2215 ReportUnexpectedToken(next);
2211 *ok = false; 2216 *ok = false;
2212 return this->EmptyObjectLiteralProperty(); 2217 return this->EmptyObjectLiteralProperty();
2213 } 2218 }
2214 2219
(...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after
3109 *ok = false; 3114 *ok = false;
3110 return; 3115 return;
3111 } 3116 }
3112 has_seen_constructor_ = true; 3117 has_seen_constructor_ = true;
3113 return; 3118 return;
3114 } 3119 }
3115 } 3120 }
3116 } } // v8::internal 3121 } } // v8::internal
3117 3122
3118 #endif // V8_PREPARSER_H 3123 #endif // V8_PREPARSER_H
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/scopes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698