modules.js 3.7 KB

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