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 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 *****************************/
... ...