OLD | NEW |
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 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #include "include/dart_mirrors_api.h" | 6 #include "include/dart_mirrors_api.h" |
7 #include "include/dart_native_api.h" | 7 #include "include/dart_native_api.h" |
8 | 8 |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 4785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4796 // Compilation errors are not Dart instances, so just mark the library | 4796 // Compilation errors are not Dart instances, so just mark the library |
4797 // as having failed to load without providing an error instance. | 4797 // as having failed to load without providing an error instance. |
4798 lib.SetLoadError(Instance::Handle()); | 4798 lib.SetLoadError(Instance::Handle()); |
4799 } | 4799 } |
4800 } | 4800 } |
4801 | 4801 |
4802 | 4802 |
4803 DART_EXPORT Dart_Handle Dart_LoadScript(Dart_Handle url, | 4803 DART_EXPORT Dart_Handle Dart_LoadScript(Dart_Handle url, |
4804 Dart_Handle source, | 4804 Dart_Handle source, |
4805 intptr_t line_offset, | 4805 intptr_t line_offset, |
4806 intptr_t col_offset) { | 4806 intptr_t column_offset) { |
4807 Isolate* isolate = Isolate::Current(); | 4807 Isolate* isolate = Isolate::Current(); |
4808 DARTSCOPE(isolate); | 4808 DARTSCOPE(isolate); |
4809 TIMERSCOPE(isolate, time_script_loading); | 4809 TIMERSCOPE(isolate, time_script_loading); |
4810 const String& url_str = Api::UnwrapStringHandle(isolate, url); | 4810 const String& url_str = Api::UnwrapStringHandle(isolate, url); |
4811 if (url_str.IsNull()) { | 4811 if (url_str.IsNull()) { |
4812 RETURN_TYPE_ERROR(isolate, url, String); | 4812 RETURN_TYPE_ERROR(isolate, url, String); |
4813 } | 4813 } |
4814 const String& source_str = Api::UnwrapStringHandle(isolate, source); | 4814 const String& source_str = Api::UnwrapStringHandle(isolate, source); |
4815 if (source_str.IsNull()) { | 4815 if (source_str.IsNull()) { |
4816 RETURN_TYPE_ERROR(isolate, source, String); | 4816 RETURN_TYPE_ERROR(isolate, source, String); |
4817 } | 4817 } |
4818 Library& library = | 4818 Library& library = |
4819 Library::Handle(isolate, isolate->object_store()->root_library()); | 4819 Library::Handle(isolate, isolate->object_store()->root_library()); |
4820 if (!library.IsNull()) { | 4820 if (!library.IsNull()) { |
4821 const String& library_url = String::Handle(isolate, library.url()); | 4821 const String& library_url = String::Handle(isolate, library.url()); |
4822 return Api::NewError("%s: A script has already been loaded from '%s'.", | 4822 return Api::NewError("%s: A script has already been loaded from '%s'.", |
4823 CURRENT_FUNC, library_url.ToCString()); | 4823 CURRENT_FUNC, library_url.ToCString()); |
4824 } | 4824 } |
4825 if (line_offset < 0) { | 4825 if (line_offset < 0) { |
4826 return Api::NewError("%s: argument 'line_offset' must be positive number", | 4826 return Api::NewError("%s: argument 'line_offset' must be positive number", |
4827 CURRENT_FUNC); | 4827 CURRENT_FUNC); |
4828 } | 4828 } |
4829 if (col_offset < 0) { | 4829 if (column_offset < 0) { |
4830 return Api::NewError("%s: argument 'col_offset' must be positive number", | 4830 return Api::NewError("%s: argument 'column_offset' must be positive number", |
4831 CURRENT_FUNC); | 4831 CURRENT_FUNC); |
4832 } | 4832 } |
4833 CHECK_CALLBACK_STATE(isolate); | 4833 CHECK_CALLBACK_STATE(isolate); |
4834 | 4834 |
4835 NoHeapGrowthControlScope no_growth_control; | 4835 NoHeapGrowthControlScope no_growth_control; |
4836 | 4836 |
4837 library = Library::New(url_str); | 4837 library = Library::New(url_str); |
4838 library.set_debuggable(true); | 4838 library.set_debuggable(true); |
4839 library.Register(); | 4839 library.Register(); |
4840 isolate->object_store()->set_root_library(library); | 4840 isolate->object_store()->set_root_library(library); |
4841 | 4841 |
4842 const Script& script = Script::Handle( | 4842 const Script& script = Script::Handle( |
4843 isolate, Script::New(url_str, source_str, RawScript::kScriptTag)); | 4843 isolate, Script::New(url_str, source_str, RawScript::kScriptTag)); |
4844 script.SetLocationOffset(line_offset, col_offset); | 4844 script.SetLocationOffset(line_offset, column_offset); |
4845 Dart_Handle result; | 4845 Dart_Handle result; |
4846 CompileSource(isolate, library, script, &result); | 4846 CompileSource(isolate, library, script, &result); |
4847 return result; | 4847 return result; |
4848 } | 4848 } |
4849 | 4849 |
4850 | 4850 |
4851 DART_EXPORT Dart_Handle Dart_LoadScriptFromSnapshot(const uint8_t* buffer, | 4851 DART_EXPORT Dart_Handle Dart_LoadScriptFromSnapshot(const uint8_t* buffer, |
4852 intptr_t buffer_len) { | 4852 intptr_t buffer_len) { |
4853 Isolate* isolate = Isolate::Current(); | 4853 Isolate* isolate = Isolate::Current(); |
4854 DARTSCOPE(isolate); | 4854 DARTSCOPE(isolate); |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5052 if (pending_deferred_loads.At(i) == lib.raw()) { | 5052 if (pending_deferred_loads.At(i) == lib.raw()) { |
5053 lib.SetLoadError(err); | 5053 lib.SetLoadError(err); |
5054 return Api::Null(); | 5054 return Api::Null(); |
5055 } | 5055 } |
5056 } | 5056 } |
5057 return error_in; | 5057 return error_in; |
5058 } | 5058 } |
5059 | 5059 |
5060 | 5060 |
5061 DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url, | 5061 DART_EXPORT Dart_Handle Dart_LoadLibrary(Dart_Handle url, |
5062 Dart_Handle source) { | 5062 Dart_Handle source, |
| 5063 intptr_t line_offset, |
| 5064 intptr_t column_offset) { |
5063 Isolate* isolate = Isolate::Current(); | 5065 Isolate* isolate = Isolate::Current(); |
5064 DARTSCOPE(isolate); | 5066 DARTSCOPE(isolate); |
5065 TIMERSCOPE(isolate, time_script_loading); | 5067 TIMERSCOPE(isolate, time_script_loading); |
5066 const String& url_str = Api::UnwrapStringHandle(isolate, url); | 5068 const String& url_str = Api::UnwrapStringHandle(isolate, url); |
5067 if (url_str.IsNull()) { | 5069 if (url_str.IsNull()) { |
5068 RETURN_TYPE_ERROR(isolate, url, String); | 5070 RETURN_TYPE_ERROR(isolate, url, String); |
5069 } | 5071 } |
5070 const String& source_str = Api::UnwrapStringHandle(isolate, source); | 5072 const String& source_str = Api::UnwrapStringHandle(isolate, source); |
5071 if (source_str.IsNull()) { | 5073 if (source_str.IsNull()) { |
5072 RETURN_TYPE_ERROR(isolate, source, String); | 5074 RETURN_TYPE_ERROR(isolate, source, String); |
5073 } | 5075 } |
| 5076 if (line_offset < 0) { |
| 5077 return Api::NewError("%s: argument 'line_offset' must be positive number", |
| 5078 CURRENT_FUNC); |
| 5079 } |
| 5080 if (column_offset < 0) { |
| 5081 return Api::NewError("%s: argument 'column_offset' must be positive number", |
| 5082 CURRENT_FUNC); |
| 5083 } |
5074 CHECK_CALLBACK_STATE(isolate); | 5084 CHECK_CALLBACK_STATE(isolate); |
5075 | 5085 |
5076 NoHeapGrowthControlScope no_growth_control; | 5086 NoHeapGrowthControlScope no_growth_control; |
5077 | 5087 |
5078 Library& library = Library::Handle(isolate, Library::LookupLibrary(url_str)); | 5088 Library& library = Library::Handle(isolate, Library::LookupLibrary(url_str)); |
5079 if (library.IsNull()) { | 5089 if (library.IsNull()) { |
5080 library = Library::New(url_str); | 5090 library = Library::New(url_str); |
5081 library.Register(); | 5091 library.Register(); |
5082 } else if (library.LoadInProgress() || | 5092 } else if (library.LoadInProgress() || |
5083 library.Loaded() || | 5093 library.Loaded() || |
5084 library.LoadFailed()) { | 5094 library.LoadFailed()) { |
5085 // The source for this library has either been loaded or is in the | 5095 // The source for this library has either been loaded or is in the |
5086 // process of loading. Return an error. | 5096 // process of loading. Return an error. |
5087 return Api::NewError("%s: library '%s' has already been loaded.", | 5097 return Api::NewError("%s: library '%s' has already been loaded.", |
5088 CURRENT_FUNC, url_str.ToCString()); | 5098 CURRENT_FUNC, url_str.ToCString()); |
5089 } | 5099 } |
5090 const Script& script = Script::Handle( | 5100 const Script& script = Script::Handle( |
5091 isolate, Script::New(url_str, source_str, RawScript::kLibraryTag)); | 5101 isolate, Script::New(url_str, source_str, RawScript::kLibraryTag)); |
| 5102 script.SetLocationOffset(line_offset, column_offset); |
5092 Dart_Handle result; | 5103 Dart_Handle result; |
5093 CompileSource(isolate, library, script, &result); | 5104 CompileSource(isolate, library, script, &result); |
5094 // Propagate the error out right now. | 5105 // Propagate the error out right now. |
5095 if (::Dart_IsError(result)) { | 5106 if (::Dart_IsError(result)) { |
5096 return result; | 5107 return result; |
5097 } | 5108 } |
5098 | 5109 |
5099 // If this is the dart:_builtin library, register it with the VM. | 5110 // If this is the dart:_builtin library, register it with the VM. |
5100 if (url_str.Equals("dart:_builtin")) { | 5111 if (url_str.Equals("dart:_builtin")) { |
5101 isolate->object_store()->set_builtin_library(library); | 5112 isolate->object_store()->set_builtin_library(library); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5147 LibraryPrefix::New(prefix_symbol, import_ns, false, library_vm); | 5158 LibraryPrefix::New(prefix_symbol, import_ns, false, library_vm); |
5148 library_vm.AddObject(library_prefix, prefix_symbol); | 5159 library_vm.AddObject(library_prefix, prefix_symbol); |
5149 } | 5160 } |
5150 } | 5161 } |
5151 return Api::Success(); | 5162 return Api::Success(); |
5152 } | 5163 } |
5153 | 5164 |
5154 | 5165 |
5155 DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library, | 5166 DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library, |
5156 Dart_Handle url, | 5167 Dart_Handle url, |
5157 Dart_Handle source) { | 5168 Dart_Handle source, |
| 5169 intptr_t line_offset, |
| 5170 intptr_t column_offset) { |
5158 Isolate* isolate = Isolate::Current(); | 5171 Isolate* isolate = Isolate::Current(); |
5159 DARTSCOPE(isolate); | 5172 DARTSCOPE(isolate); |
5160 TIMERSCOPE(isolate, time_script_loading); | 5173 TIMERSCOPE(isolate, time_script_loading); |
5161 const Library& lib = Api::UnwrapLibraryHandle(isolate, library); | 5174 const Library& lib = Api::UnwrapLibraryHandle(isolate, library); |
5162 if (lib.IsNull()) { | 5175 if (lib.IsNull()) { |
5163 RETURN_TYPE_ERROR(isolate, library, Library); | 5176 RETURN_TYPE_ERROR(isolate, library, Library); |
5164 } | 5177 } |
5165 const String& url_str = Api::UnwrapStringHandle(isolate, url); | 5178 const String& url_str = Api::UnwrapStringHandle(isolate, url); |
5166 if (url_str.IsNull()) { | 5179 if (url_str.IsNull()) { |
5167 RETURN_TYPE_ERROR(isolate, url, String); | 5180 RETURN_TYPE_ERROR(isolate, url, String); |
5168 } | 5181 } |
5169 const String& source_str = Api::UnwrapStringHandle(isolate, source); | 5182 const String& source_str = Api::UnwrapStringHandle(isolate, source); |
5170 if (source_str.IsNull()) { | 5183 if (source_str.IsNull()) { |
5171 RETURN_TYPE_ERROR(isolate, source, String); | 5184 RETURN_TYPE_ERROR(isolate, source, String); |
5172 } | 5185 } |
| 5186 if (line_offset < 0) { |
| 5187 return Api::NewError("%s: argument 'line_offset' must be positive number", |
| 5188 CURRENT_FUNC); |
| 5189 } |
| 5190 if (column_offset < 0) { |
| 5191 return Api::NewError("%s: argument 'column_offset' must be positive number", |
| 5192 CURRENT_FUNC); |
| 5193 } |
5173 CHECK_CALLBACK_STATE(isolate); | 5194 CHECK_CALLBACK_STATE(isolate); |
5174 | 5195 |
5175 NoHeapGrowthControlScope no_growth_control; | 5196 NoHeapGrowthControlScope no_growth_control; |
5176 | 5197 |
5177 const Script& script = Script::Handle( | 5198 const Script& script = Script::Handle( |
5178 isolate, Script::New(url_str, source_str, RawScript::kSourceTag)); | 5199 isolate, Script::New(url_str, source_str, RawScript::kSourceTag)); |
| 5200 script.SetLocationOffset(line_offset, column_offset); |
5179 Dart_Handle result; | 5201 Dart_Handle result; |
5180 CompileSource(isolate, lib, script, &result); | 5202 CompileSource(isolate, lib, script, &result); |
5181 return result; | 5203 return result; |
5182 } | 5204 } |
5183 | 5205 |
5184 | 5206 |
5185 DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library, | 5207 DART_EXPORT Dart_Handle Dart_LibraryLoadPatch(Dart_Handle library, |
5186 Dart_Handle url, | 5208 Dart_Handle url, |
5187 Dart_Handle patch_source) { | 5209 Dart_Handle patch_source) { |
5188 Isolate* isolate = Isolate::Current(); | 5210 Isolate* isolate = Isolate::Current(); |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5333 | 5355 |
5334 | 5356 |
5335 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( | 5357 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( |
5336 const char* name, | 5358 const char* name, |
5337 Dart_ServiceRequestCallback callback, | 5359 Dart_ServiceRequestCallback callback, |
5338 void* user_data) { | 5360 void* user_data) { |
5339 Service::RegisterRootEmbedderCallback(name, callback, user_data); | 5361 Service::RegisterRootEmbedderCallback(name, callback, user_data); |
5340 } | 5362 } |
5341 | 5363 |
5342 } // namespace dart | 5364 } // namespace dart |
OLD | NEW |