Skip to content

Commit

Permalink
Merge pull request #70 from Gargarensis/master
Browse files Browse the repository at this point in the history
Adds _position field to many entities of the Java language
  • Loading branch information
c2nes authored Feb 24, 2020
2 parents f98ffcb + 6d5290d commit 8265e22
Showing 1 changed file with 45 additions and 24 deletions.
69 changes: 45 additions & 24 deletions javalang/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -1366,17 +1366,22 @@ def parse_statement(self):
token = self.tokens.look()
if self.would_accept('{'):
block = self.parse_block()
return tree.BlockStatement(statements=block)
statement = tree.BlockStatement(statements=block)
statement._position = token.position
return statement

elif self.try_accept(';'):
return tree.Statement()
statement = tree.Statement()
statement._position = token.position
return statement

elif self.would_accept(Identifier, ':'):
identifer = self.parse_identifier()
self.accept(':')

statement = self.parse_statement()
statement.label = identifer
statement._position = token.position

return statement

Expand All @@ -1388,9 +1393,11 @@ def parse_statement(self):
if self.try_accept('else'):
else_statement = self.parse_statement()

return tree.IfStatement(condition=condition,
statement = tree.IfStatement(condition=condition,
then_statement=then,
else_statement=else_statement)
statement._position = token.position
return statement

elif self.try_accept('assert'):
condition = self.parse_expression()
Expand All @@ -1401,42 +1408,47 @@ def parse_statement(self):

self.accept(';')

return tree.AssertStatement(condition=condition,
value=value)
statement = tree.AssertStatement(condition=condition, value=value)
statement._position = token.position
return statement

elif self.try_accept('switch'):
switch_expression = self.parse_par_expression()
self.accept('{')
switch_block = self.parse_switch_block_statement_groups()
self.accept('}')

return tree.SwitchStatement(expression=switch_expression,
cases=switch_block)
statement = tree.SwitchStatement(expression=switch_expression, cases=switch_block)
statement._position = token.position
return statement

elif self.try_accept('while'):
condition = self.parse_par_expression()
action = self.parse_statement()

return tree.WhileStatement(condition=condition,
body=action)
statement = tree.WhileStatement(condition=condition, body=action)
statement._position = token.position
return statement

elif self.try_accept('do'):
action = self.parse_statement()
self.accept('while')
condition = self.parse_par_expression()
self.accept(';')

return tree.DoStatement(condition=condition,
body=action)
statement = tree.DoStatement(condition=condition, body=action)
statement._position = token.position
return statement

elif self.try_accept('for'):
self.accept('(')
for_control = self.parse_for_control()
self.accept(')')
for_statement = self.parse_statement()

return tree.ForStatement(control=for_control,
body=for_statement)
statement = tree.ForStatement(control=for_control, body=for_statement)
statement._position = token.position
return statement

elif self.try_accept('break'):
label = None
Expand All @@ -1446,7 +1458,9 @@ def parse_statement(self):

self.accept(';')

return tree.BreakStatement(goto=label)
statement = tree.BreakStatement(goto=label)
statement._position = token.position
return statement

elif self.try_accept('continue'):
label = None
Expand All @@ -1456,7 +1470,9 @@ def parse_statement(self):

self.accept(';')

return tree.ContinueStatement(goto=label)
statement = tree.ContinueStatement(goto=label)
statement._position = token.position
return statement

elif self.try_accept('return'):
value = None
Expand All @@ -1474,14 +1490,17 @@ def parse_statement(self):
value = self.parse_expression()
self.accept(';')

return tree.ThrowStatement(expression=value)
statement = tree.ThrowStatement(expression=value)
statement._position = token.position
return statement

elif self.try_accept('synchronized'):
lock = self.parse_par_expression()
block = self.parse_block()

return tree.SynchronizedStatement(lock=lock,
block=block)
statement = tree.SynchronizedStatement(lock=lock, block=block)
statement._position = token.position
return statement

elif self.try_accept('try'):
resource_specification = None
Expand Down Expand Up @@ -1511,16 +1530,20 @@ def parse_statement(self):
if self.try_accept('finally'):
finally_block = self.parse_block()

return tree.TryStatement(resources=resource_specification,
statement = tree.TryStatement(resources=resource_specification,
block=block,
catches=catches,
finally_block=finally_block)
statement._position = token.position
return statement

else:
expression = self.parse_expression()
self.accept(';')

return tree.StatementExpression(expression=expression)
statement = tree.StatementExpression(expression=expression)
statement._position = token.position
return statement

# ------------------------------------------------------------------------------
# -- Try / catch --
Expand Down Expand Up @@ -1556,8 +1579,7 @@ def parse_catch_clause(self):
self.accept(')')
block = self.parse_block()

return tree.CatchClause(parameter=catch_parameter,
block=block)
return tree.CatchClause(parameter=catch_parameter, block=block)

@parse_debug
def parse_resource_specification(self):
Expand Down Expand Up @@ -1634,8 +1656,7 @@ def parse_switch_block_statement_group(self):
statement = self.parse_block_statement()
statements.append(statement)

return tree.SwitchStatementCase(case=labels,
statements=statements)
return tree.SwitchStatementCase(case=labels, statements=statements)

@parse_debug
def parse_for_control(self):
Expand Down

0 comments on commit 8265e22

Please sign in to comment.