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

Side by Side Diff: runtime/vm/parser.cc

Issue 1690903003: Remove support for Javascript warnings in the VM. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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 | « runtime/vm/object.cc ('k') | runtime/vm/precompiler.cc » ('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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/parser.h" 5 #include "vm/parser.h"
6 #include "vm/flags.h" 6 #include "vm/flags.h"
7 7
8 #ifndef DART_PRECOMPILED_RUNTIME 8 #ifndef DART_PRECOMPILED_RUNTIME
9 9
10 #include "lib/invocation_mirror.h" 10 #include "lib/invocation_mirror.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 DEFINE_FLAG(bool, conditional_directives, false, 52 DEFINE_FLAG(bool, conditional_directives, false,
53 "Enable conditional directives"); 53 "Enable conditional directives");
54 DEFINE_FLAG(bool, warn_super, false, 54 DEFINE_FLAG(bool, warn_super, false,
55 "Warning if super initializer not last in initializer list."); 55 "Warning if super initializer not last in initializer list.");
56 DEFINE_FLAG(bool, await_is_keyword, false, 56 DEFINE_FLAG(bool, await_is_keyword, false,
57 "await and yield are treated as proper keywords in synchronous code."); 57 "await and yield are treated as proper keywords in synchronous code.");
58 58
59 DECLARE_FLAG(bool, lazy_dispatchers); 59 DECLARE_FLAG(bool, lazy_dispatchers);
60 DECLARE_FLAG(bool, load_deferred_eagerly); 60 DECLARE_FLAG(bool, load_deferred_eagerly);
61 DECLARE_FLAG(bool, profile_vm); 61 DECLARE_FLAG(bool, profile_vm);
62 DECLARE_FLAG(bool, throw_on_javascript_int_overflow);
63 DECLARE_FLAG(bool, warn_on_javascript_compatibility);
64 62
65 // Quick access to the current thread, isolate and zone. 63 // Quick access to the current thread, isolate and zone.
66 #define T (thread()) 64 #define T (thread())
67 #define I (isolate()) 65 #define I (isolate())
68 #define Z (zone()) 66 #define Z (zone())
69 67
70 // Quick synthetic token position. 68 // Quick synthetic token position.
71 #define ST(token_pos) ((token_pos).ToSynthetic()) 69 #define ST(token_pos) ((token_pos).ToSynthetic())
72 70
73 #if defined(DEBUG) 71 #if defined(DEBUG)
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 literal_token_ ^= tokens_iterator_.CurrentToken(); 529 literal_token_ ^= tokens_iterator_.CurrentToken();
532 ASSERT(literal_token_.kind() == Token::kDOUBLE); 530 ASSERT(literal_token_.kind() == Token::kDOUBLE);
533 return Double::RawCast(literal_token_.value()); 531 return Double::RawCast(literal_token_.value());
534 } 532 }
535 533
536 534
537 RawInteger* Parser::CurrentIntegerLiteral() const { 535 RawInteger* Parser::CurrentIntegerLiteral() const {
538 literal_token_ ^= tokens_iterator_.CurrentToken(); 536 literal_token_ ^= tokens_iterator_.CurrentToken();
539 ASSERT(literal_token_.kind() == Token::kINTEGER); 537 ASSERT(literal_token_.kind() == Token::kINTEGER);
540 RawInteger* ri = Integer::RawCast(literal_token_.value()); 538 RawInteger* ri = Integer::RawCast(literal_token_.value());
541 if (FLAG_throw_on_javascript_int_overflow) {
542 const Integer& i = Integer::Handle(Z, ri);
543 if (i.CheckJavascriptIntegerOverflow()) {
544 ReportError(TokenPos(),
545 "Integer literal does not fit in a Javascript integer: %s.",
546 i.ToCString());
547 }
548 }
549 return ri; 539 return ri;
550 } 540 }
551 541
552 542
553 struct ParamDesc { 543 struct ParamDesc {
554 ParamDesc() 544 ParamDesc()
555 : type(NULL), 545 : type(NULL),
556 name_pos(TokenPosition::kNoSource), 546 name_pos(TokenPosition::kNoSource),
557 name(NULL), 547 name(NULL),
558 default_value(NULL), 548 default_value(NULL),
(...skipping 10550 matching lines...) Expand 10 before | Expand all | Expand 10 after
11109 cls, 11099 cls,
11110 func_name, 11100 func_name,
11111 arguments, 11101 arguments,
11112 InvocationMirror::kStatic, 11102 InvocationMirror::kStatic,
11113 InvocationMirror::kMethod, 11103 InvocationMirror::kMethod,
11114 NULL); // No existing function. 11104 NULL); // No existing function.
11115 } else if (cls.IsTopLevel() && 11105 } else if (cls.IsTopLevel() &&
11116 (cls.library() == Library::CoreLibrary()) && 11106 (cls.library() == Library::CoreLibrary()) &&
11117 (func.name() == Symbols::Identical().raw())) { 11107 (func.name() == Symbols::Identical().raw())) {
11118 // This is the predefined toplevel function identical(a,b). 11108 // This is the predefined toplevel function identical(a,b).
11119 // Create a comparison node instead of a static call to the function, unless 11109 // Create a comparison node instead of a static call to the function.
11120 // javascript warnings are desired and identical is not invoked from a patch 11110 ASSERT(num_arguments == 2);
11121 // source.
11122 if (!FLAG_warn_on_javascript_compatibility || is_patch_source()) {
11123 ASSERT(num_arguments == 2);
11124 11111
11125 // If both arguments are constant expressions of type string, 11112 // If both arguments are constant expressions of type string,
11126 // evaluate and canonicalize them. 11113 // evaluate and canonicalize them.
11127 // This guarantees that identical("ab", "a"+"b") is true. 11114 // This guarantees that identical("ab", "a"+"b") is true.
11128 // An alternative way to guarantee this would be to introduce 11115 // An alternative way to guarantee this would be to introduce
11129 // an AST node that canonicalizes a value. 11116 // an AST node that canonicalizes a value.
11130 AstNode* arg0 = arguments->NodeAt(0); 11117 AstNode* arg0 = arguments->NodeAt(0);
11131 const Instance* val0 = arg0->EvalConstExpr(); 11118 const Instance* val0 = arg0->EvalConstExpr();
11132 if ((val0 != NULL) && (val0->IsString())) { 11119 if ((val0 != NULL) && (val0->IsString())) {
11133 AstNode* arg1 = arguments->NodeAt(1); 11120 AstNode* arg1 = arguments->NodeAt(1);
11134 const Instance* val1 = arg1->EvalConstExpr(); 11121 const Instance* val1 = arg1->EvalConstExpr();
11135 if ((val1 != NULL) && (val1->IsString())) { 11122 if ((val1 != NULL) && (val1->IsString())) {
11136 arguments->SetNodeAt(0, 11123 arguments->SetNodeAt(0,
11137 new(Z) LiteralNode(arg0->token_pos(), 11124 new(Z) LiteralNode(arg0->token_pos(),
11138 EvaluateConstExpr(arg0->token_pos(), arg0))); 11125 EvaluateConstExpr(arg0->token_pos(), arg0)));
11139 arguments->SetNodeAt(1, 11126 arguments->SetNodeAt(1,
11140 new(Z) LiteralNode(arg1->token_pos(), 11127 new(Z) LiteralNode(arg1->token_pos(),
11141 EvaluateConstExpr(arg1->token_pos(), arg1))); 11128 EvaluateConstExpr(arg1->token_pos(), arg1)));
11142 }
11143 } 11129 }
11144 return new(Z) ComparisonNode(ident_pos,
11145 Token::kEQ_STRICT,
11146 arguments->NodeAt(0),
11147 arguments->NodeAt(1));
11148 } 11130 }
11131 return new(Z) ComparisonNode(ident_pos,
11132 Token::kEQ_STRICT,
11133 arguments->NodeAt(0),
11134 arguments->NodeAt(1));
11149 } 11135 }
11150 return new(Z) StaticCallNode(ident_pos, func, arguments); 11136 return new(Z) StaticCallNode(ident_pos, func, arguments);
11151 } 11137 }
11152 11138
11153 11139
11154 AstNode* Parser::ParseInstanceCall(AstNode* receiver, 11140 AstNode* Parser::ParseInstanceCall(AstNode* receiver,
11155 const String& func_name, 11141 const String& func_name,
11156 TokenPosition ident_pos, 11142 TokenPosition ident_pos,
11157 bool is_conditional) { 11143 bool is_conditional) {
11158 TRACE_PARSER("ParseInstanceCall"); 11144 TRACE_PARSER("ParseInstanceCall");
(...skipping 3262 matching lines...) Expand 10 before | Expand all | Expand 10 after
14421 const ArgumentListNode& function_args, 14407 const ArgumentListNode& function_args,
14422 const LocalVariable* temp_for_last_arg, 14408 const LocalVariable* temp_for_last_arg,
14423 bool is_super_invocation) { 14409 bool is_super_invocation) {
14424 UNREACHABLE(); 14410 UNREACHABLE();
14425 return NULL; 14411 return NULL;
14426 } 14412 }
14427 14413
14428 } // namespace dart 14414 } // namespace dart
14429 14415
14430 #endif // DART_PRECOMPILED_RUNTIME 14416 #endif // DART_PRECOMPILED_RUNTIME
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/precompiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698