slang_rs_export_var.cpp revision e639eb5caa2c386b4a60659a4929e8a6141a2cbe
1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/* 2c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Copyright 2010, The Android Open Source Project 3c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 4c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * you may not use this file except in compliance with the License. 6c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * You may obtain a copy of the License at 7c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 8c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 10c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Unless required by applicable law or agreed to in writing, software 11c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * See the License for the specific language governing permissions and 14c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * limitations under the License. 15c383a500aa59423264811be3874461bf8adbfea0Zonr Chang */ 16c383a500aa59423264811be3874461bf8adbfea0Zonr Chang 176315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "slang_rs_export_var.h" 18462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include "clang/AST/Type.h" 20462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 21e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include "llvm/ADT/APSInt.h" 22e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines 236315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "slang_rs_context.h" 246315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "slang_rs_export_type.h" 256315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr 26e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hinesnamespace slang { 27462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 289ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoRSExportVar::RSExportVar(RSContext *Context, 299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const clang::VarDecl *VD, 306315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr const RSExportType *ET) 31a41ce1d98094da84643995d40d71c529905123fcZonr Chang : RSExportable(Context, RSExportable::EX_VAR), 326315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr mName(VD->getName().data(), VD->getName().size()), 336315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr mET(ET), 346315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr mIsConst(false) { 359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // mInit - Evaluate initializer expression 369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const clang::Expr *Initializer = VD->getAnyInitializer(); 379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao if (Initializer != NULL) { 389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao switch (ET->getClass()) { 39324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao case RSExportType::ExportClassPrimitive: 409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao case RSExportType::ExportClassVector: { 419e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines Initializer->Evaluate(mInit, Context->getASTContext()); 42324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao break; 439ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 449ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao case RSExportType::ExportClassPointer: { 459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao if (Initializer->isNullPointerConstant 469e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines (Context->getASTContext(), 479ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao clang::Expr::NPC_ValueDependentIsNotNull) 489ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ) 499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mInit.Val = clang::APValue(llvm::APSInt(1)); 50324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao else 519e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines Initializer->Evaluate(mInit, Context->getASTContext()); 52324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao break; 539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao case RSExportType::ExportClassRecord: { 559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // No action 569ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao fprintf(stderr, "RSExportVar::RSExportVar : Reflection of initializer " 579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao "to variable '%s' (of type '%s') is unsupported " 589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao "currently.\n", 599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mName.c_str(), 609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ET->getName().c_str()); 61324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao break; 629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao default: { 64324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao assert(false && "Unknown class of type"); 659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 66324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao } 6781c1b4865e9c8fd655ea4528814f6c53e225ba6dShih-wei Liao } 6881c1b4865e9c8fd655ea4528814f6c53e225ba6dShih-wei Liao 699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // mIsConst - Is it a constant? 709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao clang::QualType QT = VD->getTypeSourceInfo()->getType(); 7181c1b4865e9c8fd655ea4528814f6c53e225ba6dShih-wei Liao if (!QT.isNull()) { 7281c1b4865e9c8fd655ea4528814f6c53e225ba6dShih-wei Liao mIsConst = QT.isConstQualified(); 7381c1b4865e9c8fd655ea4528814f6c53e225ba6dShih-wei Liao } 749ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 75324c0479ec3edda573de60b2e6476507a99d06f7Shih-wei Liao return; 76462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao} 77e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines 78e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines} // namespace slang 79