johnmccutchan@google.com
635ba4bbd9
Port flow_graph*, disassembler to ISL_Print
...
BUG=
R=srdjan@google.com
Review URL: https://codereview.chromium.org//907093002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43609 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-09 20:49:32 +00:00
zra@google.com
1299ad1485
Allows turning on checked mode on a per-isolate basis
...
using the embedding API.
R=regis@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//883263004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43481 260f80e4-7a28-3924-810f-c04153c831b5
2015-02-04 18:32:48 +00:00
srdjan@google.com
110a74f954
Cleanups: parsed_function()->function() => function()
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//881063003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43213 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-27 22:09:31 +00:00
vegorov@google.com
2b42069b43
Fix LoadOptimizer's handling of load/stores with constant indices for TypedData.
...
LoadOptimizer computes KILL sets in assumption that place X[C] can alias place X[K] if and only if K == C. This however does not hold for TypedData where X[0] can alias X[1] if we are reading 32bit value at X[0] and 8bit value at X[1]. The only thing that TypedData guarantees is that all accesses are done with byte offsets aligned by the size of the data type.
This change incorporates TypeData elements aliasing rules into LoadOptimizer:
- Place hierarchy was extended with constant index places for TypedData X[C|S]:
- C is a byte offset to the element being read instead of an unscaled index that was used before;
- S size of the element being read.
- KILL set computation ensures the following aliasing rule:
X[C|S] aliases X[RoundDown(C, S')|S'] for all sizes S' > S
R=fschneider@google.com
BUG=http://dartbug.com/22120
Review URL: https://codereview.chromium.org//868283002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43137 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-26 15:14:35 +00:00
koda@google.com
99127744c6
Add Zone-based handle allocation interface and reduce use of Isolate-based interfaces.
...
Remove deprecated Isolate-based BitVector constructor.
R=asiva@google.com
Review URL: https://codereview.chromium.org//868913002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@43136 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-26 14:54:02 +00:00
fschneider@google.com
c99e78af72
Reland and fix r42951: Tweaks in the VM's typed_data implementations.
...
Fixed checked mode failure and correct function fingerprints.
R=zerny@google.com
Review URL: https://codereview.chromium.org//862483002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42980 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-19 09:59:45 +00:00
vegorov@google.com
6c597dadbf
Revert "Tweaks in the VM's typed_data implementations."
...
This reverts commit r42951.
Reason: checked mode breakage.
TBR=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org//812733003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42952 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-16 12:14:47 +00:00
fschneider@google.com
1f5208e648
Tweaks in the VM's typed_data implementations.
...
Moving the throw of RangeError out of the _throwRangeError helper
may benefit LICM, since that block is now considered a method exit (and
not part of a enclosing loop).
_throwRangeError was not inlined because the call site was considered
cold by invocation counters (most programs don't throw RangeError).
Also, I renamed some misleading names in the optimizer.
R=zerny@google.com
Review URL: https://codereview.chromium.org//851273002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42951 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-16 11:30:49 +00:00
fschneider@google.com
dfdb8c12db
Refactor and simplify manual inlining in the flow graph optimizer.
...
R=vegorov@google.com
Review URL: https://codereview.chromium.org//786273009
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42908 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-15 13:58:01 +00:00
koda@google.com
600cd31660
Distinguish between initialization and updates to object fields. Currently only for DEBUG mode verification, but will be needed for deletion barrier.
...
Split up initialization flag in StoreInstanceFieldInstr for needed more precise semantics.
Zap swept old space with same value as uninitialized new in debug mode.
R=fschneider@google.com
Review URL: https://codereview.chromium.org//836593002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42717 260f80e4-7a28-3924-810f-c04153c831b5
2015-01-08 20:45:39 +00:00
fschneider@google.com
009eb5d33c
Move ConstantPropagator from flow_graph_optimizer.cc/.h into separate files.
...
flow_graph_optimizer.cc is becoming unnecessarily large, so
I'm moving self-contained optimization passes into
separate files.
In a separate CL I'll also move load/store optimization into
separate files.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//820883004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42567 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-29 14:41:27 +00:00
srdjan@google.com
f116c94dfc
Cleanup access to Instruction's fields (especially deopt_id_).
...
R=johnmccutchan@google.com
Review URL: https://codereview.chromium.org//806973002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42405 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-16 18:27:24 +00:00
vegorov@google.com
0e1479d2cb
Merge RawICData::range_feedback_ field into RawICData::state_bits_.
...
We were using a lot of bits in state_bits for recording deoptimization reasons, never asked about presence of those bits.
Ultimately optimizer cares only about 3 different deopts, so most all of those bits were wasted.
R=srdjan@google.com , zra@google.com
BUG=
Review URL: https://codereview.chromium.org//807593002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42388 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-16 13:12:35 +00:00
vegorov@google.com
aa48bd4759
Range feedback for arithmetic operations.
...
In addition to tracking input and output ranges in the IC-stubs with a Smi fastpath (SmiAdd and SmiSub, currently) this CL also introduces two IC stubs that have no fast-path by still track ranges and update the range feedback.
We are able to distinguish between the following ranges (encoding of the lattice is shown in the parens):
- u-smi (0000)
- smi (0001)
- uint31 (0010)
- int32 (0011)
- uint32 (0100)
- int64 (1xxx) and (x1x1)
BUG=
R=fschneider@google.com , srdjan@google.com , zra@google.com
Review URL: https://codereview.chromium.org//735543003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42370 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-15 18:48:15 +00:00
fschneider@google.com
ac89119791
Fix dead phis elimination.
...
When initially marking live phis, only mark those
with real (i.e. non-phi) uses as live so that cycles
are properly eliminated.
Add a pass after allocation sinking since it may
create additional dead phis.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//790143002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42245 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-10 14:28:38 +00:00
fschneider@google.com
e8f27c722a
Better constant folding of length-loads in checked mode.
...
Handle redefinitions (Redefinition/AssertAssignable) when
checking for known constant length.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//783683002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42132 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-05 14:02:40 +00:00
fschneider@google.com
9fad07f46e
Enable inlining inside try-blocks in the VM's optimizing compiler.
...
R=vegorov@google.com
Review URL: https://codereview.chromium.org//773183002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42103 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-04 12:29:28 +00:00
srdjan@google.com
bad6a61899
Cleanups.
...
R=vegorov@google.com
Review URL: https://codereview.chromium.org//774763002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42069 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-02 18:48:12 +00:00
fschneider@google.com
abde3a9699
Merge chains of straight-line blocks.
...
R=zerny@google.com
Review URL: https://codereview.chromium.org//557413002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42038 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-01 12:40:55 +00:00
fschneider@google.com
d80f05540c
Avoid checking for uses in try-blocks, when optimizing a function without try-catch.
...
R=zerny@google.com
Review URL: https://codereview.chromium.org//760013002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@42037 260f80e4-7a28-3924-810f-c04153c831b5
2014-12-01 10:36:24 +00:00
zerny@google.com
8e807c8550
Integrate the Irregexp Regular Expression Engine.
...
BUG=http://dartbug.com/19090
R=fschneider@google.com
Committed: https://code.google.com/p/dart/source/detail?r=41949
Review URL: https://codereview.chromium.org//744853003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41983 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-26 09:32:43 +00:00
zerny@google.com
84a4135901
Revert "Integrate the Irregexp Regular Expression Engine."
...
This reverts commit https://code.google.com/p/dart/source/detail?r=41949
TBR=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org//754383002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41950 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-25 13:36:40 +00:00
zerny@google.com
43ac0c6f33
Integrate the Irregexp Regular Expression Engine.
...
BUG=http://dartbug.com/19090
R=fschneider@google.com
Review URL: https://codereview.chromium.org//744853003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41949 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-25 13:10:21 +00:00
srdjan@google.com
eddeb860eb
Restructure inlining of Bigint accessors, use consistent approach, fixes a potential crash.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//736113002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41840 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-19 22:28:49 +00:00
vegorov@google.com
e1387daa67
Teach LoadOptimizer to handle intrablock multi-indirection redundancies in one pass.
...
Do this by renumbering loads as we move forward.
R=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org//728863005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41779 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-17 15:34:03 +00:00
vegorov@google.com
ec802d54b2
When constant folding x == y take reachability of blocks into account.
...
This allows to constant fold phi(x, ...) == x if a single predecessor is reachable.
R=fschneider@google.com , fscheider@google.com
BUG=
Review URL: https://codereview.chromium.org//734093002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41777 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-17 15:10:40 +00:00
vegorov@google.com
8f7f26c0a4
Reland "Suppress canonicalization of Unbox() instruction that can deoptimize."
...
This relands commit r41693 with additional fixes in canonicalization pass.
R=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org//726593002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41736 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-14 11:19:42 +00:00
fschneider@google.com
b26ff22adf
Allocation sinking for contexts.
...
Improved aliasing computation in presence of Redefinition and AssertAssignable.
Added possibility for inlining annotations via --enable-inlining-annotations flag.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//184523002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41713 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-13 13:53:58 +00:00
vegorov@google.com
97c3268f51
Revert "Suppress canonicalization of Unbox() instruction that can deoptimize."
...
This reverts commit r41693 due to checked mode test failures.
TBR=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org//722793002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41695 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-12 18:57:31 +00:00
vegorov@google.com
94e896d963
Suppress canonicalization of Unbox() instruction that can deoptimize.
...
Suppress canonicalization of instructions that have unsatisfied input representations.
BUG=
R=fschneider@google.com
Review URL: https://codereview.chromium.org//721773003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41693 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-12 17:23:55 +00:00
vegorov@google.com
29f021439a
Infer range for BIT_XOR.
...
When selecting representations unbox integer phis that have Int32 range and have only constants or boxing operations flowing into them.
BUG=http://dartbug.com/13869
R=fschneider@google.com
Review URL: https://codereview.chromium.org//712993005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41667 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-11 14:51:10 +00:00
vegorov@google.com
0a8e45ae35
Improve precision of range analysis by allowing it to track ranges across all int typed phis.
...
Even when range of the integer definition is unknown we can optimistically assign full int64-range to it even though tagged integer definition can contain instance of the Bigint. This is based on the following observation: we only use ranges when working with unboxed arithmetic in the optimized code, but the widest possible unboxed arithmetic is 64-bit (mint) one and corresponding unboxing operations will deoptimize if they get Bigint as an input. This makes it safe to assume that any integer definition fits into 64-bit range *once unboxed*.
Additional small fixes:
- Fix ranges assigned to loads from Int32/Uint32 arrays on 64-bit platform - it was overly conservative;
- Add UnboxUint32 range inference to ensure that range is not lost when it passes through box-unbox pair;
- When canonicalizing Binary/Unary Integer operations ensure that we unwrap UnboxUint32(Constant(C)) -> C.
BUG=
R=fschneider@google.com
Review URL: https://codereview.chromium.org//682993008
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41640 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-10 17:16:14 +00:00
fschneider@google.com
26c2929073
VM: Load-forwarding of non-final field values at allocations.
...
Instead of ignoring escaping allocations, we now forward values
for all non-final fields and type arguments even if the object
escapes. For non-escaping objects we forward all fields.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//701113003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41522 260f80e4-7a28-3924-810f-c04153c831b5
2014-11-05 15:23:01 +00:00
vegorov@google.com
e6847ac17c
IR refactoring: consolidate all boxing and unboxing instructions.
...
BUG=
R=fschneider@google.com
Review URL: https://codereview.chromium.org//670263007
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41437 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-31 12:17:12 +00:00
fschneider@google.com
876193b31a
Make CTX allocatable by the register allocator.
...
This change makes CTX available by not caching the current
context while in Dart code. Instead the current context
is held in a local variable (:saved_current_context_var) and
is passed as argument in CTX at calls.
This also simplifies a lot of code in the debugger: As a result,
Isolate::top_context is not needed anymore since the current context
can always be extracted from a Dart frame.
R=vegorov@google.com
Review URL: https://codereview.chromium.org//678763004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41422 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-30 15:42:38 +00:00
vegorov@google.com
fb915fe887
IR cleanup: pass deopt id as constructor argument instead of doing deopt_id_ assignment.
...
This also kills a list of Instruction friends that was growing without bounds.
R=srdjan@google.com
BUG=
Review URL: https://codereview.chromium.org//676743002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41278 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-24 11:27:17 +00:00
johnmccutchan@google.com
fb7f8551b4
Add unboxed Mint for X64
...
BUG=
R=vegorov@google.com
Review URL: https://codereview.chromium.org//626223002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41233 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-21 18:11:43 +00:00
fschneider@google.com
c6e2650073
VM: Avoid repeated deoptimizations from hoisted array bounds checks.
...
R=vegorov@google.com
Review URL: https://codereview.chromium.org//662543003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41223 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-21 10:36:52 +00:00
fschneider@google.com
9087108b5f
VM: Avoid repeated deoptimization on speculatively hoisted smi-checks.
...
This adds the same check as we already have for CheckClass for
CheckSmi and CheckEitherNonSmi instructions to avoid repeated
deoptimization after LICM.
R=srdjan@google.com
Review URL: https://codereview.chromium.org//657613004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41133 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-15 15:46:49 +00:00
johnmccutchan@google.com
7bbdfc2e16
- Use UnboxedInt32 and UnboxedUint32 representation for LoadIndexedInstr
...
- Avoid inserting an check class instruction for Uint32 and Int32 arrays on StoreIndexedInstr
- Implement Int32ToDouble on all architectures
- Add Int32 to double instruction to ARM64 and simulator.
- Add Int32 to double instruction to X64.
R=vegorov@google.com , zra@google.com
Review URL: https://codereview.chromium.org//616873003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41025 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-09 20:49:15 +00:00
vegorov@google.com
1ea5f34f56
Fix incorrect handling of refined aliases during load forwarding.
...
If intrablock load forwarding refines some store instruction in a way that introduces previously unseen alias fallback to unrefined place with a more generic alias instead.
R=fschneider@google.com
BUG=
Review URL: https://codereview.chromium.org//638903004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41009 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-09 11:47:13 +00:00
vegorov@google.com
e6113cc0f5
If bounds check 0 <= index < length is not redundant we attempt to
...
replace it with a sequence of checks that guarantee
0 <= LowerBound(index) < UpperBound(index) < length
and hoist all of those checks out of the enclosing loop.
Upper/Lower bounds are symbolic arithmetic expressions with +, -, *
operations and are computed based on discovered simple induction variables.
Simple induction variable is a variable that follows the pattern v1 <- phi(v0, v1 + 1)
BUG=
R=fschneider@google.com
Review URL: https://codereview.chromium.org//619903002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40969 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-07 18:50:29 +00:00
zra@google.com
f9b269397c
Unrolls array initialization loop for small arrays.
...
This is similar to what is already done for
object field initializaion, and gives a small
performance improvement on ARM.
R=regis@google.com
Review URL: https://codereview.chromium.org//627103005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40961 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-07 16:26:18 +00:00
johnmccutchan@google.com
5b05c23c9f
Revert r40848
...
BUG=
Review URL: https://codereview.chromium.org//618353002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40850 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-01 18:27:09 +00:00
johnmccutchan@google.com
0c61e7eff2
Make LoadIndexedInstr for Uint32List use kUnboxedUint32 representation
...
BUG=
R=vegorov@google.com
Review URL: https://codereview.chromium.org//612553002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40848 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-01 17:46:46 +00:00
srdjan@google.com
b8891bf412
Pass isolate to BitVector constructor.
...
R=hausner@google.com
Review URL: https://codereview.chromium.org//587873003
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40528 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-19 23:14:34 +00:00
johnmccutchan@google.com
fa189495a5
* Fixes ICData collection on Double.fromInteger factory constructor (for both smi and mint).
...
* Inlines instance calls to toDouble on mint.
* Adds fast path mint -> double for IA32.
R=fschneider@google.com
Review URL: https://codereview.chromium.org//562203005
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40501 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-19 16:23:38 +00:00
vegorov@google.com
73f4cc059d
Fix ConstantPropagator::VisitBinaryDoubleOp to work with all integer types.
...
R=fschneider@google.com
BUG=http://dartbug.com/20984
Review URL: https://codereview.chromium.org//579233002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40433 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-18 12:47:20 +00:00
vegorov@google.com
d61a330d7c
Initial steps towards cleaning up integer arithmetic IR.
...
Introduce base classes for binary and unary integer operations and move all shared logic (e.g. canonicalization) into these classes.
Start removing special cases dispatch from instructions patterns - it goes into Canonicalization pass.
Start removing duplication between instruction patterns where meaningful and possible.
Cleanup the notion of truncation in the operations: is_truncating implies !can_overflow, not the other way around.
BUG=
R=johnmccutchan@google.com , srdjan@google.com
Review URL: https://codereview.chromium.org//564843002
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40375 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-17 13:31:13 +00:00
srdjan@google.com
a0b0554faa
Recognize Bigint setters and getters. This code will be removed when/if we change the fields to be Dart instead fo native fields.
...
R=regis@google.com
Review URL: https://codereview.chromium.org//562333004
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40206 260f80e4-7a28-3924-810f-c04153c831b5
2014-09-12 15:45:40 +00:00