/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_idlc.hxx" #include #include #include "registry/writer.hxx" using namespace ::rtl; AstConstant::AstConstant(const ExprType type, const NodeType nodeType, AstExpression* pExpr, const ::rtl::OString& name, AstScope* pScope) : AstDeclaration(nodeType, name, pScope) , m_pConstValue(pExpr) , m_constValueType(type) { } AstConstant::AstConstant(const ExprType type, AstExpression* pExpr, const ::rtl::OString& name, AstScope* pScope) : AstDeclaration(NT_const, name, pScope) , m_pConstValue(pExpr) , m_constValueType(type) { } AstConstant::~AstConstant() { } sal_Bool AstConstant::dumpBlob( typereg::Writer & rBlob, sal_uInt16 index, bool published) { RTConstValue aConst; sal_Unicode* str = NULL; AstExprValue *exprVal = getConstValue()->getExprValue(); switch (getConstValueType()) { case ET_short: aConst.m_type = RT_TYPE_INT16; aConst.m_value.aShort = exprVal->u.sval; break; case ET_ushort: aConst.m_type = RT_TYPE_UINT16; aConst.m_value.aUShort = exprVal->u.usval; break; case ET_long: aConst.m_type = RT_TYPE_INT32; aConst.m_value.aLong = exprVal->u.lval; break; case ET_ulong: aConst.m_type = RT_TYPE_UINT32; aConst.m_value.aULong = exprVal->u.ulval; break; case ET_hyper: aConst.m_type = RT_TYPE_INT64; aConst.m_value.aHyper = exprVal->u.hval; break; case ET_uhyper: aConst.m_type = RT_TYPE_UINT64; aConst.m_value.aUHyper = exprVal->u.uhval; break; case ET_float: aConst.m_type = RT_TYPE_FLOAT; aConst.m_value.aFloat = exprVal->u.fval; break; case ET_double: aConst.m_type = RT_TYPE_DOUBLE; aConst.m_value.aDouble = exprVal->u.dval; break; case ET_byte: aConst.m_type = RT_TYPE_BYTE; aConst.m_value.aByte = exprVal->u.byval; break; case ET_boolean: aConst.m_type = RT_TYPE_BOOL; aConst.m_value.aBool = exprVal->u.bval; break; default: { fprintf(stderr, "%s: exprtype to const type: cannot convert ExprType\n", idlc()->getOptions()->getProgramName().getStr()); return sal_False; } } OString name = getLocalName(); OUString type; if ( getNodeType() != NT_enum_val ) { type = OStringToOUString(exprTypeToString(getConstValueType()), RTL_TEXTENCODING_UTF8); } rBlob.setFieldData( index, getDocumentation(), OUString(), RT_ACCESS_CONST | (published ? RT_ACCESS_PUBLISHED : 0), OStringToOUString(name, RTL_TEXTENCODING_UTF8), type, aConst); if (str) delete[] str; return sal_True; }