@@ -57,11 +57,19 @@ let buildRightHandSideOfEqualSignForCodecDeclarations (paramNames : label list)
57
57
(* This is where the value bindings get made for the codec functions
58
58
but it isn't where the codec functions themselves are generated. Those
59
59
get passed in. This is the outermost layer of the t_encode and t_decode functions *)
60
- let generateCodecDecls typeName paramNames (encoder , decoder ) =
61
- let encoderPat = Pat. var (mknoloc (typeName ^ Utils. encoderFuncSuffix)) in
62
- let encoderParamNames = List. map (fun s -> encoderVarPrefix ^ s) paramNames in
63
- let decoderPat = Pat. var (mknoloc (typeName ^ Utils. decoderFuncSuffix)) in
64
- let decoderParamNames = List. map (fun s -> decoderVarPrefix ^ s) paramNames in
60
+ let generateCodecDecls (typeInfo : typeInfo ) (encoder , decoder ) =
61
+ let encoderPat =
62
+ Pat. var (mknoloc (typeInfo.typeName ^ Utils. encoderFuncSuffix))
63
+ in
64
+ let encoderParamNames =
65
+ List. map (fun s -> encoderVarPrefix ^ s) typeInfo.typeParams
66
+ in
67
+ let decoderPat =
68
+ Pat. var (mknoloc (typeInfo.typeName ^ Utils. decoderFuncSuffix))
69
+ in
70
+ let decoderParamNames =
71
+ List. map (fun s -> decoderVarPrefix ^ s) typeInfo.typeParams
72
+ in
65
73
let encoderBindings =
66
74
match encoder with
67
75
| None -> []
@@ -71,9 +79,7 @@ let generateCodecDecls typeName paramNames (encoder, decoder) =
71
79
~attrs: [attrWarning [% expr " -39" ]]
72
80
encoderPat
73
81
(buildRightHandSideOfEqualSignForCodecDeclarations encoderParamNames
74
- encoder
75
- {typeName; typeParams = paramNames}
76
- true );
82
+ encoder typeInfo true );
77
83
]
78
84
in
79
85
let decoderBindings =
@@ -85,9 +91,7 @@ let generateCodecDecls typeName paramNames (encoder, decoder) =
85
91
~attrs: [attrWarning [% expr " -4" ]; attrWarning [% expr " -39" ]]
86
92
decoderPat
87
93
(buildRightHandSideOfEqualSignForCodecDeclarations decoderParamNames
88
- decoder
89
- {typeName; typeParams = paramNames}
90
- false );
94
+ decoder typeInfo false );
91
95
]
92
96
in
93
97
[] @ encoderBindings @ decoderBindings
@@ -114,6 +118,7 @@ let mapTypeDecl decl =
114
118
match makeEncodeDecodeFlagsFromDecoratorAttributes ptype_attributes with
115
119
| Ok None -> []
116
120
| Ok (Some encodeDecodeFlags ) -> (
121
+ let typeInfo = {typeName; typeParams = getParamNames ptype_params} in
117
122
(* Here we call the code to generate the codecs and build their
118
123
value bindings (the let t_decode = ... part). We have various different
119
124
types to handle, so there's a switch. Most simple cases are covered in
@@ -126,21 +131,17 @@ let mapTypeDecl decl =
126
131
fail ptype_loc " Can't generate codecs for unspecified type"
127
132
| Some {ptyp_desc = Ptyp_variant (rowFields , _ , _ )} , Ptype_abstract ->
128
133
let rowFieldsDec = List. map (fun row -> row.prf_desc) rowFields in
129
- generateCodecDecls typeName
130
- (getParamNames ptype_params)
134
+ generateCodecDecls typeInfo
131
135
(Polyvariants. generateCodecs encodeDecodeFlags rowFieldsDec isUnboxed)
132
136
| Some manifest , _ ->
133
- generateCodecDecls typeName
134
- (getParamNames ptype_params)
137
+ generateCodecDecls typeInfo
135
138
(Codecs. generateCodecs encodeDecodeFlags manifest)
136
139
| None , Ptype_variant decls ->
137
- generateCodecDecls typeName
138
- (getParamNames ptype_params)
140
+ generateCodecDecls typeInfo
139
141
(Variants. generateCodecs encodeDecodeFlags decls isUnboxed)
140
142
| None , Ptype_record decls ->
141
- generateCodecDecls typeName
142
- (getParamNames ptype_params)
143
- (Records. generateCodecs encodeDecodeFlags decls isUnboxed typeName)
143
+ generateCodecDecls typeInfo
144
+ (Records. generateCodecs encodeDecodeFlags decls isUnboxed typeInfo)
144
145
| _ -> fail ptype_loc " This type is not handled by decco" )
145
146
| Error s -> fail ptype_loc s
146
147
0 commit comments