Package anvil.script.expression

Source Code of anvil.script.expression.IsNode

/*
* $Id: IsNode.java,v 1.19 2002/09/16 08:05:05 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.script.expression;

import anvil.core.Any;
import anvil.codec.Code;
import anvil.codec.ConstantPool;
import anvil.script.compiler.ByteCompiler;
import anvil.script.Context;
import java.io.IOException;

/**
* class IsNode
*
* @author: Jani Lehtim�ki
*/
public class IsNode extends UnaryParent
{

  public static final int IS_DEFINED = -2;
  public static final int IS_UNDEFINED = -3;

  private int _type;
 

  public IsNode(Node child, int type)
  {
    super(child);
    _type = type;
  }


  public IsNode(Node child)
  {
    super(child);
  }


  public int typeOf()
  {
    return Node.EXPR_IS;
  }


  public Any eval()
  {
    Any value = _child.eval();

    switch(_type) {
    case IS_DEFINED:
      return value.isDefined() ? Any.TRUE : Any.FALSE;

    case IS_UNDEFINED:
      return value.isUndefined() ? Any.TRUE : Any.FALSE;
    
    case Any.IS_NULL:
      return value.isNull() ? Any.TRUE : Any.FALSE;

    case Any.IS_BOOLEAN:
      return value.isBoolean() ? Any.TRUE : Any.FALSE;

    case Any.IS_INT:
      return value.isInt() ? Any.TRUE : Any.FALSE;

    case Any.IS_DOUBLE:
      return value.isDouble() ? Any.TRUE : Any.FALSE;

    case Any.IS_STRING:
      return value.isString() ? Any.TRUE : Any.FALSE;

    case Any.IS_BINARY:
      return value.isBinary() ? Any.TRUE : Any.FALSE;

    case Any.IS_PATTERN:
      return value.isPattern() ? Any.TRUE : Any.FALSE;

    case Any.IS_RANGE:
      return value.isRange() ? Any.TRUE : Any.FALSE;

    case Any.IS_MAP:
      return value.isMap() ? Any.TRUE : Any.FALSE;
    case Any.IS_TUPLE:
      return value.isTuple() ? Any.TRUE : Any.FALSE;

    case Any.IS_LIST:
      return value.isList() ? Any.TRUE : Any.FALSE;
     
    case Any.IS_ARRAY:
      return value.isArray() ? Any.TRUE : Any.FALSE;

    case Any.IS_CLASS:
      return value.isClass() ? Any.TRUE : Any.FALSE;

    case Any.IS_REF:
      return value.isRef() ? Any.TRUE : Any.FALSE;

    }
   
    return Any.FALSE;
  }


  public void compile(ByteCompiler context, int operation)
  {
    _child.compile(context, GET);
    Code code = context.getCode();
    ConstantPool pool = code.getPool();
    switch(_type) {
    case IS_DEFINED:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isDefined", "()Z"));
      break;

    case IS_UNDEFINED:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isUndefined", "()Z"));
      break;

    case Any.IS_NULL:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isNull", "()Z"));
      break;

    case Any.IS_BOOLEAN:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isBoolean", "()Z"));
      break;

    case Any.IS_INT:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isInt", "()Z"));
      break;

    case Any.IS_DOUBLE:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isDouble", "()Z"));
      break;

    case Any.IS_STRING:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isString", "()Z"));
      break;

    case Any.IS_BINARY:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isBinary", "()Z"));
      break;

    case Any.IS_PATTERN:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isPattern", "()Z"));
      break;

    case Any.IS_RANGE:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isRange", "()Z"));
      break;

    case Any.IS_MAP:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isMap", "()Z"));
      break;
     
    case Any.IS_TUPLE:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isTuple", "()Z"));
      break;
    case Any.IS_LIST:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isList", "()Z"));
      break;
    case Any.IS_ARRAY:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isArray", "()Z"));
      break;
     case Any.IS_CLASS:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isClass", "()Z"));
      break;

    case Any.IS_REF:
      code.invokevirtual(pool.addMethodRef(context.TYPE_ANY,
        "isRef", "()Z"));
      break;
    }
    if (operation != GET_BOOLEAN) {
      context.boolean2any();
    }
  }

}
TOP

Related Classes of anvil.script.expression.IsNode

TOP
Copyright © 2018 www.massapi.com. 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.