12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/*
22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2011 The Android Open Source Project
32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License.
62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at
72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes *
102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software
112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and
142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License.
152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */
169407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
179407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liaopublic class StackWalk2 {
189407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  // use v1 for this
199407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
209407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  String str = new String();  // use v0 for str in <init>
219407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
229407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  int f() {
239407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    g(1);  // use v0 for 1, v1 for this
249407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    g(2);  // use v0 for 2, v1 for this
259407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    strTest();  // use v1 for this
269407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    return 0;
279407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  }
289407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
299407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  void g(int num_calls) throws RuntimeException {
309407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    if (num_calls == 1) {  // use v0 for 1, v3 for num_calls
319407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao      System.logI("1st call");  // use v0 for PrintStream, v1 for "1st call"
329407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao      refmap2(24);  // use v0 for 24, v2 for this
339407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    } else if (num_calls == 2) {  // use v0 for 2, v3 for num_calls
349407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao      System.logI("2nd call");  // use v0 for PrintStream, v1 for "2nd call"
359407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao      refmap2(25);  // use v0 for 24, v2 for this
369407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    }
379407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    throw new RuntimeException();  // use v0 for new RuntimeException
389407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  }
399407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
409407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  void strTest() {
419407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    System.logI(str);  // use v1 for PrintStream, v2, v3 for str
429407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    str = null;  // use v1 for null, v3 for str
439407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    str = new String("ya");  // use v2 for "ya", v1 for new String
449407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    String s = str;  // use v0, v1, v3
459407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    System.logI(str);  // use v1 for PrintStream, v2, v3 for str
469407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    System.logI(s);  // use v1 for PrintStream, v0 for s
479407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    s = null;  // use v0
489407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    System.logI(s);  // use v1 for PrintStream, v0 for s
499407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  }
509407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
519407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  native int refmap2(int x);
529407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
539407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  static {
549407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    System.loadLibrary("arttest");
559407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  }
569407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao
579407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  public static void main(String[] args) {
589407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    StackWalk2 st = new StackWalk2();
599407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao    st.f();
609407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao  }
619407c60800c95902fba0b3c3265520d47c1e7052Shih-wei Liao}
62