Author: Ronan Lamy <[email protected]>
Branch: less-stringly-ops
Changeset: r66232:d8b2304b850b
Date: 2013-08-09 04:48 +0100
http://bitbucket.org/pypy/pypy/changeset/d8b2304b850b/
Log: kill FlowObjSpace.unwrap(), .int_w(), .str_w()
diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -662,8 +662,8 @@
def IMPORT_NAME(self, nameindex, next_instr):
space = self.space
modulename = self.getname_u(nameindex)
- glob = space.unwrap(self.w_globals)
- fromlist = space.unwrap(self.popvalue())
+ glob = self.w_globals.value
+ fromlist = self.popvalue().value
level = self.popvalue().value
w_obj = space.import_name(modulename, glob, None, fromlist, level)
self.pushvalue(w_obj)
@@ -941,7 +941,7 @@
for _ in range(n_keywords):
w_value = self.popvalue()
w_key = self.popvalue()
- key = self.space.str_w(w_key)
+ key = w_key.value
keywords[key] = w_value
arguments = self.popvalues(n_arguments)
args = CallSpec(arguments, keywords, w_star, w_starstar)
diff --git a/rpython/flowspace/objspace.py b/rpython/flowspace/objspace.py
--- a/rpython/flowspace/objspace.py
+++ b/rpython/flowspace/objspace.py
@@ -20,7 +20,6 @@
from rpython.flowspace.specialcase import SPECIAL_CASES
from rpython.rlib.unroll import unrolling_iterable, _unroller
from rpython.rlib import rstackovf
-from rpython.rlib.rarithmetic import is_valid_int
# the following gives us easy access to declare more for applications:
@@ -68,7 +67,6 @@
(the bytecode of) some function.
"""
w_None = Constant(None)
- builtin = Constant(__builtin__)
sys = Constant(sys)
w_False = Constant(False)
w_True = Constant(True)
@@ -120,13 +118,12 @@
return self.w_False
def newfunction(self, w_code, w_globals, defaults_w):
- try:
- code = self.unwrap(w_code)
- globals = self.unwrap(w_globals)
- defaults = tuple([self.unwrap(value) for value in defaults_w])
- except UnwrapException:
+ if not all(isinstance(value, Constant) for value in defaults_w):
raise FlowingError(self.frame, "Dynamically created function must"
" have constant default values.")
+ code = w_code.value
+ globals = w_globals.value
+ defaults = tuple([default.value for default in defaults_w])
fn = types.FunctionType(code, globals, code.co_name, defaults)
return Constant(fn)
@@ -135,39 +132,14 @@
w_type = const(type(exc))
return FSException(w_type, w_value)
- def int_w(self, w_obj):
- if isinstance(w_obj, Constant):
- val = w_obj.value
- if not is_valid_int(val):
- raise TypeError("expected integer: " + repr(w_obj))
- return val
- return self.unwrap(w_obj)
-
- def str_w(self, w_obj):
- if isinstance(w_obj, Constant):
- val = w_obj.value
- if type(val) is not str:
- raise TypeError("expected string: " + repr(w_obj))
- return val
- return self.unwrap(w_obj)
-
- def unwrap(self, w_obj):
- if isinstance(w_obj, Variable):
- raise UnwrapException
- elif isinstance(w_obj, Constant):
- return w_obj.value
- else:
- raise TypeError("not wrapped: " + repr(w_obj))
-
def exception_issubclass_w(self, w_cls1, w_cls2):
return self.is_true(self.issubtype(w_cls1, w_cls2))
def exception_match(self, w_exc_type, w_check_class):
"""Checks if the given exception type matches 'w_check_class'."""
- try:
- check_class = self.unwrap(w_check_class)
- except UnwrapException:
+ if not isinstance(w_check_class, Constant):
raise FlowingError(self.frame, "Non-constant except guard.")
+ check_class = w_check_class.value
if check_class in (NotImplementedError, AssertionError):
raise FlowingError(self.frame,
"Catching %s is not valid in RPython" % check_class.__name__)
@@ -221,7 +193,7 @@
def unpack_sequence(self, w_iterable, expected_length):
if isinstance(w_iterable, Constant):
- l = list(self.unwrap(w_iterable))
+ l = list(w_iterable.value)
if len(l) != expected_length:
raise ValueError
return [const(x) for x in l]
@@ -373,11 +345,11 @@
def find_global(self, w_globals, varname):
try:
- value = self.unwrap(w_globals)[varname]
+ value = w_globals.value[varname]
except KeyError:
# not in the globals, now look in the built-ins
try:
- value = getattr(self.unwrap(self.builtin), varname)
+ value = getattr(__builtin__, varname)
except AttributeError:
message = "global name '%s' is not defined" % varname
raise FlowingError(self.frame, const(message))
diff --git a/rpython/flowspace/specialcase.py b/rpython/flowspace/specialcase.py
--- a/rpython/flowspace/specialcase.py
+++ b/rpython/flowspace/specialcase.py
@@ -1,3 +1,5 @@
+from rpython.flowspace.model import Constant
+
SPECIAL_CASES = {}
def register_flow_sc(func):
@@ -14,7 +16,8 @@
@register_flow_sc(__import__)
def sc_import(space, args_w):
assert len(args_w) > 0 and len(args_w) <= 5, 'import needs 1 to 5
arguments'
- args = [space.unwrap(arg) for arg in args_w]
+ assert all(isinstance(arg, Constant) for arg in args_w)
+ args = [arg.value for arg in args_w]
return space.import_name(*args)
@register_flow_sc(locals)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit