Package org.apache.xalan.xsltc.compiler.util

Examples of org.apache.xalan.xsltc.compiler.util.MethodType


    /**
     * Add primops and base functions to the symbol table.
     */
    private void initSymbolTable() {
  MethodType I_V  = new MethodType(Type.Int, Type.Void);
  MethodType I_R  = new MethodType(Type.Int, Type.Real);
  MethodType I_S  = new MethodType(Type.Int, Type.String);
  MethodType I_D  = new MethodType(Type.Int, Type.NodeSet);
  MethodType R_I  = new MethodType(Type.Real, Type.Int);
  MethodType R_V  = new MethodType(Type.Real, Type.Void);
  MethodType R_R  = new MethodType(Type.Real, Type.Real);
  MethodType R_D  = new MethodType(Type.Real, Type.NodeSet);
  MethodType R_O  = new MethodType(Type.Real, Type.Reference);
  MethodType I_I  = new MethodType(Type.Int, Type.Int);
   MethodType D_O  = new MethodType(Type.NodeSet, Type.Reference);
  MethodType D_V  = new MethodType(Type.NodeSet, Type.Void);
  MethodType D_S  = new MethodType(Type.NodeSet, Type.String);
  MethodType D_D  = new MethodType(Type.NodeSet, Type.NodeSet);
  MethodType A_V  = new MethodType(Type.Node, Type.Void);
  MethodType S_V  = new MethodType(Type.String, Type.Void);
  MethodType S_S  = new MethodType(Type.String, Type.String);
  MethodType S_A  = new MethodType(Type.String, Type.Node);
  MethodType S_D  = new MethodType(Type.String, Type.NodeSet);
  MethodType S_O  = new MethodType(Type.String, Type.Reference);
  MethodType B_O  = new MethodType(Type.Boolean, Type.Reference);
  MethodType B_V  = new MethodType(Type.Boolean, Type.Void);
  MethodType B_B  = new MethodType(Type.Boolean, Type.Boolean);
  MethodType B_S  = new MethodType(Type.Boolean, Type.String);
  MethodType D_X  = new MethodType(Type.NodeSet, Type.Object);
  MethodType R_RR = new MethodType(Type.Real, Type.Real, Type.Real);
  MethodType I_II = new MethodType(Type.Int, Type.Int, Type.Int);
  MethodType B_RR = new MethodType(Type.Boolean, Type.Real, Type.Real);
  MethodType B_II = new MethodType(Type.Boolean, Type.Int, Type.Int);
  MethodType S_SS = new MethodType(Type.String, Type.String, Type.String);
  MethodType S_DS = new MethodType(Type.String, Type.Real, Type.String);
  MethodType S_SR = new MethodType(Type.String, Type.String, Type.Real);
  MethodType O_SO = new MethodType(Type.Reference, Type.String, Type.Reference);

  MethodType D_SS =
      new MethodType(Type.NodeSet, Type.String, Type.String);
  MethodType D_SD =
      new MethodType(Type.NodeSet, Type.String, Type.NodeSet);
  MethodType B_BB =
      new MethodType(Type.Boolean, Type.Boolean, Type.Boolean);
  MethodType B_SS =
      new MethodType(Type.Boolean, Type.String, Type.String);
  MethodType S_SD =
      new MethodType(Type.String, Type.String, Type.NodeSet);
  MethodType S_DSS =
      new MethodType(Type.String, Type.Real, Type.String, Type.String);
  MethodType S_SRR =
      new MethodType(Type.String, Type.String, Type.Real, Type.Real);
  MethodType S_SSS =
      new MethodType(Type.String, Type.String, Type.String, Type.String);

  /*
   * Standard functions: implemented but not in this table concat().
   * When adding a new function make sure to uncomment
   * the corresponding line in <tt>FunctionAvailableCall</tt>.
View Full Code Here


    /**
     * Add primops and base functions to the symbol table.
     */
    private void initSymbolTable() {
  MethodType I_V  = new MethodType(Type.Int, Type.Void);
  MethodType I_R  = new MethodType(Type.Int, Type.Real);
  MethodType I_S  = new MethodType(Type.Int, Type.String);
  MethodType I_D  = new MethodType(Type.Int, Type.NodeSet);
  MethodType R_I  = new MethodType(Type.Real, Type.Int);
  MethodType R_V  = new MethodType(Type.Real, Type.Void);
  MethodType R_R  = new MethodType(Type.Real, Type.Real);
  MethodType R_D  = new MethodType(Type.Real, Type.NodeSet);
  MethodType R_O  = new MethodType(Type.Real, Type.Reference);
  MethodType I_I  = new MethodType(Type.Int, Type.Int);
   MethodType D_O  = new MethodType(Type.NodeSet, Type.Reference);
  MethodType D_V  = new MethodType(Type.NodeSet, Type.Void);
  MethodType D_S  = new MethodType(Type.NodeSet, Type.String);
  MethodType D_D  = new MethodType(Type.NodeSet, Type.NodeSet);
  MethodType A_V  = new MethodType(Type.Node, Type.Void);
  MethodType S_V  = new MethodType(Type.String, Type.Void);
  MethodType S_S  = new MethodType(Type.String, Type.String);
  MethodType S_A  = new MethodType(Type.String, Type.Node);
  MethodType S_D  = new MethodType(Type.String, Type.NodeSet);
  MethodType S_O  = new MethodType(Type.String, Type.Reference);
  MethodType B_O  = new MethodType(Type.Boolean, Type.Reference);
  MethodType B_V  = new MethodType(Type.Boolean, Type.Void);
  MethodType B_B  = new MethodType(Type.Boolean, Type.Boolean);
  MethodType B_S  = new MethodType(Type.Boolean, Type.String);
  MethodType D_X  = new MethodType(Type.NodeSet, Type.Object);
  MethodType R_RR = new MethodType(Type.Real, Type.Real, Type.Real);
  MethodType I_II = new MethodType(Type.Int, Type.Int, Type.Int);
  MethodType B_RR = new MethodType(Type.Boolean, Type.Real, Type.Real);
  MethodType B_II = new MethodType(Type.Boolean, Type.Int, Type.Int);
  MethodType S_SS = new MethodType(Type.String, Type.String, Type.String);
  MethodType S_DS = new MethodType(Type.String, Type.Real, Type.String);
  MethodType S_SR = new MethodType(Type.String, Type.String, Type.Real);

  MethodType D_SS =
      new MethodType(Type.NodeSet, Type.String, Type.String);
  MethodType D_SD =
      new MethodType(Type.NodeSet, Type.String, Type.NodeSet);
  MethodType B_BB =
      new MethodType(Type.Boolean, Type.Boolean, Type.Boolean);
  MethodType B_SS =
      new MethodType(Type.Boolean, Type.String, Type.String);
  MethodType S_SD =
      new MethodType(Type.String, Type.String, Type.NodeSet);
  MethodType S_DSS =
      new MethodType(Type.String, Type.Real, Type.String, Type.String);
  MethodType S_SRR =
      new MethodType(Type.String, Type.String, Type.Real, Type.Real);
  MethodType S_SSS =
      new MethodType(Type.String, Type.String, Type.String, Type.String);

  /*
   * Standard functions: implemented but not in this table concat().
   * When adding a new function make sure to uncomment
   * the corresponding line in <tt>FunctionAvailableCall</tt>.
View Full Code Here

  // Get the left and right operand types
  Type tleft = _left.typeCheck(stable);
  Type tright = _right.typeCheck(stable);

  // Check if the operator supports the two operand types
  MethodType wantType = new MethodType(Type.Void, tleft, tright);
  MethodType haveType = lookupPrimop(stable, Ops[_op], wantType);

  // Yes, the operation is supported
  if (haveType != null) {
      // Check if left-hand side operand must be type casted
      Type arg1 = (Type)haveType.argsType().elementAt(0);
      if (!arg1.identicalTo(tleft))
    _left = new CastExpr(_left, arg1);
      // Check if right-hand side operand must be type casted
      Type arg2 = (Type) haveType.argsType().elementAt(1);
      if (!arg2.identicalTo(tright))
    _right = new CastExpr(_right, arg1);
      // Return the result type for the operator we will use
      return _type = haveType.resultType();
  }
  throw new TypeCheckError(this);
    }
View Full Code Here

    /**
     * Add primops and base functions to the symbol table.
     */
    private void initSymbolTable() {
  MethodType I_V  = new MethodType(Type.Int, Type.Void);
  MethodType I_R  = new MethodType(Type.Int, Type.Real);
  MethodType I_S  = new MethodType(Type.Int, Type.String);
  MethodType I_D  = new MethodType(Type.Int, Type.NodeSet);
  MethodType R_I  = new MethodType(Type.Real, Type.Int);
  MethodType R_V  = new MethodType(Type.Real, Type.Void);
  MethodType R_R  = new MethodType(Type.Real, Type.Real);
  MethodType R_D  = new MethodType(Type.Real, Type.NodeSet);
  MethodType R_O  = new MethodType(Type.Real, Type.Reference);
  MethodType I_I  = new MethodType(Type.Int, Type.Int);
   MethodType D_O  = new MethodType(Type.NodeSet, Type.Reference);
  MethodType D_V  = new MethodType(Type.NodeSet, Type.Void);
  MethodType D_S  = new MethodType(Type.NodeSet, Type.String);
  MethodType D_D  = new MethodType(Type.NodeSet, Type.NodeSet);
  MethodType A_V  = new MethodType(Type.Node, Type.Void);
  MethodType S_V  = new MethodType(Type.String, Type.Void);
  MethodType S_S  = new MethodType(Type.String, Type.String);
  MethodType S_A  = new MethodType(Type.String, Type.Node);
  MethodType S_D  = new MethodType(Type.String, Type.NodeSet);
  MethodType S_O  = new MethodType(Type.String, Type.Reference);
  MethodType B_O  = new MethodType(Type.Boolean, Type.Reference);
  MethodType B_V  = new MethodType(Type.Boolean, Type.Void);
  MethodType B_B  = new MethodType(Type.Boolean, Type.Boolean);
  MethodType B_S  = new MethodType(Type.Boolean, Type.String);
  MethodType D_X  = new MethodType(Type.NodeSet, Type.Object);
  MethodType R_RR = new MethodType(Type.Real, Type.Real, Type.Real);
  MethodType I_II = new MethodType(Type.Int, Type.Int, Type.Int);
  MethodType B_RR = new MethodType(Type.Boolean, Type.Real, Type.Real);
  MethodType B_II = new MethodType(Type.Boolean, Type.Int, Type.Int);
  MethodType S_SS = new MethodType(Type.String, Type.String, Type.String);
  MethodType S_DS = new MethodType(Type.String, Type.Real, Type.String);
  MethodType S_SR = new MethodType(Type.String, Type.String, Type.Real);
  MethodType O_SO = new MethodType(Type.Reference, Type.String, Type.Reference);

  MethodType D_SS =
      new MethodType(Type.NodeSet, Type.String, Type.String);
  MethodType D_SD =
      new MethodType(Type.NodeSet, Type.String, Type.NodeSet);
  MethodType B_BB =
      new MethodType(Type.Boolean, Type.Boolean, Type.Boolean);
  MethodType B_SS =
      new MethodType(Type.Boolean, Type.String, Type.String);
  MethodType S_SD =
      new MethodType(Type.String, Type.String, Type.NodeSet);
  MethodType S_DSS =
      new MethodType(Type.String, Type.Real, Type.String, Type.String);
  MethodType S_SRR =
      new MethodType(Type.String, Type.String, Type.Real, Type.Real);
  MethodType S_SSS =
      new MethodType(Type.String, Type.String, Type.String, Type.String);

  /*
   * Standard functions: implemented but not in this table concat().
   * When adding a new function make sure to uncomment
   * the corresponding line in <tt>FunctionAvailableCall</tt>.
View Full Code Here

     * first entry in the vector of primops that has the right arity is
     * considered to be the default one.
     */
    public MethodType lookupPrimop(SymbolTable stable, String op,
           MethodType ctype) {
  MethodType result = null;
  final Vector primop = stable.lookupPrimop(op);
  if (primop != null) {
      final int n = primop.size();
      int minDistance = Integer.MAX_VALUE;
      for (int i = 0; i < n; i++) {
    final MethodType ptype = (MethodType) primop.elementAt(i);
    // Skip if different arity
    if (ptype.argsCount() != ctype.argsCount()) {
        continue;
    }
       
    // The first method with the right arity is the default
    if (result == null) {
View Full Code Here

  // Get the left and right operand types
  Type tleft = _left.typeCheck(stable);
  Type tright = _right.typeCheck(stable);

  // Check if the operator supports the two operand types
  MethodType wantType = new MethodType(Type.Void, tleft, tright);
  MethodType haveType = lookupPrimop(stable, Ops[_op], wantType);

  // Yes, the operation is supported
  if (haveType != null) {
      // Check if left-hand side operand must be type casted
      Type arg1 = (Type)haveType.argsType().elementAt(0);
      if (!arg1.identicalTo(tleft))
    _left = new CastExpr(_left, arg1);
      // Check if right-hand side operand must be type casted
      Type arg2 = (Type) haveType.argsType().elementAt(1);
      if (!arg2.identicalTo(tright))
    _right = new CastExpr(_right, arg1);
      // Return the result type for the operator we will use
      return _type = haveType.resultType();
  }
  throw new TypeCheckError(this);
    }
View Full Code Here

  _left.setParser(parser);
    }
   
    public Type typeCheck(SymbolTable stable) throws TypeCheckError {
  final Type tleft = _left.typeCheck(stable);
  final MethodType ptype = lookupPrimop(stable, "u-",
                new MethodType(Type.Void,
                   tleft));
 
  if (ptype != null) {
      final Type arg1 = (Type) ptype.argsType().elementAt(0);
      if (!arg1.identicalTo(tleft)) {
    _left = new CastExpr(_left, arg1);
      }
      return _type = ptype.resultType();
  }

  throw new TypeCheckError(this);
    }
View Full Code Here

    public Type typeCheckStandard(SymbolTable stable) throws TypeCheckError {
  _fname.clearNamespace();   // HACK!!!

  final int n = _arguments.size();
  final Vector argsType = typeCheckArgs(stable);
  final MethodType args = new MethodType(Type.Void, argsType);
  final MethodType ptype =
      lookupPrimop(stable, _fname.getLocalPart(), args);

  if (ptype != null) {
      for (int i = 0; i < n; i++) {
    final Type argType = (Type) ptype.argsType().elementAt(i);
    final Expression exp = (Expression)_arguments.elementAt(i);
    if (!argType.identicalTo(exp.getType())) {
        try {
      _arguments.setElementAt(new CastExpr(exp, argType), i);
        }
        catch (TypeCheckError e) {
      throw new TypeCheckError(this)// invalid conversion
        }
    }
      }
      _chosenMethodType = ptype;
      return _type = ptype.resultType();
  }
  throw new TypeCheckError(this);
    }
View Full Code Here

    tleft = Type.Boolean;
      }
  }

  // Lookup the table of primops to find the best match
    MethodType ptype = lookupPrimop(stable, Operators.getOpNames(_op),
                new MethodType(Type.Void, tleft, tright));

  if (ptype != null) {
      Type arg1 = (Type) ptype.argsType().elementAt(0);
      if (!arg1.identicalTo(tleft)) {
    _left = new CastExpr(_left, arg1);
      }
      Type arg2 = (Type) ptype.argsType().elementAt(1);
      if (!arg2.identicalTo(tright)) {
    _right = new CastExpr(_right, arg1);       
      }
      return _type = ptype.resultType();
  }
  throw new TypeCheckError(this);
    }
View Full Code Here

    }
   
    public Type typeCheck(SymbolTable stable) throws TypeCheckError {
  final Type tleft = _left.typeCheck(stable);
  final Type tright = _right.typeCheck(stable);
  final MethodType ptype = lookupPrimop(stable, Ops[_op],
                new MethodType(Type.Void,
                   tleft, tright));
  if (ptype != null) {
      final Type arg1 = (Type) ptype.argsType().elementAt(0);
      if (!arg1.identicalTo(tleft)) {
    _left = new CastExpr(_left, arg1);
      }
      final Type arg2 = (Type) ptype.argsType().elementAt(1);
      if (!arg2.identicalTo(tright)) {
    _right = new CastExpr(_right, arg1);
      }
      return _type = ptype.resultType();
  }
  throw new TypeCheckError(this);
    }
View Full Code Here

TOP

Related Classes of org.apache.xalan.xsltc.compiler.util.MethodType

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.