Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
Pyston
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
Pyston
Commits
6a3416d9
Commit
6a3416d9
authored
Sep 29, 2015
by
Kevin Modzelewski
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #937 from undingen/pyopenssl
misc fixes for pyopenssl
parents
ac69cfef
bbeea61a
Changes
16
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
199 additions
and
30 deletions
+199
-30
.travis.yml
.travis.yml
+1
-0
from_cpython/Include/Python.h
from_cpython/Include/Python.h
+1
-2
from_cpython/Objects/exceptions.c
from_cpython/Objects/exceptions.c
+2
-2
src/capi/abstract.cpp
src/capi/abstract.cpp
+26
-0
src/capi/object.cpp
src/capi/object.cpp
+0
-4
src/capi/types.h
src/capi/types.h
+1
-0
src/gc/gc_alloc.h
src/gc/gc_alloc.h
+7
-0
src/runtime/capi.cpp
src/runtime/capi.cpp
+14
-2
src/runtime/classobj.cpp
src/runtime/classobj.cpp
+37
-0
src/runtime/file.cpp
src/runtime/file.cpp
+8
-2
src/runtime/import.cpp
src/runtime/import.cpp
+59
-7
src/runtime/str.cpp
src/runtime/str.cpp
+4
-0
src/runtime/types.cpp
src/runtime/types.cpp
+3
-1
test/extra/pyopenssl_test.py
test/extra/pyopenssl_test.py
+14
-0
test/integration/Cython_0001-Pyston-change-we-don-t-support-custom-traceback-entr.patch
...yston-change-we-don-t-support-custom-traceback-entr.patch
+21
-7
test/tests/multiprocessing_ctypes_test.py
test/tests/multiprocessing_ctypes_test.py
+1
-3
No files found.
.travis.yml
View file @
6a3416d9
...
@@ -50,6 +50,7 @@ addons:
...
@@ -50,6 +50,7 @@ addons:
-
libcurl4-openssl-dev
-
libcurl4-openssl-dev
-
libxml2-dev
-
libxml2-dev
-
libxslt1-dev
-
libxslt1-dev
-
libssl-dev
before_install
:
before_install
:
-
if [ "$CC" = "clang" ]; then export CC="clang-3.5" CXX="clang++-3.5"; fi
-
if [ "$CC" = "clang" ]; then export CC="clang-3.5" CXX="clang++-3.5"; fi
...
...
from_cpython/Include/Python.h
View file @
6a3416d9
...
@@ -18,8 +18,7 @@
...
@@ -18,8 +18,7 @@
// Cython depends on having this define set:
// Cython depends on having this define set:
#define Py_PYTHON_H
#define Py_PYTHON_H
// Cython has some "not targeting CPython" support that is triggered by having PYPY_VERSION defined:
#define PYSTON_VERSION "0.3"
#define PYPY_VERSION "Pyston"
// These include orders come from CPython:
// These include orders come from CPython:
#include "patchlevel.h"
#include "patchlevel.h"
...
...
from_cpython/Objects/exceptions.c
View file @
6a3416d9
...
@@ -2246,11 +2246,11 @@ _PyExc_Init(void)
...
@@ -2246,11 +2246,11 @@ _PyExc_Init(void)
POST_INIT
(
UnicodeWarning
)
POST_INIT
(
UnicodeWarning
)
POST_INIT
(
BytesWarning
)
POST_INIT
(
BytesWarning
)
PyExc_MemoryErrorInst
=
BaseException_new
(
&
_PyExc_MemoryError
,
NULL
,
NULL
);
PyExc_MemoryErrorInst
=
PyGC_AddRoot
(
BaseException_new
(
&
_PyExc_MemoryError
,
NULL
,
NULL
)
);
if
(
!
PyExc_MemoryErrorInst
)
if
(
!
PyExc_MemoryErrorInst
)
Py_FatalError
(
"Cannot pre-allocate MemoryError instance"
);
Py_FatalError
(
"Cannot pre-allocate MemoryError instance"
);
PyExc_RecursionErrorInst
=
BaseException_new
(
&
_PyExc_RuntimeError
,
NULL
,
NULL
);
PyExc_RecursionErrorInst
=
PyGC_AddRoot
(
BaseException_new
(
&
_PyExc_RuntimeError
,
NULL
,
NULL
)
);
if
(
!
PyExc_RecursionErrorInst
)
if
(
!
PyExc_RecursionErrorInst
)
Py_FatalError
(
"Cannot pre-allocate RuntimeError instance for "
Py_FatalError
(
"Cannot pre-allocate RuntimeError instance for "
"recursion errors"
);
"recursion errors"
);
...
...
src/capi/abstract.cpp
View file @
6a3416d9
...
@@ -605,6 +605,32 @@ extern "C" int PyObject_AsReadBuffer(PyObject* obj, const void** buffer, Py_ssiz
...
@@ -605,6 +605,32 @@ extern "C" int PyObject_AsReadBuffer(PyObject* obj, const void** buffer, Py_ssiz
return
0
;
return
0
;
}
}
extern
"C"
int
PyObject_AsWriteBuffer
(
PyObject
*
obj
,
void
**
buffer
,
Py_ssize_t
*
buffer_len
)
noexcept
{
PyBufferProcs
*
pb
;
void
*
pp
;
Py_ssize_t
len
;
if
(
obj
==
NULL
||
buffer
==
NULL
||
buffer_len
==
NULL
)
{
null_error
();
return
-
1
;
}
pb
=
obj
->
cls
->
tp_as_buffer
;
if
(
pb
==
NULL
||
pb
->
bf_getwritebuffer
==
NULL
||
pb
->
bf_getsegcount
==
NULL
)
{
PyErr_SetString
(
PyExc_TypeError
,
"expected a writeable buffer object"
);
return
-
1
;
}
if
((
*
pb
->
bf_getsegcount
)(
obj
,
NULL
)
!=
1
)
{
PyErr_SetString
(
PyExc_TypeError
,
"expected a single-segment buffer object"
);
return
-
1
;
}
len
=
(
*
pb
->
bf_getwritebuffer
)(
obj
,
0
,
&
pp
);
if
(
len
<
0
)
return
-
1
;
*
buffer
=
pp
;
*
buffer_len
=
len
;
return
0
;
}
static
PyObject
*
call_function_tail
(
PyObject
*
callable
,
PyObject
*
args
)
{
static
PyObject
*
call_function_tail
(
PyObject
*
callable
,
PyObject
*
args
)
{
PyObject
*
retval
;
PyObject
*
retval
;
...
...
src/capi/object.cpp
View file @
6a3416d9
...
@@ -564,10 +564,6 @@ extern "C" int PyObject_HasAttrString(PyObject* v, const char* name) noexcept {
...
@@ -564,10 +564,6 @@ extern "C" int PyObject_HasAttrString(PyObject* v, const char* name) noexcept {
return
0
;
return
0
;
}
}
extern
"C"
int
PyObject_AsWriteBuffer
(
PyObject
*
obj
,
void
**
buffer
,
Py_ssize_t
*
buffer_len
)
noexcept
{
Py_FatalError
(
"unimplemented"
);
}
// I'm not sure how we can support this one:
// I'm not sure how we can support this one:
extern
"C"
PyObject
**
_PyObject_GetDictPtr
(
PyObject
*
obj
)
noexcept
{
extern
"C"
PyObject
**
_PyObject_GetDictPtr
(
PyObject
*
obj
)
noexcept
{
fatalOrError
(
PyExc_NotImplementedError
,
"unimplemented"
);
fatalOrError
(
PyExc_NotImplementedError
,
"unimplemented"
);
...
...
src/capi/types.h
View file @
6a3416d9
...
@@ -68,6 +68,7 @@ public:
...
@@ -68,6 +68,7 @@ public:
BoxedCApiFunction
*
o
=
static_cast
<
BoxedCApiFunction
*>
(
_o
);
BoxedCApiFunction
*
o
=
static_cast
<
BoxedCApiFunction
*>
(
_o
);
Box
::
gcHandler
(
v
,
o
);
Box
::
gcHandler
(
v
,
o
);
v
->
visitPotential
(
o
->
method_def
);
v
->
visit
(
&
o
->
passthrough
);
v
->
visit
(
&
o
->
passthrough
);
v
->
visit
(
&
o
->
module
);
v
->
visit
(
&
o
->
module
);
}
}
...
...
src/gc/gc_alloc.h
View file @
6a3416d9
...
@@ -51,6 +51,10 @@ extern "C" inline void* gc_alloc(size_t bytes, GCKind kind_id) {
...
@@ -51,6 +51,10 @@ extern "C" inline void* gc_alloc(size_t bytes, GCKind kind_id) {
// inline it, which is especially useful for this function.
// inline it, which is especially useful for this function.
ScopedStatTimer
gc_alloc_stattimer
(
gc_alloc_stattimer_counter
,
15
);
ScopedStatTimer
gc_alloc_stattimer
(
gc_alloc_stattimer_counter
,
15
);
#endif
#endif
if
((
size_t
)(
bytes
)
>
(
size_t
)
PY_SSIZE_T_MAX
)
return
NULL
;
size_t
alloc_bytes
=
bytes
+
sizeof
(
GCAllocation
);
size_t
alloc_bytes
=
bytes
+
sizeof
(
GCAllocation
);
#ifndef NVALGRIND
#ifndef NVALGRIND
...
@@ -124,6 +128,9 @@ extern "C" inline void* gc_realloc(void* ptr, size_t bytes) {
...
@@ -124,6 +128,9 @@ extern "C" inline void* gc_realloc(void* ptr, size_t bytes) {
// Normal realloc() supports receiving a NULL pointer, but we need to know what the GCKind is:
// Normal realloc() supports receiving a NULL pointer, but we need to know what the GCKind is:
assert
(
ptr
);
assert
(
ptr
);
if
((
size_t
)(
bytes
)
>
(
size_t
)
PY_SSIZE_T_MAX
)
return
NULL
;
size_t
alloc_bytes
=
bytes
+
sizeof
(
GCAllocation
);
size_t
alloc_bytes
=
bytes
+
sizeof
(
GCAllocation
);
GCAllocation
*
alloc
;
GCAllocation
*
alloc
;
...
...
src/runtime/capi.cpp
View file @
6a3416d9
...
@@ -892,8 +892,20 @@ extern "C" int PyErr_BadArgument() noexcept {
...
@@ -892,8 +892,20 @@ extern "C" int PyErr_BadArgument() noexcept {
}
}
extern
"C"
PyObject
*
PyErr_NoMemory
()
noexcept
{
extern
"C"
PyObject
*
PyErr_NoMemory
()
noexcept
{
fatalOrError
(
PyExc_NotImplementedError
,
"unimplemented"
);
if
(
PyErr_ExceptionMatches
(
PyExc_MemoryError
))
return
nullptr
;
/* already current */
return
NULL
;
/* raise the pre-allocated instance if it still exists */
if
(
PyExc_MemoryErrorInst
)
PyErr_SetObject
(
PyExc_MemoryError
,
PyExc_MemoryErrorInst
);
else
/* this will probably fail since there's no memory and hee,
hee, we have to instantiate this class
*/
PyErr_SetNone
(
PyExc_MemoryError
);
return
NULL
;
}
}
extern
"C"
const
char
*
PyExceptionClass_Name
(
PyObject
*
o
)
noexcept
{
extern
"C"
const
char
*
PyExceptionClass_Name
(
PyObject
*
o
)
noexcept
{
...
...
src/runtime/classobj.cpp
View file @
6a3416d9
...
@@ -54,6 +54,34 @@ static Box* classLookup(BoxedClassobj* cls, BoxedString* attr, GetattrRewriteArg
...
@@ -54,6 +54,34 @@ static Box* classLookup(BoxedClassobj* cls, BoxedString* attr, GetattrRewriteArg
return
NULL
;
return
NULL
;
}
}
extern
"C"
PyObject
*
_PyInstance_Lookup
(
PyObject
*
pinst
,
PyObject
*
pname
)
noexcept
{
RELEASE_ASSERT
(
PyInstance_Check
(
pinst
),
""
);
BoxedInstance
*
inst
=
(
BoxedInstance
*
)
pinst
;
RELEASE_ASSERT
(
PyString_Check
(
pname
),
""
);
BoxedString
*
name
=
(
BoxedString
*
)
pname
;
try
{
internStringMortalInplace
(
name
);
Box
*
v
=
inst
->
getattr
(
name
,
NULL
);
if
(
v
==
NULL
)
v
=
classLookup
(
inst
->
inst_cls
,
name
);
return
v
;
}
catch
(
ExcInfo
e
)
{
setCAPIException
(
e
);
return
NULL
;
}
}
extern
"C"
PyObject
*
PyInstance_NewRaw
(
PyObject
*
klass
,
PyObject
*
dict
)
noexcept
{
RELEASE_ASSERT
(
!
dict
,
"not implemented"
);
if
(
!
PyClass_Check
(
klass
))
{
PyErr_BadInternalCall
();
return
NULL
;
}
return
new
BoxedInstance
((
BoxedClassobj
*
)
klass
);
}
extern
"C"
int
PyClass_IsSubclass
(
PyObject
*
klass
,
PyObject
*
base
)
noexcept
{
extern
"C"
int
PyClass_IsSubclass
(
PyObject
*
klass
,
PyObject
*
base
)
noexcept
{
Py_ssize_t
i
,
n
;
Py_ssize_t
i
,
n
;
if
(
klass
==
base
)
if
(
klass
==
base
)
...
@@ -155,6 +183,15 @@ Box* classobjCall(Box* _cls, Box* _args, Box* _kwargs) {
...
@@ -155,6 +183,15 @@ Box* classobjCall(Box* _cls, Box* _args, Box* _kwargs) {
return
made
;
return
made
;
}
}
extern
"C"
PyObject
*
PyInstance_New
(
PyObject
*
klass
,
PyObject
*
arg
,
PyObject
*
kw
)
noexcept
{
try
{
return
classobjCall
(
klass
,
arg
,
kw
);
}
catch
(
ExcInfo
e
)
{
setCAPIException
(
e
);
return
NULL
;
}
}
static
Box
*
classobjGetattribute
(
Box
*
_cls
,
Box
*
_attr
)
{
static
Box
*
classobjGetattribute
(
Box
*
_cls
,
Box
*
_attr
)
{
RELEASE_ASSERT
(
_cls
->
cls
==
classobj_cls
,
""
);
RELEASE_ASSERT
(
_cls
->
cls
==
classobj_cls
,
""
);
BoxedClassobj
*
cls
=
static_cast
<
BoxedClassobj
*>
(
_cls
);
BoxedClassobj
*
cls
=
static_cast
<
BoxedClassobj
*>
(
_cls
);
...
...
src/runtime/file.cpp
View file @
6a3416d9
...
@@ -929,11 +929,17 @@ Box* fileNew(BoxedClass* cls, Box* s, Box* m, Box** args) {
...
@@ -929,11 +929,17 @@ Box* fileNew(BoxedClass* cls, Box* s, Box* m, Box** args) {
assert
(
cls
==
file_cls
);
assert
(
cls
==
file_cls
);
if
(
s
->
cls
==
unicode_cls
)
if
(
s
->
cls
==
unicode_cls
)
{
s
=
_PyUnicode_AsDefaultEncodedString
(
s
,
NULL
);
s
=
_PyUnicode_AsDefaultEncodedString
(
s
,
NULL
);
if
(
!
s
)
throwCAPIException
();
}
if
(
m
->
cls
==
unicode_cls
)
if
(
m
->
cls
==
unicode_cls
)
{
m
=
_PyUnicode_AsDefaultEncodedString
(
m
,
NULL
);
m
=
_PyUnicode_AsDefaultEncodedString
(
m
,
NULL
);
if
(
!
m
)
throwCAPIException
();
}
if
(
s
->
cls
!=
str_cls
)
{
if
(
s
->
cls
!=
str_cls
)
{
raiseExcHelper
(
TypeError
,
"coercing to Unicode: need string of buffer, %s found"
,
getTypeName
(
s
));
raiseExcHelper
(
TypeError
,
"coercing to Unicode: need string of buffer, %s found"
,
getTypeName
(
s
));
...
...
src/runtime/import.cpp
View file @
6a3416d9
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#include "runtime/import.h"
#include "runtime/import.h"
#include <dlfcn.h>
#include <dlfcn.h>
#include <fstream>
#include <limits.h>
#include <limits.h>
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/FileSystem.h"
...
@@ -783,6 +784,63 @@ Box* impLoadDynamic(Box* _name, Box* _pathname, Box* _file) {
...
@@ -783,6 +784,63 @@ Box* impLoadDynamic(Box* _name, Box* _pathname, Box* _file) {
return
importCExtension
(
name
,
shortname
,
pathname
->
s
());
return
importCExtension
(
name
,
shortname
,
pathname
->
s
());
}
}
// Parses the memory map and registers all memory regions with "rwxp" permission and which contain the requested file
// path with the GC. In addition adds the BSS segment.
static
void
registerDataSegment
(
void
*
dl_handle
,
llvm
::
StringRef
lib_path
)
{
std
::
ifstream
mapmap
(
"/proc/self/maps"
);
std
::
string
line
;
llvm
::
SmallVector
<
std
::
pair
<
uint64_t
,
uint64_t
>
,
4
>
mem_ranges
;
while
(
std
::
getline
(
mapmap
,
line
))
{
// format is:
// address perms offset dev inode pathname
llvm
::
SmallVector
<
llvm
::
StringRef
,
6
>
line_split
;
llvm
::
StringRef
(
line
).
split
(
line_split
,
" "
,
5
,
false
);
RELEASE_ASSERT
(
line_split
.
size
()
>=
5
,
"%zu"
,
line_split
.
size
());
if
(
line_split
.
size
()
<
6
)
continue
;
// pathname is missing
llvm
::
StringRef
permissions
=
line_split
[
1
].
trim
();
llvm
::
StringRef
pathname
=
line_split
[
5
].
trim
();
if
(
permissions
==
"rwxp"
&&
pathname
.
endswith
(
lib_path
))
{
llvm
::
StringRef
mem_range
=
line_split
[
0
].
trim
();
auto
mem_range_split
=
mem_range
.
split
(
'-'
);
uint64_t
lower_addr
=
0
;
bool
error
=
mem_range_split
.
first
.
getAsInteger
(
16
,
lower_addr
);
RELEASE_ASSERT
(
!
error
,
""
);
uint64_t
upper_addr
=
0
;
error
=
mem_range_split
.
second
.
getAsInteger
(
16
,
upper_addr
);
RELEASE_ASSERT
(
!
error
,
""
);
RELEASE_ASSERT
(
lower_addr
<
upper_addr
,
""
);
RELEASE_ASSERT
(
upper_addr
-
lower_addr
<
1000000
,
"Large data section detected - there maybe something wrong"
);
mem_ranges
.
emplace_back
(
lower_addr
,
upper_addr
);
}
}
RELEASE_ASSERT
(
mem_ranges
.
size
()
>=
1
,
""
);
uintptr_t
bss_start
=
(
uintptr_t
)
dlsym
(
dl_handle
,
"__bss_start"
);
uintptr_t
bss_end
=
(
uintptr_t
)
dlsym
(
dl_handle
,
"_end"
);
RELEASE_ASSERT
(
bss_end
-
bss_start
<
1000000
,
"Large BSS section detected - there maybe something wrong"
);
// most of the time the BSS section is inside one of memory regions, in that case we don't have to register it.
bool
should_add_bss
=
true
;
for
(
auto
r
:
mem_ranges
)
{
if
(
r
.
first
<=
bss_start
&&
bss_end
<=
r
.
second
)
should_add_bss
=
false
;
gc
::
registerPotentialRootRange
((
void
*
)
r
.
first
,
(
void
*
)
r
.
second
);
}
if
(
should_add_bss
)
{
// only track void* aligned memory
bss_start
=
(
bss_start
+
(
sizeof
(
void
*
)
-
1
))
&
~
(
sizeof
(
void
*
)
-
1
);
bss_end
-=
bss_end
%
sizeof
(
void
*
);
gc
::
registerPotentialRootRange
((
void
*
)
bss_start
,
(
void
*
)
bss_end
);
}
}
BoxedModule
*
importCExtension
(
BoxedString
*
full_name
,
const
std
::
string
&
last_name
,
const
std
::
string
&
path
)
{
BoxedModule
*
importCExtension
(
BoxedString
*
full_name
,
const
std
::
string
&
last_name
,
const
std
::
string
&
path
)
{
void
*
handle
=
dlopen
(
path
.
c_str
(),
RTLD_NOW
);
void
*
handle
=
dlopen
(
path
.
c_str
(),
RTLD_NOW
);
if
(
!
handle
)
{
if
(
!
handle
)
{
...
@@ -805,13 +863,7 @@ BoxedModule* importCExtension(BoxedString* full_name, const std::string& last_na
...
@@ -805,13 +863,7 @@ BoxedModule* importCExtension(BoxedString* full_name, const std::string& last_na
assert
(
init
);
assert
(
init
);
// Let the GC know about the static variables.
// Let the GC know about the static variables.
uintptr_t
bss_start
=
(
uintptr_t
)
dlsym
(
handle
,
"__bss_start"
);
registerDataSegment
(
handle
,
path
);
uintptr_t
bss_end
=
(
uintptr_t
)
dlsym
(
handle
,
"_end"
);
RELEASE_ASSERT
(
bss_end
-
bss_start
<
1000000
,
"Large BSS section detected - there maybe something wrong"
);
// only track void* aligned memory
bss_start
=
(
bss_start
+
(
sizeof
(
void
*
)
-
1
))
&
~
(
sizeof
(
void
*
)
-
1
);
bss_end
-=
bss_end
%
sizeof
(
void
*
);
gc
::
registerPotentialRootRange
((
void
*
)
bss_start
,
(
void
*
)
bss_end
);
char
*
packagecontext
=
strdup
(
full_name
->
c_str
());
char
*
packagecontext
=
strdup
(
full_name
->
c_str
());
char
*
oldcontext
=
_Py_PackageContext
;
char
*
oldcontext
=
_Py_PackageContext
;
...
...
src/runtime/str.cpp
View file @
6a3416d9
...
@@ -2477,6 +2477,10 @@ extern "C" int PyString_AsStringAndSize(register PyObject* obj, register char**
...
@@ -2477,6 +2477,10 @@ extern "C" int PyString_AsStringAndSize(register PyObject* obj, register char**
}
}
extern
"C"
PyObject
*
PyString_FromStringAndSize
(
const
char
*
s
,
ssize_t
n
)
noexcept
{
extern
"C"
PyObject
*
PyString_FromStringAndSize
(
const
char
*
s
,
ssize_t
n
)
noexcept
{
if
(
n
<
0
)
{
PyErr_SetString
(
PyExc_SystemError
,
"Negative size passed to PyString_FromStringAndSize"
);
return
NULL
;
}
if
(
s
==
NULL
)
if
(
s
==
NULL
)
return
BoxedString
::
createUninitializedString
(
n
);
return
BoxedString
::
createUninitializedString
(
n
);
return
boxString
(
llvm
::
StringRef
(
s
,
n
));
return
boxString
(
llvm
::
StringRef
(
s
,
n
));
...
...
src/runtime/types.cpp
View file @
6a3416d9
...
@@ -3274,7 +3274,9 @@ extern "C" PyVarObject* PyObject_InitVar(PyVarObject* op, PyTypeObject* tp, Py_s
...
@@ -3274,7 +3274,9 @@ extern "C" PyVarObject* PyObject_InitVar(PyVarObject* op, PyTypeObject* tp, Py_s
}
}
extern
"C"
PyObject
*
PyObject_Init
(
PyObject
*
op
,
PyTypeObject
*
tp
)
noexcept
{
extern
"C"
PyObject
*
PyObject_Init
(
PyObject
*
op
,
PyTypeObject
*
tp
)
noexcept
{
assert
(
op
);
if
(
op
==
NULL
)
return
PyErr_NoMemory
();
assert
(
tp
);
assert
(
tp
);
assert
(
gc
::
isValidGCMemory
(
op
));
assert
(
gc
::
isValidGCMemory
(
op
));
...
...
test/extra/pyopenssl_test.py
0 → 100644
View file @
6a3416d9
import
os
,
sys
sys
.
path
.
append
(
os
.
path
.
dirname
(
__file__
)
+
"/../lib"
)
from
test_helper
import
create_virtenv
,
run_test
ENV_NAME
=
os
.
path
.
abspath
(
"pyopenssl_test_env_"
+
os
.
path
.
basename
(
sys
.
executable
))
NOSETESTS_EXE
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"bin"
,
"nosetests"
))
PYOPENSSL_DIR
=
os
.
path
.
abspath
(
os
.
path
.
join
(
ENV_NAME
,
"site-packages"
,
"OpenSSL"
))
packages
=
[
"nose==1.3.7"
,
"pycparser==2.13"
,
"cryptography==1.0.1"
,
"pyopenssl==0.15.1"
,
"pyasn1==0.1.7"
,
"idna==2.0"
,
"six==1.9.0"
,
"enum34==1.0.4"
,
"ipaddress==1.0.14"
,
"cffi==1.1.0"
]
create_virtenv
(
ENV_NAME
,
packages
,
force_create
=
True
)
expected
=
[{
'ran'
:
247
,
'errors'
:
2
,
'failures'
:
0
}]
run_test
([
NOSETESTS_EXE
],
cwd
=
PYOPENSSL_DIR
,
expected
=
expected
)
test/integration/Cython_0001-Pyston-change-we-don-t-support-custom-traceback-entr.patch
View file @
6a3416d9
From
27b69179b90851da187d698a0817b0b8190a0449
Mon Sep 17 00:00:00 2001
From
e0257ba4efd903da2a0f1909d21d51ff1799a3c6
Mon Sep 17 00:00:00 2001
From: Marius Wachtler <undingen@gmail.com>
From: Marius Wachtler <undingen@gmail.com>
Date: Tue, 9 Jun 2015 19:26:44 +0200
Date: Tue, 9 Jun 2015 19:26:44 +0200
Subject: [PATCH] Pyston change: we don't support custom traceback entries yet
Subject: [PATCH] Pyston change: we don't support custom traceback entries yet
...
@@ -8,8 +8,9 @@ Subject: [PATCH] Pyston change: we don't support custom traceback entries yet
...
@@ -8,8 +8,9 @@ Subject: [PATCH] Pyston change: we don't support custom traceback entries yet
Cython/Compiler/ModuleNode.py | 8 ++++++--
Cython/Compiler/ModuleNode.py | 8 ++++++--
Cython/Utility/CythonFunction.c | 4 +++-
Cython/Utility/CythonFunction.c | 4 +++-
Cython/Utility/Exceptions.c | 7 ++++++-
Cython/Utility/Exceptions.c | 7 ++++++-
Cython/Utility/Generator.c | 41 +++++++++++++++++++++++++++++------------
Cython/Utility/Generator.c | 41 ++++++++++++++++++++++++++++------------
5 files changed, 53 insertions(+), 16 deletions(-)
Cython/Utility/ModuleSetupCode.c | 2 +-
6 files changed, 54 insertions(+), 17 deletions(-)
diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py
diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py
index f99ec6e..7ab41f3 100644
index f99ec6e..7ab41f3 100644
...
@@ -188,6 +189,19 @@ index 0310570..70e550c 100644
...
@@ -188,6 +189,19 @@ index 0310570..70e550c 100644
#endif
#endif
0, /*tp_version_tag*/
0, /*tp_version_tag*/
#if PY_VERSION_HEX >= 0x030400a1
#if PY_VERSION_HEX >= 0x030400a1
diff --git a/Cython/Utility/ModuleSetupCode.c b/Cython/Utility/ModuleSetupCode.c
index 6477fb2..75dcdda 100644
--- a/Cython/Utility/ModuleSetupCode.c
+++ b/Cython/Utility/ModuleSetupCode.c
@@ -32,7 +32,7 @@
#define Py_HUGE_VAL HUGE_VAL
#endif
-#ifdef PYPY_VERSION
+#if defined(PYPY_VERSION) || defined(PYSTON_VERSION)
#define CYTHON_COMPILING_IN_PYPY 1
#define CYTHON_COMPILING_IN_CPYTHON 0
#else
--
--
1.9.1
1.9.1
test/tests/multiprocessing_ctypes_test.py
View file @
6a3416d9
# expected: fail
# skip-if: True
# - relies on ctypes
import
multiprocessing
import
multiprocessing
# from https://docs.python.org/2/library/multiprocessing.html
# from https://docs.python.org/2/library/multiprocessing.html
...
...
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