当前位置: 首页>>代码示例>>Java>>正文


Java TernaryValue.UNKNOWN属性代码示例

本文整理汇总了Java中com.google.javascript.rhino.jstype.TernaryValue.UNKNOWN属性的典型用法代码示例。如果您正苦于以下问题:Java TernaryValue.UNKNOWN属性的具体用法?Java TernaryValue.UNKNOWN怎么用?Java TernaryValue.UNKNOWN使用的例子?那么恭喜您, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在com.google.javascript.rhino.jstype.TernaryValue的用法示例。


在下文中一共展示了TernaryValue.UNKNOWN属性的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: apply

@Override
public boolean apply(EdgeTuple<Node, Branch> input) {
  Branch branch = input.edge;
  if (!branch.isConditional()) {
    return true;
  }
  Node predecessor = input.sourceNode;
  Node condition = NodeUtil.getConditionExpression(predecessor);

  // TODO(user): Handle more complicated expression like true == true,
  // etc....
  if (condition != null) {
    TernaryValue val = NodeUtil.getBooleanValue(condition);
    if (val != TernaryValue.UNKNOWN) {
      return val.toBoolean(true) == (branch == Branch.ON_TRUE);
    }
  }
  return true;
}
 
开发者ID:ehsan,项目名称:js-symbolic-executor,代码行数:19,代码来源:CheckUnreachableCode.java

示例2: apply

public boolean apply(DiGraphEdge<Node, ControlFlowGraph.Branch> input) {
  // First skill all exceptions.
  Branch branch = input.getValue();
  if (branch == Branch.ON_EX) {
    return false;
  } else if (branch.isConditional()) {
    Node condition = NodeUtil.getConditionExpression(
        input.getSource().getValue());
    // TODO(user): We CAN make this bit smarter just looking at
    // constants. We DO have a full blown ReverseAbstractInterupter and
    // type system that can evaluate some impressions' boolean value but
    // for now we will keep this pass lightweight.
    if (condition != null) {
      TernaryValue val = NodeUtil.getBooleanValue(condition);
      if (val != TernaryValue.UNKNOWN) {
        return val.toBoolean(true) == (Branch.ON_TRUE == branch);
      }
    }
  }
  return true;
}
 
开发者ID:ehsan,项目名称:js-symbolic-executor,代码行数:21,代码来源:CheckMissingReturn.java

示例3: isStrWhiteSpaceChar

/**
 * Copied from Rhino's ScriptRuntime
 */
public static TernaryValue isStrWhiteSpaceChar(int c) {
  switch (c) {
    case '\u000B': // <VT>
      return TernaryValue.UNKNOWN;  // IE says "no", ECMAScript says "yes"
    case ' ': // <SP>
    case '\n': // <LF>
    case '\r': // <CR>
    case '\t': // <TAB>
    case '\u00A0': // <NBSP>
    case '\u000C': // <FF>
    case '\u2028': // <LS>
    case '\u2029': // <PS>
    case '\uFEFF': // <BOM>
      return TernaryValue.TRUE;
    default:
      return (Character.getType(c) == Character.SPACE_SEPARATOR)
          ? TernaryValue.TRUE : TernaryValue.FALSE;
  }
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:22,代码来源:NodeUtil.java

示例4: apply

@Override
public boolean apply(EdgeTuple<Node, Branch> input) {
  Branch branch = input.edge;
  if (!branch.isConditional()) {
    return true;
  }
  Node predecessor = input.sourceNode;
  Node condition = NodeUtil.getConditionExpression(predecessor);

  // TODO(user): Handle more complicated expression like true == true,
  // etc....
  if (condition != null) {
    TernaryValue val = NodeUtil.getImpureBooleanValue(condition);
    if (val != TernaryValue.UNKNOWN) {
      return val.toBoolean(true) == (branch == Branch.ON_TRUE);
    }
  }
  return true;
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:19,代码来源:CheckUnreachableCode.java

示例5: apply

@Override
public boolean apply(DiGraphEdge<Node, ControlFlowGraph.Branch> input) {
  // First skill all exceptions.
  Branch branch = input.getValue();
  if (branch == Branch.ON_EX) {
    return false;
  } else if (branch.isConditional()) {
    Node condition = NodeUtil.getConditionExpression(
        input.getSource().getValue());
    // TODO(user): We CAN make this bit smarter just looking at
    // constants. We DO have a full blown ReverseAbstractInterupter and
    // type system that can evaluate some impressions' boolean value but
    // for now we will keep this pass lightweight.
    if (condition != null) {
      TernaryValue val = NodeUtil.getImpureBooleanValue(condition);
      if (val != TernaryValue.UNKNOWN) {
        return val.toBoolean(true) == (Branch.ON_TRUE == branch);
      }
    }
  }
  return true;
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:22,代码来源:CheckMissingReturn.java

示例6: isStrWhiteSpaceChar

public static TernaryValue isStrWhiteSpaceChar(int c) {
  switch (c) {
    case '\u000B': // <VT>
      return TernaryValue.UNKNOWN;  // Legacy IE says "no", ECMAScript says "yes"
    case ' ': // <SP>
    case '\n': // <LF>
    case '\r': // <CR>
    case '\t': // <TAB>
    case '\u00A0': // <NBSP>
    case '\u000C': // <FF>
    case '\u2028': // <LS>
    case '\u2029': // <PS>
    case '\uFEFF': // <BOM>
      return TernaryValue.TRUE;
    default:
      return TernaryValue.FALSE; // TODO(moz): Correct this.
  }
}
 
开发者ID:google,项目名称:closure-compiler,代码行数:18,代码来源:TokenUtil.java

示例7: getBooleanValue

/**
 * Gets the boolean value of a node that represents a literal. This method
 * effectively emulates the <code>Boolean()</code> JavaScript cast function.
 */
static TernaryValue getBooleanValue(Node n) {
  switch (n.getType()) {
    case Token.STRING:
      return TernaryValue.forBoolean(n.getString().length() > 0);

    case Token.NUMBER:
      return TernaryValue.forBoolean(n.getDouble() != 0);

    case Token.NULL:
    case Token.FALSE:
    case Token.VOID:
      return TernaryValue.FALSE;

    case Token.NAME:
      String name = n.getString();
      if ("undefined".equals(name)
          || "NaN".equals(name)) {
        // We assume here that programs don't change the value of the keyword
        // undefined to something other than the value undefined.
        return TernaryValue.FALSE;
      } else if ("Infinity".equals(name)) {
        return TernaryValue.TRUE;
      }
      break;

    case Token.TRUE:
    case Token.ARRAYLIT:
    case Token.OBJECTLIT:
    case Token.REGEXP:
      return TernaryValue.TRUE;
  }

  return TernaryValue.UNKNOWN;
}
 
开发者ID:ehsan,项目名称:js-symbolic-executor,代码行数:38,代码来源:NodeUtil.java

示例8: tryFoldHook

/**
 * Try folding HOOK (?:) if the condition results of the condition is known.
 * @return the replacement node, if changed, or the original if not
 */
private Node tryFoldHook(Node n) {
  Preconditions.checkState(n.getType() == Token.HOOK);
  Node parent = n.getParent();
  Preconditions.checkNotNull(parent);
  Node cond = n.getFirstChild();
  Node thenBody = cond.getNext();
  Node elseBody = thenBody.getNext();

  TernaryValue condValue = NodeUtil.getExpressionBooleanValue(cond);
  if (condValue == TernaryValue.UNKNOWN) {
    return n;  // We can't remove branches otherwise!
  }

  // Transform "(a = 2) ? x =2 : y" into "a=2,x=2"
  n.detachChildren();
  Node branchToKeep = condValue.toBoolean(true) ? thenBody : elseBody;
  Node replacement;
  if (mayHaveSideEffects(cond)) {
    replacement = new Node(Token.COMMA).copyInformationFrom(n);
    replacement.addChildToFront(cond);
    replacement.addChildToBack(branchToKeep);
  } else {
    replacement = branchToKeep;
  }

  parent.replaceChild(n, replacement);
  reportCodeChange();
  return replacement;
}
 
开发者ID:ehsan,项目名称:js-symbolic-executor,代码行数:33,代码来源:PeepholeRemoveDeadCode.java

示例9: tryFoldHook

/**
 * Try folding HOOK (?:) if the condition results of the condition is known.
 * @return the replacement node, if changed, or the original if not
 */
private Node tryFoldHook(Node n) {
  Preconditions.checkState(n.isHook());
  Node parent = n.getParent();
  Preconditions.checkNotNull(parent);
  Node cond = n.getFirstChild();
  Node thenBody = cond.getNext();
  Node elseBody = thenBody.getNext();

  TernaryValue condValue = NodeUtil.getImpureBooleanValue(cond);
  if (condValue == TernaryValue.UNKNOWN) {
    // If the result nodes are equivalent, then one of the nodes can be
    // removed and it doesn't matter which.
    if (!areNodesEqualForInlining(thenBody, elseBody)) {
      return n;  // We can't remove branches otherwise!
    }
  }

  // Transform "(a = 2) ? x =2 : y" into "a=2,x=2"
  n.detachChildren();
  Node branchToKeep = condValue.toBoolean(true) ? thenBody : elseBody;
  Node replacement;
  if (mayHaveSideEffects(cond)) {
    replacement = IR.comma(cond, branchToKeep).srcref(n);
  } else {
    replacement = branchToKeep;
  }

  parent.replaceChild(n, replacement);
  reportCodeChange();
  return replacement;
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:35,代码来源:PeepholeRemoveDeadCode.java

示例10: tryFoldAndOr

/**
 * Try to fold a AND/OR node.
 */
private Node tryFoldAndOr(Node n, Node left, Node right) {
  Node parent = n.getParent();

  Node result = null;

  int type = n.getType();

  TernaryValue leftVal = NodeUtil.getImpureBooleanValue(left);

  if (leftVal != TernaryValue.UNKNOWN) {
    boolean lval = leftVal.toBoolean(true);

    // (TRUE || x) => TRUE (also, (3 || x) => 3)
    // (FALSE && x) => FALSE
    if (lval && type == Token.OR ||
        !lval && type == Token.AND) {
      result = left;

    } else if (!mayHaveSideEffects(left)) {
      // (FALSE || x) => x
      // (TRUE && x) => x
      result = right;
    }
  }

  // Note: Right hand side folding is handled by
  // PeepholeSubstituteAlternateSyntax#tryMinimizeCondition

  if (result != null) {
    // Fold it!
    n.removeChild(result);
    parent.replaceChild(n, result);
    reportCodeChange();

    return result;
  } else {
    return n;
  }
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:42,代码来源:PeepholeFoldConstants.java

示例11: tryFoldComparison

/**
 * Try to fold comparison nodes, e.g ==
 */
@SuppressWarnings("fallthrough")
private Node tryFoldComparison(Node n, Node left, Node right) {
  TernaryValue result = evaluateComparison(n.getType(), left, right);
  if (result == TernaryValue.UNKNOWN) {
    return n;
  }

  Node newNode = NodeUtil.booleanNode(result.toBoolean(true));
  n.getParent().replaceChild(n, newNode);
  reportCodeChange();

  return newNode;
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:16,代码来源:PeepholeFoldConstants.java

示例12: areStringsEqual

/** Returns whether two JS strings are equal. */
private static TernaryValue areStringsEqual(String a, String b) {
  // In JS, browsers parse \v differently. So do not consider strings
  // equal if one contains \v.
  if (a.indexOf('\u000B') != -1 ||
      b.indexOf('\u000B') != -1) {
    return TernaryValue.UNKNOWN;
  } else {
    return a.equals(b) ? TernaryValue.TRUE : TernaryValue.FALSE;
  }
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:11,代码来源:PeepholeFoldConstants.java

示例13: compareAsNumbers

/**
 * The result of the comparison, or UNKNOWN if the
 * result could not be determined.
 */
private static TernaryValue compareAsNumbers(int op, Node left, Node right) {
  Double leftValue = NodeUtil.getNumberValue(left);
  if (leftValue == null) {
    return TernaryValue.UNKNOWN;
  }
  Double rightValue = NodeUtil.getNumberValue(right);
  if (rightValue == null) {
    return TernaryValue.UNKNOWN;
  }

  double lv = leftValue;
  double rv = rightValue;

  switch (op) {
    case Token.SHEQ:
    case Token.EQ:
      Preconditions.checkState(
          left.isNumber() && right.isNumber());
      return TernaryValue.forBoolean(lv == rv);
    case Token.SHNE:
    case Token.NE:
      Preconditions.checkState(
          left.isNumber() && right.isNumber());
      return TernaryValue.forBoolean(lv != rv);
    case Token.LE:
      return TernaryValue.forBoolean(lv <= rv);
    case Token.LT:
      return TernaryValue.forBoolean(lv <  rv);
    case Token.GE:
      return TernaryValue.forBoolean(lv >= rv);
    case Token.GT:
      return TernaryValue.forBoolean(lv >  rv);
    default:
      return TernaryValue.UNKNOWN;  // don't handle that op
  }
}
 
开发者ID:SpoonLabs,项目名称:astor,代码行数:40,代码来源:PeepholeFoldConstants.java

示例14: evaluateComparison

static TernaryValue evaluateComparison(Token op, Node left, Node right) {
  // Don't try to minimize side-effects here.
  if (NodeUtil.mayHaveSideEffects(left) || NodeUtil.mayHaveSideEffects(right)) {
    return TernaryValue.UNKNOWN;
  }

  switch (op) {
    case EQ:
      return tryAbstractEqualityComparison(left, right);
    case NE:
      return tryAbstractEqualityComparison(left, right).not();
    case SHEQ:
      return tryStrictEqualityComparison(left, right);
    case SHNE:
      return tryStrictEqualityComparison(left, right).not();
    case LT:
      return tryAbstractRelationalComparison(left, right, false);
    case GT:
      return tryAbstractRelationalComparison(right, left, false);
    case LE:
      return tryAbstractRelationalComparison(right, left, true).not();
    case GE:
      return tryAbstractRelationalComparison(left, right, true).not();
    default:
      break;
  }
  throw new IllegalStateException("Unexpected operator for comparison");
}
 
开发者ID:google,项目名称:closure-compiler,代码行数:28,代码来源:PeepholeFoldConstants.java

示例15: tryFoldAndOr

/**
 * Try to fold a AND/OR node.
 */
private Node tryFoldAndOr(Node n, Node left, Node right) {
  Node parent = n.getParent();

  Node result = null;

  int type = n.getType();

  TernaryValue leftVal = NodeUtil.getImpureBooleanValue(left);

  if (leftVal != TernaryValue.UNKNOWN) {
    boolean lval = leftVal.toBoolean(true);

    // (TRUE || x) => TRUE (also, (3 || x) => 3)
    // (FALSE && x) => FALSE
    if (lval && type == Token.OR ||
        !lval && type == Token.AND) {
      result = left;

    } else if (!mayHaveSideEffects(left)) {
      // (FALSE || x) => x
      // (TRUE && x) => x
      result = right;
    }
  }

  // Note: Right hand side folding is handled by
  // PeepholeMinimizeConditions#tryMinimizeCondition

  if (result != null) {
    // Fold it!
    n.removeChild(result);
    parent.replaceChild(n, result);
    reportCodeChange();

    return result;
  } else {
    return n;
  }
}
 
开发者ID:Robbert,项目名称:closure-compiler-copy,代码行数:42,代码来源:PeepholeFoldConstants.java


注:本文中的com.google.javascript.rhino.jstype.TernaryValue.UNKNOWN属性示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。