|
40 | 40 | */
|
41 | 41 | package com.oracle.graal.python.builtins.objects.code;
|
42 | 42 |
|
| 43 | +import java.util.ArrayList; |
43 | 44 | import java.util.Arrays;
|
44 | 45 | import java.util.HashSet;
|
45 | 46 | import java.util.List;
|
@@ -287,29 +288,28 @@ private void extractArgStats() {
|
287 | 288 | Set<String> freeVarsSet = asSet((String[]) freevars);
|
288 | 289 | Set<String> cellVarsSet = asSet((String[]) cellvars);
|
289 | 290 |
|
290 |
| - Set<String> argNames = new HashSet<>(); |
291 |
| - argNames.addAll(Arrays.asList(arity.getParameterIds())); |
292 |
| - argNames.addAll(Arrays.asList(arity.getKeywordNames())); |
| 291 | + ArrayList<String> varNameList = new ArrayList<>(); // must be ordered! |
| 292 | + varNameList.addAll(Arrays.asList(arity.getParameterIds())); |
| 293 | + varNameList.addAll(Arrays.asList(arity.getKeywordNames())); |
293 | 294 |
|
294 |
| - Set<String> varnamesSet = new HashSet<>(); |
295 | 295 | for (Object identifier : getRootNode().getFrameDescriptor().getIdentifiers()) {
|
296 | 296 | if (identifier instanceof String) {
|
297 | 297 | String varName = (String) identifier;
|
298 | 298 |
|
299 | 299 | if (FrameSlotIDs.RETURN_SLOT_ID.equals(varName) || varName.startsWith(FrameSlotIDs.TEMP_LOCAL_PREFIX)) {
|
300 | 300 | // pass
|
301 |
| - } else if (PythonLanguage.getCore().getParser().isIdentifier(PythonLanguage.getCore(), varName)) { |
302 |
| - if (argNames.contains(varName)) { |
303 |
| - varnamesSet.add(varName); |
304 |
| - } else if (!freeVarsSet.contains(varName) && !cellVarsSet.contains(varName)) { |
305 |
| - varnamesSet.add(varName); |
| 301 | + } else if (!varNameList.contains(varName)) { |
| 302 | + if (PythonLanguage.getCore().getParser().isIdentifier(PythonLanguage.getCore(), varName)) { |
| 303 | + if (!freeVarsSet.contains(varName) && !cellVarsSet.contains(varName)) { |
| 304 | + varNameList.add(varName); |
| 305 | + } |
306 | 306 | }
|
307 | 307 | }
|
308 | 308 | }
|
309 | 309 | }
|
310 | 310 |
|
311 |
| - this.varnames = varnamesSet.toArray(); |
312 |
| - this.nlocals = varnamesSet.size(); |
| 311 | + this.varnames = varNameList.toArray(); |
| 312 | + this.nlocals = varNameList.size(); |
313 | 313 | }
|
314 | 314 |
|
315 | 315 | public RootNode getRootNode() {
|
|
0 commit comments