NAME

tools/build/ops2c.pl - Parser for .ops files

SYNOPSIS

    % perl tools/build/ops2c.pl trans [--help] [--no-lines] [--dynamic]
                                      [--core | input.ops [input2.ops ...]]
       trans := C | CGoto | CGP | CSwitch | CPrederef

For example:

    % perl tools/build/ops2c.pl C --core

    % perl tools/build/ops2c.pl C --dynamic myops.ops

DESCRIPTION

This script uses a supplied transform to create a pair of C header and implementation files from the operation definitions found in one or more *.ops files.

Transforms

The first command-line argument is the last package name component of a subclass of Parrot::OpTrans. These subclasses all have full names of the form Parrot::OpTrans::*. An instance of the class is created and later consulted for various bits of information needed to generate the C code. Each creates a different type of run loop.

C
Create the function-based (slow or fast core) run loop.
CGoto
Create the goto run loop.
CGP
Create the goto and predereferenced run loop.
CSwitch
Create the switched and predereferenced run loop.
CPrederef
Create the predereferenced run loop.

Options

--help
Print synopsis.
--dynamic
Indicate that the opcode library is dynamic.
--core
Build the Parrot core opcode library.
--no-lines
Do not generate #line directives in the generated C code.

NOTE

Most of the functionality in tools/build/ops2c.pl has been extracted into methods and subroutines found in Parrot::Ops2c::Utils and Parrot::Ops2c::Auxiliary. This refactoring facilitates unit testing and coverage analysis of that functionality. A test suite has been provided in t/tools/ops2cutils/. It is recommended that future refactoring of this functionality proceed in a test-driven manner, i.e., tests should be written reflecting any changes to interface or functionality; the code should be written which implements the revisions; the code should be tested; and coverage analysis should be performed with Devel::Cover to measure the extent to which the tests exercise the code.

AUTHORS

Based on the commit logs, the following members of the Parrot project have contributed to this program:

    ambs bernhard boemmels brentdax chip
    coke dan gregor grunblatt jgoff
    jkeenan jonathan josh jrieks leo
    mikescott mrjoltcola nicholas particle paultcochrane
    petdance rgrjr robert simon

SEE ALSO

tools/build/ops2pm.pl
Parrot::OpsFile
Parrot::Op
Parrot::OpTrans
Parrot::OpTrans::C
Parrot::OpTrans::CGoto
Parrot::OpTrans::CGP
Parrot::OpTrans::CSwitch
Parrot::OpTrans::CPrederef
Parrot::Ops2c::Utils
Parrot::Ops2c::Auxiliary