A better print for debugging

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!

1 Like