| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 #if !defined(_WIN32) && !defined(_WIN64) | 5 #if !defined(_WIN32) && !defined(_WIN64) |
| 6 #include <unistd.h> // NOLINT | 6 #include <unistd.h> // NOLINT |
| 7 #endif // !defined(_WIN32) && !defined(_WIN64) | 7 #endif // !defined(_WIN32) && !defined(_WIN64) |
| 8 | 8 |
| 9 #include <locale.h> | 9 #include <locale.h> |
| 10 | 10 |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 if (args.Length() != 4 || !args[0]->IsString() || !args[1]->IsString() || | 170 if (args.Length() != 4 || !args[0]->IsString() || !args[1]->IsString() || |
| 171 !args[2]->IsInt32() || !args[3]->IsInt32()) { | 171 !args[2]->IsInt32() || !args[3]->IsInt32()) { |
| 172 fprintf(stderr, | 172 fprintf(stderr, |
| 173 "Internal error: compileAndRunWithOrigin(source, name, line, " | 173 "Internal error: compileAndRunWithOrigin(source, name, line, " |
| 174 "column)."); | 174 "column)."); |
| 175 Exit(); | 175 Exit(); |
| 176 } | 176 } |
| 177 | 177 |
| 178 backend_runner_->Append(new ExecuteStringTask( | 178 backend_runner_->Append(new ExecuteStringTask( |
| 179 ToVector(args[0].As<v8::String>()), args[1].As<v8::String>(), | 179 ToVector(args[0].As<v8::String>()), args[1].As<v8::String>(), |
| 180 args[2].As<v8::Int32>(), args[3].As<v8::Int32>())); | 180 args[2].As<v8::Int32>(), args[3].As<v8::Int32>(), nullptr, nullptr)); |
| 181 } | 181 } |
| 182 }; | 182 }; |
| 183 | 183 |
| 184 TaskRunner* UtilsExtension::backend_runner_ = nullptr; | 184 TaskRunner* UtilsExtension::backend_runner_ = nullptr; |
| 185 | 185 |
| 186 class SetTimeoutTask : public TaskRunner::Task { | 186 class SetTimeoutTask : public AsyncTask { |
| 187 public: | 187 public: |
| 188 SetTimeoutTask(v8::Isolate* isolate, v8::Local<v8::Function> function) | 188 SetTimeoutTask(v8::Isolate* isolate, v8::Local<v8::Function> function, |
| 189 : function_(isolate, function) {} | 189 const char* task_name, v8_inspector::V8Inspector* inspector) |
| 190 : AsyncTask(task_name, inspector), function_(isolate, function) {} |
| 190 virtual ~SetTimeoutTask() {} | 191 virtual ~SetTimeoutTask() {} |
| 191 | 192 |
| 192 bool is_inspector_task() final { return false; } | 193 bool is_inspector_task() final { return false; } |
| 193 | 194 |
| 194 void Run(v8::Isolate* isolate, | 195 void AsyncRun(v8::Isolate* isolate, |
| 195 const v8::Global<v8::Context>& global_context) override { | 196 const v8::Global<v8::Context>& global_context) override { |
| 196 v8::MicrotasksScope microtasks_scope(isolate, | 197 v8::MicrotasksScope microtasks_scope(isolate, |
| 197 v8::MicrotasksScope::kRunMicrotasks); | 198 v8::MicrotasksScope::kRunMicrotasks); |
| 198 v8::HandleScope handle_scope(isolate); | 199 v8::HandleScope handle_scope(isolate); |
| 199 v8::Local<v8::Context> context = global_context.Get(isolate); | 200 v8::Local<v8::Context> context = global_context.Get(isolate); |
| 200 v8::Context::Scope context_scope(context); | 201 v8::Context::Scope context_scope(context); |
| 201 | 202 |
| 202 v8::Local<v8::Function> function = function_.Get(isolate); | 203 v8::Local<v8::Function> function = function_.Get(isolate); |
| 203 v8::MaybeLocal<v8::Value> result; | 204 v8::MaybeLocal<v8::Value> result; |
| 204 v8_inspector::V8Inspector* inspector = | 205 v8_inspector::V8Inspector* inspector = |
| 205 InspectorClientImpl::InspectorFromContext(context); | 206 InspectorClientImpl::InspectorFromContext(context); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 227 static void SetTimeout(const v8::FunctionCallbackInfo<v8::Value>& args) { | 228 static void SetTimeout(const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 228 if (args.Length() != 2 || !args[1]->IsNumber() || | 229 if (args.Length() != 2 || !args[1]->IsNumber() || |
| 229 (!args[0]->IsFunction() && !args[0]->IsString()) || | 230 (!args[0]->IsFunction() && !args[0]->IsString()) || |
| 230 args[1].As<v8::Number>()->Value() != 0.0) { | 231 args[1].As<v8::Number>()->Value() != 0.0) { |
| 231 fprintf(stderr, | 232 fprintf(stderr, |
| 232 "Internal error: only setTimeout(function, 0) is supported."); | 233 "Internal error: only setTimeout(function, 0) is supported."); |
| 233 Exit(); | 234 Exit(); |
| 234 } | 235 } |
| 235 v8::Isolate* isolate = args.GetIsolate(); | 236 v8::Isolate* isolate = args.GetIsolate(); |
| 236 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 237 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
| 238 std::unique_ptr<TaskRunner::Task> task; |
| 239 v8_inspector::V8Inspector* inspector = |
| 240 InspectorClientImpl::InspectorFromContext(context); |
| 237 if (args[0]->IsFunction()) { | 241 if (args[0]->IsFunction()) { |
| 238 TaskRunner::FromContext(context)->Append( | 242 task.reset(new SetTimeoutTask(isolate, |
| 239 new SetTimeoutTask(isolate, v8::Local<v8::Function>::Cast(args[0]))); | 243 v8::Local<v8::Function>::Cast(args[0]), |
| 244 "setTimeout", inspector)); |
| 240 } else { | 245 } else { |
| 241 TaskRunner::FromContext(context)->Append(new ExecuteStringTask( | 246 task.reset(new ExecuteStringTask( |
| 242 ToVector(args[0].As<v8::String>()), v8::String::Empty(isolate), | 247 ToVector(args[0].As<v8::String>()), v8::String::Empty(isolate), |
| 243 v8::Integer::New(isolate, 0), v8::Integer::New(isolate, 0))); | 248 v8::Integer::New(isolate, 0), v8::Integer::New(isolate, 0), |
| 249 "setTimeout", inspector)); |
| 244 } | 250 } |
| 251 TaskRunner::FromContext(context)->Append(task.release()); |
| 245 } | 252 } |
| 246 }; | 253 }; |
| 247 | 254 |
| 248 class InspectorExtension : public v8::Extension { | 255 class InspectorExtension : public v8::Extension { |
| 249 public: | 256 public: |
| 250 InspectorExtension() | 257 InspectorExtension() |
| 251 : v8::Extension("v8_inspector/inspector", | 258 : v8::Extension("v8_inspector/inspector", |
| 252 "native function attachInspector();" | 259 "native function attachInspector();" |
| 253 "native function detachInspector();") {} | 260 "native function detachInspector();") {} |
| 254 | 261 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 v8::NewStringType::kInternalized) | 334 v8::NewStringType::kInternalized) |
| 328 .ToLocalChecked(); | 335 .ToLocalChecked(); |
| 329 v8::Local<v8::String> message_string = ToString(isolate, message); | 336 v8::Local<v8::String> message_string = ToString(isolate, message); |
| 330 v8::Local<v8::String> suffix = | 337 v8::Local<v8::String> suffix = |
| 331 v8::String::NewFromUtf8(isolate, ")", v8::NewStringType::kInternalized) | 338 v8::String::NewFromUtf8(isolate, ")", v8::NewStringType::kInternalized) |
| 332 .ToLocalChecked(); | 339 .ToLocalChecked(); |
| 333 | 340 |
| 334 v8::Local<v8::String> result = v8::String::Concat(prefix, message_string); | 341 v8::Local<v8::String> result = v8::String::Concat(prefix, message_string); |
| 335 result = v8::String::Concat(result, suffix); | 342 result = v8::String::Concat(result, suffix); |
| 336 | 343 |
| 337 frontend_task_runner_->Append(new ExecuteStringTask( | 344 frontend_task_runner_->Append( |
| 338 ToVector(result), v8::String::Empty(isolate), | 345 new ExecuteStringTask(ToVector(result), v8::String::Empty(isolate), |
| 339 v8::Integer::New(isolate, 0), v8::Integer::New(isolate, 0))); | 346 v8::Integer::New(isolate, 0), |
| 347 v8::Integer::New(isolate, 0), nullptr, nullptr)); |
| 340 } | 348 } |
| 341 | 349 |
| 342 private: | 350 private: |
| 343 TaskRunner* frontend_task_runner_; | 351 TaskRunner* frontend_task_runner_; |
| 344 }; | 352 }; |
| 345 | 353 |
| 346 } // namespace | 354 } // namespace |
| 347 | 355 |
| 348 int main(int argc, char* argv[]) { | 356 int main(int argc, char* argv[]) { |
| 349 v8::V8::InitializeICUDefaultLocation(argv[0]); | 357 v8::V8::InitializeICUDefaultLocation(argv[0]); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 argv[i]); | 407 argv[i]); |
| 400 Exit(); | 408 Exit(); |
| 401 } | 409 } |
| 402 frontend_runner.Append(new ExecuteStringTask(chars)); | 410 frontend_runner.Append(new ExecuteStringTask(chars)); |
| 403 } | 411 } |
| 404 | 412 |
| 405 frontend_runner.Join(); | 413 frontend_runner.Join(); |
| 406 backend_runner.Join(); | 414 backend_runner.Join(); |
| 407 return 0; | 415 return 0; |
| 408 } | 416 } |
| OLD | NEW |