Class ExprInstrGenerator

java.lang.Object
org.ek9lang.compiler.phase7.ExprInstrGenerator

final class ExprInstrGenerator extends Object
Creates IR instructions for expressions.

This is the real backbone of processing and is very big! It is also recursive calling upon expression (sometimes directly and sometimes directly.
The ANTLR grammar follows:

   expression
     : expression op=(INC | DEC | BANG)
     | op=SUB expression
     | expression op=QUESTION
     | op=TOJSON expression
     | op=DOLLAR expression
     | op=PROMOTE expression
     | op=LENGTH OF? expression
     | op=PREFIX expression
     | op=SUFFIX expression
     | op=HASHCODE expression
     | op=ABS OF? expression
     | op=SQRT OF? expression
     | <assoc=right> left=expression coalescing=(CHECK | ELVIS) right=expression
     | primary
     | call
     | objectAccessExpression
     | list
     | dict
     | expression IS? neg=NOT? op=EMPTY
     | op=(NOT | TILDE) expression
     | left=expression op=CARET right=expression
     | left=expression op=(DIV | MUL | MOD | REM ) NL? right=expression
     | left=expression op=(ADD | SUB) NL? right=expression
     | left=expression op=(SHFTL | SHFTR) right=expression
     | left=expression op=(CMP | FUZ) NL? right=expression
     | left=expression op=(LE | GE | GT | LT) NL? right=expression
     | left=expression op=(EQUAL | NOTEQUAL | NOTEQUAL2) NL? right=expression
     | <assoc=right> left=expression coalescing_equality=(COALESCE_LE | COALESCE_GE | COALESCE_GT | COALESCE_LT) right=expression
     | left=expression neg=NOT? op=MATCHES right=expression
     | left=expression neg=NOT? op=CONTAINS right=expression
     | left=expression IS? neg=NOT? IN right=expression
     | left=expression op=(AND | XOR | OR) NL? right=expression
     | expression IS? neg=NOT? IN range
     | <assoc=right> control=expression LEFT_ARROW ternaryPart ternary=(COLON|ELSE) ternaryPart
     ;