2
1

lua-bug3-boolean_expression.patch 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. --- lua-5.1.4.orig/src/lcode.c 2007/12/28 15:32:23 2.25.1.3
  2. +++ lua-5.1.4/src/lcode.c 2009/06/15 14:07:34
  3. @@ -544,15 +544,18 @@
  4. pc = NO_JUMP; /* always true; do nothing */
  5. break;
  6. }
  7. - case VFALSE: {
  8. - pc = luaK_jump(fs); /* always jump */
  9. - break;
  10. - }
  11. case VJMP: {
  12. invertjump(fs, e);
  13. pc = e->u.s.info;
  14. break;
  15. }
  16. + case VFALSE: {
  17. + if (!hasjumps(e)) {
  18. + pc = luaK_jump(fs); /* always jump */
  19. + break;
  20. + }
  21. + /* else go through */
  22. + }
  23. default: {
  24. pc = jumponcond(fs, e, 0);
  25. break;
  26. @@ -572,14 +575,17 @@
  27. pc = NO_JUMP; /* always false; do nothing */
  28. break;
  29. }
  30. - case VTRUE: {
  31. - pc = luaK_jump(fs); /* always jump */
  32. - break;
  33. - }
  34. case VJMP: {
  35. pc = e->u.s.info;
  36. break;
  37. }
  38. + case VTRUE: {
  39. + if (!hasjumps(e)) {
  40. + pc = luaK_jump(fs); /* always jump */
  41. + break;
  42. + }
  43. + /* else go through */
  44. + }
  45. default: {
  46. pc = jumponcond(fs, e, 1);
  47. break;