---- Copyright (c) 2009-2011, ERICSSON AB-- All rights reserved.-- -- Redistribution and use in source and binary forms, with or without-- modification, are permitted provided that the following conditions are met:-- -- * Redistributions of source code must retain the above copyright notice, -- this list of conditions and the following disclaimer.-- * Redistributions in binary form must reproduce the above copyright-- notice, this list of conditions and the following disclaimer in the-- documentation and/or other materials provided with the distribution.-- * Neither the name of the ERICSSON AB nor the names of its contributors-- may be used to endorse or promote products derived from this software-- without specific prior written permission.-- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR-- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER-- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,-- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.--{-# LANGUAGE TypeFamilies #-}{-# LANGUAGE MultiParamTypeClasses #-}moduleFeldspar.Compiler.Imperative.Plugin.ConstantFoldingwhereimportFeldspar.TransformationdataConstantFolding=ConstantFoldinginstancePluginConstantFoldingwheretypeExternalInfoConstantFolding=()executePluginConstantFolding_procedure=result$transformConstantFolding()()procedureinstanceTransformationConstantFoldingwheretypeFromConstantFolding=()typeToConstantFolding=()typeDownConstantFolding=()typeUpConstantFolding=()typeStateConstantFolding=()instanceTransformableConstantFoldingExpressionwheretransformtsdf@FunctionCall{}=casefunMode$functionf'ofInfix->casefunName$functionf'of"+"->tr'$elimParamIf(isConstIntN0)True$resulttr"-"->tr'$elimParamIf(isConstIntN0)False$resulttr"*"->tr'$elimParamIf(isConstIntN1)True$resulttr_->tr_->trwheretr=defaultTransformtsdftr'x=tr{result=x}f'=resulttrisConstIntNn(ConstExpr(IntConsti___)_)=n==iisConstIntN__=FalseelimParamIfpredicateflippablefunCall@(FunctionCall(Function__Infix)(x:xs)__)|predicate(headxs)=x|flippable&&predicatex=headxs|otherwise=funCallelimParamIf__funCall=funCalltransformtsde=defaultTransformtsde