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

Side by Side Diff: pylib/gyp/input.py

Issue 1406163007: Replaced deprecated compiler module usage with the ast module Base URL: https://chromium.googlesource.com/external/gyp.git@master
Patch Set: Fixed rebase upload Created 4 years, 8 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from compiler.ast import Const 5 import ast
6 from compiler.ast import Dict
7 from compiler.ast import Discard
8 from compiler.ast import List
9 from compiler.ast import Module
10 from compiler.ast import Node
11 from compiler.ast import Stmt
12 import compiler
13 import gyp.common 6 import gyp.common
14 import gyp.simple_copy 7 import gyp.simple_copy
15 import multiprocessing 8 import multiprocessing
16 import optparse 9 import optparse
17 import os.path 10 import os.path
18 import re 11 import re
19 import shlex 12 import shlex
20 import signal 13 import signal
21 import subprocess 14 import subprocess
22 import sys 15 import sys
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 168
176 def CheckedEval(file_contents): 169 def CheckedEval(file_contents):
177 """Return the eval of a gyp file. 170 """Return the eval of a gyp file.
178 171
179 The gyp file is restricted to dictionaries and lists only, and 172 The gyp file is restricted to dictionaries and lists only, and
180 repeated keys are not allowed. 173 repeated keys are not allowed.
181 174
182 Note that this is slower than eval() is. 175 Note that this is slower than eval() is.
183 """ 176 """
184 177
185 ast = compiler.parse(file_contents) 178 syntax_tree = ast.parse(file_contents)
186 assert isinstance(ast, Module) 179 assert isinstance(syntax_tree, ast.Module)
187 c1 = ast.getChildren() 180 c1 = syntax_tree.body
188 assert c1[0] is None 181 assert len(c1) == 1
189 assert isinstance(c1[1], Stmt) 182 c2 = c1[0]
190 c2 = c1[1].getChildren() 183 assert isinstance(c2, ast.Expr)
191 assert isinstance(c2[0], Discard) 184 return CheckNode(c2.value, [])
192 c3 = c2[0].getChildren()
193 assert len(c3) == 1
194 return CheckNode(c3[0], [])
195 185
196 186
197 def CheckNode(node, keypath): 187 def CheckNode(node, keypath):
198 if isinstance(node, Dict): 188 if isinstance(node, ast.Dict):
199 c = node.getChildren()
200 dict = {} 189 dict = {}
201 for n in range(0, len(c), 2): 190 for key, value in zip(node.keys, node.values):
202 assert isinstance(c[n], Const) 191 assert isinstance(key, ast.Str)
203 key = c[n].getChildren()[0] 192 key = key.s
204 if key in dict: 193 if key in dict:
205 raise GypError("Key '" + key + "' repeated at level " + 194 raise GypError("Key '" + key + "' repeated at level " +
206 repr(len(keypath) + 1) + " with key path '" + 195 repr(len(keypath) + 1) + " with key path '" +
207 '.'.join(keypath) + "'") 196 '.'.join(keypath) + "'")
208 kp = list(keypath) # Make a copy of the list for descending this node. 197 kp = list(keypath) # Make a copy of the list for descending this node.
209 kp.append(key) 198 kp.append(key)
210 dict[key] = CheckNode(c[n + 1], kp) 199 dict[key] = CheckNode(value, kp)
211 return dict 200 return dict
212 elif isinstance(node, List): 201 elif isinstance(node, ast.List):
213 c = node.getChildren()
214 children = [] 202 children = []
215 for index, child in enumerate(c): 203 for index, child in enumerate(node.elts):
216 kp = list(keypath) # Copy list. 204 kp = list(keypath) # Copy list.
217 kp.append(repr(index)) 205 kp.append(repr(index))
218 children.append(CheckNode(child, kp)) 206 children.append(CheckNode(child, kp))
219 return children 207 return children
220 elif isinstance(node, Const): 208 elif isinstance(node, ast.Str):
221 return node.getChildren()[0] 209 return node.s
222 else: 210 else:
223 raise TypeError("Unknown AST node at key path '" + '.'.join(keypath) + 211 raise TypeError("Unknown AST node at key path '" + '.'.join(keypath) +
224 "': " + repr(node)) 212 "': " + repr(node))
225 213
226 214
227 def LoadOneBuildFile(build_file_path, data, aux_data, includes, 215 def LoadOneBuildFile(build_file_path, data, aux_data, includes,
228 is_target, check): 216 is_target, check):
229 if build_file_path in data: 217 if build_file_path in data:
230 return data[build_file_path] 218 return data[build_file_path]
231 219
(...skipping 2658 matching lines...) Expand 10 before | Expand all | Expand 10 after
2890 ValidateRunAsInTarget(target, target_dict, build_file) 2878 ValidateRunAsInTarget(target, target_dict, build_file)
2891 ValidateActionsInTarget(target, target_dict, build_file) 2879 ValidateActionsInTarget(target, target_dict, build_file)
2892 2880
2893 # Generators might not expect ints. Turn them into strs. 2881 # Generators might not expect ints. Turn them into strs.
2894 TurnIntIntoStrInDict(data) 2882 TurnIntIntoStrInDict(data)
2895 2883
2896 # TODO(mark): Return |data| for now because the generator needs a list of 2884 # TODO(mark): Return |data| for now because the generator needs a list of
2897 # build files that came in. In the future, maybe it should just accept 2885 # build files that came in. In the future, maybe it should just accept
2898 # a list, and not the whole data dict. 2886 # a list, and not the whole data dict.
2899 return [flat_list, targets, data] 2887 return [flat_list, targets, data]
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698