@@ -118,10 +118,11 @@ private void extractType(int id) {
118118 }
119119 case tupleKind :
120120 {
121- // The first two parts denote minimum length and presence of rest element.
121+ // The first two parts denote minimum length and index of rest element (or -1 if no rest element) .
122122 trapWriter .addTuple ("tuple_type_min_length" , lbl , Integer .parseInt (parts [1 ]));
123- if (parts [2 ].equals ("t" )) {
124- trapWriter .addTuple ("tuple_type_rest" , lbl );
123+ int restIndex = Integer .parseInt (parts [2 ]);
124+ if (restIndex != -1 ) {
125+ trapWriter .addTuple ("tuple_type_rest_index" , lbl , restIndex );
125126 }
126127 firstChild += 2 ;
127128 break ;
@@ -201,18 +202,22 @@ private void extractSymbolNameMapping(String relationName, JsonObject mappings)
201202
202203 private void extractSignature (int index ) {
203204 // Format is:
204- // kind;numTypeParams;requiredParams;restParamType;returnType(;paramName;paramType)*
205+ // kind;isAbstract; numTypeParams;requiredParams;restParamType;returnType(;paramName;paramType)*
205206 String [] parts = split (table .getSignatureString (index ));
206207 Label label = trapWriter .globalID ("signature;" + index );
207208 int kind = Integer .parseInt (parts [0 ]);
208- int numberOfTypeParameters = Integer .parseInt (parts [1 ]);
209- int requiredParameters = Integer .parseInt (parts [2 ]);
210- String restParamTypeTag = parts [3 ];
209+ boolean isAbstract = parts [1 ].equals ("t" );
210+ if (isAbstract ) {
211+ trapWriter .addTuple ("is_abstract_signature" , label );
212+ }
213+ int numberOfTypeParameters = Integer .parseInt (parts [2 ]);
214+ int requiredParameters = Integer .parseInt (parts [3 ]);
215+ String restParamTypeTag = parts [4 ];
211216 if (!restParamTypeTag .isEmpty ()) {
212217 trapWriter .addTuple (
213218 "signature_rest_parameter" , label , trapWriter .globalID ("type;" + restParamTypeTag ));
214219 }
215- Label returnType = trapWriter .globalID ("type;" + parts [4 ]);
220+ Label returnType = trapWriter .globalID ("type;" + parts [5 ]);
216221 trapWriter .addTuple (
217222 "signature_types" ,
218223 label ,
@@ -221,9 +226,9 @@ private void extractSignature(int index) {
221226 numberOfTypeParameters ,
222227 requiredParameters );
223228 trapWriter .addTuple ("signature_contains_type" , returnType , label , -1 );
224- int numberOfParameters = (parts .length - 5 ) / 2 ; // includes type parameters
229+ int numberOfParameters = (parts .length - 6 ) / 2 ; // includes type parameters
225230 for (int i = 0 ; i < numberOfParameters ; ++i ) {
226- int partIndex = 5 + (2 * i );
231+ int partIndex = 6 + (2 * i );
227232 String paramName = parts [partIndex ];
228233 String paramTypeId = parts [partIndex + 1 ];
229234 if (paramTypeId .length () > 0 ) { // Unconstrained type parameters have an empty type ID.
0 commit comments