diff options
author | Eric Holk <eholk@google.com> | 2019-07-26 09:37:46 -0700 |
---|---|---|
committer | Eric Holk <eholk@google.com> | 2019-07-26 09:46:18 -0700 |
commit | 70445d0d89cb2b730e148cdb92e580585c1ef9c6 (patch) | |
tree | 0d5d2895a2921aa644d35ec65c6d5a76e7c09ccc /startop/view_compiler/dex_testcase_generator.cc | |
parent | 3092f99ae63f12f5c18d40f21616c98f2b6c62af (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.cc | 16 |
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()); |