2
0

var_parameter.js 2.1 KB

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