5 export sbJ_make_dealias_state
15 import sbJ_get_namespace
16 import sbJ_get_namespace_absolute
18 import sbJ_namespace_intern
19 import sbJ_absolute_symbol
20 import sbJ_allocate_words
22 import sbJ_array_length
25 import sbJ_blob_length
28 import sbJ_block_length
31 import sbJ_concatenate_blobs
32 import sbJ_copy_blob_part
33 import sbJ_hash_table_get
34 import sbJ_hash_table_put
35 import sbJ_make_hash_table
37 import sbJ_symbol_hash
38 import sbJ_symbol_name
39 import sbJ_symbol_namespace
47 # If sym's symbol-name starts in "@", returns a symbol in the same
48 # namespace as sym, but with the leading "@" removed from its name.
50 let sbJ_name call sbJ_symbol_name sbJ_sym
51 let sbJ_namelen call sbJ_blob_length sbJ_name
52 let sbJ__sb_G1 call sbJ_le sbJ_namelen 0
53 ifeq sbJ__sb_G1 @sbJ_true
58 let sbJ__sb_G2 call sbJ_blob_nth sbJ_name 0
59 let sbJ__sb_G3 call sbJ_ne sbJ__sb_G2 64
60 ifeq sbJ__sb_G3 @sbJ_true
65 let sbJ__sb_G4 sub sbJ_namelen 1
66 let sbJ_newname call sbJ_copy_blob_part sbJ_name 1 sbJ__sb_G4
67 let sbJ__sb_G5 call sbJ_symbol_namespace sbJ_sym
68 let sbJ_newsym call sbJ_namespace_intern sbJ__sb_G5 sbJ_newname
75 function sbJ_state sbJ_code
79 let sbJ_modified auto-words 1
81 set @sbJ_modified @sbJ_false
82 set sbJ_code call sbJ_dealias1_ex sbJ_state sbJ_code @sbJ_false sbJ_modified
83 set _sb_G6 @sbJ_modified
84 ifeq _sb_G6 @sbJ_false
96 function sbJ_state sbJ_code sbJ_nested sbJ_modified
98 let sbJ_type call sbJ_type_of sbJ_code
99 let sbJ__sb_G9 call sbJ_eq sbJ_type sbJ_symbol_t
100 ifeq sbJ__sb_G9 @sbJ_true
102 let sbJ__sb_G10 get-word sbJ_state 1
103 let sbJ_match call sbJ_hash_table_get sbJ__sb_G10 sbJ_code -1
104 let sbJ__sb_G11 call sbJ_eq sbJ_match -1
105 ifeq sbJ__sb_G11 @sbJ_true
107 let sbJ_newsym call sbJ_chop_at sbJ_code
108 let sbJ__sb_G12 call sbJ_ne sbJ_newsym -1
109 ifeq sbJ__sb_G12 @sbJ_true
111 let sbJ_result call sbJ_dealias1_ex sbJ_state sbJ_newsym sbJ_nested sbJ_modified
112 let sbJ__sb_G13 call sbJ_symbol_namespace sbJ_result
113 let sbJ__sb_G14 call sbJ_make_blob _sb_G53 1
114 let sbJ__sb_G15 call sbJ_symbol_name sbJ_result
115 let sbJ__sb_G16 call sbJ_concatenate_blobs sbJ__sb_G14 sbJ__sb_G15
116 let sbJ__sb_G17 call sbJ_namespace_intern sbJ__sb_G13 sbJ__sb_G16
128 set @sbJ_modified @sbJ_true
135 let sbJ__sb_G18 call sbJ_eq sbJ_type sbJ_array_t
136 ifeq sbJ__sb_G18 @sbJ_true
138 let sbJ_len call sbJ_array_length sbJ_code
139 let sbJ__sb_G19 call sbJ_eq sbJ_nested @sbJ_false
140 ifeq sbJ__sb_G19 @sbJ_true
142 let sbJ__sb_G20 call sbJ_gt sbJ_len 1
143 ifeq sbJ__sb_G20 @sbJ_true
145 let sbJ_firstJ2dword call sbJ_array_nth sbJ_code 0
146 let sbJ__sb_G21 call sbJ_make_blob _sb_G54 2
147 let sbJ__sb_G22 call sbJ_get_namespace_absolute sbJ__sb_G21
148 let sbJ__sb_G23 call sbJ_make_blob _sb_G55 5
149 let sbJ__sb_G24 call sbJ_namespace_intern sbJ__sb_G22 sbJ__sb_G23
150 let sbJ__sb_G25 call sbJ_eq sbJ_firstJ2dword sbJ__sb_G24
151 ifeq sbJ__sb_G25 @sbJ_true
153 let sbJ_sym call sbJ_array_nth sbJ_code 1
154 let sbJ_to_sym call sbJ_array_nth sbJ_code 2
155 let sbJ__sb_G26 call sbJ_ne sbJ_sym sbJ_to_sym
156 ifeq sbJ__sb_G26 @sbJ_true
158 let sbJ__sb_G27 get-word sbJ_state 1
159 call sbJ_hash_table_put sbJ__sb_G27 sbJ_sym sbJ_to_sym
162 set @sbJ_modified @sbJ_true
163 let sbJ__sb_G28 call sbJ_array 0 0
168 let sbJ__sb_G29 call sbJ_make_blob _sb_G56 2
169 let sbJ__sb_G30 call sbJ_get_namespace_absolute sbJ__sb_G29
170 let sbJ__sb_G31 call sbJ_make_blob _sb_G57 6
171 let sbJ__sb_G32 call sbJ_namespace_intern sbJ__sb_G30 sbJ__sb_G31
172 let sbJ__sb_G33 call sbJ_eq sbJ_firstJ2dword sbJ__sb_G32
173 ifeq sbJ__sb_G33 @sbJ_true
175 let sbJ_sym call sbJ_array_nth sbJ_code 1
176 let sbJ__sb_G34 get-word sbJ_state 1
177 let sbJ__sb_G35 call sbJ_make_blob _sb_G58 2
178 let sbJ__sb_G36 call sbJ_get_namespace_absolute sbJ__sb_G35
179 let sbJ__sb_G37 call sbJ_make_blob _sb_G59 4
180 let sbJ__sb_G38 call sbJ_namespace_intern sbJ__sb_G36 sbJ__sb_G37
181 let sbJ__sb_G39 call sbJ_get_namespace sbJ__sb_G38
182 let sbJ__sb_G40 call sbJ_symbol_name sbJ_sym
183 let sbJ__sb_G41 call sbJ_namespace_intern sbJ__sb_G39 sbJ__sb_G40
184 call sbJ_hash_table_put sbJ__sb_G34 sbJ_sym sbJ__sb_G41
185 set @sbJ_modified @sbJ_true
186 let sbJ__sb_G42 call sbJ_array 0 0
196 let sbJ_items auto-words sbJ_len
201 let sbJ__sb_G43 call sbJ_lt sbJ_i sbJ_len
202 set _sb_G60 sbJ__sb_G43
203 ifeq _sb_G60 @sbJ_false
206 let sbJ__sb_G44 call sbJ_array_nth sbJ_code sbJ_i
207 let sbJ__sb_G45 call sbJ_dealias1_ex sbJ_state sbJ__sb_G44 @sbJ_true sbJ_modified
208 set-word sbJ_items sbJ_i sbJ__sb_G45
209 set sbJ_i add sbJ_i 1
213 let sbJ__sb_G46 call sbJ_array sbJ_len sbJ_items
218 let sbJ__sb_G47 call sbJ_eq sbJ_type sbJ_block_t
219 ifeq sbJ__sb_G47 @sbJ_true
221 let sbJ_len call sbJ_block_length sbJ_code
222 let sbJ_items auto-words sbJ_len
227 let sbJ__sb_G48 call sbJ_lt sbJ_i sbJ_len
228 set _sb_G63 sbJ__sb_G48
229 ifeq _sb_G63 @sbJ_false
232 let sbJ__sb_G49 call sbJ_block_nth sbJ_code sbJ_i
233 let sbJ__sb_G50 call sbJ_dealias1_ex sbJ_state sbJ__sb_G49 @sbJ_true sbJ_modified
234 set-word sbJ_items sbJ_i sbJ__sb_G50
235 set sbJ_i add sbJ_i 1
239 let sbJ__sb_G51 call sbJ_array sbJ_len sbJ_items
240 let sbJ__sb_G52 call sbJ_block sbJ__sb_G51
256 sbJ_make_dealias_state:
259 let sbJ_state call sbJ_allocate_words 2
260 let sbJ__sb_G66 call sbJ_make_hash_table sbJ_symbol_hash sbJ_symbol_eq
261 set-word sbJ_state 1 sbJ__sb_G66