Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if Options.isFullCompat() and elements:
source_ref = elements[-1].getSourceReference()
# Note: This would happen in optimization instead, but lets just do it
# immediately to save some time.
if constant:
if sequence_kind == "TUPLE":
const_type = tuple
elif sequence_kind == "LIST":
const_type = list
elif sequence_kind == "SET":
const_type = set
else:
assert False, sequence_kind
return ExpressionConstantRef(
constant = const_type(
element.getConstant()
for element in
elements
),
source_ref = source_ref,
user_provided = True
)
else:
if sequence_kind == "TUPLE":
return ExpressionMakeTuple(
elements = elements,
source_ref = source_ref
)
elif sequence_kind == "LIST":
return ExpressionMakeList(
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,
user_provided = True
),
source_ref = source_ref
),
makeTryExceptSingleHandlerNode(
tried = makeStatementsSequenceFromStatement(
statement = StatementAssignmentVariable(
variable_ref = ExpressionTargetTempVariableRef(
variable = tmp_keys_variable.makeReference( result ),
source_ref = source_ref
),
source = ExpressionCallEmpty(
called = ExpressionAttributeLookup(
expression = star_dict_variable_ref.makeCloneAt(
return ExpressionSliceLookup(
expression = buildNode( provider, node.value, source_ref ),
lower = lower,
upper = upper,
source_ref = source_ref
)
elif kind == "ExtSlice":
return ExpressionSubscriptLookup(
expression = buildNode( provider, node.value, source_ref ),
subscript = buildExtSliceNode( provider, node, source_ref ),
source_ref = source_ref
)
elif kind == "Ellipsis":
return ExpressionSubscriptLookup(
expression = buildNode( provider, node.value, source_ref ),
subscript = ExpressionConstantRef(
constant = Ellipsis,
source_ref = source_ref
),
source_ref = source_ref
)
else:
assert False, kind
def buildParameterKwDefaults(provider, node, function_body, source_ref):
# Build keyword only arguments default values. We are hiding here, that it
# is a Python3 only feature.
if Utils.python_version >= 300:
kw_only_names = function_body.getParameters().getKwOnlyParameterNames()
if kw_only_names:
keys = []
values = []
for kw_only_name, kw_default in \
zip( kw_only_names, node.args.kw_defaults ):
if kw_default is not None:
keys.append(
ExpressionConstantRef(
constant = kw_only_name,
source_ref = source_ref
)
)
values.append(
buildNode( provider, kw_default, source_ref )
)
kw_defaults = makeDictCreationOrConstant(
keys = keys,
values = values,
lazy_order = False,
source_ref = source_ref
)
else:
kw_defaults = None
),
source_ref = source_ref
),
StatementAssignmentVariable(
variable_ref = ExpressionTargetTempVariableRef(
variable = tmp_class,
source_ref = source_ref
),
source = ExpressionCallNoKeywords(
called = ExpressionTempVariableRef(
variable = tmp_metaclass,
source_ref = source_ref
),
args = ExpressionMakeTuple(
elements = (
ExpressionConstantRef(
constant = node.name,
source_ref = source_ref,
user_provided = True
),
ExpressionTempVariableRef(
variable = tmp_bases,
source_ref = source_ref
),
ExpressionTempVariableRef(
variable = tmp_class_dict,
source_ref = source_ref
)
),
source_ref = source_ref
),
source_ref = source_ref
source_ref = source_ref
)
statements += [
body,
StatementAssignmentVariable(
variable_ref = class_target_variable_ref,
source = ExpressionCall(
called = ExpressionTempVariableRef(
variable = tmp_metaclass,
source_ref = source_ref
),
args = makeSequenceCreationOrConstant(
sequence_kind = "tuple",
elements = (
ExpressionConstantRef(
constant = node.name,
source_ref = source_ref,
user_provided = True
),
ExpressionTempVariableRef(
variable = tmp_bases,
source_ref = source_ref
),
ExpressionBuiltinLocals(
source_ref = source_ref
)
),
source_ref = source_ref
),
kw = ExpressionTempVariableRef(
variable = tmp_class_decl_dict,
)
else:
return "Slice", (
buildNode( provider, node.value, source_ref ),
lower,
upper
)
elif slice_kind == "ExtSlice":
return "Subscript", (
buildNode( provider, node.value, source_ref ),
buildExtSliceNode( provider, node, source_ref )
)
elif slice_kind == "Ellipsis":
return "Subscript", (
buildNode( provider, node.value, source_ref ),
ExpressionConstantRef(
constant = Ellipsis,
source_ref = source_ref
)
)
else:
assert False, slice_kind
elif kind in ( "Tuple", "List" ):
return "Tuple", tuple(
decodeAssignTarget(
provider = provider,
node = sub_node,
source_ref = source_ref,
allow_none = False
)
for sub_node in
node.elts
statement = StatementBreakLoop(source_ref)
),
public_exc = False,
source_ref = source_ref
),
StatementAssignmentVariable(
variable_ref = ExpressionTargetTempVariableRef(
variable = tmp_key_variable.makeReference(result),
source_ref = source_ref
),
source = ExpressionSubscriptLookup(
expression = ExpressionTempVariableRef(
variable = tmp_item_variable.makeReference(result),
source_ref = source_ref
),
subscript = ExpressionConstantRef(
constant = 0,
source_ref = source_ref,
user_provided = True
),
source_ref = source_ref
),
source_ref = source_ref
),
StatementConditional(
condition = ExpressionComparison(
comparator = "In",
left = ExpressionTempVariableRef(
variable = tmp_key_variable.makeReference(result),
source_ref = source_ref
),
right = kw_variable_ref.makeCloneAt(source_ref),
elif function_statements_body is None:
function_statements_body = makeStatementsSequenceFromStatement(
statement = StatementReturn(
expression = ExpressionConstantRef(
constant = None,
source_ref = source_ref.atInternal()
),
source_ref = source_ref.atInternal()
)
)
elif not function_statements_body.isStatementAborting():
function_statements_body.setStatements(
function_statements_body.getStatements() +
(
StatementReturn(
expression = ExpressionConstantRef(
constant = None,
source_ref = source_ref
),
source_ref = source_ref.atInternal()
),
)
)
function_body.setBody(
function_statements_body
)
annotations = buildParameterAnnotations(provider, node, source_ref)
decorated_body = ExpressionFunctionCreation(
function_ref = ExpressionFunctionRef(
tmp_handler_indicator_variable = provider.allocateTempVariable(
temp_scope = temp_scope,
name = "unhandled_indicator"
)
for handler in handlers:
statements = (
StatementAssignmentVariable(
variable_ref = ExpressionTargetTempVariableRef(
variable = tmp_handler_indicator_variable.makeReference(
provider
),
source_ref = source_ref.atInternal()
),
source = ExpressionConstantRef(
constant = False,
source_ref = source_ref
),
source_ref = no_raise.getSourceReference().atInternal()
),
handler.getExceptionBranch()
)
handler.setExceptionBranch(
makeStatementsSequence(
statements = statements,
allow_none = True,
source_ref = source_ref
)
)