@@ -138,13 +138,22 @@ func getParameterTuple(procedure: NimNode): NimNode =
138
138
tupl.add name
139
139
return tupl
140
140
141
+ func isGetter (procedure: NimNode ): bool =
142
+ let pragmas = procedure[4 ]
143
+ for pragma in pragmas:
144
+ if pragma.eqIdent " getter" :
145
+ return true
146
+ false
147
+
141
148
func isConstant (procedure: NimNode ): bool =
142
149
let pragmas = procedure[4 ]
143
150
for pragma in pragmas:
144
151
if pragma.eqIdent " view" :
145
152
return true
146
153
elif pragma.eqIdent " pure" :
147
154
return true
155
+ elif pragma.eqIdent " getter" :
156
+ return true
148
157
false
149
158
150
159
func isMultipleReturn (returnType: NimNode ): bool =
@@ -166,14 +175,15 @@ func addContractCall(procedure: var NimNode) =
166
175
let function = $ basename (procedure[0 ])
167
176
let parameters = getParameterTuple (procedure)
168
177
let returnType = procedure[3 ][0 ]
178
+ let isGetter = procedure.isGetter
169
179
170
180
procedure.addOverrides ()
171
181
172
182
func call : NimNode =
173
183
if returnType.kind == nnkEmpty:
174
184
quote:
175
185
await call (`contract`, `function`, `parameters`, overrides)
176
- elif returnType.isMultipleReturn:
186
+ elif returnType.isMultipleReturn or isGetter :
177
187
quote:
178
188
return await call (
179
189
`contract`, `function`, `parameters`, `returnType`, overrides
@@ -193,7 +203,10 @@ func addContractCall(procedure: var NimNode) =
193
203
else :
194
204
quote:
195
205
when typeof (result ) isnot Confirmable :
196
- {.error : " unexpected return type, missing {.view.} or {.pure.} ?" .}
206
+ {.error :
207
+ " unexpected return type, " &
208
+ " missing {.view.}, {.pure.} or {.getter.} ?"
209
+ .}
197
210
return await send (`contract`, `function`, `parameters`, overrides)
198
211
199
212
procedure[6 ] =
@@ -229,6 +242,7 @@ macro contract*(procedure: untyped{nkProcDef|nkMethodDef}): untyped =
229
242
230
243
template view * {.pragma .}
231
244
template pure * {.pragma .}
245
+ template getter * {.pragma .}
232
246
233
247
proc subscribe * [E: Event ](contract: Contract ,
234
248
_: type E,
0 commit comments