(file, signatures, mod, windows)
| 389 | return signatures; |
| 390 | } |
| 391 | generateCFile(file, signatures, mod, windows) { |
| 392 | file.line(`/* FFI GENERATED FILE; DO NOT EDIT! */`); |
| 393 | file.line(); |
| 394 | file.line(`#include "xsffi.h"`); |
| 395 | file.line(); |
| 396 | if (mod) { |
| 397 | file.line(`txAPI* XS = NULL;`); |
| 398 | } |
| 399 | else { |
| 400 | file.line(`extern txAPI gxAPI;`); |
| 401 | file.line(`txAPI* XS = &gxAPI;`); |
| 402 | } |
| 403 | file.line(); |
| 404 | for (let signature of signatures) { |
| 405 | let length = signature.argumentTypes.length; |
| 406 | file.write(`extern ${ signature.resultType.name } `); |
| 407 | file.write(`${ signature.name }(`); |
| 408 | for (let i = 0; i < length; i++) { |
| 409 | if (i > 0) |
| 410 | file.write(`, `); |
| 411 | file.write(`${ signature.argumentTypes[i].name } arg${ i }`); |
| 412 | } |
| 413 | file.write(`);\n`); |
| 414 | } |
| 415 | file.line(); |
| 416 | for (let signature of signatures) { |
| 417 | let length = signature.argumentTypes.length; |
| 418 | file.line(`static void xs_${ signature.name }(txMachine* the) {`); |
| 419 | file.tab(1); |
| 420 | for (let i = 0; i < length; i++) { |
| 421 | signature.argumentTypes[i].writeArgumentConversion(file, i); |
| 422 | } |
| 423 | |
| 424 | file.write(`\t`); |
| 425 | signature.resultType.writeResult(file); |
| 426 | file.write(`${ signature.name }(`); |
| 427 | for (let i = 0; i < length; i++) { |
| 428 | if (i > 0) |
| 429 | file.write(`, `); |
| 430 | signature.argumentTypes[i].writeArgument(file, i); |
| 431 | } |
| 432 | file.write(`);\n`); |
| 433 | |
| 434 | signature.resultType.writeResultConversion(file); |
| 435 | file.tab(-1); |
| 436 | file.line(`}`); |
| 437 | file.line(); |
| 438 | } |
| 439 | if (mod) { |
| 440 | file.line(`void fxBuildFFI(txMachine* the, txAPI* api) {`); |
| 441 | file.tab(1); |
| 442 | file.line(`XS = api;`); |
| 443 | } |
| 444 | else { |
| 445 | file.line(`void FFI_destructor(void* the) {`); |
| 446 | file.line(`}`); |
| 447 | file.line(); |
| 448 | file.line(`void FFI_constructor(txMachine* the) {`); |
no test coverage detected