Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
RestrictedPython-3.6.0
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
Boxiang Sun
RestrictedPython-3.6.0
Commits
2ebcf9c5
Commit
2ebcf9c5
authored
Oct 06, 2016
by
Boxiang Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Let RestrictedPython become stubs.
parent
1e456686
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
264 additions
and
261 deletions
+264
-261
src/RestrictedPython/MutatingWalker.py
src/RestrictedPython/MutatingWalker.py
+54
-54
src/RestrictedPython/RCompile.py
src/RestrictedPython/RCompile.py
+206
-203
src/RestrictedPython/SelectCompiler.py
src/RestrictedPython/SelectCompiler.py
+4
-4
No files found.
src/RestrictedPython/MutatingWalker.py
View file @
2ebcf9c5
...
...
@@ -13,62 +13,62 @@
__version__
=
'$Revision: 1.6 $'
[
11
:
-
2
]
from
SelectCompiler
import
ast
#
from SelectCompiler import ast
ListType
=
type
([])
TupleType
=
type
(())
SequenceTypes
=
(
ListType
,
TupleType
)
class
MutatingWalker
:
def
__init__
(
self
,
visitor
):
self
.
visitor
=
visitor
self
.
_cache
=
{}
def
defaultVisitNode
(
self
,
node
,
walker
=
None
,
exclude
=
None
):
for
name
,
child
in
node
.
__dict__
.
items
():
if
exclude
is
not
None
and
name
in
exclude
:
continue
v
=
self
.
dispatchObject
(
child
)
if
v
is
not
child
:
# Replace the node.
node
.
__dict__
[
name
]
=
v
return
node
def
visitSequence
(
self
,
seq
):
res
=
seq
for
idx
in
range
(
len
(
seq
)):
child
=
seq
[
idx
]
v
=
self
.
dispatchObject
(
child
)
if
v
is
not
child
:
# Change the sequence.
if
type
(
res
)
is
ListType
:
res
[
idx
:
idx
+
1
]
=
[
v
]
else
:
res
=
res
[:
idx
]
+
(
v
,)
+
res
[
idx
+
1
:]
return
res
def
dispatchObject
(
self
,
ob
):
'''
Expected to return either ob or something that will take
its place.
'''
if
isinstance
(
ob
,
ast
.
Node
):
return
self
.
dispatchNode
(
ob
)
elif
type
(
ob
)
in
SequenceTypes
:
return
self
.
visitSequence
(
ob
)
else
:
return
ob
def
dispatchNode
(
self
,
node
):
klass
=
node
.
__class__
meth
=
self
.
_cache
.
get
(
klass
,
None
)
if
meth
is
None
:
className
=
klass
.
__name__
meth
=
getattr
(
self
.
visitor
,
'visit'
+
className
,
self
.
defaultVisitNode
)
self
.
_cache
[
klass
]
=
meth
return
meth
(
node
,
self
)
def
walk
(
tree
,
visitor
):
return
MutatingWalker
(
visitor
).
dispatchNode
(
tree
)
#
class MutatingWalker:
#
#
def __init__(self, visitor):
#
self.visitor = visitor
#
self._cache = {}
#
#
def defaultVisitNode(self, node, walker=None, exclude=None):
#
for name, child in node.__dict__.items():
#
if exclude is not None and name in exclude:
#
continue
#
v = self.dispatchObject(child)
#
if v is not child:
#
# Replace the node.
#
node.__dict__[name] = v
#
return node
#
#
def visitSequence(self, seq):
#
res = seq
#
for idx in range(len(seq)):
#
child = seq[idx]
#
v = self.dispatchObject(child)
#
if v is not child:
#
# Change the sequence.
#
if type(res) is ListType:
#
res[idx : idx + 1] = [v]
#
else:
#
res = res[:idx] + (v,) + res[idx + 1:]
#
return res
#
#
def dispatchObject(self, ob):
#
'''
#
Expected to return either ob or something that will take
#
its place.
#
'''
#
if isinstance(ob, ast.Node):
#
return self.dispatchNode(ob)
#
elif type(ob) in SequenceTypes:
#
return self.visitSequence(ob)
#
else:
#
return ob
#
#
def dispatchNode(self, node):
#
klass = node.__class__
#
meth = self._cache.get(klass, None)
#
if meth is None:
#
className = klass.__name__
#
meth = getattr(self.visitor, 'visit' + className,
#
self.defaultVisitNode)
#
self._cache[klass] = meth
#
return meth(node, self)
#
#
def walk(tree, visitor):
#
return MutatingWalker(visitor).dispatchNode(tree)
src/RestrictedPython/RCompile.py
View file @
2ebcf9c5
This diff is collapsed.
Click to expand it.
src/RestrictedPython/SelectCompiler.py
View file @
2ebcf9c5
...
...
@@ -14,10 +14,10 @@
"""
# Use the compiler from the standard library.
import
compiler
from
compiler
import
ast
from
compiler.transformer
import
parse
from
compiler.consts
import
OP_ASSIGN
,
OP_DELETE
,
OP_APPLY
#
import compiler
#
from compiler import ast
#
from compiler.transformer import parse
#
from compiler.consts import OP_ASSIGN, OP_DELETE, OP_APPLY
from
RCompile
import
\
compile_restricted
,
\
...
...
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