From 89b4dd764e34fab9fadfba2f624ca9bd29dab03f 2012-08-03 21:16:00 From: Bradley M. Froehle Date: 2012-08-03 21:16:00 Subject: [PATCH] Fix regression in embed() from pull-request #2096. With certain sets of arguments `compile_flags` might be left as `None`. This caused IPython to internally raise a TypeError when it tried to do a bitwise or between `shell.compile.flags` and `PyCF_ONLY_AST` in `CachingCompiler.ast_parse`. The regression was introduced in: b70ac12 embed(): Default to the future compile flags of the calling frame. --- diff --git a/IPython/frontend/terminal/embed.py b/IPython/frontend/terminal/embed.py index 18123bc..c4999c4 100644 --- a/IPython/frontend/terminal/embed.py +++ b/IPython/frontend/terminal/embed.py @@ -200,7 +200,8 @@ class InteractiveShellEmbed(TerminalInteractiveShell): module.__dict__ = global_ns # Get locals and globals from caller - if (local_ns is None or module is None) and self.default_user_namespaces: + if ((local_ns is None or module is None or compile_flags is None) + and self.default_user_namespaces): call_frame = sys._getframe(stack_depth).f_back if local_ns is None: @@ -233,7 +234,8 @@ class InteractiveShellEmbed(TerminalInteractiveShell): self.init_user_ns() # Compiler flags - self.compile.flags = compile_flags + if compile_flags is not None: + self.compile.flags = compile_flags # Patch for global embedding to make sure that things don't overwrite # user globals accidentally. Thanks to Richard