summaryrefslogtreecommitdiff
path: root/startop/view_compiler/dex_testcase_generator.cc
diff options
context:
space:
mode:
authorEric Holk <eholk@google.com>2019-07-26 09:37:46 -0700
committerEric Holk <eholk@google.com>2019-07-26 09:46:18 -0700
commit70445d0d89cb2b730e148cdb92e580585c1ef9c6 (patch)
tree0d5d2895a2921aa644d35ec65c6d5a76e7c09ccc /startop/view_compiler/dex_testcase_generator.cc
parent3092f99ae63f12f5c18d40f21616c98f2b6c62af (diff)
[viewcompiler] Add support for static field put to DexBuilder
Bug: 111895153 Change-Id: I12b38fa520790debec545d7d1f6b3522a65ce03b
Diffstat (limited to 'startop/view_compiler/dex_testcase_generator.cc')
-rw-r--r--startop/view_compiler/dex_testcase_generator.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/startop/view_compiler/dex_testcase_generator.cc b/startop/view_compiler/dex_testcase_generator.cc
index 5227f8054765..fee5e722bc55 100644
--- a/startop/view_compiler/dex_testcase_generator.cc
+++ b/startop/view_compiler/dex_testcase_generator.cc
@@ -297,6 +297,22 @@ void GenerateSimpleTestCases(const string& outdir) {
method.Encode();
}(readStaticField);
+ // Set a static field
+ // void setStaticField() { TestClass.staticInteger = 7; }
+ MethodBuilder setStaticField{
+ cbuilder.CreateMethod("setStaticField", Prototype{TypeDescriptor::Void()})};
+ [&](MethodBuilder& method) {
+ const ir::FieldDecl* field =
+ dex_file.GetOrAddField(TypeDescriptor::FromClassname("android.startop.test.TestClass"),
+ "staticInteger",
+ TypeDescriptor::Int());
+ Value number{method.MakeRegister()};
+ method.BuildConst4(number, 7);
+ method.AddInstruction(Instruction::SetStaticField(field->orig_index, number));
+ method.BuildReturn();
+ method.Encode();
+ }(setStaticField);
+
slicer::MemView image{dex_file.CreateImage()};
std::ofstream out_file(outdir + "/simple.dex");
out_file.write(image.ptr<const char>(), image.size());