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

Unified Diff: runtime/vm/parser.cc

Issue 9664029: Fix type check to perform a subtype test at top level instead of an (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 9 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.cc ('k') | tests/co19/co19-runtime.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 5412)
+++ runtime/vm/parser.cc (working copy)
@@ -7087,10 +7087,11 @@
Error& malformed_error = Error::Handle();
if (!element_type.IsInstantiated() ||
!element->IsLiteralNode() ||
- !element->AsLiteralNode()->literal().
- IsAssignableTo(element_type,
- TypeArguments::Handle(),
- &malformed_error)) {
+ (!element->AsLiteralNode()->literal().IsNull() &&
+ !element->AsLiteralNode()->literal().IsInstanceOf(
+ element_type,
+ TypeArguments::Handle(),
+ &malformed_error))) {
element = new AssignableNode(element_pos,
element,
element_type,
@@ -7120,8 +7121,9 @@
ASSERT(elem->IsLiteralNode());
if (FLAG_enable_type_checks &&
!element_type.IsDynamicType() &&
- !elem->AsLiteralNode()->literal().IsAssignableTo(
- element_type, TypeArguments::Handle(), &malformed_error)) {
+ (!elem->AsLiteralNode()->literal().IsNull() &&
+ !elem->AsLiteralNode()->literal().IsInstanceOf(
+ element_type, TypeArguments::Handle(), &malformed_error))) {
// If the failure is due to a malformed type error, display it instead.
if (!malformed_error.IsNull()) {
ErrorMsg(malformed_error);
@@ -7272,8 +7274,9 @@
Error& malformed_error = Error::Handle();
if (!value_type.IsInstantiated() ||
!value->IsLiteralNode() ||
- !value->AsLiteralNode()->literal().IsAssignableTo(
- value_type, TypeArguments::Handle(), &malformed_error)) {
+ (!value->AsLiteralNode()->literal().IsNull() &&
+ !value->AsLiteralNode()->literal().IsInstanceOf(
+ value_type, TypeArguments::Handle(), &malformed_error))) {
value = new AssignableNode(value_pos,
value,
value_type,
@@ -7307,8 +7310,9 @@
if (FLAG_enable_type_checks &&
((i % 2) == 1) && // Check values only, not keys.
!value_type.IsDynamicType() &&
- !arg->AsLiteralNode()->literal().IsAssignableTo(
- value_type, TypeArguments::Handle(), &malformed_error)) {
+ (!arg->AsLiteralNode()->literal().IsNull() &&
+ !arg->AsLiteralNode()->literal().IsInstanceOf(
+ value_type, TypeArguments::Handle(), &malformed_error))) {
// If the failure is due to a malformed type error, display it instead.
if (!malformed_error.IsNull()) {
ErrorMsg(malformed_error);
« no previous file with comments | « runtime/vm/object.cc ('k') | tests/co19/co19-runtime.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698