|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--gnu.jel.Optimizer
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.
Library
Field Summary | |
protected gnu.jel.OPlist |
code
Double linked list of operations in this expression. |
Constructor Summary | |
Optimizer(Library lib)
Constructs the new "empty" optimizer with the library specified. |
Method Summary | |
void |
binaryOP_param()
Specifies that the parameter for the binary operation is now in stack. |
void |
binaryOP(int o,
boolean logical)
Generates a binary operation. |
CompiledExpression |
compile()
Compiles the expression. |
ExpressionBits |
compileBits()
Compiles the expression into an ExpressionBits object. |
void |
conditional_end()
Finishes generation of conditional ?: . |
void |
conditional_false()
Continues generation of conditional ?: . |
void |
conditional_true()
Starts generation of conditional ?: . |
void |
convert(java.lang.Class to)
Generates an explicit type conversion operation. |
void |
convert(java.lang.Class to,
boolean widening)
Generates an explicit type conversion operation. |
void |
finish()
Finishes the function. |
void |
function_call(java.lang.String name)
Generates the function call. |
boolean |
function_param()
Specifies that the parameter for the function is now in stack. |
void |
function_start()
Denotes the start of the function call. |
void |
load(boolean c)
Generates a "load boolean constant" operation. |
void |
load(byte c)
Generates a "load byte constant" operation. |
void |
load(char c)
Generates a "load char constant" operation. |
void |
load(double c)
Generates a "load double constant" operation. |
void |
load(float c)
Generates a "load float constant" operation. |
void |
load(int c)
Generates a "load int constant" operation. |
void |
load(long c)
Generates a "load long constant" operation. |
void |
load(short c)
Generates a "load short constant" operation. |
void |
load(java.lang.String s)
Generates a "load String constant" operation. |
void |
logical_not_start()
Denotes start of group of logical operators whose result should be inverted. |
void |
logical_not()
Inverts result of group of logical operators. |
static void |
main(java.lang.String[] args)
Performs unitary test of the interpreter. |
void |
optimize(int of)
Optimizes the function. |
protected static boolean |
optimizeIteration(gnu.jel.OPlist code)
Performs one optimization pass on the given list of operations. |
static void |
test(Tester t)
Performs unitary test of the interpreter. |
java.lang.String |
toString()
Represents the expression, contained in this optimizer as String. |
void |
unary(int o)
Generates an unary operation. |
Methods inherited from class java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
wait,
wait,
wait |
Field Detail |
protected gnu.jel.OPlist code
Constructor Detail |
public Optimizer(Library lib)
lib
- is the library, used for function names resolution.Method Detail |
public void load(boolean c)
c
- is the constant to load.public void load(byte c)
c
- is the constant to load.public void load(char c)
c
- is the constant to load.public void load(short c)
c
- is the constant to load.public void load(int c)
c
- is the constant to load.public void load(long c)
c
- is the constant to load.public void load(float c)
c
- is the constant to load.public void load(double c)
c
- is the constant to load.public void load(java.lang.String s)
s
- is the String constant to load.public void convert(java.lang.Class to, boolean widening) throws java.lang.IllegalStateException
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.
to
- is the class to convert to.widening
- if true prohibits doing narrowing conversions.public void convert(java.lang.Class to) throws java.lang.IllegalStateException
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.
to
- is the class to convert to.public void unary(int o)
The only unary operation for now is the negation (invert sign) operation.
is
- the operation code, for now it can be only
ExpressionImage.UN_NE.public void logical_not_start()
logical_not()
public void logical_not() throws java.lang.IllegalStateException
To generate logical not operation it is needed :
1. logical_not_start 2. calculate value to be inverted 3. logical_not
logical_not()
public void function_start()
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.
function_call(java.lang.String)
public void binaryOP_param()
Example of the sequence of method calls to perform (compile) the binary operation is given in the description of gnu.jel.Optimizer.binaryOP() method.
binaryOP(int, boolean)
public boolean function_param()
Example of the sequence of method calls to perform (compile) the function is given in the description of gnu.jel.Optimizer.function_call(...) method.
function_call(java.lang.String)
public void function_call(java.lang.String name) throws java.lang.IllegalStateException
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.
name
- is the name of the function to call.public void binaryOP(int o, boolean logical) throws java.lang.IllegalStateException
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.
is
- the operation code, see above.ExpressionImage
public void conditional_true() throws java.lang.IllegalStateException
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()
public void conditional_false()
conditional_true()
public void conditional_end() throws java.lang.IllegalStateException
conditional_true()
public void finish()
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).
public void optimize(int of)
Currently only evaluation of constant subexpressions is performed.
of
- is the maximum number of optimization iterations to perform.protected static boolean optimizeIteration(gnu.jel.OPlist code)
Currently only evaluation of constant subexpressions is performed.
code
- is a linked list of operations to optimize.public CompiledExpression compile()
public ExpressionBits compileBits()
ExpressionBits is a wrapper allowing to store expression in any java.io.OutputStream using Java serialization mechanism.
ExpressionBits
public java.lang.String toString()
public static void main(java.lang.String[] args)
This function works only if the Debugging is turned "ON".
args
- ignored.Debug.enabled
public static void test(Tester t)
This function works only if the Debugging is turned "ON". Used if all package is being tested and not just this class alone.
t
- Tester to report test results.Debug.enabled
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |