print :: proc(args: ..any, expr := #caller_expression, loc := #caller_location) {
fmt.printf("line %v:\n", loc.line)
paren, start, index, count: int
for index < len(expr) {
char, size := utf8.decode_rune_in_string(expr[index:])
switch char {
case ' ', '\t', '\n':
if start == index {
start += size
}
case '(':
if paren == 0 {
start = index + size
}
paren += 1
case ')', ',':
if paren == 1 {
fmt.printf(" %v = %v\n", args[count], expr[start:index])
start = index + size
count += 1
}
if char == ')' {
paren -= 1
}
}
index += size
}
}
This will print the names alongside the values being printed. Try it!