From ff2f583c2441258581db153893fa37106d1f8002 Mon Sep 17 00:00:00 2001 From: sergiotarxz Date: Wed, 6 Jan 2021 20:47:33 +0100 Subject: [PATCH] Adding support for lstring. --- MANIFEST | 6 +----- Makefile.PL | 4 +++- bin/js-pruebas | 7 ++++--- javascript_interpreter_xs/Makefile.PL | 4 ++-- javascript_interpreter_xs/javascript.xs | 21 +++++++++++++++++++++ 5 files changed, 31 insertions(+), 11 deletions(-) mode change 100644 => 100755 bin/js-pruebas diff --git a/MANIFEST b/MANIFEST index 3a17393..9a3c21c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -6,15 +6,11 @@ bin/peertube-dl-hypnotoad bin/peertube-dl-web bin/peertube-dl-web.conf cpanfile -include/javascript_builtins.h -javascript_builtins.c javascript_interpreter_xs/javascript.xs javascript_interpreter_xs/Makefile.PL -lib/auto/Peertube/DL/.exists lib/Peertube/DL.pm lib/Peertube/DL/Downloaders.pm lib/Peertube/DL/Javascript.pm -lib/Peertube/DL/Javascript.xs lib/Peertube/DL/public/css/index.css lib/Peertube/DL/public/img/spinner.svg lib/Peertube/DL/public/index.html @@ -24,7 +20,7 @@ lib/Peertube/DL/UserAgent.pm lib/Peertube/DL/Utils.pm LICENSE Makefile.PL -MANIFEST This list of files +MANIFEST README.md src/include/javascript_builtins.h src/javascript_builtins.c diff --git a/Makefile.PL b/Makefile.PL index 830ad79..8ac7fca 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -7,13 +7,15 @@ WriteMakefile( INST_BIN => './bin', test => { TESTS => 't/*.t' }, test => { TESTS => 't/*/*.t' }, + DIR => [ 'src', 'javascript_interpreter_xs/' ], ); sub MY::postamble { ' src: src/Makefile - cd src && $(MAKE) $(PASSTHRU) + src && $(MAKE) $(PASSTHRU) javascript_interpreter_xs: javascript_interpreter_xs/Makefile cd javascript_interpreter_xs/ && $(MAKE) $(PASSTHRU) '; } + diff --git a/bin/js-pruebas b/bin/js-pruebas old mode 100644 new mode 100755 index 1d15f59..10d361d --- a/bin/js-pruebas +++ b/bin/js-pruebas @@ -1,4 +1,5 @@ #!/usr/bin/env perl +# use strict; use warnings; @@ -7,13 +8,13 @@ use feature 'say'; use Peertube::DL::Javascript; my $a = Peertube::DL::Javascript::_duk_create_heap_default(); -eval { Peertube::DL::Javascript::_duk_push_lstring( $a, "print(\"hola mundo\\n\");" ); }; +eval { Peertube::DL::Javascript::_duk_push_lstring( $a, "\"hola mundo\"" ); }; if ($@) { warn $@; $@ = ""; } if ( defined $a ) { - printf( "0x%0x\n", $a ); -} Peertube::DL::Javascript::_duk_peval($a); +say Peertube::DL::Javascript::_duk_get_lstring($a, -1); Peertube::DL::Javascript::_duk_destroy_heap($a); +} diff --git a/javascript_interpreter_xs/Makefile.PL b/javascript_interpreter_xs/Makefile.PL index bec083b..88ece9a 100644 --- a/javascript_interpreter_xs/Makefile.PL +++ b/javascript_interpreter_xs/Makefile.PL @@ -3,9 +3,9 @@ use ExtUtils::MakeMaker; WriteMakefile( NAME => 'Peertube::DL::Javascript', VERSION => '0.1', - LIBS => ['-lduktape'], + LIBS => ['-lduktape -l../src'], INC => '-Iduktape -I../src/include', XS => { 'javascript.xs' => 'javascript.o' }, - OBJECT => 'javascript.o ../src/javascript_builtins.o', + OBJECT => '../src/javascript_builtins.o javascript.o', LDFLAGS => '-Wl-t', ); diff --git a/javascript_interpreter_xs/javascript.xs b/javascript_interpreter_xs/javascript.xs index 7da8219..b7c5595 100644 --- a/javascript_interpreter_xs/javascript.xs +++ b/javascript_interpreter_xs/javascript.xs @@ -75,3 +75,24 @@ _duk_destroy_heap(SV *) croak("Cannot destroy something that is not a context."); } duk_destroy_heap(context); + +SV * +_duk_get_lstring(SV *, SV *) + CODE: + duk_context *context = (duk_context *) SvUV(ST(0)); + if (!context) { + croak("Unable to get lstring from no existing context."); + } + duk_idx_t idx = SvIV(ST(1)); + if (!duk_is_string(context, idx)) { + croak("Idx is not a string."); + } + if (duk_is_symbol(context, idx)) { + croak("This is a symbol, not a string."); + } + duk_size_t *lstring_len; + const char * lstring = duk_get_lstring(context, idx, lstring_len); + RETVAL = newSVpv(lstring, (size_t) lstring_len); + OUTPUT: + RETVAL +