Commit e19a5e659e24d4bf9c97e5a4f313f80a86414f5e

Authored by totoro
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 *****************************/