in_place_variables.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. clone: function (from){
  33. var to;
  34. var len;
  35. var i;
  36. var Ctr = from.constructor;
  37. if (Ctr == Uint16Array){
  38. len = from.length;
  39. to = this.__makeCharArray(len);
  40. for(i = 0; i < len; ++i)
  41. to[i] = from[i];
  42. }
  43. else {
  44. to = new Ctr();
  45. if (Ctr == Array)
  46. len = from.length;
  47. if (len){
  48. if (typeof from[0] != "object")
  49. for(i = 0; i < len; ++i)
  50. to[i] = from[i];
  51. else
  52. for(i = 0; i < len; ++i){
  53. var o = from[i];
  54. if (o !== null)
  55. to[i] = this.clone(o);
  56. }
  57. }
  58. else
  59. this.copy(from, to);
  60. }
  61. return to;
  62. },
  63. copy: function (from, to){
  64. for(var prop in to){
  65. if (to.hasOwnProperty(prop)){
  66. var v = from[prop];
  67. if (v !== null && typeof v == "object")
  68. this.copy(v, to[prop]);
  69. else
  70. to[prop] = v;
  71. }
  72. }
  73. },
  74. __makeCharArray: function (length){
  75. var result = new Uint16Array(length);
  76. result.charCodeAt = function(i){return this[i];};
  77. return result;
  78. },
  79. assert: function (condition){
  80. if (!condition)
  81. throw new Error("assertion failed");
  82. }
  83. };
  84. var m = function (){
  85. var Base = RTL$.extend({
  86. init: function Base(){
  87. }
  88. });
  89. var Derived = Base.extend({
  90. init: function Derived(){
  91. Base.prototype.init.call(this);
  92. this.derivedField = 0;
  93. }
  94. });
  95. var r = new Derived();
  96. var pbVar = null;
  97. var pdVar = null;
  98. var i = 0;
  99. var a = RTL$.makeArray(10, 0);
  100. function p(){
  101. return false;
  102. }
  103. function void$(){
  104. }
  105. function valueArgs(r/*Derived*/, i/*INTEGER*/, a/*ARRAY 10 OF INTEGER*/){
  106. var v1 = RTL$.clone(r);
  107. var v2 = i;
  108. var v3 = RTL$.clone(a);
  109. }
  110. function varArgs(r/*VAR Derived*/, i/*VAR INTEGER*/, a/*ARRAY 10 OF INTEGER*/){
  111. var v1 = RTL$.clone(r);
  112. var v2 = i.get();
  113. var v3 = RTL$.clone(a);
  114. }
  115. function pChar(c/*CHAR*/){
  116. }
  117. function pCharArray(a/*ARRAY OF CHAR*/){
  118. }
  119. function pString(s/*STRING*/){
  120. }
  121. var v1 = 0;
  122. var v2 = 1.23;
  123. var v3 = "abc";
  124. var vs = "\"";
  125. pChar(vs.charCodeAt(0));
  126. pChar(34);
  127. pCharArray(vs);
  128. pString(vs);
  129. var v4 = true;
  130. var v5 = i;
  131. var v6 = i + i | 0;
  132. var v7 = p();
  133. var v8 = void$;
  134. var do$ = 0;
  135. var tempRecord = RTL$.clone(r);
  136. var tempArray = RTL$.clone(a);
  137. pdVar = new Derived();
  138. pbVar = pdVar;
  139. var pb = pbVar;
  140. if (pb instanceof Derived){
  141. pb.derivedField = 123;
  142. }
  143. RTL$.assert(!(pb instanceof Derived) || pb.derivedField == 123);
  144. }();