Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cython
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Gwenaël Samain
cython
Commits
44ce6ec0
Commit
44ce6ec0
authored
Mar 31, 2009
by
Dag Sverre Seljebotn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove old temp system
parent
029c986f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
4 additions
and
90 deletions
+4
-90
Cython/Compiler/ModuleNode.py
Cython/Compiler/ModuleNode.py
+1
-2
Cython/Compiler/Nodes.py
Cython/Compiler/Nodes.py
+1
-22
Cython/Compiler/Symtab.py
Cython/Compiler/Symtab.py
+2
-66
No files found.
Cython/Compiler/ModuleNode.py
View file @
44ce6ec0
...
@@ -1652,7 +1652,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
...
@@ -1652,7 +1652,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
code
.
put_goto
(
code
.
return_label
)
code
.
put_goto
(
code
.
return_label
)
code
.
put_label
(
code
.
error_label
)
code
.
put_label
(
code
.
error_label
)
code
.
put_var_xdecrefs
(
env
.
temp_entries
)
# TODO: Should new temps be freed here?
code
.
putln
(
'__Pyx_AddTraceback("%s");'
%
env
.
qualified_name
)
code
.
putln
(
'__Pyx_AddTraceback("%s");'
%
env
.
qualified_name
)
env
.
use_utility_code
(
Nodes
.
traceback_utility_code
)
env
.
use_utility_code
(
Nodes
.
traceback_utility_code
)
code
.
put_decref_clear
(
env
.
module_cname
,
py_object_type
,
nanny
=
False
)
code
.
put_decref_clear
(
env
.
module_cname
,
py_object_type
,
nanny
=
False
)
...
@@ -1667,7 +1667,6 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
...
@@ -1667,7 +1667,6 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
code
.
putln
(
"#endif"
)
code
.
putln
(
"#endif"
)
code
.
putln
(
'}'
)
code
.
putln
(
'}'
)
tempdecl_code
.
put_var_declarations
(
env
.
temp_entries
)
tempdecl_code
.
put_temp_declarations
(
code
.
funcstate
)
tempdecl_code
.
put_temp_declarations
(
code
.
funcstate
)
code
.
exit_cfunc_scope
()
code
.
exit_cfunc_scope
()
...
...
Cython/Compiler/Nodes.py
View file @
44ce6ec0
...
@@ -1074,9 +1074,6 @@ class FuncDefNode(StatNode, BlockNode):
...
@@ -1074,9 +1074,6 @@ class FuncDefNode(StatNode, BlockNode):
if
code
.
error_label
in
code
.
labels_used
:
if
code
.
error_label
in
code
.
labels_used
:
code
.
put_goto
(
code
.
return_label
)
code
.
put_goto
(
code
.
return_label
)
code
.
put_label
(
code
.
error_label
)
code
.
put_label
(
code
.
error_label
)
# cleanup temps the old way
code
.
put_var_xdecrefs
(
lenv
.
temp_entries
)
# cleanup temps the new way
for
cname
,
type
in
code
.
funcstate
.
all_managed_temps
():
for
cname
,
type
in
code
.
funcstate
.
all_managed_temps
():
code
.
put_xdecref
(
cname
,
type
)
code
.
put_xdecref
(
cname
,
type
)
...
@@ -1166,7 +1163,6 @@ class FuncDefNode(StatNode, BlockNode):
...
@@ -1166,7 +1163,6 @@ class FuncDefNode(StatNode, BlockNode):
code
.
putln
(
"}"
)
code
.
putln
(
"}"
)
# ----- Go back and insert temp variable declarations
# ----- Go back and insert temp variable declarations
tempvardecl_code
.
put_var_declarations
(
lenv
.
temp_entries
)
tempvardecl_code
.
put_temp_declarations
(
code
.
funcstate
)
tempvardecl_code
.
put_temp_declarations
(
code
.
funcstate
)
# ----- Python version
# ----- Python version
code
.
exit_cfunc_scope
()
code
.
exit_cfunc_scope
()
...
@@ -1347,7 +1343,7 @@ class CFuncDefNode(FuncDefNode):
...
@@ -1347,7 +1343,7 @@ class CFuncDefNode(FuncDefNode):
if
type
.
return_type
.
is_pyobject
:
if
type
.
return_type
.
is_pyobject
:
error
(
self
.
pos
,
error
(
self
.
pos
,
"Function with Python return type cannot be declared nogil"
)
"Function with Python return type cannot be declared nogil"
)
for
entry
in
env
.
var_entries
+
env
.
temp_entries
:
for
entry
in
env
.
var_entries
:
if
entry
.
type
.
is_pyobject
:
if
entry
.
type
.
is_pyobject
:
error
(
self
.
pos
,
"Function declared nogil has Python locals or temporaries"
)
error
(
self
.
pos
,
"Function declared nogil has Python locals or temporaries"
)
...
@@ -3306,14 +3302,12 @@ class ReturnStatNode(StatNode):
...
@@ -3306,14 +3302,12 @@ class ReturnStatNode(StatNode):
#
#
# value ExprNode or None
# value ExprNode or None
# return_type PyrexType
# return_type PyrexType
# temps_in_use [Entry] Temps in use at time of return
child_attrs
=
[
"value"
]
child_attrs
=
[
"value"
]
def
analyse_expressions
(
self
,
env
):
def
analyse_expressions
(
self
,
env
):
return_type
=
env
.
return_type
return_type
=
env
.
return_type
self
.
return_type
=
return_type
self
.
return_type
=
return_type
self
.
temps_in_use
=
env
.
temps_in_use
()
if
not
return_type
:
if
not
return_type
:
error
(
self
.
pos
,
"Return not inside a function body"
)
error
(
self
.
pos
,
"Return not inside a function body"
)
return
return
...
@@ -3361,15 +3355,8 @@ class ReturnStatNode(StatNode):
...
@@ -3361,15 +3355,8 @@ class ReturnStatNode(StatNode):
"%s = %s;"
%
(
"%s = %s;"
%
(
Naming
.
retval_cname
,
Naming
.
retval_cname
,
self
.
return_type
.
default_value
))
self
.
return_type
.
default_value
))
# free temps the old way
for
entry
in
self
.
temps_in_use
:
code
.
put_var_decref_clear
(
entry
)
# free temps the new way
for
cname
,
type
in
code
.
funcstate
.
temps_holding_reference
():
for
cname
,
type
in
code
.
funcstate
.
temps_holding_reference
():
code
.
put_decref_clear
(
cname
,
type
)
code
.
put_decref_clear
(
cname
,
type
)
#code.putln(
# "goto %s;" %
# code.return_label)
code
.
put_goto
(
code
.
return_label
)
code
.
put_goto
(
code
.
return_label
)
def
annotate
(
self
,
code
):
def
annotate
(
self
,
code
):
...
@@ -3952,7 +3939,6 @@ class TryExceptStatNode(StatNode):
...
@@ -3952,7 +3939,6 @@ class TryExceptStatNode(StatNode):
# body StatNode
# body StatNode
# except_clauses [ExceptClauseNode]
# except_clauses [ExceptClauseNode]
# else_clause StatNode or None
# else_clause StatNode or None
# cleanup_list [Entry] old style temps to clean up on error
child_attrs
=
[
"body"
,
"except_clauses"
,
"else_clause"
]
child_attrs
=
[
"body"
,
"except_clauses"
,
"else_clause"
]
...
@@ -3984,7 +3970,6 @@ class TryExceptStatNode(StatNode):
...
@@ -3984,7 +3970,6 @@ class TryExceptStatNode(StatNode):
def
analyse_expressions
(
self
,
env
):
def
analyse_expressions
(
self
,
env
):
self
.
body
.
analyse_expressions
(
env
)
self
.
body
.
analyse_expressions
(
env
)
self
.
cleanup_list
=
env
.
free_temp_entries
[:]
default_clause_seen
=
0
default_clause_seen
=
0
for
except_clause
in
self
.
except_clauses
:
for
except_clause
in
self
.
except_clauses
:
except_clause
.
analyse_expressions
(
env
)
except_clause
.
analyse_expressions
(
env
)
...
@@ -4046,7 +4031,6 @@ class TryExceptStatNode(StatNode):
...
@@ -4046,7 +4031,6 @@ class TryExceptStatNode(StatNode):
code
.
put_xdecref_clear
(
var
,
py_object_type
)
code
.
put_xdecref_clear
(
var
,
py_object_type
)
code
.
put_goto
(
old_return_label
)
code
.
put_goto
(
old_return_label
)
code
.
put_label
(
our_error_label
)
code
.
put_label
(
our_error_label
)
code
.
put_var_xdecrefs_clear
(
self
.
cleanup_list
)
for
temp_name
,
type
in
temps_to_clean_up
:
for
temp_name
,
type
in
temps_to_clean_up
:
code
.
put_xdecref_clear
(
temp_name
,
type
)
code
.
put_xdecref_clear
(
temp_name
,
type
)
for
except_clause
in
self
.
except_clauses
:
for
except_clause
in
self
.
except_clauses
:
...
@@ -4246,8 +4230,6 @@ class TryFinallyStatNode(StatNode):
...
@@ -4246,8 +4230,6 @@ class TryFinallyStatNode(StatNode):
# body StatNode
# body StatNode
# finally_clause StatNode
# finally_clause StatNode
#
#
# cleanup_list [Entry] old_style temps to clean up on error
#
# The plan is that we funnel all continue, break
# The plan is that we funnel all continue, break
# return and error gotos into the beginning of the
# return and error gotos into the beginning of the
# finally block, setting a variable to remember which
# finally block, setting a variable to remember which
...
@@ -4268,7 +4250,6 @@ class TryFinallyStatNode(StatNode):
...
@@ -4268,7 +4250,6 @@ class TryFinallyStatNode(StatNode):
def
create_analysed
(
pos
,
env
,
body
,
finally_clause
):
def
create_analysed
(
pos
,
env
,
body
,
finally_clause
):
node
=
TryFinallyStatNode
(
pos
,
body
=
body
,
finally_clause
=
finally_clause
)
node
=
TryFinallyStatNode
(
pos
,
body
=
body
,
finally_clause
=
finally_clause
)
node
.
cleanup_list
=
[]
return
node
return
node
create_analysed
=
staticmethod
(
create_analysed
)
create_analysed
=
staticmethod
(
create_analysed
)
...
@@ -4285,7 +4266,6 @@ class TryFinallyStatNode(StatNode):
...
@@ -4285,7 +4266,6 @@ class TryFinallyStatNode(StatNode):
def
analyse_expressions
(
self
,
env
):
def
analyse_expressions
(
self
,
env
):
self
.
body
.
analyse_expressions
(
env
)
self
.
body
.
analyse_expressions
(
env
)
self
.
cleanup_list
=
env
.
free_temp_entries
[:]
self
.
finally_clause
.
analyse_expressions
(
env
)
self
.
finally_clause
.
analyse_expressions
(
env
)
gil_check
=
StatNode
.
_gil_check
gil_check
=
StatNode
.
_gil_check
...
@@ -4391,7 +4371,6 @@ class TryFinallyStatNode(StatNode):
...
@@ -4391,7 +4371,6 @@ class TryFinallyStatNode(StatNode):
code
.
putln
(
code
.
putln
(
"__pyx_why = %s;"
%
"__pyx_why = %s;"
%
i
)
i
)
code
.
put_var_xdecrefs_clear
(
self
.
cleanup_list
)
for
temp_name
,
type
in
temps_to_clean_up
:
for
temp_name
,
type
in
temps_to_clean_up
:
code
.
put_xdecref_clear
(
temp_name
,
type
)
code
.
put_xdecref_clear
(
temp_name
,
type
)
code
.
putln
(
code
.
putln
(
...
...
Cython/Compiler/Symtab.py
View file @
44ce6ec0
...
@@ -183,9 +183,6 @@ class Scope(object):
...
@@ -183,9 +183,6 @@ class Scope(object):
# pyfunc_entries [Entry] Python function entries
# pyfunc_entries [Entry] Python function entries
# cfunc_entries [Entry] C function entries
# cfunc_entries [Entry] C function entries
# c_class_entries [Entry] All extension type entries
# c_class_entries [Entry] All extension type entries
# temp_entries [Entry] Temporary variable entries
# free_temp_entries [Entry] Temp variables currently unused
# temp_counter integer Counter for naming temp vars
# cname_to_entry {string : Entry} Temp cname to entry mapping
# cname_to_entry {string : Entry} Temp cname to entry mapping
# int_to_entry {int : Entry} Temp cname to entry mapping
# int_to_entry {int : Entry} Temp cname to entry mapping
# return_type PyrexType or None Return type of function owning scope
# return_type PyrexType or None Return type of function owning scope
...
@@ -209,8 +206,6 @@ class Scope(object):
...
@@ -209,8 +206,6 @@ class Scope(object):
nogil = 0
nogil = 0
directives = {}
directives = {}
temp_prefix = Naming.pyrex_prefix
def __init__(self, name, outer_scope, parent_scope):
def __init__(self, name, outer_scope, parent_scope):
# The outer_scope is the next scope in the lookup chain.
# The outer_scope is the next scope in the lookup chain.
# The parent_scope is used to derive the qualified name of this scope.
# The parent_scope is used to derive the qualified name of this scope.
...
@@ -236,10 +231,6 @@ class Scope(object):
...
@@ -236,10 +231,6 @@ class Scope(object):
self.c_class_entries = []
self.c_class_entries = []
self.defined_c_classes = []
self.defined_c_classes = []
self.imported_c_classes = {}
self.imported_c_classes = {}
self.temp_entries = []
self.free_temp_entries = []
#self.pending_temp_entries = [] # TEMPORARY
self.temp_counter = 1
self.cname_to_entry = {}
self.cname_to_entry = {}
self.string_to_entry = {}
self.string_to_entry = {}
self.identifier_to_entry = {}
self.identifier_to_entry = {}
...
@@ -531,44 +522,6 @@ class Scope(object):
...
@@ -531,44 +522,6 @@ class Scope(object):
if entry and entry.is_type:
if entry and entry.is_type:
return entry.type
return entry.type
def allocate_temp(self, type):
# Allocate a temporary variable of the given type from the
# free list if available, otherwise create a new one.
# Returns the cname of the variable.
for entry in self.free_temp_entries:
if entry.type == type:
self.free_temp_entries.remove(entry)
return entry.cname
n = self.temp_counter
self.temp_counter = n + 1
cname = "
%
s
%
d
" % (self.temp_prefix, n)
entry = Entry("", cname, type)
entry.used = 1
if type.is_pyobject or type == PyrexTypes.c_py_ssize_t_type:
entry.init = "
0
"
self.cname_to_entry[entry.cname] = entry
self.temp_entries.append(entry)
return entry.cname
def allocate_temp_pyobject(self):
# Allocate a temporary PyObject variable.
return self.allocate_temp(py_object_type)
def release_temp(self, cname):
# Release a temporary variable for re-use.
if not cname: # can happen when type of an expr is void
return
entry = self.cname_to_entry[cname]
if entry in self.free_temp_entries:
raise InternalError("
Temporary
variable
%
s
released
more
than
once
"
% cname)
self.free_temp_entries.append(entry)
def temps_in_use(self):
# Return a new list of temp entries currently in use.
return [entry for entry in self.temp_entries
if entry not in self.free_temp_entries]
def use_utility_code(self, new_code, name=None):
def use_utility_code(self, new_code, name=None):
self.global_scope().use_utility_code(new_code, name)
self.global_scope().use_utility_code(new_code, name)
...
@@ -1117,11 +1070,9 @@ class LocalScope(Scope):
...
@@ -1117,11 +1070,9 @@ class LocalScope(Scope):
class GeneratorLocalScope(LocalScope):
class GeneratorLocalScope(LocalScope):
temp_prefix = Naming.cur_scope_cname + "->" + LocalScope.temp_prefix
def mangle_closure_cnames(self, scope_var):
def mangle_closure_cnames(self, scope_var):
for entry in self.entries.values() + self.temp_entries:
#
for entry in self.entries.values() + self.temp_entries:
entry.in_closure = 1
#
entry.in_closure = 1
LocalScope.mangle_closure_cnames(self, scope_var)
LocalScope.mangle_closure_cnames(self, scope_var)
# def mangle(self, prefix, name):
# def mangle(self, prefix, name):
...
@@ -1209,15 +1160,6 @@ class PyClassScope(ClassScope):
...
@@ -1209,15 +1160,6 @@ class PyClassScope(ClassScope):
entry
.
is_pyglobal
=
1
entry
.
is_pyglobal
=
1
return
entry
return
entry
def
allocate_temp
(
self
,
type
):
return
self
.
outer_scope
.
allocate_temp
(
type
)
def
release_temp
(
self
,
cname
):
self
.
outer_scope
.
release_temp
(
cname
)
#def recycle_pending_temps(self):
# self.outer_scope.recycle_pending_temps()
def
add_default_value
(
self
,
type
):
def
add_default_value
(
self
,
type
):
return
self
.
outer_scope
.
add_default_value
(
type
)
return
self
.
outer_scope
.
add_default_value
(
type
)
...
@@ -1412,12 +1354,6 @@ class CClassScope(ClassScope):
...
@@ -1412,12 +1354,6 @@ class CClassScope(ClassScope):
base_entry
.
visibility
,
base_entry
.
func_modifiers
)
base_entry
.
visibility
,
base_entry
.
func_modifiers
)
entry
.
is_inherited
=
1
entry
.
is_inherited
=
1
def
allocate_temp
(
self
,
type
):
return
Scope
.
allocate_temp
(
self
.
global_scope
(),
type
)
def
release_temp
(
self
,
cname
):
return
Scope
.
release_temp
(
self
.
global_scope
(),
cname
)
class
PropertyScope
(
Scope
):
class
PropertyScope
(
Scope
):
# Scope holding the __get__, __set__ and __del__ methods for
# Scope holding the __get__, __set__ and __del__ methods for
...
...
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