var_parameter.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. var RTL$ = {
  2. extend: function extend(methods){
  3. function Type(){
  4. for(var m in methods)
  5. this[m] = methods[m];
  6. }
  7. Type.prototype = this.prototype;
  8. var result = methods.init;
  9. result.prototype = new Type(); // inherit this.prototype
  10. result.prototype.constructor = result; // to see constructor name in diagnostic
  11. result.extend = extend;
  12. return result;
  13. },
  14. makeArray: function (/*dimensions, initializer*/){
  15. var forward = Array.prototype.slice.call(arguments);
  16. var result = new Array(forward.shift());
  17. var i;
  18. if (forward.length == 1){
  19. var init = forward[0];
  20. if (typeof init == "function")
  21. for(i = 0; i < result.length; ++i)
  22. result[i] = init();
  23. else
  24. for(i = 0; i < result.length; ++i)
  25. result[i] = init;
  26. }
  27. else
  28. for(i = 0; i < result.length; ++i)
  29. result[i] = this.makeArray.apply(this, forward);
  30. return result;
  31. },
  32. makeRef: function (obj, prop){
  33. return {set: function(v){ obj[prop] = v; },
  34. get: function(){ return obj[prop]; }};
  35. }
  36. };
  37. var m = function (){
  38. var R = RTL$.extend({
  39. init: function R(){
  40. this.i = 0;
  41. this.p = null;
  42. }
  43. });
  44. var i = 0;
  45. var b = false;
  46. var a = RTL$.makeArray(5, 0);
  47. function p1(i1/*VAR INTEGER*/, i2/*VAR INTEGER*/){
  48. i1.set(1);
  49. i2.set(2);
  50. }
  51. function p2(i/*INTEGER*/, b/*BOOLEAN*/){
  52. }
  53. function index(i/*VAR INTEGER*/){
  54. return i.get();
  55. }
  56. function array(a/*VAR ARRAY OF INTEGER*/){
  57. return a[0];
  58. }
  59. function p3(i/*VAR INTEGER*/, b/*VAR BOOLEAN*/){
  60. var j = 0;
  61. var r = new R();
  62. var ar = RTL$.makeArray(5, function(){return new R();});
  63. var ai = RTL$.makeArray(5, 0);
  64. j = i.get() + 1 | 0;
  65. j = 2 * i.get() | 0;
  66. j = i.get() / 2 | 0;
  67. j = -i.get();
  68. b.set(!b.get());
  69. a[i.get()] = i.get();
  70. p1({set: function($v){j = $v;}, get: function(){return j;}}, i);
  71. p1(i, {set: function($v){j = $v;}, get: function(){return j;}});
  72. p1(i, RTL$.makeRef(a, index(i)));
  73. p2(i.get(), b.get());
  74. p1(RTL$.makeRef(r, "i"), RTL$.makeRef(ar[index(RTL$.makeRef(r, "i"))], "i"));
  75. r.p = new R();
  76. ar[j].p = new R();
  77. p1(RTL$.makeRef(r.p, "i"), RTL$.makeRef(ar[j].p, "i"));
  78. p2(ar[j].p.i, r.p.i == ar[j].p.i);
  79. j = array(ai);
  80. }
  81. p3({set: function($v){i = $v;}, get: function(){return i;}}, {set: function($v){b = $v;}, get: function(){return b;}});
  82. }();