It looks like the source builtin pushes its own argc and argv onto the arrays but only if it is called with no other arguments.
$ cat /tmp/s
fun() { declare -p BASH_ARGC BASH_ARGV; }
fun arg
$ shopt -u extdebug; source /tmp/s
declare -a BASH_ARGC=([0]="1")
declare -a BASH_ARGV=([0]="/tmp/s")
$ shopt- u extdebug; source /tmp/s foo
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
