Read the arrays fully and be ready for loading a resource to load a new extension
1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sat May 03 06:46:57 2014 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sat May 03 20:31:11 2014 +0200
1.3 @@ -102,9 +102,23 @@
1.4 append(r).append("', '");
1.5 InputStream is = this.resources.get(r);
1.6 byte[] arr = new byte[is.available()];
1.7 - int len = is.read(arr);
1.8 - if (len != arr.length) {
1.9 - throw new IOException("Not read as much as expected for " + r + " expected: " + arr.length + " was: " + len);
1.10 + int offset = 0;
1.11 + for (;;) {
1.12 + if (offset == arr.length) {
1.13 + byte[] tmp = new byte[arr.length * 2];
1.14 + System.arraycopy(arr, 0, tmp, 0, arr.length);
1.15 + arr = tmp;
1.16 + }
1.17 + int len = is.read(arr, offset, arr.length - offset);
1.18 + if (len == -1) {
1.19 + break;
1.20 + }
1.21 + offset += len;
1.22 + }
1.23 + if (offset != arr.length) {
1.24 + byte[] tmp = new byte[offset];
1.25 + System.arraycopy(arr, 0, tmp, 0, offset);
1.26 + arr = tmp;
1.27 }
1.28 append(btoa(arr));
1.29 append("');");
1.30 @@ -544,11 +558,22 @@
1.31 + " skip = typeof skip == 'number' ? skip : 0;\n"
1.32 + " var arr = resources[name];\n"
1.33 + " if (arr) {\n"
1.34 - + " if (skip < arr.length) return arr[skip];\n"
1.35 - + " skip -= arr.length;\n"
1.36 + + " var arrSize = arr.length;\n"
1.37 + + " if (skip < arrSize) return arr[skip];\n"
1.38 + + " skip -= arrSize;\n"
1.39 + + " } else {\n"
1.40 + + " var arrSize = 0;\n"
1.41 + " };\n"
1.42 - + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.43 + + " var ret = vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
1.44 + " loadBytes___3BLjava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2I(loader, name, args, skip);\n"
1.45 + + " if (ret !== null) return ret;\n"
1.46 + + " while (knownExtensions < extensions.length) {\n"
1.47 + + " vm.registerResource = registerResource;\n"
1.48 + + " extensions[knownExtensions++](vm);\n"
1.49 + + " vm.registerResource = null;\n"
1.50 + + " }\n"
1.51 + + " var arr = resources[name];\n"
1.52 + + " return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
1.53 + " }\n"
1.54 + " vm.java_lang_reflect_Array(false);\n"
1.55 + " vm.org_apidesign_vm4brwsr_VMLazy(false).\n"