Explorar el Código

code generation for dynamic array "remove" method

Vladislav Folts hace 10 años
padre
commit
b80c87f85c

BIN
bin/compiled.zip


+ 1 - 1
src/eberon/EberonDynamicArray.ob

@@ -170,7 +170,7 @@ BEGIN
     IF (value # NIL) & (value^ IS Code.IntConst) THEN
         Code.checkIndex(value.value);
     END;
-    RETURN Code.makeSimpleExpression("(" + arg.code() + ")", NIL)
+    RETURN Code.makeSimpleExpression("(" + arg.code() + ", 1)", NIL)
 END RemoveMethodCall.make;
 
 PROCEDURE DynamicArrayMethodRemove.designatorCode(id: STRING): STRING;

+ 1 - 0
test/expected/eberon/dynamic_array.js

@@ -111,4 +111,5 @@ dynamicByte.push(byte);
 dynamicByte.push(i & 0xFF);
 dynamicRecord.push(RTL$.clone(r));
 dynamicArrayOfStaticArrayInt.push(RTL$.clone(a));
+dynamicInt.splice(i, 1);
 }();

+ 2 - 0
test/input/eberon/dynamic_array.ob

@@ -40,4 +40,6 @@ BEGIN
     dynamicRecord.add(r);
 
     dynamicArrayOfStaticArrayInt.add(a);
+
+    dynamicInt.remove(i);
 END m.

+ 23 - 0
test/input/eberon/run/dynamic_array.ob

@@ -2,6 +2,28 @@ MODULE m;
 VAR
     static: ARRAY 3 OF INTEGER;
     dynamic: ARRAY * OF INTEGER;
+
+PROCEDURE testAddRemove();
+VAR
+    a: ARRAY * OF INTEGER;
+BEGIN
+    ASSERT(LEN(a) = 0);
+    a.add(1);
+    ASSERT(LEN(a) = 1);
+    ASSERT(a[0] = 1);
+    a.add(2);
+    ASSERT(LEN(a) = 2);
+    ASSERT(a[1] = 2);
+    a.add(3);
+    ASSERT(LEN(a) = 3);
+    ASSERT(a[2] = 3);
+
+    a.remove(1);
+    ASSERT(LEN(a) = 2);
+    ASSERT(a[0] = 1);
+    ASSERT(a[1] = 3);
+END testAddRemove;
+
 BEGIN
     static[0] := 1;
     static[1] := 2;
@@ -14,4 +36,5 @@ BEGIN
     ASSERT(dynamic[1] = 2);
     ASSERT(dynamic[2] = 3);*)
 
+    testAddRemove();
 END m.