BSHTryStatement.smali
.class Lbsh/BSHTryStatement;
.super Lbsh/SimpleNode;
# direct methods
.method constructor <init>(I)V
.registers 2
invoke-direct {p0, p1}, Lbsh/SimpleNode;-><init>(I)V
return-void
.end method
# virtual methods
.method public a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
.registers 15
const/4 v1, 0x1
const/4 v7, 0x0
const/4 v3, 0x0
invoke-virtual {p0, v7}, Lbsh/BSHTryStatement;->a(I)Lbsh/Node;
move-result-object v0
check-cast v0, Lbsh/BSHBlock;
new-instance v8, Ljava/util/Vector;
invoke-direct {v8}, Ljava/util/Vector;-><init>()V
new-instance v9, Ljava/util/Vector;
invoke-direct {v9}, Ljava/util/Vector;-><init>()V
invoke-virtual {p0}, Lbsh/BSHTryStatement;->g()I
move-result v2
:goto_17
if-ge v1, v2, :cond_10c
add-int/lit8 v4, v1, 0x1
invoke-virtual {p0, v1}, Lbsh/BSHTryStatement;->a(I)Lbsh/Node;
move-result-object v1
instance-of v5, v1, Lbsh/BSHFormalParameter;
if-nez v5, :cond_4a
:goto_23
if-eqz v1, :cond_109
check-cast v1, Lbsh/BSHBlock;
move-object v2, v1
:goto_28
invoke-virtual {p1}, Lbsh/c;->d()I
move-result v1
:try_start_2c
invoke-virtual {v0, p1, p2}, Lbsh/BSHBlock;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
:try_end_2f
.catch Lbsh/TargetError; {:try_start_2c .. :try_end_2f} :catch_57
move-result-object v5
move-object v6, v3
:goto_31
if-eqz v6, :cond_106
invoke-virtual {v6}, Lbsh/TargetError;->c()Ljava/lang/Throwable;
move-result-object v4
:goto_37
if-eqz v4, :cond_3f
invoke-virtual {v8}, Ljava/util/Vector;->size()I
move-result v10
:goto_3d
if-lt v7, v10, :cond_87
:cond_3f
move-object v0, v5
move-object v3, v6
:goto_41
if-eqz v2, :cond_47
invoke-virtual {v2, p1, p2}, Lbsh/BSHBlock;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
move-result-object v0
:cond_47
if-eqz v3, :cond_fe
throw v3
:cond_4a
invoke-virtual {v8, v1}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V
add-int/lit8 v1, v4, 0x1
invoke-virtual {p0, v4}, Lbsh/BSHTryStatement;->a(I)Lbsh/Node;
move-result-object v4
invoke-virtual {v9, v4}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V
goto :goto_17
:catch_57
move-exception v6
const-string/jumbo v0, "Bsh Stack: "
:goto_5b
invoke-virtual {p1}, Lbsh/c;->d()I
move-result v4
if-gt v4, v1, :cond_63
move-object v5, v3
goto :goto_31
:cond_63
new-instance v4, Ljava/lang/StringBuffer;
invoke-direct {v4}, Ljava/lang/StringBuffer;-><init>()V
invoke-virtual {v4, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v0
const-string/jumbo v4, "\t"
invoke-virtual {v0, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v0
invoke-virtual {p1}, Lbsh/c;->c()Lbsh/NameSpace;
move-result-object v4
invoke-virtual {v0, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/Object;)Ljava/lang/StringBuffer;
move-result-object v0
const-string/jumbo v4, "\n"
invoke-virtual {v0, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;
move-result-object v0
goto :goto_5b
:cond_87
invoke-virtual {v8, v7}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lbsh/BSHFormalParameter;
invoke-virtual {v0, p1, p2}, Lbsh/BSHFormalParameter;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
iget-object v1, v0, Lbsh/BSHFormalParameter;->c:Ljava/lang/Class;
if-nez v1, :cond_a3
invoke-virtual {p2}, Lbsh/Interpreter;->f()Z
move-result v1
if-eqz v1, :cond_a3
new-instance v0, Lbsh/EvalError;
const-string/jumbo v1, "(Strict Java) Untyped catch block"
invoke-direct {v0, v1, p0, p1}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v0
:cond_a3
iget-object v1, v0, Lbsh/BSHFormalParameter;->c:Ljava/lang/Class;
if-eqz v1, :cond_b1
:try_start_a7
iget-object v1, v0, Lbsh/BSHFormalParameter;->c:Ljava/lang/Class;
const/4 v11, 0x1
invoke-static {v4, v1, v11}, Lbsh/r;->a(Ljava/lang/Object;Ljava/lang/Class;I)Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/lang/Throwable;
:try_end_b0
.catch Lbsh/UtilEvalError; {:try_start_a7 .. :try_end_b0} :catch_f8
move-object v4, v1
:cond_b1
invoke-virtual {v9, v7}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lbsh/BSHBlock;
invoke-virtual {p1}, Lbsh/c;->b()Lbsh/NameSpace;
move-result-object v5
new-instance v6, Lbsh/BlockNameSpace;
invoke-direct {v6, v5}, Lbsh/BlockNameSpace;-><init>(Lbsh/NameSpace;)V
:try_start_c0
iget-object v7, v0, Lbsh/BSHFormalParameter;->c:Ljava/lang/Class;
sget-object v8, Lbsh/BSHFormalParameter;->a:Ljava/lang/Class;
if-ne v7, v8, :cond_d7
iget-object v0, v0, Lbsh/BSHFormalParameter;->b:Ljava/lang/String;
invoke-virtual {v6, v0, v4}, Lbsh/BlockNameSpace;->a(Ljava/lang/String;Ljava/lang/Object;)V
:try_end_cb
.catch Lbsh/UtilEvalError; {:try_start_c0 .. :try_end_cb} :catch_e9
:goto_cb
invoke-virtual {p1, v6}, Lbsh/c;->b(Lbsh/NameSpace;)Lbsh/NameSpace;
:try_start_ce
invoke-virtual {v1, p1, p2}, Lbsh/BSHBlock;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
:try_end_d1
.catchall {:try_start_ce .. :try_end_d1} :catchall_f3
move-result-object v0
invoke-virtual {p1, v5}, Lbsh/c;->b(Lbsh/NameSpace;)Lbsh/NameSpace;
goto/16 :goto_41
:cond_d7
:try_start_d7
new-instance v7, Lbsh/Modifiers;
invoke-direct {v7}, Lbsh/Modifiers;-><init>()V
iget-object v7, v0, Lbsh/BSHFormalParameter;->b:Ljava/lang/String;
iget-object v0, v0, Lbsh/BSHFormalParameter;->c:Ljava/lang/Class;
new-instance v8, Lbsh/Modifiers;
invoke-direct {v8}, Lbsh/Modifiers;-><init>()V
invoke-virtual {v6, v7, v0, v4, v8}, Lbsh/BlockNameSpace;->a(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Lbsh/Modifiers;)V
:try_end_e8
.catch Lbsh/UtilEvalError; {:try_start_d7 .. :try_end_e8} :catch_e9
goto :goto_cb
:catch_e9
move-exception v0
new-instance v0, Lbsh/InterpreterError;
const-string/jumbo v1, "Unable to set var in catch block namespace."
invoke-direct {v0, v1}, Lbsh/InterpreterError;-><init>(Ljava/lang/String;)V
throw v0
:catchall_f3
move-exception v0
invoke-virtual {p1, v5}, Lbsh/c;->b(Lbsh/NameSpace;)Lbsh/NameSpace;
throw v0
:catch_f8
move-exception v0
add-int/lit8 v0, v7, 0x1
move v7, v0
goto/16 :goto_3d
:cond_fe
instance-of v1, v0, Lbsh/p;
if-eqz v1, :cond_103
:goto_102
return-object v0
:cond_103
sget-object v0, Lbsh/Primitive;->c:Lbsh/Primitive;
goto :goto_102
:cond_106
move-object v4, v3
goto/16 :goto_37
:cond_109
move-object v2, v3
goto/16 :goto_28
:cond_10c
move-object v1, v3
goto/16 :goto_23
.end method