(node)
| 234 | if (3, 2) <= version <= (3, 4): |
| 235 | |
| 236 | def n_call(node): |
| 237 | mapping = self._get_mapping(node) |
| 238 | key = node |
| 239 | for i in mapping[1:]: |
| 240 | key = key[i] |
| 241 | pass |
| 242 | if key.kind.startswith("CALL_FUNCTION_VAR_KW"): |
| 243 | # We may want to fill this in... |
| 244 | # But it is distinct from CALL_FUNCTION_VAR below |
| 245 | pass |
| 246 | elif key.kind.startswith("CALL_FUNCTION_VAR"): |
| 247 | # CALL_FUNCTION_VAR's top element of the stack contains |
| 248 | # the variable argument list, then comes |
| 249 | # annotation args, then keyword args. |
| 250 | # In the most least-top-most stack entry, but position 1 |
| 251 | # in node order, the positional args. |
| 252 | argc = node[-1].attr |
| 253 | nargs = argc & 0xFF |
| 254 | kwargs = (argc >> 8) & 0xFF |
| 255 | # FIXME: handle annotation args |
| 256 | if kwargs != 0: |
| 257 | # kwargs == 0 is handled by the table entry |
| 258 | # Should probably handle it here though. |
| 259 | if nargs == 0: |
| 260 | template = ("%c(*%c, %C)", 0, -2, (1, kwargs + 1, ", ")) |
| 261 | else: |
| 262 | template = ( |
| 263 | "%c(%C, *%c, %C)", |
| 264 | 0, |
| 265 | (1, nargs + 1, ", "), |
| 266 | -2, |
| 267 | (-2 - kwargs, -2, ", "), |
| 268 | ) |
| 269 | self.template_engine(template, node) |
| 270 | self.prune() |
| 271 | else: |
| 272 | gen_function_parens_adjust(key, node) |
| 273 | self.default(node) |
| 274 | |
| 275 | self.n_call = n_call |
| 276 | elif version < (3, 2): |
nothing calls this directly
no test coverage detected