diff --git a/src/main/java/org/sentrysoftware/jawk/backend/AVM.java b/src/main/java/org/sentrysoftware/jawk/backend/AVM.java index abaa1b2..0c47a89 100644 --- a/src/main/java/org/sentrysoftware/jawk/backend/AVM.java +++ b/src/main/java/org/sentrysoftware/jawk/backend/AVM.java @@ -1109,8 +1109,8 @@ public void interpret(AwkTuples tuples) // ARRAY reference offset/is_global long offset = position.intArg(0); boolean is_global = position.boolArg(1); - String newString = execSubOrGSub(position, 2); Object arr_idx = pop(); + String newString = execSubOrGSub(position, 2); // assign it to "offset/arr_idx/global" assignArray(offset, arr_idx, newString, is_global); pop(); diff --git a/src/test/java/org/sentrysoftware/jawk/AwkTest.java b/src/test/java/org/sentrysoftware/jawk/AwkTest.java index 37e5e8c..a58e206 100644 --- a/src/test/java/org/sentrysoftware/jawk/AwkTest.java +++ b/src/test/java/org/sentrysoftware/jawk/AwkTest.java @@ -398,4 +398,13 @@ public void testPrintComparison() throws Exception { ); } + @Test + public void testGsubArray() throws Exception { + assertEquals( + "gsub on an array element must change the value of the element", + "abcd\n", + runAwk("BEGIN { a[1] = \"ab:cd\"; gsub(/:/, \"\", a[1]); print a[1]; }", null) + ); + } + }