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

Unified Diff: runtime/vm/object.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.cc
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index f67ade566f075fa6a6f7fa31eb9b0eee835bc6c0..cbe16025761d7a41c0224e8358fd7f917f66653a 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -56,9 +56,6 @@ DEFINE_FLAG(bool, overlap_type_arguments, true,
DEFINE_FLAG(bool, show_internal_names, false,
"Show names of internal classes (e.g. \"OneByteString\") in error messages "
"instead of showing the corresponding interface names (e.g. \"String\")");
-DEFINE_FLAG(bool, throw_on_javascript_int_overflow, false,
- "Throw an exception when the result of an integer calculation will not "
- "fit into a javascript integer.");
DEFINE_FLAG(bool, trace_cha, false, "Trace CHA operations");
DEFINE_FLAG(bool, use_field_guards, true, "Guard field cids.");
DEFINE_FLAG(bool, use_lib_cache, true, "Use library name cache");
@@ -11745,35 +11742,6 @@ void ICData::AddDeoptReason(DeoptReasonId reason) const {
}
-bool ICData::IssuedJSWarning() const {
- return IssuedJSWarningBit::decode(raw_ptr()->state_bits_);
-}
-
-
-void ICData::SetIssuedJSWarning() const {
- StoreNonPointer(&raw_ptr()->state_bits_,
- IssuedJSWarningBit::update(true, raw_ptr()->state_bits_));
-}
-
-
-bool ICData::MayCheckForJSWarning() const {
- const String& name = String::Handle(target_name());
- // Warning issued from native code.
- // Calling sequence is decoded to obtain ic data in order to check if a
- // warning has already been issued.
- if (name.Equals(Library::PrivateCoreLibName(Symbols::_instanceOf())) ||
- name.Equals(Library::PrivateCoreLibName(Symbols::_as()))) {
- return true;
- }
- // Warning issued in ic miss handler.
- // No decoding necessary, so allow optimization if warning already issued.
- if (name.Equals(Symbols::toString()) && !IssuedJSWarning()) {
- return true;
- }
- return false;
-}
-
-
void ICData::set_state_bits(uint32_t bits) const {
StoreNonPointer(&raw_ptr()->state_bits_, bits);
}
@@ -16911,16 +16879,6 @@ const char* Integer::ToCString() const {
}
-// Throw JavascriptIntegerOverflow exception.
-static void ThrowJavascriptIntegerOverflow(const Integer& i) {
- const Array& exc_args = Array::Handle(Array::New(1));
- const String& i_str = String::Handle(String::New(i.ToCString()));
- exc_args.SetAt(0, i_str);
- Exceptions::ThrowByType(Exceptions::kJavascriptIntegerOverflowError,
- exc_args);
-}
-
-
RawInteger* Integer::New(const String& str, Heap::Space space) {
// We are not supposed to have integers represented as two byte strings.
ASSERT(str.IsOneByteString());
@@ -16930,19 +16888,12 @@ RawInteger* Integer::New(const String& str, Heap::Space space) {
Bigint::NewFromCString(str.ToCString(), space));
ASSERT(!big.FitsIntoSmi());
ASSERT(!big.FitsIntoInt64());
- if (FLAG_throw_on_javascript_int_overflow) {
- ThrowJavascriptIntegerOverflow(big);
- }
return big.raw();
}
return Integer::New(value, space);
}
-// This is called from LiteralToken::New() in the parser, so we can't
-// raise an exception for javascript overflow here. Instead we do it in
-// Parser::CurrentIntegerLiteral(), which is the point in the parser where
-// integer literals escape, so we can call Parser::ErrorMsg().
RawInteger* Integer::NewCanonical(const String& str) {
// We are not supposed to have integers represented as two byte strings.
ASSERT(str.IsOneByteString());
@@ -16960,16 +16911,8 @@ RawInteger* Integer::NewCanonical(const String& str) {
}
-RawInteger* Integer::New(int64_t value, Heap::Space space, const bool silent) {
+RawInteger* Integer::New(int64_t value, Heap::Space space) {
const bool is_smi = Smi::IsValid(value);
- if (!silent &&
- FLAG_throw_on_javascript_int_overflow &&
- !Utils::IsJavascriptInt(value)) {
- const Integer& i = is_smi ?
- Integer::Handle(Smi::New(static_cast<intptr_t>(value))) :
- Integer::Handle(Mint::New(value, space));
- ThrowJavascriptIntegerOverflow(i);
- }
if (is_smi) {
return Smi::New(static_cast<intptr_t>(value));
}
@@ -16979,10 +16922,6 @@ RawInteger* Integer::New(int64_t value, Heap::Space space, const bool silent) {
RawInteger* Integer::NewFromUint64(uint64_t value, Heap::Space space) {
if (value > static_cast<uint64_t>(Mint::kMaxValue)) {
- if (FLAG_throw_on_javascript_int_overflow) {
- const Integer &i = Integer::Handle(Bigint::NewFromUint64(value, space));
- ThrowJavascriptIntegerOverflow(i);
- }
return Bigint::NewFromUint64(value, space);
} else {
return Integer::New(value, space);
@@ -17046,31 +16985,7 @@ int Integer::CompareWith(const Integer& other) const {
}
-// Returns true if the signed Integer does not fit into a
-// Javascript integer.
-bool Integer::CheckJavascriptIntegerOverflow() const {
- // Always overflow if the value doesn't fit into an int64_t.
- int64_t value = 1ULL << 63;
- if (IsSmi()) {
- value = AsInt64Value();
- } else if (IsMint()) {
- Mint& mint = Mint::Handle();
- mint ^= raw();
- value = mint.value();
- } else {
- if (Bigint::Cast(*this).FitsIntoInt64()) {
- value = AsInt64Value();
- }
- }
- return !Utils::IsJavascriptInt(value);
-}
-
-
RawInteger* Integer::AsValidInteger() const {
- if (FLAG_throw_on_javascript_int_overflow &&
- CheckJavascriptIntegerOverflow()) {
- ThrowJavascriptIntegerOverflow(*this);
- }
if (IsSmi()) return raw();
if (IsMint()) {
Mint& mint = Mint::Handle();
@@ -17240,8 +17155,7 @@ RawInteger* Integer::BitOp(
// TODO(srdjan): Clarify handling of negative right operand in a shift op.
RawInteger* Smi::ShiftOp(Token::Kind kind,
const Smi& other,
- Heap::Space space,
- const bool silent) const {
+ Heap::Space space) const {
intptr_t result = 0;
const intptr_t left_value = Value();
const intptr_t right_value = other.Value();
@@ -17258,7 +17172,7 @@ RawInteger* Smi::ShiftOp(Token::Kind kind,
return Bigint::NewFromShiftedInt64(left_value, right_value, space);
} else {
int64_t left_64 = left_value;
- return Integer::New(left_64 << right_value, space, silent);
+ return Integer::New(left_64 << right_value, space);
}
}
}
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698