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

Side by Side Diff: tools/dom/scripts/systemnative.py

Issue 1173403004: Changed to use JSInterop (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Re-gen'd somehow diffs stopped showing up in CL Created 5 years, 5 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 | « tools/dom/scripts/systemhtml.py ('k') | tools/dom/src/native_DOMImplementation.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 """This module provides shared functionality for the systems to generate 6 """This module provides shared functionality for the systems to generate
7 native binding from the IDL database.""" 7 native binding from the IDL database."""
8 8
9 import emitter 9 import emitter
10 import os 10 import os
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 CPP_CALLBACK=constructor_callback_cpp_name) 659 CPP_CALLBACK=constructor_callback_cpp_name)
660 660
661 def GenerateCustomFactory(self, constructor_info): 661 def GenerateCustomFactory(self, constructor_info):
662 if 'CustomConstructor' not in self._interface.ext_attrs: 662 if 'CustomConstructor' not in self._interface.ext_attrs:
663 return False 663 return False
664 664
665 annotations = self._metadata.GetFormattedMetadata(self._library_name, 665 annotations = self._metadata.GetFormattedMetadata(self._library_name,
666 self._interface, self._interface.id, ' ') 666 self._interface, self._interface.id, ' ')
667 667
668 self._members_emitter.Emit( 668 self._members_emitter.Emit(
669 '\n $(ANNOTATIONS)factory $CTOR($PARAMS) => _create($FACTORY_PARAMS);\n ', 669 '\n $(ANNOTATIONS)factory $CTOR($PARAMS) => wrap_jso(_create($FACTORY_P ARAMS));\n',
670 ANNOTATIONS=annotations, 670 ANNOTATIONS=annotations,
671 CTOR=constructor_info._ConstructorFullName(self._DartType), 671 CTOR=constructor_info._ConstructorFullName(self._DartType),
672 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType), 672 PARAMS=constructor_info.ParametersAsDeclaration(self._DartType),
673 FACTORY_PARAMS= \ 673 FACTORY_PARAMS= \
674 constructor_info.ParametersAsArgumentList()) 674 constructor_info.ParametersAsArgumentList())
675 675
676 constructor_callback_cpp_name = 'constructorCallback' 676 # MutationObserver has custom _create. TODO(terry): Consider table but this is only one.
677 self._EmitConstructorInfrastructure( 677 if self._interface.id != 'MutationObserver':
678 constructor_info, "", constructor_callback_cpp_name, '_create', 678 constructor_callback_cpp_name = 'constructorCallback'
679 is_custom=True) 679 self._EmitConstructorInfrastructure(
680 constructor_info, "", constructor_callback_cpp_name, '_create',
681 is_custom=True)
680 682
681 self._cpp_declarations_emitter.Emit( 683 self._cpp_declarations_emitter.Emit(
682 '\n' 684 '\n'
683 'void $CPP_CALLBACK(Dart_NativeArguments);\n', 685 'void $CPP_CALLBACK(Dart_NativeArguments);\n',
684 CPP_CALLBACK=constructor_callback_cpp_name) 686 CPP_CALLBACK=constructor_callback_cpp_name)
685 687
686 return True 688 return True
687 689
688 def IsConstructorArgumentOptional(self, argument): 690 def IsConstructorArgumentOptional(self, argument):
689 return IsOptional(argument) 691 return IsOptional(argument)
690 692
691 def EmitStaticFactoryOverload(self, constructor_info, name, arguments): 693 def EmitStaticFactoryOverload(self, constructor_info, name, arguments):
692 constructor_callback_cpp_name = name + 'constructorCallback' 694 constructor_callback_cpp_name = name + 'constructorCallback'
693 self._EmitConstructorInfrastructure( 695 self._EmitConstructorInfrastructure(
694 constructor_info, name, 'constructorCallback', name, arguments, 696 constructor_info, name, 'constructorCallback', name, arguments,
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 # Temporary hack to force dart:scalarlist clamped array for ImageData.data. 911 # Temporary hack to force dart:scalarlist clamped array for ImageData.data.
910 # TODO(antonm): solve in principled way. 912 # TODO(antonm): solve in principled way.
911 if self._interface.id == 'ImageData' and html_name == 'data': 913 if self._interface.id == 'ImageData' and html_name == 'data':
912 html_name = '_data' 914 html_name = '_data'
913 type_info = self._TypeInfo(attr.type.id) 915 type_info = self._TypeInfo(attr.type.id)
914 return_type = self.SecureOutputType(attr.type.id, False, read_only) 916 return_type = self.SecureOutputType(attr.type.id, False, read_only)
915 parameters = [] 917 parameters = []
916 dart_declaration = '%s get %s' % (return_type, html_name) 918 dart_declaration = '%s get %s' % (return_type, html_name)
917 is_custom = _IsCustom(attr) and (_IsCustomValue(attr, None) or 919 is_custom = _IsCustom(attr) and (_IsCustomValue(attr, None) or
918 _IsCustomValue(attr, 'Getter')) 920 _IsCustomValue(attr, 'Getter'))
921
922 # Operation uses blink?
923 wrap_unwrap_list = [];
924 return_wrap_jso = False
925 if self._dart_use_blink:
926 # Unwrap the type to get the JsObject if Type is:
927 #
928 # - known IDL type
929 # - type_id is None then it's probably a union type or overloaded
930 # it's a dynamic/any type
931 # - type is Object
932 #
933 # JsObject maybe stored in the Dart class.
934 return_wrap_jso = (isinstance(type_info, InterfaceIDLTypeInfo) or
935 not(type_info) or attr.type.id == 'Object')
936 wrap_unwrap_list.append(return_wrap_jso) # wrap_jso the returned objec t
937 wrap_unwrap_list.append(self._dart_use_blink) # this must be unwrap_jso
938
919 # This seems to have been replaced with Custom=Getter (see above), but 939 # This seems to have been replaced with Custom=Getter (see above), but
920 # check to be sure we don't see the old syntax 940 # check to be sure we don't see the old syntax
921 assert(not ('CustomGetter' in attr.ext_attrs)) 941 assert(not ('CustomGetter' in attr.ext_attrs))
922 native_suffix = 'Getter' 942 native_suffix = 'Getter'
923 auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix) 943 auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
924 native_entry = \ 944 native_entry = \
925 self.DeriveNativeEntry(attr.id, 'Getter', None) 945 self.DeriveNativeEntry(attr.id, 'Getter', None)
926 cpp_callback_name = self._GenerateNativeBinding(attr.id, 1, 946 cpp_callback_name = self._GenerateNativeBinding(attr.id, 1,
927 dart_declaration, attr.is_static, return_type, parameters, 947 dart_declaration, attr.is_static, return_type, parameters,
928 native_suffix, is_custom, auto_scope_setup, native_entry=native_entry) 948 native_suffix, is_custom, auto_scope_setup, native_entry=native_entry,
949 wrap_unwrap_list=wrap_unwrap_list)
929 if is_custom: 950 if is_custom:
930 return 951 return
931 952
932 if 'Reflect' in attr.ext_attrs: 953 if 'Reflect' in attr.ext_attrs:
933 webcore_function_name = self._TypeInfo(attr.type.id).webcore_getter_name() 954 webcore_function_name = self._TypeInfo(attr.type.id).webcore_getter_name()
934 if 'URL' in attr.ext_attrs: 955 if 'URL' in attr.ext_attrs:
935 if 'NonEmpty' in attr.ext_attrs: 956 if 'NonEmpty' in attr.ext_attrs:
936 webcore_function_name = 'getNonEmptyURLAttribute' 957 webcore_function_name = 'getNonEmptyURLAttribute'
937 else: 958 else:
938 webcore_function_name = 'getURLAttribute' 959 webcore_function_name = 'getURLAttribute'
(...skipping 17 matching lines...) Expand all
956 True, 977 True,
957 function_expression, 978 function_expression,
958 attr, 979 attr,
959 [], 980 [],
960 attr.type.id, 981 attr.type.id,
961 attr.type.nullable, 982 attr.type.nullable,
962 raises, 983 raises,
963 auto_scope_setup) 984 auto_scope_setup)
964 985
965 def _AddSetter(self, attr, html_name): 986 def _AddSetter(self, attr, html_name):
987 return_type = 'void'
988 ptype = self._DartType(attr.type.id)
989
966 type_info = self._TypeInfo(attr.type.id) 990 type_info = self._TypeInfo(attr.type.id)
967 return_type = 'void' 991
968 parameters = ['value'] 992 # Is the setter value a DartClass (that has a JsObject) or the type is
969 ptype = self._DartType(attr.type.id) 993 # None (it's a dynamic/any type) then unwrap_jso before passing to blink.
994 parameters = ['unwrap_jso(value)' if (isinstance(type_info, InterfaceIDLType Info) or
995 not(attr.type.id) or ptype == 'Object' )
996 else 'value']
997
970 dart_declaration = 'void set %s(%s value)' % (html_name, ptype) 998 dart_declaration = 'void set %s(%s value)' % (html_name, ptype)
971 is_custom = _IsCustom(attr) and (_IsCustomValue(attr, None) or 999 is_custom = _IsCustom(attr) and (_IsCustomValue(attr, None) or
972 _IsCustomValue(attr, 'Setter')) 1000 _IsCustomValue(attr, 'Setter'))
973 # This seems to have been replaced with Custom=Setter (see above), but 1001 # This seems to have been replaced with Custom=Setter (see above), but
974 # check to be sure we don't see the old syntax 1002 # check to be sure we don't see the old syntax
975 assert(not ('CustomSetter' in attr.ext_attrs)) 1003 assert(not ('CustomSetter' in attr.ext_attrs))
976 assert(not ('V8CustomSetter' in attr.ext_attrs)) 1004 assert(not ('V8CustomSetter' in attr.ext_attrs))
977 native_suffix = 'Setter' 1005 native_suffix = 'Setter'
978 auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix) 1006 auto_scope_setup = self._GenerateAutoSetupScope(attr.id, native_suffix)
979 native_entry = \ 1007 native_entry = \
980 self.DeriveNativeEntry(attr.id, 'Setter', None) 1008 self.DeriveNativeEntry(attr.id, 'Setter', None)
1009
1010 # setters return no object and if blink this must be unwrapped.?
1011 wrap_unwrap_list = [False, self._dart_use_blink];
1012
981 cpp_callback_name = self._GenerateNativeBinding(attr.id, 2, 1013 cpp_callback_name = self._GenerateNativeBinding(attr.id, 2,
982 dart_declaration, attr.is_static, return_type, parameters, 1014 dart_declaration, attr.is_static, return_type, parameters,
983 native_suffix, is_custom, auto_scope_setup, native_entry=native_entry) 1015 native_suffix, is_custom, auto_scope_setup, native_entry=native_entry,
1016 wrap_unwrap_list=wrap_unwrap_list)
984 if is_custom: 1017 if is_custom:
985 return 1018 return
986 1019
987 if 'Reflect' in attr.ext_attrs: 1020 if 'Reflect' in attr.ext_attrs:
988 webcore_function_name = self._TypeInfo(attr.type.id).webcore_setter_name() 1021 webcore_function_name = self._TypeInfo(attr.type.id).webcore_setter_name()
989 else: 1022 else:
990 if 'ImplementedAs' in attr.ext_attrs: 1023 if 'ImplementedAs' in attr.ext_attrs:
991 attr_name = attr.ext_attrs['ImplementedAs'] 1024 attr_name = attr.ext_attrs['ImplementedAs']
992 else: 1025 else:
993 attr_name = attr.id 1026 attr_name = attr.id
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 # First emit a toplevel function to do the native call 1073 # First emit a toplevel function to do the native call
1041 # Calls to this are emitted elsewhere, 1074 # Calls to this are emitted elsewhere,
1042 dart_native_name, resolver_string = \ 1075 dart_native_name, resolver_string = \
1043 self.DeriveNativeEntry("item", 'Method', 1) 1076 self.DeriveNativeEntry("item", 'Method', 1)
1044 1077
1045 # Emit the method which calls the toplevel function, along with 1078 # Emit the method which calls the toplevel function, along with
1046 # the [] operator. 1079 # the [] operator.
1047 dart_qualified_name = \ 1080 dart_qualified_name = \
1048 self.DeriveQualifiedBlinkName(self._interface.id, 1081 self.DeriveQualifiedBlinkName(self._interface.id,
1049 dart_native_name) 1082 dart_native_name)
1050 self._members_emitter.Emit( 1083
1051 '\n' 1084 type_info = self._TypeInfo(element_type)
1052 ' $TYPE operator[](int index) {\n' 1085 # Does nativeIndexGetter return a DartClass (JsObject) if so wrap_jso.
1053 ' if (index < 0 || index >= length)\n' 1086 wrap_jso_start = ''
1054 ' throw new RangeError.index(index, this);\n' 1087 wrap_jso_end = ''
1055 ' return $(DART_NATIVE_NAME)(this, index);\n' 1088 if isinstance(type_info, InterfaceIDLTypeInfo):
1056 ' }\n\n' 1089 wrap_jso_start = 'wrap_jso('
1057 ' $TYPE _nativeIndexedGetter(int index) =>' 1090 wrap_jso_end = ')'
1058 ' $(DART_NATIVE_NAME)(this, index);\n', 1091 blinkNativeIndexed = """
1059 DART_NATIVE_NAME=dart_qualified_name, 1092 $TYPE operator[](int index) {
1060 TYPE=self.SecureOutputType(element_type), 1093 if (index < 0 || index >= length)
1061 INTERFACE=self._interface.id) 1094 throw new RangeError.index(index, this);
1095 return %s$(DART_NATIVE_NAME)(unwrap_jso(this), index)%s;
1096 }
1097
1098 $TYPE _nativeIndexedGetter(int index) => %s$(DART_NATIVE_NAME)(unwrap_jso(this ), index)%s;
1099 """ % (wrap_jso_start, wrap_jso_end, wrap_jso_start, wrap_jso_end)
1100 # Wrap the type to store the JsObject if Type is:
1101 #
1102 # - known IDL type
1103 # - type_id is None then it's probably a union type or overloaded
1104 # it's a dynamic/any type
1105 # - type is Object
1106 #
1107 # JsObject maybe stored in the Dart class.
1108 if isinstance(type_info, InterfaceIDLTypeInfo) or not(type_info) or dart_e lement_type == 'Object':
1109 blinkNativeIndexedGetter = \
1110 ' {0}$(DART_NATIVE_NAME)(unwrap_jso(this), index){1};\n'.format('w rap_jso(', ')')
1111 else:
1112 blinkNativeIndexedGetter = \
1113 ' $(DART_NATIVE_NAME)(unwrap_jso(this), index);\n'
1114 self._members_emitter.Emit(blinkNativeIndexed,
1115 DART_NATIVE_NAME=dart_qualified_name,
1116 TYPE=self.SecureOutputType(element_type),
1117 INTERFACE=self._interface.id)
1062 1118
1063 if self._HasNativeIndexSetter(): 1119 if self._HasNativeIndexSetter():
1064 self._EmitNativeIndexSetter(dart_element_type) 1120 self._EmitNativeIndexSetter(dart_element_type)
1065 else: 1121 else:
1066 self._members_emitter.Emit( 1122 self._members_emitter.Emit(
1067 '\n' 1123 '\n'
1068 ' void operator[]=(int index, $TYPE value) {\n' 1124 ' void operator[]=(int index, $TYPE value) {\n'
1069 ' throw new UnsupportedError("Cannot assign element of immutable Li st.");\n' 1125 ' throw new UnsupportedError("Cannot assign element of immutable Li st.");\n'
1070 ' }\n', 1126 ' }\n',
1071 TYPE=dart_element_type) 1127 TYPE=dart_element_type)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 self._GenerateNativeBinding('numericIndexSetter', 3, 1182 self._GenerateNativeBinding('numericIndexSetter', 3,
1127 dart_declaration, False, return_type, parameters, 1183 dart_declaration, False, return_type, parameters,
1128 'Callback', True, False) 1184 'Callback', True, False)
1129 1185
1130 def EmitOperation(self, info, html_name): 1186 def EmitOperation(self, info, html_name):
1131 """ 1187 """
1132 Arguments: 1188 Arguments:
1133 info: An OperationInfo object. 1189 info: An OperationInfo object.
1134 """ 1190 """
1135 return_type = self.SecureOutputType(info.type_name, False, True) 1191 return_type = self.SecureOutputType(info.type_name, False, True)
1192
1136 formals = info.ParametersAsDeclaration(self._DartType) 1193 formals = info.ParametersAsDeclaration(self._DartType)
1137 parameters = info.ParametersAsListOfVariables() 1194
1195 parameters = info.ParametersAsListOfVariables(None, self._type_registry if s elf._dart_use_blink else None)
1138 dart_declaration = '%s%s %s(%s)' % ( 1196 dart_declaration = '%s%s %s(%s)' % (
1139 'static ' if info.IsStatic() else '', 1197 'static ' if info.IsStatic() else '',
1140 return_type, 1198 return_type,
1141 html_name, 1199 html_name,
1142 formals) 1200 formals)
1143 1201
1144 operation = info.operations[0] 1202 operation = info.operations[0]
1203
1145 is_custom = _IsCustom(operation) 1204 is_custom = _IsCustom(operation)
1146 has_optional_arguments = any(IsOptional(argument) for argument in operation. arguments) 1205 has_optional_arguments = any(IsOptional(argument) for argument in operation. arguments)
1147 needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_option al_arguments) 1206 needs_dispatcher = not is_custom and (len(info.operations) > 1 or has_option al_arguments)
1148 1207
1208 # Operation uses blink?
1209 wrap_unwrap_list = [];
1210 return_wrap_jso = False
1211 # return type wrapped?
1212 if self._dart_use_blink:
1213 # Wrap the type to store the JsObject if Type is:
1214 #
1215 # - known IDL type
1216 # - type_id is None then it's probably a union type or overloaded
1217 # it's a dynamic/any type
1218 # - type is Object
1219 #
1220 # JsObject maybe stored in the Dart class.
1221 return_wrap_jso = (info.wrap_unwrap_type_blink(return_type, self._type_r egistry) or
1222 return_type == 'Rectangle' or
1223 info.wrap_unwrap_list_blink(return_type, self._type_r egistry))
1224 wrap_unwrap_list.append(return_wrap_jso) # wrap_jso the returned objec t
1225 wrap_unwrap_list.append(self._dart_use_blink) # The 'this' parameter must b e unwrap_jso
1226
1149 if info.callback_args: 1227 if info.callback_args:
1150 self._AddFutureifiedOperation(info, html_name) 1228 self._AddFutureifiedOperation(info, html_name)
1151 elif not needs_dispatcher: 1229 elif not needs_dispatcher:
1152 # Bind directly to native implementation 1230 # Bind directly to native implementation
1153 argument_count = (0 if info.IsStatic() else 1) + len(info.param_infos) 1231 argument_count = (0 if info.IsStatic() else 1) + len(info.param_infos)
1154 native_suffix = 'Callback' 1232 native_suffix = 'Callback'
1155 auto_scope_setup = self._GenerateAutoSetupScope(info.name, native_suffix) 1233 auto_scope_setup = self._GenerateAutoSetupScope(info.name, native_suffix)
1156 native_entry = \ 1234 native_entry = \
1157 self.DeriveNativeEntry(operation.id, 'Method', len(info.param_infos)) 1235 self.DeriveNativeEntry(operation.id, 'Method', len(info.param_infos))
1158 cpp_callback_name = self._GenerateNativeBinding( 1236 cpp_callback_name = self._GenerateNativeBinding(
1159 info.name, argument_count, dart_declaration, 1237 info.name, argument_count, dart_declaration,
1160 info.IsStatic(), return_type, parameters, 1238 info.IsStatic(), return_type, parameters,
1161 native_suffix, is_custom, auto_scope_setup, 1239 native_suffix, is_custom, auto_scope_setup,
1162 native_entry=native_entry) 1240 native_entry=native_entry,
1241 wrap_unwrap_list=wrap_unwrap_list)
1163 if not is_custom: 1242 if not is_custom:
1164 self._GenerateOperationNativeCallback(operation, operation.arguments, cp p_callback_name, auto_scope_setup) 1243 self._GenerateOperationNativeCallback(operation, operation.arguments, cp p_callback_name, auto_scope_setup)
1165 else: 1244 else:
1166 self._GenerateDispatcher(info, info.operations, dart_declaration, html_nam e) 1245 self._GenerateDispatcher(info, info.operations, dart_declaration, html_nam e)
1167 1246
1168 def _GenerateDispatcher(self, info, operations, dart_declaration, html_name): 1247 def _GenerateDispatcher(self, info, operations, dart_declaration, html_name):
1169 1248
1170 def GenerateCall( 1249 def GenerateCall(
1171 stmts_emitter, call_emitter, version, operation, argument_count): 1250 stmts_emitter, call_emitter, version, operation, argument_count):
1172 native_suffix = 'Callback' 1251 native_suffix = 'Callback'
1173 actuals = info.ParametersAsListOfVariables(argument_count) 1252 actuals = info.ParametersAsListOfVariables(argument_count, self._type_regi stry if self._dart_use_blink else None)
1174 actuals_s = ", ".join(actuals) 1253 actuals_s = ", ".join(actuals)
1175 formals=actuals 1254 formals=actuals
1176 return_type = self.SecureOutputType(operation.type.id) 1255 return_type = self.SecureOutputType(operation.type.id)
1256
1257 return_wrap_jso = False
1258 if self._dart_use_blink:
1259 return_wrap_jso = self._type_registry.HasInterface(return_type)
1260
1177 native_suffix = 'Callback' 1261 native_suffix = 'Callback'
1178 is_custom = _IsCustom(operation) 1262 is_custom = _IsCustom(operation)
1179 base_name = '_%s_%s' % (operation.id, version) 1263 base_name = '_%s_%s' % (operation.id, version)
1180 static = True 1264 static = True
1181 if not operation.is_static: 1265 if not operation.is_static:
1182 actuals = ['this'] + actuals 1266 actuals = ['unwrap_jso(this)' if self._dart_use_blink else 'this'] + act uals
1183 formals = ['mthis'] + formals 1267 formals = ['mthis'] + formals
1184 actuals_s = ", ".join(actuals) 1268 actuals_s = ", ".join(actuals)
1185 formals_s = ", ".join(formals) 1269 formals_s = ", ".join(formals)
1186 dart_declaration = '%s(%s)' % ( 1270 dart_declaration = '%s(%s)' % (
1187 base_name, formals_s) 1271 base_name, formals_s)
1188 native_entry = \ 1272 native_entry = \
1189 self.DeriveNativeEntry(operation.id, 'Method', argument_count) 1273 self.DeriveNativeEntry(operation.id, 'Method', argument_count)
1190 overload_base_name = native_entry[0] 1274 overload_base_name = native_entry[0]
1191 overload_name = \ 1275 overload_name = \
1192 self.DeriveQualifiedBlinkName(self._interface.id, 1276 self.DeriveQualifiedBlinkName(self._interface.id,
1193 overload_base_name) 1277 overload_base_name)
1194 call_emitter.Emit('$NAME($ARGS)', NAME=overload_name, ARGS=actuals_s) 1278 if return_wrap_jso:
1279 call_emitter.Emit('wrap_jso($NAME($ARGS))', NAME=overload_name, ARGS=a ctuals_s)
1280 else:
1281 call_emitter.Emit('$NAME($ARGS)', NAME=overload_name, ARGS=actuals_s)
1195 auto_scope_setup = \ 1282 auto_scope_setup = \
1196 self._GenerateAutoSetupScope(base_name, native_suffix) 1283 self._GenerateAutoSetupScope(base_name, native_suffix)
1197 cpp_callback_name = self._GenerateNativeBinding( 1284 cpp_callback_name = self._GenerateNativeBinding(
1198 base_name, (0 if static else 1) + argument_count, 1285 base_name, (0 if static else 1) + argument_count,
1199 dart_declaration, static, return_type, formals, 1286 dart_declaration, static, return_type, formals,
1200 native_suffix, is_custom, auto_scope_setup, emit_metadata=False, 1287 native_suffix, is_custom, auto_scope_setup, emit_metadata=False,
1201 emit_to_native=True, native_entry=native_entry) 1288 emit_to_native=True, native_entry=native_entry)
1202 if not is_custom: 1289 if not is_custom:
1203 self._GenerateOperationNativeCallback(operation, 1290 self._GenerateOperationNativeCallback(operation,
1204 operation.arguments[:argument_count], cpp_callback_name, 1291 operation.arguments[:argument_count], cpp_callback_name,
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
1597 self._interface.id, 1684 self._interface.id,
1598 ext_attrs) 1685 ext_attrs)
1599 set_return_value = '%s' % (return_to_dart_conversion) 1686 set_return_value = '%s' % (return_to_dart_conversion)
1600 invocation_emitter.Emit( 1687 invocation_emitter.Emit(
1601 ' $RETURN_VALUE;\n', 1688 ' $RETURN_VALUE;\n',
1602 RETURN_VALUE=set_return_value) 1689 RETURN_VALUE=set_return_value)
1603 1690
1604 def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration, 1691 def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration,
1605 static, return_type, parameters, native_suffix, is_custom, 1692 static, return_type, parameters, native_suffix, is_custom,
1606 auto_scope_setup=True, emit_metadata=True, emit_to_native=False, 1693 auto_scope_setup=True, emit_metadata=True, emit_to_native=False,
1607 native_entry=None): 1694 native_entry=None, wrap_unwrap_list=[]):
1608 metadata = [] 1695 metadata = []
1609 if emit_metadata: 1696 if emit_metadata:
1610 metadata = self._metadata.GetFormattedMetadata( 1697 metadata = self._metadata.GetFormattedMetadata(
1611 self._renamer.GetLibraryName(self._interface), 1698 self._renamer.GetLibraryName(self._interface),
1612 self._interface, idl_name, ' ') 1699 self._interface, idl_name, ' ')
1613 1700
1614 if (native_entry): 1701 if (native_entry):
1615 dart_native_name, native_binding = native_entry 1702 dart_native_name, native_binding = native_entry
1616 else: 1703 else:
1617 dart_native_name = \ 1704 dart_native_name = \
1618 self.DeriveNativeName(idl_name, native_suffix) 1705 self.DeriveNativeName(idl_name, native_suffix)
1619 native_binding_id = self._interface.id 1706 native_binding_id = self._interface.id
1620 native_binding_id = TypeIdToBlinkName(native_binding_id, self._database) 1707 native_binding_id = TypeIdToBlinkName(native_binding_id, self._database)
1621 native_binding = \ 1708 native_binding = \
1622 '%s_%s_%s' % (native_binding_id, idl_name, native_suffix) 1709 '%s_%s_%s' % (native_binding_id, idl_name, native_suffix)
1623 1710
1624 if not static: 1711 if not static:
1625 formals = ", ".join(['mthis'] + parameters) 1712 formals = ", ".join(['mthis'] + parameters)
1626 actuals = ", ".join(['this'] + parameters) 1713 if wrap_unwrap_list and wrap_unwrap_list[1]:
1714 actuals = ", ".join(['unwrap_jso(this)'] + parameters)
1715 else:
1716 actuals = ", ".join(['this'] + parameters)
1627 else: 1717 else:
1628 formals = ", ".join(parameters) 1718 formals = ", ".join(parameters)
1629 actuals = ", ".join(parameters) 1719 actuals = ", ".join(parameters)
1630 1720
1631 if not emit_to_native: 1721 if not emit_to_native:
1632 caller_emitter = self._members_emitter 1722 caller_emitter = self._members_emitter
1633 full_dart_name = \ 1723 full_dart_name = \
1634 self.DeriveQualifiedBlinkName(self._interface.id, 1724 self.DeriveQualifiedBlinkName(self._interface.id,
1635 dart_native_name) 1725 dart_native_name)
1636 if IsPureInterface(self._interface.id): 1726 if IsPureInterface(self._interface.id):
1637 caller_emitter.Emit( 1727 caller_emitter.Emit(
1638 '\n' 1728 '\n'
1639 ' $METADATA$DART_DECLARATION;\n', 1729 ' $METADATA$DART_DECLARATION;\n',
1640 METADATA=metadata, 1730 METADATA=metadata,
1641 DART_DECLARATION=dart_declaration) 1731 DART_DECLARATION=dart_declaration)
1642 else: 1732 else:
1643 caller_emitter.Emit( 1733 emit_template = '''
1644 '\n' 1734 $METADATA$DART_DECLARATION => $DART_NAME($ACTUALS);
1645 ' $METADATA$DART_DECLARATION => $DART_NAME($ACTUALS);\n', 1735 '''
1646 METADATA=metadata, 1736 if wrap_unwrap_list and wrap_unwrap_list[0]:
1647 DART_DECLARATION=dart_declaration, 1737 emit_jso_template = '''
1648 DART_NAME=full_dart_name, 1738 $METADATA$DART_DECLARATION => %s($DART_NAME($ACTUALS));
1649 ACTUALS=actuals) 1739 '''
1740 if return_type == 'Rectangle':
1741 jso_util_method = 'make_dart_rectangle'
1742 # TODO(terry): More checks that the return is a List<Node>.
1743 elif return_type.startswith('List<'):
1744 jso_util_method = 'wrap_jso_list'
1745 else:
1746 jso_util_method = 'wrap_jso'
1747 # Always return List<String> unwrapped.
1748 if return_type != 'List<String>':
1749 emit_template = emit_jso_template % jso_util_method
1750 caller_emitter.Emit(emit_template,
1751 METADATA=metadata,
1752 DART_DECLARATION=dart_declaration,
1753 DART_NAME=full_dart_name,
1754 ACTUALS=actuals)
1650 cpp_callback_name = '%s%s' % (idl_name, native_suffix) 1755 cpp_callback_name = '%s%s' % (idl_name, native_suffix)
1651 1756
1652 self._cpp_resolver_emitter.Emit( 1757 self._cpp_resolver_emitter.Emit(
1653 ' if (argumentCount == $ARGC && name == "$NATIVE_BINDING") {\n' 1758 ' if (argumentCount == $ARGC && name == "$NATIVE_BINDING") {\n'
1654 ' *autoSetupScope = $AUTO_SCOPE_SETUP;\n' 1759 ' *autoSetupScope = $AUTO_SCOPE_SETUP;\n'
1655 ' return Dart$(INTERFACE_NAME)Internal::$CPP_CALLBACK_NAME;\n' 1760 ' return Dart$(INTERFACE_NAME)Internal::$CPP_CALLBACK_NAME;\n'
1656 ' }\n', 1761 ' }\n',
1657 ARGC=argument_count, 1762 ARGC=argument_count,
1658 NATIVE_BINDING=native_binding, 1763 NATIVE_BINDING=native_binding,
1659 INTERFACE_NAME=self._interface.id, 1764 INTERFACE_NAME=self._interface.id,
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1918 2023
1919 def _IsCustom(op_or_attr): 2024 def _IsCustom(op_or_attr):
1920 assert(isinstance(op_or_attr, IDLMember)) 2025 assert(isinstance(op_or_attr, IDLMember))
1921 return 'Custom' in op_or_attr.ext_attrs or 'DartCustom' in op_or_attr.ext_attr s 2026 return 'Custom' in op_or_attr.ext_attrs or 'DartCustom' in op_or_attr.ext_attr s
1922 2027
1923 def _IsCustomValue(op_or_attr, value): 2028 def _IsCustomValue(op_or_attr, value):
1924 if _IsCustom(op_or_attr): 2029 if _IsCustom(op_or_attr):
1925 return op_or_attr.ext_attrs.get('Custom') == value \ 2030 return op_or_attr.ext_attrs.get('Custom') == value \
1926 or op_or_attr.ext_attrs.get('DartCustom') == value 2031 or op_or_attr.ext_attrs.get('DartCustom') == value
1927 return False 2032 return False
OLDNEW
« no previous file with comments | « tools/dom/scripts/systemhtml.py ('k') | tools/dom/src/native_DOMImplementation.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698