From b217e8751974f9fdb849bcdd600452dcd46342d5 Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Mon, 12 Feb 2007 21:31:21 +0000 Subject: [PATCH] - Have the ArrayStreamer always look up its delegate, as it may need one for element types other than String. - Changed streamer init to prevent the above change from triggering a re-init when the delegate is looked-up. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4568 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- src/as/com/threerings/io/Streamer.as | 14 ++++++++------ .../com/threerings/io/streamers/ArrayStreamer.as | 10 ++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/as/com/threerings/io/Streamer.as b/src/as/com/threerings/io/Streamer.as index 595d417d2..5d29fb5bb 100644 --- a/src/as/com/threerings/io/Streamer.as +++ b/src/as/com/threerings/io/Streamer.as @@ -145,17 +145,19 @@ public class Streamer private static function initStreamers () :void { if (_streamers == null) { - _streamers = [ - new StringStreamer(), - new ArrayStreamer(), + // Init like this so that _streamers is not null asap. + _streamers = []; + // We could add each one by one, so that any later streamers + // can find and use the earlier ones as delegates. + _streamers.push(new StringStreamer(), new NumberStreamer(), - new ByteArrayStreamer(), new ByteStreamer(), new ShortStreamer(), new IntegerStreamer(), new LongStreamer(), - new FloatStreamer() - ]; + new FloatStreamer(), + new ArrayStreamer(), + new ByteArrayStreamer()); } } diff --git a/src/as/com/threerings/io/streamers/ArrayStreamer.as b/src/as/com/threerings/io/streamers/ArrayStreamer.as index 3b170a0a1..b0a2de4ab 100644 --- a/src/as/com/threerings/io/streamers/ArrayStreamer.as +++ b/src/as/com/threerings/io/streamers/ArrayStreamer.as @@ -26,13 +26,11 @@ public class ArrayStreamer extends Streamer } else if (secondChar === "L") { // form is "[L;" - var baseClass :String = jname.substring(2, jname.length - 1); - baseClass = Translations.getFromServer(baseClass); - _elementType = ClassUtil.getClassByName(baseClass); + var baseJClass :String = jname.substring(2, jname.length - 1); + _delegate = Streamer.getStreamerByJavaName(baseJClass); + _elementType = ClassUtil.getClassByName( + Translations.getFromServer(baseJClass)); _isFinal = ClassUtil.isFinal(_elementType); - if (_elementType == String) { - _delegate = new StringStreamer(); - } } else if (secondChar === "I") { _elementType = int;