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

Unified Diff: runtime/vm/parser.cc

Issue 16664003: Improvements to 53-bit overflow checking. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 23771)
+++ runtime/vm/parser.cc (working copy)
@@ -29,6 +29,7 @@
DEFINE_FLAG(bool, trace_parser, false, "Trace parser operations.");
DEFINE_FLAG(bool, warning_as_error, false, "Treat warnings as errors.");
DEFINE_FLAG(bool, silent_warnings, false, "Silence warnings.");
+DECLARE_FLAG(bool, throw_on_javascript_int_overflow);
static void CheckedModeHandler(bool value) {
FLAG_enable_asserts = value;
@@ -402,7 +403,15 @@
RawInteger* Parser::CurrentIntegerLiteral() const {
literal_token_ ^= tokens_iterator_.CurrentToken();
ASSERT(literal_token_.kind() == Token::kINTEGER);
- return Integer::RawCast(literal_token_.value());
+ RawInteger* ri = Integer::RawCast(literal_token_.value());
+ if (FLAG_throw_on_javascript_int_overflow) {
+ const Integer& i = Integer::Handle(ri);
+ if (i.CheckFiftyThreeBitOverflow()) {
+ ErrorMsg(TokenPos(), "Integer literal does not fit in 53 bits: %s.",
+ i.ToCString());
+ }
+ }
+ return ri;
}
@@ -6571,7 +6580,7 @@
}
-void Parser::ErrorMsg(intptr_t token_pos, const char* format, ...) {
+void Parser::ErrorMsg(intptr_t token_pos, const char* format, ...) const {
va_list args;
va_start(args, format);
const Error& error = Error::Handle(

Powered by Google App Engine
This is Rietveld 408576698