Chromium Code Reviews| Index: pkg/serialization/lib/src/reader_writer.dart |
| diff --git a/pkg/serialization/lib/src/reader_writer.dart b/pkg/serialization/lib/src/reader_writer.dart |
| index 146255de438fbede1a47be0499b25e2768eaf753..0c0ce9fb4f8e76cfb2bd5616f781a0155d69d6f7 100644 |
| --- a/pkg/serialization/lib/src/reader_writer.dart |
| +++ b/pkg/serialization/lib/src/reader_writer.dart |
| @@ -123,7 +123,7 @@ class Writer implements ReaderOrWriter { |
| if (rule.shouldUseReferenceFor(object, this)) { |
| references.putIfAbsent(object, () => |
| new Reference(this, rule.number, _nextObjectNumberFor(rule))); |
| - var state = rule.extractState(object, trace.note); |
| + var state = rule.extractState(object, trace.note, this); |
| _addStateForRule(rule, state); |
| } |
| } |
| @@ -143,7 +143,7 @@ class Writer implements ReaderOrWriter { |
| serializedRules() { |
| if (!selfDescribing) return null; |
| var meta = serialization.ruleSerialization(); |
| - var writer = new Writer(meta); |
| + var writer = new Writer(meta, format); |
| writer.selfDescribing = false; |
| return writer.write(serialization._rules); |
| } |
| @@ -309,15 +309,17 @@ class Reader implements ReaderOrWriter { |
| * Look up the reference to an external object. This can be held either in |
| * the reader-specific list of externals or in the serializer's |
| */ |
| - objectNamed(key) { |
| + objectNamed(key, [Function ifAbsent]) { |
| var map = (namedObjects.containsKey(key)) |
| ? namedObjects : serialization.namedObjects; |
| if (!map.containsKey(key)) { |
| - throw 'Cannot find named object to link to: $key'; |
| + (ifAbsent == null ? keyNotFound : ifAbsent)(key); |
| } |
| return map[key]; |
| } |
| + void keyNotFound(key) { throw 'Cannot find named object to link to: $key';} |
|
Jennifer Messerly
2013/02/08 04:04:38
Would be good to throw a more precise Exception he
Alan Knight
2013/02/11 23:38:42
Done.
|
| + |
| /** |
| * Return the list of rules to be used when writing. These come from the |
| * [serialization]. |
| @@ -350,10 +352,11 @@ class Reader implements ReaderOrWriter { |
| * If the data we are reading from has rules written to it, read them back |
| * and set them as the rules we will use. |
| */ |
| - void readRules(String newRules) { |
| + void readRules(newRules) { |
| // TODO(alanknight): Replacing the serialization is kind of confusing. |
| - List rulesWeRead = (newRules == null) ? |
| - null : serialization.ruleSerialization().read(newRules, namedObjects); |
| + if (newRules == null) return; |
| + var reader = serialization.ruleSerialization().newReader(format); |
| + List rulesWeRead = reader.read(newRules, namedObjects); |
| if (rulesWeRead != null && !rulesWeRead.isEmpty) { |
| serialization = new Serialization.blank(); |
| rulesWeRead.forEach(serialization.addRule); |