BshMethod.smali
.class public Lbsh/BshMethod;
.super Ljava/lang/Object;
# interfaces
.implements Ljava/io/Serializable;
# instance fields
.field a:Lbsh/NameSpace;
.field b:Lbsh/Modifiers;
.field c:Lbsh/BSHBlock;
.field private d:Ljava/lang/String;
.field private e:Ljava/lang/Class;
.field private f:[Ljava/lang/String;
.field private g:I
.field private h:[Ljava/lang/Class;
.field private i:Ljava/lang/reflect/Method;
.field private j:Ljava/lang/Object;
# direct methods
.method constructor <init>(Lbsh/BSHMethodDeclaration;Lbsh/NameSpace;Lbsh/Modifiers;)V
.registers 12
iget-object v1, p1, Lbsh/BSHMethodDeclaration;->a:Ljava/lang/String;
iget-object v2, p1, Lbsh/BSHMethodDeclaration;->g:Ljava/lang/Class;
iget-object v0, p1, Lbsh/BSHMethodDeclaration;->c:Lbsh/BSHFormalParameters;
invoke-virtual {v0}, Lbsh/BSHFormalParameters;->b()[Ljava/lang/String;
move-result-object v3
iget-object v0, p1, Lbsh/BSHMethodDeclaration;->c:Lbsh/BSHFormalParameters;
iget-object v4, v0, Lbsh/BSHFormalParameters;->a:[Ljava/lang/Class;
iget-object v5, p1, Lbsh/BSHMethodDeclaration;->d:Lbsh/BSHBlock;
move-object v0, p0
move-object v6, p2
move-object v7, p3
invoke-direct/range {v0 .. v7}, Lbsh/BshMethod;-><init>(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;[Ljava/lang/Class;Lbsh/BSHBlock;Lbsh/NameSpace;Lbsh/Modifiers;)V
return-void
.end method
.method constructor <init>(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;[Ljava/lang/Class;Lbsh/BSHBlock;Lbsh/NameSpace;Lbsh/Modifiers;)V
.registers 9
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lbsh/BshMethod;->d:Ljava/lang/String;
iput-object p2, p0, Lbsh/BshMethod;->e:Ljava/lang/Class;
iput-object p3, p0, Lbsh/BshMethod;->f:[Ljava/lang/String;
if-eqz p3, :cond_e
array-length v0, p3
iput v0, p0, Lbsh/BshMethod;->g:I
:cond_e
iput-object p4, p0, Lbsh/BshMethod;->h:[Ljava/lang/Class;
iput-object p5, p0, Lbsh/BshMethod;->c:Lbsh/BSHBlock;
iput-object p6, p0, Lbsh/BshMethod;->a:Lbsh/NameSpace;
iput-object p7, p0, Lbsh/BshMethod;->b:Lbsh/Modifiers;
return-void
.end method
.method constructor <init>(Ljava/lang/reflect/Method;Ljava/lang/Object;)V
.registers 11
const/4 v3, 0x0
invoke-virtual {p1}, Ljava/lang/reflect/Method;->getName()Ljava/lang/String;
move-result-object v1
invoke-virtual {p1}, Ljava/lang/reflect/Method;->getReturnType()Ljava/lang/Class;
move-result-object v2
invoke-virtual {p1}, Ljava/lang/reflect/Method;->getParameterTypes()[Ljava/lang/Class;
move-result-object v4
move-object v0, p0
move-object v5, v3
move-object v6, v3
move-object v7, v3
invoke-direct/range {v0 .. v7}, Lbsh/BshMethod;-><init>(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;[Ljava/lang/Class;Lbsh/BSHBlock;Lbsh/NameSpace;Lbsh/Modifiers;)V
iput-object p1, p0, Lbsh/BshMethod;->i:Ljava/lang/reflect/Method;
iput-object p2, p0, Lbsh/BshMethod;->j:Ljava/lang/Object;
return-void
.end method
.method private b([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/c;Lbsh/SimpleNode;Z)Ljava/lang/Object;
.registers 15
invoke-virtual {p0}, Lbsh/BshMethod;->b()Ljava/lang/Class;
move-result-object v2
invoke-virtual {p0}, Lbsh/BshMethod;->a()[Ljava/lang/Class;
move-result-object v3
if-nez p3, :cond_11
new-instance p3, Lbsh/c;
iget-object v0, p0, Lbsh/BshMethod;->a:Lbsh/NameSpace;
invoke-direct {p3, v0}, Lbsh/c;-><init>(Lbsh/NameSpace;)V
:cond_11
if-nez p1, :cond_16
const/4 v0, 0x0
new-array p1, v0, [Ljava/lang/Object;
:cond_16
array-length v0, p1
iget v1, p0, Lbsh/BshMethod;->g:I
if-eq v0, v1, :cond_37
new-instance v0, Lbsh/EvalError;
new-instance v1, Ljava/lang/StringBuffer;
invoke-direct {v1}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v2, "Wrong number of arguments for local method: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
iget-object v2, p0, Lbsh/BshMethod;->d:Ljava/lang/String;
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, p4, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v0
:cond_37
if-eqz p5, :cond_7f
invoke-virtual {p3}, Lbsh/c;->b()Lbsh/NameSpace;
move-result-object v0
:goto_3d
invoke-virtual {v0, p4}, Lbsh/NameSpace;->a(Lbsh/SimpleNode;)V
const/4 v1, 0x0
:goto_41
iget v4, p0, Lbsh/BshMethod;->g:I
if-lt v1, v4, :cond_8c
if-nez p5, :cond_4a
invoke-virtual {p3, v0}, Lbsh/c;->a(Lbsh/NameSpace;)V
:cond_4a
iget-object v0, p0, Lbsh/BshMethod;->c:Lbsh/BSHBlock;
const/4 v1, 0x1
invoke-virtual {v0, p3, p2, v1}, Lbsh/BSHBlock;->a(Lbsh/c;Lbsh/Interpreter;Z)Ljava/lang/Object;
move-result-object v1
invoke-virtual {p3}, Lbsh/c;->f()Lbsh/c;
move-result-object v3
if-nez p5, :cond_5a
invoke-virtual {p3}, Lbsh/c;->c()Lbsh/NameSpace;
:cond_5a
const/4 v0, 0x0
instance-of v4, v1, Lbsh/p;
if-eqz v4, :cond_180
move-object v0, v1
check-cast v0, Lbsh/p;
iget v4, v0, Lbsh/p;->a:I
const/16 v5, 0x2e
if-ne v4, v5, :cond_13b
check-cast v1, Lbsh/p;
iget-object v1, v1, Lbsh/p;->b:Ljava/lang/Object;
sget-object v4, Ljava/lang/Void;->TYPE:Ljava/lang/Class;
if-ne v2, v4, :cond_146
sget-object v4, Lbsh/Primitive;->c:Lbsh/Primitive;
if-eq v1, v4, :cond_146
new-instance v1, Lbsh/EvalError;
const-string/jumbo v2, "Cannot return value from void method"
iget-object v0, v0, Lbsh/p;->c:Lbsh/SimpleNode;
invoke-direct {v1, v2, v0, v3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v1
:cond_7f
new-instance v0, Lbsh/NameSpace;
iget-object v1, p0, Lbsh/BshMethod;->a:Lbsh/NameSpace;
iget-object v4, p0, Lbsh/BshMethod;->d:Ljava/lang/String;
invoke-direct {v0, v1, v4}, Lbsh/NameSpace;-><init>(Lbsh/NameSpace;Ljava/lang/String;)V
const/4 v1, 0x1
iput-boolean v1, v0, Lbsh/NameSpace;->d:Z
goto :goto_3d
:cond_8c
aget-object v4, v3, v1
if-eqz v4, :cond_f5
:try_start_90
aget-object v4, p1, v1
aget-object v5, v3, v1
const/4 v6, 0x1
invoke-static {v4, v5, v6}, Lbsh/r;->a(Ljava/lang/Object;Ljava/lang/Class;I)Ljava/lang/Object;
move-result-object v4
aput-object v4, p1, v1
:try_end_9b
.catch Lbsh/UtilEvalError; {:try_start_90 .. :try_end_9b} :catch_aa
:try_start_9b
iget-object v4, p0, Lbsh/BshMethod;->f:[Ljava/lang/String;
aget-object v4, v4, v1
aget-object v5, v3, v1
aget-object v6, p1, v1
const/4 v7, 0x0
invoke-virtual {v0, v4, v5, v6, v7}, Lbsh/NameSpace;->a(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Lbsh/Modifiers;)V
:try_end_a7
.catch Lbsh/UtilEvalError; {:try_start_9b .. :try_end_a7} :catch_ec
:goto_a7
add-int/lit8 v1, v1, 0x1
goto :goto_41
:catch_aa
move-exception v0
new-instance v2, Lbsh/EvalError;
new-instance v3, Ljava/lang/StringBuffer;
invoke-direct {v3}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v4, "Invalid argument: `"
invoke-virtual {v3, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v3
iget-object v4, p0, Lbsh/BshMethod;->f:[Ljava/lang/String;
aget-object v1, v4, v1
invoke-virtual {v3, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
const-string/jumbo v3, "\'"
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
const-string/jumbo v3, " for method: "
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
iget-object v3, p0, Lbsh/BshMethod;->d:Ljava/lang/String;
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
const-string/jumbo v3, " : "
invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
invoke-virtual {v0}, Lbsh/UtilEvalError;->getMessage()Ljava/lang/String;
move-result-object v0
invoke-virtual {v1, v0}, 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 {v2, v0, p4, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v2
:catch_ec
move-exception v0
const-string/jumbo v1, "Typed method parameter assignment"
invoke-virtual {v0, v1, p4, p3}, Lbsh/UtilEvalError;->a(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;
move-result-object v0
throw v0
:cond_f5
aget-object v4, p1, v1
sget-object v5, Lbsh/Primitive;->c:Lbsh/Primitive;
if-ne v4, v5, :cond_126
new-instance v0, Lbsh/EvalError;
new-instance v2, Ljava/lang/StringBuffer;
invoke-direct {v2}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v3, "Undefined variable or class name, parameter: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v2
iget-object v3, p0, Lbsh/BshMethod;->f:[Ljava/lang/String;
aget-object v1, v3, v1
invoke-virtual {v2, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
const-string/jumbo v2, " to method: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
iget-object v2, p0, Lbsh/BshMethod;->d:Ljava/lang/String;
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, p4, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v0
:cond_126
:try_start_126
iget-object v4, p0, Lbsh/BshMethod;->f:[Ljava/lang/String;
aget-object v4, v4, v1
aget-object v5, p1, v1
invoke-virtual {p2}, Lbsh/Interpreter;->f()Z
move-result v6
invoke-virtual {v0, v4, v5, v6}, Lbsh/NameSpace;->b(Ljava/lang/String;Ljava/lang/Object;Z)V
:try_end_133
.catch Lbsh/UtilEvalError; {:try_start_126 .. :try_end_133} :catch_135
goto/16 :goto_a7
:catch_135
move-exception v0
invoke-virtual {v0, p4, p3}, Lbsh/UtilEvalError;->a(Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;
move-result-object v0
throw v0
:cond_13b
new-instance v1, Lbsh/EvalError;
const-string/jumbo v2, "\'continue\' or \'break\' in method body"
iget-object v0, v0, Lbsh/p;->c:Lbsh/SimpleNode;
invoke-direct {v1, v2, v0, v3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v1
:cond_146
move-object v8, v0
move-object v0, v1
move-object v1, v8
:goto_149
if-eqz v2, :cond_151
sget-object v3, Ljava/lang/Void;->TYPE:Ljava/lang/Class;
if-ne v2, v3, :cond_152
sget-object v0, Lbsh/Primitive;->c:Lbsh/Primitive;
:cond_151
:goto_151
return-object v0
:cond_152
const/4 v3, 0x1
:try_start_153
invoke-static {v0, v2, v3}, Lbsh/r;->a(Ljava/lang/Object;Ljava/lang/Class;I)Ljava/lang/Object;
:try_end_156
.catch Lbsh/UtilEvalError; {:try_start_153 .. :try_end_156} :catch_158
move-result-object v0
goto :goto_151
:catch_158
move-exception v0
if-eqz v1, :cond_15d
iget-object p4, v1, Lbsh/p;->c:Lbsh/SimpleNode;
:cond_15d
new-instance v1, Ljava/lang/StringBuffer;
invoke-direct {v1}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v2, "Incorrect type returned from method: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
iget-object v2, p0, Lbsh/BshMethod;->d:Ljava/lang/String;
invoke-virtual {v1, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v1
invoke-virtual {v0}, Lbsh/UtilEvalError;->getMessage()Ljava/lang/String;
move-result-object v2
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-virtual {v0, v1, p4, p3}, Lbsh/UtilEvalError;->a(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)Lbsh/EvalError;
move-result-object v0
throw v0
:cond_180
move-object v8, v0
move-object v0, v1
move-object v1, v8
goto :goto_149
.end method
# virtual methods
.method public a([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/c;Lbsh/SimpleNode;)Ljava/lang/Object;
.registers 11
const/4 v5, 0x0
move-object v0, p0
move-object v1, p1
move-object v2, p2
move-object v3, p3
move-object v4, p4
invoke-virtual/range {v0 .. v5}, Lbsh/BshMethod;->a([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/c;Lbsh/SimpleNode;Z)Ljava/lang/Object;
move-result-object v0
return-object v0
.end method
.method a([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/c;Lbsh/SimpleNode;Z)Ljava/lang/Object;
.registers 12
if-eqz p1, :cond_6
const/4 v0, 0x0
:goto_3
array-length v1, p1
if-lt v0, v1, :cond_13
:cond_6
iget-object v0, p0, Lbsh/BshMethod;->i:Ljava/lang/reflect/Method;
if-eqz v0, :cond_4b
:try_start_a
iget-object v0, p0, Lbsh/BshMethod;->i:Ljava/lang/reflect/Method;
iget-object v1, p0, Lbsh/BshMethod;->j:Ljava/lang/Object;
invoke-static {v0, v1, p1}, Lbsh/n;->a(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
:try_end_11
.catch Lbsh/ReflectError; {:try_start_a .. :try_end_11} :catch_23
.catch Ljava/lang/reflect/InvocationTargetException; {:try_start_a .. :try_end_11} :catch_3e
move-result-object v0
:goto_12
return-object v0
:cond_13
aget-object v1, p1, v0
if-nez v1, :cond_20
new-instance v0, Ljava/lang/Error;
const-string/jumbo v1, "HERE!"
invoke-direct {v0, v1}, Ljava/lang/Error;-><init>(Ljava/lang/String;)V
throw v0
:cond_20
add-int/lit8 v0, v0, 0x1
goto :goto_3
:catch_23
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, "Error invoking Java method: "
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, p4, p3}, Lbsh/EvalError;-><init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/c;)V
throw v1
:catch_3e
move-exception v2
new-instance v0, Lbsh/TargetError;
const-string/jumbo v1, "Exception invoking imported object method."
const/4 v5, 0x1
move-object v3, p4
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
:cond_4b
iget-object v0, p0, Lbsh/BshMethod;->b:Lbsh/Modifiers;
if-eqz v0, :cond_82
iget-object v0, p0, Lbsh/BshMethod;->b:Lbsh/Modifiers;
const-string/jumbo v1, "synchronized"
invoke-virtual {v0, v1}, Lbsh/Modifiers;->a(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_82
iget-object v0, p0, Lbsh/BshMethod;->a:Lbsh/NameSpace;
iget-boolean v0, v0, Lbsh/NameSpace;->e:Z
if-eqz v0, :cond_78
:try_start_60
iget-object v0, p0, Lbsh/BshMethod;->a:Lbsh/NameSpace;
invoke-virtual {v0}, Lbsh/NameSpace;->a()Ljava/lang/Object;
:try_end_65
.catch Lbsh/UtilEvalError; {:try_start_60 .. :try_end_65} :catch_6e
move-result-object v0
:goto_66
monitor-enter v0
:try_start_67
invoke-direct/range {p0 .. p5}, Lbsh/BshMethod;->b([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/c;Lbsh/SimpleNode;Z)Ljava/lang/Object;
move-result-object v1
monitor-exit v0
:try_end_6c
.catchall {:try_start_67 .. :try_end_6c} :catchall_7f
move-object v0, v1
goto :goto_12
:catch_6e
move-exception v0
new-instance v0, Lbsh/InterpreterError;
const-string/jumbo v1, "Can\'t get class instance for synchronized method."
invoke-direct {v0, v1}, Lbsh/InterpreterError;-><init>(Ljava/lang/String;)V
throw v0
:cond_78
iget-object v0, p0, Lbsh/BshMethod;->a:Lbsh/NameSpace;
invoke-virtual {v0, p2}, Lbsh/NameSpace;->a(Lbsh/Interpreter;)Lbsh/This;
move-result-object v0
goto :goto_66
:catchall_7f
move-exception v1
:try_start_80
monitor-exit v0
:try_end_81
.catchall {:try_start_80 .. :try_end_81} :catchall_7f
throw v1
:cond_82
invoke-direct/range {p0 .. p5}, Lbsh/BshMethod;->b([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/c;Lbsh/SimpleNode;Z)Ljava/lang/Object;
move-result-object v0
goto :goto_12
.end method
.method public a()[Ljava/lang/Class;
.registers 2
iget-object v0, p0, Lbsh/BshMethod;->h:[Ljava/lang/Class;
return-object v0
.end method
.method public b()Ljava/lang/Class;
.registers 2
iget-object v0, p0, Lbsh/BshMethod;->e:Ljava/lang/Class;
return-object v0
.end method
.method public toString()Ljava/lang/String;
.registers 4
new-instance v0, Ljava/lang/StringBuffer;
invoke-direct {v0}, Ljava/lang/StringBuffer;-><init>()V
const-string/jumbo v1, "Scripted Method: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
move-result-object v0
iget-object v1, p0, Lbsh/BshMethod;->d:Ljava/lang/String;
invoke-virtual {p0}, Lbsh/BshMethod;->a()[Ljava/lang/Class;
move-result-object v2
invoke-static {v1, v2}, Lbsh/q;->a(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, 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
return-object v0
.end method