BSHPrimarySuffix.smali

.class Lbsh/BSHPrimarySuffix;
.super Lbsh/SimpleNode;


# instance fields
.field public a:I

.field public b:Ljava/lang/String;


# direct methods
.method constructor <init>(I)V
    .registers 2

    invoke-direct {p0, p1}, Lbsh/SimpleNode;-><init>(I)V

    return-void
.end method

.method static a(Ljava/lang/Object;Lbsh/c;Lbsh/Interpreter;Lbsh/SimpleNode;)I
    .registers 7

    invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/Class;->isArray()Z

    move-result v0

    if-nez v0, :cond_13

    new-instance v0, Lbsh/EvalError;

    const-string/jumbo v1, "Not an array"

    invoke-direct {v0, v1, p3, p1}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v0

    :cond_13
    const/4 v0, 0x0

    :try_start_14
    invoke-virtual {p3, v0}, Lbsh/SimpleNode;->a(I)Lbsh/Node;

    move-result-object v0

    check-cast v0, Lbsh/SimpleNode;

    invoke-virtual {v0, p1, p2}, Lbsh/SimpleNode;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;

    move-result-object v0

    instance-of v1, v0, Lbsh/Primitive;

    if-nez v1, :cond_29

    sget-object v1, Ljava/lang/Integer;->TYPE:Ljava/lang/Class;

    const/4 v2, 0x1

    invoke-static {v0, v1, v2}, Lbsh/r;->a(Ljava/lang/Object;Ljava/lang/Class;I)Ljava/lang/Object;

    move-result-object v0

    :cond_29
    check-cast v0, Lbsh/Primitive;

    invoke-virtual {v0}, Lbsh/Primitive;->c()I
    :try_end_2e
    .catch Lbsh/UtilEvalError; {:try_start_14 .. :try_end_2e} :catch_30

    move-result v0

    return v0

    :catch_30
    move-exception v0

    new-instance v1, Ljava/lang/StringBuffer;

    invoke-direct {v1}, Ljava/lang/StringBuffer;-><init>()V

    const-string/jumbo v2, "doIndex: "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v1

    invoke-virtual {v1, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/Object;)Ljava/lang/StringBuffer;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Lbsh/Interpreter;->b(Ljava/lang/String;)V

    const-string/jumbo v1, "Arrays may only be indexed by integer types."

    invoke-virtual {v0, v1, p3, p1}, Lbsh/UtilEvalError;->a(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;

    move-result-object v0

    throw v0
.end method

.method private a(ZLjava/lang/Object;Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
    .registers 10

    sget-object v1, Lbsh/Primitive;->c:Lbsh/Primitive;

    if-ne p2, v1, :cond_d

    new-instance v1, Lbsh/EvalError;

    const-string/jumbo v2, "Attempt to access property on undefined variable or class name"

    invoke-direct {v1, v2, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v1

    :cond_d
    instance-of v1, p2, Lbsh/Primitive;

    if-eqz v1, :cond_1a

    new-instance v1, Lbsh/EvalError;

    const-string/jumbo v2, "Attempt to access property on a primitive"

    invoke-direct {v1, v2, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v1

    :cond_1a
    const/4 v1, 0x0

    invoke-virtual {p0, v1}, Lbsh/BSHPrimarySuffix;->a(I)Lbsh/Node;

    move-result-object v1

    check-cast v1, Lbsh/SimpleNode;

    invoke-virtual {v1, p3, p4}, Lbsh/SimpleNode;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;

    move-result-object v1

    instance-of v2, v1, Ljava/lang/String;

    if-nez v2, :cond_32

    new-instance v1, Lbsh/EvalError;

    const-string/jumbo v2, "Property expression must be a String or identifier."

    invoke-direct {v1, v2, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v1

    :cond_32
    if-eqz p1, :cond_3d

    new-instance v2, Lbsh/LHS;

    check-cast v1, Ljava/lang/String;

    invoke-direct {v2, p2, v1}, Lbsh/LHS;-><init>(Ljava/lang/Object;Ljava/lang/String;)V

    move-object v1, v2

    :cond_3c
    :goto_3c
    return-object v1

    :cond_3d
    invoke-static {}, Lbsh/f;->a()Lbsh/f;

    move-result-object v2

    invoke-virtual {v2, p2}, Lbsh/f;->c(Ljava/lang/Object;)Z

    move-result v3

    if-eqz v3, :cond_50

    invoke-virtual {v2, p2, v1}, Lbsh/f;->a(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v1

    if-nez v1, :cond_3c

    sget-object v1, Lbsh/Primitive;->b:Lbsh/Primitive;

    goto :goto_3c

    :cond_50
    :try_start_50
    move-object v0, v1

    check-cast v0, Ljava/lang/String;

    move-object v2, v0

    invoke-static {p2, v2}, Lbsh/n;->c(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
    :try_end_57
    .catch Lbsh/UtilEvalError; {:try_start_50 .. :try_end_57} :catch_59
    .catch Lbsh/ReflectError; {:try_start_50 .. :try_end_57} :catch_73

    move-result-object v1

    goto :goto_3c

    :catch_59
    move-exception v2

    new-instance v3, Ljava/lang/StringBuffer;

    invoke-direct {v3}, Ljava/lang/StringBuffer;-><init>()V

    const-string/jumbo v4, "Property: "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v3

    invoke-virtual {v3, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/Object;)Ljava/lang/StringBuffer;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v2, v1, p0, p3}, Lbsh/UtilEvalError;->a(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;

    move-result-object v1

    throw v1

    :catch_73
    move-exception v2

    new-instance v2, Lbsh/EvalError;

    new-instance v3, Ljava/lang/StringBuffer;

    invoke-direct {v3}, Ljava/lang/StringBuffer;-><init>()V

    const-string/jumbo v4, "No such property: "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v3

    invoke-virtual {v3, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/Object;)Ljava/lang/StringBuffer;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v2, v1, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v2
.end method

.method private b(Ljava/lang/Object;ZLbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
    .registers 13

    const/4 v7, 0x0

    :try_start_1
    iget-object v1, p0, Lbsh/BSHPrimarySuffix;->b:Ljava/lang/String;

    const-string/jumbo v2, "length"

    invoke-virtual {v1, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v1

    if-eqz v1, :cond_31

    invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/Class;->isArray()Z

    move-result v1

    if-eqz v1, :cond_31

    if-eqz p2, :cond_27

    new-instance v1, Lbsh/EvalError;

    const-string/jumbo v2, "Can\'t assign array length"

    invoke-direct {v1, v2, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v1
    :try_end_21
    .catch Lbsh/UtilEvalError; {:try_start_1 .. :try_end_21} :catch_21

    :catch_21
    move-exception v1

    invoke-virtual {v1, p0, p3}, Lbsh/UtilEvalError;->a(Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;

    move-result-object v1

    throw v1

    :cond_27
    :try_start_27
    new-instance v1, Lbsh/Primitive;

    invoke-static {p1}, Ljava/lang/reflect/Array;->getLength(Ljava/lang/Object;)I

    move-result v2

    invoke-direct {v1, v2}, Lbsh/Primitive;-><init>(I)V

    :goto_30
    return-object v1

    :cond_31
    invoke-virtual {p0}, Lbsh/BSHPrimarySuffix;->g()I

    move-result v1

    if-nez v1, :cond_47

    if-eqz p2, :cond_40

    iget-object v1, p0, Lbsh/BSHPrimarySuffix;->b:Ljava/lang/String;

    invoke-static {p1, v1}, Lbsh/n;->b(Ljava/lang/Object;Ljava/lang/String;)Lbsh/LHS;

    move-result-object v1

    goto :goto_30

    :cond_40
    iget-object v1, p0, Lbsh/BSHPrimarySuffix;->b:Ljava/lang/String;

    invoke-static {p1, v1}, Lbsh/n;->a(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v1

    goto :goto_30

    :cond_47
    const/4 v1, 0x0

    invoke-virtual {p0, v1}, Lbsh/BSHPrimarySuffix;->a(I)Lbsh/Node;

    move-result-object v1

    check-cast v1, Lbsh/BSHArguments;

    invoke-virtual {v1, p3, p4}, Lbsh/BSHArguments;->b(Lbsh/c;Lbsh/Interpreter;)[Ljava/lang/Object;
    :try_end_51
    .catch Lbsh/UtilEvalError; {:try_start_27 .. :try_end_51} :catch_21

    move-result-object v3

    :try_start_52
    iget-object v2, p0, Lbsh/BSHPrimarySuffix;->b:Ljava/lang/String;

    move-object v1, p1

    move-object v4, p4

    move-object v5, p3

    move-object v6, p0

    invoke-static/range {v1 .. v6}, Lbsh/n;->a(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;Lbsh/Interpreter;Lbsh/c;Lbsh/SimpleNode;)Ljava/lang/Object;
    :try_end_5b
    .catch Lbsh/ReflectError; {:try_start_52 .. :try_end_5b} :catch_5d
    .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_52 .. :try_end_5b} :catch_7c
    .catch Lbsh/UtilEvalError; {:try_start_52 .. :try_end_5b} :catch_21

    move-result-object v1

    goto :goto_30

    :catch_5d
    move-exception v1

    :try_start_5e
    new-instance v2, Lbsh/EvalError;

    new-instance v3, Ljava/lang/StringBuffer;

    invoke-direct {v3}, Ljava/lang/StringBuffer;-><init>()V

    const-string/jumbo v4, "Error in method invocation: "

    invoke-virtual {v3, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v3

    invoke-virtual {v1}, Lbsh/ReflectError;->getMessage()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v3, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v2, v1, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v2

    :catch_7c
    move-exception v1

    new-instance v2, Ljava/lang/StringBuffer;

    invoke-direct {v2}, Ljava/lang/StringBuffer;-><init>()V

    const-string/jumbo v3, "Method Invocation "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v2

    iget-object v3, p0, Lbsh/BSHPrimarySuffix;->b:Ljava/lang/String;

    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v2

    invoke-virtual {v2}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1}, Ljava/lang/reflect/InvocationTargetException;->getTargetException()Ljava/lang/Throwable;

    move-result-object v3

    const/4 v6, 0x1

    instance-of v1, v3, Lbsh/EvalError;

    if-eqz v1, :cond_a8

    instance-of v1, v3, Lbsh/TargetError;

    if-eqz v1, :cond_b0

    move-object v0, v3

    check-cast v0, Lbsh/TargetError;

    move-object v1, v0

    invoke-virtual {v1}, Lbsh/TargetError;->d()Z

    move-result v6

    :cond_a8
    :goto_a8
    new-instance v1, Lbsh/TargetError;

    move-object v4, p0

    move-object v5, p3

    invoke-direct/range {v1 .. v6}, Lbsh/TargetError;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lbsh/SimpleNode;Lbsh/c;Z)V

    throw v1
    :try_end_b0
    .catch Lbsh/UtilEvalError; {:try_start_5e .. :try_end_b0} :catch_21

    :cond_b0
    move v6, v7

    goto :goto_a8
.end method

.method private c(Ljava/lang/Object;ZLbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
    .registers 7

    invoke-static {p1, p3, p4, p0}, Lbsh/BSHPrimarySuffix;->a(Ljava/lang/Object;Lbsh/c;Lbsh/Interpreter;Lbsh/SimpleNode;)I

    move-result v1

    if-eqz p2, :cond_c

    new-instance v0, Lbsh/LHS;

    invoke-direct {v0, p1, v1}, Lbsh/LHS;-><init>(Ljava/lang/Object;I)V

    :goto_b
    return-object v0

    :cond_c
    :try_start_c
    invoke-static {p1, v1}, Lbsh/n;->a(Ljava/lang/Object;I)Ljava/lang/Object;
    :try_end_f
    .catch Lbsh/UtilEvalError; {:try_start_c .. :try_end_f} :catch_11

    move-result-object v0

    goto :goto_b

    :catch_11
    move-exception v0

    invoke-virtual {v0, p0, p3}, Lbsh/UtilEvalError;->a(Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;

    move-result-object v0

    throw v0
.end method


# virtual methods
.method public a(Ljava/lang/Object;ZLbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
    .registers 11

    iget v0, p0, Lbsh/BSHPrimarySuffix;->a:I

    if-nez v0, :cond_26

    instance-of v0, p1, Lbsh/BSHType;

    if-eqz v0, :cond_1d

    if-eqz p2, :cond_13

    new-instance v0, Lbsh/EvalError;

    const-string/jumbo v1, "Can\'t assign .class"

    invoke-direct {v0, v1, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v0

    :cond_13
    invoke-virtual {p3}, Lbsh/c;->b()Lbsh/NameSpace;

    check-cast p1, Lbsh/BSHType;

    invoke-virtual {p1, p3, p4}, Lbsh/BSHType;->b(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Class;

    move-result-object v0

    :goto_1c
    return-object v0

    :cond_1d
    new-instance v0, Lbsh/EvalError;

    const-string/jumbo v1, "Attempt to use .class suffix on non class."

    invoke-direct {v0, v1, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v0

    :cond_26
    instance-of v0, p1, Lbsh/SimpleNode;

    if-eqz v0, :cond_64

    instance-of v0, p1, Lbsh/BSHAmbiguousName;

    if-eqz v0, :cond_5d

    check-cast p1, Lbsh/BSHAmbiguousName;

    invoke-virtual {p1, p3, p4}, Lbsh/BSHAmbiguousName;->b(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;

    move-result-object p1

    :cond_34
    :goto_34
    :try_start_34
    iget v0, p0, Lbsh/BSHPrimarySuffix;->a:I

    packed-switch v0, :pswitch_data_96

    new-instance v0, Lbsh/InterpreterError;

    const-string/jumbo v1, "Unknown suffix type"

    invoke-direct {v0, v1}, Lbsh/InterpreterError;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_42
    .catch Lbsh/ReflectError; {:try_start_34 .. :try_end_42} :catch_42
    .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_34 .. :try_end_42} :catch_84

    :catch_42
    move-exception v0

    new-instance v1, Lbsh/EvalError;

    new-instance v2, Ljava/lang/StringBuffer;

    invoke-direct {v2}, Ljava/lang/StringBuffer;-><init>()V

    const-string/jumbo v3, "reflection error: "

    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v2

    invoke-virtual {v2, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/Object;)Ljava/lang/StringBuffer;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-direct {v1, v0, p0, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V

    throw v1

    :cond_5d
    check-cast p1, Lbsh/SimpleNode;

    invoke-virtual {p1, p3, p4}, Lbsh/SimpleNode;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;

    move-result-object p1

    goto :goto_34

    :cond_64
    instance-of v0, p1, Lbsh/LHS;

    if-eqz v0, :cond_34

    :try_start_68
    check-cast p1, Lbsh/LHS;

    invoke-virtual {p1}, Lbsh/LHS;->a()Ljava/lang/Object;
    :try_end_6d
    .catch Lbsh/UtilEvalError; {:try_start_68 .. :try_end_6d} :catch_6f

    move-result-object p1

    goto :goto_34

    :catch_6f
    move-exception v0

    invoke-virtual {v0, p0, p3}, Lbsh/UtilEvalError;->a(Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;

    move-result-object v0

    throw v0

    :pswitch_75
    :try_start_75
    invoke-direct {p0, p1, p2, p3, p4}, Lbsh/BSHPrimarySuffix;->c(Ljava/lang/Object;ZLbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;

    move-result-object v0

    goto :goto_1c

    :pswitch_7a
    invoke-direct {p0, p1, p2, p3, p4}, Lbsh/BSHPrimarySuffix;->b(Ljava/lang/Object;ZLbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;

    move-result-object v0

    goto :goto_1c

    :pswitch_7f
    invoke-direct {p0, p2, p1, p3, p4}, Lbsh/BSHPrimarySuffix;->a(ZLjava/lang/Object;Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
    :try_end_82
    .catch Lbsh/ReflectError; {:try_start_75 .. :try_end_82} :catch_42
    .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_75 .. :try_end_82} :catch_84

    move-result-object v0

    goto :goto_1c

    :catch_84
    move-exception v0

    move-object v2, v0

    new-instance v0, Lbsh/TargetError;

    const-string/jumbo v1, "target exception"

    invoke-virtual {v2}, Ljava/lang/reflect/InvocationTargetException;->getTargetException()Ljava/lang/Throwable;

    move-result-object v2

    const/4 v5, 0x1

    move-object v3, p0

    move-object v4, p3

    invoke-direct/range {v0 .. v5}, Lbsh/TargetError;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lbsh/SimpleNode;Lbsh/c;Z)V

    throw v0

    :pswitch_data_96
    .packed-switch 0x1
        :pswitch_75
        :pswitch_7a
        :pswitch_7f
    .end packed-switch
.end method