modules.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. typeGuard: function (from, to){
  15. if (!(from instanceof to)){
  16. var fromStr;
  17. var toStr;
  18. if (from && from.constructor && from.constructor.name)
  19. fromStr = "" + from.constructor.name;
  20. else
  21. fromStr = "" + from;
  22. if (to.name)
  23. toStr = "" + to.name;
  24. else
  25. toStr = "" + to;
  26. var msg = "typeguard assertion failed";
  27. if (fromStr || toStr)
  28. msg += ": '" + fromStr + "' is not an extension of '" + toStr + "'";
  29. throw new Error(msg);
  30. }
  31. return from;
  32. },
  33. makeRef: function (obj, prop){
  34. return {set: function(v){ obj[prop] = v; },
  35. get: function(){ return obj[prop]; }};
  36. },
  37. makeArray: function (/*dimensions, initializer*/){
  38. var forward = Array.prototype.slice.call(arguments);
  39. var result = new Array(forward.shift());
  40. var i;
  41. if (forward.length == 1){
  42. var init = forward[0];
  43. if (typeof init == "function")
  44. for(i = 0; i < result.length; ++i)
  45. result[i] = init();
  46. else
  47. for(i = 0; i < result.length; ++i)
  48. result[i] = init;
  49. }
  50. else
  51. for(i = 0; i < result.length; ++i)
  52. result[i] = this.makeArray.apply(this, forward);
  53. return result;
  54. }
  55. };
  56. var m1 = function (){
  57. var ci = 123;
  58. var Base = RTL$.extend({
  59. init: function Base(){
  60. this.i = 0;
  61. }
  62. });
  63. var T = Base.extend({
  64. init: function T(){
  65. Base.prototype.init.call(this);
  66. }
  67. });
  68. var TPA = RTL$.extend({
  69. init: function TPA(){
  70. }
  71. });
  72. var TPB = Base.extend({
  73. init: function TPB(){
  74. Base.prototype.init.call(this);
  75. }
  76. });
  77. var i = 0;
  78. var anonymous$1 = RTL$.extend({
  79. init: function anonymous$1(){
  80. this.i = 0;
  81. }
  82. });
  83. var pr = null;
  84. var pr2 = null;
  85. function p(){
  86. }
  87. function makeTPA(){
  88. var result = null;
  89. result = new TPA();
  90. return result;
  91. }
  92. function makeTPB(){
  93. var result = null;
  94. result = new TPB();
  95. return result;
  96. }
  97. pr = new anonymous$1();
  98. return {
  99. ci: ci,
  100. Base: Base,
  101. T: T,
  102. TPA: TPA,
  103. TPB: TPB,
  104. i: function(){return i;},
  105. pr: function(){return pr;},
  106. pr2: function(){return pr2;},
  107. p: p,
  108. makeTPA: makeTPA,
  109. makeTPB: makeTPB
  110. }
  111. }();
  112. var m2 = function (m1){
  113. var T = m1.T.extend({
  114. init: function T(){
  115. m1.T.prototype.init.call(this);
  116. this.i2 = 0;
  117. }
  118. });
  119. var r = new m1.T();
  120. var r2 = new T();
  121. var pb = null;
  122. var ptr = null;
  123. var ptr2 = null;
  124. var ptrA = null;
  125. function p(i/*INTEGER*/){
  126. }
  127. function ref(i/*VAR INTEGER*/){
  128. }
  129. ptr = new m1.T();
  130. pb = ptr;
  131. RTL$.typeGuard(pb, m1.T).i = 123;
  132. ptr2 = new T();
  133. ptr2.i = 1;
  134. ptr2.i2 = 2;
  135. ptrA = m1.makeTPA();
  136. m1.p();
  137. p(m1.i());
  138. p(m1.ci);
  139. ref(RTL$.makeRef(m1.pr2(), "i"));
  140. }(m1);
  141. var m3 = function (m1, m2){
  142. var T = m2.T.extend({
  143. init: function T(){
  144. m2.T.prototype.init.call(this);
  145. }
  146. });
  147. var r = new m2.T();
  148. var r2 = new T();
  149. var a = RTL$.makeArray(3, function(){return new m2.Base();});
  150. var ptr = null;
  151. var pb = null;
  152. var pTPB = null;
  153. ptr = new m2.T();
  154. pb = ptr;
  155. RTL$.typeGuard(pb, m2.T).i = 123;
  156. pb = m2.makeTPB();
  157. pTPB = RTL$.typeGuard(pb, m2.TPB);
  158. m2.p();
  159. }(m2, m1);