BSHArrayDimensions.smali
.class Lbsh/BSHArrayDimensions;
.super Lbsh/SimpleNode;
# instance fields
.field public a:Ljava/lang/Class;
.field public b:I
.field public c:I
.field public d:[I
# 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 9
const/4 v1, 0x0
invoke-virtual {p0, v1}, Lbsh/BSHArrayDimensions;->a(I)Lbsh/Node;
move-result-object v0
check-cast v0, Lbsh/SimpleNode;
instance-of v2, v0, Lbsh/BSHArrayInitializer;
if-eqz v2, :cond_80
iget-object v2, p0, Lbsh/BSHArrayDimensions;->a:Ljava/lang/Class;
if-nez v2, :cond_18
new-instance v0, Lbsh/EvalError;
const-string/jumbo v1, "Internal Array Eval err: unknown base type"
invoke-direct {v0, v1, p0, p1}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v0
:cond_18
check-cast v0, Lbsh/BSHArrayInitializer;
iget-object v2, p0, Lbsh/BSHArrayDimensions;->a:Ljava/lang/Class;
iget v3, p0, Lbsh/BSHArrayDimensions;->c:I
invoke-virtual {v0, v2, v3, p1, p2}, Lbsh/BSHArrayInitializer;->a(Ljava/lang/Class;ILbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v0
invoke-static {v0}, Lbsh/n;->b(Ljava/lang/Class;)I
move-result v0
new-array v2, v0, [I
iput-object v2, p0, Lbsh/BSHArrayDimensions;->d:[I
iget-object v2, p0, Lbsh/BSHArrayDimensions;->d:[I
array-length v2, v2
iget v4, p0, Lbsh/BSHArrayDimensions;->c:I
if-eq v2, v4, :cond_63
new-instance v1, Lbsh/EvalError;
new-instance v2, Ljava/lang/StringBuffer;
invoke-direct {v2}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v3, "Incompatible initializer. Allocation calls for a "
invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v2
iget v3, p0, Lbsh/BSHArrayDimensions;->c:I
invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(I)Ljava/lang/StringBuffer;
move-result-object v2
const-string/jumbo v3, " dimensional array, but initializer is a "
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(I)Ljava/lang/StringBuffer;
move-result-object v0
const-string/jumbo v2, " dimensional array"
invoke-virtual {v0, v2}, 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
invoke-direct {v1, v0, p0, p1}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v1
:cond_63
move v0, v1
move-object v2, v3
:goto_65
iget-object v4, p0, Lbsh/BSHArrayDimensions;->d:[I
array-length v4, v4
if-lt v0, v4, :cond_6b
:goto_6a
return-object v3
:cond_6b
iget-object v4, p0, Lbsh/BSHArrayDimensions;->d:[I
invoke-static {v2}, Ljava/lang/reflect/Array;->getLength(Ljava/lang/Object;)I
move-result v5
aput v5, v4, v0
iget-object v4, p0, Lbsh/BSHArrayDimensions;->d:[I
aget v4, v4, v0
if-lez v4, :cond_7d
invoke-static {v2, v1}, Ljava/lang/reflect/Array;->get(Ljava/lang/Object;I)Ljava/lang/Object;
move-result-object v2
:cond_7d
add-int/lit8 v0, v0, 0x1
goto :goto_65
:cond_80
iget v0, p0, Lbsh/BSHArrayDimensions;->b:I
new-array v0, v0, [I
iput-object v0, p0, Lbsh/BSHArrayDimensions;->d:[I
:goto_86
iget v0, p0, Lbsh/BSHArrayDimensions;->b:I
if-lt v1, v0, :cond_8d
sget-object v3, Lbsh/Primitive;->c:Lbsh/Primitive;
goto :goto_6a
:cond_8d
:try_start_8d
invoke-virtual {p0, v1}, Lbsh/BSHArrayDimensions;->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
iget-object v2, p0, Lbsh/BSHArrayDimensions;->d:[I
check-cast v0, Lbsh/Primitive;
invoke-virtual {v0}, Lbsh/Primitive;->c()I
move-result v0
aput v0, v2, v1
:try_end_a1
.catch Ljava/lang/Exception; {:try_start_8d .. :try_end_a1} :catch_a4
add-int/lit8 v1, v1, 0x1
goto :goto_86
:catch_a4
move-exception v0
new-instance v0, Lbsh/EvalError;
new-instance v2, Ljava/lang/StringBuffer;
invoke-direct {v2}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v3, "Array index: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v2
invoke-virtual {v2, v1}, Ljava/lang/StringBuffer;->append(I)Ljava/lang/StringBuffer;
move-result-object v1
const-string/jumbo v2, " does not evaluate to an integer"
invoke-virtual {v1, v2}, 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 {v0, v1, p0, p1}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v0
.end method
.method public a(Ljava/lang/Class;Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
.registers 6
sget-boolean v0, Lbsh/Interpreter;->a:Z
if-eqz v0, :cond_1b
new-instance v0, Ljava/lang/StringBuffer;
invoke-direct {v0}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v1, "array base type = "
invoke-virtual {v0, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v0
invoke-virtual {v0, p1}, 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-static {v0}, Lbsh/Interpreter;->b(Ljava/lang/String;)V
:cond_1b
iput-object p1, p0, Lbsh/BSHArrayDimensions;->a:Ljava/lang/Class;
invoke-virtual {p0, p2, p3}, Lbsh/BSHArrayDimensions;->a(Lbsh/c;Lbsh/Interpreter;)Ljava/lang/Object;
move-result-object v0
return-object v0
.end method
.method public a()V
.registers 2
iget v0, p0, Lbsh/BSHArrayDimensions;->b:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lbsh/BSHArrayDimensions;->b:I
return-void
.end method
.method public b()V
.registers 2
iget v0, p0, Lbsh/BSHArrayDimensions;->c:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lbsh/BSHArrayDimensions;->c:I
return-void
.end method