map.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <rtl code>
  2. var test = function (){
  3. function T(){
  4. }
  5. var m = {};
  6. var mr = {};
  7. var mm = {};
  8. var ma = {};
  9. function anonymous$1(){
  10. this.m = {};
  11. }
  12. var r = new anonymous$1();
  13. var a = RTL$.makeArray(1, function(){return {};});
  14. function RecordWithMapInitializedInConstructor(m/*MAP OF INTEGER*/){
  15. this.m = RTL$.clone(m, {map: null}, undefined);
  16. }
  17. function ForEach(){
  18. var m = {};
  19. var $map1 = m;
  20. for(var k in $map1){
  21. var v = $map1[k];
  22. RTL$.assert(v == 0);
  23. RTL$.assert(k != "");
  24. }
  25. }
  26. function makeMap(){
  27. var m = {};
  28. return RTL$.clone(m, {map: null}, undefined);
  29. }
  30. function ForEachWithExpression(){
  31. var $map1 = makeMap();
  32. for(var k in $map1){
  33. var v = $map1[k];
  34. }
  35. }
  36. function NestedForEach(){
  37. var m = {};
  38. function inner(){
  39. var $map1 = m;
  40. for(var k in $map1){
  41. var v = $map1[k];
  42. var $map2 = m;
  43. for(var k2 in $map2){
  44. var v2 = $map2[k2];
  45. }
  46. }
  47. }
  48. var $map1 = m;
  49. for(var k in $map1){
  50. var v = $map1[k];
  51. var $map2 = m;
  52. for(var k2 in $map2){
  53. var v2 = $map2[k2];
  54. }
  55. }
  56. var $map3 = m;
  57. for(var k3 in $map3){
  58. var v3 = $map3[k3];
  59. var $map4 = m;
  60. for(var k in $map4){
  61. var v = $map4[k];
  62. }
  63. }
  64. }
  65. function put(){
  66. var $scope1 = $scope + ".put";
  67. function T(){
  68. this.field = 0;
  69. }
  70. function Derived(){
  71. T.call(this);
  72. }
  73. RTL$.extend(Derived, T, $scope1);
  74. var m = {};
  75. var s = '';
  76. var a = RTL$.makeCharArray(3);
  77. var r = new T();
  78. var pr = null;
  79. var d = new Derived();
  80. var mapOfMap = {};
  81. var mapOfRecord = {};
  82. var mapOfPointer = {};
  83. m["a"] = 1;
  84. m["abc"] = 2;
  85. m[s] = 3;
  86. m[a] = 4;
  87. RTL$.getMappedValue(mapOfMap, "abc")["cde"] = 5;
  88. mapOfRecord["abc"] = RTL$.clone(r, {record: {field: null}}, T);
  89. pr = new T();
  90. mapOfRecord["abc"] = RTL$.clone(pr, {record: {field: null}}, T);
  91. mapOfRecord["abc"] = RTL$.clone(d, {record: {field: null}}, T);
  92. mapOfRecord["abc"] = new T();
  93. mapOfRecord["abc"] = RTL$.clone(new Derived(), {record: {field: null}}, T);
  94. RTL$.getMappedValue(mapOfRecord, "abc").field = 6;
  95. mapOfPointer["abc"] = new T();
  96. RTL$.copy(new T(), RTL$.getMappedValue(mapOfPointer, "abc"), {record: {field: null}});
  97. mapOfPointer["abc"] = new Derived();
  98. RTL$.copy(new Derived(), RTL$.getMappedValue(mapOfPointer, "abc"), {record: {field: null}});
  99. }
  100. function in$(){
  101. var m = {};
  102. RTL$.assert(!Object.prototype.hasOwnProperty.call(m, "abc"));
  103. }
  104. function get(){
  105. var m = {};
  106. var s = '';
  107. var a = RTL$.makeCharArray(3);
  108. RTL$.assert(RTL$.getMappedValue(m, "a") == 1);
  109. RTL$.assert(RTL$.getMappedValue(m, "abc") == 2);
  110. RTL$.assert(RTL$.getMappedValue(m, s) == 3);
  111. RTL$.assert(RTL$.getMappedValue(m, a) == 4);
  112. }
  113. function remove(){
  114. var m = {};
  115. delete m["abc"];
  116. }
  117. function clear(){
  118. var m = {};
  119. RTL$.clearMap(m);
  120. RTL$.clearMap(m);
  121. }
  122. function returnLocalMap(){
  123. var result = {};
  124. return RTL$.clone(result, {map: null}, undefined);
  125. }
  126. function returnNonLocalMap(m/*MAP OF INTEGER*/){
  127. return RTL$.clone(m, {map: null}, undefined);
  128. }
  129. function assign(a/*MAP OF INTEGER*/){
  130. var v = {};
  131. RTL$.copy(a, v, {map: null});
  132. var v2 = RTL$.clone(a, {map: null}, undefined);
  133. var v3 = RTL$.clone(v2, {map: null}, undefined);
  134. var v4 = RTL$.clone(returnLocalMap(), {map: null}, undefined);
  135. var v5 = RTL$.clone(returnNonLocalMap(v), {map: null}, undefined);
  136. }
  137. function copyMapOfRecord(){
  138. var $scope1 = $scope + ".copyMapOfRecord";
  139. function T(){
  140. }
  141. var r1 = {};var r2 = {};
  142. RTL$.copy(r2, r1, {map: {record: {}}});
  143. }
  144. function cloneMapOfRecord(){
  145. var $scope1 = $scope + ".cloneMapOfRecord";
  146. function T(){
  147. }
  148. var r1 = {};
  149. var r2 = RTL$.clone(r1, {map: {record: {}}}, undefined);
  150. }
  151. function passByRef(m/*VAR MAP OF INTEGER*/){
  152. m["abc"] = 123;
  153. RTL$.assert(Object.prototype.hasOwnProperty.call(m, "abc"));
  154. }
  155. function passMapRecordElementByRef(r/*VAR T*/){
  156. }
  157. function passMapMapElementByRef(m/*VAR MAP OF INTEGER*/){
  158. }
  159. function passMapArrayElementByRef(a/*VAR ARRAY * OF INTEGER*/){
  160. }
  161. var $map1 = m;
  162. for(var k in $map1){
  163. var v = $map1[k];
  164. var $map2 = m;
  165. for(var k2 in $map2){
  166. var v2 = $map2[k2];
  167. }
  168. }
  169. passByRef(m);
  170. passByRef(r.m);
  171. passByRef(a[0]);
  172. passMapRecordElementByRef(RTL$.getMappedValue(mr, "a"));
  173. passMapMapElementByRef(RTL$.getMappedValue(mm, "a"));
  174. passMapArrayElementByRef(RTL$.getMappedValue(ma, "a"));
  175. }();