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