MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / generateCFile

Method generateCFile

tools/ffi.js:391–460  ·  view source on GitHub ↗
(file, signatures, mod, windows)

Source from the content-addressed store, hash-verified

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) {`);

Callers 3

addMCConfigCFileMethod · 0.95
addMCRunCFileMethod · 0.95
mcRunMethod · 0.95

Calls 7

tabMethod · 0.80
writeMethod · 0.65
lineMethod · 0.45
writeResultMethod · 0.45
writeArgumentMethod · 0.45
writeResultConversionMethod · 0.45

Tested by

no test coverage detected