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»* + } + } }