in_place_variables.js 3.0 KB

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