ThirdParty/Jasy/jasy/js/parse/VanillaBuilder.py

changeset 5843
76eee727ccd9
parent 3145
a9de05d4a22f
equal deleted inserted replaced
5842:c3f41b959a65 5843:76eee727ccd9
1 # 1 #
2 # Jasy - Web Tooling Framework 2 # Jasy - Web Tooling Framework
3 # Copyright 2010-2012 Zynga Inc. 3 # Copyright 2010-2012 Zynga Inc.
4 # Copyright 2013-2014 Sebastian Werner
4 # 5 #
5 6
6 # 7 #
7 # License: MPL 1.1/GPL 2.0/LGPL 2.1 8 # License: MPL 1.1/GPL 2.0/LGPL 2.1
8 # Authors: 9 # Authors:
9 # - Brendan Eich <brendan@mozilla.org> (Original JavaScript) (2004-2010) 10 # - Brendan Eich <brendan@mozilla.org> (Original JavaScript) (2004-2010)
10 # - Sebastian Werner <info@sebastian-werner.net> (Python Port) (2010) 11 # - Sebastian Werner <info@sebastian-werner.net> (Python Port) (2010)
11 # 12 #
12 13
13 from __future__ import unicode_literals 14 from __future__ import unicode_literals
14 15
15 import jasy.js.parse.Node 16 import jasy.js.parse.Node
16 17
17 class VanillaBuilder: 18 class VanillaBuilder:
18 """The vanilla AST builder.""" 19 """The vanilla AST builder."""
19 20
20 def COMMENTS_add(self, currNode, prevNode, comments): 21 def COMMENTS_add(self, currNode, prevNode, comments):
21 if not comments: 22 if not comments:
22 return 23 return
23 24
24 currComments = [] 25 currComments = []
25 prevComments = [] 26 prevComments = []
26 for comment in comments: 27 for comment in comments:
27 # post comments - for previous node 28 # post comments - for previous node
28 if comment.context == "inline": 29 if comment.context == "inline":
29 prevComments.append(comment) 30 prevComments.append(comment)
30 31
31 # all other comment styles are attached to the current one 32 # all other comment styles are attached to the current one
32 else: 33 else:
33 currComments.append(comment) 34 currComments.append(comment)
34 35
35 # Merge with previously added ones 36 # Merge with previously added ones
36 if hasattr(currNode, "comments"): 37 if hasattr(currNode, "comments"):
37 currNode.comments.extend(currComments) 38 currNode.comments.extend(currComments)
38 else: 39 else:
39 currNode.comments = currComments 40 currNode.comments = currComments
40 41
41 if prevNode: 42 if prevNode:
42 if hasattr(prevNode, "comments"): 43 if hasattr(prevNode, "comments"):
43 prevNode.comments.extend(prevComments) 44 prevNode.comments.extend(prevComments)
44 else: 45 else:
45 prevNode.comments = prevComments 46 prevNode.comments = prevComments
46 else: 47 else:
47 # Don't loose the comment in tree (if not previous node is there, attach it 48 # Don't loose the comment in tree (if not previous node is there, attach it to this node)
48 # to this node)
49 currNode.comments.extend(prevComments) 49 currNode.comments.extend(prevComments)
50 50
51 def IF_build(self, tokenizer): 51 def IF_build(self, tokenizer):
52 return jasy.js.parse.Node.Node(tokenizer, "if") 52 return jasy.js.parse.Node.Node(tokenizer, "if")
53 53
54 def IF_setCondition(self, node, expression): 54 def IF_setCondition(self, node, expression):
55 node.append(expression, "condition") 55 node.append(expression, "condition")
219 pass 219 pass
220 220
221 def CATCH_build(self, tokenizer): 221 def CATCH_build(self, tokenizer):
222 node = jasy.js.parse.Node.Node(tokenizer, "catch") 222 node = jasy.js.parse.Node.Node(tokenizer, "catch")
223 return node 223 return node
224 224
225 def CATCH_wrapException(self, tokenizer): 225 def CATCH_wrapException(self, tokenizer):
226 node = jasy.js.parse.Node.Node(tokenizer, "exception") 226 node = jasy.js.parse.Node.Node(tokenizer, "exception")
227 node.value = tokenizer.token.value 227 node.value = tokenizer.token.value
228 return node 228 return node
229 229
319 if node.type != "function": 319 if node.type != "function":
320 if tokenizer.token.value == "get": 320 if tokenizer.token.value == "get":
321 node.type = "getter" 321 node.type = "getter"
322 else: 322 else:
323 node.type = "setter" 323 node.type = "setter"
324 324
325 return node 325 return node
326 326
327 def FUNCTION_setName(self, node, identifier): 327 def FUNCTION_setName(self, node, identifier):
328 node.name = identifier 328 node.name = identifier
329 329
330 def FUNCTION_initParams(self, node, tokenizer): 330 def FUNCTION_initParams(self, node, tokenizer):
331 node.append(jasy.js.parse.Node.Node(tokenizer, "list"), "params") 331 node.append(jasy.js.parse.Node.Node(tokenizer, "list"), "params")
332 332
333 def FUNCTION_wrapParam(self, tokenizer): 333 def FUNCTION_wrapParam(self, tokenizer):
334 param = jasy.js.parse.Node.Node(tokenizer) 334 param = jasy.js.parse.Node.Node(tokenizer)
335 param.value = tokenizer.token.value 335 param.value = tokenizer.token.value
336 return param 336 return param
337 337
338 def FUNCTION_addParam(self, node, tokenizer, expression): 338 def FUNCTION_addParam(self, node, tokenizer, expression):
339 node.params.append(expression) 339 node.params.append(expression)
340 340
341 def FUNCTION_setExpressionClosure(self, node, expressionClosure): 341 def FUNCTION_setExpressionClosure(self, node, expressionClosure):
342 node.expressionClosure = expressionClosure 342 node.expressionClosure = expressionClosure
343 343
344 def FUNCTION_setBody(self, node, statement): 344 def FUNCTION_setBody(self, node, statement):
345 # copy over function parameters to function body 345 # copy over function parameters to function body
346 #params = getattr(node, "params", None) 346 params = getattr(node, "params", None)
347 #if params: 347 #if params:
348 # statement.params = [param.value for param in params] 348 # statement.params = [param.value for param in params]
349 349
350 node.append(statement, "body") 350 node.append(statement, "body")
351 351
352 def FUNCTION_hoistVars(self, x): 352 def FUNCTION_hoistVars(self, x):
353 pass 353 pass
354 354
560 560
561 def MULTIPLY_finish(self, node): 561 def MULTIPLY_finish(self, node):
562 pass 562 pass
563 563
564 def UNARY_build(self, tokenizer): 564 def UNARY_build(self, tokenizer):
565 # NB: tokenizer.token.type must be "delete", "void", "typeof", "not", 565 # NB: tokenizer.token.type must be "delete", "void", "typeof", "not", "bitwise_not",
566 # "bitwise_not", "unary_plus", "unary_minus", "increment", or "decrement". 566 # "unary_plus", "unary_minus", "increment", or "decrement".
567 if tokenizer.token.type == "plus": 567 if tokenizer.token.type == "plus":
568 tokenizer.token.type = "unary_plus" 568 tokenizer.token.type = "unary_plus"
569 elif tokenizer.token.type == "minus": 569 elif tokenizer.token.type == "minus":
570 tokenizer.token.type = "unary_minus" 570 tokenizer.token.type = "unary_minus"
571 571
572 return jasy.js.parse.Node.Node(tokenizer) 572 return jasy.js.parse.Node.Node(tokenizer)
573 573
574 def UNARY_addOperand(self, node, childNode): 574 def UNARY_addOperand(self, node, childNode):
575 node.append(childNode) 575 node.append(childNode)
576 576
594 594
595 def MEMBER_finish(self, node): 595 def MEMBER_finish(self, node):
596 pass 596 pass
597 597
598 def PRIMARY_build(self, tokenizer, tokenType): 598 def PRIMARY_build(self, tokenizer, tokenType):
599 # NB: tokenizer.token.type must be "null", "this", "true", "false", "identifier", 599 # NB: tokenizer.token.type must be "null", "this", "true", "false", "identifier", "number", "string", or "regexp".
600 # "number", "string", or "regexp".
601 node = jasy.js.parse.Node.Node(tokenizer, tokenType) 600 node = jasy.js.parse.Node.Node(tokenizer, tokenType)
602 if tokenType in ("identifier", "string", "regexp", "number"): 601 if tokenType in ("identifier", "string", "regexp", "number"):
603 node.value = tokenizer.token.value 602 node.value = tokenizer.token.value
604 603
605 return node 604 return node
606 605
607 def PRIMARY_finish(self, node): 606 def PRIMARY_finish(self, node):
608 pass 607 pass
609 608
616 def ARRAYINIT_finish(self, node): 615 def ARRAYINIT_finish(self, node):
617 pass 616 pass
618 617
619 def ARRAYCOMP_build(self, tokenizer): 618 def ARRAYCOMP_build(self, tokenizer):
620 return jasy.js.parse.Node.Node(tokenizer, "array_comp") 619 return jasy.js.parse.Node.Node(tokenizer, "array_comp")
621 620
622 def ARRAYCOMP_setExpression(self, node, expression): 621 def ARRAYCOMP_setExpression(self, node, expression):
623 node.append(expression, "expression") 622 node.append(expression, "expression")
624 623
625 def ARRAYCOMP_setTail(self, node, childNode): 624 def ARRAYCOMP_setTail(self, node, childNode):
626 node.append(childNode, "tail") 625 node.append(childNode, "tail")
627 626
628 def ARRAYCOMP_finish(self, node): 627 def ARRAYCOMP_finish(self, node):
629 pass 628 pass
630 629
631 def COMPTAIL_build(self, tokenizer): 630 def COMPTAIL_build(self, tokenizer):
632 return jasy.js.parse.Node.Node(tokenizer, "comp_tail") 631 return jasy.js.parse.Node.Node(tokenizer, "comp_tail")

eric ide

mercurial