From: Robert Bradshaw Date: Wed, 12 Nov 2008 01:36:19 +0000 (-0800) Subject: Make raising a KeyError not the default for parsing names. X-Git-Tag: 0.11-beta~264 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=17fabe5aa5649294f36a5782239522eb0f8db5c1;p=cython.git Make raising a KeyError not the default for parsing names. --- diff --git a/Cython/Compiler/Parsing.py b/Cython/Compiler/Parsing.py index 5b963a74..0e5a20da 100644 --- a/Cython/Compiler/Parsing.py +++ b/Cython/Compiler/Parsing.py @@ -532,26 +532,22 @@ def p_atom(s): def p_name(s, name): pos = s.position() - if not s.compile_time_expr: - try: - value = s.compile_time_env.lookup_here(name) - except KeyError: - pass + if not s.compile_time_expr and name in s.compile_time_env: + value = s.compile_time_env.lookup_here(name) + rep = repr(value) + if isinstance(value, bool): + return ExprNodes.BoolNode(pos, value = value) + elif isinstance(value, int): + return ExprNodes.IntNode(pos, value = rep) + elif isinstance(value, long): + return ExprNodes.IntNode(pos, value = rep, longness = "L") + elif isinstance(value, float): + return ExprNodes.FloatNode(pos, value = rep) + elif isinstance(value, (str, unicode)): + return ExprNodes.StringNode(pos, value = value) else: - rep = repr(value) - if isinstance(value, bool): - return ExprNodes.BoolNode(pos, value = value) - elif isinstance(value, int): - return ExprNodes.IntNode(pos, value = rep) - elif isinstance(value, long): - return ExprNodes.IntNode(pos, value = rep, longness = "L") - elif isinstance(value, float): - return ExprNodes.FloatNode(pos, value = rep) - elif isinstance(value, (str, unicode)): - return ExprNodes.StringNode(pos, value = value) - else: - error(pos, "Invalid type for compile-time constant: %s" - % value.__class__.__name__) + error(pos, "Invalid type for compile-time constant: %s" + % value.__class__.__name__) return ExprNodes.NameNode(pos, name = name) def p_cat_string_literal(s): diff --git a/Cython/Compiler/Scanning.pxd b/Cython/Compiler/Scanning.pxd index 10b19277..9850562d 100644 --- a/Cython/Compiler/Scanning.pxd +++ b/Cython/Compiler/Scanning.pxd @@ -1,5 +1,9 @@ from Cython.Plex.Scanners cimport Scanner +cdef class CompileTimeScope: + cdef public entries + cdef public outer + cdef class PyrexScanner(Scanner): cdef public context cdef public list included_files diff --git a/Cython/Compiler/Scanning.py b/Cython/Compiler/Scanning.py index b19d67f7..ad620c26 100644 --- a/Cython/Compiler/Scanning.py +++ b/Cython/Compiler/Scanning.py @@ -176,7 +176,7 @@ resword_dict = build_resword_dict() #------------------------------------------------------------------ -class CompileTimeScope(object): +class CompileTimeScope: def __init__(self, outer = None): self.entries = {} @@ -187,6 +187,9 @@ class CompileTimeScope(object): def lookup_here(self, name): return self.entries[name] + + def __contains__(self, name): + return name in self.entries def lookup(self, name): try: