1 module bamboo.codegen.field_declarations; 2 3 public import bamboo.codegen; 4 public import bamboo.codegen.field_declarations.atomic; 5 public import bamboo.codegen.field_declarations.molecular; 6 public import bamboo.codegen.field_declarations.parameter; 7 8 string generateField(FieldDeclaration field, bool generateStubs) 9 { 10 string format; 11 if (auto molecular = cast(MolecularField) field) 12 { 13 format ~= generateMolecular(molecular); 14 } 15 else if (auto atomic = cast(AtomicField) field) 16 { 17 format ~= generateAtomic(atomic, generateStubs); 18 } 19 else if (auto parameter = cast(ParameterField) field) 20 { 21 format ~= generateParameterField(parameter, generateStubs); 22 } 23 else 24 { 25 assert(0); 26 } 27 return format; 28 } 29 30 string generateParameterListFor(FieldDeclaration field) 31 { 32 if (auto molecular = cast(MolecularField) field) 33 { 34 string format; 35 foreach (reference; molecular.references) 36 { 37 format ~= generateParameterListFor(reference); 38 } 39 return format; 40 } 41 else if (auto atomic = cast(AtomicField) field) 42 { 43 return generateParameterList(atomic.parameters); 44 } 45 else if (auto parameter = cast(ParameterField) field) 46 { 47 return generateParameterList([parameter.parameter]); 48 } 49 return ""; 50 } 51 52 string generateParameterList(Parameter[] parameters) 53 { 54 string format; 55 56 foreach (parameter; parameters) 57 { 58 format ~= generateDefinition(parameter) ~ ","; 59 } 60 61 return format; 62 } 63