Opened 8 years ago
Closed 8 years ago
#1330 closed defect (fixed)
spock generates unreachable code
Reported by: | Mario Domenech Goulart | Owned by: | felix winkelmann |
---|---|---|---|
Priority: | major | Milestone: | someday |
Component: | extensions | Version: | 4.11.0 |
Keywords: | spock, unreachable code | Cc: | |
Estimated difficulty: |
Description
The spock runtime (both spock-runtime.js and spock-runtime-debug.js) contains unreachable code. Example:
____25call_2dwith_2dsaved_2dvalues = t1355; // set! %call-with-saved-values ... var t6 = t1358; var t1360; if(t6 !== false) { return k1100(t6); t1360 = undefined; } ...
The assignment t1360 = undefined;
is never reached, as there is a return statement immediately before.
Tip to find such cases: search for " = undefined"
in spock-runtime.js or spock-runtime-debug.js.
I don't know exactly how this affects code, but the firebug console prints thousands of warnings because of this.
Attachments (1)
Change History (5)
Changed 8 years ago by
Attachment: | spock-dead-assign-undefined.diff added |
---|
comment:1 Changed 8 years ago by
comment:3 Changed 8 years ago by
Very good, I'll push a new version, together with your fix from #1331
comment:4 Changed 8 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note: See
TracTickets for help on using
tickets.
Can you try the attached Patch? The reason for these assignments is that the compiler does not detect whether conditional branches return. The patch avoids an assignment to variable if the branch has an unspecified result. The variable declared before the conditional (holding the result of either branch) is initialized to undefined anyway, so this should work as before.
There may be more cases of dead assignments, but this patch should eliminate most.