~sircmpwn/hare-linux

e2c199c642d6435a8f37eb639fc41a97018c8754 — Eyal Sawady 1 year, 11 months ago 988a076
hare::parse::expr: update match binding syntax

And update the rest of the stdlib for the new syntax

Signed-off-by: Eyal Sawady <ecs@d2evs.net>
M io_uring/cqe.ha => io_uring/cqe.ha +4 -4
@@ 14,9 14,9 @@ export fn cqe_seen(ring: *io_uring, cqe: *cqe) void = cq_advance(ring, 1);
// returned CQE to [[cqe_seen]] to advance the queue.
export fn wait(ring: *io_uring) (*cqe | error) = {
	match (get_cqe(ring, 0, 1)) {
	case err: error =>
	case let err: error =>
		return err;
	case cq: nullable *cqe =>
	case let cq: nullable *cqe =>
		assert(cq != null); // XXX: Correct?
		return cq: *cqe;
	};


@@ 101,9 101,9 @@ fn get_cqe(

		match (rt::io_uring_enter(ring.fd,
			submit, wait, flags: uint, null)) {
		case err: rt::errno =>
		case let err: rt::errno =>
			return errors::errno(err);
		case n: uint =>
		case let n: uint =>
			submit -= n;
		};
	};

M io_uring/queue.ha => io_uring/queue.ha +3 -3
@@ 22,7 22,7 @@ export fn must_get_sqe(ring: *io_uring) *sqe = {
	match (get_sqe(ring)) {
	case null =>
		abort("I/O queue full");
	case sq: *sqe =>
	case let sq: *sqe =>
		return sq;
	};
};


@@ 85,9 85,9 @@ fn do_submit(
	if (needs_enter(ring, &flags) || wait != 0) {
		match (rt::io_uring_enter(ring.fd,
				submitted, wait, flags, null)) {
		case err: rt::errno =>
		case let err: rt::errno =>
			return errors::errno(err);
		case n: uint =>
		case let n: uint =>
			return n;
		};
	} else {

M io_uring/register.ha => io_uring/register.ha +12 -12
@@ 11,7 11,7 @@ export fn register_buffers(ring: *io_uring, iov: []rt::iovec) (void | error) = {
	assert(len(iov) <= types::UINT_MAX);
	match (rt::io_uring_register(ring.fd, regop::REGISTER_BUFFERS,
			iov: *[*]rt::iovec, len(iov): uint)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 21,7 21,7 @@ export fn register_buffers(ring: *io_uring, iov: []rt::iovec) (void | error) = {
export fn unregister_buffers(ring: *io_uring) (void | error) = {
	match (rt::io_uring_register(ring.fd,
			regop::UNREGISTER_BUFFERS, null, 0)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 34,7 34,7 @@ export fn register_files(ring: *io_uring, files: []int) (void | error) = {
	assert(len(files) <= types::UINT_MAX);
	match (rt::io_uring_register(ring.fd, regop::REGISTER_FILES,
			files: *[*]int, len(files): uint)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 49,7 49,7 @@ export fn register_files_update(
	assert(len(updates) <= types::UINT_MAX);
	match (rt::io_uring_register(ring.fd, regop::REGISTER_FILES_UPDATE,
			updates: *[*]files_update, len(updates): uint)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 59,7 59,7 @@ export fn register_files_update(
export fn unregister_files(ring: *io_uring) (void | error) = {
	match (rt::io_uring_register(ring.fd,
			regop::UNREGISTER_FILES, null, 0)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 70,7 70,7 @@ export fn unregister_files(ring: *io_uring) (void | error) = {
export fn register_eventfd(ring: *io_uring, fd: int) (void | error) = {
	match (rt::io_uring_register(ring.fd,
			regop::REGISTER_EVENTFD, &fd, 1)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 81,7 81,7 @@ export fn register_eventfd(ring: *io_uring, fd: int) (void | error) = {
export fn register_eventfd_async(ring: *io_uring, fd: int) (void | error) = {
	match (rt::io_uring_register(ring.fd,
			regop::REGISTER_EVENTFD_ASYNC, &fd, 1)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 91,7 91,7 @@ export fn register_eventfd_async(ring: *io_uring, fd: int) (void | error) = {
export fn unregister_eventfd(ring: *io_uring) (void | error) = {
	match (rt::io_uring_register(ring.fd,
			regop::UNREGISTER_EVENTFD, null, 0)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 116,7 116,7 @@ export fn register_personality(ring: *io_uring) int = {
			regop::REGISTER_PERSONALITY, null, 0)) {
	case rt::errno =>
		abort("Unexpected io_uring REGISTER_PERSONALITY error");
	case i: int =>
	case let i: int =>
		return i;
	};
};


@@ 126,7 126,7 @@ export fn register_personality(ring: *io_uring) int = {
export fn unregister_personality(ring: *io_uring, id: int) (void | error) = {
	match (rt::io_uring_register(ring.fd,
			regop::UNREGISTER_PERSONALITY, null, id: uint)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 138,7 138,7 @@ export fn unregister_personality(ring: *io_uring, id: int) (void | error) = {
export fn register_enable_rings(ring: *io_uring) (void | error) = {
	match (rt::io_uring_register(ring.fd,
			regop::REGISTER_ENABLE_RINGS, null, 0)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};


@@ 152,7 152,7 @@ export fn register_restrictions(ring: *io_uring, res: []restriction) (void | err
	assert(len(res) < types::UINT_MAX);
	match (rt::io_uring_register(ring.fd, regop::REGISTER_RESTRICTIONS,
			res: *[*]restriction, len(res): uint)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case int => void;
	};

M io_uring/setup.ha => io_uring/setup.ha +8 -8
@@ 6,9 6,9 @@ use rt;
// fields are initialized by the kernel.
export fn setup(entries: u32, params: *params) (io_uring | error) = {
	const fd = match (rt::io_uring_setup(entries, params)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case fd: int =>
	case let fd: int =>
		yield fd;
	};



@@ 36,9 36,9 @@ export fn setup(entries: u32, params: *params) (io_uring | error) = {
			rt::PROT_READ | rt::PROT_WRITE,
			rt::MAP_SHARED | rt::MAP_POPULATE,
			fd, OFF_SQ_RING)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case ptr: *void =>
	case let ptr: *void =>
		yield ptr;
	};



@@ 48,9 48,9 @@ export fn setup(entries: u32, params: *params) (io_uring | error) = {
			rt::PROT_READ | rt::PROT_WRITE,
			rt::MAP_SHARED | rt::MAP_POPULATE,
			fd, OFF_CQ_RING)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case ptr: *void =>
	case let ptr: *void =>
		yield ptr;
	};



@@ 67,9 67,9 @@ export fn setup(entries: u32, params: *params) (io_uring | error) = {
			rt::PROT_READ | rt::PROT_WRITE,
			rt::MAP_SHARED | rt::MAP_POPULATE,
			fd, OFF_SQES)) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case ptr: *void =>
	case let ptr: *void =>
		yield ptr: *[*]sqe;
	};


M io_uring/uring.ha => io_uring/uring.ha +1 -1
@@ 12,7 12,7 @@ export fn strerror(err: error) const str = {
	match (err) {
	case nobuffers =>
		return "Buffer pool exhausted";
	case err: errors::error =>
	case let err: errors::error =>
		return errors::strerror(err);
	};
};

M signalfd/signalfd.ha => signalfd/signalfd.ha +4 -4
@@ 37,9 37,9 @@ export fn signalfd(
	flags: int,
) (int | errors::error) = {
	match (rt::signalfd(fd, mask, flags)) {
	case fd: int =>
	case let fd: int =>
		return fd;
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	};
};


@@ 48,9 48,9 @@ export fn signalfd(
export fn readsignal(fd: int) (siginfo | errors::error) = {
	let si = siginfo { ... };
	match (rt::read(fd, &si, size(siginfo))) {
	case err: rt::errno =>
	case let err: rt::errno =>
		return errors::errno(err);
	case z: size =>
	case let z: size =>
		assert(z == size(siginfo));
		return si;
	};

M vdso/vdso.ha => vdso/vdso.ha +4 -4
@@ 41,7 41,7 @@ fn get_vdso_ctx() nullable *vdso_ctx = {
	const eh = match (sys_infoehdr()) {
	case null =>
		return null;
	case x: *elf::header64 =>
	case let x: *elf::header64 =>
		yield x;
	};



@@ 121,13 121,13 @@ fn vdso_checkver(ctx: *vdso_ctx, version: str, num: u32) bool = {
	let cur = match (ctx.verdef) {
	case null =>
		return true;
	case vd: *elf::verdef64 =>
	case let vd: *elf::verdef64 =>
		yield vd;
	};
	const versym = match (ctx.versym) {
	case null =>
		return true;
	case vs: *[*]u16 =>
	case let vs: *[*]u16 =>
		yield vs[num] & 0x7ff;
	};
	for (cur != prev) {


@@ 149,7 149,7 @@ export fn getsym(symname: str, symver: str) nullable *void = {
	const ctx = match (get_vdso_ctx()) {
	case null =>
		return null;
	case x: *vdso_ctx =>
	case let x: *vdso_ctx =>
		yield x;
	};