All Packages Class Hierarchy This Package Previous Next Index
Class gnu.jel.Optimizer
java.lang.Object
|
+----gnu.jel.Optimizer
- public class Optimizer
- extends Object
This class handles storage of the expressions automatic widening type
conversions and optimizations.
Currently the only supported type of optimization is evaluation of
constant subexpressions. Unlike other compilers JEL not only evaluates
arithmetic operators on constants but also attempts to call some (those
which marked stateless) functions if all their arguments are constants.
For example, expression "sin(1)" will be completely evaluated at compile
time.
The gnu.jel.Library class handles details on which functions can be
evaluated at compile time and which can not, see it's documentation for
details.
- Author:
- Konstantin L. Metlov (metlov@fzu.cz)
- See Also:
- Library
-
code
- Double linked list of operations in this expression.
-
Optimizer(Library)
- Constructs the new "empty" optimizer with the library specified.
-
binaryOP(int, boolean)
- Generates a binary operation.
-
binaryOP_param()
- Specifies that the parameter for the binary operation is now in stack.
-
compile()
- Compiles the expression.
-
compileBits()
- Compiles the expression into an ExpressionBits object.
-
conditional_end()
- Finishes generation of conditional ?: .
-
conditional_false()
- Continues generation of conditional ?: .
-
conditional_true()
- Starts generation of conditional ?: .
-
convert(Class)
- Generates an explicit type conversion operation.
-
convert(Class, boolean)
- Generates an explicit type conversion operation.
-
finish()
- Finishes the function.
-
function_call(String)
- Generates the function call.
-
function_param()
- Specifies that the parameter for the function is now in stack.
-
function_start()
- Denotes the start of the function call.
-
load(boolean)
- Generates a "load boolean constant" operation.
-
load(byte)
- Generates a "load byte constant" operation.
-
load(char)
- Generates a "load char constant" operation.
-
load(double)
- Generates a "load double constant" operation.
-
load(float)
- Generates a "load float constant" operation.
-
load(int)
- Generates a "load int constant" operation.
-
load(long)
- Generates a "load long constant" operation.
-
load(short)
- Generates a "load short constant" operation.
-
load(String)
- Generates a "load String constant" operation.
-
logical_not()
- Inverts result of group of logical operators.
-
logical_not_start()
- Denotes start of group of logical operators whose result should be inverted.
-
main(String[])
- Performs unitary test of the interpreter.
-
optimize(int)
- Optimizes the function.
-
optimizeIteration(OPlist)
- Performs one optimization pass on the given list of operations.
-
test(Tester)
- Performs unitary test of the interpreter.
-
toString()
- Represents the expression, contained in this optimizer as String.
-
unary(int)
- Generates an unary operation.
code
protected OPlist code
- Double linked list of operations in this expression.
Optimizer
public Optimizer(Library lib)
- Constructs the new "empty" optimizer with the library specified.
- Parameters:
- lib - is the library, used for function names resolution.
load
public void load(boolean c)
- Generates a "load boolean constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(byte c)
- Generates a "load byte constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(char c)
- Generates a "load char constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(short c)
- Generates a "load short constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(int c)
- Generates a "load int constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(long c)
- Generates a "load long constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(float c)
- Generates a "load float constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(double c)
- Generates a "load double constant" operation.
- Parameters:
- c - is the constant to load.
load
public void load(String s)
- Generates a "load String constant" operation.
- Parameters:
- s - is the String constant to load.
convert
public void convert(Class to,
boolean widening) throws IllegalStateException
- Generates an explicit type conversion operation.
It has the sense to call this function only for narrowing
conversions (see §5.1.3 and §5.1.5 of the Java Language
Specification (JLS) ).
Widening ( §5.1.2, §5.1.4 of JLS) type conversions are
performed by this compiler automatically.
- Parameters:
- to - is the class to convert to.
- widening - if true prohibits doing narrowing conversions.
- Throws: IllegalStateException
- if requested conversion is not supported.
convert
public void convert(Class to) throws IllegalStateException
- Generates an explicit type conversion operation.
This function is equivalent to convert(to,false).
Widening ( §5.1.2, §5.1.4 of JLS) type conversions are
performed by this compiler automatically.
- Parameters:
- to - is the class to convert to.
- Throws: IllegalStateException
- if requested conversion is not supported.
unary
public void unary(int o)
- Generates an unary operation.
The only unary operation for now is the negation (invert sign)
operation.
- Parameters:
- is - the operation code, for now it can be only
ExpressionImage.UN_NE.
- Throws: IllegalStateException
- if operation is not supported
for types in stack.
logical_not_start
public void logical_not_start()
- Denotes start of group of logical operators whose result should be inverted.
- See Also:
- logical_not
logical_not
public void logical_not() throws IllegalStateException
- Inverts result of group of logical operators.
To generate logical not operation it is needed :
1. logical_not_start
2. calculate value to be inverted
3. logical_not
- See Also:
- logical_not
function_start
public void function_start()
- Denotes the start of the function call.
Example of the sequence of method calls to perform (compile)
the function invocation is given in the description of
gnu.jel.Optimizer.function_call(...) method.
- See Also:
- function_call
binaryOP_param
public void binaryOP_param()
- Specifies that the parameter for the binary operation is now in stack.
Example of the sequence of method calls to perform (compile)
the binary operation is given in the description of
gnu.jel.Optimizer.binaryOP() method.
- See Also:
- binaryOP
function_param
public boolean function_param()
- Specifies that the parameter for the function is now in stack.
Example of the sequence of method calls to perform (compile)
the function is given in the description of
gnu.jel.Optimizer.function_call(...) method.
- See Also:
- function_call
function_call
public void function_call(String name) throws IllegalStateException
- Generates the function call.
Example : "how to call the function"
optimizer.function_start();
optimizer.load(2L);
optimizer.function_param();
optimizer.load(2.0);
optimizer.function_param();
optimizer.function_call("name_in_the_library");
The function name is searched in the library. If there are
several applicable functions in the library with the same name (not
necessary in the same object originally) the most specific one is
called ( See § 15.11.2.2 in the Java Language Specification). Types
conversion takes place automatically.
- Parameters:
- name - is the name of the function to call.
- Throws: IllegalStateException
- if no function with the given name
and parameter types in stack can be found in the library.
binaryOP
public void binaryOP(int o,
boolean logical) throws IllegalStateException
- Generates a binary operation.
The binary operation codes are defined in
gnu.jel.ExpressionImage as constants BI_XX .
Example : "how to sum up two numbers with this optimizer"
optimizer.load(2L);
optimizer.binaryOP_param();
optimizer.load(2.0);
optimizer.binaryOP(ExpressionImage.BI_PL);
Note different types of operands, conversion ( to double) will be
performed automatically. Note also binaryOP_param() usage, its use is
obligatory to denote that the parameter for subsequent binary operation
is now ion stack.
- Parameters:
- is - the operation code, see above.
- Throws: IllegalStateException
- if this binary op is not supported
for the types in stack.
- See Also:
- ExpressionImage
conditional_true
public void conditional_true() throws IllegalStateException
- Starts generation of conditional ?: .
The stack should contain boolean value.
To generate complete conditional it is needed :
1. calculate condition (boolean)
2. conditional_true()
3. add instructions to executed if condition is "true"
4. conditional_false()
5. add instructions to executed if condition is "false"
6. conditional_end()
conditional_false
public void conditional_false()
- Continues generation of conditional ?: .
- See Also:
- conditional_true
conditional_end
public void conditional_end() throws IllegalStateException
- Finishes generation of conditional ?: .
- See Also:
- conditional_true
finish
public void finish()
- Finishes the function.
This method should be called exactly once before the attempt
to instantiate expression (or obtain its image) is made.
proper state to be finished (some extra items are in stack).
optimize
public void optimize(int of)
- Optimizes the function.
Currently only evaluation of constant subexpressions is performed.
- Parameters:
- of - is the maximum number of optimization iterations to perform.
optimizeIteration
protected static boolean optimizeIteration(OPlist code)
- Performs one optimization pass on the given list of operations.
Currently only evaluation of constant subexpressions is performed.
- Parameters:
- code - is a linked list of operations to optimize.
- Returns:
- true if additional optimization pass may simplify code further.
compile
public CompiledExpression compile()
- Compiles the expression.
- Returns:
- The instance of the gnu.jel.CompiledExpression subclass,
with the function, represented by this optimizer compiled in.
compileBits
public ExpressionBits compileBits()
- Compiles the expression into an ExpressionBits object.
ExpressionBits is a wrapper allowing to store expression
in any java.io.OutputStream using Java serialization mechanism.
- Returns:
- instance of the gnu.jel.ExpressionBits object.
- See Also:
- ExpressionBits
toString
public String toString()
- Represents the expression, contained in this optimizer as String.
- Returns:
- String representation of the expression.
- Overrides:
- toString in class Object
main
public static void main(String args[])
- Performs unitary test of the interpreter.
This function works only if the Debugging is turned "ON".
- Parameters:
- args - ignored.
- See Also:
- enabled
test
public static void test(Tester t)
- Performs unitary test of the interpreter.
This function works only if the Debugging is turned "ON".
Used if all package is being tested and not just this class alone.
- Parameters:
- t - Tester to report test results.
- See Also:
- enabled
All Packages Class Hierarchy This Package Previous Next Index