@@ -24,7 +24,7 @@ import org.jacodb.ets.model.EtsStmtLocation
2424
2525interface ProgramBuilder {
2626 fun nop ()
27- fun assign (target : Local , expr : Expr )
27+ fun assign (target : LValue , expr : Expr )
2828 fun ret (expr : Expr )
2929 fun label (name : String )
3030 fun goto (label : String )
@@ -36,11 +36,18 @@ interface ProgramBuilder {
3636fun ProgramBuilder.local (name : String ) = Local (name)
3737fun ProgramBuilder.param (index : Int ) = Parameter (index)
3838fun ProgramBuilder.thisRef () = ThisRef
39- fun ProgramBuilder.const (value : Int ) = ConstantNumber (value.toDouble() )
39+ fun ProgramBuilder.const (value : Int ) = ConstantInt (value)
4040fun ProgramBuilder.const (value : Double ) = ConstantNumber (value)
4141fun ProgramBuilder.const (value : Boolean ) = ConstantBoolean (value)
4242fun ProgramBuilder.const (value : String ) = ConstantString (value)
4343
44+ fun ProgramBuilder.fieldRef (instance : Expr , fieldName : String ) = FieldRef (instance, fieldName)
45+ fun ProgramBuilder.staticFieldRef (className : String , fieldName : String ) = StaticFieldRef (className, fieldName)
46+ fun ProgramBuilder.arrayAccess (array : Expr , index : Expr ) = ArrayAccess (array, index)
47+
48+ fun Expr.field (name : String ) = FieldRef (this , name)
49+ operator fun Expr.get (index : Expr ) = ArrayAccess (this , index)
50+
4451fun ProgramBuilder.and (left : Expr , right : Expr ) = BinaryExpr (BinaryOperator .AND , left, right)
4552fun ProgramBuilder.or (left : Expr , right : Expr ) = BinaryExpr (BinaryOperator .OR , left, right)
4653fun ProgramBuilder.eq (left : Expr , right : Expr ) = BinaryExpr (BinaryOperator .EQ , left, right)
@@ -89,7 +96,7 @@ class ProgramBuilderImpl : ProgramBuilder {
8996 _nodes + = Nop
9097 }
9198
92- override fun assign (target : Local , expr : Expr ) {
99+ override fun assign (target : LValue , expr : Expr ) {
93100 _nodes + = Assign (target, expr)
94101 }
95102
@@ -140,7 +147,7 @@ class IfBuilder : ProgramBuilder {
140147 thenBuilder.ifStmt(condition, block)
141148
142149 override fun nop () = thenBuilder.nop()
143- override fun assign (target : Local , expr : Expr ) = thenBuilder.assign(target, expr)
150+ override fun assign (target : LValue , expr : Expr ) = thenBuilder.assign(target, expr)
144151 override fun ret (expr : Expr ) = thenBuilder.ret(expr)
145152 override fun label (name : String ) = thenBuilder.label(name)
146153 override fun goto (label : String ) = thenBuilder.goto(label)
0 commit comments