Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Side by Side Diff: third_party/cython/src/Cython/Compiler/Interpreter.py

Issue 385073004: Adding cython v0.20.2 in third-party. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reference cython dev list thread. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 """
2 This module deals with interpreting the parse tree as Python
3 would have done, in the compiler.
4
5 For now this only covers parse tree to value conversion of
6 compile-time values.
7 """
8
9 from Nodes import *
10 from ExprNodes import *
11 from Errors import CompileError
12
13
14 class EmptyScope(object):
15 def lookup(self, name):
16 return None
17
18 empty_scope = EmptyScope()
19
20 def interpret_compiletime_options(optlist, optdict, type_env=None, type_args=()) :
21 """
22 Tries to interpret a list of compile time option nodes.
23 The result will be a tuple (optlist, optdict) but where
24 all expression nodes have been interpreted. The result is
25 in the form of tuples (value, pos).
26
27 optlist is a list of nodes, while optdict is a DictNode (the
28 result optdict is a dict)
29
30 If type_env is set, all type nodes will be analysed and the resulting
31 type set. Otherwise only interpretateable ExprNodes
32 are allowed, other nodes raises errors.
33
34 A CompileError will be raised if there are problems.
35 """
36
37 def interpret(node, ix):
38 if ix in type_args:
39 if type_env:
40 type = node.analyse_as_type(type_env)
41 if not type:
42 raise CompileError(node.pos, "Invalid type.")
43 return (type, node.pos)
44 else:
45 raise CompileError(node.pos, "Type not allowed here.")
46 else:
47 if (sys.version_info[0] >=3 and
48 isinstance(node, StringNode) and
49 node.unicode_value is not None):
50 return (node.unicode_value, node.pos)
51 return (node.compile_time_value(empty_scope), node.pos)
52
53 if optlist:
54 optlist = [interpret(x, ix) for ix, x in enumerate(optlist)]
55 if optdict:
56 assert isinstance(optdict, DictNode)
57 new_optdict = {}
58 for item in optdict.key_value_pairs:
59 new_key, dummy = interpret(item.key, None)
60 new_optdict[new_key] = interpret(item.value, item.key.value)
61 optdict = new_optdict
62 return (optlist, new_optdict)
OLDNEW
« no previous file with comments | « third_party/cython/src/Cython/Compiler/Future.py ('k') | third_party/cython/src/Cython/Compiler/Lexicon.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698