11aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber/* 21aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Copyright (C) 2016 The Android Open Source Project 31aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 41aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * you may not use this file except in compliance with the License. 61aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * You may obtain a copy of the License at 71aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 81aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 101aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Unless required by applicable law or agreed to in writing, software 111aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * See the License for the specific language governing permissions and 141aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * limitations under the License. 151aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber */ 161aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "TypeDef.h" 18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 19a72e0d2be173cebf62f728b9d215808bd862f219Iliyan Malchev#include <hidl-util/Formatter.h> 208d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber#include <android-base/logging.h> 218d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 22c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 23c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 2400d1614c5ccb148e0f12f09bf90e5eb034d0e300Timur IskhakovTypeDef::TypeDef(const char* localName, const Location& location, Scope* parent, Type* type) 2500d1614c5ccb148e0f12f09bf90e5eb034d0e300Timur Iskhakov : NamedType(localName, location, parent), mReferencedType(type) {} 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 27737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *TypeDef::resolveToScalarType() const { 288d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber CHECK(!"Should not be here"); 298d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return NULL; 30737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber} 31737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 328d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas HuberType *TypeDef::referencedType() const { 33c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber return mReferencedType; 34c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} 35c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 365a545440766886a1bbd09ed7221bb337705e5d14Andreas Huberbool TypeDef::isInterface() const { 378d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 38881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 408d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool TypeDef::isEnum() const { 418d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber CHECK(!"Should not be here"); 428d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 43881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 458b66d53dffa4e91c932d09b8be21c8d2edc8ab78Steven Morelandstd::string TypeDef::typeName() const { 468b66d53dffa4e91c932d09b8be21c8d2edc8ab78Steven Moreland return "typedef " + localName(); 478b66d53dffa4e91c932d09b8be21c8d2edc8ab78Steven Moreland} 488b66d53dffa4e91c932d09b8be21c8d2edc8ab78Steven Moreland 498d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool TypeDef::isTypeDef() const { 508d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return true; 51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 53bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huberbool TypeDef::needsEmbeddedReadWrite() const { 548d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber CHECK(!"Should not be here"); 558d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 56bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huber} 57bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huber 58bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huberbool TypeDef::resultNeedsDeref() const { 598d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber CHECK(!"Should not be here"); 608d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 61bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huber} 62bb797e4ba03e95cd0b20aa77b83717dcf8cc6287Andreas Huber 632a55e05a26aa8e84433eb6c3e06175ccf45d4e92Steven Morelandstatus_t TypeDef::emitTypeDeclarations(Formatter &out) const { 643b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong out << "typedef " 653b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong << mReferencedType->getCppStackType() 663b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong << " " 673b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong << localName() 683b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong << ";\n\n"; 692a55e05a26aa8e84433eb6c3e06175ccf45d4e92Steven Moreland 702a55e05a26aa8e84433eb6c3e06175ccf45d4e92Steven Moreland return OK; 712a55e05a26aa8e84433eb6c3e06175ccf45d4e92Steven Moreland} 722a55e05a26aa8e84433eb6c3e06175ccf45d4e92Steven Moreland 73c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 74c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 75