Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
d577c0ca
Kaydet (Commit)
d577c0ca
authored
Ock 27, 1992
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Fix range error (doc and impl of re_search disagreed!)
Use getargs() function. Drop re_string from re object.
üst
fc58e58c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
29 deletions
+32
-29
regexmodule.c
Modules/regexmodule.c
+32
-29
No files found.
Modules/regexmodule.c
Dosyayı görüntüle @
d577c0ca
...
...
@@ -41,7 +41,6 @@ static object *RegexError; /* Exception */
typedef
struct
{
OB_HEAD
object
*
re_string
;
/* The string (for printing) */
struct
re_pattern_buffer
re_patbuf
;
/* The compiled expression */
struct
re_registers
re_regs
;
/* The registers from the last match */
int
re_regs_valid
;
/* Nonzero if the registers are valid */
...
...
@@ -54,7 +53,6 @@ static void
reg_dealloc
(
re
)
regexobject
*
re
;
{
XDECREF
(
re
->
re_string
);
XDEL
(
re
->
re_patbuf
.
buffer
);
XDEL
(
re
->
re_patbuf
.
translate
);
DEL
(
re
);
...
...
@@ -91,18 +89,19 @@ reg_match(re, args)
{
object
*
v
;
char
*
buffer
;
int
size
;
int
offset
;
int
result
;
if
(
args
!=
NULL
&&
is_stringobject
(
args
))
{
v
=
args
;
if
(
getargs
(
args
,
"s#"
,
&
buffer
,
&
size
))
{
offset
=
0
;
}
else
if
(
!
getstrintarg
(
args
,
&
v
,
&
offset
))
return
NULL
;
buffer
=
getstringvalue
(
v
);
else
{
err_clear
();
if
(
!
getargs
(
args
,
"(s#i)"
,
&
buffer
,
&
size
,
&
offset
))
return
NULL
;
}
re
->
re_regs_valid
=
0
;
result
=
re_match
(
&
re
->
re_patbuf
,
buffer
,
getstringsize
(
v
),
offset
,
&
re
->
re_regs
);
result
=
re_match
(
&
re
->
re_patbuf
,
buffer
,
size
,
offset
,
&
re
->
re_regs
);
if
(
result
<
-
1
)
{
/* Failure like stack overflow */
err_setstr
(
RegexError
,
"match failure"
);
...
...
@@ -111,6 +110,7 @@ reg_match(re, args)
re
->
re_regs_valid
=
result
>=
0
;
return
newintobject
((
long
)
result
);
/* Length of the match or -1 */
}
static
object
*
reg_search
(
re
,
args
)
regexobject
*
re
;
...
...
@@ -122,18 +122,23 @@ reg_search(re, args)
int
offset
;
int
range
;
int
result
;
if
(
args
!=
NULL
&&
is_stringobject
(
args
))
{
v
=
args
;
if
(
getargs
(
args
,
"s#"
,
&
buffer
,
&
size
))
{
offset
=
0
;
}
else
if
(
!
getstrintarg
(
args
,
&
v
,
&
offset
))
return
NULL
;
buffer
=
getstringvalue
(
v
);
size
=
getstringsize
(
v
);
else
{
err_clear
();
if
(
!
getargs
(
args
,
"(s#i)"
,
&
buffer
,
&
size
,
&
offset
))
return
NULL
;
}
if
(
offset
<
0
||
offset
>
size
)
{
err_setstr
(
RegexError
,
"search offset out of range"
);
return
NULL
;
}
/* NB: In Emacs 18.57, the documentation for re_search[_2] and
the implementation don't match: the documentation states that
|range| positions are tried, while the code tries |range|+1
positions. It seems more productive to believe the code! */
range
=
size
-
offset
;
re
->
re_regs_valid
=
0
;
result
=
re_search
(
&
re
->
re_patbuf
,
buffer
,
size
,
offset
,
range
,
...
...
@@ -184,31 +189,28 @@ static typeobject Regextype = {
0
,
/*tp_repr*/
};
static
regexobject
*
newregexobject
(
string
)
object
*
string
;
static
object
*
newregexobject
(
pat
,
size
)
char
*
pat
;
int
size
;
{
regexobject
*
re
;
re
=
NEWOBJ
(
regexobject
,
&
Regextype
);
if
(
re
!=
NULL
)
{
char
*
error
;
INCREF
(
string
);
re
->
re_string
=
string
;
re
->
re_patbuf
.
buffer
=
NULL
;
re
->
re_patbuf
.
allocated
=
0
;
re
->
re_patbuf
.
fastmap
=
re
->
re_fastmap
;
re
->
re_patbuf
.
translate
=
NULL
;
re
->
re_regs_valid
=
0
;
error
=
re_compile_pattern
(
getstringvalue
(
string
),
getstringsize
(
string
),
&
re
->
re_patbuf
);
error
=
re_compile_pattern
(
pat
,
size
,
&
re
->
re_patbuf
);
if
(
error
!=
NULL
)
{
err_setstr
(
RegexError
,
error
);
DECREF
(
re
);
re
=
NULL
;
}
}
return
re
;
return
(
object
*
)
re
;
}
static
object
*
...
...
@@ -216,10 +218,11 @@ regex_compile(self, args)
object
*
self
;
object
*
args
;
{
object
*
string
;
if
(
!
getstrarg
(
args
,
&
string
))
char
*
pat
;
int
size
;
if
(
!
getargs
(
args
,
"s#"
,
&
pat
,
&
size
))
return
NULL
;
return
(
object
*
)
newregexobject
(
string
);
return
newregexobject
(
pat
,
size
);
}
static
object
*
cache_pat
;
...
...
@@ -248,7 +251,7 @@ regex_match(self, args)
object
*
args
;
{
object
*
pat
,
*
string
;
if
(
!
get
strs
trarg
(
args
,
&
pat
,
&
string
))
if
(
!
get
StrS
trarg
(
args
,
&
pat
,
&
string
))
return
NULL
;
if
(
update_cache
(
pat
)
<
0
)
return
NULL
;
...
...
@@ -261,7 +264,7 @@ regex_search(self, args)
object
*
args
;
{
object
*
pat
,
*
string
;
if
(
!
get
strs
trarg
(
args
,
&
pat
,
&
string
))
if
(
!
get
StrS
trarg
(
args
,
&
pat
,
&
string
))
return
NULL
;
if
(
update_cache
(
pat
)
<
0
)
return
NULL
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment