NAME

   FFI::TinyCC::Inline - Embed Tiny C code in your Perl program

VERSION

   version 0.28

SYNOPSIS

    use FFI::TinyCC::Inline qw( tcc_inline );

    tcc_inline q{
      int square(int num)
      {
        return num*num;
      }
    };

    print square(4), "\n"; # prints 16

    use FFI::TinyCC::Inline qw( tcc_eval );

    # sets value to 6:
    my $value = tcc_eval q{
      int main(int a, int b, int c)
      {
        return a + b + c;
      }
    }, 1, 2, 3;

DESCRIPTION

   This module provides a simplified interface to FFI::TinyCC, that allows
   you to write Perl subs in C. It is inspired by XS::TCC, but it uses
   FFI::Platypus to create bindings instead of XS.

OPTIONS

   You can specify Tiny C options using the scoped pragmata, like so:

    use FFI::TinyCC::Inline options => "-I/foo/include -L/foo/lib -DFOO=1";

    # prints 1
    print tcc_eval q{
    #include <foo.h> /* will search /foo/include
    int main()
    {
      return FOO; /* defined and set to 1 */
    }
    };

FUNCTIONS

tcc_inline

    tcc_inline $c_code;

   Compile the given C code using Tiny C and inject any functions found
   into the current package. An exception will be thrown if the code fails
   to compile, or if FFI::TinyCC::Inline does not recognize one of the
   argument or return types.

    tcc_inline q{
      int foo(int a, int b, int c)
      {
        return a + b + c;
      }
    };

    print foo(1,2,3), "\n"; # prints 6

   The special argument type of (int argc, char **argv) is recognized and
   will be translated from the list of arguments passed in. Example:

    tcc_inline q{
      void foo(int argc, const char **argv)
      {
        int i;
        for(i=0; i<argc; i++)
        {
          puts(argv[i]);
        }
      }
    };

    foo("one", "two", "three"); # prints "one\ntwo\nthree\n"

tcc_eval

    tcc_eval $c_code, @arguments;

   This compiles the C code and executes the main function, passing in the
   given arguments. Returns the result.

SEE ALSO

   FFI::TinyCC

   C::Blocks

BUNDLED SOFTWARE

   This package also comes with a parser that was shamelessly stolen from
   XS::TCC, which I strongly suspect was itself shamelessly "borrowed"
   from Inline::C::Parser::RegExp

   The license details for the parser are:

   Copyright 2002 Brian Ingerson Copyright 2008, 2010-2012 Sisyphus
   Copyright 2013 Steffen Muellero

   This program is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.

AUTHOR

   Author: Graham Ollis <[email protected]>

   Contributors:

   aero

   Dylan Cali (calid)

   pipcet

COPYRIGHT AND LICENSE

   This software is copyright (c) 2015-2018 by Graham Ollis.

   This is free software; you can redistribute it and/or modify it under
   the same terms as the Perl 5 programming language system itself.