Commit Graph

2925 Commits

Author SHA1 Message Date
asiva@google.com 9fb8b89682 1. Delete prolog weak persistent handles when shutting down an isolate
2. Remove the peer_ field from RawExternalTypedData as it is not used anywhere

R=iposva@google.com

Review URL: https://codereview.chromium.org//136853004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31797 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-14 19:55:46 +00:00
regis@google.com c2f0dec5ec Support bounded mixins in the VM (fix issue 14453).
Add tests.

R=gbracha@google.com, hausner@google.com

Review URL: https://codereview.chromium.org//137543004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31794 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-14 18:41:27 +00:00
asiva@google.com 2935066d40 Fix for Issue 15911, use IsInlinable() to determine if TryInlineRecognizedMethod needs to be called. Set is_inlinable to false when a function is marked as not optimizable.
R=fschneider@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//126683002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31616 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-08 17:49:27 +00:00
regis@google.com 06830dbbd2 Use a trail instead of a mark bit when processing recursive types in the VM
(issue 15595).

R=asiva@google.com, rmacnak@google.com

Review URL: https://codereview.chromium.org//109593003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31584 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-07 21:55:07 +00:00
johnmccutchan@google.com 7da1f4f3ba Build map of code regions and address ticks for profile report.
Profile pauses should be less than 500 ms even when handling 120,000 samples (2 minutes @ 1000 hz).
Code objects are referenced by hex address: "code/cafebabe".
Test for retrieving code objects over the service.
Remove old profile tool scripts. Replaced by dprof (https://github.com/dart-lang/dprof) and Observatory UI for profiler.
Support for stable service refs to implicit closures and dispatcher functions.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//100103011

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31447 260f80e4-7a28-3924-810f-c04153c831b5
2014-01-03 19:55:50 +00:00
iposva@google.com bb976e4a94 - Allow to pre-filter before calling the FindObjectVisitor.
R=asiva@google.com, johnmccutchan@google.com

Review URL: https://codereview.chromium.org//110883016

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31408 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-31 00:27:16 +00:00
johnmccutchan@google.com 42875e91e7 Some cleanups
R=asiva@google.com

Review URL: https://codereview.chromium.org//116343004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31386 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-27 16:56:21 +00:00
johnmccutchan@google.com 2841eca717 Fix release mode crash in String::DecodeURI.
BUG=

Review URL: https://codereview.chromium.org//101653007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31360 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 23:31:55 +00:00
johnmccutchan@google.com 727d29d6b6 Refactor VM service IDs:
- IDs are strings which can be concatenated together like paths.
- Isolate ID is now "/isolates/XXX"
- Function, field, class, library, and script IDs are now stable.
- Introduce <type-ref> tags.

R=turnidge@google.com

Review URL: https://codereview.chromium.org//98253009

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31358 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 22:35:55 +00:00
regis@google.com 3bdeaf9813 Add missing ResolveType call (fix issue 15738).
Remove unused parameter from ResolveType.

Review URL: https://codereview.chromium.org//113163008

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31336 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 14:26:53 +00:00
regis@google.com b5a2dea566 Convert InstantiatedTypeArguments to TypeArguments upon canonicalization.
R=iposva@google.com

Review URL: https://codereview.chromium.org//106793007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31325 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-20 09:20:55 +00:00
asiva@google.com a576fec3c0 Allow the native resolver to setup whether it needs the Dart API scope to
be setup automatically or not when a native function is invoked.
This would allow the embedder to treat some native functions as leaf
functions whose invocation can be very light.

R=hausner@google.com, zra@google.com

Review URL: https://codereview.chromium.org//117723002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31286 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-19 17:47:56 +00:00
asiva@google.com 64a261fbbd Changes to interpret the optimizable bit based on whether the function
is native or not.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//101753005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31207 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-17 22:07:41 +00:00
iposva@google.com e100129f8e - Use canonicalized type of non-parameterized classes when
available.
- Do not attempt to make types for objects of Context.

R=fschneider@google.com, regis@google.com

Review URL: https://codereview.chromium.org//102053010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31194 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-17 16:59:14 +00:00
fschneider@google.com 6abd6e326e Add mutable double boxes for fields.
This allows the optimizing compiler to generate unboxed loads/stores
to fields containing double values. The double value is stored
in a reusable double object.

Unboxed loads/stores are generated for optimized code. Unoptimized code
allocates a new double on loads. To avoid performance regressions
for fields that are only written few times (e.g. only in the constructor)
I put a heuristic in place that
compares the usage count of setters and getters. Unboxed operations
are only generated if the setter is invoked a significant amount of
times (threshold is 10% of getter invocations).

The CL is so big because it changes the way LocationSummmary
is allocated: We now have a bit to generate different summaries
for optimized and unoptimized code.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//99573005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31164 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-16 15:11:31 +00:00
turnidge@google.com 365cde2ecb Add GrowableObjectArray::ToUserCString().
Prints a decent representation of a list, subject to length
constraints.  Prints the length of the list if it is truncated.

e.g.

[]
[1,2,3]
["0123456789",...](length:4)

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//100603011

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31144 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-13 19:36:40 +00:00
regis@google.com fb6d24945f Introduce class TypeRef in the VM to fully support recursive types.
Fix issues 15244, 15148, 14869, 14000, and 13688 (was closed, but fragile).

Note that the current solution is not final as it may not be correct in more
complex cases not yet covered by language tests.
The final solution will require a 'trail' instead of a simple mark bit to
prevent operations involving recursive types to diverge.

R=asiva@google.com

Review URL: https://codereview.chromium.org//103913005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31087 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-11 22:51:19 +00:00
turnidge@google.com 21b867f851 Add an instance view page to the vmservice.
We can use this view to browse the field values of objects and explore
the heap a bit.

----------

Add field lists to the class and instance view pages.

Add field-ref and instance-ref elements.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//110703002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31074 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-11 18:03:42 +00:00
turnidge@google.com 29b080a4b1 Add Instance::ToUserCString.
-----

Often ToCString returns a representation which would be weighty or
unsightly to users.  Instance::ToUserCString tries to return a
representation that will be more familiar to end users.

ToUserCString will be used in the vmservice to produce interesting
instance preview strings w/o calling toString.  No doubt we will find
other uses for it too.

For example, strings are represented more as they would be in a user
program, with quotes and escapes: ("this\nis\ta\n\ntest") instead of (this
is        a

test).

I intend to add better representations for short lists and maps
later, e.g. ([1,2]) instead of (Instance(length:2) of '_GrowableList').
I've added some tests to track current behavior.

Fix a problem where the vm internal names for private classes were
leaking out through ToCString.  This is problematic because Dart's
default toString relies on ToCString (which surprised me).  This fix
will be user-visible and, darn it, it's the right thing to do.  For
example, before toString (in Dart) might yield:

  Instance of '_MyPrivateClass@43df89GARBAGE4389'

Now it will yield:

  Instance of '_MyPrivateClass'

(as an aside, do those single-quotes around the class name add any
meaning here?)

Massage the output of ToString for GrowableObjectArray to be more
consistent with other instance ToString output.  This should not be user
visible, as lists define a reasonable toString.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org//100833005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30996 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-09 19:47:23 +00:00
fschneider@google.com cd54507fc2 Mark native functions when they are created.
Until now the parser marked native functions as native when parsing.

This may be too late for some functions. E.g. the native typed list
constructor may not be invoked because the intrinsic code is executed
instead (unless for example new-space allocation fails).

This causes missing type information when optimizing functions using
those recognized factory functions like Uint8List._new.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//99373002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30846 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-04 10:32:43 +00:00
hausner@google.com 70aa249370 VM debugger: fix closures in mixed-in functions
Avoid assertion in debugger when compiling closures in mixin
functions.

R=asiva@google.com

Review URL: https://codereview.chromium.org//102453002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30823 260f80e4-7a28-3924-810f-c04153c831b5
2013-12-03 19:19:54 +00:00
johnmccutchan@google.com 589ea683c3 List scripts in library and display script source
BUG=
R=iposva@google.com

Review URL: https://codereview.chromium.org//59283007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30732 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-27 19:54:52 +00:00
johnmccutchan@google.com ff20eb09b0 Support Bigint parameters in Int32x4 constructor
https://code.google.com/p/dart/issues/detail?id=15130

R=srdjan@google.com

Review URL: https://codereview.chromium.org//88983004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30686 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-26 23:46:27 +00:00
rmacnak@google.com 314da361f0 Add demangle utility to Dartium's dart:html. Demangle typedef names in UserVisibleName.
BUG=http://dartbug.com/14892
R=asiva@google.com, vsm@google.com

Review URL: https://codereview.chromium.org//79023010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30636 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-25 18:31:20 +00:00
zra@google.com daf539e2f9 Fixes a couple problems with GC of unoptimized code.
1. Instead of making a pass before the Marking phase,
   this change does not visit code pointers in functions
   during marking. Then after marking, if the code has
   still not been marked, code pointers in functions
   are nulled out.
2. Since code pointers in functions may be nulled out,
   functions are no longer used as proxies for code in
   deoptimization info.

R=iposva@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//70183010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30600 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-23 00:17:28 +00:00
turnidge@google.com b354d77a3b Add field and function view for libraries. Rough cut.
R=iposva@google.com

Review URL: https://codereview.chromium.org//82793004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30596 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-22 23:02:11 +00:00
regis@google.com d1e945994e Improve type test and type equality for generics (issue 15148).
R=srdjan@google.com

Review URL: https://codereview.chromium.org//81363002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30546 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-21 21:30:51 +00:00
iposva@google.com 8d926653e1 - Ensure that classes are finalized before their description is
being generated for the observatory.
- Reset the state that a class is being currently parsed.
- Move the deployed polymer app to a location where it is not
  being overwritten by the tools.
- Do not rely on Dart SDK binaries being in your path.
- Check for errors when invoking dart2js as part of build.dart.

Review URL: https://codereview.chromium.org//77043010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30533 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-21 17:26:22 +00:00
johnmccutchan@google.com 97ac18aee9 Sampling profiler
BUG=4350
R=asiva@google.com

Review URL: https://codereview.chromium.org//25909002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30419 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-19 18:26:10 +00:00
regis@google.com db2cec593d Distinguish between malformed and malbounded types more efficiently using the
recently introduced LanguageError 'kind' field.

R=hausner@google.com

Review URL: https://codereview.chromium.org//75713002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30383 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-18 23:31:12 +00:00
fschneider@google.com 07e814fd4c Add another internal function to the list of invisible functions.
R=kmillikin@google.com

Review URL: https://codereview.chromium.org//75183002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30339 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-18 12:30:03 +00:00
regis@google.com 2a355a7bb6 Lazily format LanguageError messages (fix issue 15069).
R=iposva@google.com

Review URL: https://codereview.chromium.org//68113028

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30308 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-15 18:54:24 +00:00
hausner@google.com 5e90c211c7 Add Dart keyword symbols to the VM isolate
Remove the keyword symbol table from object store, and remove
keyword table initialization from Scanner constructor.

R=regis@google.com

Review URL: https://codereview.chromium.org//72923002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30285 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-14 19:14:16 +00:00
regis@google.com 694401d38e Rename mixin typedef to mixin application alias in VM.
R=hausner@google.com, rmacnak@google.com

Review URL: https://codereview.chromium.org//71693003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30277 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-14 17:42:39 +00:00
regis@google.com 2964e53333 Do not skip unfinalized interfaces while checking type bounds at finalization
time (fix issue 14721).
Fix BoundedType::ToCString() to handle a null type parameter.

R=hausner@google.com

Review URL: https://codereview.chromium.org//68113013

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30250 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-13 20:58:17 +00:00
johnmccutchan@google.com 70483ee91e Add ability for Function to generate source
BUG=
R=hausner@google.com

Review URL: https://codereview.chromium.org//60993002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30239 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-13 18:09:41 +00:00
regis@google.com e3da5e16e4 Check type bounds of redirecting factories (issue 14699).
Add tests for malbounded redirecting factories.
Clean up bound checking code and type error reporting code.

R=hausner@google.com

Review URL: https://codereview.chromium.org//66033006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30177 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-11 22:59:48 +00:00
turnidge@google.com f46f1a2c69 Deoptimize closure functions in DeoptimizeWorld. This was causing
some breakpoints to be skipped when set in optimized closure
functions.

Update implicit_closure_function() to always return null for
factories. Factories use the shared data_ field for another purpose.
This fixes an assertion failure when HasImplicitClosureFunciton is
called for a factory.

Add a TODO for an assertion failure in Class::Name which is not in the
scope of this change.

(patched from an earlier review)

Review URL: https://codereview.chromium.org//64173005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@30063 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-07 18:53:28 +00:00
regis@google.com 528a7ce3d9 Complete latest spec changes regarding malformed types (see issue 14006).
Update language tests and mark them as failing in dart2js as appropriate.
Mark a few co19 tests as failing.
Mark a dart2js test as failing due to unresolved types.

Unfortunately, https://codereview.chromium.org/53583003/ was uncomplete and
missed a few mappings of malformed types to dynamic.

R=hausner@google.com

Review URL: https://codereview.chromium.org//57133004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29924 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-05 18:46:13 +00:00
iposva@google.com 256e2ca73b - Avoid deep recursions when executing type tests.
Review URL: https://codereview.chromium.org//58923002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29873 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-05 04:45:14 +00:00
johnmccutchan@google.com 29c01044bc This is the final breaking change in dart:typed_data needed for Dart 1.0. We need this change because the ECMAScript SIMD specification only includes Int32x4 and Int32x4List and our types must match.
R=srdjan@google.com

Review URL: https://codereview.chromium.org//56023004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29849 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-04 21:56:59 +00:00
asiva@google.com 48e5bebfe3 Compute next field offset correctly.
R=iposva@google.com

Review URL: https://codereview.chromium.org//56033002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29818 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-04 16:51:48 +00:00
fschneider@google.com 91ca330ac8 VM: Fix initialization of statics in presence of exceptions.
In a static- or top-level variable v

var v = expr
static v = expr

If the initializer expression expr throws, the VM throws a
CyclicInitializationError when loading v afterwards, even though
this has nothing to do with cyclic initialization.

I'm changing the way implicit static getters and static initializers are
compiled. Static initializers are invoked from static getters.

They look as follows:

get:v {
  if (field.value === transition_sentinel) {
    field.value = null;
    throw new CyclicInitializationError();
  }
  if (field.value === sentinel) {
    field.value = transition_sentinel;
    init:v();
  }
  return field.value;
}


init:v {
  try {
    field.value = expr;
  } catch {
    if (field.value === transition_sentinel) {
      field.value = null;
    }
    rethrow;
  }
}

BUG=http://dartbug.com/5802
TEST=language/lazy_static3_test,
language/throwing_lazy_variable_test,
co19/Language/12_Expressions/30_Identifier_Reference_A08_t02

R=hausner@google.com

Review URL: https://codereview.chromium.org//54713003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29797 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-04 10:08:47 +00:00
fschneider@google.com a037e4874b Fix bug with guarded fields and deserialization.
Since deserialization does not involve the normal object construction
procedure, any values written there won't be reflected in the guarded field
type. This results in incorrect optimized code because deoptimization of
dependent code objects in not triggered.

This CL adds tracking of field types and guarded list length when creating
objects via deserialization.

R=iposva@google.com

Review URL: https://codereview.chromium.org//50243004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29741 260f80e4-7a28-3924-810f-c04153c831b5
2013-11-01 10:39:09 +00:00
zra@google.com 413cc1a24d Fixing fingerprint.
R=srdjan@google.com

Review URL: https://codereview.chromium.org//51113015

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29683 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-31 17:32:06 +00:00
fschneider@google.com ce9573722c VM: Fix checked mode crash (issue 13831).
The AST for static getters differs between parsing the first time, and
subsequent parsings. This leads to a mismatch in deoptimization-ids
between the optimized and the unoptimized code.

This CL avoids creating different ASTs for the same static getters. To allow
better inlining of these getters, the initialization expression is wrapped in a
hidden static initializer-function. As a result the size of such getters is
constant and does not depend on the initializer expression.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//51123003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29680 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-31 16:49:55 +00:00
johnmccutchan@google.com 8a0fd8ce4d Add Uint32x4List to typed_data
R=asiva@google.com, srdjan@google.com, vsm@google.com

Review URL: https://codereview.chromium.org//51333005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29639 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-31 04:57:38 +00:00
lrn@google.com 41ff075e31 Remove deprecated dart:utf library.
BUG= http://dartbug.com/12843
R=fschneider@google.com, sgjesse@google.com

Review URL: https://codereview.chromium.org//48133002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29537 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-30 12:25:02 +00:00
regis@google.com 65379851a8 Implement stricter rule about self referencing typedefs (fix issue 13675).
R=rmacnak@google.com

Review URL: https://codereview.chromium.org//49853004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29460 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-29 17:04:21 +00:00
whesse@google.com 3b54950144 Remove dart:platform library.
This reverts commits r29154, r29244, r29251, r29268, and r29272.
The dart:io Platform class will not be moved to a dart:platform library.

R=ajohnsen@google.com

Review URL: https://codereview.chromium.org//50573002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@29435 260f80e4-7a28-3924-810f-c04153c831b5
2013-10-29 11:33:34 +00:00