Commit e19a5e659e24d4bf9c97e5a4f313f80a86414f5e
1 parent
aaa50241
add DS_Type_File, DS_Type_File_Output_Name and DS_Type_File_Output_Dir
Showing
2 changed files
with
57 additions
and
11 deletions
Show diff stats
ds_generator.anubis
| ... | ... | @@ -12,7 +12,7 @@ transmit types/densaku.anubis |
| 12 | 12 | |
| 13 | 13 | public type DS_Generator_API: |
| 14 | 14 | ds_api( |
| 15 | - ((List(DS_Type), List(DS_Message), String) -> Maybe(One)) generate_type_files). | |
| 15 | + ((List(DS_Type_File), List(DS_Message), String) -> Maybe(One)) generate_type_files). | |
| 16 | 16 | |
| 17 | 17 | public define Maybe(DS_Generator_API) |
| 18 | 18 | load_ds_generator | ... | ... |
types/ds_types.anubis
| ... | ... | @@ -125,16 +125,57 @@ public define DS_Type |
| 125 | 125 | )= |
| 126 | 126 | ds_type(type_name, message, ds_alts) |
| 127 | 127 | . |
| 128 | + | |
| 129 | +public type DS_Type_File_Output_Dir: | |
| 130 | + auto, //auto generated by densaku to given dir (in argument) + /types/generated/ | |
| 131 | + relative_path(String rel_path), //given dir (in argument) + path | |
| 132 | + absolute_path(String abs_path) //abs_path | |
| 133 | +. | |
| 134 | + | |
| 135 | +public type DS_Type_File_Output_Name: | |
| 136 | + auto, //auto generated by densaku name of the type | |
| 137 | + name(String name) | |
| 138 | +. | |
| 139 | + | |
| 140 | +public type DS_Type_File: | |
| 141 | + ds_type_file ( | |
| 142 | + DS_Type_File_Output_Dir output_path, | |
| 143 | + DS_Type_File_Output_Name file_name, | |
| 144 | + List(DS_Type) types | |
| 145 | + ) | |
| 146 | +. | |
| 128 | 147 | |
| 129 | 148 | public type Extern_type: |
| 130 | 149 | extern(String type_name, String ext_read) |
| 131 | 150 | . |
| 132 | 151 | |
| 152 | +define Bool | |
| 153 | +/* check if type_name is in the list beside_type. | |
| 154 | + * if yes return true and means the type is defined in same file | |
| 155 | + */ | |
| 156 | + is_exists | |
| 157 | + ( | |
| 158 | + String type_name, | |
| 159 | + List(DS_Type) beside_type | |
| 160 | + )= | |
| 161 | + if beside_type is | |
| 162 | + { | |
| 163 | + [] then false, | |
| 164 | + [h . t] then | |
| 165 | + since h is ds_type(name, _, _), | |
| 166 | + if type_name = name then | |
| 167 | + true | |
| 168 | + else | |
| 169 | + is_exists(type_name, t) | |
| 170 | + } | |
| 171 | +. | |
| 172 | + | |
| 133 | 173 | define List(Extern_type) |
| 134 | 174 | extract_extern_type |
| 135 | 175 | ( |
| 136 | 176 | List(DS_Component) components, |
| 137 | - List(Extern_type) so_far | |
| 177 | + List(Extern_type) so_far, | |
| 178 | + List(DS_Type) beside_type | |
| 138 | 179 | )= |
| 139 | 180 | if components is |
| 140 | 181 | { |
| ... | ... | @@ -142,13 +183,16 @@ define List(Extern_type) |
| 142 | 183 | [h . t] then |
| 143 | 184 | since h is component(_b_list, _anb_type, _name, _comment), |
| 144 | 185 | if _anb_type is ds_type(_type_name) then |
| 145 | - extract_extern_type( | |
| 146 | - t, append_once(so_far, extern(_type_name, "types/generated/"+to_lower(_type_name)+".anubis"))) | |
| 186 | + if is_exists(_type_name, beside_type) then | |
| 187 | + extract_extern_type(t, so_far, beside_type) | |
| 188 | + else | |
| 189 | + extract_extern_type( | |
| 190 | + t, append_once(so_far, extern(_type_name, "types/generated/"+to_lower(_type_name)+".anubis")), beside_type) | |
| 147 | 191 | else if _anb_type is extern_type(_type_name, read_file) then |
| 148 | 192 | extract_extern_type( |
| 149 | - t, append_once(so_far, extern(_type_name, read_file))) | |
| 193 | + t, append_once(so_far, extern(_type_name, read_file)), beside_type) | |
| 150 | 194 | else |
| 151 | - extract_extern_type(t, so_far) | |
| 195 | + extract_extern_type(t, so_far, beside_type) | |
| 152 | 196 | } |
| 153 | 197 | . |
| 154 | 198 | |
| ... | ... | @@ -156,7 +200,8 @@ define List(Extern_type) |
| 156 | 200 | extract_extern_type |
| 157 | 201 | ( |
| 158 | 202 | List(DS_Alternative) alt, |
| 159 | - List(Extern_type) so_far | |
| 203 | + List(Extern_type) so_far, | |
| 204 | + List(DS_Type) beside_type | |
| 160 | 205 | )= |
| 161 | 206 | if alt is |
| 162 | 207 | { |
| ... | ... | @@ -164,9 +209,9 @@ define List(Extern_type) |
| 164 | 209 | [h . t] then |
| 165 | 210 | if h is |
| 166 | 211 | { |
| 167 | - enum(_ , _) then extract_extern_type(t, so_far) | |
| 212 | + enum(_ , _) then extract_extern_type(t, so_far, beside_type) | |
| 168 | 213 | alternative(_, _, components) then |
| 169 | - extract_extern_type(t, extract_extern_type(components, so_far)) | |
| 214 | + extract_extern_type(t, extract_extern_type(components, so_far, beside_type), beside_type) | |
| 170 | 215 | } |
| 171 | 216 | } |
| 172 | 217 | . |
| ... | ... | @@ -174,10 +219,11 @@ define List(Extern_type) |
| 174 | 219 | public define List(Extern_type) |
| 175 | 220 | get_all_extern_type |
| 176 | 221 | ( |
| 177 | - DS_Type ds_type | |
| 222 | + DS_Type ds_type, //Type from which we want to extract the extern types | |
| 223 | + List(DS_Type) beside_type //all known type in same file | |
| 178 | 224 | )= |
| 179 | 225 | since ds_type is ds_type(_, _, ds_alternatives), |
| 180 | - extract_extern_type(ds_alternatives, []) | |
| 226 | + extract_extern_type(ds_alternatives, [], beside_type) | |
| 181 | 227 | . |
| 182 | 228 | |
| 183 | 229 | /******************* DUMP function *****************************/ | ... | ... |