summaryrefslogtreecommitdiff
path: root/runtime/lambda/closure_builder.h
diff options
context:
space:
mode:
author Igor Murashkin <iam@google.com> 2015-09-27 19:19:06 -0700
committer Igor Murashkin <iam@google.com> 2015-09-27 19:19:23 -0700
commit6918bf13eb855b3aa8ccdddda2d27ae8c60cec56 (patch)
tree907f504a4d004ac1e44b73c3984e365e889407e8 /runtime/lambda/closure_builder.h
parent446ca43e8f876dcc1ee90fcf432d6392c44a3f60 (diff)
Revert "Revert "lambda: Experimental support for capture-variable and liberate-variable""
This reverts commit 7bbb80ab52c203e44d2ded2c947b3b03b4b31ec4. Change-Id: If806ce5c6c5e96fdb2c3761dee096f74e7e5b001
Diffstat (limited to 'runtime/lambda/closure_builder.h')
-rw-r--r--runtime/lambda/closure_builder.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/runtime/lambda/closure_builder.h b/runtime/lambda/closure_builder.h
index 542e12afaa..23eb484529 100644
--- a/runtime/lambda/closure_builder.h
+++ b/runtime/lambda/closure_builder.h
@@ -40,13 +40,12 @@ class ArtLambdaMethod; // forward declaration
//
// The mutator lock must be held for the duration of the lifetime of this object,
// since it needs to temporarily store heap references into an internal list.
-class ClosureBuilder : ValueObject {
+class ClosureBuilder {
public:
using ShortyTypeEnum = decltype(ShortyFieldType::kByte);
-
// Mark this primitive value to be captured as the specified type.
- template <typename T, ShortyTypeEnum kShortyType>
+ template <typename T, ShortyTypeEnum kShortyType = ShortyFieldTypeSelectEnum<T>::value>
void CaptureVariablePrimitive(T value);
// Mark this object reference to be captured.
@@ -63,6 +62,9 @@ class ClosureBuilder : ValueObject {
// Returns how many variables have been captured so far.
size_t GetCaptureCount() const;
+ // Get the list of captured variables' shorty field types.
+ const std::string& GetCapturedVariableShortyTypes() const;
+
// Creates a closure in-place and writes out the data into 'memory'.
// Memory must be at least 'GetSize' bytes large.
// All previously marked data to be captured is now written out.
@@ -93,6 +95,7 @@ class ClosureBuilder : ValueObject {
size_t size_ = kInitialSize;
bool is_dynamic_size_ = false;
std::vector<ShortyFieldTypeTraits::MaxType> values_;
+ std::string shorty_types_;
};
} // namespace lambda