in_place_variables.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. var RTL$ = {
  2. extend: function (cons, base){
  3. function Type(){}
  4. Type.prototype = base.prototype;
  5. cons.prototype = new Type();
  6. cons.prototype.constructor = cons;
  7. },
  8. makeArray: function (/*dimensions, initializer*/){
  9. var forward = Array.prototype.slice.call(arguments);
  10. var result = new Array(forward.shift());
  11. var i;
  12. if (forward.length == 1){
  13. var init = forward[0];
  14. if (typeof init == "function")
  15. for(i = 0; i < result.length; ++i)
  16. result[i] = init();
  17. else
  18. for(i = 0; i < result.length; ++i)
  19. result[i] = init;
  20. }
  21. else
  22. for(i = 0; i < result.length; ++i)
  23. result[i] = this.makeArray.apply(this, forward);
  24. return result;
  25. },
  26. cloneRecord: function (from){
  27. var Ctr = from.constructor;
  28. var result = new Ctr();
  29. this.copyRecord(from, result);
  30. return result;
  31. },
  32. copyRecord: function (from, to){
  33. for(var prop in to){
  34. if (to.hasOwnProperty(prop)){
  35. var v = from[prop];
  36. var isScalar = prop[0] != "$";
  37. if (isScalar)
  38. to[prop] = v;
  39. else
  40. to[prop] = v instanceof Array ? this.cloneArrayOfRecords(v)
  41. : this.cloneRecord(v);
  42. }
  43. }
  44. },
  45. assert: function (condition){
  46. if (!condition)
  47. throw new Error("assertion failed");
  48. }
  49. };
  50. var m = function (){
  51. function Base(){
  52. }
  53. RTL$.extend(Derived, Base);
  54. function Derived(){
  55. Base.call(this);
  56. this.derivedField = 0;
  57. }
  58. var r = new Derived();
  59. var pbVar = null;
  60. var pdVar = null;
  61. var i = 0;
  62. var a = RTL$.makeArray(10, 0);
  63. function p(){
  64. return false;
  65. }
  66. function void$(){
  67. }
  68. function valueArgs(r/*Derived*/, i/*INTEGER*/, a/*ARRAY 10 OF INTEGER*/){
  69. var v1 = RTL$.cloneRecord(r);
  70. var v2 = i;
  71. var v3 = a.slice();
  72. }
  73. function varArgs(r/*VAR Derived*/, i/*VAR INTEGER*/, a/*ARRAY 10 OF INTEGER*/){
  74. var v1 = RTL$.cloneRecord(r);
  75. var v2 = i.get();
  76. var v3 = a.slice();
  77. }
  78. function pChar(c/*CHAR*/){
  79. }
  80. function pCharArray(a/*ARRAY OF CHAR*/){
  81. }
  82. function pString(s/*STRING*/){
  83. }
  84. var v1 = 0;
  85. var v2 = 1.23;
  86. var v3 = "abc";
  87. var vs = "\"";
  88. pChar(vs.charCodeAt(0));
  89. pChar(34);
  90. pCharArray(vs);
  91. pString(vs);
  92. var v4 = true;
  93. var v5 = i;
  94. var v6 = i + i | 0;
  95. var v7 = p();
  96. var v8 = void$;
  97. var do$ = 0;
  98. var tempRecord = RTL$.cloneRecord(r);
  99. var tempArray = a.slice();
  100. pdVar = new Derived();
  101. pbVar = pdVar;
  102. var pb = pbVar;
  103. if (pb instanceof Derived){
  104. pb.derivedField = 123;
  105. }
  106. RTL$.assert(!(pb instanceof Derived) || pb.derivedField == 123);
  107. for (var j = 0; j <= 10; ++j){
  108. }
  109. }();