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

Side by Side Diff: runtime/vm/intermediate_language.h

Issue 3001883002: [vm] Read interface_target_reference from kernel binaries (Closed)
Patch Set: Add assertion Created 3 years, 4 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 unified diff | Download patch
« no previous file with comments | « runtime/vm/flag_list.h ('k') | runtime/vm/kernel_binary_flowgraph.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ 5 #ifndef RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
6 #define RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ 6 #define RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/ast.h" 9 #include "vm/ast.h"
10 #include "vm/flags.h" 10 #include "vm/flags.h"
(...skipping 2836 matching lines...) Expand 10 before | Expand all | Expand 10 after
2847 virtual EffectSet Effects() const { return EffectSet::All(); } 2847 virtual EffectSet Effects() const { return EffectSet::All(); }
2848 2848
2849 PRINT_OPERANDS_TO_SUPPORT 2849 PRINT_OPERANDS_TO_SUPPORT
2850 2850
2851 private: 2851 private:
2852 DISALLOW_COPY_AND_ASSIGN(ClosureCallInstr); 2852 DISALLOW_COPY_AND_ASSIGN(ClosureCallInstr);
2853 }; 2853 };
2854 2854
2855 class InstanceCallInstr : public TemplateDartCall<0> { 2855 class InstanceCallInstr : public TemplateDartCall<0> {
2856 public: 2856 public:
2857 InstanceCallInstr(TokenPosition token_pos, 2857 InstanceCallInstr(
2858 const String& function_name, 2858 TokenPosition token_pos,
2859 Token::Kind token_kind, 2859 const String& function_name,
2860 ZoneGrowableArray<PushArgumentInstr*>* arguments, 2860 Token::Kind token_kind,
2861 intptr_t type_args_len, 2861 ZoneGrowableArray<PushArgumentInstr*>* arguments,
2862 const Array& argument_names, 2862 intptr_t type_args_len,
2863 intptr_t checked_argument_count, 2863 const Array& argument_names,
2864 const ZoneGrowableArray<const ICData*>& ic_data_array, 2864 intptr_t checked_argument_count,
2865 intptr_t deopt_id) 2865 const ZoneGrowableArray<const ICData*>& ic_data_array,
2866 intptr_t deopt_id,
2867 const Function& interface_target = Function::null_function())
2866 : TemplateDartCall(deopt_id, 2868 : TemplateDartCall(deopt_id,
2867 type_args_len, 2869 type_args_len,
2868 argument_names, 2870 argument_names,
2869 arguments, 2871 arguments,
2870 token_pos), 2872 token_pos),
2871 ic_data_(NULL), 2873 ic_data_(NULL),
2872 function_name_(function_name), 2874 function_name_(function_name),
2873 token_kind_(token_kind), 2875 token_kind_(token_kind),
2874 checked_argument_count_(checked_argument_count), 2876 checked_argument_count_(checked_argument_count),
2877 interface_target_(interface_target),
2875 has_unique_selector_(false) { 2878 has_unique_selector_(false) {
2876 ic_data_ = GetICData(ic_data_array); 2879 ic_data_ = GetICData(ic_data_array);
2877 ASSERT(function_name.IsNotTemporaryScopedHandle()); 2880 ASSERT(function_name.IsNotTemporaryScopedHandle());
2881 ASSERT(interface_target_.IsNotTemporaryScopedHandle());
2878 ASSERT(!arguments->is_empty()); 2882 ASSERT(!arguments->is_empty());
2879 ASSERT(Token::IsBinaryOperator(token_kind) || 2883 ASSERT(Token::IsBinaryOperator(token_kind) ||
2880 Token::IsEqualityOperator(token_kind) || 2884 Token::IsEqualityOperator(token_kind) ||
2881 Token::IsRelationalOperator(token_kind) || 2885 Token::IsRelationalOperator(token_kind) ||
2882 Token::IsUnaryOperator(token_kind) || 2886 Token::IsUnaryOperator(token_kind) ||
2883 Token::IsIndexOperator(token_kind) || 2887 Token::IsIndexOperator(token_kind) ||
2884 Token::IsTypeTestOperator(token_kind) || 2888 Token::IsTypeTestOperator(token_kind) ||
2885 Token::IsTypeCastOperator(token_kind) || token_kind == Token::kGET || 2889 Token::IsTypeCastOperator(token_kind) || token_kind == Token::kGET ||
2886 token_kind == Token::kSET || token_kind == Token::kILLEGAL); 2890 token_kind == Token::kSET || token_kind == Token::kILLEGAL);
2887 } 2891 }
2888 2892
2889 DECLARE_INSTRUCTION(InstanceCall) 2893 DECLARE_INSTRUCTION(InstanceCall)
2890 2894
2891 const ICData* ic_data() const { return ic_data_; } 2895 const ICData* ic_data() const { return ic_data_; }
2892 bool HasICData() const { return (ic_data() != NULL) && !ic_data()->IsNull(); } 2896 bool HasICData() const { return (ic_data() != NULL) && !ic_data()->IsNull(); }
2893 2897
2894 // ICData can be replaced by optimizer. 2898 // ICData can be replaced by optimizer.
2895 void set_ic_data(const ICData* value) { ic_data_ = value; } 2899 void set_ic_data(const ICData* value) { ic_data_ = value; }
2896 2900
2897 const String& function_name() const { return function_name_; } 2901 const String& function_name() const { return function_name_; }
2898 Token::Kind token_kind() const { return token_kind_; } 2902 Token::Kind token_kind() const { return token_kind_; }
2899 intptr_t checked_argument_count() const { return checked_argument_count_; } 2903 intptr_t checked_argument_count() const { return checked_argument_count_; }
2904 const Function& interface_target() const { return interface_target_; }
2900 2905
2901 bool has_unique_selector() const { return has_unique_selector_; } 2906 bool has_unique_selector() const { return has_unique_selector_; }
2902 void set_has_unique_selector(bool b) { has_unique_selector_ = b; } 2907 void set_has_unique_selector(bool b) { has_unique_selector_ = b; }
2903 2908
2904 virtual intptr_t CallCount() const { 2909 virtual intptr_t CallCount() const {
2905 return ic_data() == NULL ? 0 : ic_data()->AggregateCount(); 2910 return ic_data() == NULL ? 0 : ic_data()->AggregateCount();
2906 } 2911 }
2907 2912
2908 virtual bool ComputeCanDeoptimize() const { return true; } 2913 virtual bool ComputeCanDeoptimize() const { return true; }
2909 2914
(...skipping 15 matching lines...) Expand all
2925 2930
2926 protected: 2931 protected:
2927 friend class JitOptimizer; 2932 friend class JitOptimizer;
2928 void set_ic_data(ICData* value) { ic_data_ = value; } 2933 void set_ic_data(ICData* value) { ic_data_ = value; }
2929 2934
2930 private: 2935 private:
2931 const ICData* ic_data_; 2936 const ICData* ic_data_;
2932 const String& function_name_; 2937 const String& function_name_;
2933 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL. 2938 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL.
2934 const intptr_t checked_argument_count_; 2939 const intptr_t checked_argument_count_;
2940 const Function& interface_target_;
2935 bool has_unique_selector_; 2941 bool has_unique_selector_;
2936 2942
2937 DISALLOW_COPY_AND_ASSIGN(InstanceCallInstr); 2943 DISALLOW_COPY_AND_ASSIGN(InstanceCallInstr);
2938 }; 2944 };
2939 2945
2940 class PolymorphicInstanceCallInstr : public TemplateDefinition<0, Throws> { 2946 class PolymorphicInstanceCallInstr : public TemplateDefinition<0, Throws> {
2941 public: 2947 public:
2942 PolymorphicInstanceCallInstr(InstanceCallInstr* instance_call, 2948 PolymorphicInstanceCallInstr(InstanceCallInstr* instance_call,
2943 const CallTargets& targets, 2949 const CallTargets& targets,
2944 bool complete) 2950 bool complete)
(...skipping 5151 matching lines...) Expand 10 before | Expand all | Expand 10 after
8096 #define DEFINE_UNIMPLEMENTED_INSTRUCTION(Name) \ 8102 #define DEFINE_UNIMPLEMENTED_INSTRUCTION(Name) \
8097 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ 8103 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \
8098 UNIMPLEMENTED(); \ 8104 UNIMPLEMENTED(); \
8099 return NULL; \ 8105 return NULL; \
8100 } \ 8106 } \
8101 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } 8107 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); }
8102 8108
8103 } // namespace dart 8109 } // namespace dart
8104 8110
8105 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ 8111 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW
« no previous file with comments | « runtime/vm/flag_list.h ('k') | runtime/vm/kernel_binary_flowgraph.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698