| #!/bin/bash |
| # |
| # Copyright (C) 2010 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # The awk fun here tries to cull out all but the salient bits. The aim |
| # is to check to see that there are two invoke-static instructions, each |
| # followed directly by a move-result-object. |
| |
| jasmin -d . blort.j |
| dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \ |
| blort.class | awk ' |
| |
| BEGIN { |
| invokeAt = -1; |
| moveAt = -1; |
| invokeCount = 0; |
| failed = 0; |
| } |
| |
| # Note: This has to be done before the test clause below. |
| /move-result-object/ { |
| moveAt = NR; |
| } |
| |
| (invokeAt > 0) { |
| if (moveAt != (invokeAt + 1)) { |
| failed = 1; |
| } |
| invokeAt = -1; |
| moveAt = -1; |
| } |
| |
| # Note: This has to be done after the test clause above. |
| /invoke-static/ { |
| invokeAt = NR; |
| invokeCount++; |
| } |
| |
| END { |
| printf("total invokes: %d\n", invokeCount); |
| if (failed) { |
| exit 1; |
| } |
| } |
| ' |
| |
| if [ "$?" = "1" ]; then |
| # The test failed. Be helpful and print the entire method body. |
| dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \ |
| blort.class |
| fi |