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
3d8398be
Commit
3d8398be
authored
Aug 06, 2015
by
Kevin Modzelewski
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #807 from kmod/doctest
Add "doctest" support
parents
264540c8
552cab2d
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
164 additions
and
55 deletions
+164
-55
from_cpython/Lib/test/test_compare.py
from_cpython/Lib/test/test_compare.py
+0
-1
from_cpython/Lib/test/test_doctest2.py
from_cpython/Lib/test/test_doctest2.py
+0
-1
from_cpython/Lib/test/test_getopt.py
from_cpython/Lib/test/test_getopt.py
+0
-1
from_cpython/Lib/test/test_pow.py
from_cpython/Lib/test/test_pow.py
+0
-1
from_cpython/Lib/test/test_sets.py
from_cpython/Lib/test/test_sets.py
+0
-1
from_cpython/Lib/test/test_unpack.py
from_cpython/Lib/test/test_unpack.py
+0
-1
src/analysis/type_analysis.cpp
src/analysis/type_analysis.cpp
+1
-0
src/codegen/ast_interpreter.cpp
src/codegen/ast_interpreter.cpp
+12
-0
src/codegen/ast_interpreter.h
src/codegen/ast_interpreter.h
+3
-0
src/codegen/irgen/hooks.cpp
src/codegen/irgen/hooks.cpp
+3
-7
src/codegen/irgen/irgenerator.cpp
src/codegen/irgen/irgenerator.cpp
+10
-0
src/codegen/runtime_hooks.cpp
src/codegen/runtime_hooks.cpp
+2
-0
src/codegen/runtime_hooks.h
src/codegen/runtime_hooks.h
+1
-1
src/codegen/unwinding.cpp
src/codegen/unwinding.cpp
+2
-0
src/codegen/unwinding.h
src/codegen/unwinding.h
+3
-3
src/core/ast.h
src/core/ast.h
+1
-0
src/jit.cpp
src/jit.cpp
+3
-14
src/runtime/builtin_modules/sys.cpp
src/runtime/builtin_modules/sys.cpp
+49
-0
src/runtime/inline/CMakeLists.txt
src/runtime/inline/CMakeLists.txt
+1
-1
src/runtime/inline/link_forcer.cpp
src/runtime/inline/link_forcer.cpp
+2
-0
src/runtime/objmodel.cpp
src/runtime/objmodel.cpp
+1
-0
src/runtime/stacktrace.cpp
src/runtime/stacktrace.cpp
+1
-0
src/runtime/types.cpp
src/runtime/types.cpp
+38
-2
test/CPYTHON_TEST_NOTES.md
test/CPYTHON_TEST_NOTES.md
+13
-20
test/tests/classes.py
test/tests/classes.py
+9
-0
test/tests/compile_exec.py
test/tests/compile_exec.py
+9
-0
test/tests/doctest_test.py
test/tests/doctest_test.py
+0
-1
No files found.
from_cpython/Lib/test/test_compare.py
View file @
3d8398be
# expected: fail
import
unittest
import
unittest
from
test
import
test_support
from
test
import
test_support
...
...
from_cpython/Lib/test/test_doctest2.py
View file @
3d8398be
# expected: fail
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
u"""A module to test whether doctest recognizes some 2.2 features,
u"""A module to test whether doctest recognizes some 2.2 features,
like static and class methods.
like static and class methods.
...
...
from_cpython/Lib/test/test_getopt.py
View file @
3d8398be
# expected: fail
# test_getopt.py
# test_getopt.py
# David Goodger <dgoodger@bigfoot.com> 2000-08-19
# David Goodger <dgoodger@bigfoot.com> 2000-08-19
...
...
from_cpython/Lib/test/test_pow.py
View file @
3d8398be
# expected: fail
import
test.test_support
,
unittest
import
test.test_support
,
unittest
class
PowTest
(
unittest
.
TestCase
):
class
PowTest
(
unittest
.
TestCase
):
...
...
from_cpython/Lib/test/test_sets.py
View file @
3d8398be
# expected: fail
import
unittest
,
operator
,
copy
,
pickle
,
random
import
unittest
,
operator
,
copy
,
pickle
,
random
from
test
import
test_support
from
test
import
test_support
...
...
from_cpython/Lib/test/test_unpack.py
View file @
3d8398be
# expected: fail
doctests
=
"""
doctests
=
"""
Unpack tuple
Unpack tuple
...
...
src/analysis/type_analysis.cpp
View file @
3d8398be
...
@@ -381,6 +381,7 @@ private:
...
@@ -381,6 +381,7 @@ private:
case
AST_LangPrimitive
:
:
NONE
:
case
AST_LangPrimitive
:
:
NONE
:
case
AST_LangPrimitive
:
:
SET_EXC_INFO
:
case
AST_LangPrimitive
:
:
SET_EXC_INFO
:
case
AST_LangPrimitive
:
:
UNCACHE_EXC_INFO
:
case
AST_LangPrimitive
:
:
UNCACHE_EXC_INFO
:
case
AST_LangPrimitive
:
:
PRINT_EXPR
:
return
NONE
;
return
NONE
;
case
AST_LangPrimitive
:
:
HASNEXT
:
case
AST_LangPrimitive
:
:
HASNEXT
:
case
AST_LangPrimitive
:
:
NONZERO
:
case
AST_LangPrimitive
:
:
NONZERO
:
...
...
src/codegen/ast_interpreter.cpp
View file @
3d8398be
...
@@ -875,6 +875,11 @@ Value ASTInterpreter::visit_langPrimitive(AST_LangPrimitive* node) {
...
@@ -875,6 +875,11 @@ Value ASTInterpreter::visit_langPrimitive(AST_LangPrimitive* node) {
assert
(
node
->
args
.
size
()
==
1
);
assert
(
node
->
args
.
size
()
==
1
);
Value
obj
=
visit_expr
(
node
->
args
[
0
]);
Value
obj
=
visit_expr
(
node
->
args
[
0
]);
v
=
Value
(
boxBool
(
hasnext
(
obj
.
o
)),
jit
?
jit
->
emitHasnext
(
obj
)
:
NULL
);
v
=
Value
(
boxBool
(
hasnext
(
obj
.
o
)),
jit
?
jit
->
emitHasnext
(
obj
)
:
NULL
);
}
else
if
(
node
->
opcode
==
AST_LangPrimitive
::
PRINT_EXPR
)
{
abortJITing
();
Value
obj
=
visit_expr
(
node
->
args
[
0
]);
printExprHelper
(
obj
.
o
);
v
=
getNone
();
}
else
}
else
RELEASE_ASSERT
(
0
,
"unknown opcode %d"
,
node
->
opcode
);
RELEASE_ASSERT
(
0
,
"unknown opcode %d"
,
node
->
opcode
);
return
v
;
return
v
;
...
@@ -1870,6 +1875,13 @@ Box* astInterpretDeopt(CLFunction* clfunc, AST_expr* after_expr, AST_stmt* enclo
...
@@ -1870,6 +1875,13 @@ Box* astInterpretDeopt(CLFunction* clfunc, AST_expr* after_expr, AST_stmt* enclo
return
v
?
v
:
None
;
return
v
?
v
:
None
;
}
}
extern
"C"
void
printExprHelper
(
Box
*
obj
)
{
Box
*
displayhook
=
PySys_GetObject
(
"displayhook"
);
if
(
!
displayhook
)
raiseExcHelper
(
RuntimeError
,
"lost sys.displayhook"
);
runtimeCall
(
displayhook
,
ArgPassSpec
(
1
),
obj
,
0
,
0
,
0
,
0
);
}
static
ASTInterpreter
*
getInterpreterFromFramePtr
(
void
*
frame_ptr
)
{
static
ASTInterpreter
*
getInterpreterFromFramePtr
(
void
*
frame_ptr
)
{
// This offsets have to match the layout inside executeInnerAndSetupFrame
// This offsets have to match the layout inside executeInnerAndSetupFrame
ASTInterpreter
**
ptr
=
(
ASTInterpreter
**
)(((
uint8_t
*
)
frame_ptr
)
-
8
);
ASTInterpreter
**
ptr
=
(
ASTInterpreter
**
)(((
uint8_t
*
)
frame_ptr
)
-
8
);
...
...
src/codegen/ast_interpreter.h
View file @
3d8398be
...
@@ -83,6 +83,9 @@ FrameInfo* getFrameInfoForInterpretedFrame(void* frame_ptr);
...
@@ -83,6 +83,9 @@ FrameInfo* getFrameInfoForInterpretedFrame(void* frame_ptr);
BoxedClosure
*
passedClosureForInterpretedFrame
(
void
*
frame_ptr
);
BoxedClosure
*
passedClosureForInterpretedFrame
(
void
*
frame_ptr
);
BoxedDict
*
localsForInterpretedFrame
(
void
*
frame_ptr
,
bool
only_user_visible
);
BoxedDict
*
localsForInterpretedFrame
(
void
*
frame_ptr
,
bool
only_user_visible
);
// Executes the equivalent of CPython's PRINT_EXPR opcode (call sys.displayhook)
extern
"C"
void
printExprHelper
(
Box
*
b
);
}
}
#endif
#endif
src/codegen/irgen/hooks.cpp
View file @
3d8398be
...
@@ -366,13 +366,9 @@ static AST_Suite* parseExec(llvm::StringRef source, bool interactive = false) {
...
@@ -366,13 +366,9 @@ static AST_Suite* parseExec(llvm::StringRef source, bool interactive = false) {
continue
;
continue
;
AST_Expr
*
expr
=
(
AST_Expr
*
)
s
;
AST_Expr
*
expr
=
(
AST_Expr
*
)
s
;
AST_Print
*
print
=
new
AST_Print
;
AST_LangPrimitive
*
print_expr
=
new
AST_LangPrimitive
(
AST_LangPrimitive
::
PRINT_EXPR
);
print
->
lineno
=
expr
->
lineno
;
print_expr
->
args
.
push_back
(
expr
->
value
);
print
->
col_offset
=
expr
->
col_offset
;
expr
->
value
=
print_expr
;
print
->
dest
=
NULL
;
print
->
nl
=
true
;
print
->
values
.
push_back
(
expr
->
value
);
parsedModule
->
body
[
i
]
=
print
;
}
}
}
}
...
...
src/codegen/irgen/irgenerator.cpp
View file @
3d8398be
...
@@ -879,6 +879,16 @@ private:
...
@@ -879,6 +879,16 @@ private:
return
getNone
();
return
getNone
();
}
}
case
AST_LangPrimitive
:
:
PRINT_EXPR
:
{
assert
(
node
->
args
.
size
()
==
1
);
CompilerVariable
*
obj
=
evalExpr
(
node
->
args
[
0
],
unw_info
);
ConcreteCompilerVariable
*
converted
=
obj
->
makeConverted
(
emitter
,
obj
->
getBoxType
());
emitter
.
createCall
(
unw_info
,
g
.
funcs
.
printExprHelper
,
converted
->
getValue
());
return
getNone
();
}
default:
default:
RELEASE_ASSERT
(
0
,
"%d"
,
node
->
opcode
);
RELEASE_ASSERT
(
0
,
"%d"
,
node
->
opcode
);
}
}
...
...
src/codegen/runtime_hooks.cpp
View file @
3d8398be
...
@@ -29,6 +29,7 @@
...
@@ -29,6 +29,7 @@
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Scalar.h"
#include "codegen/ast_interpreter.h"
#include "codegen/codegen.h"
#include "codegen/codegen.h"
#include "codegen/irgen.h"
#include "codegen/irgen.h"
#include "codegen/irgen/hooks.h"
#include "codegen/irgen/hooks.h"
...
@@ -233,6 +234,7 @@ void initGlobalFuncs(GlobalState& g) {
...
@@ -233,6 +234,7 @@ void initGlobalFuncs(GlobalState& g) {
GET
(
assertNameDefined
);
GET
(
assertNameDefined
);
GET
(
assertFailDerefNameDefined
);
GET
(
assertFailDerefNameDefined
);
GET
(
assertFail
);
GET
(
assertFail
);
GET
(
printExprHelper
);
GET
(
printFloat
);
GET
(
printFloat
);
GET
(
listAppendInternal
);
GET
(
listAppendInternal
);
...
...
src/codegen/runtime_hooks.h
View file @
3d8398be
...
@@ -41,7 +41,7 @@ struct GlobalFuncs {
...
@@ -41,7 +41,7 @@ struct GlobalFuncs {
llvm
::
Value
*
unpackIntoArray
,
*
raiseAttributeError
,
*
raiseAttributeErrorStr
,
*
raiseAttributeErrorCapi
,
llvm
::
Value
*
unpackIntoArray
,
*
raiseAttributeError
,
*
raiseAttributeErrorStr
,
*
raiseAttributeErrorCapi
,
*
raiseAttributeErrorStrCapi
,
*
raiseNotIterableError
,
*
raiseIndexErrorStr
,
*
raiseIndexErrorStrCapi
,
*
raiseAttributeErrorStrCapi
,
*
raiseNotIterableError
,
*
raiseIndexErrorStr
,
*
raiseIndexErrorStrCapi
,
*
assertNameDefined
,
*
assertFail
,
*
assertFailDerefNameDefined
;
*
assertNameDefined
,
*
assertFail
,
*
assertFailDerefNameDefined
,
*
printExprHelper
;
llvm
::
Value
*
printFloat
,
*
listAppendInternal
,
*
getSysStdout
;
llvm
::
Value
*
printFloat
,
*
listAppendInternal
,
*
getSysStdout
;
llvm
::
Value
*
runtimeCall0
,
*
runtimeCall1
,
*
runtimeCall2
,
*
runtimeCall3
,
*
runtimeCall
,
*
runtimeCallN
;
llvm
::
Value
*
runtimeCall0
,
*
runtimeCall1
,
*
runtimeCall2
,
*
runtimeCall3
,
*
runtimeCall
,
*
runtimeCallN
;
llvm
::
Value
*
callattr0
,
*
callattr1
,
*
callattr2
,
*
callattr3
,
*
callattr
,
*
callattrN
;
llvm
::
Value
*
callattr0
,
*
callattr1
,
*
callattr2
,
*
callattr3
,
*
callattr
,
*
callattrN
;
...
...
src/codegen/unwinding.cpp
View file @
3d8398be
...
@@ -46,6 +46,8 @@
...
@@ -46,6 +46,8 @@
#define UNW_LOCAL_ONLY
#define UNW_LOCAL_ONLY
#include <libunwind.h>
#include <libunwind.h>
#undef UNW_LOCAL_ONLY
namespace
{
namespace
{
int
_dummy_
=
unw_set_caching_policy
(
unw_local_addr_space
,
UNW_CACHE_PER_THREAD
);
int
_dummy_
=
unw_set_caching_policy
(
unw_local_addr_space
,
UNW_CACHE_PER_THREAD
);
}
}
...
...
src/codegen/unwinding.h
View file @
3d8398be
...
@@ -19,9 +19,9 @@
...
@@ -19,9 +19,9 @@
#include "codegen/codegen.h"
#include "codegen/codegen.h"
#define UNW_LOCAL_ONLY
// Forward-declare libunwind's typedef'd unw_cursor_t:
#include <libunwind.h>
struct
unw_cursor
;
#undef UNW_LOCAL_ONLY
typedef
struct
unw_cursor
unw_cursor_t
;
namespace
pyston
{
namespace
pyston
{
...
...
src/core/ast.h
View file @
3d8398be
...
@@ -1075,6 +1075,7 @@ public:
...
@@ -1075,6 +1075,7 @@ public:
SET_EXC_INFO
,
SET_EXC_INFO
,
UNCACHE_EXC_INFO
,
UNCACHE_EXC_INFO
,
HASNEXT
,
HASNEXT
,
PRINT_EXPR
,
}
opcode
;
}
opcode
;
std
::
vector
<
AST_expr
*>
args
;
std
::
vector
<
AST_expr
*>
args
;
...
...
src/jit.cpp
View file @
3d8398be
...
@@ -484,20 +484,9 @@ static int main(int argc, char** argv) {
...
@@ -484,20 +484,9 @@ static int main(int argc, char** argv) {
if
(
m
->
body
.
size
()
>
0
&&
m
->
body
[
0
]
->
type
==
AST_TYPE
::
Expr
)
{
if
(
m
->
body
.
size
()
>
0
&&
m
->
body
[
0
]
->
type
==
AST_TYPE
::
Expr
)
{
AST_Expr
*
e
=
ast_cast
<
AST_Expr
>
(
m
->
body
[
0
]);
AST_Expr
*
e
=
ast_cast
<
AST_Expr
>
(
m
->
body
[
0
]);
AST_Call
*
c
=
new
AST_Call
();
AST_LangPrimitive
*
print_expr
=
new
AST_LangPrimitive
(
AST_LangPrimitive
::
PRINT_EXPR
);
AST_Name
*
r
=
new
AST_Name
(
m
->
interned_strings
->
get
(
"repr"
),
AST_TYPE
::
Load
,
0
);
print_expr
->
args
.
push_back
(
e
->
value
);
c
->
func
=
r
;
e
->
value
=
print_expr
;
c
->
starargs
=
NULL
;
c
->
kwargs
=
NULL
;
c
->
args
.
push_back
(
e
->
value
);
c
->
lineno
=
0
;
AST_Print
*
p
=
new
AST_Print
();
p
->
dest
=
NULL
;
p
->
nl
=
true
;
p
->
values
.
push_back
(
c
);
p
->
lineno
=
0
;
m
->
body
[
0
]
=
p
;
}
}
compileAndRunModule
(
m
,
main_module
);
compileAndRunModule
(
m
,
main_module
);
...
...
src/runtime/builtin_modules/sys.cpp
View file @
3d8398be
...
@@ -397,12 +397,60 @@ static PyObject* sys_excepthook(PyObject* self, PyObject* args) noexcept {
...
@@ -397,12 +397,60 @@ static PyObject* sys_excepthook(PyObject* self, PyObject* args) noexcept {
return
Py_None
;
return
Py_None
;
}
}
static
PyObject
*
sys_displayhook
(
PyObject
*
self
,
PyObject
*
o
)
noexcept
{
PyObject
*
outf
;
// Pyston change: we currently hardcode the builtins module
/*
PyInterpreterState* interp = PyThreadState_GET()->interp;
PyObject* modules = interp->modules;
PyObject* builtins = PyDict_GetItemString(modules, "__builtin__");
if (builtins == NULL) {
PyErr_SetString(PyExc_RuntimeError, "lost __builtin__");
return NULL;
}
*/
PyObject
*
builtins
=
builtins_module
;
/* Print value except if None */
/* After printing, also assign to '_' */
/* Before, set '_' to None to avoid recursion */
if
(
o
==
Py_None
)
{
Py_INCREF
(
Py_None
);
return
Py_None
;
}
if
(
PyObject_SetAttrString
(
builtins
,
"_"
,
Py_None
)
!=
0
)
return
NULL
;
if
(
Py_FlushLine
()
!=
0
)
return
NULL
;
outf
=
PySys_GetObject
(
"stdout"
);
if
(
outf
==
NULL
)
{
PyErr_SetString
(
PyExc_RuntimeError
,
"lost sys.stdout"
);
return
NULL
;
}
if
(
PyFile_WriteObject
(
o
,
outf
,
0
)
!=
0
)
return
NULL
;
PyFile_SoftSpace
(
outf
,
1
);
if
(
Py_FlushLine
()
!=
0
)
return
NULL
;
if
(
PyObject_SetAttrString
(
builtins
,
"_"
,
o
)
!=
0
)
return
NULL
;
Py_INCREF
(
Py_None
);
return
Py_None
;
}
PyDoc_STRVAR
(
excepthook_doc
,
"excepthook(exctype, value, traceback) -> None
\n
"
PyDoc_STRVAR
(
excepthook_doc
,
"excepthook(exctype, value, traceback) -> None
\n
"
"
\n
"
"
\n
"
"Handle an exception by displaying it with a traceback on sys.stderr.
\n
"
);
"Handle an exception by displaying it with a traceback on sys.stderr.
\n
"
);
PyDoc_STRVAR
(
displayhook_doc
,
"displayhook(object) -> None
\n
"
"
\n
"
"Print an object to sys.stdout and also save it in __builtin__._
\n
"
);
static
PyMethodDef
sys_methods
[]
=
{
static
PyMethodDef
sys_methods
[]
=
{
{
"excepthook"
,
sys_excepthook
,
METH_VARARGS
,
excepthook_doc
},
{
"excepthook"
,
sys_excepthook
,
METH_VARARGS
,
excepthook_doc
},
{
"displayhook"
,
sys_displayhook
,
METH_O
,
displayhook_doc
},
};
};
void
setupSys
()
{
void
setupSys
()
{
...
@@ -507,6 +555,7 @@ void setupSys() {
...
@@ -507,6 +555,7 @@ void setupSys() {
sys_module
->
giveAttr
(
md
.
ml_name
,
new
BoxedCApiFunction
(
&
md
,
sys_module
));
sys_module
->
giveAttr
(
md
.
ml_name
,
new
BoxedCApiFunction
(
&
md
,
sys_module
));
}
}
sys_module
->
giveAttr
(
"__displayhook__"
,
sys_module
->
getattr
(
internStringMortal
(
"displayhook"
)));
sys_module
->
giveAttr
(
"flags"
,
new
BoxedSysFlags
());
sys_module
->
giveAttr
(
"flags"
,
new
BoxedSysFlags
());
}
}
...
...
src/runtime/inline/CMakeLists.txt
View file @
3d8398be
...
@@ -87,7 +87,7 @@ foreach(BC_SRC ${BC_INLINE_SRCS})
...
@@ -87,7 +87,7 @@ foreach(BC_SRC ${BC_INLINE_SRCS})
# generate the bitcode for this file
# generate the bitcode for this file
add_custom_command
(
OUTPUT
${
BC_SRC_BASENAME
}
.bc
add_custom_command
(
OUTPUT
${
BC_SRC_BASENAME
}
.bc
COMMAND
${
BC_CXX
}
${
BC_DEFINES
}
${
BC_CXX_FLAGS
}
${
BC_INCLUDES
}
-c
${
BC_SRC_FULLPATH
}
-o
${
BC_SRC_BASENAME
}
.bc -emit-llvm
COMMAND
${
BC_CXX
}
${
BC_DEFINES
}
${
BC_CXX_FLAGS
}
${
BC_INCLUDES
}
-c
${
BC_SRC_FULLPATH
}
-o
${
BC_SRC_BASENAME
}
.bc -emit-llvm
DEPENDS
${
BC_SRC_FULLPATH
}
clang
${
PYSTON_HEADERS
}
${
FROM_CPYTHON_HEADERS
}
DEPENDS
${
BC_SRC_FULLPATH
}
clang
${
PYSTON_HEADERS
}
${
FROM_CPYTHON_HEADERS
}
libunwind
COMMENT
"Building LLVM bitcode
${
BC_SRC_BASENAME
}
.bc"
COMMENT
"Building LLVM bitcode
${
BC_SRC_BASENAME
}
.bc"
VERBATIM
)
VERBATIM
)
set_property
(
DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
${
BC_SRC_BASENAME
}
.bc
)
set_property
(
DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
${
BC_SRC_BASENAME
}
.bc
)
...
...
src/runtime/inline/link_forcer.cpp
View file @
3d8398be
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
// This file is for forcing the inclusion of function declarations into the stdlib.
// This file is for forcing the inclusion of function declarations into the stdlib.
// This is so that the types of the functions are available to the compiler.
// This is so that the types of the functions are available to the compiler.
#include "codegen/ast_interpreter.h"
#include "codegen/irgen/hooks.h"
#include "codegen/irgen/hooks.h"
#include "core/ast.h"
#include "core/ast.h"
#include "core/threading.h"
#include "core/threading.h"
...
@@ -111,6 +112,7 @@ void force() {
...
@@ -111,6 +112,7 @@ void force() {
FORCE
(
assertNameDefined
);
FORCE
(
assertNameDefined
);
FORCE
(
assertFailDerefNameDefined
);
FORCE
(
assertFailDerefNameDefined
);
FORCE
(
assertFail
);
FORCE
(
assertFail
);
FORCE
(
printExprHelper
);
FORCE
(
strOrUnicode
);
FORCE
(
strOrUnicode
);
FORCE
(
printFloat
);
FORCE
(
printFloat
);
...
...
src/runtime/objmodel.cpp
View file @
3d8398be
...
@@ -2046,6 +2046,7 @@ bool dataDescriptorSetSpecialCases(Box* obj, Box* val, Box* descr, SetattrRewrit
...
@@ -2046,6 +2046,7 @@ bool dataDescriptorSetSpecialCases(Box* obj, Box* val, Box* descr, SetattrRewrit
}
}
getset_descr
->
set
(
obj
,
val
,
getset_descr
->
closure
);
getset_descr
->
set
(
obj
,
val
,
getset_descr
->
closure
);
checkAndThrowCAPIException
();
return
true
;
return
true
;
}
else
if
(
descr
->
cls
==
member_descriptor_cls
)
{
}
else
if
(
descr
->
cls
==
member_descriptor_cls
)
{
...
...
src/runtime/stacktrace.cpp
View file @
3d8398be
...
@@ -27,6 +27,7 @@
...
@@ -27,6 +27,7 @@
#define UNW_LOCAL_ONLY
#define UNW_LOCAL_ONLY
#include <libunwind.h>
#include <libunwind.h>
#undef UNW_LOCAL_ONLY
namespace
pyston
{
namespace
pyston
{
...
...
src/runtime/types.cpp
View file @
3d8398be
...
@@ -1900,7 +1900,7 @@ static PyObject* typeModule(Box* _type, void* context) {
...
@@ -1900,7 +1900,7 @@ static PyObject* typeModule(Box* _type, void* context) {
PyObject
*
mod
;
PyObject
*
mod
;
const
char
*
s
;
const
char
*
s
;
if
(
type
->
tp_flags
&
Py_TPFLAGS_HEAPTYPE
)
{
if
(
type
->
tp_flags
&
Py_TPFLAGS_HEAPTYPE
&&
type
->
is_user_defined
)
{
static
BoxedString
*
module_str
=
internStringImmortal
(
"__module__"
);
static
BoxedString
*
module_str
=
internStringImmortal
(
"__module__"
);
mod
=
type
->
getattr
(
module_str
);
mod
=
type
->
getattr
(
module_str
);
if
(
!
mod
)
if
(
!
mod
)
...
@@ -3197,6 +3197,38 @@ static void setupDefaultClassGCParticipation() {
...
@@ -3197,6 +3197,38 @@ static void setupDefaultClassGCParticipation() {
gc
::
invalidateOrderedFinalizerList
();
gc
::
invalidateOrderedFinalizerList
();
}
}
static
Box
*
getsetGet
(
Box
*
self
,
Box
*
obj
,
Box
*
type
)
{
// TODO: should call the full descr_check instead
if
(
obj
==
NULL
||
obj
==
None
)
return
self
;
BoxedGetsetDescriptor
*
getset_descr
=
static_cast
<
BoxedGetsetDescriptor
*>
(
self
);
if
(
isSubclass
(
self
->
cls
,
pyston_getset_cls
))
{
return
getset_descr
->
get
(
obj
,
getset_descr
->
closure
);
}
else
{
RELEASE_ASSERT
(
isSubclass
(
self
->
cls
,
capi_getset_cls
),
""
);
Box
*
r
=
getset_descr
->
get
(
obj
,
getset_descr
->
closure
);
if
(
!
r
)
throwCAPIException
();
return
r
;
}
}
static
Box
*
getsetSet
(
Box
*
self
,
Box
*
obj
,
Box
*
val
)
{
assert
(
obj
!=
NULL
&&
obj
!=
None
);
BoxedGetsetDescriptor
*
getset_descr
=
static_cast
<
BoxedGetsetDescriptor
*>
(
self
);
if
(
isSubclass
(
self
->
cls
,
pyston_getset_cls
))
{
getset_descr
->
set
(
obj
,
val
,
getset_descr
->
closure
);
return
None
;
}
else
{
RELEASE_ASSERT
(
isSubclass
(
self
->
cls
,
capi_getset_cls
),
""
);
getset_descr
->
set
(
obj
,
val
,
getset_descr
->
closure
);
checkAndThrowCAPIException
();
return
None
;
}
}
bool
TRACK_ALLOCATIONS
=
false
;
bool
TRACK_ALLOCATIONS
=
false
;
void
setupRuntime
()
{
void
setupRuntime
()
{
...
@@ -3275,7 +3307,7 @@ void setupRuntime() {
...
@@ -3275,7 +3307,7 @@ void setupRuntime() {
list_cls
=
new
(
0
)
BoxedHeapClass
(
object_cls
,
&
listGCHandler
,
0
,
0
,
sizeof
(
BoxedList
),
false
,
boxString
(
"list"
));
list_cls
=
new
(
0
)
BoxedHeapClass
(
object_cls
,
&
listGCHandler
,
0
,
0
,
sizeof
(
BoxedList
),
false
,
boxString
(
"list"
));
list_cls
->
tp_flags
|=
Py_TPFLAGS_LIST_SUBCLASS
;
list_cls
->
tp_flags
|=
Py_TPFLAGS_LIST_SUBCLASS
;
pyston_getset_cls
=
new
(
0
)
pyston_getset_cls
=
new
(
0
)
BoxedHeapClass
(
object_cls
,
NULL
,
0
,
0
,
sizeof
(
BoxedGetsetDescriptor
),
false
,
boxString
(
"getset"
));
BoxedHeapClass
(
object_cls
,
NULL
,
0
,
0
,
sizeof
(
BoxedGetsetDescriptor
),
false
,
boxString
(
"getset
_descriptor
"
));
attrwrapper_cls
=
new
(
0
)
BoxedHeapClass
(
object_cls
,
&
AttrWrapper
::
gcHandler
,
0
,
0
,
sizeof
(
AttrWrapper
),
false
,
attrwrapper_cls
=
new
(
0
)
BoxedHeapClass
(
object_cls
,
&
AttrWrapper
::
gcHandler
,
0
,
0
,
sizeof
(
AttrWrapper
),
false
,
static_cast
<
BoxedString
*>
(
boxString
(
"attrwrapper"
)));
static_cast
<
BoxedString
*>
(
boxString
(
"attrwrapper"
)));
dict_cls
=
new
(
0
)
BoxedHeapClass
(
object_cls
,
&
dictGCHandler
,
0
,
0
,
sizeof
(
BoxedDict
),
false
,
dict_cls
=
new
(
0
)
BoxedHeapClass
(
object_cls
,
&
dictGCHandler
,
0
,
0
,
sizeof
(
BoxedDict
),
false
,
...
@@ -3446,6 +3478,10 @@ void setupRuntime() {
...
@@ -3446,6 +3478,10 @@ void setupRuntime() {
sizeof
(
AttrWrapperIter
),
false
,
"attrwrapperiter"
);
sizeof
(
AttrWrapperIter
),
false
,
"attrwrapperiter"
);
// TODO: add explicit __get__ and __set__ methods to these
// TODO: add explicit __get__ and __set__ methods to these
pyston_getset_cls
->
giveAttr
(
"__get__"
,
new
BoxedFunction
(
boxRTFunction
((
void
*
)
getsetGet
,
UNKNOWN
,
3
)));
capi_getset_cls
->
giveAttr
(
"__get__"
,
new
BoxedFunction
(
boxRTFunction
((
void
*
)
getsetGet
,
UNKNOWN
,
3
)));
pyston_getset_cls
->
giveAttr
(
"__set__"
,
new
BoxedFunction
(
boxRTFunction
((
void
*
)
getsetSet
,
UNKNOWN
,
3
)));
capi_getset_cls
->
giveAttr
(
"__set__"
,
new
BoxedFunction
(
boxRTFunction
((
void
*
)
getsetSet
,
UNKNOWN
,
3
)));
pyston_getset_cls
->
freeze
();
pyston_getset_cls
->
freeze
();
capi_getset_cls
->
freeze
();
capi_getset_cls
->
freeze
();
...
...
test/CPYTHON_TEST_NOTES.md
View file @
3d8398be
...
@@ -17,12 +17,12 @@ The CPython tests I've included fail for various reasons. Recurring issues inclu
...
@@ -17,12 +17,12 @@ The CPython tests I've included fail for various reasons. Recurring issues inclu
```
```
FILE REASONS
FILE REASONS
------------------------------------------------------
------------------------------------------------------
test_a
ugassign missing oldstyle-class __add__, __iadd__, etc
test_a
bc [unknown]
test_bisect somehow sys.modules['_bisect'] is getting set to 0
test_bisect somehow sys.modules['_bisect'] is getting set to 0
test_builtin execfile scoping issue
test_builtin execfile scoping issue
test_class needs ellipsis
test_coercion 1**1L, divmod(1, 1L); some unknown bug
test_coercion 1**1L, divmod(1, 1L); some unknown bug
test_collections doctest (dies in inspect.getmodule())
test_collections assertion failed when doing vars(collections.namedtuple('Point', 'x y')(11, 12))
test_compare "AssertionError: 2 != 0.0j"
test_complex need complex.__nonzero__
test_complex need complex.__nonzero__
test_contextlib lock.locked attributes
test_contextlib lock.locked attributes
test_datetime needs _PyObject_GetDictPtr
test_datetime needs _PyObject_GetDictPtr
...
@@ -30,31 +30,30 @@ test_decimal I think we need to copy decimaltestdata from cpython
...
@@ -30,31 +30,30 @@ test_decimal I think we need to copy decimaltestdata from cpython
test_decorators decorator bug -- we evaluate decorator obj and its args in wrong order
test_decorators decorator bug -- we evaluate decorator obj and its args in wrong order
test_deque couple unknown issues
test_deque couple unknown issues
test_descr wontfix: crashes at "self.__dict__ = self"
test_descr wontfix: crashes at "self.__dict__ = self"
test_descrtut
doctest (dies in inspect.getmodule())
test_descrtut
`exec in DefaultDict()`
test_dict
need to handle repr of recursive structures (ie `d = {}; d['self'] = d; print d`)
test_dict
misc failures related to things like gc, abc, comparisons, detecting mutations during iterations
test_dictcomps we need to disallow assigning to dictcomps
test_dictcomps we need to disallow assigning to dictcomps
test_dictviews various unique bugs
test_dictviews various unique bugs
test_doctest doctest (dies in inspect.getmodule())
test_doctest hard to know. also missing some input files
test_doctest2 doctest (sys.displayhook)
test_enumerate assert instead of exception in BoxedEnumerate
test_enumerate assert instead of exception in BoxedEnumerate
test_exceptions we are missing recursion-depth checking
test_exceptions we are missing recursion-depth checking
test_extcall
doctest (syss.displayhook())
test_extcall
f(**kw) crashes if kw isn't a dict
test_file wontfix: we don't destruct file objects when the test wants
test_file wontfix: we don't destruct file objects when the test wants
test_file2k we abort when you try to open() a directory
test_file2k we abort when you try to open() a directory
test_file_eintr not sure
test_file_eintr not sure
test_float float(long), a couple unknown things
test_float float(long), a couple unknown things
test_format float(long)
test_funcattrs we don't allow changing numing of function defaults
test_funcattrs we don't allow changing numing of function defaults
test_functools unknown errors
test_functools unknown errors
test_generators doctest (sys.displayhook)
test_generators crash when sending non-None to a just-started generator
test_genexps doctest (sys.displayhook)
test_genexps parser not raising a SyntaxError when assigning to a genexp
test_getopt doctest (sys.displayhook)
test_global SyntaxWarnings for global statements after uses
test_global SyntaxWarnings for global statements after uses
test_grammar bug in our tokenizer
test_grammar bug in our tokenizer
test_hash number of hash bugs (all representations of '1' don't have the same hash; empty string is supposed to have 0 hash, etc)
test_hash number of hash bugs (all representations of '1' don't have the same hash; empty string is supposed to have 0 hash, etc)
test_index slice.indices, old-styl-class __mul__
test_index slice.indices, old-styl-class __mul__
test_int we assert instead of throw exception
test_int we assert instead of throw exception
test_io memory/gc issue?
test_io memory/gc issue?
test_iterlen [unknown]
test_itertools [unknown]
test_json 'from test.script_helper import assert_python_ok' fails; sounds like it is trying to look at pycs
test_json 'from test.script_helper import assert_python_ok' fails; sounds like it is trying to look at pycs
test_list longs as slice indices
test_list longs as slice indices
test_long sys.long_info
test_long sys.long_info
...
@@ -66,28 +65,22 @@ test_optparse assertion instead of exceptions for long("invalid number
...
@@ -66,28 +65,22 @@ test_optparse assertion instead of exceptions for long("invalid number
test_pep277 segfaults
test_pep277 segfaults
test_pep352 various unique bugs
test_pep352 various unique bugs
test_pkg unknown bug
test_pkg unknown bug
test_pow pow(3L, 3L, -8) fails
test_random long("invalid number")
test_random long("invalid number")
test_repr complex.__hash__; some unknown issues
test_repr complex.__hash__; some unknown issues
test_richcmp PyObject_Not
test_richcmp PyObject_Not
test_scope eval of code object from existing function (not currently supported)
test_scope eval of code object from existing function (not currently supported)
test_set weird function-picking issue
test_set weird function-picking issue
test_setcomps doctest (sys.displayhook)
test_setcomps parser not raising a SyntaxError when assigning to a setcomp
test_sets doctest (sys.displayhook)
test_slice segfault
test_sort argument specification issue in listSort?
test_sort argument specification issue in listSort?
test_str memory leak?
test_str memory leak?
test_string infinite loops in test_replace
test_string infinite loops in test_replace
test_subprocess exit code 141 [sigpipe?], no error message
test_subprocess exit code 141 [sigpipe?], no error message
test_tuple tuple features: ()*0L, tuple.count, tuple.__getslice__; "test_constructors" fails
test_types PyErr_WarnEx
test_types PyErr_WarnEx
test_unary objmodel.cpp: unaryop: Assertion `attr_func' failed: str.__pos__
test_undocumented_details function.func_closure
test_undocumented_details function.func_closure
test_unicode argument passing issue?
test_unicode argument passing issue?
test_unicode_file exit code 139, no error message
test_unicode_file exit code 139, no error message
test_unittest serialize_ast assert
test_unittest serialize_ast assert
test_unpack doctest (sys.displayhook)
test_urllib2 segfault due to attrwrapper corruption
test_urllib2 doctest (dies in inspect.getmodule())
test_userdict segfault: repr of recursive dict?
test_userdict segfault: repr of recursive dict?
test_userlist slice(1L, 1L)
test_userlist slice(1L, 1L)
test_userstring float(1L); hangs in test_replace
test_userstring float(1L); hangs in test_replace
...
...
test/tests/classes.py
0 → 100644
View file @
3d8398be
class
C
(
object
):
pass
class
D
:
pass
for
l
in
[
type
,
set
,
int
,
list
,
tuple
,
C
,
D
]:
print
l
,
l
.
__module__
print
type
.
__dict__
[
'__module__'
].
__get__
(
set
,
None
)
print
type
(
type
.
__dict__
[
'__module__'
].
__get__
(
None
,
set
))
test/tests/compile_exec.py
View file @
3d8398be
...
@@ -30,3 +30,12 @@ print a, sorted(g.keys())
...
@@ -30,3 +30,12 @@ print a, sorted(g.keys())
print
print
c
=
compile
(
"a = 1; b = 2; a - b; b - a; c = a - b; c; print c"
,
"test.py"
,
"single"
)
c
=
compile
(
"a = 1; b = 2; a - b; b - a; c = a - b; c; print c"
,
"test.py"
,
"single"
)
exec
c
exec
c
exec
compile
(
"'hello world'"
,
"test.py"
,
"single"
)
import
sys
def
new_displayhook
(
arg
):
print
"my custom displayhook!"
print
arg
sys
.
displayhook
=
new_displayhook
exec
compile
(
"'hello world'"
,
"test.py"
,
"single"
)
test/tests/doctest_test.py
View file @
3d8398be
# expected: fail
# requires:
# requires:
# - code.co_firstlineno
# - code.co_firstlineno
# - sys.dysplayhook
# - sys.dysplayhook
...
...
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