<s> package org . eclipse . jdt . internal . compiler . ast ; import org . eclipse . jdt . internal . compiler . ASTVisitor ; import org . eclipse . jdt . internal . compiler . codegen . CodeStream ; import org . eclipse . jdt . internal . compiler . impl . FloatConstant ; import org . eclipse . jdt . internal . compiler . lookup . BlockScope ; import org . eclipse . jdt . internal . compiler . lookup . TypeBinding ; import org . eclipse . jdt . internal . compiler . util . FloatUtil ; public class FloatLiteral extends NumberLiteral { float value ; public FloatLiteral ( char [ ] token , int s , int e ) { super ( token , s , e ) ; } public void computeConstant ( ) { Float computedValue ; try { computedValue = Float . valueOf ( String . valueOf ( this . source ) ) ; } catch ( NumberFormatException e ) { try { float v = FloatUtil . valueOfHexFloatLiteral ( this . source ) ; if ( v == Float . POSITIVE_INFINITY ) { return ; } if ( Float . isNaN ( v ) ) { return ; } this . value = v ; this . constant = FloatConstant . fromValue ( v ) ; } catch ( NumberFormatException e1 ) { } return ; } final float floatValue = computedValue . floatValue ( ) ; if ( floatValue > Float . MAX_VALUE ) { return ; } if ( floatValue < Float . MIN_VALUE ) { boolean isHexaDecimal = false ; label : for ( int i = 0 ; i < this . source . length ; i ++ ) { switch ( this . source [ i ] ) { case '0' : case '.' : break ; case 'x' : case 'X' : isHexaDecimal = true ; break ; case 'e' : case 'E' : case 'f' : case 'F' : case 'd' : case 'D' : if ( isHexaDecimal ) { return ; } break label ; case 'p' : case 'P' : break label ; default : return ; } } } this . value = floatValue ; this . constant = FloatConstant . fromValue ( this . value ) ; } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { int pc = codeStream . position ; if ( valueRequired ) { codeStream . generateConstant ( this . constant , this . implicitConversion ) ; } codeStream . recordPositionsFrom ( pc , this . sourceStart ) ; } public TypeBinding literalType ( BlockScope scope ) { return TypeBinding . FLOAT ; } public void traverse ( ASTVisitor visitor , BlockScope scope ) { visitor . visit ( this , scope ) ; visitor . endVisit ( this , scope ) ; } } </s>