everything but the toplevel function has internal linkage