
If the argument of 'source' ends in '.star' it will be interpreted as a starlark script. If the argument of 'source' is '-' an interactive starlark repl will be started. For documentation on how the starlark execution environment works see Documentation/cli/starlark.md. The starlark API is autogenerated from the JSON-RPC API by script/gen-starlark-bindings.go. In general for each JSON-RPC API a single global starlark function is created. When one of those functions is called (through a starlark script) the arguments are converted to go structs using reflection. See unmarshalStarlarkValue in pkg/terminal/starbind/conv.go. If there are no type conversion errors the JSON-RPC call is executed. The return value of the JSON-RPC call is converted back into a starlark value by interfaceToStarlarkValue (same file): * primitive types (such as integers, floats or strings) are converted by creating the corresponding starlark value. * compound types (such as structs and slices) are converted by wrapping their reflect.Value object into a type that implements the relevant starlark interfaces. * api.Variables are treated specially so that their Value field can be of the proper type instead of always being a string. Implements #1415, #1443
17 lines
513 B
Plaintext
17 lines
513 B
Plaintext
def command_linked_list(args):
|
|
"""Prints the contents of a linked list.
|
|
|
|
linked_list <var_name> <next_field_name> <max_depth>
|
|
|
|
Prints up to max_depth elements of the linked list variable 'var_name' using 'next_field_name' as the name of the link field.
|
|
"""
|
|
var_name, next_field_name, max_depth = args.split(" ")
|
|
max_depth = int(max_depth)
|
|
next_name = var_name
|
|
v = eval(None, var_name).Variable.Value
|
|
for i in range(0, max_depth):
|
|
print(str(i)+":",v)
|
|
if v[0] == None:
|
|
break
|
|
v = v[next_field_name]
|