OSDN Git Service

lambda: Add support for invoke-interface for boxed innate lambdas
authorIgor Murashkin <iam@google.com>
Fri, 23 Oct 2015 00:37:50 +0000 (17:37 -0700)
committerIgor Murashkin <iam@google.com>
Sat, 21 Nov 2015 00:33:06 +0000 (16:33 -0800)
commit457e874459ae638145cab6d572e34d48480e39d2
treeb192c4698c4889ae90db6abe2652199802213fe6
parent3944f7175dcf60316ba58a42698ccf23c65ac57c
lambda: Add support for invoke-interface for boxed innate lambdas

Lambda closures created with the 'create-lambda' instruction
(termed "innate lambdas") can be turned into an object with 'box-lambda'.

This CL enables support for those kinds of lambdas to work with
'invoke-interface' by generating a proxy class for the lambda.

Note: MIPS32/64 support not included.

Bug: 24618608
Bug: 25107649
Change-Id: Ic8f1bb66ebeaed4097e758a50becf1cff6ccaefb
62 files changed:
build/Android.gtest.mk
runtime/Android.mk
runtime/arch/arch_test.cc
runtime/arch/arm/quick_entrypoints_arm.S
runtime/arch/arm64/quick_entrypoints_arm64.S
runtime/arch/mips/quick_entrypoints_mips.S
runtime/arch/mips64/quick_entrypoints_mips64.S
runtime/arch/x86/quick_entrypoints_x86.S
runtime/arch/x86_64/quick_entrypoints_x86_64.S
runtime/art_field-inl.h
runtime/art_field.cc
runtime/art_field.h
runtime/art_method-inl.h
runtime/art_method.h
runtime/asm_support.h
runtime/base/allocator.h
runtime/base/mutex.cc
runtime/base/mutex.h
runtime/class_linker.cc
runtime/class_linker.h
runtime/class_linker_test.cc
runtime/common_runtime_test.cc
runtime/entrypoints/entrypoint_utils.cc
runtime/entrypoints/quick/quick_trampoline_entrypoints.cc
runtime/entrypoints/runtime_asm_entrypoints.h
runtime/gc/heap.cc
runtime/interpreter/interpreter_common.h
runtime/interpreter/interpreter_switch_impl.cc
runtime/lambda/art_lambda_method.cc
runtime/lambda/art_lambda_method.h
runtime/lambda/box_class_table-inl.h [new file with mode: 0644]
runtime/lambda/box_class_table.cc [new file with mode: 0644]
runtime/lambda/box_class_table.h [new file with mode: 0644]
runtime/lambda/box_table.cc
runtime/lambda/box_table.h
runtime/lambda/closure.cc
runtime/lambda/closure.h
runtime/lambda/closure_builder.cc
runtime/lambda/shorty_field_type.h
runtime/lambda/shorty_field_type_test.cc
runtime/lambda_proxy_test.cc [new file with mode: 0644]
runtime/mirror/class-inl.h
runtime/mirror/class.cc
runtime/mirror/class.h
runtime/mirror/class_loader-inl.h
runtime/mirror/class_loader.h
runtime/mirror/field-inl.h
runtime/mirror/field.cc
runtime/mirror/lambda_proxy.h [new file with mode: 0644]
runtime/modifiers.h
runtime/native/java_lang_Class.cc
runtime/native/java_lang_reflect_Field.cc
runtime/native/java_lang_reflect_Method.cc
runtime/native/java_lang_reflect_Proxy.cc
runtime/proxy_test.cc
runtime/stack.cc
test/955-lambda-smali/expected.txt
test/955-lambda-smali/smali/BoxInvoke.smali [new file with mode: 0644]
test/955-lambda-smali/smali/BoxUnbox.smali
test/955-lambda-smali/smali/CaptureVariables.smali
test/955-lambda-smali/smali/Main.smali
test/LambdaInterfaces/LambdaInterfaces.java [new file with mode: 0644]