/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common * Development and Distribution License("CDDL") (collectively, the * "License"). You may not use this file except in compliance with the * License. You can obtain a copy of the License at * http://www.netbeans.org/cddl-gplv2.html * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the * specific language governing permissions and limitations under the * License. When distributing the software, include this License Header * Notice in each file and include the License file at * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the GPL Version 2 section of the License file that * accompanied this code. If applicable, add the following below the * License Header, with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * Contributor(s): * * The Original Software is NetBeans. The Initial Developer of the Original * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun * Microsystems, Inc. All Rights Reserved. * * If you wish your version of this file to be governed by only the CDDL * or only the GPL Version 2, indicate your decision by adding * "[Contributor] elects to include this software in this distribution * under the [CDDL or GPL Version 2] license." If you do not indicate a * single choice of license, a recipient has the option to distribute * your version of this file under either the CDDL, the GPL Version 2 or * to extend the choice of license to its licensees as provided above. * However, if you add GPL Version 2 code and therefore, elected the GPL * Version 2 license, then the option applies only if the new code is * made subject to such option by the copyright holder. */ // Simplification rules using DeMorgan's Theorem !($a <= $b) => $a > $b; !($a > $b) => $a <= $b; !($a == $b) => $a != $b; !($a != $b) => $a == $b; !($a >= $b) => $a < $b; !($a < $b) => $a >= $b; !!$a => $a; !($a && $b) => !$a || !$b; !($a || $b) => !$a && !$b; // Cleanup if statements with empty then or else clauses //if ($cond) $then; else $else => if ($cond) $then :: isEmpty($else); //if ($cond) $then; else $else => if (!($cond)) $else :: isEmpty($then); // Similar boolean simplification rules $a == true => $a; $a == false =>!$a; $a ? false : $b => !$a && $b; $a ? true : $b => $a || $b; $a ? $b : false => $a && $b; true ? $a : $b => $a; false ? $a : $b => $b; true && $a => $a; $a && true => $a; false && $a => false; $a && false => false; //side effect free test! true || $a => true; $a || true => true; //side effect free test! false || $a => $a; $a || false => $a; this == null => false; this != null => true; null == this => false; null != this => true; if(true) $a; else $b => $a; if(false) $a; else $b => $b :: !isNullTree($b); if(true) $a => $a; if(false) $a => ; while(false) $a => ; do $a; while(false) => $a; for($a; false; $b) $c => { $a; } // Conditional expression simplifications $a ? $b + $c : $b + $d => $b + ($a ? $c : $d); $a ? $b - $c : $b - $d => $b - ($a ? $c : $d); $a ? $b * $c : $b * $d => $b * ($a ? $c : $d); $a ? $b / $c : $b / $d => $b / ($a ? $c : $d); $a ? $c + $b : $d + $b => ($a ? $c : $d) + $b; $a ? $c - $b : $d - $b => ($a ? $c : $d) - $b; $a ? $c * $b : $d * $b => ($a ? $c : $d) * $b; $a ? $c / $b : $d / $b => ($a ? $c : $d) / $b;