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