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

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

Issue 3001883002: [vm] Read interface_target_reference from kernel binaries (Closed)
Patch Set: 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
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());
rmacnak 2017/08/18 00:52:43 ASSERT(interface_target_.IsNotTemporaryScopedHandl
alexmarkov 2017/08/18 17:15:57 Done.
2878 ASSERT(!arguments->is_empty()); 2881 ASSERT(!arguments->is_empty());
2879 ASSERT(Token::IsBinaryOperator(token_kind) || 2882 ASSERT(Token::IsBinaryOperator(token_kind) ||
2880 Token::IsEqualityOperator(token_kind) || 2883 Token::IsEqualityOperator(token_kind) ||
2881 Token::IsRelationalOperator(token_kind) || 2884 Token::IsRelationalOperator(token_kind) ||
2882 Token::IsUnaryOperator(token_kind) || 2885 Token::IsUnaryOperator(token_kind) ||
2883 Token::IsIndexOperator(token_kind) || 2886 Token::IsIndexOperator(token_kind) ||
2884 Token::IsTypeTestOperator(token_kind) || 2887 Token::IsTypeTestOperator(token_kind) ||
2885 Token::IsTypeCastOperator(token_kind) || token_kind == Token::kGET || 2888 Token::IsTypeCastOperator(token_kind) || token_kind == Token::kGET ||
2886 token_kind == Token::kSET || token_kind == Token::kILLEGAL); 2889 token_kind == Token::kSET || token_kind == Token::kILLEGAL);
2887 } 2890 }
2888 2891
2889 DECLARE_INSTRUCTION(InstanceCall) 2892 DECLARE_INSTRUCTION(InstanceCall)
2890 2893
2891 const ICData* ic_data() const { return ic_data_; } 2894 const ICData* ic_data() const { return ic_data_; }
2892 bool HasICData() const { return (ic_data() != NULL) && !ic_data()->IsNull(); } 2895 bool HasICData() const { return (ic_data() != NULL) && !ic_data()->IsNull(); }
2893 2896
2894 // ICData can be replaced by optimizer. 2897 // ICData can be replaced by optimizer.
2895 void set_ic_data(const ICData* value) { ic_data_ = value; } 2898 void set_ic_data(const ICData* value) { ic_data_ = value; }
2896 2899
2897 const String& function_name() const { return function_name_; } 2900 const String& function_name() const { return function_name_; }
2898 Token::Kind token_kind() const { return token_kind_; } 2901 Token::Kind token_kind() const { return token_kind_; }
2899 intptr_t checked_argument_count() const { return checked_argument_count_; } 2902 intptr_t checked_argument_count() const { return checked_argument_count_; }
2903 const Function& interface_target() const { return interface_target_; }
2900 2904
2901 bool has_unique_selector() const { return has_unique_selector_; } 2905 bool has_unique_selector() const { return has_unique_selector_; }
2902 void set_has_unique_selector(bool b) { has_unique_selector_ = b; } 2906 void set_has_unique_selector(bool b) { has_unique_selector_ = b; }
2903 2907
2904 virtual intptr_t CallCount() const { 2908 virtual intptr_t CallCount() const {
2905 return ic_data() == NULL ? 0 : ic_data()->AggregateCount(); 2909 return ic_data() == NULL ? 0 : ic_data()->AggregateCount();
2906 } 2910 }
2907 2911
2908 virtual bool ComputeCanDeoptimize() const { return true; } 2912 virtual bool ComputeCanDeoptimize() const { return true; }
2909 2913
(...skipping 15 matching lines...) Expand all
2925 2929
2926 protected: 2930 protected:
2927 friend class JitOptimizer; 2931 friend class JitOptimizer;
2928 void set_ic_data(ICData* value) { ic_data_ = value; } 2932 void set_ic_data(ICData* value) { ic_data_ = value; }
2929 2933
2930 private: 2934 private:
2931 const ICData* ic_data_; 2935 const ICData* ic_data_;
2932 const String& function_name_; 2936 const String& function_name_;
2933 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL. 2937 const Token::Kind token_kind_; // Binary op, unary op, kGET or kILLEGAL.
2934 const intptr_t checked_argument_count_; 2938 const intptr_t checked_argument_count_;
2939 const Function& interface_target_;
2935 bool has_unique_selector_; 2940 bool has_unique_selector_;
2936 2941
2937 DISALLOW_COPY_AND_ASSIGN(InstanceCallInstr); 2942 DISALLOW_COPY_AND_ASSIGN(InstanceCallInstr);
2938 }; 2943 };
2939 2944
2940 class PolymorphicInstanceCallInstr : public TemplateDefinition<0, Throws> { 2945 class PolymorphicInstanceCallInstr : public TemplateDefinition<0, Throws> {
2941 public: 2946 public:
2942 PolymorphicInstanceCallInstr(InstanceCallInstr* instance_call, 2947 PolymorphicInstanceCallInstr(InstanceCallInstr* instance_call,
2943 const CallTargets& targets, 2948 const CallTargets& targets,
2944 bool complete) 2949 bool complete)
(...skipping 5151 matching lines...) Expand 10 before | Expand all | Expand 10 after
8096 #define DEFINE_UNIMPLEMENTED_INSTRUCTION(Name) \ 8101 #define DEFINE_UNIMPLEMENTED_INSTRUCTION(Name) \
8097 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \ 8102 LocationSummary* Name::MakeLocationSummary(Zone* zone, bool opt) const { \
8098 UNIMPLEMENTED(); \ 8103 UNIMPLEMENTED(); \
8099 return NULL; \ 8104 return NULL; \
8100 } \ 8105 } \
8101 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); } 8106 void Name::EmitNativeCode(FlowGraphCompiler* compiler) { UNIMPLEMENTED(); }
8102 8107
8103 } // namespace dart 8108 } // namespace dart
8104 8109
8105 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_ 8110 #endif // RUNTIME_VM_INTERMEDIATE_LANGUAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698