%%% %% Jimple statements %%% module languages/jimple/Statements imports languages/jimple/Expressions languages/jimple/Modifiers languages/jimple/Whitespace languages/jimple/Keywords languages/jimple/Lexical languages/jimple/Types languages/jimple/Names exports sorts Stmt GotoStmt LabelName context-free syntax LabelName ":" -> Stmt {cons("LabelStmt")} Identifier -> LabelName "if" BoolExpr GotoStmt -> Stmt {cons("IfStmt")} "goto" LabelName ";" -> GotoStmt {cons("GotoStmt")} GotoStmt -> Stmt "breakpoint" ";" -> Stmt {cons("BreakpointStmt")} "entermonitor" Immediate ";" -> Stmt {cons("EnterMonitorStmt")} "exitmonitor" Immediate ";" -> Stmt {cons("ExitMonitorStmt")} LocalName ":=" AtIdentifier Type ";" -> Stmt {cons("IdentityStmt")} LocalName ":=" AtIdentifier ";" -> Stmt {cons("IdentityStmt")} Variable "=" Expr ";" -> Stmt {cons("AssignStmt")} "nop" ";" -> Stmt {cons("NopStmt")} "ret" Immediate? ";" -> Stmt {cons("RetStmt")} "return" Immediate ";" -> Stmt {cons("ReturnStmt")} "return" ";" -> Stmt {cons("ReturnVoidStmt")} "throw" Immediate ";" -> Stmt {cons("ThrowStmt")} %%% %% A method invocation with a void return type. %% Other method invocations are in the rhs of an assignment. %%% InvokeExpr ";" -> Stmt {cons("InvokeStmt")} %%% %% Switch Statements %%% sorts CaseStmt CaseLabel context-free syntax "tableswitch" "(" Immediate ")" "{" CaseStmt+ "}" ";" -> Stmt {cons("TableSwitchStmt")} "lookupswitch" "(" Immediate ")" "{" CaseStmt+ "}" ";" -> Stmt {cons("LookupSwitchStmt")} CaseLabel ":" GotoStmt -> CaseStmt {cons("Case")} "case" FullIntegerConstant -> CaseLabel {cons("CaseFragment")} "default" -> CaseLabel {cons("Default")}