var_parameter.js 2.9 KB

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