/* * Copyright (c) 2007 BUSINESS OBJECTS SOFTWARE LIMITED * 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 Business Objects 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 OWNER 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. */ /* * PrimitiveInfo.java * Created: Mar 31, 2005 * By: Bo Ilic */ package org.openquark.cal.compiler; import java.util.HashSet; import java.util.Set; import org.openquark.cal.internal.module.Cal.Collections.CAL_List_internal; import org.openquark.cal.internal.module.Cal.Core.CAL_Bits_internal; import org.openquark.cal.internal.module.Cal.Core.CAL_Debug_internal; import org.openquark.cal.internal.module.Cal.Core.CAL_Dynamic_internal; import org.openquark.cal.internal.module.Cal.Core.CAL_Exception_internal; import org.openquark.cal.internal.module.Cal.Core.CAL_Prelude_internal; import org.openquark.cal.internal.module.Cal.Core.CAL_Record_internal; import org.openquark.cal.internal.module.Cal.Utilities.CAL_QuickCheck_internal; import org.openquark.cal.module.Cal.Core.CAL_Prelude; /** * Contains info on the primitive functions and types that can be defined in CAL. * * Currently this contains: * - a simple list intended to give early compiler error messages if someone attempts * to declare an unsupported primitive function. * * @author Bo Ilic */ final class PrimitiveInfo { /** QualifiedName set */ private static final Set<QualifiedName> primitiveFunctions = new HashSet<QualifiedName>(); static { addBuiltInFunction(CAL_Prelude_internal.Functions.equalsInt); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsInt); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanInt); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanEqualsInt); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanInt); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanEqualsInt); addBuiltInFunction(CAL_Prelude_internal.Functions.addInt); addBuiltInFunction(CAL_Prelude_internal.Functions.subtractInt); addBuiltInFunction(CAL_Prelude_internal.Functions.multiplyInt); addBuiltInFunction(CAL_Prelude_internal.Functions.divideInt); addBuiltInFunction(CAL_Prelude_internal.Functions.negateInt); addBuiltInFunction(CAL_Prelude_internal.Functions.remainderInt); //primitive functions for comparison and arithmetic with floats addBuiltInFunction(CAL_Prelude_internal.Functions.equalsFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanEqualsFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanEqualsFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.addFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.subtractFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.multiplyFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.divideFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.negateFloat); addBuiltInFunction(CAL_Prelude_internal.Functions.remainderFloat); //primitive functions for comparison and arithmetic with doubles addBuiltInFunction(CAL_Prelude_internal.Functions.equalsDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanEqualsDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanEqualsDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.addDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.subtractDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.multiplyDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.divideDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.negateDouble); addBuiltInFunction(CAL_Prelude_internal.Functions.remainderDouble); // primitive functions for comparison and arithmetic with longs addBuiltInFunction(CAL_Prelude_internal.Functions.equalsLong); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsLong); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanLong); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanEqualsLong); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanLong); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanEqualsLong); addBuiltInFunction(CAL_Prelude_internal.Functions.addLong); addBuiltInFunction(CAL_Prelude_internal.Functions.subtractLong); addBuiltInFunction(CAL_Prelude_internal.Functions.multiplyLong); addBuiltInFunction(CAL_Prelude_internal.Functions.divideLong); addBuiltInFunction(CAL_Prelude_internal.Functions.negateLong); addBuiltInFunction(CAL_Prelude_internal.Functions.remainderLong); // primitive functions for comparison with shorts addBuiltInFunction(CAL_Prelude_internal.Functions.equalsShort); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsShort); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanShort); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanEqualsShort); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanShort); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanEqualsShort); // primitive functions for comparison with bytes addBuiltInFunction(CAL_Prelude_internal.Functions.equalsByte); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsByte); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanByte); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanEqualsByte); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanByte); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanEqualsByte); addBuiltInFunction(CAL_Prelude.Functions.error); //primitive functions for char comparison addBuiltInFunction(CAL_Prelude_internal.Functions.equalsChar); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsChar); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanChar); addBuiltInFunction(CAL_Prelude_internal.Functions.greaterThanEqualsChar); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanChar); addBuiltInFunction(CAL_Prelude_internal.Functions.lessThanEqualsChar); //primitive sequencing function addBuiltInFunction(CAL_Prelude.Functions.seq); //record functions addBuiltInFunction(CAL_Record_internal.Functions.fieldNamesPrimitive); addBuiltInFunction(CAL_Record_internal.Functions.hasFieldPrimitive); addBuiltInFunction(CAL_Dynamic_internal.Functions.fieldValuesPrimitive); addBuiltInFunction(CAL_Dynamic_internal.Functions.recordFieldIndex); addBuiltInFunction(CAL_Dynamic_internal.Functions.recordFieldValuePrimitive); addBuiltInFunction(CAL_Dynamic_internal.Functions.recordFieldTypePrimitive); addBuiltInFunction(CAL_Dynamic_internal.Functions.insertTextualRecordFieldPrimitive); addBuiltInFunction(CAL_Dynamic_internal.Functions.insertOrdinalRecordFieldPrimitive); addBuiltInFunction(CAL_Dynamic_internal.Functions.appendRecordPrimitive); addBuiltInFunction(CAL_Prelude_internal.Functions.objectToCalValue); addBuiltInFunction(CAL_Prelude_internal.Functions.calValueToObject); addBuiltInFunction(CAL_Prelude_internal.Functions.makeComparator); addBuiltInFunction(CAL_Prelude_internal.Functions.makeEquivalenceRelation); addBuiltInFunction(CAL_Prelude.Functions.makeCalFunction); addBuiltInFunction(CAL_Prelude_internal.Functions.equalsRecord); addBuiltInFunction(CAL_Prelude_internal.Functions.notEqualsRecord); addBuiltInFunction(CAL_Prelude_internal.Functions.recordFromJListPrimitive); addBuiltInFunction(CAL_Prelude_internal.Functions.recordFromJMapPrimitive); addBuiltInFunction(CAL_Prelude_internal.Functions.recordToJListPrimitive); addBuiltInFunction(CAL_Record_internal.Functions.recordToJRecordValuePrimitive); addBuiltInFunction(CAL_Record_internal.Functions.strictRecordPrimitive); addBuiltInFunction(CAL_Prelude_internal.Functions.compareRecord); addBuiltInFunction(CAL_Prelude_internal.Functions.recordTypeDictionary); addBuiltInFunction(CAL_Prelude.Functions.unsafeCoerce); addBuiltInFunction(CAL_Prelude.Functions.deepSeq); addBuiltInFunction(CAL_Prelude.Functions.error); addBuiltInFunction(CAL_Prelude_internal.Functions.executionContext); addBuiltInFunction(CAL_Prelude_internal.Functions.ordinalValue); addBuiltInFunction(CAL_Prelude.Functions.eager); addBuiltInFunction(CAL_List_internal.Functions.makeIterator); addBuiltInFunction(CAL_QuickCheck_internal.Functions.arbitraryRecordPrimitive); addBuiltInFunction(CAL_QuickCheck_internal.Functions.coarbitraryRecordPrimitive); addBuiltInFunction(CAL_Record_internal.Functions.buildListPrimitive); addBuiltInFunction(CAL_Record_internal.Functions.buildRecordPrimitive); addBuiltInFunction(CAL_Exception_internal.Functions.primThrow); addBuiltInFunction(CAL_Exception_internal.Functions.primCatch); addBuiltInFunction(CAL_Debug_internal.Functions.showRecord); addBuiltInFunction(CAL_Bits_internal.Functions.bitwiseAndInt); addBuiltInFunction(CAL_Bits_internal.Functions.bitwiseOrInt); addBuiltInFunction(CAL_Bits_internal.Functions.bitwiseXorInt); addBuiltInFunction(CAL_Bits_internal.Functions.complementInt); addBuiltInFunction(CAL_Bits_internal.Functions.highestBitMaskInt); addBuiltInFunction(CAL_Bits_internal.Functions.shiftLInt); addBuiltInFunction(CAL_Bits_internal.Functions.shiftRInt); addBuiltInFunction(CAL_Bits_internal.Functions.shiftRUnsignedInt); addBuiltInFunction(CAL_Bits_internal.Functions.bitwiseAndLong); addBuiltInFunction(CAL_Bits_internal.Functions.bitwiseOrLong); addBuiltInFunction(CAL_Bits_internal.Functions.bitwiseXorLong); addBuiltInFunction(CAL_Bits_internal.Functions.complementLong); addBuiltInFunction(CAL_Bits_internal.Functions.highestBitMaskLong); addBuiltInFunction(CAL_Bits_internal.Functions.shiftLLong); addBuiltInFunction(CAL_Bits_internal.Functions.shiftRLong); addBuiltInFunction(CAL_Bits_internal.Functions.shiftRUnsignedLong); } static private void addBuiltInFunction(QualifiedName functionName) { primitiveFunctions.add(functionName); } /** * @param functionName * @return true if functionName is the name of a supported primitive function. */ static boolean isPrimitiveFunction(QualifiedName functionName) { return primitiveFunctions.contains(functionName); } private PrimitiveInfo() {} }