From: Stefan Behnel Date: Tue, 11 Sep 2007 19:12:49 +0000 (+0200) Subject: use 'with GIL' instead of 'withGIL' to avoid introducing a non-Python keyword and... X-Git-Tag: 0.9.6.14~29^2~129^2~10 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=523ba29cc373e0ae6bb135d6f9d8777bc045d318;p=cython.git use 'with GIL' instead of 'withGIL' to avoid introducing a non-Python keyword and to support later extension for other contexts --- diff --git a/Cython/Compiler/Parsing.py b/Cython/Compiler/Parsing.py index 760f2076..cd660a91 100644 --- a/Cython/Compiler/Parsing.py +++ b/Cython/Compiler/Parsing.py @@ -5,7 +5,7 @@ import os, re from string import join, replace from types import ListType, TupleType -from Scanning import PyrexScanner +from Scanning import PyrexScanner, function_contexts import Nodes import ExprNodes from ModuleNode import ModuleNode @@ -1484,28 +1484,33 @@ def p_exception_value_clause(s): exc_val = p_simple_expr(s) #p_exception_value(s) return exc_val, exc_check -def p_c_with_gil(s): - if s.sy == 'withGIL': +def p_c_with(s): + if s.sy == 'with': s.next() - return True - return False + return p_ident_list(s) + return () def p_c_func_options(s): exc_val = None exc_check = 0 - with_gil = False + contexts = [] if s.sy == 'except': exc_val, exc_check = p_exception_value_clause(s) - with_gil = p_c_with_gil(s) - elif s.sy == 'withGIL': - with_gil = p_c_with_gil(s) + contexts = p_c_with(s) + elif s.sy == 'with': + contexts = p_c_with(s) exc_val, exc_check = p_exception_value_clause(s) + for context in contexts: + if context not in function_contexts: + s.error("Unknown context: " + context) + return None + ret = { 'exception_value': exc_val, 'exception_check': exc_check, - 'with_gil': with_gil, + 'with_gil': 'GIL' in contexts, } return ret diff --git a/Cython/Compiler/PyrexTypes.py b/Cython/Compiler/PyrexTypes.py index bc5fcf48..27eb2780 100644 --- a/Cython/Compiler/PyrexTypes.py +++ b/Cython/Compiler/PyrexTypes.py @@ -591,7 +591,7 @@ class CFuncType(CType): elif self.exception_check: exc_clause = " except *" if self.with_gil: - with_gil_clause = " withGIL" + with_gil_clause = " with GIL" return self.return_type.declaration_code( "(%s(%s)%s%s)" % (entity_code, arg_decl_code, exc_clause, with_gil_clause), diff --git a/Cython/Compiler/Scanning.py b/Cython/Compiler/Scanning.py index d5713762..48ae39af 100644 --- a/Cython/Compiler/Scanning.py +++ b/Cython/Compiler/Scanning.py @@ -138,7 +138,11 @@ reserved_words = [ "raise", "import", "exec", "try", "except", "finally", "while", "if", "elif", "else", "for", "in", "assert", "and", "or", "not", "is", "in", "lambda", "from", - "NULL", "cimport", "by", "withGIL" + "NULL", "cimport", "by", "with" +] + +function_contexts = [ # allowed arguments to the "with" option + "GIL" ] class Method: