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

Unified Diff: packages/dart_style/lib/src/line_splitting/rule_set.dart

Issue 1521693002: Roll Observatory deps (charted -> ^0.3.0) (Closed) Base URL: https://chromium.googlesource.com/external/github.com/dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years 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: packages/dart_style/lib/src/line_splitting/rule_set.dart
diff --git a/packages/dart_style/lib/src/line_splitting/rule_set.dart b/packages/dart_style/lib/src/line_splitting/rule_set.dart
index 709b3739e671db0c1e2188e14ddd551ca5e82eb7..714875dd551cfcd6dce6e5bd885e285814b68d4d 100644
--- a/packages/dart_style/lib/src/line_splitting/rule_set.dart
+++ b/packages/dart_style/lib/src/line_splitting/rule_set.dart
@@ -23,14 +23,22 @@ class RuleSet {
RuleSet._(this._values);
/// Returns `true` of [rule] is bound in this set.
- bool contains(Rule rule) => _values[rule.index] != null;
+ bool contains(Rule rule) {
+ // Treat hardened rules as implicitly bound.
+ if (rule.isHardened) return true;
- /// Gets the bound value for [rule] or `0` if it is not bound.
+ return _values[rule.index] != null;
+ }
+
+ /// Gets the bound value for [rule] or [Rule.unsplit] if it is not bound.
int getValue(Rule rule) {
+ // Hardened rules are implicitly bound.
+ if (rule.isHardened) return rule.fullySplitValue;
+
var value = _values[rule.index];
if (value != null) return value;
- return 0;
+ return Rule.unsplit;
}
/// Invokes [callback] for each rule in [rules] with the rule's value, which
@@ -56,19 +64,26 @@ class RuleSet {
/// If an unbound rule gets constrained to `-1` (meaning it must split, but
/// can split any way it wants), invokes [onSplitRule] with it.
bool tryBind(List<Rule> rules, Rule rule, int value, onSplitRule(Rule rule)) {
+ assert(!rule.isHardened);
+
_values[rule.index] = value;
// Test this rule against the other rules being bound.
- for (var other in rules) {
- if (rule == other) continue;
+ for (var other in rule.constrainedRules) {
+ var otherValue;
+ // Hardened rules are implicitly bound.
+ if (other.isHardened) {
+ otherValue = other.fullySplitValue;
+ } else {
+ otherValue = _values[other.index];
+ }
- var otherValue = _values[other.index];
var constraint = rule.constrain(value, other);
if (otherValue == null) {
// The other rule is unbound, so see if we can constrain it eagerly to
// a value now.
- if (constraint == -1) {
+ if (constraint == Rule.mustSplit) {
// If we know the rule has to split and there's only one way it can,
// just bind that.
if (other.numValues == 2) {
@@ -84,16 +99,16 @@ class RuleSet {
} else {
// It's already bound, so see if the new rule's constraint disallows
// that value.
- if (constraint == -1) {
- if (otherValue == 0) return false;
+ if (constraint == Rule.mustSplit) {
+ if (otherValue == Rule.unsplit) return false;
} else if (constraint != null) {
if (otherValue != constraint) return false;
}
// See if the other rule's constraint allows us to use this value.
constraint = other.constrain(otherValue, rule);
- if (constraint == -1) {
- if (value == 0) return false;
+ if (constraint == Rule.mustSplit) {
+ if (value == Rule.unsplit) return false;
} else if (constraint != null) {
if (value != constraint) return false;
}

Powered by Google App Engine
This is Rietveld 408576698