Bug 561191: add missing testcase (r=wsharp, sr=edwsmith)

error: pathspec 'test/acceptance/regress/bug_561191.as' did not match any file(s) known to git

--- test/acceptance/regress/bug_561191.as
+++ test/acceptance/regress/bug_561191.as
@@ -0,0 +1,86 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is [Open Source Virtual Machine].
+ *
+ * The Initial Developer of the Original Code is
+ * Adobe System Incorporated.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+*
+*
+* See http://bugzilla.mozilla.org/show_bug.cgi?id=557933
+*
+*/
+//-----------------------------------------------------------------------------
+
+var SECTION = "561191";
+var VERSION = "";
+var TITLE   = "unescape bugginess";
+var bug = "561191";
+
+startTest();
+writeHeaderToLog(SECTION + " " + TITLE);
+var testcases = getTestCases();
+test();
+
+function getTestCases() {
+    var array:Array = new Array();
+    var item:int = 0;
+
+    var tests = [
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+        { xml: "",        expect: '' },
+    ]
+
+    for (var i = 0; i < tests.length; ++i)
+    {
+        var x:XML = new XML(tests[i].xml);
+        array[item++] = new TestCase(SECTION, tests[i].xml, tests[i].expect, x.toXMLString());
+    }
+
+    return array;
+}


Bug 687838: test corner cases of array prototype chain lookup (sr pending=brbaker, f=lhansen).

error: pathspec 'test/acceptance/regress/bug_687838.as' did not match any file(s) known to git

--- test/acceptance/regress/bug_687838.as
+++ test/acceptance/regress/bug_687838.as
@@ -0,0 +1,278 @@
+/* ***** BEGIN LICENSE BLOCK *****
+* Version: MPL 1.1/GPL 2.0/LGPL 2.1
+*
+* The contents of this file are subject to the Mozilla Public License Version
+* 1.1 (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+* http://www.mozilla.org/MPL/
+*
+* Software distributed under the License is distributed on an "AS IS" basis,
+* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+* for the specific language governing rights and limitations under the
+* License.
+*
+* The Original Code is [Open Source Virtual Machine.].
+*
+* The Initial Developer of the Original Code is
+* Adobe System Incorporated.
+* Portions created by the Initial Developer are Copyright (C) 2011
+* the Initial Developer. All Rights Reserved.
+*
+* Contributor(s):
+*   Adobe AS3 Team
+*
+* Alternatively, the contents of this file may be used under the terms of
+* either the GNU General Public License Version 2 or later (the "GPL"), or
+* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+* in which case the provisions of the GPL or the LGPL are applicable instead
+* of those above. If you wish to allow use of your version of this file only
+* under the terms of either the GPL or the LGPL, and not to allow others to
+* use your version of this file under the terms of the MPL, indicate your
+* decision by deleting the provisions above and replace them with the notice
+* and other provisions required by the GPL or the LGPL. If you do not delete
+* the provisions above, a recipient may use your version of this file under
+* the terms of any one of the MPL, the GPL or the LGPL.
+*
+* ***** END LICENSE BLOCK ***** */
+
+
+import avmplus.*;
+import avmshell.*;
+import foo.*;
+
+var SECTION = "regress_687838";
+var VERSION = "AS3";
+var TITLE   = "Array prototype lookup";
+var bug = "687838";
+
+startTest();
+writeHeaderToLog(SECTION + " " + TITLE);
+
+// A+B+C
+// * Array.prototype is modified.
+// * Since B and C extend Array, their prototypes are array instances.
+// * B's prototype is otherwise unaltered, C's prototype is directly modified.
+// * B_sparse and C_sparse variants have prototypes that forced to be sparse.
+dynamic class B extends Array { }
+dynamic class B_sparse extends Array { }
+dynamic class C extends Array { }
+dynamic class C_sparse extends Array { }
+
+// D+E+F
+// * D and E's prototypes are replaced with fresh array instances.
+//   F's prototype is left alone.
+// * d_pre and e_pre are allocated before the replacement of the D and
+//   E prototypes; d_post and e_post are allocated after the
+//   replacement.
+// * D's replacement prototype is otherwise unaltered, E replacement
+//   and F's prototypes directly modified.
+
+function D() { }
+function E() { }
+function F() { }
+
+var a = new Array
+// a_sparse is itself sparse
+var a_sparse = new Array
+a_sparse[2000] = "twothou on A";
+var b = new B
+var c = new C
+var b_sparse = new B_sparse
+var c_sparse = new C_sparse
+
+// See notes with A+B+C above
+Array   .prototype["n"]  = "named A";
+Array   .prototype[1]    = "one A";
+Array   .prototype[10]   = "ten A";
+C       .prototype["n"]  = "named C";
+C       .prototype[1]    = "one C";
+C       .prototype[10]   = "ten C";
+C_sparse.prototype["n"]  = "named C_sparse";
+C_sparse.prototype[1]    = "one C_sparse";
+C_sparse.prototype[10]   = "ten C_sparse";
+
+// Encouraging B_sparse and C_sparse prototypes to be sparse without
+// clobbering index 1000.
+B_sparse.prototype[2000] = "twothou B_sparse";
+C_sparse.prototype[2000] = "twothou C_sparse";
+
+// See notes with E+D+F above
+
+D       .prototype["n"]  = "named Dpre"
+D       .prototype[1]    = "one Dpre"
+D       .prototype[10]   = "ten Dpre"
+E       .prototype["n"]  = "named Epre"
+E       .prototype[1]    = "one Epre";
+E       .prototype[10]   = "ten Epre";
+
+const D_prototype_pre = D.prototype;
+const E_prototype_pre = E.prototype;
+
+// The _pre constructions deliberately occur before the replacement of
+// the .prototype object in D and E.
+var d_pre = new D
+var e_pre = new E
+var f = new F
+
+D.prototype = new Array;
+E.prototype = new Array;
+
+// The _post constructions deliberately occur after the replacement of
+// the .prototype object in D and E.
+var d_post = new D
+var e_post = new E
+
+E       .prototype["n"]  = "named Epost";
+E       .prototype[1]        = "one Epost";
+E       .prototype[10]       = "ten Epost";
+F       .prototype["n"]  = "named F";
+F       .prototype[1]        = "one F";
+F       .prototype[10]       = "ten F";
+
+const ATC:Function = AddTestCase;
+
+ATC('Arr .proto start1 array        named a', "named A",              a["n"]);
+ATC('Cls .proto start1 array trans  named b', "named A",              b["n"]);
+ATC('Cls .proto start1 array immed  named c', "named C",              c["n"]);
+ATC('Fcn .proto object              named d', "named Dpre",       d_pre["n"]);
+ATC('Fcn .proto start1 array trans  named d', "named A",         d_post["n"]);
+ATC('Fcn .proto object              named e', "named Epre",       e_pre["n"]);
+ATC('Fcn .proto start1 array immed  named e', "named Epost",     e_post["n"]);
+ATC('Fcn .proto object              named f', "named F",              f["n"]);
+
+ATC('Arr .proto start1 array       ref  1 a', "one A",                a[1]);
+ATC('Arr .proto start1 self sparse ref  1 a', "one A",         a_sparse[1]);
+ATC('Cls .proto start1 array trans ref  1 b', "one A",                b[1]);
+ATC('Cls .proto sparse array trans ref  1 b', "one A",         b_sparse[1]);
+ATC('Cls .proto start1 array immed ref  1 c', "one C",                c[1]);
+ATC('Cls .proto sparse array immed ref  1 c', "one C_sparse",  c_sparse[1]);
+ATC('Fcn .proto object             ref  1 d', "one Dpre",         d_pre[1]);
+ATC('Fcn .proto start1 array trans ref  1 d', "one A",           d_post[1]);
+ATC('Fcn .proto object             ref  1 e', "one Epre",         e_pre[1]);
+ATC('Fcn .proto start1 array immed ref  1 e', "one Epost",       e_post[1]);
+ATC('Fcn .proto object             ref  1 f', "one F",                f[1]);
+
+ATC('Arr .proto start1 array       ref 10 a', "ten A",                a[10]);
+ATC('Cls .proto start1 array trans ref 10 b', "ten A",                b[10]);
+ATC('Cls .proto sparse array trans ref 10 b', "ten A",         b_sparse[10]);
+ATC('Cls .proto start1 array immed ref 10 c', "ten C",                c[10]);
+ATC('Cls .proto sparse array immed ref 10 c', "ten C_sparse",  c_sparse[10]);
+ATC('Fcn .proto object             ref 10 d', "ten Dpre",         d_pre[10]);
+ATC('Fcn .proto start1 array trans ref 10 d', "ten A",           d_post[10]);
+ATC('Fcn .proto object             ref 10 e', "ten Epre",         e_pre[10]);
+ATC('Fcn .proto start1 array immed ref 10 e', "ten Epost",       e_post[10]);
+ATC('Fcn .proto object             ref 10 f', "ten F",                f[10]);
+
+ATC('Arr .proto start1 array       ref 1k a', undefined,              a[1000]);
+ATC('Cls .proto start1 array trans ref 1k b', undefined,              b[1000]);
+ATC('Cls .proto start1 array immed ref 1k c', undefined,              c[1000]);
+ATC('Cls .proto sparse array immed ref 1k c', undefined,       c_sparse[1000]);
+ATC('Fcn .proto object             ref 1k d', undefined,          d_pre[1000]);
+ATC('Fcn .proto object             ref 1k e', undefined,          e_pre[1000]);
+ATC('Fcn .proto start1 array trans ref 1k d', undefined,         d_post[1000]);
+ATC('Fcn .proto start1 array immed ref 1k e', undefined,         e_post[1000]);
+ATC('Fcn .proto object             ref 1k f', undefined,              f[1000]);
+
+Array   .prototype[0] = "zero A";
+C       .prototype[0] = "zero C";
+C_sparse.prototype[0] = "zero C_sparse";
+E       .prototype[0] = "zero E";
+F       .prototype[0] = "zero F";
+
+ATC('Arr .proto start0 array        named a', "named A",               a["n"]);
+ATC('Cls .proto start0 array trans  named b', "named A",               b["n"]);
+ATC('Cls .proto start0 array immed  named c', "named C",               c["n"]);
+ATC('Fcn .proto object              named d', "named Dpre",        d_pre["n"]);
+ATC('Fcn .proto start0 array trans  named d', "named A",          d_post["n"]);
+ATC('Fcn .proto object              named e', "named Epre",        e_pre["n"]);
+ATC('Fcn .proto start0 array immed  named e', "named Epost",      e_post["n"]);
+ATC('Fcn .proto object              named f', "named F",               f["n"]);
+
+ATC('Arr .proto start0 array       ref  1 a', "one A",                 a[1]);
+ATC('Cls .proto start0 array trans ref  1 b', "one A",                 b[1]);
+ATC('Cls .proto start0 array immed ref  1 c', "one C",                 c[1]);
+ATC('Fcn .proto object             ref  1 d', "one Dpre",          d_pre[1]);
+ATC('Fcn .proto object             ref  1 e', "one Epre",          e_pre[1]);
+ATC('Fcn .proto start0 array trans ref  1 d', "one A",            d_post[1]);
+ATC('Fcn .proto start0 array immed ref  1 e', "one Epost",        e_post[1]);
+ATC('Fcn .proto object             ref  1 f', "one F",                 f[1]);
+
+ATC('Arr .proto start0 array       ref 10 a', "ten A",                 a[10]);
+ATC('Cls .proto start0 array trans ref 10 b', "ten A",                 b[10]);
+ATC('Cls .proto start0 array immed ref 10 c', "ten C",                 c[10]);
+ATC('Fcn .proto object             ref 10 d', "ten Dpre",          d_pre[10]);
+ATC('Fcn .proto object             ref 10 e', "ten Epre",          e_pre[10]);
+ATC('Fcn .proto start0 array trans ref 10 d', "ten A",            d_post[10]);
+ATC('Fcn .proto start0 array immed ref 10 e', "ten Epost",        e_post[10]);
+ATC('Fcn .proto object             ref 10 f', "ten F",                 f[10]);
+
+ATC('Arr .proto start0 array       ref 1k a', undefined,               a[1000]);
+ATC('Cls .proto start0 array trans ref 1k b', undefined,               b[1000]);
+ATC('Cls .proto start0 array immed ref 1k c', undefined,               c[1000]);
+ATC('Fcn .proto object             ref 1k d', undefined,           d_pre[1000]);
+ATC('Fcn .proto object             ref 1k e', undefined,           e_pre[1000]);
+ATC('Fcn .proto start0 array trans ref 1k d', undefined,          d_post[1000]);
+ATC('Fcn .proto start0 array immed ref 1k e', undefined,          e_post[1000]);
+ATC('Fcn .proto object             ref 1k f', undefined,               f[1000]);
+
+Array   .prototype[1000] = "thou A";
+C       .prototype[1000] = "thou C";
+C_sparse.prototype[1000] = "thou C_sparse";
+D_prototype_pre[1000]    = "thou Dpre";
+E_prototype_pre[1000]    = "thou Epre";
+E       .prototype[1000] = "thou Epost";
+F       .prototype[1000] = "thou F";
+
+// forcing D to be sparse without clobbering index 1000
+D.prototype[2000]     = "twothou D";
+
+ATC('Arr .proto sparse array        named a', "named A",               a["n"]);
+ATC('Cls .proto sparse array trans  named b', "named A",               b["n"]);
+ATC('Cls .proto sparse array immed  named c', "named C",               c["n"]);
+ATC('Fcn .proto object              named d', "named Dpre",        d_pre["n"]);
+ATC('Fcn .proto sparse array trans  named d', "named A",          d_post["n"]);
+ATC('Fcn .proto object              named e', "named Epre",        e_pre["n"]);
+ATC('Fcn .proto sparse array immed  named e', "named Epost",      e_post["n"]);
+ATC('Fcn .proto object              named f', "named F",               f["n"]);
+
+ATC('Arr .proto sparse array       ref  1 a', "one A",                 a[1]);
+ATC('Arr .proto+self sparse        ref  1 a', "one A",          a_sparse[1]);
+ATC('Cls .proto sparse array trans ref  1 b', "one A",                 b[1]);
+ATC('Cls .proto+self sparse trans  ref  1 b', "one A",          b_sparse[1]);
+ATC('Cls .proto sparse array immed ref  1 c', "one C",                 c[1]);
+ATC('Cls .proto+self sparse immed  ref  1 c', "one C_sparse",   c_sparse[1]);
+ATC('Fcn .proto object             ref  1 d', "one Dpre",          d_pre[1]);
+ATC('Fcn .proto sparse array trans ref  1 d', "one A",            d_post[1]);
+ATC('Fcn .proto object             ref  1 e', "one Epre",          e_pre[1]);
+ATC('Fcn .proto sparse array immed ref  1 e', "one Epost",        e_post[1]);
+ATC('Fcn .proto object             ref  1 f', "one F",                 f[1]);
+
+ATC('Arr .proto sparse array       ref 10 a', "ten A",                 a[10]);
+ATC('Arr .proto+self sparse        ref 10 a', "ten A",          a_sparse[10]);
+ATC('Cls .proto sparse array trans ref 10 b', "ten A",                 b[10]);
+ATC('Cls .proto+self sparse trans  ref 10 b', "ten A",          b_sparse[10]);
+ATC('Cls .proto sparse array immed ref 10 c', "ten C",                 c[10]);
+ATC('Cls .proto+self sparse immed  ref 10 c', "ten C_sparse",   c_sparse[10]);
+ATC('Fcn .proto object             ref 10 d', "ten Dpre",          d_pre[10]);
+ATC('Fcn .proto sparse array trans ref 10 d', "ten A",            d_post[10]);
+ATC('Fcn .proto object             ref 10 e', "ten Epre",          e_pre[10]);
+ATC('Fcn .proto sparse array immed ref 10 e', "ten Epost",        e_post[10]);
+ATC('Fcn .proto object             ref 10 f', "ten F",                 f[10]);
+
+ATC('Arr .proto sparse array       ref 1k a', "thou A",                a[1000]);
+ATC('Arr .proto+self sparse        ref 1k a', "thou A",         a_sparse[1000]);
+ATC('Cls .proto sparse array trans ref 1k b', "thou A",                b[1000]);
+ATC('Cls .proto+self sparse trans  ref 1k b', "thou A",         b_sparse[1000]);
+ATC('Cls .proto sparse array immed ref 1k c', "thou C",                c[1000]);
+ATC('Cls .proto+self sparse immed  ref 1k c', "thou C_sparse",  c_sparse[1000]);
+ATC('Fcn .proto object             ref 1k d', "thou Dpre",         d_pre[1000]);
+ATC('Fcn .proto object             ref 1k e', "thou Epre",         e_pre[1000]);
+ATC('Fcn .proto sparse array trans ref 1k d', "thou A",           d_post[1000]);
+ATC('Fcn .proto sparse array immed ref 1k e', "thou Epost",       e_post[1000]);
+ATC('Fcn .proto object             ref 1k f', "thou F",                f[1000]);
+
+
+
+
+
+test();


Fixed failing MediatorMap test - unmapping in [After] block was incorrect

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/eric-stanley/robotlegs-framework.git/'


Added test case.

Added test case.

error: pathspec 'src/avm2/tests/hello.as' did not match any file(s) known to git

--- src/avm2/tests/hello.as
+++ src/avm2/tests/hello.as
@@ -0,0 +1 @@
+trace("Hello");


improving formatting

improving formatting

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


cleaning up, parallelizing loadings and organizing structure


Steal some filename utility functions from aspirin

error: pathspec 'runtime/src/main/as/flump/mold/Files.as' did not match any file(s) known to git

--- runtime/src/main/as/flump/mold/Files.as
+++ runtime/src/main/as/flump/mold/Files.as
@@ -0,0 +1,56 @@
+//
+// Flump - Copyright 2012 Three Rings Design
+
+package flump.mold {
+
+public class Files
+{
+    /**
+     * Returns the substring composed of the characters after the last '.' in the supplied string.
+     * The substring will be converted to lowercase.
+     */
+    public static function getDotSuffix (filename :String) :String
+    {
+        // is there a dot?
+        var ix :int = filename.lastIndexOf(".");
+        if (ix >= 0) {
+            var ext :String = filename.substr(ix + 1);
+            // is there a ?foo=bar component?
+            ix = ext.indexOf('?');
+            if (ix > 0) {
+                ext = ext.substring(0, ix);
+            }
+            return ext.toLowerCase();
+        }
+        return "";
+    }
+
+    /**
+     * Returns the substring composed of the characters before the last '.' in the supplied string.
+     */
+    public static function stripDotSuffix (filename :String) :String
+    {
+        var ix :int = filename.lastIndexOf(".");
+        return (ix >= 0 ? filename.substr(0, ix) : filename);
+    }
+
+    /**
+     * Returns the substring composed of the characters after the last path separator
+     * in the supplied string.
+     */
+    public static function stripPath (filename :String, separator :String = "/") :String
+    {
+        var ix :int = filename.lastIndexOf(separator);
+        return (ix >= 0 ? filename.substr(ix + 1) : filename);
+    }
+
+    /**
+     * Strips the path and dot-suffix from the given filename.
+     */
+    public static function stripPathAndDotSuffix (filename :String, separator :String = "/") :String
+    {
+        return stripDotSuffix(stripPath(filename, separator));
+    }
+}
+
+}


Add this back

Add this back

error: pathspec 'test/acceptance/as3/sampling/StringMaster.as' did not match any file(s) known to git

--- test/acceptance/as3/sampling/StringMaster.as
+++ test/acceptance/as3/sampling/StringMaster.as
@@ -0,0 +1,68 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is [Open Source Virtual Machine.].
+ *
+ * The Initial Developer of the Original Code is
+ * Adobe System Incorporated.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Adobe AS3 Team
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/* testcases:
+ *   master string exposed to heap graph
+ */
+
+package {
+
+    import flash.sampler.*
+    import avmplus.*
+
+    var SECTION = "Sampling";
+    var VERSION = "AS3";
+    var TITLE   = "Master String";
+
+    startTest();
+    writeHeaderToLog("Sampling master string test");
+
+    var isdebugger=System.isDebugger();
+
+    var helloWorld = "hello, world";
+    var hello = helloWorld.substr(0, 5);
+
+    AddTestCase("assert that static string constant does not have a master string",
+        null,
+        getMasterString(helloWorld));
+
+    AddTestCase("assert that substring has a master string",
+        isdebugger ? helloWorld : null,
+        getMasterString(hello));
+
+    test();
+}


coding target parsing

coding target parsing


remove redundant ExternalInterface.call

remove redundant ExternalInterface.call

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/pubnub/flash.git/'


Transferred from the Adobe Open Source Subversion Repository

Revision: 20054
Author:   smgilson@adobe.com
Date:     2011-02-02T16:27:21.894790Z

Log Message:
-----------
Update ASDoc on View events, and Application style default

QE notes:
Doc notes:
Bugs:
Reviewer:
Tests run: checkintests
Is noteworthy for integration:

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/View.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Application.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1264185 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mobilecomponents/src/spark/components/View.as
+++ frameworks/projects/mobilecomponents/src/spark/components/View.as
@@ -83,7 +83,7 @@
 /**
  *  Dispatched when the current view has been activated.
  *
- *  @eventType mx.events.ViewNavigatorEvent.VIEW_ACTIVATE
+ *  @eventType spark.events.ViewNavigatorEvent.VIEW_ACTIVATE
  *
  *  @langversion 3.0
  *  @playerversion AIR 2.5
@@ -94,7 +94,7 @@
 /**
  *  Dispatched when the current view has been deactivated.
  *
- *  @eventType mx.events.ViewNavigatorEvent.VIEW_DEACTIVATE
+ *  @eventType spark.events.ViewNavigatorEvent.VIEW_DEACTIVATE
  *
  *  @langversion 3.0
  *  @playerversion AIR 2.5
@@ -108,7 +108,7 @@
  *  Calling preventDefault()
  *  while handling this event cancels the screen change.
  *
- *  @eventType mx.events.ViewNavigatorEvent.REMOVING
+ *  @eventType spark.events.ViewNavigatorEvent.REMOVING
  *
  *  @langversion 3.0
  *  @playerversion AIR 2.5


日志工具类

日志工具类

error: pathspec 'project/PinkPlayer/src/com/fenhongxiang/util/LogUtil.as' did not match any file(s) known to git

--- project/PinkPlayer/src/com/fenhongxiang/util/LogUtil.as
+++ project/PinkPlayer/src/com/fenhongxiang/util/LogUtil.as
@@ -0,0 +1,46 @@
+package com.fenhongxiang.util
+{
+	import flash.external.ExternalInterface;
+
+	public final class LogUtil
+	{
+		public function LogUtil()
+		{
+		}
+
+		private static const LEVEL_INFO : String = "INFO:";
+		private static const LEVEL_DEBUG : String = "DEBUG:";
+		private static const LEVEL_WARN : String = "WARN:";
+		private static const LEVEL_ERROR : String = "ERROR:";
+
+		public static function info(message : *) : void {
+				outputlog(LEVEL_INFO, String(message));
+		};
+
+		public static function debug(message : *) : void {
+				outputlog(LEVEL_DEBUG, String(message));
+		};
+
+		public static function debug2(message : *) : void {
+				outputlog(LEVEL_DEBUG, String(message));
+		};
+
+		public static function warn(message : *) : void {
+				outputlog(LEVEL_WARN, String(message));
+		};
+
+		public static function error(message : *) : void {
+				outputlog(LEVEL_ERROR, String(message));
+		};
+
+		/** Log a message to the console. **/
+		private static function outputlog(level : String, message : String) : void {
+
+			trace(level + message);
+
+			if (ExternalInterface.available)
+				ExternalInterface.call('console.log', level + message);
+			else trace(level + message);
+		}
+	}
+}


switching line's order execution (app flow has priority over the fmw flow)


adding a tricky approach to return the base class for Model, View, Controller and Layout, when the requested class was not found. Additionally, a warning is given.


THRIFT-2391 Socket transport for ActionScript 3.0

PATCH: Dima Levchenko

error: pathspec 'lib/as3/src/org/apache/thrift/transport/TSocket.as' did not match any file(s) known to git

--- lib/as3/src/org/apache/thrift/transport/TSocket.as
+++ lib/as3/src/org/apache/thrift/transport/TSocket.as
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *		http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.thrift.transport
+{
+
+  import flash.events.EventDispatcher;
+  import flash.events.Event;
+  import flash.events.IOErrorEvent;
+  import flash.events.ProgressEvent;
+  import flash.events.SecurityErrorEvent;
+  import flash.errors.EOFError;
+  import flash.errors.IOError;
+  import flash.net.URLLoader;
+  import flash.net.URLLoaderDataFormat;
+  import flash.net.URLRequest;
+  import flash.net.URLRequestMethod;
+  import flash.utils.IDataInput;
+  import flash.utils.IDataOutput;
+  import flash.utils.ByteArray;
+  import flash.net.Socket;
+
+
+  /**
+   * Socket implementation of the TTransport interface. Used for working with a
+   * Thrift Socket Server based implementations.
+   */
+
+  public class TSocket extends TTransport
+  {
+    private var socket:Socket = null;
+
+    private var host:String;
+
+    private var port:int;
+
+    private var obuffer:ByteArray = new ByteArray();
+
+    private var input:IDataInput;
+
+    private var output:IDataOutput;
+
+    private var ioCallback:Function = null;
+
+    private var eventDispatcher:EventDispatcher = new EventDispatcher();
+
+    public function TSocket(host:String, port:int):void
+    {
+      this.host = host;
+      this.port = port;
+    }
+
+    public override function close():void
+    {
+      this.input = null;
+      this.output = null;
+      socket.close()
+    }
+
+    public override function peek():Boolean
+    {
+      if(socket.connected)
+      {
+        trace("Bytes remained:" + socket.bytesAvailable);
+        return socket.bytesAvailable>0;
+      }
+      return false;
+    }
+
+    public override function read(buf:ByteArray, off:int, len:int):int
+    {
+      var n1:int = 0, n2:int = 0, n3:int = 0, n4:int = 0, cidx:int = 2;
+      var chunkSize:ByteArray = new ByteArray();
+
+      try
+      {
+        input.readBytes(buf, off, len);
+        return len;
+      }
+      catch (e:EOFError)
+      {
+        trace(e);
+        throw new TTransportError(TTransportError.END_OF_FILE, "No more data available.");
+      }
+      catch (e:IOError)
+      {
+        trace(e);
+        if(isOpen())
+        {
+          throw new TTransportError(TTransportError.UNKNOWN, "IO error while reading: " + e);
+        }
+        else
+        {
+          throw new TTransportError(TTransportError.NOT_OPEN, "Socket seem not to be opened: " + e);
+    	}
+      }
+      catch (e:Error)
+      {
+        trace(e);
+        throw new TTransportError(TTransportError.UNKNOWN, "Bad IO error: " + e);
+      }
+      return 0;
+    }
+
+    public override function write(buf:ByteArray, off:int, len:int):void
+    {
+      obuffer.writeBytes(buf, off, len);
+    }
+
+    public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
+    {
+      this.eventDispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
+    }
+
+    public override function open():void
+    {
+      this.socket = new Socket();
+      this.socket.addEventListener(Event.CONNECT, socketConnected);
+      this.socket.addEventListener(IOErrorEvent.IO_ERROR, socketError);
+      this.socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, socketSecurityError);
+      this.socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
+      this.socket.connect(host, port);
+    }
+
+    public function socketConnected(event:Event):void
+    {
+      this.output = this.socket;
+      this.input = this.socket;
+      this.eventDispatcher.dispatchEvent(event);
+    }
+
+    public function socketError(event:IOErrorEvent):void
+    {
+      trace("Error Connecting:" + event);
+      this.close();
+      if (ioCallback == null)
+      {
+        return;
+      }
+      ioCallback(new TTransportError(TTransportError.UNKNOWN, "IOError: " + event.text));
+      this.eventDispatcher.dispatchEvent(event);
+    }
+
+    public function socketSecurityError(event:SecurityErrorEvent):void
+    {
+      trace("Security Error Connecting:" + event);
+      this.close();
+      this.eventDispatcher.dispatchEvent(event);
+    }
+
+    public function socketDataHandler(event:ProgressEvent):void
+    {
+      if (ioCallback != null)
+      {
+        ioCallback(null);
+      }
+      this.eventDispatcher.dispatchEvent(event);
+    }
+
+    public override function flush(callback:Function = null):void
+    {
+      this.ioCallback = callback;
+      this.output.writeBytes(this.obuffer);
+      this.socket.flush();
+      this.obuffer.clear();
+    }
+
+    public override function isOpen():Boolean
+    {
+      return (this.socket == null ? false : this.socket.connected);
+    }
+  }
+}


Add existing CameraMan source (such as it is)

error: pathspec 'src/CameraMan.as' did not match any file(s) known to git

--- src/CameraMan.as
+++ src/CameraMan.as
@@ -0,0 +1,116 @@
+package {
+    import flash.display.Sprite;
+    import flash.display.StageScaleMode;
+    import flash.display.StageAlign;
+    import flash.geom.Point;
+
+    import flash.external.ExternalInterface;
+
+    import flash.display.Bitmap;
+    import flash.display.BitmapData;
+    import flash.media.Camera;
+    import flash.media.Video;
+    import flash.utils.ByteArray;
+    import mx.graphics.codec.JPEGEncoder;
+
+    import flash.events.Event;
+    import flash.events.HTTPStatusEvent;
+    import flash.events.IOErrorEvent;
+    import flash.events.SecurityErrorEvent;
+    import flash.net.URLLoader;
+    import flash.net.URLRequest;
+
+    public class CameraMan extends Sprite {
+
+        private var videoface:Video;
+        private var cam:Camera;
+        private var photo:BitmapData;
+        private var sendto:String;
+        private var movieSize:Point;
+
+        public function CameraMan() {
+            stage.scaleMode = StageScaleMode.NO_SCALE;
+            stage.align = StageAlign.TOP_LEFT;
+
+            sendto = stage.loaderInfo.parameters.sendto;
+            movieSize = new Point(stage.loaderInfo.width, stage.loaderInfo.height);
+
+            this.initCamera();
+
+            if (ExternalInterface.available) {
+                ExternalInterface.addCallback("takePhoto", takePhoto);
+                ExternalInterface.addCallback("sendPhoto", sendPhoto);
+            }
+        }
+
+        public function initCamera() : void {
+            videoface = new Video(movieSize.x, movieSize.y);
+            this.addChild(this.videoface);
+            cam = Camera.getCamera();
+            cam.setMode(width, height, 15);
+            videoface.attachCamera(cam);
+        }
+
+        public function takePhoto() : void {
+            // freeze image
+            try {
+                photo = new BitmapData(videoface.videoWidth, videoface.videoHeight, false);
+                photo.draw(videoface);
+
+                // Swap the video for the captured bitmap.
+                var bitty:Bitmap = new Bitmap(photo);
+                this.addChild(bitty);
+                this.removeChild(videoface);
+            } catch(err:Error) {
+                trace(err.name + " " + err.message);
+            }
+
+            if (ExternalInterface.available) {
+                ExternalInterface.call('cameraman._tookPhoto');
+            }
+        }
+
+        public function sendPhoto() : void {
+            try {
+                // produce image file
+                var peggy:JPEGEncoder = new JPEGEncoder(75.0);
+                var image:ByteArray = peggy.encode(photo);
+
+                // send image file to server
+                var req:URLRequest = new URLRequest();
+                req.url = this.sendto;
+                req.method = "POST";
+                req.contentType = peggy.contentType;
+                req.data = image;
+
+                var http:URLLoader = new URLLoader();
+                http.addEventListener("complete", sentPhoto);
+                http.addEventListener("ioError", sendingIOError);
+                http.addEventListener("securityError", sendingSecurityError);
+                http.addEventListener("httpStatus", sendingHttpStatus);
+                http.load(req);
+            } catch(err:Error) {
+                trace(err.name + " " + err.message);
+            }
+        }
+
+        public function sendingHttpStatus(event:HTTPStatusEvent) : void {
+            trace("HTTPStatus: " + event.status + " " + event.target);
+        }
+
+        public function sendingIOError(event:IOErrorEvent) : void {
+            trace("IOError: " + event.type + " " + event.text + " " + event.target + " " + event.target.bytesLoaded);
+        }
+
+        public function sendingSecurityError(event:SecurityErrorEvent) : void {
+            trace("SecurityError: " + event.text + " " + event.target);
+        }
+
+        public function sentPhoto(event:Event) : void {
+            var url:String = event.target.data;
+            if (ExternalInterface.available)
+                ExternalInterface.call('cameraman._sentPhoto', url);
+        }
+
+    }
+}


Forgot to add this file

Forgot to add this file

error: pathspec 'src/org/jivesoftware/xiff/data/muc/MUCStatus.as' did not match any file(s) known to git

--- src/org/jivesoftware/xiff/data/muc/MUCStatus.as
+++ src/org/jivesoftware/xiff/data/muc/MUCStatus.as
@@ -0,0 +1,44 @@
+package org.jivesoftware.xiff.data.muc
+{
+	import flash.xml.XMLNode;
+
+	import org.jivesoftware.xiff.data.XMLStanza;
+
+	public class MUCStatus
+	{
+		private var node:XMLNode;
+		private var parent:XMLStanza
+		public function MUCStatus(xmlNode:XMLNode, parentStanza:XMLStanza)
+		{
+			super();
+			node = xmlNode ? xmlNode : new XMLNode(1, "status");
+			parent = parentStanza;
+		}
+
+		/**
+		 * Property used to add or retrieve a status code describing the condition that occurs.
+		 */
+		public function get code():Number
+		{
+			return node.attributes.code;
+		}
+
+		public function set code(newCode:Number):void
+		{
+			node.attributes.code = newCode.toString();
+		}
+
+		/**
+		 * Property that contains some text with a description of a condition.
+		 */
+		public function get message():String
+		{
+			return node.firstChild.nodeValue;
+		}
+
+		public function set message(val:String):void
+		{
+			node = parent.replaceTextNode(parent.getNode(), node, "status", val);
+		}
+	}
+}


MVCS Bundle sets the LogLevel to DEBUG

MVCS Bundle sets the LogLevel to DEBUG


Adding garbageCollect() to trigger garbage collection after movement animation.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rlowke/lowkemedia.git/'


adding "params" setter in Bullet

adding "params" setter in Bullet


Add AngelScript Http Request demo sample.

error: pathspec 'bin/Data/Scripts/43_HttpRequestDemo.as' did not match any file(s) known to git

--- bin/Data/Scripts/43_HttpRequestDemo.as
+++ bin/Data/Scripts/43_HttpRequestDemo.as
@@ -0,0 +1,97 @@
+// Http request example.
+// This example demonstrates:
+//     - How to use Http request API
+
+#include "Scripts/Utilities/Sample.as"
+
+String message;
+Text@ text;
+HttpRequest@ httpRequest;
+
+void Start()
+{
+    // Execute the common startup for samples
+    SampleStart();
+
+    // Create the user interface
+    CreateUI();
+
+    // Set the mouse mode to use in the sample
+    SampleInitMouseMode(MM_FREE);
+
+    // Subscribe to basic events such as update
+    SubscribeToEvents();
+}
+
+void CreateUI()
+{
+    // Construct new Text object
+    text = Text();
+
+    // Set font and text color
+    text.SetFont(cache.GetResource("Font", "Fonts/Anonymous Pro.ttf"), 15);
+    text.color = Color(1.0f, 1.0f, 0.0f);
+
+    // Align Text center-screen
+    text.horizontalAlignment = HA_CENTER;
+    text.verticalAlignment = VA_CENTER;
+
+    // Add Text instance to the UI root element
+    ui.root.AddChild(text);
+}
+
+void SubscribeToEvents()
+{
+    // Subscribe HandleUpdate() function for processing HTTP request
+    SubscribeToEvent("Update", "HandleUpdate");
+}
+
+void HandleUpdate(StringHash eventType, VariantMap& eventData)
+{
+    // Create HTTP request
+    if (httpRequest is null)
+        httpRequest = network.MakeHttpRequest("http://httpbin.org/ip", "GET");
+    else
+    {
+        // Initializing HTTP request
+        if (httpRequest.state == HTTP_INITIALIZING)
+            return;
+        // An error has occured
+        else if (httpRequest.state == HTTP_ERROR)
+        {
+            text.text = "An error has occured.";
+            UnsubscribeFromEvent("Update");
+        }
+        // Get message data
+        else
+        {
+            if (httpRequest.availableSize > 0)
+                message += httpRequest.ReadLine();
+            else
+            {
+                text.text = "Processing...";
+
+                JSONFile@ json = JSONFile();
+                json.FromString(message);
+
+                JSONValue val = json.GetRoot().Get("origin");
+
+                if (val.isNull)
+                    text.text = "Invalid string.";
+                else
+                    text.text =  "Your IP is: " + val.GetString();
+
+                UnsubscribeFromEvent("Update");
+            }
+        }
+    }
+}
+
+// Create XML patch instructions for screen joystick layout specific to this sample app
+String patchInstructions =
+        "<patch>" +
+        "    <add sel=\"/element/element[./attribute[@name='Name' and @value='Hat0']]\">" +
+        "        <attribute name=\"Is Visible\" value=\"false\" />" +
+        "    </add>" +
+        "</patch>";
+


Add new test class: CopyingOfCompositeCopyableClassTest.

error: pathspec 'dolly-framework/src/test/actionscript/dolly/CopyingOfCompositeCopyableClassTest.as' did not match any file(s) known to git

--- dolly-framework/src/test/actionscript/dolly/CopyingOfCompositeCopyableClassTest.as
+++ dolly-framework/src/test/actionscript/dolly/CopyingOfCompositeCopyableClassTest.as
@@ -0,0 +1,44 @@
+package dolly {
+
+import dolly.core.dolly_internal;
+import dolly.data.CompositeCopyableClass;
+
+import mx.collections.ArrayCollection;
+import mx.collections.ArrayList;
+
+import org.as3commons.reflect.Field;
+import org.as3commons.reflect.Type;
+import org.flexunit.asserts.assertEquals;
+import org.flexunit.asserts.assertNotNull;
+
+use namespace dolly_internal;
+
+public class CopyingOfCompositeCopyableClassTest {
+
+	private var compositeCopyableClass:CompositeCopyableClass;
+	private var compositeCopyableClassType:Type;
+
+	[Before]
+	public function before():void {
+		compositeCopyableClass = new CompositeCopyableClass();
+		compositeCopyableClass.array = [1, 2, 3, 4, 5];
+		compositeCopyableClass.arrayList = new ArrayList([1, 2, 3, 4, 5]);
+		compositeCopyableClass.arrayCollection = new ArrayCollection([1, 2, 3, 4, 5]);
+
+		compositeCopyableClassType = Type.forInstance(compositeCopyableClass);
+	}
+
+	[After]
+	public function after():void {
+		compositeCopyableClass = null;
+		compositeCopyableClassType = null;
+	}
+
+	[Test]
+	public function findingAllWritableFieldsForType():void {
+		const writableFields:Vector.<Field> = Copier.findCopyableFieldsForType(compositeCopyableClassType);
+		assertNotNull(writableFields);
+		assertEquals(4, writableFields.length);
+	}
+}
+}


- bugfix: UIComponent#parseXMLContent can now deal with empty text nodes without creating empty Label elements all over the place. This is required because XML.ignoreWhitespace removes _all_ whitespace that is not between normal characters and thus even deletes trailing or leading spaces in text nodes.

Example of what goes wrong because of that:

for more information, see here
becomes

for more information, seehere
and thus gets displayed as
for more information, seehere

git-svn-id: e38e7cdd6ace00d8230583a2d3b43e9a55f5c011@889 bc4816be-ef27-423a-9c4d-fc420be121a2

--- src/reprise/ui/UIComponent.as
+++ src/reprise/ui/UIComponent.as
@@ -2335,9 +2335,16 @@
 		{
 			XML.prettyPrinting = false;
 			var childNode : XML = node.children()[0];
+			var state : Object = {nodeIsEmpty : false};
 			while (childNode)
 			{
-				childNode = preprocessTextNode(childNode);
+				childNode = preprocessTextNode(childNode, state);
+				if (state.nodeIsEmpty)
+				{
+					childNode = childNode.parent().children()[childNode.childIndex() + 1];
+					state.nodeIsEmpty = false;
+					continue;
+				}
 				var child : UIComponent =
 					m_rootElement.uiRendererFactory().rendererByNode(childNode);
 				if (child)
@@ -2353,7 +2360,7 @@
 			}
 		}

-		protected function preprocessTextNode(node : XML) : XML
+		protected function preprocessTextNode(node : XML, state : Object = null) : XML
 		{
 			var textNodeTags : String = UIRendererFactory.TEXTNODE_TAGS;
 			if (textNodeTags.indexOf(node.localName() + ",") == -1)
@@ -2384,6 +2391,10 @@
 			xmlParser.setChildren(nodesToCombine);
 			siblings[node.childIndex()] = xmlParser;
 			XML.ignoreWhitespace = true;
+			if (state && xmlParser.text().toString().search(/\S/g) == -1)
+			{
+				state.nodeIsEmpty = true;
+			}
 			return xmlParser;
 		}


TextSlave fix comment

TextSlave fix comment


adding missing Viewport3D class

adding missing Viewport3D class

fatal: unable to access 'https://github.com/aerys/minko-as3.git/': The requested URL returned error: 403


Initial implementation of most of Matrix, for Nathan. Not tested.

error: pathspec 'tamarin-central/thane/as3src/flash/geom/Matrix.as' did not match any file(s) known to git

--- tamarin-central/thane/as3src/flash/geom/Matrix.as
+++ tamarin-central/thane/as3src/flash/geom/Matrix.as
@@ -0,0 +1,171 @@
+//
+// $Id: $
+
+package flash.geom {
+
+public class Matrix
+{
+    /**
+     * One of the values that affect the positioning of pixels along the x axis when scaling
+     * or rotating an image.
+     */
+    public var a :Number;
+
+    /**
+     * One of the values that affect the positioning of pixels along the y axis when scaling
+     * or rotating an image.
+     */
+    public var b :Number;
+
+    /**
+     * One of the values that affect the positioning of pixels along the x axis when scaling
+     * or rotating an image.
+     */
+    public var c :Number;
+
+    /**
+     * One of the values that affect the positioning of pixels along the y axis when scaling
+     * or rotating an image.
+     */
+    public var d :Number;
+
+    /**
+     * The distance by which to translate each point along the x axis.
+     */
+    public var tx :Number;
+
+    /**
+     * The distance by which to translate each point along the x axis.
+     */
+    public var ty :Number;
+
+    /**
+     * Creates a new Matrix object with the specified parameters.
+     */
+    public function Matrix (a :Number = 1, b :Number = 0, c :Number = 0, d :Number = 1,
+                            tx :Number = 0, ty :Number = 0)
+    {
+        configure(a, b, c, d, tx, ty);
+    }
+
+    /**
+     * Concatenates a matrix with the current matrix, effectively combining the geometric
+     * effects of the two. In mathematical terms, concatenating two matrixes is the same as
+     * combining them using matrix multiplication.
+     */
+    public function concat (m :Matrix) :void
+    {
+        configure(a*m.a + b*m.c, a*m.b + b*m.d,
+                  c*m.a + d*m.c, c*m.b + d*m.d,
+                  a*m.tx + b*m.ty, c*m.tx + d*m.ty);
+    }
+
+    /**
+     * Includes parameters for scaling, rotation, and translation. When applied to a matrix
+     * it sets the matrix's values based on those parameters.
+     */
+    public function createBox (scaleX :Number, scaleY :Number, rotation :Number = 0,
+                               tx :Number = 0, ty :Number = 0) :void
+    {
+        // let's implement this bizarre function the easy way
+        identity();
+        rotate(rotation);
+        scale(scaleX, scaleY);
+        translate(tx, ty);
+    }
+
+    /**
+     * Given a point in the pretransform coordinate space, returns the coordinates of that
+     * point after the transformation occurs. Unlike the standard transformation applied
+     * using the transformPoint() method, the deltaTransformPoint() method's transformation
+     * does not consider the translation parameters tx and ty.
+     */
+    public function deltaTransformPoint (point: Point) :Point
+    {
+        return new Point(a*point.x + b*point.y, c*point.x + d*point.y);
+    }
+
+    /**
+     * Sets each matrix property to a value that causes a null transformation. An object
+     * transformed by applying an identity matrix will be identical to the original.
+     */
+    public function identity() :void
+    {
+        configure(1, 0, 0, 1, 0, 0);
+    }
+
+    /**
+     * Performs the opposite transformation of the original matrix. You can apply an
+     * inverted matrix to an object to undo the transformation performed when applying
+     * the original matrix.
+     */
+    public function invert () :void
+    {
+        throw new Error("not implemented");
+    }
+
+    /**
+     * Applies a rotation transformation to the Matrix object.
+     */
+    public function rotate (angle :Number) :void
+    {
+        var cs :Number = Math.cos(angle);
+        var sn :Number = Math.sin(angle);
+        configure(a*cs - b*sn, a*sn + b*cs, c*cs - d*sn, c*sn + d*cs, tx, ty);
+    }
+
+    /**
+     * Applies a scaling transformation to the matrix. The x axis is multiplied by sx,
+     * and the y axis it is multiplied by sy.
+     */
+    public function scale (sx :Number, sy :Number) :void
+    {
+        configure(a*sx, b*sy, c*sx, d*sy, tx, ty);
+    }
+
+    /**
+     * Returns the result of applying the geometric transformation represented by the
+     * Matrix object to the specified point.
+     */
+    public function transformPoint (point :Point) :Point
+    {
+        return new Point(a*point.x + b*point.y + tx, c*point.x + d*point.y + ty);
+    }
+
+    /**
+     * Translates the matrix along the x and y axes, as specified by the dx and dy parameters.
+     */
+    public function translate (dx :Number, dy :Number) :void
+    {
+        configure(a, b, c, d, tx + dx, ty + dy);
+    }
+
+    /**
+     * Returns a new Matrix object that is a clone of this matrix, with an exact
+     * copy of the contained object.
+     */
+    public function clone () :Matrix
+    {
+        return new Matrix(a, b, c, d, tx, ty);
+    }
+
+    /**
+     * Returns a text value listing the properties of the Matrix object.
+     */
+    public function toString () :String
+    {
+        return "(a=" + a + ", b=" + b + ", c=" + c + ", d=" + d + ", tx=" + tx + ", ty=" + ty + ")";
+    }
+
+    protected function configure (a :Number, b :Number, c :Number, d :Number,
+                                  tx :Number, ty :Number) :void
+    {
+        this.a = a;
+        this.b = b;
+        this.c = c;
+        this.d = d;
+        this.tx = tx;
+        this.ty = ty;
+    }
+}
+}


[crt] add amd64-linux crt

[crt] add amd64-linux crt

error: pathspec 'crt/amd64-linux/crt.as' did not match any file(s) known to git

--- crt/amd64-linux/crt.as
+++ crt/amd64-linux/crt.as
@@ -0,0 +1,8 @@
+	.file	"crt.as"
+	.text
+	.global	_start
+
+_start:
+	call	$main
+	movl    %eax, %edi
+	call	$exit


Added MultiVarTween class, oops.

Added MultiVarTween class, oops.

error: pathspec 'net/flashpunk/tweens/misc/MultiVarTween.as' did not match any file(s) known to git

--- net/flashpunk/tweens/misc/MultiVarTween.as
+++ net/flashpunk/tweens/misc/MultiVarTween.as
@@ -0,0 +1,60 @@
+package net.flashpunk.tweens.misc
+{
+	import net.flashpunk.Tween;
+
+	/**
+	 * Tweens multiple numeric public properties of an Object simultaneously.
+	 */
+	public class MultiVarTween extends Tween
+	{
+		/**
+		 * Constructor.
+		 * @param	complete		Optional completion callback.
+		 * @param	type			Tween type.
+		 */
+		public function MultiVarTween(complete:Function = null, type:uint = 0)
+		{
+			super(0, type, complete);
+		}
+
+		/**
+		 * Tweens multiple numeric public properties.
+		 * @param	object		The object containing the properties.
+		 * @param	values		An object containing key/value pairs of properties and target values.
+		 * @param	duration	Duration of the tween.
+		 * @param	ease		Optional easer function.
+		 */
+		public function tween(object:Object, values:Object, duration:Number, ease:Function = null):void
+		{
+			_object = object;
+			_vars.length = 0;
+			_start.length = 0;
+			_range.length = 0;
+			_target = duration;
+			for (var p:String in values)
+			{
+				if (!object.hasOwnProperty(p)) throw new Error("The Object does not have the property\"" + p + "\", or it is not accessible.");
+				var a:* = _object[p] as Number;
+				if (a == null) throw new Error("The property \"" + p + "\" is not numeric.");
+				_vars.push(p);
+				_start.push(a);
+				_range.push(values[p] - a);
+			}
+			start();
+		}
+
+		/** @private Updates the Tween. */
+		override public function update():void
+		{
+			super.update();
+			var i:int = _vars.length;
+			while (i --) _object[_vars[i]] = _start[i] + _range[i] * _t;
+		}
+
+		// Tween information.
+		/** @private */ private var _object:Object;
+		/** @private */ private var _vars:Vector.<String> = new Vector.<String>;
+		/** @private */ private var _start:Vector.<Number> = new Vector.<Number>;
+		/** @private */ private var _range:Vector.<Number> = new Vector.<Number>;
+	}
+}


adding redirect method

adding redirect method


ErrorManager

ErrorManager

Implemented ErrorManager

fatal: unable to access 'https://github.com/gaetancollaud/locomote-video-player.git/': The requested URL returned error: 403


fixing some minor bugs

fixing some minor bugs


Transferred from the Adobe Open Source Subversion Repository

Revision: 5099
Author:   gauravj@adobe.com
Date:     2009-02-27T03:43:02.639229Z

Log Message:
-----------
Update action script files with asdoc version tags.

QE Notes: None.
Doc Notes: Please review and update as necessary.
tests: checkintests

Modified Paths:
--------------
147 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1274376 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/rpc/src/mx/rpc/soap/SOAPEncoder.as
+++ frameworks/projects/rpc/src/mx/rpc/soap/SOAPEncoder.as
@@ -86,6 +86,11 @@
      * first be set to false. Conversely, if a type whiteSpace
      * restriction is set to replace or collapse then
      * that setting will be honored even if ignoreWhitespace is set to false.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function get ignoreWhitespace():Boolean
     {
@@ -136,6 +141,11 @@
     /**
      * Creates a SOAP encodes request to an operation from the given input
      * parameters and headers.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     public function encodeRequest(args:* = null, headers:Array = null):XML
     {
@@ -169,6 +179,11 @@
     /**
      * A SOAP Envelope element is the root element of a SOAP message. It
      * must specify the SOAP namespace.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeEnvelope(args:*, headers:Array):XML
     {
@@ -191,6 +206,11 @@

     /**
      * Appends SOAP Header to the SOAP Envelope
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeHeaders(headers:Array, envelopeXML:XML):void
     {
@@ -213,6 +233,11 @@

     /**
      * Appends a header element to top SOAP Header tag
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeHeaderElement(header:Object, headersXML:XML):void
     {
@@ -292,6 +317,11 @@

     /**
      * Encodes the SOAP Body. Currently assumes only one operation sub-element.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeBody(inputParams:*, envelopeXML:XML):void
     {
@@ -368,6 +398,11 @@
      * becomes the schema type of the enclosing element (Body for document
      * style...)."
      *

+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeOperationAsDocumentLiteral(inputParams:Object, bodyXML:XML):void
     {
@@ -419,6 +454,11 @@
      * part becomes the schema type of the enclosing element ( ... part accessor
      * element for rpc style)."
      *

+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeOperationAsRPCLiteral(inputParams:Object, bodyXML:XML):void
     {
@@ -458,6 +498,11 @@
      * style allows variations in it's format (such as the SOAP encoding does),
      * then all variations MUST be supported ("reader makes right")."
      *

+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeOperationAsRPCEncoded(inputParams:*, bodyXML:XML):void
     {
@@ -477,6 +522,11 @@
     /**
      * Encodes an input message for a WSDL operation. The provided input
      * parameters are validated against the required message parts.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodeMessage(inputParams:*, operationXML:XML):void
     {
@@ -583,6 +633,11 @@
      * <complexType> or <simpleType>) directly by QName or to an element
      * definition by QName depending on the SOAP use and encodingStyle
      * attributes.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function encodePartValue(part:WSDLMessagePart, value:*):XMLList
     {
@@ -603,6 +658,11 @@
     /**
      * Looks to see whether a pre-encoded SOAP request has been passed to the
      * encoder.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     protected function preEncodedCheck(value:*):Object
     {
@@ -646,6 +706,11 @@
      * XML Schema does not normally allow minOccurs or maxOccurs on top-level
      * element definitions and the SchemaProcessor is not looking out for them
      * so we have to special case this situation here.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
      */
     override public function encode(value:*, name:QName = null, type:QName = null, definition:XML = null):XMLList
     {


Transferred from the Adobe Open Source Subversion Repository

Revision: 3576
Author:   mhorn@adobe.com
Date:     2008-10-10T20:28:57.093323Z

Log Message:
-----------
more asdoc updates

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/Line.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/BitmapGraphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/Graphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/Rect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/PathSegment.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/QuadraticBezierSegment.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/BitmapResizeMode.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1285783 13f79535-47bb-0310-9956-ffa450edef68


Missed this.

Missed this.

git-svn-id: a3e1eb16dde062992de22c830ed8045c8013209a@366 c613c5cb-e716-0410-b11b-feb51c14d237

error: pathspec 'src/as/com/threerings/whirled/client/PendingData.as' did not match any file(s) known to git

--- src/as/com/threerings/whirled/client/PendingData.as
+++ src/as/com/threerings/whirled/client/PendingData.as
@@ -0,0 +1,37 @@
+//
+// $Id$
+//
+// Vilya library - tools for developing networked games
+// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved
+// http://www.threerings.net/code/vilya/
+//
+// This library is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as published
+// by the Free Software Foundation; either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+package com.threerings.whirled.client {
+
+import com.threerings.whirled.data.SceneModel;
+
+/**
+ * Contains information on a pending scene change.
+ */
+public class PendingData
+{
+    /** The id of the scene to which we are moving. */
+    public var sceneId :int;
+
+    /** The cached scene model for the scene to which wer'e moving, or null. */
+    public var model :SceneModel;
+}
+}


Regression Testcase for Bug 539328 (r=brbaker)

error: pathspec 'test/acceptance/regress/bug_539328.as' did not match any file(s) known to git

--- test/acceptance/regress/bug_539328.as
+++ test/acceptance/regress/bug_539328.as
@@ -0,0 +1,64 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is [Open Source Virtual Machine.].
+ *
+ * The Initial Developer of the Original Code is
+ * Adobe System Incorporated.
+ * Portions created by the Initial Developer are Copyright (C) 2007-2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Adobe AS3 Team
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+package {
+    public interface IBar
+    {
+        function i0():*;
+    }
+}
+import avmplus.*;
+
+startTest();
+
+const x = 20/2;
+
+var expected:XML = <type name="IBar" base="Class" isDynamic="true" isFinal="true" isStatic="true">
+  <extendsClass type="Class"/>
+  <extendsClass type="Object"/>
+  <accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
+  <factory type="IBar">
+    <method name="i0" declaredBy="IBar" returnType="*" uri="IBar"/>
+  </factory>
+</type>
+
+
+
+AddTestCase("Bug 539328: describeType() omits interface methods", expected, describeType(IBar, FLASH10_FLAGS));
+
+test();


Beta 3 is out! They removed the built-in StringBuilder class, so I made
my own for now that just does what I need it to.

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4103 542714f4-19e9-0310-aa3c-eee0fc999fb1

error: pathspec 'src/as/com/threerings/util/StringBuilder.as' did not match any file(s) known to git

--- src/as/com/threerings/util/StringBuilder.as
+++ src/as/com/threerings/util/StringBuilder.as
@@ -0,0 +1,33 @@
+package com.threerings.util {
+
+public class StringBuilder
+{
+    public function StringBuilder (... args)
+    {
+        _array = args;
+    }
+
+    /**
+     * Append all arguments to the end of the string being built
+     * and return this StringBuilder.
+     */
+    public function append (... args) :StringBuilder
+    {
+        while (args.length > 0) {
+            _array.push(args.shift());
+        }
+        return this;
+    }
+
+    /**
+     * Return the String built so far.
+     */
+    public function toString () :String
+    {
+        return _array.join("");
+    }
+
+    /** Our array in which we place all arguments. */
+    protected var _array :Array;
+}
+}


adding cocktail public getter

adding cocktail public getter

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


cleaning up and updating bullet properties according current needs


removing warnings

removing warnings


added autosql file for bigPsl files.

added autosql file for bigPsl files.

error: pathspec 'autosql/bigPsl.as' did not match any file(s) known to git

--- autosql/bigPsl.as
+++ autosql/bigPsl.as
@@ -0,0 +1,33 @@
+table bigPsl
+"bigPsl pairwise alignment"
+    (
+    string chrom;       "Reference sequence chromosome or scaffold"
+    uint   chromStart;  "Start position in chromosome"
+    uint   chromEnd;    "End position in chromosome"
+    string name;        "Name or ID of item, ideally both human readable and unique"
+    uint score;         "Score (0-1000)"
+    char[1] strand;     "+ or - for strand"
+    uint thickStart;    "Start of where display should be thick (start codon)"
+    uint thickEnd;      "End of where display should be thick (stop codon)"
+    uint reserved;       "RGB value (use R,G,B string in input file)"
+    int blockCount;     "Number of blocks"
+    int[blockCount] blockSizes; "Comma separated list of block sizes"
+    int[blockCount] chromStarts; "Start positions relative to chromStart"
+
+    uint    oChromStart;"Start position in other chromosome"
+    uint    oChromEnd;  "End position in other chromosome"
+    char[1] oStrand;    "+ or - for other strand"
+    uint    oChromSize; "Size of other chromosome."
+    int[blockCount] oChromStarts; "Start positions relative to oChromStart"
+
+    lstring  oSequence;  "Sequence on other chrom (or edit list, or empty)"
+    string   oCDS;       "CDS in NCBI format"
+
+    uint    chromSize;"Size of target chromosome"
+
+    uint match;        "Number of bases matched."
+    uint misMatch; " Number of bases that don't match "
+    uint repMatch; " Number of bases that match but are part of repeats "
+    uint nCount;   " Number of 'N' bases "
+    )
+


fix failAfterDestruction test

fix failAfterDestruction test

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MerlinDS/utils.git/'


removed an unused variable

removed an unused variable

--- src/com/nodename/Delaunay/Site.as
+++ src/com/nodename/Delaunay/Site.as
@@ -8,7 +8,6 @@
 		private static var _pool:Vector.<Site> = new Vector.<Site>();
 		public static function create(p:Point, index:int, weight:Number, color:uint):Site
 		{
-			var site:Site;
 			if (_pool.length > 0)
 			{
 				return _pool.pop().init(p, index, weight, color);


cleared out another sub_net event

cleared out another sub_net event

fatal: unable to access 'https://github.com/pubnub/flash.git/': The requested URL returned error: 403


Forgot to add this file

Forgot to add this file

git-svn-id: c197267f952b24206666de142881703007ca05d5@9971 b35dd754-fafc-0310-a699-88a17e54d16e


Initial implementation of a key binding abstraction class

error: pathspec 'com/zehfernando/input/KeyBinder.as' did not match any file(s) known to git

--- com/zehfernando/input/KeyBinder.as
+++ com/zehfernando/input/KeyBinder.as
@@ -0,0 +1,165 @@
+package com.zehfernando.input {
+	import com.zehfernando.signals.SimpleSignal;
+
+	import flash.display.Stage;
+	import flash.events.KeyboardEvent;
+	/**
+	 * @author zeh fernando
+	 */
+	public class KeyBinder {
+
+		/**
+		 * Binds keys to commands
+		 */
+
+		// Properties
+		private var _isStarted:Boolean;
+
+		// Instances
+		private var keys:Vector.<KeyBinding>;
+
+		private var _onCommandPressed:SimpleSignal;
+		private var _onCommandFired:SimpleSignal;
+		private var _onCommandReleased:SimpleSignal;
+
+		private var stage:Stage;
+
+		// ================================================================================================================
+		// CONSTRUCTOR ----------------------------------------------------------------------------------------------------
+
+		public function KeyBinder() {
+			keys = new Vector.<KeyBinding>();
+
+			_onCommandPressed = new SimpleSignal();
+			_onCommandFired = new SimpleSignal();
+			_onCommandReleased = new SimpleSignal();
+		}
+
+		// ================================================================================================================
+		// INTERNAL INTERFACE ---------------------------------------------------------------------------------------------
+
+		private function filterKeys(__keyCode:uint, __modifierShift:Boolean):Vector.<KeyBinding> {
+			// Returns a list of all key bindings that fit a filter
+
+			var filteredKeys:Vector.<KeyBinding> = new Vector.<KeyBinding>();
+
+			for (var i:int = 0; i < keys.length; i++) {
+				if (keys[i].keyCode == __keyCode && keys[i].modifierShift == __modifierShift) {
+					filteredKeys.push(keys[i]);
+				}
+			}
+
+			return filteredKeys;
+		}
+
+		// ================================================================================================================
+		// EVENT INTERFACE ------------------------------------------------------------------------------------------------
+
+		private function onKeyDown(__e:KeyboardEvent):void {
+			//	log("key down: " + __e);
+			var filteredKeys:Vector.<KeyBinding> = filterKeys(__e.keyCode, __e.shiftKey);
+			for (var i:int = 0; i < filteredKeys.length; i++) {
+				if (!filteredKeys[i].isPressed) {
+					filteredKeys[i].isPressed = true;
+					_onCommandPressed.dispatch(filteredKeys[i].command);
+				}
+
+				//log(i + ") Filtering keys presses for " + __e.keyCode, __e.shiftKey, "  ====> " + filteredKeys[i].command);
+				_onCommandFired.dispatch(filteredKeys[i].command);
+			}
+		}
+
+		private function onKeyUp(__e:KeyboardEvent):void {
+			var filteredKeys:Vector.<KeyBinding> = filterKeys(__e.keyCode, __e.shiftKey);
+			for (var i:int = 0; i < filteredKeys.length; i++) {
+				filteredKeys[i].isPressed = false;
+				_onCommandReleased.dispatch(filteredKeys[i].command);
+			}
+		}
+
+		// ================================================================================================================
+		// PUBLIC INTERFACE -----------------------------------------------------------------------------------------------
+
+		public function start(__stage:Stage):void {
+			if (!_isStarted) {
+				stage = __stage;
+				stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown, false, 0, true);
+				stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp, false, 0, true);
+
+				_isStarted = true;
+			}
+		}
+
+		public function stop():void {
+			if (_isStarted) {
+				stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown, false);
+				stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyUp, false);
+				stage = null;
+
+				_isStarted = false;
+			}
+		}
+
+		public function setFromXML(__xmlData:XML):void {
+			// Set items from a list of <key> nodes
+
+			var keyDatas:XMLList = __xmlData.child("key");
+
+			for (var i:int = 0; i < keyDatas.length(); i++) {
+				keys.push(KeyBinding.fromXML(keyDatas[i]));
+			}
+		}
+
+
+		// ================================================================================================================
+		// ACCESSOR INTERFACE ---------------------------------------------------------------------------------------------
+
+		public function get onCommandPressed():SimpleSignal {
+			return _onCommandPressed;
+		}
+
+		public function get onCommandFired():SimpleSignal {
+			return _onCommandFired;
+		}
+
+		public function get onCommandReleased():SimpleSignal {
+			return _onCommandReleased;
+		}
+
+	}
+}
+import com.zehfernando.utils.XMLUtils;
+class KeyBinding {
+
+	// Properties
+	public var keyCode:uint;
+	public var modifierShift:Boolean;
+	public var command:String;
+	public var isPressed:Boolean;
+
+	// ================================================================================================================
+	// CONSTRUCTOR ----------------------------------------------------------------------------------------------------
+
+	public function KeyBinding() {
+		keyCode = 0;
+		modifierShift = false;
+		command = "";
+		isPressed = false;
+	}
+
+	// ================================================================================================================
+	// PUBLIC INTERFACE -----------------------------------------------------------------------------------------------
+
+	public static function fromXML(__keyData:XML):KeyBinding {
+		// Based on a <key> node, returns a key binding instance
+		// E.g.: <key code="8" shift="true">focus_prev</key>
+
+		var binding:KeyBinding = new KeyBinding();
+
+		binding.keyCode			= XMLUtils.getAttributeAsInt(__keyData, "code");
+		binding.modifierShift	= XMLUtils.getAttributeAsBoolean(__keyData, "shift");
+		binding.command			= __keyData.toString();
+
+		return binding;
+	}
+}


turning classname into a camel-case style


FLEX-35267 FLEX-35260 Added a unit test which can verify the column-index and header-index related functions more thoroughly. Currently it fails, as expected.

error: pathspec 'frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as' did not match any file(s) known to git

--- frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as
+++ frameworks/projects/spark/tests/spark/components/gridClasses/GridHeaderViewLayout_FLEX_35260_Tests.as
@@ -0,0 +1,387 @@
+package spark.components.gridClasses {
+    import flash.geom.Matrix;
+    import flash.geom.Point;
+    import flash.geom.Rectangle;
+
+    import mx.collections.ArrayCollection;
+
+    import org.flexunit.assertThat;
+
+    import org.flexunit.asserts.assertEquals;
+    import org.flexunit.runners.Parameterized;
+    import org.fluint.uiImpersonation.UIImpersonator;
+
+    import spark.components.DataGrid;
+    import spark.components.GridColumnHeaderGroup;
+
+    /*
+     Example for two-column table (with no horizontal scroll):
+
+     [pl]: GridColumnHeaderGroup padding left
+     [lch]: still part of last column header, but beyond last column width
+     c0: first column header starts here
+     c1: first column header ends here, second column header (if it exists) starts, and column separator is here
+     c2: second column header ends here; second column separator is here
+     ...
+     cx: last column header ends here; last column separator is here
+
+     d0: first column ends at this x-axis coordinate (but the first header doesn't, due to [pl])
+     d1: second column ends at this x-axis coordinate
+     ...
+     dx: last column ends at this x-axis coordinate
+
+     e: table ends at this x-axis coordinate
+
+     f0: header ends and grid starts at this y-coordinate
+     f1: first column ends here and second column (if it exists) begins here
+     f2: second column ends here and third column (if it exists) begins here
+     ...
+     fx: last column ends here
+
+     g0: bottom-left point of first column header
+     g1: bottom-right point of first column header
+     g2: bottom-right point of second column header
+     ...
+     gx: bottom-right point of (last column header - [lch])
+
+     h: bottom-right point of last column header and x-coordinate at end of data grid
+
+     And for each point we generate the 8 adjacent points:
+     (x+1, y), (x+1, y+1), (x+1, y-1),
+     (x-1, y), (x-1, y+1), (x-1, y-1),
+     (x, y-1), (x, y-1). For easier comprehension we mark them
+     using cardinal points: N, NE, E, SE, S, SW, W, NW.
+     ...and we check various boundaries against all of them
+
+     a (0, 0)
+     ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
+     ░░░░░b════c0══════d0═══c1════════════════════════════d1══c2═════════e░░░░░░░
+     ░░░░░║▓▓▓▓║▓▓▓▓▓▓▓▓▓▓▓▓║▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓║▓▓▓▓▓▓▓▓▓▓║░░░░░░░
+     ░░░░░║[pl]║▓▓▓INDEX▓▓▓▓║▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓NAME▓▓▓▓▓▓▓▓▓▓▓▓▓║▓▓▓[lch]▓▓║░░░░░░░
+     ░░░░░║▓▓▓▓║▓▓▓▓▓▓▓▓▓▓▓▓║▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓║▓▓▓▓▓▓▓▓▓▓║░░░░░░░
+     ░░░░░f0═══g0══════f1═══g1════════════════════════════f2══g2═════════h░░░░░░░
+     ░░░░░║     01     ║     John                         ║              ║░░░░░░░
+     ░░░░░║     02     ║     Jane                         ║              ║░░░░░░░
+     ░░░░░║     03     ║     Judy                         ║              ║░░░░░░░
+     ░░░░░║     04     ║     James                        ║              ║░░░░░░░
+     ░░░░░╚════════════╩══════════════════════════════════╩══════════════╝░░░░░░░
+     ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
+     ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
+     */
+
+    [RunWith("org.flexunit.runners.Parameterized")]
+    public class GridHeaderViewLayout_FLEX_35260_Tests
+    {
+        private static var foo:Parameterized;
+        private static const N:Matrix = new Matrix(1, 0, 0, 1, 0, -1);
+        private static const NE:Matrix = new Matrix(1, 0, 0, 1, 1, -1);
+        private static const E:Matrix = new Matrix(1, 0, 0, 1, 1, 0);
+        private static const SE:Matrix = new Matrix(1, 0, 0, 1, 1, 1);
+        private static const S:Matrix = new Matrix(1, 0, 0, 1, 0, 1);
+        private static const SW:Matrix = new Matrix(1, 0, 0, 1, -1, 1);
+        private static const W:Matrix = new Matrix(1, 0, 0, 1, -1, 0);
+        private static const NW:Matrix = new Matrix(1, 0, 0, 1, -1, -1);
+        private static const ITSELF:Matrix = new Matrix(1, 0, 0, 1, 0, 0); //the point, unmodified
+        private static const directions:Array = [ITSELF, N, NE, E, SE, S, SW, W, NW];
+
+        private static var _dataGrid:DataGrid;
+
+        private var _keyRectangles:Array;
+        private var _keyPoints:Array;
+
+        public static var dimensions:Array = [/*x, y, width, header padding left, header padding top, [column widths] */
+            [[10, 0, 300, 5, 0, [25, 150]]],
+            [[0, 0, 300, 5, 0, [25, 150]]]
+        ];
+
+
+        [BeforeClass]
+        public static function setUpBeforeClass():void
+        {
+            _dataGrid = new DataGrid();
+            _dataGrid.setStyle("borderVisible", false); //to not deal with the complications of Scroller.minViewportInset
+            UIImpersonator.addChild(_dataGrid);
+        }
+
+        [AfterClass]
+        public static function tearDownAfterClass():void
+        {
+            UIImpersonator.removeAllChildren();
+
+            _dataGrid = null;
+        }
+
+        [Before]
+        public function setUp():void
+        {
+
+        }
+
+        [After]
+        public function tearDown():void
+        {
+            _keyRectangles = null;
+            _keyPoints = null;
+        }
+
+        /*[Ignore]
+        [Test]
+        public function test_global_coordinates_over_header_view(globalPoint:Array, expectedHeaderIndex:int):void
+        {
+            //given
+            var pointOverAHeaderView:Boolean = expectedHeaderIndex != -1;
+
+            //when
+            var doesHeaderContainThisPoint:Boolean = _sut.areCoordinatesOverAHeaderView(new Point(globalPoint[0], globalPoint[1]));
+
+            //then
+            assertEquals(pointOverAHeaderView, doesHeaderContainThisPoint);
+        }
+
+        [Ignore]
+        [Test]
+        public function test_column_index(globalPoint:Array, expectedColumnIndex:int):void
+        {
+            //given
+            var localPoint:Point = _dataGrid.grid.globalToLocal(new Point(globalPoint[0], globalPoint[1]));
+
+            //when
+            var columnIndex:int = _dataGrid.grid.getColumnIndexAt(localPoint.x, 0);
+
+            //then
+            assertEquals(expectedColumnIndex, columnIndex);
+        }
+
+        [Ignore]
+        [Test]
+        public function test_header_contains_global_coordinates(globalPoint:Array, headerShouldContainThisPoint:Boolean):void
+        {
+            //when
+            var doesHeaderContainThisPoint:Boolean = _sut.containsGlobalCoordinates(new Point(globalPoint[0], globalPoint[1]));
+
+            //then
+            assertEquals(headerShouldContainThisPoint, doesHeaderContainThisPoint);
+        }*/
+
+        [Test(dataProvider="dimensions")]
+        public function test_with_no_scroll(dimensions:Array):void
+        {
+            //given
+            _dataGrid.width = getWidth(dimensions);
+            _dataGrid.x = getX(dimensions);
+            _dataGrid.y = getY(dimensions);
+
+            _dataGrid.columnHeaderGroup.setStyle("paddingLeft", getHeaderPaddingLeft(dimensions));
+            _dataGrid.columnHeaderGroup.setStyle("paddingTop", getHeaderPaddingTop(dimensions));
+
+            var gridColumns:Array = [];
+            for (var i:int = 0; i < getColumnWidths(dimensions).length; i++)
+            {
+                var column:GridColumn = new GridColumn();
+                column.width = getColumnWidth(dimensions, i);
+                gridColumns.push(column);
+            }
+            _dataGrid.columns = new ArrayCollection(gridColumns);
+
+            _dataGrid.validateNow();
+
+            _keyPoints = generateKeyPoints(dimensions, _dataGrid);
+            _keyRectangles = generateKeyRectangles(_keyPoints, dimensions);
+
+            //then
+            //first, make sure that the dataGrid was rendered correctly
+            assertThat("The dataGrid has not yet been correctly rendered on stage", getActualHeaderHeight(_dataGrid) > 0);
+
+            for (var pointName:String in _keyPoints)
+            {
+                for (var i:int = 0; i < directions.length; i++)
+                {
+                    //when
+                    var adjacentPoint:Point = getAdjacentPoint(_keyPoints[pointName], directions[i]);
+                    var expectedHeaderIndex:int = getHeaderIndexAssumption(adjacentPoint);
+                    var actualHeaderIndex:int = getHeaderIndexAtGlobalPoint(adjacentPoint);
+
+                    //then
+                    const errorMessage:String = getHeaderIndexErrorMessage(pointName, directions[i], adjacentPoint, expectedHeaderIndex, actualHeaderIndex);
+                    assertEquals(errorMessage, expectedHeaderIndex, actualHeaderIndex);
+                }
+            }
+        }
+
+        private function getHeaderIndexErrorMessage(pointName:String, direction:Matrix, transformedPoint:Point, expectedHeaderIndex:int, actualHeaderIndex:int):String
+        {
+            return "The point " + pointName + " transformed with Matrix " + direction + " (resulting in " + transformedPoint + ") should be "
+                    + (expectedHeaderIndex == -1 ? "outside any header bounds" : "inside the header with index " + expectedHeaderIndex)
+                    + " but was mistakenly found to be "
+                    + (actualHeaderIndex == -1 ? "outside any header bounds" : "inside the header with index " + actualHeaderIndex
+                    + "\n DEBUG INFO: headerRectangles=" + headerRectangles);
+        }
+
+        private function getHeaderIndexAtGlobalPoint(globalPoint:Point):int
+        {
+            var localPoint:Point = _sut.globalToLocal(globalPoint);
+            return _sut.getHeaderIndexAt(localPoint.x, localPoint.y);
+        }
+
+        private function getHeaderIndexAssumption(point:Point):int
+        {
+            return getIndexOfHeaderRectangleWhichContainsPoint(point, headerRectangles);
+        }
+
+        private function getAdjacentPoint(point:Point, direction:Matrix):Point
+        {
+            return direction.transformPoint(point);
+        }
+
+        private function getIndexOfHeaderRectangleWhichContainsPoint(point:Point, rectangles:Array):int
+        {
+            for (var i:int = 0; i < rectangles.length; i++)
+            {
+                if(rectangleContainsPoint(rectangles[i], point))
+                    return i;
+            }
+
+            return -1;
+        }
+
+        private function rectangleContainsPoint(rectangle:Rectangle, point:Point):Boolean
+        {
+            return rectangle.containsPoint(point);
+        }
+
+        private function generateKeyPoints(dimensions:Array, grid:DataGrid):Array
+        {
+            var keyPoints:Array = [];
+            //TODO this code does not yet account for horizontal scrolling!
+
+            keyPoints["a"] = new Point(0, 0);
+            keyPoints["b"] = new Point(getX(dimensions), getY(dimensions));
+            keyPoints["c0"] = new Point(getX(dimensions) + getHeaderPaddingLeft(dimensions), getY(dimensions));
+            generateColumnIntermediates(keyPoints, dimensions, "c0");
+            keyPoints["d0"] = new Point(getX(dimensions) + getColumnWidths(dimensions)[0], getY(dimensions));
+            generateColumnIntermediates(keyPoints, dimensions, "d0");
+            keyPoints["e"] = new Point(getX(dimensions) + getWidth(dimensions), getY(dimensions));
+
+            const yUnderHeader:Number = getY(dimensions) + getActualHeaderHeight(grid);
+            keyPoints["f0"] = new Point(getX(dimensions), yUnderHeader);
+            generateColumnIntermediates(keyPoints, dimensions, "f0");
+            keyPoints["g0"] = new Point(getX(dimensions) + getHeaderPaddingLeft(dimensions), yUnderHeader);
+            generateColumnIntermediates(keyPoints, dimensions, "g0");
+            keyPoints["h"] = new Point(getX(dimensions) + getWidth(dimensions), yUnderHeader);
+
+            return keyPoints;
+        }
+
+        private function generateColumnIntermediates(keyPoints:Array, dimensions:Array, initialPointName:String):void
+        {
+            const initialPoint:Point = keyPoints[initialPointName];
+            const y:Number = initialPoint.y;
+            var currentX:Number = initialPoint.x;
+            const initialPointFirstCharacter:String = initialPointName.charAt(0);
+            for (var i:int = 0; i < getColumnWidths(dimensions).length; i++)
+            {
+                currentX += getColumnWidth(dimensions, i);
+                keyPoints[initialPointFirstCharacter + (i+1)] = new Point(currentX, y);
+            }
+        }
+
+        private function generateKeyRectangles(keyPoints:Array, dimensions:Array):Array
+        {
+            var keyRectangles:Array = [];
+
+            keyRectangles["headerRectangles"] = generateHeaderRectangles(keyPoints, dimensions);
+
+            return keyRectangles;
+        }
+
+        private function generateHeaderRectangles(keyPoints:Array, dimensions:Array):Array
+        {
+            var headerRectangles:Array = [];
+
+            const headerHeight:Number = getHeaderHeightFromKeyPoints(keyPoints);
+            for (var i:int = 0; i < getColumnWidths(dimensions).length; i++)
+            {
+                var topLeft:Point = keyPoints["c" + i];
+                var topRight:Point = keyPoints["c" + (i+1)];
+                headerRectangles.push(new Rectangle(topLeft.x, topLeft.y, topRight.x - topLeft.x, headerHeight));
+            }
+
+            //correct last header rectangle to extend to grid boundaries. This is one of the issues which prompted
+            //this unit test in the first place.
+            var lastHeaderRectangle:Rectangle = headerRectangles[headerRectangles.length - 1];
+            lastHeaderRectangle.width = Point(keyPoints["e"]).x - lastHeaderRectangle.x;
+
+            return headerRectangles;
+        }
+
+        private function get headerRectangles():Array
+        {
+            return _keyRectangles["headerRectangles"];
+        }
+
+        private function getColumnWidthFromKeyPoints(keyPoints:Array, columnIndex:int):Number
+        {
+            //we're assuming columnIndex has a valid value
+            return Point(keyPoints["c" + (columnIndex + 1)]).x - Point(keyPoints["c" + columnIndex]).x;
+        }
+
+        private function getX(dimensions:Array):Number
+        {
+            return dimensions[0];
+        }
+
+        private function getY(dimensions:Array):Number
+        {
+            return dimensions[1];
+        }
+
+        private function getWidth(dimensions:Array):Number
+        {
+            return dimensions[2];
+        }
+
+        private function getHeaderPaddingLeft(dimensions:Array):Number
+        {
+            return dimensions[3];
+        }
+
+        private function getHeaderPaddingTop(dimensions:Array):Number
+        {
+            return dimensions[4];
+        }
+
+        private function getActualHeaderHeight(grid:DataGrid):Number
+        {
+            //Note that we're assuming the grid is on stage and validated by this point!
+            return grid.columnHeaderGroup.height;
+        }
+
+        private function getHeaderHeightFromKeyPoints(keyPoints:Array):Number
+        {
+            return Point(keyPoints["h"]).y - Point(keyPoints["e"]).y;
+        }
+
+        private function getColumnWidths(dimensions:Array):Array
+        {
+            return dimensions[5];
+        }
+
+        private function getColumnWidth(dimensions:Array, columnIndex:int):Number
+        {
+            return getColumnWidths(dimensions)[columnIndex];
+        }
+
+        private function getTotalColumnWidths(dimensions:Array):Number
+        {
+            var sum:Number = 0;
+            getColumnWidths(dimensions).forEach(function (item:*, index:int, arr:Array):void {sum += item;});
+            return sum;
+        }
+
+
+        private function get _sut():GridColumnHeaderGroup
+        {
+            return _dataGrid.columnHeaderGroup;
+        }
+    }
+}


Only broadcast playing when the buffer is full.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/OnCircle/vpaid-wrapper.git/'


removing trace

removing trace


Added duLogBuildTimes.

Added duLogBuildTimes.

error: pathspec 'as3_lib/src/recastnavigation/debugutils/duLogBuildTimes.as' did not match any file(s) known to git

--- as3_lib/src/recastnavigation/debugutils/duLogBuildTimes.as
+++ as3_lib/src/recastnavigation/debugutils/duLogBuildTimes.as
@@ -0,0 +1,15 @@
+package recastnavigation.debugutils {
+
+	import recastnavigation.core.rn_internal;
+	import recastnavigation.internal_api.internal_duLogBuildTimes;
+	import recastnavigation.recast.RCContext;
+
+	use namespace rn_internal;
+
+	public function duLogBuildTimes(ctx:RCContext, totalTileUsec:int):void {
+
+		internal_duLogBuildTimes(ctx.ptr, totalTileUsec);
+
+	}
+
+}