execution
python.Run
Section titled “python.Run”record RunA run’s state: the heap, the global and local variables by slot, the console, the random generator, the exception
the last expression raised, and the exceptions being handled (innermost first); between preparing a call and entering
it, the bound arguments, the function’s position in the table, the instance a class call makes (its __init__ is the
function called), and the locals a resumed generator’s continuation starts with; the implementation’s choices noted, and
the type texts seen at each node when the run observes types (Run.observe).
python.Signal
Section titled “python.Signal”data SignalWhat a statement returns: a function’s value, or an exception unwinding.
python.Stop
Section titled “python.Stop”data StopWhy a run stops: something the model cannot do, or waiting for input.
python.Code
Section titled “python.Code”def Code : TypePython’s statements.
python.Evaluation
Section titled “python.Evaluation”data EvaluationWhat evaluating an expression gives: the state after it and a value, or the state after it and an exception.
python.Expression
Section titled “python.Expression”def Expression : TypePython’s expressions.
python.Run.start
Section titled “python.Run.start”def Run.start (globals : Nat) (input : String) : RunA run that is about to start: an empty heap, globals global slots, no locals, a console with the input.
python.Heap.chosenOrder
Section titled “python.Heap.chosenOrder”def Heap.chosenOrder (h : Heap) : List StringThe implementation’s choices the order of the sets on the heap h depends on, each named once.
python.Run.assumptions
Section titled “python.Run.assumptions”def Run.assumptions (s : Run) : List StringThe implementation’s choices the run s assumes, each named once: str.hash (a set ordered by a str’s hash,
taken as under PYTHONHASHSEED=0), object.address (a set ordered by objects’ hashes, or an object’s address shown
as text, from the model’s addresses), random.seed (a draw before any seed, taken as after seed(0)) and
libm:math.correctlyRounded (a call of math.pow, or a float **, whose accuracy CPython leaves to the platform’s math library; the
model gives the correctly rounded result).
python.Run.shown
Section titled “python.Run.shown”def Run.shown (s : Run) (asRepr : Bool) (vs : List Value) : Either Raised RunThe values vs about to be shown as text (repr of each when asRepr, else str): the run s noting
object.address when the text shows an object’s address (the model’s allocation rule, not CPython’s memory); showing
a user’s function is what the model cannot do (CPython shows the function’s address, and a function value of the model
has none).
python.Run.afterShown
Section titled “python.Run.afterShown”def Run.afterShown (s : Run) (asRepr : Bool) (vs : List Value) (next : Run -> Evaluation) : EvaluationWhat follows showing the values vs as text (Run.shown, by repr when asRepr): next evaluated on the run
s after it noted that, or what the model cannot do.
python.Run.withHeap
Section titled “python.Run.withHeap”def Run.withHeap (s : Run) (h : Heap) : RunThe run s with the heap h instead.
python.Run.withConsole
Section titled “python.Run.withConsole”def Run.withConsole (s : Run) (c : Console) : RunThe run s with the console c instead.
python.Run.withPending
Section titled “python.Run.withPending”def Run.withPending (s : Run) (e : Option Raised) : RunThe run s with the exception e pending (or none).
python.Observed.add
Section titled “python.Observed.add”def Observed.add (n : String) (t : String) (xs : List (String * List String)) : List (String * List String)The node n’s type texts xs with the text t seen there (each text once per node, in the order first seen; the
nodes in the order first seen).
python.Run.observe
Section titled “python.Run.observe”def Run.observe (s : Run) (n : String) (v : Value) : RunThe run s having seen the value v at the node n: its type text (Value.typeText) noted there.
python.Expr.constant
Section titled “python.Expr.constant”def Expr.constant (v : Value) : ExpressionThe constant v.
python.Expr.bind
Section titled “python.Expr.bind”def Expr.bind (e : Expression) (next : Value -> Expression) : ExpressionThe value of the expression e given to next, or its exception passed on.
python.Expr.all
Section titled “python.Expr.all”def Expr.all (es : List Expression) (next : List Value -> Expression) : ExpressionThe expressions es in order, their values to next (Python evaluates operands left to right).
python.Expr.outcome
Section titled “python.Expr.outcome”def Expr.outcome (f : Heap -> Outcome) : ExpressionThe outcome the data layer’s f gives on the current heap.
python.Expr.changed
Section titled “python.Expr.changed”def Expr.changed (f : Heap -> Changed) : ExpressionA change of the current heap by the data layer’s f.
python.Place
Section titled “python.Place”data PlaceWhere a variable lives: a global slot, a local slot, or a cell (captured by a nested function) whose reference is in a local slot; with its name for the messages.
python.Run.slot
Section titled “python.Run.slot”def Run.slot (slots : Array (Option Value)) (k : Nat) : Option ValueThe value of the slot k among slots.
python.Expr.read
Section titled “python.Expr.read”def Expr.read (p : Place) : ExpressionReading the variable at p: NameError for a global without a value, UnboundLocalError for a local, a cell’s
errors for a captured one.
python.Run.store
Section titled “python.Run.store”def Run.store (s : Run) (p : Place) (v : Value) : RunThe run s with the variable at p given the value v.
python.Run.localValue
Section titled “python.Run.localValue”def Run.localValue (s : Run) (k : Nat) : ValueThe value of the local slot k of the run s (None when it has none).
python.Run.placeValue
Section titled “python.Run.placeValue”def Run.placeValue (s : Run) (p : Place) : ValueThe value in the slot of the variable at p in the run s (None when it has none; a cell’s slot holds its
reference).
python.Exec.keep
Section titled “python.Exec.keep”def Exec.keep (v : Value) (s : Run) : RunKeeping the run s as it is (v, an expression statement’s value, is dropped).
python.Exec.storing
Section titled “python.Exec.storing”def Exec.storing (p : Place) (v : Value) (s : Run) : RunStoring the value v into the variable at p in the run s.
python.Raised.ofBuiltin
Section titled “python.Raised.ofBuiltin”def Raised.ofBuiltin (type : Codes) (message : Codes) : RaisedA built-in exception raised with its type and message.
python.Run.cannot
Section titled “python.Run.cannot”def Run.cannot (e : Raised) : BoolWhether the exception e is one a stop reports: what the model cannot do.
python.Exec.evaluate
Section titled “python.Exec.evaluate”def Exec.evaluate (e : Expression) (store : Value -> Run -> Run) : CodeEvaluating the expression e, then changing the state with store given its value; an exception becomes pending
(what the model cannot do stops the run).
python.Exec.check
Section titled “python.Exec.check”def Exec.check : CodeRaising the pending exception, if there is one.
python.Exec.checkAt
Section titled “python.Exec.checkAt”def Exec.checkAt (node : String) : CodeRaising the pending exception, if there is one, marked as raised at node when it has no node yet (the innermost
one, as a traceback’s last line; not the model’s own nodes, builtin ... and model ...).
python.Exec.at
Section titled “python.Exec.at”def Exec.at (node : String) (work : Code) : CodeA source statement at node: the node for the debugger, the work, the check.
python.Expr.observed
Section titled “python.Expr.observed”def Expr.observed (n : String) (e : Expression) : ExpressionThe expression e, its value’s type noted at the node n (Run.observe).
python.Exec.observePlace
Section titled “python.Exec.observePlace”def Exec.observePlace (n : String) (p : Place) : CodeThe value in the place p noted at the node n (Run.observe); nothing when it has none.
python.Exec.assign
Section titled “python.Exec.assign”def Exec.assign (node : String) (p : Place) (e : Expression) : Codex = e at node, the variable at p being the one target x.
python.Exec.expression
Section titled “python.Exec.expression”def Exec.expression (node : String) (e : Expression) : CodeAn expression statement at node: the value of e is dropped.
python.Expr.print
Section titled “python.Expr.print”def Expr.print (values : List Value) (sep : Value) (finish : Value) : Expressionprint(*values, sep=' ', end='\n'), finish being end: the str of each value (an int too long is ValueError),
sep between, end after (sep and end must be None or a str).
python.Expr.truth
Section titled “python.Expr.truth”def Expr.truth (e : Expression) : ExpressionThe truth of the value of e for if and while (a user’s __bool__ or __len__ is the lowering’s to run
first).
python.Exec.holds
Section titled “python.Exec.holds”def Exec.holds (p : Place) : Run -> Checked Stop BoolA truth already evaluated into the slot of the variable at p, as the machine’s condition.
python.Exec.ifThen
Section titled “python.Exec.ifThen”def Exec.ifThen (node : String) (scratch : Place) (c : Expression) (yes : Code) (no : Code) : Codeif c: yes else: no at node: the condition’s truth evaluated into the place scratch first (it may raise).
python.Exec.whileLoop
Section titled “python.Exec.whileLoop”def Exec.whileLoop (node : String) (scratch : Place) (c : Expression) (body : Code) : Codewhile c: body at node: each round the condition’s truth into the place scratch, leaving when it is false.
python.Exec.breakOut
Section titled “python.Exec.breakOut”def Exec.breakOut (node : String) : Codebreak at node.
python.Exec.continueOn
Section titled “python.Exec.continueOn”def Exec.continueOn (node : String) : Codecontinue at node.
python.Exec.returnWith
Section titled “python.Exec.returnWith”def Exec.returnWith (node : String) (scratch : Place) (e : Expression) : Codereturn e at node: the value evaluated into the place scratch, then returned.
python.Raised.ofInstance
Section titled “python.Raised.ofInstance”def Raised.ofInstance (h : Heap) (a : Nat) (v : Value) : RaisedThe instance v of a user’s exception class, at the address a on the heap h, raised: its classes, its text,
its object.
python.Raised.ofClass
Section titled “python.Raised.ofClass”def Raised.ofClass (h : Heap) (cls : Value) : ChangedThe user’s exception class cls raised as a class: a new instance on the heap h with no arguments, raised.
python.Raised.ofValue
Section titled “python.Raised.ofValue”def Raised.ofValue (h : Heap) (v : Value) : ChangedThe exception the raised value v is, on the heap h: an exception instance (built-in or a user’s), or a class
instantiated with no arguments; TypeError for anything else.
python.Exec.raise
Section titled “python.Exec.raise”def Exec.raise (node : String) (e : Expression) : Coderaise e at node: the exception pending (a value that is not an exception is TypeError).
python.Exec.reraise
Section titled “python.Exec.reraise”def Exec.reraise (node : String) : CodeA bare raise at node: the exception being handled again; RuntimeError when none is.
python.Exec.run
Section titled “python.Exec.run”def Exec.run (fuel : Nat) (c : Code) (s : Run) : Configuration Run Signal StopRunning the statement c on the state s with a budget of fuel moves.
python.Exec.change
Section titled “python.Exec.change”def Exec.change (f : Run -> Run) : CodeThe change f of the state, which cannot fail.
python.Exec.only
Section titled “python.Exec.only”def Exec.only (c : Code) : CodeThe switch block c, not falling through to the next (the machine’s switch is C’s).
python.Exec.caseAt
Section titled “python.Exec.caseAt”def Exec.caseAt (k : Nat) : SwitchLabelThe switch label of block k.
python.Raised.value
Section titled “python.Raised.value”def Raised.value (e : Raised) : ValueThe value the exception e is when it is caught: the object of a user’s exception, else a built-in exception’s
value.
python.Raised.isInstance
Section titled “python.Raised.isInstance”def Raised.isInstance (h : Heap) (cls : Value) (e : Raised) : BoolWhether an except clause’s class cls catches the exception e on the heap h: a built-in class by the
exception’s chain (a built-in exception’s chain from its type), a user’s class by isinstance of the exception’s
object.
python.Raised.isAny
Section titled “python.Raised.isAny”def Raised.isAny (h : Heap) (classes : List Value) (e : Raised) : BoolWhether any of the classes catches the exception e on the heap h.
python.Clause
Section titled “python.Clause”record ClauseAn except clause: the classes it catches (read from the state when an exception arrives; none: a bare
except), where as binds the exception, and its body.
python.Clause.first
Section titled “python.Clause.first”def Clause.first (s : Run) (e : Raised) (clauses : List Clause) : Option ClauseThe first of the clauses that catches the exception e in the run s.
python.Run.catching
Section titled “python.Run.catching”def Run.catching (s : Run) (e : Raised) (c : Clause) : RunThe run s when the clause c catches the exception e: nothing pending, the exception handled, bound with
as.
python.Run.handled
Section titled “python.Run.handled”def Run.handled (s : Run) : RunThe run s after a clause: the exception no longer handled.
python.Exec.tryExcept
Section titled “python.Exec.tryExcept”def Exec.tryExcept (flag : Place) (body : Code) (clauses : List Clause) (otherwise : Code) : Codetry: body except ...: clauses else: otherwise: a clause that catches the exception runs with it handled (its
end, by any way out, stops handling it); no clause catching passes the exception on; else runs when the body raised
nothing (the lowering’s slot flag marks that).
python.Exec.clauseBody
Section titled “python.Exec.clauseBody”def Exec.clauseBody (clauses : List Clause) (e : Raised) : CodeThe body of the one of the clauses that caught the exception e (looked up again from the state the catch
left), chosen by tests one after another: not a switch, whose blocks a break in the clause would leave instead of
the loop.
python.Exec.clauseFrom
Section titled “python.Exec.clauseFrom”def Exec.clauseFrom (all : List Clause) (e : Raised) (clauses : List Clause) (k : Nat) : CodeThe clauses from position k of all: the body of the one at the position of the first that catches the
exception e.
python.Clause.index
Section titled “python.Clause.index”def Clause.index (s : Run) (e : Raised) (clauses : List Clause) (k : Nat) : NatWhere the first of the clauses catching the exception e in the run s is, counting from k.
python.Exec.tryFinally
Section titled “python.Exec.tryFinally”def Exec.tryFinally (body : Code) (cleanup : Code) : Codefinally: the cleanup runs on every way out of the body (an exception’s pending mark cleared first).
python.Function
Section titled “python.Function”record FunctionA user’s function as the program’s table has it: its function value’s name, its parameters, and how many local slots its body uses.
python.Run.construct
Section titled “python.Run.construct”def Run.construct (functions : List Function) (result : Place) (s : Run) (c : Value) (positional : List Value) (keywords : List (Codes * Value)) : EvaluationCalling the user’s class c in the run s with the arguments positional and keywords: a new instance, then
its __init__ (a user’s function among the program’s functions, bound to the instance) prepared with the arguments
and the instance kept for when it returns; without one, TypeError for arguments the class does not take
(Objects.withoutInit), else the instance into result.
python.Run.showsArguments
Section titled “python.Run.showsArguments”def Run.showsArguments (name : String) : Option BoolWhether the built-in name shows its arguments as text, and how (repr is true): repr and ascii by repr;
str, format, print and input (its prompt) by str.
python.Run.assuming
Section titled “python.Run.assuming”def Run.assuming (s : Run) (choice : String) : RunThe run s assuming the implementation’s choice choice (named once).
python.Run.native
Section titled “python.Run.native”def Run.native (s : Run) (name : String) (arguments : List Value) (call : Run -> Evaluation) : EvaluationThe call of the built-in name on the run s, after what it shows of its arguments is noted (Run.shown).
python.Run.raisedForKeys
Section titled “python.Run.raisedForKeys”def Run.raisedForKeys (s : Run) (e : Raised) (keys : List Value) : EvaluationThe exception e raised in the run s while looking up the keys: a KeyError’s message is the key’s repr, so
the run goes on after Run.shown on the keys (or with what the model cannot do); any other exception as it is.
python.Run.builtinClass
Section titled “python.Run.builtinClass”def Run.builtinClass (result : Place) (s : Run) (name : Codes) (positional : List Value) (keywords : List (Codes * Value)) : EvaluationCalling the built-in class name in the run s with the arguments positional and keywords, its result into
result: an exception class makes an instance with the arguments as its args (TypeError for keyword arguments), any
other is the built-in function of its name (int, str, list and so on).
python.Run.prepare
Section titled “python.Run.prepare”def Run.prepare (functions : List Function) (result : Place) (s : Run) (callee : Value) (positional : List Value) (keywords : List (Codes * Value)) : EvaluationPreparing the call of callee in the run s with the arguments positional and keywords, its result into
result: a user’s class makes an instance (Run.construct), a built-in class is called (Run.builtinClass),
anything else is a call of a function among the program’s functions.
python.Function.index
Section titled “python.Function.index”def Function.index (functions : List Function) (name : Codes) (k : Nat) : Option NatWhere the function whose value’s name is name is in the table functions, counting from k.
python.Exec.recursionLimit
Section titled “python.Exec.recursionLimit”def Exec.recursionLimit : NatThe most frames of the user’s functions there are at once (CPython’s recursion limit of 1000, the module’s frame being one).
python.Function.internal
Section titled “python.Function.internal”def Function.internal (name : Codes) : BoolWhether the function in the table named name is the model’s own (a built-in generator’s continuation,
builtin map.<resume>, or a helper such as model sort; a user’s name has no space): CPython runs those in C, so
their frames do not count toward the recursion limit.
python.Exec.builtinName
Section titled “python.Exec.builtinName”def Exec.builtinName (f : Value) : Option StringA built-in function’s name from its value f (builtin len).
python.Run.prepareFunction
Section titled “python.Run.prepareFunction”def Run.prepareFunction (functions : List Function) (result : Place) (s : Run) (callee : Value) (positional : List Value) (keywords : List (Codes * Value)) : EvaluationPreparing the call of callee in the run s once it and the arguments positional and keywords are known: a
user’s function’s parameters bound, the cells its value captured after them (its position in the program’s functions
is the call’s target), a built-in one called right away (its result stored in result, no target; the random module’s
draw from the run’s generator); TypeError for a value that cannot be called.
python.Exec.indexIn
Section titled “python.Exec.indexIn”def Exec.indexIn (functions : List Function) (name : Codes) : Option NatWhere the function whose value’s name is name is in the table functions.
python.Value.functionName
Section titled “python.Value.functionName”def Value.functionName (f : Value) : Option CodesA function value’s name, if f is a user’s function.
python.Exec.noSignature
Section titled “python.Exec.noSignature”def Exec.noSignature : SignatureA signature for nothing (the table is never asked past its end).
python.Run.enter
Section titled “python.Run.enter”def Run.enter (internal : Bool) (slots : Nat) (s : Run) : RunEntering a function from the run s: its locals are the bound parameters and empty slots after them up to slots
(or, resuming a generator, the locals it kept), one frame deeper unless the function is the model’s own (internal,
by Function.internal).
python.Run.leave
Section titled “python.Run.leave”def Run.leave (result : Place) (saved : Run) (t : Run) (r : Option Signal) : RunBack in the caller from the callee’s run t: the locals and depth of saved (the run when the call began) again,
and the value the signal r returned (None when the body ended) stored in result; when a user’s class was called,
the instance instead, TypeError (pending) when __init__ returned anything but None.
python.Run.unwound
Section titled “python.Run.unwound”def Run.unwound (saved : Run) (t : Run) : RunBack in the caller from the callee’s run t, with the locals and depth of saved (the run when the call began),
while an exception unwinds through the call.
python.Signal.unwinds
Section titled “python.Signal.unwinds”def Signal.unwinds (r : Signal) : BoolWhether the signal r passes through a call: an exception does.
python.Exec.callAt
Section titled “python.Exec.callAt”def Exec.callAt (site : String) (functions : List Function) (bodies : Nat -> Code) (result : Place) (k : Nat) : CodeThe call at the source statement site of the function at position k of the program’s functions, its body
(from their bodies) built when the call is reached, its result into result.
python.Exec.dispatch
Section titled “python.Exec.dispatch”def Exec.dispatch (node : String) (functions : List Function) (bodies : Nat -> Code) (result : Place) (prepared : Expression) : CodeA source statement at node that may call a user’s function: the expression prepared prepares the call (or
finishes without one), then the function at the prepared position runs (with the program’s functions and their
bodies), its result into result; the checks raise what is pending.
python.Exec.call
Section titled “python.Exec.call”def Exec.call (node : String) (functions : List Function) (bodies : Nat -> Code) (callee : Expression) (positional : List Expression) (keywords : List (Codes * Expression)) (result : Place) : Coderesult = callee(*positional, **keywords) at node, with the program’s functions and their bodies, where the
callee may be a user’s function or class: the callee and the arguments evaluated left to right, the parameters bound,
then the function’s body run.
python.Run.access
Section titled “python.Run.access”def Run.access (functions : List Function) (result : Place) (s : Run) (a : Access) : EvaluationThe attribute access a as an evaluation in the run s: its value into result, its exception, or the call of
the getter or setter it needs (a user’s code, among the program’s functions).
python.Exec.getAttribute
Section titled “python.Exec.getAttribute”def Exec.getAttribute (node : String) (functions : List Function) (bodies : Nat -> Code) (object : Expression) (name : String) (result : Place) : Coderesult = object.name at node, the attribute name read from object, with the program’s functions and
their bodies: a property’s getter runs as a call.
python.Exec.setAttribute
Section titled “python.Exec.setAttribute”def Exec.setAttribute (node : String) (functions : List Function) (bodies : Nat -> Code) (object : Expression) (name : String) (value : Expression) (scratch : Place) : Codeobject.name = value at node, the attribute name written on object (the value first, then the object, as
CPython evaluates them), with the program’s functions and their bodies: a property’s setter runs as a call, its
result into the place scratch.
python.Exec.pairs
Section titled “python.Exec.pairs”def Exec.pairs (names : List Codes) (values : List Value) : List (Codes * Value)The names paired with the values in order.
python.Expr.function
Section titled “python.Expr.function”def Expr.function (name : String) (cells : List Expression) (defaults : List Expression) : ExpressionThe function value name made by def: with the cells it captures and its defaults evaluated now.
python.Unpack.valueError
Section titled “python.Unpack.valueError”def Unpack.valueError (parts : List String) : ItemsUnpacking failed with a ValueError (its message in parts).
python.Unpack.cannot
Section titled “python.Unpack.cannot”def Unpack.cannot (h : Heap) (v : Value) (e : Raised) : ItemsThe exception e of the iterable v on the heap h while unpacking it: a TypeError says the value cannot be
unpacked.
python.Unpack.taking
Section titled “python.Unpack.taking”def Unpack.taking (fuel : Nat) (h : Heap) (it : Value) (count : Nat) (so : List Value) : TakenThe values of the iterator it on the heap h for unpacking into count targets, after the values so far (the
latest first), taking one item at a time within fuel items (an iterator gives at most one item more than the count,
as CPython takes it): ValueError for too few, or for one too many.
python.Unpack.exactly
Section titled “python.Unpack.exactly”def Unpack.exactly (h : Heap) (v : Value) (count : Nat) : Takena, b = v on the heap h with count targets and no star (CPython’s unpack_iterable): a list or tuple by its
length (the messages say how many it had), anything else one item at a time; TypeError for what cannot be iterated.
python.Unpack.split
Section titled “python.Unpack.split”def Unpack.split (now : Heap) (xs : List Value) (before : Nat) (after : Nat) : Takena, *b, c = v from all the items xs, on the heap now: before items, the rest as a new list, after items.
python.Unpack.starred
Section titled “python.Unpack.starred”def Unpack.starred (h : Heap) (v : Value) (before : Nat) (after : Nat) : Takena, *b, c = v on the heap h: before items, the rest as a new list, after items; ValueError when there are
fewer than those together.
python.Exec.nextItem
Section titled “python.Exec.nextItem”def Exec.nextItem (iterator : Place) (item : Place) (ended : Place) : ExpressionThe next item of a for loop’s iterator, held in the place iterator, into the place item, or the end marked
in the flag ended.
python.Exec.forLoop
Section titled “python.Exec.forLoop”def Exec.forLoop (node : String) (iterator : Place) (item : Place) (ended : Place) (iterable : Expression) (target : Code) (body : Code) (otherwise : Code) : Codefor target in iterable: body else: otherwise at node: an iterator over the iterable into the place iterator,
then each round the next item into the place item (the end marked in the flag ended, which else reads: a break
leaves it unmarked), the target assigned from it, the body.
python.Expr.taken
Section titled “python.Expr.taken”def Expr.taken (t : Taken) : ExpressionThe items t holds as a tuple (the targets are stored from it), or its exception.
python.Value.tupleItems
Section titled “python.Value.tupleItems”def Value.tupleItems (v : Value) : List ValueThe items of the tuple v (none for anything else).
python.Run.storeAll
Section titled “python.Run.storeAll”def Run.storeAll (s : Run) (targets : List Place) (vs : List Value) : RunThe values vs into the places targets in the run s, in order.
python.Run.items
Section titled “python.Run.items”def Run.items (s : Run) (p : Place) : List ValueThe items of a tuple held in the place p in the run s.
python.Run.itemAt
Section titled “python.Run.itemAt”def Run.itemAt (s : Run) (p : Place) (k : Nat) : ValueThe k-th item of a tuple held in the place p in the run s (None past the end).
python.Exec.unpack
Section titled “python.Exec.unpack”def Exec.unpack (node : String) (source : Expression) (targets : List Place) : Codea, b = source at node: the source’s items into the targets, as many as there are targets.
python.Exec.unpackStarred
Section titled “python.Exec.unpackStarred”def Exec.unpackStarred (node : String) (source : Expression) (before : List Place) (rest : Place) (after : List Place) : Codea, *rest, c = source at node: the first and last items into the targets before and after, the rest as a
new list into rest.