#!/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