Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1246)

Unified Diff: runtime/vm/kernel_reader.h

Issue 2411823003: VM support for running Kernel binaries. (Closed)
Patch Set: Address comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/kernel_binary.cc ('k') | runtime/vm/kernel_reader.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_reader.h
diff --git a/runtime/vm/kernel_reader.h b/runtime/vm/kernel_reader.h
new file mode 100644
index 0000000000000000000000000000000000000000..a53d57279c6fb802f102d554597fbcc84fcab587
--- /dev/null
+++ b/runtime/vm/kernel_reader.h
@@ -0,0 +1,120 @@
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef VM_KERNEL_READER_H_
+#define VM_KERNEL_READER_H_
+
+#include <map>
+
+#include "vm/kernel.h"
+#include "vm/kernel_to_il.h"
+#include "vm/object.h"
+
+namespace dart {
+namespace kernel {
+
+class KernelReader;
+
+class BuildingTranslationHelper : public TranslationHelper {
+ public:
+ BuildingTranslationHelper(KernelReader* reader, dart::Thread* thread,
+ dart::Zone* zone, Isolate* isolate)
+ : TranslationHelper(thread, zone, isolate), reader_(reader) {}
+ virtual ~BuildingTranslationHelper() {}
+
+ virtual void SetFinalize(bool finalize);
+
+ virtual RawLibrary* LookupLibraryByKernelLibrary(Library* library);
+ virtual RawClass* LookupClassByKernelClass(Class* klass);
+
+ private:
+ KernelReader* reader_;
+};
+
+template <typename KernelType, typename VmType>
+class Mapping {
+ public:
+ bool Lookup(KernelType* node, VmType** handle) {
+ typename MapType::iterator value = map_.find(node);
+ if (value != map_.end()) {
+ *handle = value->second;
+ return true;
+ }
+ return false;
+ }
+
+ void Insert(KernelType* node, VmType* object) { map_[node] = object; }
+
+ private:
+ typedef typename std::map<KernelType*, VmType*> MapType;
+ MapType map_;
+};
+
+class KernelReader {
+ public:
+ KernelReader(const uint8_t* buffer, intptr_t len, bool bootstrapping = false)
+ : thread_(dart::Thread::Current()),
+ zone_(thread_->zone()),
+ isolate_(thread_->isolate()),
+ translation_helper_(this, thread_, zone_, isolate_),
+ type_translator_(&translation_helper_, &active_class_, !bootstrapping),
+ bootstrapping_(bootstrapping),
+ finalize_(!bootstrapping),
+ buffer_(buffer),
+ buffer_length_(len) {}
+
+ // Returns either a library or a failure object.
+ dart::Object& ReadProgram();
+
+ static void SetupFunctionParameters(TranslationHelper translation_helper_,
+ DartTypeTranslator type_translator_,
+ const dart::Class& owner,
+ const dart::Function& function,
+ FunctionNode* kernel_function,
+ bool is_method, bool is_closure);
+
+ void ReadLibrary(Library* kernel_library);
+
+ private:
+ friend class BuildingTranslationHelper;
+
+ void ReadPreliminaryClass(dart::Class* klass, Class* kernel_klass);
+ void ReadClass(const dart::Library& library, Class* kernel_klass);
+ void ReadProcedure(const dart::Library& library, const dart::Class& owner,
+ Procedure* procedure, Class* kernel_klass = NULL);
+
+ void GenerateFieldAccessors(const dart::Class& klass,
+ const dart::Field& field, Field* kernel_field);
+
+ void SetupFieldAccessorFunction(const dart::Class& klass,
+ const dart::Function& function);
+
+ dart::Library& LookupLibrary(Library* library);
+ dart::Class& LookupClass(Class* klass);
+
+ dart::RawFunction::Kind GetFunctionType(Procedure* kernel_procedure);
+
+ dart::Thread* thread_;
+ dart::Zone* zone_;
+ dart::Isolate* isolate_;
+ ActiveClass active_class_;
+ BuildingTranslationHelper translation_helper_;
+ DartTypeTranslator type_translator_;
+
+ bool bootstrapping_;
+
+ // Should created classes be finalized when they are created?
+ bool finalize_;
+
+ const uint8_t* buffer_;
+ intptr_t buffer_length_;
+
+ Mapping<Library, dart::Library> libraries_;
+ Mapping<Class, dart::Class> classes_;
+};
+
+} // namespace kernel
+} // namespace dart
+
+#endif // VM_KERNEL_READER_H_
« no previous file with comments | « runtime/vm/kernel_binary.cc ('k') | runtime/vm/kernel_reader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698