1 /** 2 * Copyright: Copyright (c) 2012 Jacob Carlborg. All rights reserved. 3 * Authors: Jacob Carlborg 4 * Version: Initial created: may 10, 2012 5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) 6 */ 7 module dstep.translator.Enum; 8 9 import mambo.core._; 10 11 import clang.c.Index; 12 import clang.Cursor; 13 import clang.Visitor; 14 import clang.Util; 15 16 import dstep.translator.Translator; 17 import dstep.translator.Declaration; 18 import dstep.translator.Output; 19 import dstep.translator.Type; 20 21 class Enum : Declaration 22 { 23 this (Cursor cursor, Cursor parent, Translator translator) 24 { 25 super(cursor, parent, translator); 26 } 27 28 override string translate () 29 { 30 return writeEnum(spelling, (context) { 31 foreach (cursor, parent ; cursor.declarations) 32 { 33 with (CXCursorKind) 34 switch (cursor.kind) 35 { 36 case CXCursor_EnumConstantDecl: 37 output.newContext(); 38 output ~= translateIdentifier(cursor.spelling); 39 output ~= " = "; 40 output ~= cursor.enum_.value; 41 context.instanceVariables ~= output.currentContext.data; 42 break; 43 44 default: break; 45 } 46 } 47 }); 48 } 49 50 @property override string spelling () 51 { 52 auto name = cursor.spelling; 53 return name.isPresent ? name : generateAnonymousName(cursor); 54 } 55 56 private: 57 58 string writeEnum (string name, void delegate (EnumData context) dg) 59 { 60 auto context = new EnumData; 61 context.name = translateIdentifier(name); 62 63 dg(context); 64 65 return context.data; 66 } 67 }