##// END OF EJS Templates
catch `MemoryError` in compiling
yangyang -
Show More
@@ -146,20 +146,20 b' def _should_be_async(cell: str) -> bool:'
146
146
147 If it works, assume it should be async. Otherwise Return False.
147 If it works, assume it should be async. Otherwise Return False.
148
148
149 Not handled yet: If the block of code has a return statement as the top
149 Not handled yet: If the block of code has a return statement as the top
150 level, it will be seen as async. This is a know limitation.
150 level, it will be seen as async. This is a know limitation.
151 """
151 """
152 if sys.version_info > (3, 8):
152 if sys.version_info > (3, 8):
153 try:
153 try:
154 code = compile(cell, "<>", "exec", flags=getattr(ast,'PyCF_ALLOW_TOP_LEVEL_AWAIT', 0x0))
154 code = compile(cell, "<>", "exec", flags=getattr(ast,'PyCF_ALLOW_TOP_LEVEL_AWAIT', 0x0))
155 return inspect.CO_COROUTINE & code.co_flags == inspect.CO_COROUTINE
155 return inspect.CO_COROUTINE & code.co_flags == inspect.CO_COROUTINE
156 except SyntaxError:
156 except (SyntaxError, MemoryError):
157 return False
157 return False
158 try:
158 try:
159 # we can't limit ourself to ast.parse, as it __accepts__ to parse on
159 # we can't limit ourself to ast.parse, as it __accepts__ to parse on
160 # 3.7+, but just does not _compile_
160 # 3.7+, but just does not _compile_
161 code = compile(cell, "<>", "exec")
161 code = compile(cell, "<>", "exec")
162 except SyntaxError:
162 except (SyntaxError, MemoryError):
163 try:
163 try:
164 parse_tree = _async_parse_cell(cell)
164 parse_tree = _async_parse_cell(cell)
165
165
@@ -167,7 +167,7 b' def _should_be_async(cell: str) -> bool:'
167 v = _AsyncSyntaxErrorVisitor()
167 v = _AsyncSyntaxErrorVisitor()
168 v.visit(parse_tree)
168 v.visit(parse_tree)
169
169
170 except SyntaxError:
170 except (SyntaxError, MemoryError):
171 return False
171 return False
172 return True
172 return True
173 return False
173 return False
General Comments 0
You need to be logged in to leave comments. Login now