Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
variable = tmp_key_variable.makeReference( result ),
source_ref = source_ref
),
source = ExpressionSubscriptLookup(
expression = star_dict_variable_ref.makeCloneAt( source_ref ),
subscript = ExpressionTempVariableRef(
variable = tmp_key_variable.makeReference( result ),
source_ref = source_ref
),
source_ref = source_ref
),
source_ref = source_ref
)
)
mapping_loop_body = StatementsSequence(
statements = statements,
source_ref = source_ref
)
statements = (
# Initializing the temp variable outside of try/except, because code
# generation does not yet detect that case properly. TODO: Can be
# removed once code generation is apt enough.
StatementAssignmentVariable(
variable_ref = ExpressionTargetTempVariableRef(
variable = tmp_keys_variable.makeReference( result ),
source_ref = source_ref
),
source = ExpressionConstantRef(
constant = None,
source_ref = source_ref,
StatementLoop(
body=StatementsSequence(
statements=mergeStatements(loop_statements), source_ref=source_ref
),
source_ref=source_ref,
)
)
if tmp_iter_variable is not None:
nested_statements.append(
StatementReleaseVariable(
variable=tmp_iter_variable, source_ref=source_ref
)
)
current_body = StatementsSequence(
statements=mergeStatements(nested_statements, False), source_ref=source_ref
)
statements.append(current_body)
statements = mergeStatements(statements)
release_statements = [
StatementReleaseVariable(variable=tmp_variable, source_ref=source_ref)
for tmp_variable in tmp_variables
]
return statements, release_statements
source_ref = source_ref
),
source = ExpressionConstantRef(
constant = {},
source_ref = source_ref,
user_provided = True
),
source_ref = source_ref
),
StatementLoop(
body = mapping_loop_body,
source_ref = source_ref
),
)
mapping_case = StatementsSequence(
statements = statements,
source_ref = source_ref
)
temp_scope = result.allocateTempScope("dict")
tmp_iter_variable = result.allocateTempVariable(temp_scope, "iter")
tmp_item_variable = result.allocateTempVariable(temp_scope, "item")
tmp_key_variable = result.allocateTempVariable(temp_scope, "key")
final += [
StatementDelVariable(
variable_ref = ExpressionTargetTempVariableRef(
variable = tmp_iter_variable.makeReference(result),
source_ref = source_ref
),
def makeTryFinallyStatement(provider, tried, final, source_ref, public_exc = False):
# Complex handling, due to the many variants, pylint: disable=too-many-branches
if type(tried) in (tuple, list):
if tried:
tried = makeStatementsSequenceFromStatements(
*tried
)
else:
tried = None
if type(final) in (tuple, list):
if final:
final = StatementsSequence(
statements = mergeStatements(final, False),
source_ref = source_ref
)
else:
final = None
if tried is not None and not tried.isStatementsSequence():
tried = makeStatementsSequenceFromStatement(tried)
if final is not None and not final.isStatementsSequence():
final = makeStatementsSequenceFromStatement(final)
# Trivial case, nothing tried needs only do the final stuff.
if tried is None:
return final
# Trivial case, nothing final needs nothing but the tried stuff.
May have to invert condition to achieve that.
"""
if yes_branch is None:
condition = ExpressionOperationNOT(
operand=condition, source_ref=condition.getSourceReference()
)
yes_branch, no_branch = no_branch, yes_branch
if yes_branch is not None and not yes_branch.isStatementsSequence():
yes_branch = StatementsSequence(statements=(yes_branch,), source_ref=source_ref)
if no_branch is not None and not no_branch.isStatementsSequence():
no_branch = StatementsSequence(statements=(no_branch,), source_ref=source_ref)
return StatementConditional(
condition=condition,
yes_branch=yes_branch,
no_branch=no_branch,
source_ref=source_ref,
)
values = conditions,
source_ref = source_ref
),
yes_branch = makeStatementsSequenceFromStatement(
statement = current_body
),
no_branch = None,
source_ref = source_ref
)
)
else:
loop_statements.append(current_body)
nested_statements.append(
StatementLoop(
body = StatementsSequence(
statements = mergeStatements(loop_statements),
source_ref = source_ref
),
source_ref = source_ref
)
)
if tmp_iter_variable is not None:
nested_statements.append(
StatementDelVariable(
variable_ref = ExpressionTargetTempVariableRef(
variable = tmp_iter_variable.makeReference(
function_body
),
source_ref = source_ref
),
break
if return_handler is not None and tried_statement.mayReturn():
break
post_statements.insert(0, tried_statement)
tried_statements = list(tried_statements)
del tried_statements[-1]
if pre_statements or post_statements:
assert tried_statements # Should be dealt with already
tried.setStatements(tried_statements)
result = StatementsSequence(
statements=pre_statements + [self] + post_statements,
source_ref=self.getSourceReference(),
)
def explain():
# TODO: We probably don't want to say this for re-formulation ones.
result = "Reduced scope of tried block."
if pre_statements:
result += " Leading statements at %s." % (
",".join(
x.getSourceReference().getAsString() + "/" + str(x)
for x in pre_statements
)
)
dict_case = StatementsSequence(
statements = statements,
source_ref = source_ref
)
statements = (
StatementConditional(
condition = star_dict_variable_ref.makeCloneAt(source_ref),
yes_branch = dict_case,
no_branch = None,
source_ref = source_ref
),
)
dict_case = StatementsSequence(
statements = statements,
source_ref = source_ref
)
tried = StatementConditional(
condition = ExpressionOperationNOT(
operand = ExpressionBuiltinIsinstance(
instance = star_dict_variable_ref.makeCloneAt(source_ref),
cls = ExpressionBuiltinRef(
builtin_name = "dict",
source_ref = source_ref
),
source_ref = source_ref
),
source_ref = source_ref
),
variable = tmp_break_indicator_variable.makeReference( provider ),
source_ref = source_ref
),
right = ExpressionConstantRef(
constant = True,
source_ref = source_ref
),
source_ref = source_ref
),
yes_branch = else_block,
no_branch = None,
source_ref = source_ref
)
]
return StatementsSequence(
statements = statements,
source_ref = source_ref
)
def makeTryFinallyStatement(tried, final, source_ref):
if type(tried) in (tuple, list):
tried = StatementsSequence(
statements = tried,
source_ref = source_ref
)
if type(final) in (tuple, list):
final = StatementsSequence(
statements = final,
source_ref = source_ref
)
if tried is not None and not tried.isStatementsSequence():
tried = makeStatementsSequenceFromStatement(tried)
if final is not None and not final.isStatementsSequence():
final = makeStatementsSequenceFromStatement(final)
return StatementTryFinally(
tried = tried,