From fd7ae1aed617c6f9db94a937a0c89963d7858652 Mon Sep 17 00:00:00 2001 From: heck Date: Fri, 16 Jun 2023 13:26:42 +0200 Subject: [PATCH] ig-c99: add idlparam_to_cparam() - implement parameter mode/type mapping as defined in lms-c99 --- lm-c99/ig-c99.ysl2 | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/lm-c99/ig-c99.ysl2 b/lm-c99/ig-c99.ysl2 index 6808ff5..14ef36b 100644 --- a/lm-c99/ig-c99.ysl2 +++ b/lm-c99/ig-c99.ysl2 @@ -267,7 +267,38 @@ tstylesheet { def "func:idlparam_to_cparam" { param "idltype"; param "mode"; - result "'sfd'"; + const "typeclass", "func:ig_c99_typeclass($idltype)"; + + choose { + when "$mode = 'borrow'" + choose { + when "$typeclass = 'primitive'" + result > «$idltype» + when "$typeclass = 'object'" + result > «$idltype» + } + when "$mode = 'mborrow'" + choose { + when "$typeclass = 'primitive'" + result > «$idltype»* + when "$typeclass = 'object'" + result > «$idltype»* + } + when "$mode = 'claim'" + choose { + when "$typeclass = 'primitive'" + error > invalid mode «$mode» for typeclass «$typeclass» + when "$typeclass = 'object'" + result > «$idltype» + } + when "$mode = 'provide'" + choose { + when "$typeclass = 'primitive'" + error > invalid mode «$mode» for typeclass «$typeclass» + when "$typeclass = 'object'" + result > «$idltype»* + } + } }