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