Skip to content

Commit 755dfa2

Browse files
committed
XS: new parrser
Signed-off-by: Masatake YAMATO <[email protected]>
1 parent aec0a1d commit 755dfa2

File tree

20 files changed

+863
-12
lines changed

20 files changed

+863
-12
lines changed

Tmain/extras-long.d/run.sh

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,27 @@
33

44
CTAGS=$1
55

6+
ignore_pcre2()
7+
{
8+
grep -v 'XS'
9+
}
10+
611
echo '# resetting'
712
${CTAGS} --quiet --options=NONE --with-list-header=no \
8-
--extras='{subparser}' --list-extras
13+
--extras='{subparser}' --list-extras | ignore_pcre2
914

1015
echo '# enabling 1'
1116
${CTAGS} --quiet --options=NONE --with-list-header=no \
12-
--extras=+'{pseudo}' --list-extras
17+
--extras=+'{pseudo}' --list-extras | ignore_pcre2
1318

1419
echo '# disabling 1'
1520
${CTAGS} --quiet --options=NONE --with-list-header=no \
16-
--extras=-'{fileScope}' --list-extras
21+
--extras=-'{fileScope}' --list-extras | ignore_pcre2
1722

1823
echo '# combination'
1924
${CTAGS} --quiet --options=NONE --with-list-header=no \
20-
--extras=-'{fileScope}+{inputFile}{reference}' --list-extras
25+
--extras=-'{fileScope}+{inputFile}{reference}' --list-extras | ignore_pcre2
2126

2227
echo '# combination with letters'
2328
${CTAGS} --quiet --options=NONE --with-list-header=no \
24-
--extras=-'{fileScope}+p{inputFile}q{reference}-f' --list-extras
29+
--extras=-'{fileScope}+p{inputFile}q{reference}-f' --list-extras | ignore_pcre2

Tmain/list-extras.d/run.sh

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33

44
CTAGS=$1
55

6-
${CTAGS} --quiet --options=NONE --extras='*' --with-list-header --list-extras
7-
${CTAGS} --quiet --options=NONE --extras='*' --with-list-header --machinable --list-extras
8-
${CTAGS} --quiet --options=NONE --extras= --with-list-header --list-extras=NONE
6+
ignore_pcre2()
7+
{
8+
grep -v XS
9+
}
10+
11+
${CTAGS} --quiet --options=NONE --extras='*' --with-list-header --list-extras | ignore_pcre2
12+
${CTAGS} --quiet --options=NONE --extras='*' --with-list-header --machinable --list-extras | ignore_pcre2
13+
${CTAGS} --quiet --options=NONE --extras= --with-list-header --list-extras=NONE | ignore_pcre2

Tmain/list-roles.d/run.sh

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ ignore_yaml()
2323
grep -v 'Yaml'
2424
}
2525

26+
ignore_pcre2()
27+
{
28+
grep -v 'XS'
29+
}
30+
2631
# When introducing newly rewritten parser, we would like to provide
2732
# the both new parser and old parser for debugging and providing
2833
# migration period to users. In such case the prefix "Old" will be
@@ -34,16 +39,16 @@ ignore_old()
3439
}
3540

3641
title ''
37-
${CTAGS} --quiet --options=NONE --list-roles= | ignore_xml | ignore_old | ignore_yaml
42+
${CTAGS} --quiet --options=NONE --list-roles= | ignore_xml | ignore_old | ignore_yaml | ignore_pcre2
3843

3944
title 'all.*'
40-
${CTAGS} --quiet --options=NONE --list-roles='all.*' | ignore_xml | ignore_old | ignore_yaml
45+
${CTAGS} --quiet --options=NONE --list-roles='all.*' | ignore_xml | ignore_old | ignore_yaml | ignore_pcre2
4146

4247
title 'C.*'
4348
${CTAGS} --quiet --options=NONE --list-roles='C.*'
4449

4550
title 'all.d'
46-
${CTAGS} --quiet --options=NONE --list-roles='all.d' | ignore_xml | ignore_old | ignore_yaml
51+
${CTAGS} --quiet --options=NONE --list-roles='all.d' | ignore_xml | ignore_old | ignore_yaml | ignore_pcre2
4752

4853
title 'Sh.s'
4954
${CTAGS} --quiet --options=NONE --list-roles='Sh.s'
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
--sort=no
2+
--extras-XS=-{noprefix}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
X input.xs /^MODULE = X PACKAGE = X PREFIX = xyz_$/;" m
2+
X input.xs /^MODULE = X PACKAGE = X PREFIX = xyz_$/;" p module:X
3+
xyz_f input.xs /^xyz_f(dbtype)$/;" f package:X.X typeref:typename:void
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pcre2
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
MODULE = X PACKAGE = X PREFIX = xyz_
2+
3+
void
4+
xyz_f(dbtype)
5+
char * dbtype

Units/parser-xs.r/pod.d/args.ctags

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
--sort=no
2+
--extras=+g
3+
--fields=+Sl

Units/parser-xs.r/pod.d/expected.tags

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
XS::Typemap input.xs /^MODULE = XS::Typemap PACKAGE = XS::Typemap$/;" m language:XS
2+
XS::Typemap input.xs /^MODULE = XS::Typemap PACKAGE = XS::Typemap$/;" p language:XS module:XS::Typemap
3+
T_SV input.xs /^T_SV( sv )$/;" f language:XS package:XS::Typemap.XS::Typemap typeref:typename:SV * signature:(SV * sv)
4+
T_SVREF input.xs /^T_SVREF( svref )$/;" f language:XS package:XS::Typemap.XS::Typemap typeref:typename:SVREF signature:(SVREF svref)
5+
intArrayPtr input.xs /^intArray * intArrayPtr( int nelem ) {$/;" f language:C typeref:typename:intArray * signature:(int nelem)
6+
TYPEMAPS input.xs /^=head1 TYPEMAPS$/;" c language:Pod

Units/parser-xs.r/pod.d/features

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pcre2

Units/parser-xs.r/pod.d/input.xs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/* Taken from perl-5.10.1/ext/XS-Typemap/Typemap.xs */
2+
3+
/* T_ARRAY - allocate some memory */
4+
intArray * intArrayPtr( int nelem ) {
5+
intArray * array;
6+
Newx(array, nelem, intArray);
7+
return array;
8+
}
9+
10+
11+
MODULE = XS::Typemap PACKAGE = XS::Typemap
12+
13+
PROTOTYPES: DISABLE
14+
15+
=head1 TYPEMAPS
16+
17+
Each C type is represented by an entry in the typemap file that
18+
is responsible for converting perl variables (SV, AV, HV and CV) to
19+
and from that type.
20+
21+
=over 4
22+
23+
=item T_SV
24+
25+
This simply passes the C representation of the Perl variable (an SV*)
26+
in and out of the XS layer. This can be used if the C code wants
27+
to deal directly with the Perl variable.
28+
29+
=cut
30+
31+
SV *
32+
T_SV( sv )
33+
SV * sv
34+
CODE:
35+
/* create a new sv for return that is a copy of the input
36+
do not simply copy the pointer since the SV will be marked
37+
mortal by the INPUT typemap when it is pushed back onto the stack */
38+
RETVAL = sv_mortalcopy( sv );
39+
/* increment the refcount since the default INPUT typemap mortalizes
40+
by default and we don't want to decrement the ref count twice
41+
by mistake */
42+
SvREFCNT_inc(RETVAL);
43+
OUTPUT:
44+
RETVAL
45+
46+
=item T_SVREF
47+
48+
Used to pass in and return a reference to an SV.
49+
50+
=cut
51+
52+
SVREF
53+
T_SVREF( svref )
54+
SVREF svref
55+
CODE:
56+
RETVAL = svref;
57+
OUTPUT:
58+
RETVAL
59+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
--sort=no
2+
--extras=+g
3+
--extras=+r
4+
--fields=+rSE
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
SDBM_File input.xs /^MODULE = SDBM_File PACKAGE = SDBM_File PREFIX = sdbm_$/;" m roles:def
2+
SDBM_File input.xs /^MODULE = SDBM_File PACKAGE = SDBM_File PREFIX = sdbm_$/;" p module:SDBM_File roles:def
3+
sdbm_TIEHASH input.xs /^sdbm_TIEHASH(dbtype, filename, flags, mode, pagname=NULL)$/;" f package:SDBM_File.SDBM_File typeref:typename:SDBM_File signature:(char * dbtype,char * filename,int flags,int mode,char * pagname) roles:def
4+
TIEHASH input.xs /^sdbm_TIEHASH(dbtype, filename, flags, mode, pagname=NULL)$/;" f package:SDBM_File.SDBM_File typeref:typename:SDBM_File signature:(char * dbtype,char * filename,int flags,int mode,char * pagname) roles:def extras:noprefix
5+
sdbm_DESTROY input.xs /^sdbm_DESTROY(db)$/;" f package:SDBM_File.SDBM_File typeref:typename:void signature:(SDBM_File db) roles:def
6+
DESTROY input.xs /^sdbm_DESTROY(db)$/;" f package:SDBM_File.SDBM_File typeref:typename:void signature:(SDBM_File db) roles:def extras:noprefix
7+
sdbm_FETCH input.xs /^sdbm_FETCH(db, key)$/;" f package:SDBM_File.SDBM_File typeref:typename:datum_value signature:(SDBM_File db,datum_key key) roles:def
8+
FETCH input.xs /^sdbm_FETCH(db, key)$/;" f package:SDBM_File.SDBM_File typeref:typename:datum_value signature:(SDBM_File db,datum_key key) roles:def extras:noprefix
9+
sdbm_STORE input.xs /^sdbm_STORE(db, key, value, flags = DBM_REPLACE)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db,datum_key key,datum_value value,int flags) roles:def
10+
STORE input.xs /^sdbm_STORE(db, key, value, flags = DBM_REPLACE)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db,datum_key key,datum_value value,int flags) roles:def extras:noprefix
11+
sdbm_DELETE input.xs /^sdbm_DELETE(db, key)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def
12+
DELETE input.xs /^sdbm_DELETE(db, key)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def extras:noprefix
13+
sdbm_EXISTS input.xs /^sdbm_EXISTS(db,key)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def
14+
EXISTS input.xs /^sdbm_EXISTS(db,key)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def extras:noprefix
15+
sdbm_FIRSTKEY input.xs /^sdbm_FIRSTKEY(db)$/;" f package:SDBM_File.SDBM_File typeref:typename:datum_key signature:(SDBM_File db) roles:def
16+
FIRSTKEY input.xs /^sdbm_FIRSTKEY(db)$/;" f package:SDBM_File.SDBM_File typeref:typename:datum_key signature:(SDBM_File db) roles:def extras:noprefix
17+
sdbm_NEXTKEY input.xs /^sdbm_NEXTKEY(db, key)$/;" f package:SDBM_File.SDBM_File typeref:typename:datum_key signature:(SDBM_File db) roles:def
18+
NEXTKEY input.xs /^sdbm_NEXTKEY(db, key)$/;" f package:SDBM_File.SDBM_File typeref:typename:datum_key signature:(SDBM_File db) roles:def extras:noprefix
19+
sdbm_error input.xs /^sdbm_error(db)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db) roles:def
20+
error input.xs /^sdbm_error(db)$/;" f package:SDBM_File.SDBM_File typeref:typename:int signature:(SDBM_File db) roles:def extras:noprefix
21+
sdbm_clearerr input.xs /^ sdbm_clearerr = 1$/;" a function:SDBM_File.SDBM_File.sdbm_error roles:def
22+
filter_fetch_key input.xs /^filter_fetch_key(db, code)$/;" f package:SDBM_File.SDBM_File typeref:typename:SV * signature:(SDBM_File db,SV * code,SV * RETVAL) roles:def
23+
SDBM_File::filter_fetch_key input.xs /^ SDBM_File::filter_fetch_key = fetch_key$/;" a function:SDBM_File.SDBM_File.filter_fetch_key roles:def
24+
SDBM_File::filter_store_key input.xs /^ SDBM_File::filter_store_key = store_key$/;" a function:SDBM_File.SDBM_File.filter_fetch_key roles:def
25+
SDBM_File::filter_fetch_value input.xs /^ SDBM_File::filter_fetch_value = fetch_value$/;" a function:SDBM_File.SDBM_File.filter_fetch_key roles:def
26+
SDBM_File::filter_store_value input.xs /^ SDBM_File::filter_store_value = store_value$/;" a function:SDBM_File.SDBM_File.filter_fetch_key roles:def
27+
SDBM_File input.xs /^MODULE = SDBM_File PACKAGE = SDBM_X PREFIX = sdbm_X_$/;" m roles:def
28+
SDBM_X input.xs /^MODULE = SDBM_File PACKAGE = SDBM_X PREFIX = sdbm_X_$/;" p module:SDBM_File roles:def
29+
constants.xs input.xs /^INCLUDE: constants.xs$/;" M roles:included extras:reference
30+
sdbm_X_DELETE0 input.xs /^sdbm_X_DELETE0(db, key)$/;" f package:SDBM_File.SDBM_X typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def
31+
DELETE0 input.xs /^sdbm_X_DELETE0(db, key)$/;" f package:SDBM_File.SDBM_X typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def extras:noprefix
32+
sdbm_X_DELETE1 input.xs /^sdbm_X_DELETE1(db, key)$/;" f package:SDBM_File.SDBM_X typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def
33+
DELETE1 input.xs /^sdbm_X_DELETE1(db, key)$/;" f package:SDBM_File.SDBM_X typeref:typename:int signature:(SDBM_File db,datum_key key) roles:def extras:noprefix
34+
sin0 input.xs /^sin0()$/;" f package:SDBM_File.SDBM_X typeref:typename:double signature:() roles:def
35+
sin1 input.xs /^sin1();$/;" f package:SDBM_File.SDBM_X typeref:typename:double signature:() roles:def
36+
PERL_NO_GET_CONTEXT input.xs /^#define PERL_NO_GET_CONTEXT$/;" d file: roles:def extras:fileScope,guest
37+
EXTERN.h input.xs /^#include "EXTERN.h"/;" h roles:local extras:reference,guest
38+
perl.h input.xs /^#include "perl.h"/;" h roles:local extras:reference,guest
39+
XSUB.h input.xs /^#include "XSUB.h"/;" h roles:local extras:reference,guest
40+
sdbm.h input.xs /^#include "sdbm.h"/;" h roles:local extras:reference,guest
41+
fetch_key input.xs /^#define fetch_key /;" d file: roles:def extras:fileScope,guest
42+
store_key input.xs /^#define store_key /;" d file: roles:def extras:fileScope,guest
43+
fetch_value input.xs /^#define fetch_value /;" d file: roles:def extras:fileScope,guest
44+
store_value input.xs /^#define store_value /;" d file: roles:def extras:fileScope,guest
45+
__anoned1397e40108 input.xs /^typedef struct {$/;" s file: roles:def extras:fileScope,guest,anonymous
46+
dbp input.xs /^ DBM * dbp ;$/;" m struct:__anoned1397e40108 typeref:typename:DBM * file: roles:def extras:fileScope,guest
47+
filter input.xs /^ SV * filter[4];$/;" m struct:__anoned1397e40108 typeref:typename:SV * [4] file: roles:def extras:fileScope,guest
48+
filtering input.xs /^ int filtering ;$/;" m struct:__anoned1397e40108 typeref:typename:int file: roles:def extras:fileScope,guest
49+
SDBM_File_type input.xs /^ } SDBM_File_type;$/;" t typeref:struct:__anoned1397e40108 file: roles:def extras:fileScope,guest
50+
SDBM_File input.xs /^typedef SDBM_File_type * SDBM_File ;$/;" t typeref:typename:SDBM_File_type * file: roles:def extras:fileScope,guest
51+
datum_key input.xs /^typedef datum datum_key ;$/;" t typeref:typename:datum file: roles:def extras:fileScope,guest
52+
datum_value input.xs /^typedef datum datum_value ;$/;" t typeref:typename:datum file: roles:def extras:fileScope,guest
53+
sdbm_FETCH input.xs /^#define sdbm_FETCH(/;" d file: signature:(db,key) roles:def extras:fileScope,guest
54+
sdbm_STORE input.xs /^#define sdbm_STORE(/;" d file: signature:(db,key,value,flags) roles:def extras:fileScope,guest
55+
sdbm_DELETE input.xs /^#define sdbm_DELETE(/;" d file: signature:(db,key) roles:def extras:fileScope,guest
56+
sdbm_EXISTS input.xs /^#define sdbm_EXISTS(/;" d file: signature:(db,key) roles:def extras:fileScope,guest
57+
sdbm_FIRSTKEY input.xs /^#define sdbm_FIRSTKEY(/;" d file: signature:(db) roles:def extras:fileScope,guest
58+
sdbm_NEXTKEY input.xs /^#define sdbm_NEXTKEY(/;" d file: signature:(db,key) roles:def extras:fileScope,guest
59+
X input.xs /^#define X "X"/;" d file: roles:def extras:fileScope,guest
60+
Y input.xs /^#define Y "Y"/;" d file: roles:def extras:fileScope,guest
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pcre2

0 commit comments

Comments
 (0)