You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@royale.apache.org by Harbs <ha...@gmail.com> on 2026/01/26 17:41:20 UTC

Getting null errors

I wanted to try out the new typed functions and I’m getting lots of errors. Here’s what I tried:

1. I converted a bunch of function. declarations in Core:
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
index 6fb9ce411a..50adfadbbe 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
@@ -28,7 +28,7 @@ package org.apache.royale.utils.object
 	 *  @royalesuppressexport
 	 */
     COMPILE::JS
-    public function defineGetter(obj:Object,prop:String,getterFunction:Function):void
+    public function defineGetter(obj:Object,prop:String,getterFunction:() => *):void
     {
             Object.defineProperty(obj, prop, {"get": getterFunction});
         }


diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
index 9f3565ff14..c6b7402a6d 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
@@ -20,8 +20,8 @@ package org.apache.royale.utils.async
 {
 	public interface IAsyncTask
 	{
-		function done(callback:Function):IAsyncTask;
-		function exec(callback:Function):IAsyncTask;
+		function done(callback:(task:IAsyncTask) => void):IAsyncTask;
+		function exec(callback:(task:IAsyncTask) => void):IAsyncTask;
 		function run(data:Object=null):void;
 
 		function complete():void;


diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
index 541b3827be..47a71323de 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
@@ -136,7 +136,7 @@ package org.apache.royale.utils.async
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.6
      */
-    public function done(callback:Function):IAsyncTask{
+    public function done(callback:(task:IAsyncTask) => void):IAsyncTask{
       if(_status == "complete" || _status == "failed"){
         callback(this);
         return this;
@@ -158,7 +158,7 @@ package org.apache.royale.utils.async
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.13
      */
-    public function exec(callback:Function):IAsyncTask
+    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
     {
       done(callback);
       run();
@@ -200,7 +200,7 @@ package org.apache.royale.utils.async
      * Keep references to event listeners for automatic cleanup
      */
     COMPILE::JS
-    override public function addEventListener(type:String, handler:Function, useCapture:Boolean = false, scope:Object = null):void
+    override public function addEventListener(type:String, handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object = null):void
     {
       super.addEventListener(type,handler,useCapture,scope);
       if(!listeners)
@@ -214,7 +214,7 @@ package org.apache.royale.utils.async
       });
     }
     COMPILE::SWF
-    override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
+    override public function addEventListener(type:String, listener:(ev:Event) => void, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
     {
       if(!listeners)
       {
2. I compiled Core
3. I opened my project
4. I got a bunch of:
Unexpected exception 'java.lang.NullPointerException' with message '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.parseSignature:195
	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createFromFunctionDefinition:157
	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
	org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
	org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
	org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
	org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
	java.util.concurrent.FutureTask.run:264
	java.util.concurrent.ThreadPoolExecutor.runWorker:1128
	java.util.concurrent.ThreadPoolExecutor$Worker.run:628
	java.lang.Thread.run:829

Re: Getting null errors

Posted by Harbs <ha...@gmail.com>.
I just committed my changes to a branch “testing-function-type-expressions”.

> On Jan 27, 2026, at 7:58 AM, Harbs <ha...@gmail.com> wrote:
> 
> Hmm. I’m not sure it’s working as I’d expect.
> 
> In Core, there’s TaskTest which has this:
> 
> 
> 			[Test(async,timeout="50")]
> 			public function testPromiseToTask():void
> 			{
> 				var resolvePromise:Promise = new Promise(function(resolve:Function, reject:Function):void{
> 					resolve("resolved");
> 				});
> 				var resolvedTask:PromiseTask = promiseToTask(resolvePromise);
> 				resolvedTask.done(function(task:PromiseTask):void{
> 					assertEquals(task.result, "resolved");
> 				});
> 				resolvedTask.run();
> 
> 				var rejectedPromise:Promise = new Promise(function(resolve:Function, reject:Function):void{
> 					reject("rejected");
> 				});
> 				var rejectedTask:PromiseTask = promiseToTask(rejectedPromise);
> 				rejectedTask.done(function(task:PromiseTask):void{
> 					assertEquals(task.error, "rejected");
> 				});
> 				rejectedTask.run();
> 			}
> 
> The compiler is now complaining:
> 
> Implicit coercion of a value of type 
> (task:org.apache.royale.utils.async.PromiseTask)=>void to an unrelated type 
> (task:org.apache.royale.utils.async.IAsyncTask)=>void.(1067)
> 
> A PromiseTask extends AsyncTask which implements IAsyncTask.
> 
> I think that should be allowed.
> 
>> On Jan 27, 2026, at 12:52 AM, Josh Tynjala <jo...@bowlerhat.dev> wrote:
>> 
>> No worries! Have a good night!
>> 
>> --
>> Josh Tynjala
>> Bowler Hat LLC
>> https://bowlerhat.dev/
>> 
>> 
>> On Mon, Jan 26, 2026 at 2:45 PM Harbs <ha...@gmail.com> wrote:
>> 
>>> Ugh!
>>> 
>>> That’s what I get for doing this when it’ past my bedtime…
>>> 
>>> I forgot to pull before I built… 🫠
>>> 
>>> I’ll try again in the morning...
>>> 
>>>> On Jan 27, 2026, at 12:41 AM, Harbs <ha...@gmail.com> wrote:
>>>> 
>>>> This is the full list of changes I made to Core, which as enough to
>>> cause the errors when opening my project which uses AsyncTasks.
>>>> 
>>>> diff --git
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>> index 541b3827be..9b92553de1 100644
>>>> ---
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>> +++
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>>     *  @playerversion AIR 2.6
>>>>     *  @productversion Royale 0.9.6
>>>>     */
>>>> -    public function done(callback:Function):IAsyncTask{
>>>> +    public function done(callback:(task:IAsyncTask)=>void):IAsyncTask{
>>>>      if(_status == "complete" || _status == "failed"){
>>>>        callback(this);
>>>>        return this;
>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>>     *  @playerversion AIR 2.6
>>>>     *  @productversion Royale 0.9.13
>>>>     */
>>>> -    public function exec(callback:Function):IAsyncTask
>>>> +    public function exec(callback:(task:IAsyncTask)=>void):IAsyncTask
>>>>    {
>>>>      done(callback);
>>>>      run();
>>>> 
>>>> 
>>>> diff --git
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>>>> index 55a89368ed..4b9871e199 100644
>>>> ---
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>>>> +++
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>>>> @@ -184,12 +184,10 @@ package org.apache.royale.utils.async
>>>>               *  @langversion 3.0
>>>>               *  @productversion Royale 0.9.9
>>>>               */
>>>> -             public static function
>>> execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
>>>> +             public static function
>>> execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
>>>>                      var task:CompoundAsyncTask = new
>>> CompoundAsyncTask(tasks);
>>>>                      task.failEarly = failEarly;
>>>> -                     task.done(function():void{
>>>> -                             callback(task);
>>>> -                     });
>>>> +                     task.done(callback);
>>>>                      task.run();
>>>>              }
>>>>      }
>>>> 
>>>> 
>>>> diff --git
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>> index 9f3565ff14..064c7395b8 100644
>>>> ---
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>> +++
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>>> {
>>>>      public interface IAsyncTask
>>>>      {
>>>> -             function done(callback:Function):IAsyncTask;
>>>> -             function exec(callback:Function):IAsyncTask;
>>>> +             function done(callback:(task:IAsyncTask)=>void):IAsyncTask;
>>>> +             function exec(callback:(task:IAsyncTask)=>void):IAsyncTask;
>>>>              function run(data:Object=null):void;
>>>> 
>>>>              function complete():void;
>>>> 
>>>> diff --git
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>>>> index d5d8cd60c7..f1b160e606 100644
>>>> ---
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>>>> +++
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>>>> @@ -83,12 +83,10 @@ package org.apache.royale.utils.async
>>>>     *  @langversion 3.0
>>>>     *  @productversion Royale 0.9.9
>>>>    */
>>>> -             public static function
>>> execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
>>>> +             public static function
>>> execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
>>>>                      var task:SequentialAsyncTask = new
>>> SequentialAsyncTask(tasks);
>>>>      task.failEarly = failEarly;
>>>> -                     task.done(function():void{
>>>> -        callback(task);
>>>> -      });
>>>> +                     task.done(callback);
>>>>                      task.run();
>>>>              }
>>>>  }
>>>> 
>>>> 
>>>> 
>>>>> On Jan 27, 2026, at 12:34 AM, Harbs <ha...@gmail.com> wrote:
>>>>> 
>>>>> Still getting errors:
>>>>> 
>>>>> Unexpected exception 'java.lang.NullPointerException' with message
>>> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
>>> .FunctionTypeExpressionNode.parseSignature:195
>>>>>     org.apache.royale.compiler.internal.tree.as
>>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>>     org.apache.royale.compiler.internal.tree.as
>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>>> 
>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>>> 
>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>>> 
>>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>>> 
>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>>> 
>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>>     java.util.concurrent.FutureTask.run:264
>>>>>     java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>>     java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>>     java.lang.Thread.run:829
>>>>> 
>>>>>> On Jan 27, 2026, at 12:14 AM, Harbs <ha...@gmail.com> wrote:
>>>>>> 
>>>>>> Will do. Thanks.
>>>>>> 
>>>>>>> On Jan 27, 2026, at 12:07 AM, Josh Tynjala <jo...@bowlerhat.dev>
>>> wrote:
>>>>>>> 
>>>>>>> Please try again with the latest compiler commits. It should be fixed
>>> now.
>>>>>>> 
>>>>>>> --
>>>>>>> Josh Tynjala
>>>>>>> Bowler Hat LLC
>>>>>>> https://bowlerhat.dev/
>>>>>>> 
>>>>>>> 
>>>>>>> On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:
>>>>>>> 
>>>>>>>> Cool. Thanks!
>>>>>>>> 
>>>>>>>>> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <
>>> joshtynjala@bowlerhat.dev>
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> I'll check it out. Looking at where the exception is thrown, I have
>>> a
>>>>>>>>> pretty good idea of what is null and how to go about fixing it.
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Josh Tynjala
>>>>>>>>> Bowler Hat LLC
>>>>>>>>> https://bowlerhat.dev/
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com>
>>> wrote:
>>>>>>>>> 
>>>>>>>>>> I wanted to try out the new typed functions and I’m getting lots of
>>>>>>>>>> errors. Here’s what I tried:
>>>>>>>>>> 
>>>>>>>>>> 1. I converted a bunch of function. declarations in Core:
>>>>>>>>>> diff --git
>>>>>>>>>> 
>>>>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>>> 
>>>>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>>> index 6fb9ce411a..50adfadbbe 100644
>>>>>>>>>> ---
>>>>>>>>>> 
>>>>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>>> +++
>>>>>>>>>> 
>>>>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>>>>>>>>>>    *  @royalesuppressexport
>>>>>>>>>>    */
>>>>>>>>>> COMPILE::JS
>>>>>>>>>> -    public function
>>>>>>>>>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
>>>>>>>>>> +    public function
>>>>>>>> defineGetter(obj:Object,prop:String,getterFunction:()
>>>>>>>>>> => *):void
>>>>>>>>>> {
>>>>>>>>>>        Object.defineProperty(obj, prop, {"get": getterFunction});
>>>>>>>>>>    }
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> diff --git
>>>>>>>>>> 
>>>>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>>> 
>>>>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>>> index 9f3565ff14..c6b7402a6d 100644
>>>>>>>>>> ---
>>>>>>>>>> 
>>>>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>>> +++
>>>>>>>>>> 
>>>>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>>>>>>>>> {
>>>>>>>>>>   public interface IAsyncTask
>>>>>>>>>>   {
>>>>>>>>>> -               function done(callback:Function):IAsyncTask;
>>>>>>>>>> -               function exec(callback:Function):IAsyncTask;
>>>>>>>>>> +               function done(callback:(task:IAsyncTask) =>
>>>>>>>>>> void):IAsyncTask;
>>>>>>>>>> +               function exec(callback:(task:IAsyncTask) =>
>>>>>>>>>> void):IAsyncTask;
>>>>>>>>>>           function run(data:Object=null):void;
>>>>>>>>>> 
>>>>>>>>>>           function complete():void;
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> diff --git
>>>>>>>>>> 
>>>>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>>> 
>>>>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>>> index 541b3827be..47a71323de 100644
>>>>>>>>>> ---
>>>>>>>>>> 
>>>>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>>> +++
>>>>>>>>>> 
>>>>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>>>>>>>> *  @playerversion AIR 2.6
>>>>>>>>>> *  @productversion Royale 0.9.6
>>>>>>>>>> */
>>>>>>>>>> -    public function done(callback:Function):IAsyncTask{
>>>>>>>>>> +    public function done(callback:(task:IAsyncTask) =>
>>>>>>>> void):IAsyncTask{
>>>>>>>>>>  if(_status == "complete" || _status == "failed"){
>>>>>>>>>>    callback(this);
>>>>>>>>>>    return this;
>>>>>>>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>>>>>>>> *  @playerversion AIR 2.6
>>>>>>>>>> *  @productversion Royale 0.9.13
>>>>>>>>>> */
>>>>>>>>>> -    public function exec(callback:Function):IAsyncTask
>>>>>>>>>> +    public function exec(callback:(task:IAsyncTask) =>
>>> void):IAsyncTask
>>>>>>>>>> {
>>>>>>>>>>  done(callback);
>>>>>>>>>>  run();
>>>>>>>>>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>>>>>>>>>> * Keep references to event listeners for automatic cleanup
>>>>>>>>>> */
>>>>>>>>>> COMPILE::JS
>>>>>>>>>> -    override public function addEventListener(type:String,
>>>>>>>>>> handler:Function, useCapture:Boolean = false, scope:Object =
>>> null):void
>>>>>>>>>> +    override public function addEventListener(type:String,
>>>>>>>>>> handler:(ev:Event) => void, useCapture:Boolean = false,
>>> scope:Object =
>>>>>>>>>> null):void
>>>>>>>>>> {
>>>>>>>>>>  super.addEventListener(type,handler,useCapture,scope);
>>>>>>>>>>  if(!listeners)
>>>>>>>>>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>>>>>>>>>>  });
>>>>>>>>>> }
>>>>>>>>>> COMPILE::SWF
>>>>>>>>>> -    override public function addEventListener(type:String,
>>>>>>>>>> listener:Function, useCapture:Boolean = false, priority:int = 0,
>>>>>>>>>> useWeakReference:Boolean = false):void
>>>>>>>>>> +    override public function addEventListener(type:String,
>>>>>>>>>> listener:(ev:Event) => void, useCapture:Boolean = false,
>>> priority:int =
>>>>>>>> 0,
>>>>>>>>>> useWeakReference:Boolean = false):void
>>>>>>>>>> {
>>>>>>>>>>  if(!listeners)
>>>>>>>>>>  {
>>>>>>>>>> 2. I compiled Core
>>>>>>>>>> 3. I opened my project
>>>>>>>>>> 4. I got a bunch of:
>>>>>>>>>> Unexpected exception 'java.lang.NullPointerException' with message
>>>>>>>>>> '${exceptionMessage}' at
>>> org.apache.royale.compiler.internal.tree.as
>>>>>>>>>> .FunctionTypeExpressionNode.parseSignature:195
>>>>>>>>>>   org.apache.royale.compiler.internal.tree.as
>>>>>>>>>> 
>>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>>>>>>>   org.apache.royale.compiler.internal.tree.as
>>>>>>>>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>>>>> 
>>>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>>>>>> 
>>>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>>>>>> 
>>>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>>>>> 
>>>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>>>>> 
>>>>>>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>>>>>>>   java.util.concurrent.FutureTask.run:264
>>>>>>>>>>   java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>>>>>>>   java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>>>>>>>   java.lang.Thread.run:829
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
> 


Re: Getting null errors

Posted by Harbs <ha...@gmail.com>.
Hmm. I’m not sure it’s working as I’d expect.

In Core, there’s TaskTest which has this:


			[Test(async,timeout="50")]
			public function testPromiseToTask():void
			{
				var resolvePromise:Promise = new Promise(function(resolve:Function, reject:Function):void{
					resolve("resolved");
				});
				var resolvedTask:PromiseTask = promiseToTask(resolvePromise);
				resolvedTask.done(function(task:PromiseTask):void{
					assertEquals(task.result, "resolved");
				});
				resolvedTask.run();

				var rejectedPromise:Promise = new Promise(function(resolve:Function, reject:Function):void{
					reject("rejected");
				});
				var rejectedTask:PromiseTask = promiseToTask(rejectedPromise);
				rejectedTask.done(function(task:PromiseTask):void{
					assertEquals(task.error, "rejected");
				});
				rejectedTask.run();
			}

The compiler is now complaining:

Implicit coercion of a value of type 
(task:org.apache.royale.utils.async.PromiseTask)=>void to an unrelated type 
(task:org.apache.royale.utils.async.IAsyncTask)=>void.(1067)

A PromiseTask extends AsyncTask which implements IAsyncTask.

I think that should be allowed.

> On Jan 27, 2026, at 12:52 AM, Josh Tynjala <jo...@bowlerhat.dev> wrote:
> 
> No worries! Have a good night!
> 
> --
> Josh Tynjala
> Bowler Hat LLC
> https://bowlerhat.dev/
> 
> 
> On Mon, Jan 26, 2026 at 2:45 PM Harbs <ha...@gmail.com> wrote:
> 
>> Ugh!
>> 
>> That’s what I get for doing this when it’ past my bedtime…
>> 
>> I forgot to pull before I built… 🫠
>> 
>> I’ll try again in the morning...
>> 
>>> On Jan 27, 2026, at 12:41 AM, Harbs <ha...@gmail.com> wrote:
>>> 
>>> This is the full list of changes I made to Core, which as enough to
>> cause the errors when opening my project which uses AsyncTasks.
>>> 
>>> diff --git
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>> index 541b3827be..9b92553de1 100644
>>> ---
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>> +++
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>     *  @playerversion AIR 2.6
>>>     *  @productversion Royale 0.9.6
>>>     */
>>> -    public function done(callback:Function):IAsyncTask{
>>> +    public function done(callback:(task:IAsyncTask)=>void):IAsyncTask{
>>>      if(_status == "complete" || _status == "failed"){
>>>        callback(this);
>>>        return this;
>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>     *  @playerversion AIR 2.6
>>>     *  @productversion Royale 0.9.13
>>>     */
>>> -    public function exec(callback:Function):IAsyncTask
>>> +    public function exec(callback:(task:IAsyncTask)=>void):IAsyncTask
>>>    {
>>>      done(callback);
>>>      run();
>>> 
>>> 
>>> diff --git
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>>> index 55a89368ed..4b9871e199 100644
>>> ---
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>>> +++
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
>>> @@ -184,12 +184,10 @@ package org.apache.royale.utils.async
>>>               *  @langversion 3.0
>>>               *  @productversion Royale 0.9.9
>>>               */
>>> -             public static function
>> execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
>>> +             public static function
>> execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
>>>                      var task:CompoundAsyncTask = new
>> CompoundAsyncTask(tasks);
>>>                      task.failEarly = failEarly;
>>> -                     task.done(function():void{
>>> -                             callback(task);
>>> -                     });
>>> +                     task.done(callback);
>>>                      task.run();
>>>              }
>>>      }
>>> 
>>> 
>>> diff --git
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>> index 9f3565ff14..064c7395b8 100644
>>> ---
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>> +++
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>> {
>>>      public interface IAsyncTask
>>>      {
>>> -             function done(callback:Function):IAsyncTask;
>>> -             function exec(callback:Function):IAsyncTask;
>>> +             function done(callback:(task:IAsyncTask)=>void):IAsyncTask;
>>> +             function exec(callback:(task:IAsyncTask)=>void):IAsyncTask;
>>>              function run(data:Object=null):void;
>>> 
>>>              function complete():void;
>>> 
>>> diff --git
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>>> index d5d8cd60c7..f1b160e606 100644
>>> ---
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>>> +++
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
>>> @@ -83,12 +83,10 @@ package org.apache.royale.utils.async
>>>     *  @langversion 3.0
>>>     *  @productversion Royale 0.9.9
>>>    */
>>> -             public static function
>> execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
>>> +             public static function
>> execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
>>>                      var task:SequentialAsyncTask = new
>> SequentialAsyncTask(tasks);
>>>      task.failEarly = failEarly;
>>> -                     task.done(function():void{
>>> -        callback(task);
>>> -      });
>>> +                     task.done(callback);
>>>                      task.run();
>>>              }
>>>  }
>>> 
>>> 
>>> 
>>>> On Jan 27, 2026, at 12:34 AM, Harbs <ha...@gmail.com> wrote:
>>>> 
>>>> Still getting errors:
>>>> 
>>>> Unexpected exception 'java.lang.NullPointerException' with message
>> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
>> .FunctionTypeExpressionNode.parseSignature:195
>>>>     org.apache.royale.compiler.internal.tree.as
>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>     org.apache.royale.compiler.internal.tree.as
>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>> 
>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>     java.util.concurrent.FutureTask.run:264
>>>>     java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>     java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>     java.lang.Thread.run:829
>>>> 
>>>>> On Jan 27, 2026, at 12:14 AM, Harbs <ha...@gmail.com> wrote:
>>>>> 
>>>>> Will do. Thanks.
>>>>> 
>>>>>> On Jan 27, 2026, at 12:07 AM, Josh Tynjala <jo...@bowlerhat.dev>
>> wrote:
>>>>>> 
>>>>>> Please try again with the latest compiler commits. It should be fixed
>> now.
>>>>>> 
>>>>>> --
>>>>>> Josh Tynjala
>>>>>> Bowler Hat LLC
>>>>>> https://bowlerhat.dev/
>>>>>> 
>>>>>> 
>>>>>> On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:
>>>>>> 
>>>>>>> Cool. Thanks!
>>>>>>> 
>>>>>>>> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <
>> joshtynjala@bowlerhat.dev>
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> I'll check it out. Looking at where the exception is thrown, I have
>> a
>>>>>>>> pretty good idea of what is null and how to go about fixing it.
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Josh Tynjala
>>>>>>>> Bowler Hat LLC
>>>>>>>> https://bowlerhat.dev/
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com>
>> wrote:
>>>>>>>> 
>>>>>>>>> I wanted to try out the new typed functions and I’m getting lots of
>>>>>>>>> errors. Here’s what I tried:
>>>>>>>>> 
>>>>>>>>> 1. I converted a bunch of function. declarations in Core:
>>>>>>>>> diff --git
>>>>>>>>> 
>>>>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>> 
>>>>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>> index 6fb9ce411a..50adfadbbe 100644
>>>>>>>>> ---
>>>>>>>>> 
>>>>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>> +++
>>>>>>>>> 
>>>>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>>>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>>>>>>>>>    *  @royalesuppressexport
>>>>>>>>>    */
>>>>>>>>> COMPILE::JS
>>>>>>>>> -    public function
>>>>>>>>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
>>>>>>>>> +    public function
>>>>>>> defineGetter(obj:Object,prop:String,getterFunction:()
>>>>>>>>> => *):void
>>>>>>>>> {
>>>>>>>>>        Object.defineProperty(obj, prop, {"get": getterFunction});
>>>>>>>>>    }
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> 
>>>>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>> 
>>>>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>> index 9f3565ff14..c6b7402a6d 100644
>>>>>>>>> ---
>>>>>>>>> 
>>>>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>> +++
>>>>>>>>> 
>>>>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>>>>>>>> {
>>>>>>>>>   public interface IAsyncTask
>>>>>>>>>   {
>>>>>>>>> -               function done(callback:Function):IAsyncTask;
>>>>>>>>> -               function exec(callback:Function):IAsyncTask;
>>>>>>>>> +               function done(callback:(task:IAsyncTask) =>
>>>>>>>>> void):IAsyncTask;
>>>>>>>>> +               function exec(callback:(task:IAsyncTask) =>
>>>>>>>>> void):IAsyncTask;
>>>>>>>>>           function run(data:Object=null):void;
>>>>>>>>> 
>>>>>>>>>           function complete():void;
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> diff --git
>>>>>>>>> 
>>>>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>> 
>>>>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>> index 541b3827be..47a71323de 100644
>>>>>>>>> ---
>>>>>>>>> 
>>>>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>> +++
>>>>>>>>> 
>>>>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>>>>>>> *  @playerversion AIR 2.6
>>>>>>>>> *  @productversion Royale 0.9.6
>>>>>>>>> */
>>>>>>>>> -    public function done(callback:Function):IAsyncTask{
>>>>>>>>> +    public function done(callback:(task:IAsyncTask) =>
>>>>>>> void):IAsyncTask{
>>>>>>>>>  if(_status == "complete" || _status == "failed"){
>>>>>>>>>    callback(this);
>>>>>>>>>    return this;
>>>>>>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>>>>>>> *  @playerversion AIR 2.6
>>>>>>>>> *  @productversion Royale 0.9.13
>>>>>>>>> */
>>>>>>>>> -    public function exec(callback:Function):IAsyncTask
>>>>>>>>> +    public function exec(callback:(task:IAsyncTask) =>
>> void):IAsyncTask
>>>>>>>>> {
>>>>>>>>>  done(callback);
>>>>>>>>>  run();
>>>>>>>>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>>>>>>>>> * Keep references to event listeners for automatic cleanup
>>>>>>>>> */
>>>>>>>>> COMPILE::JS
>>>>>>>>> -    override public function addEventListener(type:String,
>>>>>>>>> handler:Function, useCapture:Boolean = false, scope:Object =
>> null):void
>>>>>>>>> +    override public function addEventListener(type:String,
>>>>>>>>> handler:(ev:Event) => void, useCapture:Boolean = false,
>> scope:Object =
>>>>>>>>> null):void
>>>>>>>>> {
>>>>>>>>>  super.addEventListener(type,handler,useCapture,scope);
>>>>>>>>>  if(!listeners)
>>>>>>>>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>>>>>>>>>  });
>>>>>>>>> }
>>>>>>>>> COMPILE::SWF
>>>>>>>>> -    override public function addEventListener(type:String,
>>>>>>>>> listener:Function, useCapture:Boolean = false, priority:int = 0,
>>>>>>>>> useWeakReference:Boolean = false):void
>>>>>>>>> +    override public function addEventListener(type:String,
>>>>>>>>> listener:(ev:Event) => void, useCapture:Boolean = false,
>> priority:int =
>>>>>>> 0,
>>>>>>>>> useWeakReference:Boolean = false):void
>>>>>>>>> {
>>>>>>>>>  if(!listeners)
>>>>>>>>>  {
>>>>>>>>> 2. I compiled Core
>>>>>>>>> 3. I opened my project
>>>>>>>>> 4. I got a bunch of:
>>>>>>>>> Unexpected exception 'java.lang.NullPointerException' with message
>>>>>>>>> '${exceptionMessage}' at
>> org.apache.royale.compiler.internal.tree.as
>>>>>>>>> .FunctionTypeExpressionNode.parseSignature:195
>>>>>>>>>   org.apache.royale.compiler.internal.tree.as
>>>>>>>>> 
>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>>>>>>   org.apache.royale.compiler.internal.tree.as
>>>>>>>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>>>> 
>>>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>>>>> 
>>>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>>>>> 
>>>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>>>> 
>>>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>>>> 
>>>>>>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>>>>>>   java.util.concurrent.FutureTask.run:264
>>>>>>>>>   java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>>>>>>   java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>>>>>>   java.lang.Thread.run:829
>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>> 


Re: Getting null errors

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
No worries! Have a good night!

--
Josh Tynjala
Bowler Hat LLC
https://bowlerhat.dev/


On Mon, Jan 26, 2026 at 2:45 PM Harbs <ha...@gmail.com> wrote:

> Ugh!
>
> That’s what I get for doing this when it’ past my bedtime…
>
> I forgot to pull before I built… 🫠
>
> I’ll try again in the morning...
>
> > On Jan 27, 2026, at 12:41 AM, Harbs <ha...@gmail.com> wrote:
> >
> > This is the full list of changes I made to Core, which as enough to
> cause the errors when opening my project which uses AsyncTasks.
> >
> > diff --git
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> > index 541b3827be..9b92553de1 100644
> > ---
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> > +++
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> > @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
> >      *  @playerversion AIR 2.6
> >      *  @productversion Royale 0.9.6
> >      */
> > -    public function done(callback:Function):IAsyncTask{
> > +    public function done(callback:(task:IAsyncTask)=>void):IAsyncTask{
> >       if(_status == "complete" || _status == "failed"){
> >         callback(this);
> >         return this;
> > @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
> >      *  @playerversion AIR 2.6
> >      *  @productversion Royale 0.9.13
> >      */
> > -    public function exec(callback:Function):IAsyncTask
> > +    public function exec(callback:(task:IAsyncTask)=>void):IAsyncTask
> >     {
> >       done(callback);
> >       run();
> >
> >
> > diff --git
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
> > index 55a89368ed..4b9871e199 100644
> > ---
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
> > +++
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
> > @@ -184,12 +184,10 @@ package org.apache.royale.utils.async
> >                *  @langversion 3.0
> >                *  @productversion Royale 0.9.9
> >                */
> > -             public static function
> execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
> > +             public static function
> execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
> >                       var task:CompoundAsyncTask = new
> CompoundAsyncTask(tasks);
> >                       task.failEarly = failEarly;
> > -                     task.done(function():void{
> > -                             callback(task);
> > -                     });
> > +                     task.done(callback);
> >                       task.run();
> >               }
> >       }
> >
> >
> > diff --git
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> > index 9f3565ff14..064c7395b8 100644
> > ---
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> > +++
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> > @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
> > {
> >       public interface IAsyncTask
> >       {
> > -             function done(callback:Function):IAsyncTask;
> > -             function exec(callback:Function):IAsyncTask;
> > +             function done(callback:(task:IAsyncTask)=>void):IAsyncTask;
> > +             function exec(callback:(task:IAsyncTask)=>void):IAsyncTask;
> >               function run(data:Object=null):void;
> >
> >               function complete():void;
> >
> > diff --git
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
> > index d5d8cd60c7..f1b160e606 100644
> > ---
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
> > +++
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
> > @@ -83,12 +83,10 @@ package org.apache.royale.utils.async
> >      *  @langversion 3.0
> >      *  @productversion Royale 0.9.9
> >     */
> > -             public static function
> execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
> > +             public static function
> execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
> >                       var task:SequentialAsyncTask = new
> SequentialAsyncTask(tasks);
> >       task.failEarly = failEarly;
> > -                     task.done(function():void{
> > -        callback(task);
> > -      });
> > +                     task.done(callback);
> >                       task.run();
> >               }
> >   }
> >
> >
> >
> >> On Jan 27, 2026, at 12:34 AM, Harbs <ha...@gmail.com> wrote:
> >>
> >> Still getting errors:
> >>
> >> Unexpected exception 'java.lang.NullPointerException' with message
> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
> .FunctionTypeExpressionNode.parseSignature:195
> >>      org.apache.royale.compiler.internal.tree.as
> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
> >>      org.apache.royale.compiler.internal.tree.as
> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
> >>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
> >>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
> >>
> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
> >>
> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
> >>
> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
> >>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
> >>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
> >>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
> >>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
> >>      java.util.concurrent.FutureTask.run:264
> >>      java.util.concurrent.ThreadPoolExecutor.runWorker:1128
> >>      java.util.concurrent.ThreadPoolExecutor$Worker.run:628
> >>      java.lang.Thread.run:829
> >>
> >>> On Jan 27, 2026, at 12:14 AM, Harbs <ha...@gmail.com> wrote:
> >>>
> >>> Will do. Thanks.
> >>>
> >>>> On Jan 27, 2026, at 12:07 AM, Josh Tynjala <jo...@bowlerhat.dev>
> wrote:
> >>>>
> >>>> Please try again with the latest compiler commits. It should be fixed
> now.
> >>>>
> >>>> --
> >>>> Josh Tynjala
> >>>> Bowler Hat LLC
> >>>> https://bowlerhat.dev/
> >>>>
> >>>>
> >>>> On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:
> >>>>
> >>>>> Cool. Thanks!
> >>>>>
> >>>>>> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <
> joshtynjala@bowlerhat.dev>
> >>>>> wrote:
> >>>>>>
> >>>>>> I'll check it out. Looking at where the exception is thrown, I have
> a
> >>>>>> pretty good idea of what is null and how to go about fixing it.
> >>>>>>
> >>>>>> --
> >>>>>> Josh Tynjala
> >>>>>> Bowler Hat LLC
> >>>>>> https://bowlerhat.dev/
> >>>>>>
> >>>>>>
> >>>>>> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com>
> wrote:
> >>>>>>
> >>>>>>> I wanted to try out the new typed functions and I’m getting lots of
> >>>>>>> errors. Here’s what I tried:
> >>>>>>>
> >>>>>>> 1. I converted a bunch of function. declarations in Core:
> >>>>>>> diff --git
> >>>>>>>
> >>>>>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >>>>>>>
> >>>>>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >>>>>>> index 6fb9ce411a..50adfadbbe 100644
> >>>>>>> ---
> >>>>>>>
> >>>>>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >>>>>>> +++
> >>>>>>>
> >>>>>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >>>>>>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
> >>>>>>>     *  @royalesuppressexport
> >>>>>>>     */
> >>>>>>> COMPILE::JS
> >>>>>>> -    public function
> >>>>>>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
> >>>>>>> +    public function
> >>>>> defineGetter(obj:Object,prop:String,getterFunction:()
> >>>>>>> => *):void
> >>>>>>> {
> >>>>>>>         Object.defineProperty(obj, prop, {"get": getterFunction});
> >>>>>>>     }
> >>>>>>>
> >>>>>>>
> >>>>>>> diff --git
> >>>>>>>
> >>>>>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >>>>>>>
> >>>>>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >>>>>>> index 9f3565ff14..c6b7402a6d 100644
> >>>>>>> ---
> >>>>>>>
> >>>>>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >>>>>>> +++
> >>>>>>>
> >>>>>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >>>>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
> >>>>>>> {
> >>>>>>>    public interface IAsyncTask
> >>>>>>>    {
> >>>>>>> -               function done(callback:Function):IAsyncTask;
> >>>>>>> -               function exec(callback:Function):IAsyncTask;
> >>>>>>> +               function done(callback:(task:IAsyncTask) =>
> >>>>>>> void):IAsyncTask;
> >>>>>>> +               function exec(callback:(task:IAsyncTask) =>
> >>>>>>> void):IAsyncTask;
> >>>>>>>            function run(data:Object=null):void;
> >>>>>>>
> >>>>>>>            function complete():void;
> >>>>>>>
> >>>>>>>
> >>>>>>> diff --git
> >>>>>>>
> >>>>>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >>>>>>>
> >>>>>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >>>>>>> index 541b3827be..47a71323de 100644
> >>>>>>> ---
> >>>>>>>
> >>>>>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >>>>>>> +++
> >>>>>>>
> >>>>>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >>>>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
> >>>>>>>  *  @playerversion AIR 2.6
> >>>>>>>  *  @productversion Royale 0.9.6
> >>>>>>>  */
> >>>>>>> -    public function done(callback:Function):IAsyncTask{
> >>>>>>> +    public function done(callback:(task:IAsyncTask) =>
> >>>>> void):IAsyncTask{
> >>>>>>>   if(_status == "complete" || _status == "failed"){
> >>>>>>>     callback(this);
> >>>>>>>     return this;
> >>>>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
> >>>>>>>  *  @playerversion AIR 2.6
> >>>>>>>  *  @productversion Royale 0.9.13
> >>>>>>>  */
> >>>>>>> -    public function exec(callback:Function):IAsyncTask
> >>>>>>> +    public function exec(callback:(task:IAsyncTask) =>
> void):IAsyncTask
> >>>>>>> {
> >>>>>>>   done(callback);
> >>>>>>>   run();
> >>>>>>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
> >>>>>>>  * Keep references to event listeners for automatic cleanup
> >>>>>>>  */
> >>>>>>> COMPILE::JS
> >>>>>>> -    override public function addEventListener(type:String,
> >>>>>>> handler:Function, useCapture:Boolean = false, scope:Object =
> null):void
> >>>>>>> +    override public function addEventListener(type:String,
> >>>>>>> handler:(ev:Event) => void, useCapture:Boolean = false,
> scope:Object =
> >>>>>>> null):void
> >>>>>>> {
> >>>>>>>   super.addEventListener(type,handler,useCapture,scope);
> >>>>>>>   if(!listeners)
> >>>>>>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
> >>>>>>>   });
> >>>>>>> }
> >>>>>>> COMPILE::SWF
> >>>>>>> -    override public function addEventListener(type:String,
> >>>>>>> listener:Function, useCapture:Boolean = false, priority:int = 0,
> >>>>>>> useWeakReference:Boolean = false):void
> >>>>>>> +    override public function addEventListener(type:String,
> >>>>>>> listener:(ev:Event) => void, useCapture:Boolean = false,
> priority:int =
> >>>>> 0,
> >>>>>>> useWeakReference:Boolean = false):void
> >>>>>>> {
> >>>>>>>   if(!listeners)
> >>>>>>>   {
> >>>>>>> 2. I compiled Core
> >>>>>>> 3. I opened my project
> >>>>>>> 4. I got a bunch of:
> >>>>>>> Unexpected exception 'java.lang.NullPointerException' with message
> >>>>>>> '${exceptionMessage}' at
> org.apache.royale.compiler.internal.tree.as
> >>>>>>> .FunctionTypeExpressionNode.parseSignature:195
> >>>>>>>    org.apache.royale.compiler.internal.tree.as
> >>>>>>>
> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
> >>>>>>>    org.apache.royale.compiler.internal.tree.as
> >>>>>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>>>>>>
> >>>>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> >>>>>>>
> >>>>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> >>>>>>>
> >>>>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>>>>>>
> >>>>>>>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>>>>>>
> >>>>>>>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
> >>>>>>>
> >>>>>>>
> >>>>>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
> >>>>>>>    java.util.concurrent.FutureTask.run:264
> >>>>>>>    java.util.concurrent.ThreadPoolExecutor.runWorker:1128
> >>>>>>>    java.util.concurrent.ThreadPoolExecutor$Worker.run:628
> >>>>>>>    java.lang.Thread.run:829
> >>>>>
> >>>>>
> >>>
> >>
> >
>
>

Re: Getting null errors

Posted by Harbs <ha...@gmail.com>.
Ugh!

That’s what I get for doing this when it’ past my bedtime…

I forgot to pull before I built… 🫠

I’ll try again in the morning...

> On Jan 27, 2026, at 12:41 AM, Harbs <ha...@gmail.com> wrote:
> 
> This is the full list of changes I made to Core, which as enough to cause the errors when opening my project which uses AsyncTasks.
> 
> diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> index 541b3827be..9b92553de1 100644
> --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>      *  @playerversion AIR 2.6
>      *  @productversion Royale 0.9.6
>      */
> -    public function done(callback:Function):IAsyncTask{
> +    public function done(callback:(task:IAsyncTask)=>void):IAsyncTask{
>       if(_status == "complete" || _status == "failed"){
>         callback(this);
>         return this;
> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>      *  @playerversion AIR 2.6
>      *  @productversion Royale 0.9.13
>      */
> -    public function exec(callback:Function):IAsyncTask
> +    public function exec(callback:(task:IAsyncTask)=>void):IAsyncTask
>     {
>       done(callback);
>       run();
> 
> 
> diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
> index 55a89368ed..4b9871e199 100644
> --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
> +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
> @@ -184,12 +184,10 @@ package org.apache.royale.utils.async
> 		 *  @langversion 3.0
> 		 *  @productversion Royale 0.9.9
> 		 */
> -		public static function execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
> +		public static function execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
> 			var task:CompoundAsyncTask = new CompoundAsyncTask(tasks);
> 			task.failEarly = failEarly;
> -			task.done(function():void{
> -				callback(task);
> -			});
> +			task.done(callback);
> 			task.run();
> 		}    
> 	}
> 
> 
> diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> index 9f3565ff14..064c7395b8 100644
> --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
> {
> 	public interface IAsyncTask
> 	{
> -		function done(callback:Function):IAsyncTask;
> -		function exec(callback:Function):IAsyncTask;
> +		function done(callback:(task:IAsyncTask)=>void):IAsyncTask;
> +		function exec(callback:(task:IAsyncTask)=>void):IAsyncTask;
> 		function run(data:Object=null):void;
> 
> 		function complete():void;
> 
> diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
> index d5d8cd60c7..f1b160e606 100644
> --- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
> +++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
> @@ -83,12 +83,10 @@ package org.apache.royale.utils.async
>      *  @langversion 3.0
>      *  @productversion Royale 0.9.9
>     */
> -		public static function execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
> +		public static function execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
> 			var task:SequentialAsyncTask = new SequentialAsyncTask(tasks);
>       task.failEarly = failEarly;
> -			task.done(function():void{
> -        callback(task);
> -      });
> +			task.done(callback);
> 			task.run();
> 		}
>   }
> 
> 
> 
>> On Jan 27, 2026, at 12:34 AM, Harbs <ha...@gmail.com> wrote:
>> 
>> Still getting errors:
>> 
>> Unexpected exception 'java.lang.NullPointerException' with message '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.parseSignature:195
>> 	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>> 	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createFromFunctionDefinition:157
>> 	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>> 	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>> 	org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>> 	org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>> 	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>> 	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>> 	org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>> 	org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>> 	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>> 	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>> 	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>> 	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>> 	java.util.concurrent.FutureTask.run:264
>> 	java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>> 	java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>> 	java.lang.Thread.run:829
>> 
>>> On Jan 27, 2026, at 12:14 AM, Harbs <ha...@gmail.com> wrote:
>>> 
>>> Will do. Thanks.
>>> 
>>>> On Jan 27, 2026, at 12:07 AM, Josh Tynjala <jo...@bowlerhat.dev> wrote:
>>>> 
>>>> Please try again with the latest compiler commits. It should be fixed now.
>>>> 
>>>> --
>>>> Josh Tynjala
>>>> Bowler Hat LLC
>>>> https://bowlerhat.dev/
>>>> 
>>>> 
>>>> On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:
>>>> 
>>>>> Cool. Thanks!
>>>>> 
>>>>>> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <jo...@bowlerhat.dev>
>>>>> wrote:
>>>>>> 
>>>>>> I'll check it out. Looking at where the exception is thrown, I have a
>>>>>> pretty good idea of what is null and how to go about fixing it.
>>>>>> 
>>>>>> --
>>>>>> Josh Tynjala
>>>>>> Bowler Hat LLC
>>>>>> https://bowlerhat.dev/
>>>>>> 
>>>>>> 
>>>>>> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com> wrote:
>>>>>> 
>>>>>>> I wanted to try out the new typed functions and I’m getting lots of
>>>>>>> errors. Here’s what I tried:
>>>>>>> 
>>>>>>> 1. I converted a bunch of function. declarations in Core:
>>>>>>> diff --git
>>>>>>> 
>>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>> 
>>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>> index 6fb9ce411a..50adfadbbe 100644
>>>>>>> ---
>>>>>>> 
>>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>> +++
>>>>>>> 
>>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>>>>>>>     *  @royalesuppressexport
>>>>>>>     */
>>>>>>> COMPILE::JS
>>>>>>> -    public function
>>>>>>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
>>>>>>> +    public function
>>>>> defineGetter(obj:Object,prop:String,getterFunction:()
>>>>>>> => *):void
>>>>>>> {
>>>>>>>         Object.defineProperty(obj, prop, {"get": getterFunction});
>>>>>>>     }
>>>>>>> 
>>>>>>> 
>>>>>>> diff --git
>>>>>>> 
>>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>> 
>>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>> index 9f3565ff14..c6b7402a6d 100644
>>>>>>> ---
>>>>>>> 
>>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>> +++
>>>>>>> 
>>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>>>>>> {
>>>>>>>    public interface IAsyncTask
>>>>>>>    {
>>>>>>> -               function done(callback:Function):IAsyncTask;
>>>>>>> -               function exec(callback:Function):IAsyncTask;
>>>>>>> +               function done(callback:(task:IAsyncTask) =>
>>>>>>> void):IAsyncTask;
>>>>>>> +               function exec(callback:(task:IAsyncTask) =>
>>>>>>> void):IAsyncTask;
>>>>>>>            function run(data:Object=null):void;
>>>>>>> 
>>>>>>>            function complete():void;
>>>>>>> 
>>>>>>> 
>>>>>>> diff --git
>>>>>>> 
>>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>> 
>>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>> index 541b3827be..47a71323de 100644
>>>>>>> ---
>>>>>>> 
>>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>> +++
>>>>>>> 
>>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>>>>>  *  @playerversion AIR 2.6
>>>>>>>  *  @productversion Royale 0.9.6
>>>>>>>  */
>>>>>>> -    public function done(callback:Function):IAsyncTask{
>>>>>>> +    public function done(callback:(task:IAsyncTask) =>
>>>>> void):IAsyncTask{
>>>>>>>   if(_status == "complete" || _status == "failed"){
>>>>>>>     callback(this);
>>>>>>>     return this;
>>>>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>>>>>  *  @playerversion AIR 2.6
>>>>>>>  *  @productversion Royale 0.9.13
>>>>>>>  */
>>>>>>> -    public function exec(callback:Function):IAsyncTask
>>>>>>> +    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
>>>>>>> {
>>>>>>>   done(callback);
>>>>>>>   run();
>>>>>>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>>>>>>>  * Keep references to event listeners for automatic cleanup
>>>>>>>  */
>>>>>>> COMPILE::JS
>>>>>>> -    override public function addEventListener(type:String,
>>>>>>> handler:Function, useCapture:Boolean = false, scope:Object = null):void
>>>>>>> +    override public function addEventListener(type:String,
>>>>>>> handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object =
>>>>>>> null):void
>>>>>>> {
>>>>>>>   super.addEventListener(type,handler,useCapture,scope);
>>>>>>>   if(!listeners)
>>>>>>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>>>>>>>   });
>>>>>>> }
>>>>>>> COMPILE::SWF
>>>>>>> -    override public function addEventListener(type:String,
>>>>>>> listener:Function, useCapture:Boolean = false, priority:int = 0,
>>>>>>> useWeakReference:Boolean = false):void
>>>>>>> +    override public function addEventListener(type:String,
>>>>>>> listener:(ev:Event) => void, useCapture:Boolean = false, priority:int =
>>>>> 0,
>>>>>>> useWeakReference:Boolean = false):void
>>>>>>> {
>>>>>>>   if(!listeners)
>>>>>>>   {
>>>>>>> 2. I compiled Core
>>>>>>> 3. I opened my project
>>>>>>> 4. I got a bunch of:
>>>>>>> Unexpected exception 'java.lang.NullPointerException' with message
>>>>>>> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
>>>>>>> .FunctionTypeExpressionNode.parseSignature:195
>>>>>>>    org.apache.royale.compiler.internal.tree.as
>>>>>>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>>>>    org.apache.royale.compiler.internal.tree.as
>>>>>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>>> 
>>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>>> 
>>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>>> 
>>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>>> 
>>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>>> 
>>>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>>>>> 
>>>>>>> 
>>>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>>>>    java.util.concurrent.FutureTask.run:264
>>>>>>>    java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>>>>    java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>>>>    java.lang.Thread.run:829
>>>>> 
>>>>> 
>>> 
>> 
> 


Re: Getting null errors

Posted by Harbs <ha...@gmail.com>.
This is the full list of changes I made to Core, which as enough to cause the errors when opening my project which uses AsyncTasks.

diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
index 541b3827be..9b92553de1 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
@@ -136,7 +136,7 @@ package org.apache.royale.utils.async
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.6
      */
-    public function done(callback:Function):IAsyncTask{
+    public function done(callback:(task:IAsyncTask)=>void):IAsyncTask{
       if(_status == "complete" || _status == "failed"){
         callback(this);
         return this;
@@ -158,7 +158,7 @@ package org.apache.royale.utils.async
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.9.13
      */
-    public function exec(callback:Function):IAsyncTask
+    public function exec(callback:(task:IAsyncTask)=>void):IAsyncTask
     {
       done(callback);
       run();


diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
index 55a89368ed..4b9871e199 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/CompoundAsyncTask.as
@@ -184,12 +184,10 @@ package org.apache.royale.utils.async
 		 *  @langversion 3.0
 		 *  @productversion Royale 0.9.9
 		 */
-		public static function execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
+		public static function execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
 			var task:CompoundAsyncTask = new CompoundAsyncTask(tasks);
 			task.failEarly = failEarly;
-			task.done(function():void{
-				callback(task);
-			});
+			task.done(callback);
 			task.run();
 		}    
 	}


diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
index 9f3565ff14..064c7395b8 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
@@ -20,8 +20,8 @@ package org.apache.royale.utils.async
 {
 	public interface IAsyncTask
 	{
-		function done(callback:Function):IAsyncTask;
-		function exec(callback:Function):IAsyncTask;
+		function done(callback:(task:IAsyncTask)=>void):IAsyncTask;
+		function exec(callback:(task:IAsyncTask)=>void):IAsyncTask;
 		function run(data:Object=null):void;
 
 		function complete():void;

diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
index d5d8cd60c7..f1b160e606 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/SequentialAsyncTask.as
@@ -83,12 +83,10 @@ package org.apache.royale.utils.async
      *  @langversion 3.0
      *  @productversion Royale 0.9.9
     */
-		public static function execute(tasks:Array,callback:Function,failEarly:Boolean=false):void{
+		public static function execute(tasks:Array,callback:(task:IAsyncTask)=>void,failEarly:Boolean=false):void{
 			var task:SequentialAsyncTask = new SequentialAsyncTask(tasks);
       task.failEarly = failEarly;
-			task.done(function():void{
-        callback(task);
-      });
+			task.done(callback);
 			task.run();
 		}
   }



> On Jan 27, 2026, at 12:34 AM, Harbs <ha...@gmail.com> wrote:
> 
> Still getting errors:
> 
> Unexpected exception 'java.lang.NullPointerException' with message '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.parseSignature:195
> 	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
> 	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createFromFunctionDefinition:157
> 	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
> 	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
> 	org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> 	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
> 	org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> 	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> 	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
> 	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> 	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
> 	org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
> 	org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
> 	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
> 	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
> 	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
> 	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
> 	java.util.concurrent.FutureTask.run:264
> 	java.util.concurrent.ThreadPoolExecutor.runWorker:1128
> 	java.util.concurrent.ThreadPoolExecutor$Worker.run:628
> 	java.lang.Thread.run:829
> 
>> On Jan 27, 2026, at 12:14 AM, Harbs <ha...@gmail.com> wrote:
>> 
>> Will do. Thanks.
>> 
>>> On Jan 27, 2026, at 12:07 AM, Josh Tynjala <jo...@bowlerhat.dev> wrote:
>>> 
>>> Please try again with the latest compiler commits. It should be fixed now.
>>> 
>>> --
>>> Josh Tynjala
>>> Bowler Hat LLC
>>> https://bowlerhat.dev/
>>> 
>>> 
>>> On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:
>>> 
>>>> Cool. Thanks!
>>>> 
>>>>> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <jo...@bowlerhat.dev>
>>>> wrote:
>>>>> 
>>>>> I'll check it out. Looking at where the exception is thrown, I have a
>>>>> pretty good idea of what is null and how to go about fixing it.
>>>>> 
>>>>> --
>>>>> Josh Tynjala
>>>>> Bowler Hat LLC
>>>>> https://bowlerhat.dev/
>>>>> 
>>>>> 
>>>>> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com> wrote:
>>>>> 
>>>>>> I wanted to try out the new typed functions and I’m getting lots of
>>>>>> errors. Here’s what I tried:
>>>>>> 
>>>>>> 1. I converted a bunch of function. declarations in Core:
>>>>>> diff --git
>>>>>> 
>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>> 
>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>> index 6fb9ce411a..50adfadbbe 100644
>>>>>> ---
>>>>>> 
>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>> +++
>>>>>> 
>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>>>>>>      *  @royalesuppressexport
>>>>>>      */
>>>>>>  COMPILE::JS
>>>>>> -    public function
>>>>>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
>>>>>> +    public function
>>>> defineGetter(obj:Object,prop:String,getterFunction:()
>>>>>> => *):void
>>>>>>  {
>>>>>>          Object.defineProperty(obj, prop, {"get": getterFunction});
>>>>>>      }
>>>>>> 
>>>>>> 
>>>>>> diff --git
>>>>>> 
>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>> 
>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>> index 9f3565ff14..c6b7402a6d 100644
>>>>>> ---
>>>>>> 
>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>> +++
>>>>>> 
>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>>>>> {
>>>>>>     public interface IAsyncTask
>>>>>>     {
>>>>>> -               function done(callback:Function):IAsyncTask;
>>>>>> -               function exec(callback:Function):IAsyncTask;
>>>>>> +               function done(callback:(task:IAsyncTask) =>
>>>>>> void):IAsyncTask;
>>>>>> +               function exec(callback:(task:IAsyncTask) =>
>>>>>> void):IAsyncTask;
>>>>>>             function run(data:Object=null):void;
>>>>>> 
>>>>>>             function complete():void;
>>>>>> 
>>>>>> 
>>>>>> diff --git
>>>>>> 
>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>> 
>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>> index 541b3827be..47a71323de 100644
>>>>>> ---
>>>>>> 
>>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>> +++
>>>>>> 
>>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>>>>   *  @playerversion AIR 2.6
>>>>>>   *  @productversion Royale 0.9.6
>>>>>>   */
>>>>>> -    public function done(callback:Function):IAsyncTask{
>>>>>> +    public function done(callback:(task:IAsyncTask) =>
>>>> void):IAsyncTask{
>>>>>>    if(_status == "complete" || _status == "failed"){
>>>>>>      callback(this);
>>>>>>      return this;
>>>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>>>>   *  @playerversion AIR 2.6
>>>>>>   *  @productversion Royale 0.9.13
>>>>>>   */
>>>>>> -    public function exec(callback:Function):IAsyncTask
>>>>>> +    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
>>>>>>  {
>>>>>>    done(callback);
>>>>>>    run();
>>>>>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>>>>>>   * Keep references to event listeners for automatic cleanup
>>>>>>   */
>>>>>>  COMPILE::JS
>>>>>> -    override public function addEventListener(type:String,
>>>>>> handler:Function, useCapture:Boolean = false, scope:Object = null):void
>>>>>> +    override public function addEventListener(type:String,
>>>>>> handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object =
>>>>>> null):void
>>>>>>  {
>>>>>>    super.addEventListener(type,handler,useCapture,scope);
>>>>>>    if(!listeners)
>>>>>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>>>>>>    });
>>>>>>  }
>>>>>>  COMPILE::SWF
>>>>>> -    override public function addEventListener(type:String,
>>>>>> listener:Function, useCapture:Boolean = false, priority:int = 0,
>>>>>> useWeakReference:Boolean = false):void
>>>>>> +    override public function addEventListener(type:String,
>>>>>> listener:(ev:Event) => void, useCapture:Boolean = false, priority:int =
>>>> 0,
>>>>>> useWeakReference:Boolean = false):void
>>>>>>  {
>>>>>>    if(!listeners)
>>>>>>    {
>>>>>> 2. I compiled Core
>>>>>> 3. I opened my project
>>>>>> 4. I got a bunch of:
>>>>>> Unexpected exception 'java.lang.NullPointerException' with message
>>>>>> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
>>>>>> .FunctionTypeExpressionNode.parseSignature:195
>>>>>>     org.apache.royale.compiler.internal.tree.as
>>>>>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>>>     org.apache.royale.compiler.internal.tree.as
>>>>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>>> 
>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>> 
>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>>> 
>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>>> 
>>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>>> 
>>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>>>> 
>>>>>> 
>>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>>>     java.util.concurrent.FutureTask.run:264
>>>>>>     java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>>>     java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>>>     java.lang.Thread.run:829
>>>> 
>>>> 
>> 
> 


Re: Getting null errors

Posted by Harbs <ha...@gmail.com>.
Still getting errors:

Unexpected exception 'java.lang.NullPointerException' with message '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.parseSignature:195
	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
	org.apache.royale.compiler.internal.tree.as.FunctionTypeExpressionNode.createFromFunctionDefinition:157
	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
	org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
	org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
	org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
	org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
	org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
	org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
	org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
	org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
	org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
	org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
	org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
	java.util.concurrent.FutureTask.run:264
	java.util.concurrent.ThreadPoolExecutor.runWorker:1128
	java.util.concurrent.ThreadPoolExecutor$Worker.run:628
	java.lang.Thread.run:829

> On Jan 27, 2026, at 12:14 AM, Harbs <ha...@gmail.com> wrote:
> 
> Will do. Thanks.
> 
>> On Jan 27, 2026, at 12:07 AM, Josh Tynjala <jo...@bowlerhat.dev> wrote:
>> 
>> Please try again with the latest compiler commits. It should be fixed now.
>> 
>> --
>> Josh Tynjala
>> Bowler Hat LLC
>> https://bowlerhat.dev/
>> 
>> 
>> On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:
>> 
>>> Cool. Thanks!
>>> 
>>>> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <jo...@bowlerhat.dev>
>>> wrote:
>>>> 
>>>> I'll check it out. Looking at where the exception is thrown, I have a
>>>> pretty good idea of what is null and how to go about fixing it.
>>>> 
>>>> --
>>>> Josh Tynjala
>>>> Bowler Hat LLC
>>>> https://bowlerhat.dev/
>>>> 
>>>> 
>>>> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com> wrote:
>>>> 
>>>>> I wanted to try out the new typed functions and I’m getting lots of
>>>>> errors. Here’s what I tried:
>>>>> 
>>>>> 1. I converted a bunch of function. declarations in Core:
>>>>> diff --git
>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>> index 6fb9ce411a..50adfadbbe 100644
>>>>> ---
>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>> +++
>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>>>>>       *  @royalesuppressexport
>>>>>       */
>>>>>   COMPILE::JS
>>>>> -    public function
>>>>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
>>>>> +    public function
>>> defineGetter(obj:Object,prop:String,getterFunction:()
>>>>> => *):void
>>>>>   {
>>>>>           Object.defineProperty(obj, prop, {"get": getterFunction});
>>>>>       }
>>>>> 
>>>>> 
>>>>> diff --git
>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>> index 9f3565ff14..c6b7402a6d 100644
>>>>> ---
>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>> +++
>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>>>> {
>>>>>      public interface IAsyncTask
>>>>>      {
>>>>> -               function done(callback:Function):IAsyncTask;
>>>>> -               function exec(callback:Function):IAsyncTask;
>>>>> +               function done(callback:(task:IAsyncTask) =>
>>>>> void):IAsyncTask;
>>>>> +               function exec(callback:(task:IAsyncTask) =>
>>>>> void):IAsyncTask;
>>>>>              function run(data:Object=null):void;
>>>>> 
>>>>>              function complete():void;
>>>>> 
>>>>> 
>>>>> diff --git
>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>> index 541b3827be..47a71323de 100644
>>>>> ---
>>>>> 
>>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>> +++
>>>>> 
>>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>>>    *  @playerversion AIR 2.6
>>>>>    *  @productversion Royale 0.9.6
>>>>>    */
>>>>> -    public function done(callback:Function):IAsyncTask{
>>>>> +    public function done(callback:(task:IAsyncTask) =>
>>> void):IAsyncTask{
>>>>>     if(_status == "complete" || _status == "failed"){
>>>>>       callback(this);
>>>>>       return this;
>>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>>>    *  @playerversion AIR 2.6
>>>>>    *  @productversion Royale 0.9.13
>>>>>    */
>>>>> -    public function exec(callback:Function):IAsyncTask
>>>>> +    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
>>>>>   {
>>>>>     done(callback);
>>>>>     run();
>>>>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>>>>>    * Keep references to event listeners for automatic cleanup
>>>>>    */
>>>>>   COMPILE::JS
>>>>> -    override public function addEventListener(type:String,
>>>>> handler:Function, useCapture:Boolean = false, scope:Object = null):void
>>>>> +    override public function addEventListener(type:String,
>>>>> handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object =
>>>>> null):void
>>>>>   {
>>>>>     super.addEventListener(type,handler,useCapture,scope);
>>>>>     if(!listeners)
>>>>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>>>>>     });
>>>>>   }
>>>>>   COMPILE::SWF
>>>>> -    override public function addEventListener(type:String,
>>>>> listener:Function, useCapture:Boolean = false, priority:int = 0,
>>>>> useWeakReference:Boolean = false):void
>>>>> +    override public function addEventListener(type:String,
>>>>> listener:(ev:Event) => void, useCapture:Boolean = false, priority:int =
>>> 0,
>>>>> useWeakReference:Boolean = false):void
>>>>>   {
>>>>>     if(!listeners)
>>>>>     {
>>>>> 2. I compiled Core
>>>>> 3. I opened my project
>>>>> 4. I got a bunch of:
>>>>> Unexpected exception 'java.lang.NullPointerException' with message
>>>>> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
>>>>> .FunctionTypeExpressionNode.parseSignature:195
>>>>>      org.apache.royale.compiler.internal.tree.as
>>>>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>>      org.apache.royale.compiler.internal.tree.as
>>>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>>> 
>>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>>> 
>>>>> 
>>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>>      java.util.concurrent.FutureTask.run:264
>>>>>      java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>>      java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>>      java.lang.Thread.run:829
>>> 
>>> 
> 


Re: Getting null errors

Posted by Harbs <ha...@gmail.com>.
Will do. Thanks.

> On Jan 27, 2026, at 12:07 AM, Josh Tynjala <jo...@bowlerhat.dev> wrote:
> 
> Please try again with the latest compiler commits. It should be fixed now.
> 
> --
> Josh Tynjala
> Bowler Hat LLC
> https://bowlerhat.dev/
> 
> 
> On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:
> 
>> Cool. Thanks!
>> 
>>> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <jo...@bowlerhat.dev>
>> wrote:
>>> 
>>> I'll check it out. Looking at where the exception is thrown, I have a
>>> pretty good idea of what is null and how to go about fixing it.
>>> 
>>> --
>>> Josh Tynjala
>>> Bowler Hat LLC
>>> https://bowlerhat.dev/
>>> 
>>> 
>>> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com> wrote:
>>> 
>>>> I wanted to try out the new typed functions and I’m getting lots of
>>>> errors. Here’s what I tried:
>>>> 
>>>> 1. I converted a bunch of function. declarations in Core:
>>>> diff --git
>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>> index 6fb9ce411a..50adfadbbe 100644
>>>> ---
>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>> +++
>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>>>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>>>>        *  @royalesuppressexport
>>>>        */
>>>>    COMPILE::JS
>>>> -    public function
>>>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
>>>> +    public function
>> defineGetter(obj:Object,prop:String,getterFunction:()
>>>> => *):void
>>>>    {
>>>>            Object.defineProperty(obj, prop, {"get": getterFunction});
>>>>        }
>>>> 
>>>> 
>>>> diff --git
>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>> index 9f3565ff14..c6b7402a6d 100644
>>>> ---
>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>> +++
>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>>>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>>>> {
>>>>       public interface IAsyncTask
>>>>       {
>>>> -               function done(callback:Function):IAsyncTask;
>>>> -               function exec(callback:Function):IAsyncTask;
>>>> +               function done(callback:(task:IAsyncTask) =>
>>>> void):IAsyncTask;
>>>> +               function exec(callback:(task:IAsyncTask) =>
>>>> void):IAsyncTask;
>>>>               function run(data:Object=null):void;
>>>> 
>>>>               function complete():void;
>>>> 
>>>> 
>>>> diff --git
>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>> index 541b3827be..47a71323de 100644
>>>> ---
>>>> 
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>> +++
>>>> 
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>>>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>>>     *  @playerversion AIR 2.6
>>>>     *  @productversion Royale 0.9.6
>>>>     */
>>>> -    public function done(callback:Function):IAsyncTask{
>>>> +    public function done(callback:(task:IAsyncTask) =>
>> void):IAsyncTask{
>>>>      if(_status == "complete" || _status == "failed"){
>>>>        callback(this);
>>>>        return this;
>>>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>>>     *  @playerversion AIR 2.6
>>>>     *  @productversion Royale 0.9.13
>>>>     */
>>>> -    public function exec(callback:Function):IAsyncTask
>>>> +    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
>>>>    {
>>>>      done(callback);
>>>>      run();
>>>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>>>>     * Keep references to event listeners for automatic cleanup
>>>>     */
>>>>    COMPILE::JS
>>>> -    override public function addEventListener(type:String,
>>>> handler:Function, useCapture:Boolean = false, scope:Object = null):void
>>>> +    override public function addEventListener(type:String,
>>>> handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object =
>>>> null):void
>>>>    {
>>>>      super.addEventListener(type,handler,useCapture,scope);
>>>>      if(!listeners)
>>>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>>>>      });
>>>>    }
>>>>    COMPILE::SWF
>>>> -    override public function addEventListener(type:String,
>>>> listener:Function, useCapture:Boolean = false, priority:int = 0,
>>>> useWeakReference:Boolean = false):void
>>>> +    override public function addEventListener(type:String,
>>>> listener:(ev:Event) => void, useCapture:Boolean = false, priority:int =
>> 0,
>>>> useWeakReference:Boolean = false):void
>>>>    {
>>>>      if(!listeners)
>>>>      {
>>>> 2. I compiled Core
>>>> 3. I opened my project
>>>> 4. I got a bunch of:
>>>> Unexpected exception 'java.lang.NullPointerException' with message
>>>> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
>>>> .FunctionTypeExpressionNode.parseSignature:195
>>>>       org.apache.royale.compiler.internal.tree.as
>>>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>>>       org.apache.royale.compiler.internal.tree.as
>>>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>>>> 
>>>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>>>> 
>>>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>>>       java.util.concurrent.FutureTask.run:264
>>>>       java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>>>       java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>>>       java.lang.Thread.run:829
>> 
>> 


Re: Getting null errors

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
Please try again with the latest compiler commits. It should be fixed now.

--
Josh Tynjala
Bowler Hat LLC
https://bowlerhat.dev/


On Mon, Jan 26, 2026 at 11:34 AM Harbs <ha...@gmail.com> wrote:

> Cool. Thanks!
>
> > On Jan 26, 2026, at 8:07 PM, Josh Tynjala <jo...@bowlerhat.dev>
> wrote:
> >
> > I'll check it out. Looking at where the exception is thrown, I have a
> > pretty good idea of what is null and how to go about fixing it.
> >
> > --
> > Josh Tynjala
> > Bowler Hat LLC
> > https://bowlerhat.dev/
> >
> >
> > On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com> wrote:
> >
> >> I wanted to try out the new typed functions and I’m getting lots of
> >> errors. Here’s what I tried:
> >>
> >> 1. I converted a bunch of function. declarations in Core:
> >> diff --git
> >>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >> index 6fb9ce411a..50adfadbbe 100644
> >> ---
> >>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >> +++
> >>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> >> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
> >>         *  @royalesuppressexport
> >>         */
> >>     COMPILE::JS
> >> -    public function
> >> defineGetter(obj:Object,prop:String,getterFunction:Function):void
> >> +    public function
> defineGetter(obj:Object,prop:String,getterFunction:()
> >> => *):void
> >>     {
> >>             Object.defineProperty(obj, prop, {"get": getterFunction});
> >>         }
> >>
> >>
> >> diff --git
> >>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >> index 9f3565ff14..c6b7402a6d 100644
> >> ---
> >>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >> +++
> >>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> >> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
> >> {
> >>        public interface IAsyncTask
> >>        {
> >> -               function done(callback:Function):IAsyncTask;
> >> -               function exec(callback:Function):IAsyncTask;
> >> +               function done(callback:(task:IAsyncTask) =>
> >> void):IAsyncTask;
> >> +               function exec(callback:(task:IAsyncTask) =>
> >> void):IAsyncTask;
> >>                function run(data:Object=null):void;
> >>
> >>                function complete():void;
> >>
> >>
> >> diff --git
> >>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >> index 541b3827be..47a71323de 100644
> >> ---
> >>
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >> +++
> >>
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> >> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
> >>      *  @playerversion AIR 2.6
> >>      *  @productversion Royale 0.9.6
> >>      */
> >> -    public function done(callback:Function):IAsyncTask{
> >> +    public function done(callback:(task:IAsyncTask) =>
> void):IAsyncTask{
> >>       if(_status == "complete" || _status == "failed"){
> >>         callback(this);
> >>         return this;
> >> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
> >>      *  @playerversion AIR 2.6
> >>      *  @productversion Royale 0.9.13
> >>      */
> >> -    public function exec(callback:Function):IAsyncTask
> >> +    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
> >>     {
> >>       done(callback);
> >>       run();
> >> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
> >>      * Keep references to event listeners for automatic cleanup
> >>      */
> >>     COMPILE::JS
> >> -    override public function addEventListener(type:String,
> >> handler:Function, useCapture:Boolean = false, scope:Object = null):void
> >> +    override public function addEventListener(type:String,
> >> handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object =
> >> null):void
> >>     {
> >>       super.addEventListener(type,handler,useCapture,scope);
> >>       if(!listeners)
> >> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
> >>       });
> >>     }
> >>     COMPILE::SWF
> >> -    override public function addEventListener(type:String,
> >> listener:Function, useCapture:Boolean = false, priority:int = 0,
> >> useWeakReference:Boolean = false):void
> >> +    override public function addEventListener(type:String,
> >> listener:(ev:Event) => void, useCapture:Boolean = false, priority:int =
> 0,
> >> useWeakReference:Boolean = false):void
> >>     {
> >>       if(!listeners)
> >>       {
> >> 2. I compiled Core
> >> 3. I opened my project
> >> 4. I got a bunch of:
> >> Unexpected exception 'java.lang.NullPointerException' with message
> >> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
> >> .FunctionTypeExpressionNode.parseSignature:195
> >>        org.apache.royale.compiler.internal.tree.as
> >> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
> >>        org.apache.royale.compiler.internal.tree.as
> >> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
> >>
> >>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
> >>
> >>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
> >>
> >> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> >>
> >> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
> >>
> >> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
> >>
> >> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
> >>
> >>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
> >>
> >> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
> >>
> >>
> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
> >>
> >>
> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
> >>
> >>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
> >>
> >>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
> >>
> >>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
> >>
> >>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
> >>        java.util.concurrent.FutureTask.run:264
> >>        java.util.concurrent.ThreadPoolExecutor.runWorker:1128
> >>        java.util.concurrent.ThreadPoolExecutor$Worker.run:628
> >>        java.lang.Thread.run:829
>
>

Re: Getting null errors

Posted by Harbs <ha...@gmail.com>.
Cool. Thanks!

> On Jan 26, 2026, at 8:07 PM, Josh Tynjala <jo...@bowlerhat.dev> wrote:
> 
> I'll check it out. Looking at where the exception is thrown, I have a
> pretty good idea of what is null and how to go about fixing it.
> 
> --
> Josh Tynjala
> Bowler Hat LLC
> https://bowlerhat.dev/
> 
> 
> On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com> wrote:
> 
>> I wanted to try out the new typed functions and I’m getting lots of
>> errors. Here’s what I tried:
>> 
>> 1. I converted a bunch of function. declarations in Core:
>> diff --git
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>> index 6fb9ce411a..50adfadbbe 100644
>> ---
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>> +++
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
>> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>>         *  @royalesuppressexport
>>         */
>>     COMPILE::JS
>> -    public function
>> defineGetter(obj:Object,prop:String,getterFunction:Function):void
>> +    public function defineGetter(obj:Object,prop:String,getterFunction:()
>> => *):void
>>     {
>>             Object.defineProperty(obj, prop, {"get": getterFunction});
>>         }
>> 
>> 
>> diff --git
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>> index 9f3565ff14..c6b7402a6d 100644
>> ---
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>> +++
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
>> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>> {
>>        public interface IAsyncTask
>>        {
>> -               function done(callback:Function):IAsyncTask;
>> -               function exec(callback:Function):IAsyncTask;
>> +               function done(callback:(task:IAsyncTask) =>
>> void):IAsyncTask;
>> +               function exec(callback:(task:IAsyncTask) =>
>> void):IAsyncTask;
>>                function run(data:Object=null):void;
>> 
>>                function complete():void;
>> 
>> 
>> diff --git
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>> index 541b3827be..47a71323de 100644
>> ---
>> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>> +++
>> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
>> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>>      *  @playerversion AIR 2.6
>>      *  @productversion Royale 0.9.6
>>      */
>> -    public function done(callback:Function):IAsyncTask{
>> +    public function done(callback:(task:IAsyncTask) => void):IAsyncTask{
>>       if(_status == "complete" || _status == "failed"){
>>         callback(this);
>>         return this;
>> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>>      *  @playerversion AIR 2.6
>>      *  @productversion Royale 0.9.13
>>      */
>> -    public function exec(callback:Function):IAsyncTask
>> +    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
>>     {
>>       done(callback);
>>       run();
>> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>>      * Keep references to event listeners for automatic cleanup
>>      */
>>     COMPILE::JS
>> -    override public function addEventListener(type:String,
>> handler:Function, useCapture:Boolean = false, scope:Object = null):void
>> +    override public function addEventListener(type:String,
>> handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object =
>> null):void
>>     {
>>       super.addEventListener(type,handler,useCapture,scope);
>>       if(!listeners)
>> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>>       });
>>     }
>>     COMPILE::SWF
>> -    override public function addEventListener(type:String,
>> listener:Function, useCapture:Boolean = false, priority:int = 0,
>> useWeakReference:Boolean = false):void
>> +    override public function addEventListener(type:String,
>> listener:(ev:Event) => void, useCapture:Boolean = false, priority:int = 0,
>> useWeakReference:Boolean = false):void
>>     {
>>       if(!listeners)
>>       {
>> 2. I compiled Core
>> 3. I opened my project
>> 4. I got a bunch of:
>> Unexpected exception 'java.lang.NullPointerException' with message
>> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
>> .FunctionTypeExpressionNode.parseSignature:195
>>        org.apache.royale.compiler.internal.tree.as
>> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>>        org.apache.royale.compiler.internal.tree.as
>> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>> 
>> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>> 
>> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>> 
>> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>> 
>> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>> 
>> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>> 
>> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>> 
>> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>> 
>> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>> 
>> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>>        java.util.concurrent.FutureTask.run:264
>>        java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>>        java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>>        java.lang.Thread.run:829


Re: Getting null errors

Posted by Josh Tynjala <jo...@bowlerhat.dev>.
I'll check it out. Looking at where the exception is thrown, I have a
pretty good idea of what is null and how to go about fixing it.

--
Josh Tynjala
Bowler Hat LLC
https://bowlerhat.dev/


On Mon, Jan 26, 2026 at 9:43 AM Harbs <ha...@gmail.com> wrote:

> I wanted to try out the new typed functions and I’m getting lots of
> errors. Here’s what I tried:
>
> 1. I converted a bunch of function. declarations in Core:
> diff --git
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> index 6fb9ce411a..50adfadbbe 100644
> ---
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> +++
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/object/defineGetter.as
> @@ -28,7 +28,7 @@ package org.apache.royale.utils.object
>          *  @royalesuppressexport
>          */
>      COMPILE::JS
> -    public function
> defineGetter(obj:Object,prop:String,getterFunction:Function):void
> +    public function defineGetter(obj:Object,prop:String,getterFunction:()
> => *):void
>      {
>              Object.defineProperty(obj, prop, {"get": getterFunction});
>          }
>
>
> diff --git
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> index 9f3565ff14..c6b7402a6d 100644
> ---
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> +++
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/IAsyncTask.as
> @@ -20,8 +20,8 @@ package org.apache.royale.utils.async
>  {
>         public interface IAsyncTask
>         {
> -               function done(callback:Function):IAsyncTask;
> -               function exec(callback:Function):IAsyncTask;
> +               function done(callback:(task:IAsyncTask) =>
> void):IAsyncTask;
> +               function exec(callback:(task:IAsyncTask) =>
> void):IAsyncTask;
>                 function run(data:Object=null):void;
>
>                 function complete():void;
>
>
> diff --git
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> index 541b3827be..47a71323de 100644
> ---
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> +++
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/async/AsyncTask.as
> @@ -136,7 +136,7 @@ package org.apache.royale.utils.async
>       *  @playerversion AIR 2.6
>       *  @productversion Royale 0.9.6
>       */
> -    public function done(callback:Function):IAsyncTask{
> +    public function done(callback:(task:IAsyncTask) => void):IAsyncTask{
>        if(_status == "complete" || _status == "failed"){
>          callback(this);
>          return this;
> @@ -158,7 +158,7 @@ package org.apache.royale.utils.async
>       *  @playerversion AIR 2.6
>       *  @productversion Royale 0.9.13
>       */
> -    public function exec(callback:Function):IAsyncTask
> +    public function exec(callback:(task:IAsyncTask) => void):IAsyncTask
>      {
>        done(callback);
>        run();
> @@ -200,7 +200,7 @@ package org.apache.royale.utils.async
>       * Keep references to event listeners for automatic cleanup
>       */
>      COMPILE::JS
> -    override public function addEventListener(type:String,
> handler:Function, useCapture:Boolean = false, scope:Object = null):void
> +    override public function addEventListener(type:String,
> handler:(ev:Event) => void, useCapture:Boolean = false, scope:Object =
> null):void
>      {
>        super.addEventListener(type,handler,useCapture,scope);
>        if(!listeners)
> @@ -214,7 +214,7 @@ package org.apache.royale.utils.async
>        });
>      }
>      COMPILE::SWF
> -    override public function addEventListener(type:String,
> listener:Function, useCapture:Boolean = false, priority:int = 0,
> useWeakReference:Boolean = false):void
> +    override public function addEventListener(type:String,
> listener:(ev:Event) => void, useCapture:Boolean = false, priority:int = 0,
> useWeakReference:Boolean = false):void
>      {
>        if(!listeners)
>        {
> 2. I compiled Core
> 3. I opened my project
> 4. I got a bunch of:
> Unexpected exception 'java.lang.NullPointerException' with message
> '${exceptionMessage}' at org.apache.royale.compiler.internal.tree.as
> .FunctionTypeExpressionNode.parseSignature:195
>         org.apache.royale.compiler.internal.tree.as
> .FunctionTypeExpressionNode.createTypeNodeFromParameterDefinition:246
>         org.apache.royale.compiler.internal.tree.as
> .FunctionTypeExpressionNode.createFromFunctionDefinition:157
>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFormalsVsActuals:1180
>
> org.apache.royale.compiler.internal.semantics.MethodBodySemanticChecker.checkFunctionCall:1474
>
> org.apache.royale.compiler.internal.as.codegen.ABCGeneratingReducer.reduce_functionAsMemberExpr:3890
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.action_349:5971
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:9331
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:7568
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.dispatchAction:10191
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40375
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40403
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceSubgoals:40394
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduceAntecedent:40374
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.reduce:40352
>
> org.apache.royale.compiler.internal.as.codegen.CmcEmitter.burm:40654
>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateInstructions:235
>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:416
>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateMethodBodyForFunction:370
>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generateFunction:272
>
> org.apache.royale.compiler.internal.as.codegen.ClassDirectiveProcessor.declareFunction:891
>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:218
>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declareClass:462
>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:210
>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>
> org.apache.royale.compiler.internal.as.codegen.GlobalDirectiveProcessor.declarePackage:488
>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.processNode:227
>
> org.apache.royale.compiler.internal.as.codegen.DirectiveProcessor.traverse:192
>
> org.apache.royale.compiler.internal.as.codegen.ABCGenerator.generate:126
>
> org.apache.royale.compiler.internal.units.ASCompilationUnit.handleABCBytesRequest:412
>
> org.apache.royale.compiler.internal.units.CompilationUnitBase.processABCBytesRequest:876
>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:313
>
> org.apache.royale.compiler.internal.units.CompilationUnitBase$4$1.call:309
>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:228
>
> org.apache.royale.compiler.internal.units.requests.RequestMaker$1.call:222
>         java.util.concurrent.FutureTask.run:264
>         java.util.concurrent.ThreadPoolExecutor.runWorker:1128
>         java.util.concurrent.ThreadPoolExecutor$Worker.run:628
>         java.lang.Thread.run:829