Package org.formulacompiler.compiler.internal.expressions

Examples of org.formulacompiler.compiler.internal.expressions.TypedResult



  @Override
  protected TypedResult eval()
  {
    final TypedResult val = (TypedResult) letDict().lookup( this.varName );
    if (val == UNDEF) {
      if (LOG.e()) LOG.a( "Lookup " ).a( this.varName ).a( " is undefined. " ).lf();
      return node(); // No need to clone leaf node.
    }
    else {
View Full Code Here


  {
    final InterpretedNumericType type = type();
    final Collection<ExpressionNode> dynArgs = New.collection();
    final int n = cardinality();
    for (int i = 0; i < n; i++) {
      final TypedResult arg = evaluateArgument( i );
      if (arg.hasConstantValue()) {
        final boolean value = type.toBoolean( arg.getConstantValue() );
        if (value == _returnThisIfFound) {
          return ConstResult.valueOf( _returnThisIfFound );
        }
      }
      else {
View Full Code Here

  {
    this.context = _context;

    if (LOG.e()) LOG.a( "Eval " ).a( node() ).lf().i();

    final TypedResult res = eval();

    if (LOG.e()) LOG.o().a( "Got " ).a( res ).lf();

    return res;
  }
View Full Code Here

  protected TypedResult evaluateToConstOrExprWithConstantArgsFixed( TypedResult... _args ) throws CompilerException
  {
    if (areConstant( _args )) {
      try {
        final TypedResult constResult = evaluateToConst( _args );
        assert null != constResult;
        if (constResult.hasConstantValue()) {
          final Object constValue = constResult.getConstantValue();
          if (constValue instanceof Double) {
            final Double doubleResult = (Double) constValue;
            if (doubleResult.isInfinite() || doubleResult.isNaN()) {
              return evaluateToNode( _args );
            }
View Full Code Here

  protected final Object[] valuesOf( TypedResult... _values )
  {
    final Object[] vals = new Object[ _values.length ];
    for (int i = 0; i < _values.length; i++) {
      final TypedResult val = _values[ i ];
      vals[ i ] = (null == val) ? null : val.getConstantValue();
    }
    return vals;
  }
View Full Code Here

  {
    final int card = cardinality();
    switch (card) {

      case 2: { // one-dimensional lookup
        final TypedResult indexArg = evaluateArgument( 1 );
        if (indexArg.hasConstantValue()) {
          final int index = type().toInt( indexArg.getConstantValue(), 0 ) - 1;
          if (index < 0) {
            return err( "#VALUE! because index is out of range in INDEX", this.node().getDataType() );
          }
          final EvalRangeValue range = (EvalRangeValue) unsubstitutedArgument( 0 );
          if (index >= range.arguments().size()) {
View Full Code Here

  @Override
  protected TypedResult eval() throws CompilerException
  {
    if (this.mayFold) {
      final TypedResult val = evaluateArgument( 0 );
      letDict().let( this.varName, null, val );
      try {
        final TypedResult result = evaluateArgument( 1 );
        if (result.isConstant()) {
          return result;
        }
        return evaluateToNode( val, result );
      }
      finally {
        letDict().unlet( this.varName );
      }
    }
    else {
      letDict().let( this.varName, null, EvalLetVar.UNDEF );
      try {
        final TypedResult result = evaluateArgument( 1 );
        if (result.isConstant()) {
          return result;
        }
        final TypedResult val = evaluateArgument( 0 );
        return evaluateToNode( val, result );
      }
      finally {
        letDict().unlet( this.varName );
      }
View Full Code Here


  @Override
  protected TypedResult evaluateToNode( TypedResult... _args ) throws InterpreterException
  {
    final TypedResult result = super.evaluateToNode( _args );
    if (result instanceof ExpressionNodeForOperator) {
      ExpressionNodeForOperator opNode = (ExpressionNodeForOperator) result;
      if (opNode.getOperator() == Operator.CONCAT) {
        return concatConsecutiveConstArgsOf( opNode );
      }
View Full Code Here

  @Override
  protected TypedResult eval() throws CompilerException
  {
    final ExpressionNodeForSwitch switchNode = (ExpressionNodeForSwitch) node();
    final TypedResult valueArg = evaluateArgument( switchNode.offsetOfValueInArguments() );
    if (valueArg.hasConstantValue()) {
      final int value = type().toInt( valueArg.getConstantValue(), -1 );
      if (value >= 0) {
        final Iterable<ExpressionNodeForSwitchCase> cases = switchNode.cases();
        int iCase = 0;
        for (ExpressionNodeForSwitchCase caze : cases) {
          if (value == caze.caseValue()) {
            final EvalSwitchCase caseEval = (EvalSwitchCase) arguments().get(
                iCase + switchNode.offsetOfCasesInArguments() );
            final TypedResult caseResult = caseEval.evaluateArgument( 0, context() );
            return caseResult;
          }
          iCase++;
        }
      }
View Full Code Here

      return cellModel;
    }

    final ExpressionNode expression = cellModel.getExpression();
    if (null != expression) {
      final TypedResult constResult = EvalShadow.evaluate( expression, type() );
      if (constResult instanceof ExpressionNode) {

        // Do not need to clone leaf node.
        assert node().arguments().size() == 0;
        return node();
View Full Code Here

TOP

Related Classes of org.formulacompiler.compiler.internal.expressions.TypedResult

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.