Imager::Expr::Assem - an assembler for producing code for the Imager register machine
use Imager::Expr::Assem; my $expr = Imager::Expr->new(assem=>'...', ...)
This module is a simple Imager::Expr compiler that compiles a low-level language that has a nearly 1-to-1 relationship to the internal representation used for compiled regmach code.
Each line can contain multiple statements separated by semi-colons.
Anything after '#' in a line is ignored.
Types of statements:
var
name:type
defines variable name to have type, which can be any of 'n' or 'num' for a numeric type or 'pixel', 'p' or 'c' for a pixel or color type.
Variable names cannot include whitespace.
Operators can be split into 3 basic types, those that have a result value, those that don't and the null operator, eg. jump has no value.
The format for operators that return a value is typically:
result = operator operand ...
and for those that don't return a value:
operator operand
where operator is any valid regmach operator, result is any variable
defined with var
, and operands are variables, constants or
literals, or for jump operators, labels.
The set operator can be simplified to:
result = operator
All operators maybe preceded by a label, which is any non-whitespace text immediately followed by a colon (':').
Note that the current optimizer may produce incorrect optimization for your code, fortunately the optimizer will disable itself if you include any jump operator in your code. A single jump to anywhere after your final ret operator can be used to disable the optimizer without slowing down your code.
There's currently no high-level code generation that can generate code with loops or real conditions.
Imager(3), transform.perl, regmach.c
Tony Cook <tony@develop-help.com>