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,7 +12,7 @@ transmit types/densaku.anubis | ||
| 12 | 12 | ||
| 13 | public type DS_Generator_API: | 13 | public type DS_Generator_API: |
| 14 | ds_api( | 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 | public define Maybe(DS_Generator_API) | 17 | public define Maybe(DS_Generator_API) |
| 18 | load_ds_generator | 18 | load_ds_generator |
types/ds_types.anubis
| @@ -125,16 +125,57 @@ public define DS_Type | @@ -125,16 +125,57 @@ public define DS_Type | ||
| 125 | )= | 125 | )= |
| 126 | ds_type(type_name, message, ds_alts) | 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 | public type Extern_type: | 148 | public type Extern_type: |
| 130 | extern(String type_name, String ext_read) | 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 | define List(Extern_type) | 173 | define List(Extern_type) |
| 134 | extract_extern_type | 174 | extract_extern_type |
| 135 | ( | 175 | ( |
| 136 | List(DS_Component) components, | 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 | if components is | 180 | if components is |
| 140 | { | 181 | { |
| @@ -142,13 +183,16 @@ define List(Extern_type) | @@ -142,13 +183,16 @@ define List(Extern_type) | ||
| 142 | [h . t] then | 183 | [h . t] then |
| 143 | since h is component(_b_list, _anb_type, _name, _comment), | 184 | since h is component(_b_list, _anb_type, _name, _comment), |
| 144 | if _anb_type is ds_type(_type_name) then | 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 | else if _anb_type is extern_type(_type_name, read_file) then | 191 | else if _anb_type is extern_type(_type_name, read_file) then |
| 148 | extract_extern_type( | 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 | else | 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,7 +200,8 @@ define List(Extern_type) | ||
| 156 | extract_extern_type | 200 | extract_extern_type |
| 157 | ( | 201 | ( |
| 158 | List(DS_Alternative) alt, | 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 | if alt is | 206 | if alt is |
| 162 | { | 207 | { |
| @@ -164,9 +209,9 @@ define List(Extern_type) | @@ -164,9 +209,9 @@ define List(Extern_type) | ||
| 164 | [h . t] then | 209 | [h . t] then |
| 165 | if h is | 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 | alternative(_, _, components) then | 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,10 +219,11 @@ define List(Extern_type) | ||
| 174 | public define List(Extern_type) | 219 | public define List(Extern_type) |
| 175 | get_all_extern_type | 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 | since ds_type is ds_type(_, _, ds_alternatives), | 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 | /******************* DUMP function *****************************/ | 229 | /******************* DUMP function *****************************/ |