ECMAScript icon indicating copy to clipboard operation
ECMAScript copied to clipboard

[4.1-v0.0.17] Signal arguments makes it crash

Open why-try313 opened this issue 1 year ago • 4 comments

Concerned version

4.1-v0.0.17-alpha-20231003

Problem

It seems that any function passing arguments makes the application crash, both on editor connection and using the .connect(str, fn) method

What works:

  • Connect a signal via editor as long the signal doesn't return arguments (0 args)
  • Connect a signal via code as long the signal doesn't return arguments (0 args)
  • Connect a signal via code and pass an anonymous function to trigger the method with an argument
    this.connect("sig_name", () => { this.myMethod(myValueHere) })

What doesn't work:

  • Connect a signal via editor that passes at least one argument (full freeze)
  • Connect a signal via code that returns arguments (full freeze)
    this.connect("input_event", this.myMethod) // returns 5 arguments
  • Connect a signal via code that passes at least one argument as third parameter (argument ignored)
    this.connect("sig_name", this.myMethod, [myValue])
  • Connect a signal via code that passes at least one argument with bind (argument ignored)
    this.connect("sig_name", this.myMethod.bind(myValue))

Observations

  1. It seems that after re-establishing binding_script.js with some modifications the connect method in code passes the arguments array
// From
return godot_object_connect.apply(this, [signal, target, method_name, params, flags]);
// To
return godot_object_connect.apply(this, [signal, target[method_name], params, flags]);
/// Apply this to all Object.defineProperty return statements
  1. Connecting a method on the editor doesn't match the number of arguments since MethodInfo doesn't set the number of arguments in /quickjs/quickjs_binder.cpp:L1871 connect issued

Note : The parameters seem to be received by the functions since they are logged on the terminal that runs godot but freezes the program completly after printing them

why-try313 avatar Oct 11 '23 12:10 why-try313

Maybe we are not passing the arguments correctly with 0 count.

fire avatar Oct 11 '23 14:10 fire

Arguments are returned, but it looks like the signal callback fails.

Another problem that might be Signal related, TextEdit completly ignores keyboard inputs or clicks

After further testing: It turns out the crash only occurs on one of these nodes input_event(camera, event, position, normal, shape_idx),

that being said, child_entered_tree(Node) still doesn't return the node

To illustrate, xkill was made after freezing: xkill

why-try313 avatar Oct 11 '23 14:10 why-try313

I wonder if it's Camera3D access that's crashing? The rest are primitive types.

fire avatar Oct 11 '23 15:10 fire

Another problem that might be Signal related, TextEdit completly ignores keyboard inputs or clicks

If you add a script on a TextEdit it stops working... If you place the script on a Control above and trigger the signal from TextEdit to the Control it isn't ignoring the clicks

--> This is a bug, we should check why we lose any input events if we attach a .mjs :(

nmerget avatar Oct 15 '23 11:10 nmerget