| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 (function(global, utils) { | 5 (function(global, utils) { |
| 6 | 6 |
| 7 "use strict"; | 7 "use strict"; |
| 8 | 8 |
| 9 %CheckIsBootstrapping(); | 9 %CheckIsBootstrapping(); |
| 10 | 10 |
| 11 // ----------------------------------------------------------------------- | 11 // ----------------------------------------------------------------------- |
| 12 // Utils | 12 // Utils |
| 13 | 13 |
| 14 var imports = UNDEFINED; | 14 var imports = UNDEFINED; |
| 15 var imports_from_experimental = UNDEFINED; | 15 var imports_from_experimental = UNDEFINED; |
| 16 var exports_container = {}; | 16 var exports_container = %ExportFromRuntime({}); |
| 17 | 17 |
| 18 // Export to other scripts. | 18 // Export to other scripts. |
| 19 // In normal natives, this exports functions to other normal natives. | 19 // In normal natives, this exports functions to other normal natives. |
| 20 // In experimental natives, this exports to other experimental natives and | 20 // In experimental natives, this exports to other experimental natives and |
| 21 // to normal natives that import using utils.ImportFromExperimental. | 21 // to normal natives that import using utils.ImportFromExperimental. |
| 22 function Export(f) { | 22 function Export(f) { |
| 23 f(exports_container); | 23 f(exports_container); |
| 24 } | 24 } |
| 25 | 25 |
| 26 | 26 |
| 27 // Import from other scripts. The actual importing happens in PostNatives and | 27 // Import from other scripts. The actual importing happens in PostNatives and |
| 28 // PostExperimental so that we can import from scripts executed later. However, | 28 // PostExperimental so that we can import from scripts executed later. However, |
| 29 // that means that the import is not available until the very end. If the | 29 // that means that the import is not available until the very end. If the |
| 30 // import needs to be available immediate, use ImportNow. | 30 // import needs to be available immediate, use ImportNow. |
| 31 // In normal natives, this imports from other normal natives. | 31 // In normal natives, this imports from other normal natives. |
| 32 // In experimental natives, this imports from other experimental natives and | 32 // In experimental natives, this imports from other experimental natives and |
| 33 // whitelisted exports from normal natives. | 33 // whitelisted exports from normal natives. |
| 34 function Import(f) { | 34 function Import(f) { |
| 35 f.next = imports; | 35 f.next = imports; |
| 36 imports = f; | 36 imports = f; |
| 37 } | 37 } |
| 38 | 38 |
| 39 |
| 39 // Import immediately from exports of previous scripts. We need this for | 40 // Import immediately from exports of previous scripts. We need this for |
| 40 // functions called during bootstrapping. Hooking up imports in PostNatives | 41 // functions called during bootstrapping. Hooking up imports in PostNatives |
| 41 // would be too late. | 42 // would be too late. |
| 42 function ImportNow(f) { | 43 function ImportNow(name) { |
| 43 f(exports_container); | 44 return exports_container[name]; |
| 44 } | 45 } |
| 45 | 46 |
| 46 | 47 |
| 47 // In normal natives, import from experimental natives. | 48 // In normal natives, import from experimental natives. |
| 48 // Not callable from experimental natives. | 49 // Not callable from experimental natives. |
| 49 function ImportFromExperimental(f) { | 50 function ImportFromExperimental(f) { |
| 50 f.next = imports_from_experimental; | 51 f.next = imports_from_experimental; |
| 51 imports_from_experimental = f; | 52 imports_from_experimental = f; |
| 52 } | 53 } |
| 53 | 54 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 var key = methods[i]; | 143 var key = methods[i]; |
| 143 var f = methods[i + 1]; | 144 var f = methods[i + 1]; |
| 144 %AddNamedProperty(prototype, key, f, DONT_ENUM | DONT_DELETE | READ_ONLY); | 145 %AddNamedProperty(prototype, key, f, DONT_ENUM | DONT_DELETE | READ_ONLY); |
| 145 %SetNativeFlag(f); | 146 %SetNativeFlag(f); |
| 146 } | 147 } |
| 147 %InternalSetPrototype(prototype, null); | 148 %InternalSetPrototype(prototype, null); |
| 148 %ToFastProperties(prototype); | 149 %ToFastProperties(prototype); |
| 149 } | 150 } |
| 150 | 151 |
| 151 | 152 |
| 152 var private_symbols = %ExportPrivateSymbols({}); | |
| 153 | |
| 154 function GetPrivateSymbol(name) { | |
| 155 return private_symbols[name]; | |
| 156 } | |
| 157 | |
| 158 // ----------------------------------------------------------------------- | 153 // ----------------------------------------------------------------------- |
| 159 // To be called by bootstrapper | 154 // To be called by bootstrapper |
| 160 | 155 |
| 161 function PostNatives(utils) { | 156 function PostNatives(utils) { |
| 162 %CheckIsBootstrapping(); | 157 %CheckIsBootstrapping(); |
| 163 | 158 |
| 164 for ( ; !IS_UNDEFINED(imports); imports = imports.next) { | 159 for ( ; !IS_UNDEFINED(imports); imports = imports.next) { |
| 165 imports(exports_container); | 160 imports(exports_container); |
| 166 } | 161 } |
| 167 | 162 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 183 "InnerArrayReverse", | 178 "InnerArrayReverse", |
| 184 "InnerArraySome", | 179 "InnerArraySome", |
| 185 "InnerArraySort", | 180 "InnerArraySort", |
| 186 "InnerArrayToLocaleString", | 181 "InnerArrayToLocaleString", |
| 187 "IsNaN", | 182 "IsNaN", |
| 188 "MathMax", | 183 "MathMax", |
| 189 "MathMin", | 184 "MathMin", |
| 190 "ObjectIsFrozen", | 185 "ObjectIsFrozen", |
| 191 "ObjectDefineProperty", | 186 "ObjectDefineProperty", |
| 192 "OwnPropertyKeys", | 187 "OwnPropertyKeys", |
| 188 "SymbolToString", |
| 193 "ToNameArray", | 189 "ToNameArray", |
| 194 "ToBoolean", | 190 "ToBoolean", |
| 195 "ToNumber", | 191 "ToNumber", |
| 196 "ToString", | 192 "ToString", |
| 193 // From runtime: |
| 194 "is_concat_spreadable_symbol", |
| 195 "iterator_symbol", |
| 196 "promise_status_symbol", |
| 197 "promise_value_symbol", |
| 198 "reflect_apply", |
| 199 "reflect_construct", |
| 200 "to_string_tag_symbol", |
| 197 ]; | 201 ]; |
| 198 | 202 |
| 199 var filtered_exports = {}; | 203 var filtered_exports = {}; |
| 200 %OptimizeObjectForAddingMultipleProperties( | 204 %OptimizeObjectForAddingMultipleProperties( |
| 201 filtered_exports, expose_list.length); | 205 filtered_exports, expose_list.length); |
| 202 for (var key of expose_list) { | 206 for (var key of expose_list) { |
| 203 filtered_exports[key] = exports_container[key]; | 207 filtered_exports[key] = exports_container[key]; |
| 204 } | 208 } |
| 205 %ToFastProperties(filtered_exports); | 209 %ToFastProperties(filtered_exports); |
| 206 exports_container = filtered_exports; | 210 exports_container = filtered_exports; |
| 207 | 211 |
| 208 utils.PostNatives = UNDEFINED; | 212 utils.PostNatives = UNDEFINED; |
| 209 utils.ImportFromExperimental = UNDEFINED; | 213 utils.ImportFromExperimental = UNDEFINED; |
| 210 } | 214 } |
| 211 | 215 |
| 212 | 216 |
| 213 function PostExperimentals(utils) { | 217 function PostExperimentals(utils) { |
| 214 %CheckIsBootstrapping(); | 218 %CheckIsBootstrapping(); |
| 215 | 219 %ExportExperimentalFromRuntime(exports_container); |
| 216 for ( ; !IS_UNDEFINED(imports); imports = imports.next) { | 220 for ( ; !IS_UNDEFINED(imports); imports = imports.next) { |
| 217 imports(exports_container); | 221 imports(exports_container); |
| 218 } | 222 } |
| 219 for ( ; !IS_UNDEFINED(imports_from_experimental); | 223 for ( ; !IS_UNDEFINED(imports_from_experimental); |
| 220 imports_from_experimental = imports_from_experimental.next) { | 224 imports_from_experimental = imports_from_experimental.next) { |
| 221 imports_from_experimental(exports_container); | 225 imports_from_experimental(exports_container); |
| 222 } | 226 } |
| 223 | 227 |
| 224 exports_container = UNDEFINED; | 228 exports_container = UNDEFINED; |
| 225 private_symbols = UNDEFINED; | |
| 226 | 229 |
| 227 utils.PostExperimentals = UNDEFINED; | 230 utils.PostExperimentals = UNDEFINED; |
| 228 utils.PostDebug = UNDEFINED; | 231 utils.PostDebug = UNDEFINED; |
| 229 utils.Import = UNDEFINED; | 232 utils.Import = UNDEFINED; |
| 230 utils.Export = UNDEFINED; | 233 utils.Export = UNDEFINED; |
| 231 } | 234 } |
| 232 | 235 |
| 233 | 236 |
| 234 function PostDebug(utils) { | 237 function PostDebug(utils) { |
| 235 for ( ; !IS_UNDEFINED(imports); imports = imports.next) { | 238 for ( ; !IS_UNDEFINED(imports); imports = imports.next) { |
| 236 imports(exports_container); | 239 imports(exports_container); |
| 237 } | 240 } |
| 238 | 241 |
| 239 exports_container = UNDEFINED; | 242 exports_container = UNDEFINED; |
| 240 private_symbols = UNDEFINED; | |
| 241 | 243 |
| 242 utils.PostDebug = UNDEFINED; | 244 utils.PostDebug = UNDEFINED; |
| 243 utils.PostExperimentals = UNDEFINED; | 245 utils.PostExperimentals = UNDEFINED; |
| 244 utils.Import = UNDEFINED; | 246 utils.Import = UNDEFINED; |
| 245 utils.Export = UNDEFINED; | 247 utils.Export = UNDEFINED; |
| 246 } | 248 } |
| 247 | 249 |
| 248 // ----------------------------------------------------------------------- | 250 // ----------------------------------------------------------------------- |
| 249 | 251 |
| 250 %OptimizeObjectForAddingMultipleProperties(utils, 14); | 252 %OptimizeObjectForAddingMultipleProperties(utils, 13); |
| 251 | 253 |
| 252 utils.Import = Import; | 254 utils.Import = Import; |
| 253 utils.ImportNow = ImportNow; | 255 utils.ImportNow = ImportNow; |
| 254 utils.Export = Export; | 256 utils.Export = Export; |
| 255 utils.ImportFromExperimental = ImportFromExperimental; | 257 utils.ImportFromExperimental = ImportFromExperimental; |
| 256 utils.GetPrivateSymbol = GetPrivateSymbol; | |
| 257 utils.SetFunctionName = SetFunctionName; | 258 utils.SetFunctionName = SetFunctionName; |
| 258 utils.InstallConstants = InstallConstants; | 259 utils.InstallConstants = InstallConstants; |
| 259 utils.InstallFunctions = InstallFunctions; | 260 utils.InstallFunctions = InstallFunctions; |
| 260 utils.InstallGetter = InstallGetter; | 261 utils.InstallGetter = InstallGetter; |
| 261 utils.InstallGetterSetter = InstallGetterSetter; | 262 utils.InstallGetterSetter = InstallGetterSetter; |
| 262 utils.SetUpLockedPrototype = SetUpLockedPrototype; | 263 utils.SetUpLockedPrototype = SetUpLockedPrototype; |
| 263 utils.PostNatives = PostNatives; | 264 utils.PostNatives = PostNatives; |
| 264 utils.PostExperimentals = PostExperimentals; | 265 utils.PostExperimentals = PostExperimentals; |
| 265 utils.PostDebug = PostDebug; | 266 utils.PostDebug = PostDebug; |
| 266 | 267 |
| 267 %ToFastProperties(utils); | 268 %ToFastProperties(utils); |
| 268 | 269 |
| 269 }) | 270 }) |
| OLD | NEW |