Guest User

Untitled

a guest
May 27th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. #!/usr/bin/env perl
  2. use warnings;
  3. use strict;
  4. use Test::More;
  5. use JavaScript;
  6.  
  7. my $rt = JavaScript::Runtime->new;
  8. my $cx = $rt->create_context;
  9.  
  10. my $js_callback;
  11. $cx->bind_function(register_callback => sub {
  12. pass 'in register_callback';
  13. $js_callback = shift;
  14. pass 'done register callback';
  15. });
  16. $cx->bind_function('write' => sub { print @_,$/ });
  17. $cx->bind_function('is' => \&is);
  18. $cx->bind_function('pass' => \&pass);
  19.  
  20. $cx->eval(<<'EOJS');
  21. function outer() {
  22. pass("outer called");
  23. register_callback(function inner() {
  24. pass("inner called");
  25. });
  26. pass("registered callback");
  27. }
  28. EOJS
  29. ok !$@, "eval was fine";
  30. {
  31. local $@;
  32. $cx->call('outer');
  33. ok !$@, "call was fine";
  34. ok $js_callback, "callback was set";
  35. }
  36.  
  37. {
  38. diag "going to call callback";
  39. $js_callback->(); # SEGFAULT
  40. ok !$@, "call of callback was fine";
  41. undef $js_callback;
  42. }
  43.  
  44. done_testing();
Add Comment
Please, Sign In to add comment