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;