File indexing completed on 2024-06-30 05:51:30
0001 /* 0002 This file is part of the Okteta Kasten Framework, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2012 Alex Richardson <alex.richardson@gmx.de> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "bitfieldscriptclass.hpp" 0010 #include "../../datatypes/primitive/bitfield/abstractbitfielddatainformation.hpp" 0011 #include "../../parsers/parserutils.hpp" 0012 0013 BitfieldScriptClass::BitfieldScriptClass(QScriptEngine* engine, ScriptHandlerInfo* handlerInfo) 0014 : PrimitiveScriptClass(engine, handlerInfo) 0015 { 0016 s_width = engine->toStringHandle(ParserStrings::PROPERTY_WIDTH()); 0017 mIterableProperties.append(qMakePair(s_width, QScriptValue::PropertyFlags(QScriptValue::Undeletable))); 0018 } 0019 0020 BitfieldScriptClass::~BitfieldScriptClass() = default; 0021 0022 QScriptValue BitfieldScriptClass::additionalProperty(const DataInformation* data, const QScriptString& name, uint id) 0023 { 0024 const AbstractBitfieldDataInformation* pData = data->asBitfield(); 0025 if (name == s_width) { 0026 return pData->width(); 0027 } 0028 if (name == s_type) { 0029 return pData->typeName(); 0030 } 0031 return PrimitiveScriptClass::additionalProperty(data, name, id); 0032 } 0033 0034 bool BitfieldScriptClass::queryAdditionalProperty(const DataInformation* data, const QScriptString& name, QScriptClass::QueryFlags* flags, uint* id) 0035 { 0036 if (name == s_width) { 0037 *flags = QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess; 0038 return true; 0039 } 0040 return PrimitiveScriptClass::queryAdditionalProperty(data, name, flags, id); 0041 } 0042 0043 bool BitfieldScriptClass::setAdditionalProperty(DataInformation* data, const QScriptString& name, uint id, const QScriptValue& value) 0044 { 0045 if (name == s_width) { 0046 if (!value.isNumber()) { 0047 engine()->currentContext()->throwError(QScriptContext::TypeError, QStringLiteral("bitfield.width must be an integer!")); 0048 return true; 0049 } 0050 BitCount32 width = value.toUInt32(); 0051 if (width <= 0 || width > 64) { 0052 engine()->currentContext()->throwError(QScriptContext::RangeError, 0053 QStringLiteral("bitfield.width must be between 1 and 64! Given: %1").arg(width)); 0054 return true; 0055 } 0056 AbstractBitfieldDataInformation* pData = data->asBitfield(); 0057 pData->setWidth(width); 0058 return true; 0059 } 0060 return PrimitiveScriptClass::setAdditionalProperty(data, name, id, value); 0061 }