shithub: mc

ref: 0d7d70e5b1a4b5c7ae618d6d04fb30848b18c08f
dir: /lib/std/diriter.myr/

View raw version
use "alloc"
use "dir"
use "option"

pkg std =
	type diriter = dir#
	impl iterable diriter -> byte[:]

	const byentry	: (d : dir# -> diriter)
;;

const byentry = {d
	-> (d : diriter)
}

impl iterable diriter -> byte[:] =
	__iternext__ = {itp, valp
:nextfile
		match dirread((itp# : dir#))
		| `Some ".":	goto nextfile
		| `Some "..":	goto nextfile
		| `Some ent:
			valp# = ent
			-> true
		| `None:
			-> false
		;;
	}

	__iterfin__ = {itp, valp
		std.slfree(valp#)
	}
;;