Author: Maciej Fijalkowski <fij...@gmail.com> Branch: Changeset: r54423:3c8d3429fe18 Date: 2012-04-16 16:36 +0200 http://bitbucket.org/pypy/pypy/changeset/3c8d3429fe18/
Log: merge diff --git a/pypy/interpreter/argument.py b/pypy/interpreter/argument.py --- a/pypy/interpreter/argument.py +++ b/pypy/interpreter/argument.py @@ -85,6 +85,10 @@ Collects the arguments of a function call. Instances should be considered immutable. + + Some parts of this class are written in a slightly convoluted style to help + the JIT. It is really crucial to get this right, because Python's argument + semantics are complex, but calls occur everywhere. """ ### Construction ### @@ -171,7 +175,13 @@ space = self.space keywords, values_w = space.view_as_kwargs(w_starstararg) if keywords is not None: # this path also taken for empty dicts - self._add_keywordargs_no_unwrapping(keywords, values_w) + if self.keywords is None: + self.keywords = keywords[:] # copy to make non-resizable + self.keywords_w = values_w[:] + else: + self._check_not_duplicate_kwargs(keywords, values_w) + self.keywords = self.keywords + keywords + self.keywords_w = self.keywords_w + values_w return not jit.isconstant(len(self.keywords)) if space.isinstance_w(w_starstararg, space.w_dict): keys_w = space.unpackiterable(w_starstararg) @@ -229,22 +239,16 @@ @jit.look_inside_iff(lambda self, keywords, keywords_w: jit.isconstant(len(keywords) and jit.isconstant(self.keywords))) - def _add_keywordargs_no_unwrapping(self, keywords, keywords_w): - if self.keywords is None: - self.keywords = keywords[:] # copy to make non-resizable - self.keywords_w = keywords_w[:] - else: - # looks quadratic, but the JIT should remove all of it nicely. - # Also, all the lists should be small - for key in keywords: - for otherkey in self.keywords: - if otherkey == key: - raise operationerrfmt(self.space.w_TypeError, - "got multiple values " - "for keyword argument " - "'%s'", key) - self.keywords = self.keywords + keywords - self.keywords_w = self.keywords_w + keywords_w + def _check_not_duplicate_kwargs(self, keywords, keywords_w): + # looks quadratic, but the JIT should remove all of it nicely. + # Also, all the lists should be small + for key in keywords: + for otherkey in self.keywords: + if otherkey == key: + raise operationerrfmt(self.space.w_TypeError, + "got multiple values " + "for keyword argument " + "'%s'", key) def fixedunpack(self, argcount): """The simplest argument parsing: get the 'argcount' arguments, diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py --- a/pypy/jit/metainterp/pyjitpl.py +++ b/pypy/jit/metainterp/pyjitpl.py @@ -1223,7 +1223,7 @@ def run_one_step(self): # Execute the frame forward. This method contains a loop that leaves # whenever the 'opcode_implementations' (which is one of the 'opimpl_' - # methods) returns True. This is the case when the current frame + # methods) raises ChangeFrame. This is the case when the current frame # changes, due to a call or a return. try: staticdata = self.metainterp.staticdata diff --git a/pypy/rlib/ropenssl.py b/pypy/rlib/ropenssl.py --- a/pypy/rlib/ropenssl.py +++ b/pypy/rlib/ropenssl.py @@ -3,8 +3,9 @@ from pypy.translator.platform import platform from pypy.translator.tool.cbuild import ExternalCompilationInfo -import sys +import sys, os +link_files = [] if sys.platform == 'win32' and platform.name != 'mingw32': libraries = ['libeay32', 'ssleay32', 'user32', 'advapi32', 'gdi32', 'msvcrt', 'ws2_32'] @@ -17,8 +18,17 @@ # so that openssl/ssl.h can repair this nonsense. 'wincrypt.h'] else: - libraries = ['ssl', 'crypto'] + libraries = ['z'] includes = [] + if (sys.platform.startswith('linux') and + os.path.exists('/usr/lib/libssl.a') and + os.path.exists('/usr/lib/libcrypto.a')): + # use static linking to avoid the infinite + # amount of troubles due to symbol versions + # and 0.9.8/1.0.0 + link_files += ['/usr/lib/libssl.a', '/usr/lib/libcrypto.a'] + else: + libraries += ['ssl', 'crypto'] includes += [ 'openssl/ssl.h', @@ -30,6 +40,7 @@ eci = ExternalCompilationInfo( libraries = libraries, + link_files = link_files, includes = includes, export_symbols = [], post_include_bits = [ _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit