clang-format runtime/lib

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2468093007 .
This commit is contained in:
Zachary Anderson
2016-11-04 12:14:41 -07:00
parent e7f4816f9d
commit 2e4dfd3a2d
24 changed files with 531 additions and 720 deletions
+4 -10
View File
@@ -54,20 +54,14 @@ DEFINE_NATIVE_ENTRY(List_slice, 4) {
GET_NON_NULL_NATIVE_ARGUMENT(Bool, needs_type_arg, arguments->NativeArgAt(3));
intptr_t istart = start.Value();
if ((istart < 0) || (istart > src.Length())) {
Exceptions::ThrowRangeError(
"start",
start,
0,
src.Length());
Exceptions::ThrowRangeError("start", start, 0, src.Length());
}
intptr_t icount = count.Value();
// Zero count should be handled outside already.
if ((icount <= 0) || (icount > src.Length())) {
Exceptions::ThrowRangeError(
"count",
count,
0, // This is the limit the user sees.
src.Length() - istart);
Exceptions::ThrowRangeError("count", count,
0, // This is the limit the user sees.
src.Length() - istart);
}
return src.Slice(istart, icount, needs_type_arg.value());
+4 -4
View File
@@ -15,8 +15,8 @@ namespace dart {
static int64_t kMaxAllowedSeconds = kMaxInt32;
DEFINE_NATIVE_ENTRY(DateTime_timeZoneName, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(
Integer, dart_seconds, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, dart_seconds,
arguments->NativeArgAt(0));
int64_t seconds = dart_seconds.AsInt64Value();
if (llabs(seconds) > kMaxAllowedSeconds) {
Exceptions::ThrowArgumentError(dart_seconds);
@@ -27,8 +27,8 @@ DEFINE_NATIVE_ENTRY(DateTime_timeZoneName, 1) {
DEFINE_NATIVE_ENTRY(DateTime_timeZoneOffsetInSeconds, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(
Integer, dart_seconds, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, dart_seconds,
arguments->NativeArgAt(0));
int64_t seconds = dart_seconds.AsInt64Value();
if (llabs(seconds) > kMaxAllowedSeconds) {
Exceptions::ThrowArgumentError(dart_seconds);
+5 -11
View File
@@ -59,15 +59,9 @@ DEFINE_NATIVE_ENTRY(Developer_log, 8) {
GET_NATIVE_ARGUMENT(Instance, dart_zone, arguments->NativeArgAt(5));
GET_NATIVE_ARGUMENT(Instance, error, arguments->NativeArgAt(6));
GET_NATIVE_ARGUMENT(Instance, stack_trace, arguments->NativeArgAt(7));
Service::SendLogEvent(isolate,
sequence.AsInt64Value(),
timestamp.AsInt64Value(),
level.Value(),
name,
message,
dart_zone,
error,
stack_trace);
Service::SendLogEvent(isolate, sequence.AsInt64Value(),
timestamp.AsInt64Value(), level.Value(), name, message,
dart_zone, error, stack_trace);
return Object::null();
#endif // PRODUCT
}
@@ -141,8 +135,8 @@ DEFINE_NATIVE_ENTRY(Developer_getServiceMinorVersion, 0) {
static void SendNull(const SendPort& port) {
const Dart_Port destination_port_id = port.Id();
PortMap::PostMessage(new Message(
destination_port_id, Object::null(), Message::kNormalPriority));
PortMap::PostMessage(new Message(destination_port_id, Object::null(),
Message::kNormalPriority));
}
+7 -8
View File
@@ -144,8 +144,8 @@ DEFINE_NATIVE_ENTRY(Double_greaterThan, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Double, right, arguments->NativeArgAt(1));
bool result = right.IsNull() ? false : (left.value() > right.value());
if (FLAG_trace_intrinsified_natives) {
OS::Print("Double_greaterThan %s > %s\n",
left.ToCString(), right.ToCString());
OS::Print("Double_greaterThan %s > %s\n", left.ToCString(),
right.ToCString());
}
return Bool::Get(result).raw();
}
@@ -163,8 +163,7 @@ DEFINE_NATIVE_ENTRY(Double_equal, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Double, right, arguments->NativeArgAt(1));
bool result = right.IsNull() ? false : (left.value() == right.value());
if (FLAG_trace_intrinsified_natives) {
OS::Print("Double_equal %s == %s\n",
left.ToCString(), right.ToCString());
OS::Print("Double_equal %s == %s\n", left.ToCString(), right.ToCString());
}
return Bool::Get(result).raw();
}
@@ -245,8 +244,8 @@ DEFINE_NATIVE_ENTRY(Double_toStringAsFixed, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Smi, fraction_digits, arguments->NativeArgAt(1));
double d = arg.value();
intptr_t fraction_digits_value = fraction_digits.Value();
if (0 <= fraction_digits_value && fraction_digits_value <= 20
&& kLowerBoundary < d && d < kUpperBoundary) {
if (0 <= fraction_digits_value && fraction_digits_value <= 20 &&
kLowerBoundary < d && d < kUpperBoundary) {
return DoubleToStringAsFixed(d, static_cast<int>(fraction_digits_value));
} else {
Exceptions::ThrowArgumentError(String::Handle(
@@ -262,8 +261,8 @@ DEFINE_NATIVE_ENTRY(Double_toStringAsExponential, 2) {
double d = arg.value();
intptr_t fraction_digits_value = fraction_digits.Value();
if (-1 <= fraction_digits_value && fraction_digits_value <= 20) {
return DoubleToStringAsExponential(
d, static_cast<int>(fraction_digits_value));
return DoubleToStringAsExponential(d,
static_cast<int>(fraction_digits_value));
} else {
Exceptions::ThrowArgumentError(String::Handle(
String::New("Illegal arguments to double.toStringAsExponential")));
+6 -6
View File
@@ -26,8 +26,8 @@ static RawScript* FindScript(DartFrameIterator* iterator) {
StackFrame* stack_frame = iterator->NextFrame();
Code& code = Code::Handle();
Function& func = Function::Handle();
const Class& assert_error_class = Class::Handle(
Library::LookupCoreClass(Symbols::AssertionError()));
const Class& assert_error_class =
Class::Handle(Library::LookupCoreClass(Symbols::AssertionError()));
ASSERT(!assert_error_class.IsNull());
bool hit_assertion_error = false;
while (stack_frame != NULL) {
@@ -84,8 +84,8 @@ DEFINE_NATIVE_ENTRY(AssertionError_throwNew, 2) {
script.GetTokenLocation(assertion_end, &to_line, &to_column);
// The snippet will extract the correct assertion code even if the source
// is generated.
args.SetAt(0, String::Handle(
script.GetSnippet(from_line, from_column, to_line, to_column)));
args.SetAt(0, String::Handle(script.GetSnippet(from_line, from_column,
to_line, to_column)));
// Initialize location arguments starting at position 1.
// Do not set a column if the source has been generated as it will be wrong.
@@ -118,8 +118,8 @@ DEFINE_NATIVE_ENTRY(TypeError_throwNew, 5) {
const String& dst_name = String::CheckedHandle(arguments->NativeArgAt(3));
const String& error_msg = String::CheckedHandle(arguments->NativeArgAt(4));
const AbstractType& src_type = AbstractType::Handle(src_value.GetType());
Exceptions::CreateAndThrowTypeError(
location, src_type, dst_type, dst_name, error_msg);
Exceptions::CreateAndThrowTypeError(location, src_type, dst_type, dst_name,
error_msg);
UNREACHABLE();
return Object::null();
}
+12 -13
View File
@@ -16,9 +16,8 @@ namespace dart {
DEFINE_NATIVE_ENTRY(Function_apply, 2) {
const Array& fun_arguments = Array::CheckedHandle(arguments->NativeArgAt(0));
const Array& fun_arg_names = Array::CheckedHandle(arguments->NativeArgAt(1));
const Array& fun_args_desc =
Array::Handle(ArgumentsDescriptor::New(fun_arguments.Length(),
fun_arg_names));
const Array& fun_args_desc = Array::Handle(
ArgumentsDescriptor::New(fun_arguments.Length(), fun_arg_names));
const Object& result =
Object::Handle(DartEntry::InvokeClosure(fun_arguments, fun_args_desc));
if (result.IsError()) {
@@ -29,8 +28,8 @@ DEFINE_NATIVE_ENTRY(Function_apply, 2) {
DEFINE_NATIVE_ENTRY(Closure_equals, 2) {
const Closure& receiver = Closure::CheckedHandle(
zone, arguments->NativeArgAt(0));
const Closure& receiver =
Closure::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NATIVE_ARGUMENT(Instance, other, arguments->NativeArgAt(1));
ASSERT(!other.IsNull());
if (receiver.raw() == other.raw()) return Bool::True().raw();
@@ -41,8 +40,8 @@ DEFINE_NATIVE_ENTRY(Closure_equals, 2) {
ASSERT(!func_a.IsImplicitStaticClosureFunction());
if (func_a.IsImplicitInstanceClosureFunction()) {
const Context& context_a = Context::Handle(receiver.context());
const Context& context_b = Context::Handle(
Closure::Cast(other).context());
const Context& context_b =
Context::Handle(Closure::Cast(other).context());
const Object& receiver_a = Object::Handle(context_a.At(0));
const Object& receiver_b = Object::Handle(context_b.At(0));
if (receiver_a.raw() == receiver_b.raw()) return Bool::True().raw();
@@ -51,8 +50,8 @@ DEFINE_NATIVE_ENTRY(Closure_equals, 2) {
func_b.IsImplicitInstanceClosureFunction()) {
// TODO(rmacnak): Patch existing tears off during reload instead.
const Context& context_a = Context::Handle(receiver.context());
const Context& context_b = Context::Handle(
Closure::Cast(other).context());
const Context& context_b =
Context::Handle(Closure::Cast(other).context());
const Object& receiver_a = Object::Handle(context_a.At(0));
const Object& receiver_b = Object::Handle(context_b.At(0));
if ((receiver_a.raw() == receiver_b.raw()) &&
@@ -67,8 +66,8 @@ DEFINE_NATIVE_ENTRY(Closure_equals, 2) {
DEFINE_NATIVE_ENTRY(Closure_hashCode, 1) {
const Closure& receiver = Closure::CheckedHandle(
zone, arguments->NativeArgAt(0));
const Closure& receiver =
Closure::CheckedHandle(zone, arguments->NativeArgAt(0));
const Function& func = Function::Handle(receiver.function());
// Hash together name, class name and signature.
const Class& cls = Class::Handle(func.Owner());
@@ -85,8 +84,8 @@ DEFINE_NATIVE_ENTRY(Closure_hashCode, 1) {
DEFINE_NATIVE_ENTRY(Closure_clone, 1) {
const Closure& receiver = Closure::CheckedHandle(
zone, arguments->NativeArgAt(0));
const Closure& receiver =
Closure::CheckedHandle(zone, arguments->NativeArgAt(0));
const Function& func = Function::Handle(zone, receiver.function());
const Context& ctx = Context::Handle(zone, receiver.context());
Context& cloned_ctx =
+4 -5
View File
@@ -17,11 +17,10 @@ DEFINE_NATIVE_ENTRY(GrowableList_allocate, 2) {
TypeArguments::CheckedHandle(arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Array, data, arguments->NativeArgAt(1));
if (data.Length() <= 0) {
Exceptions::ThrowRangeError(
"length",
Integer::Handle(Integer::New(data.Length())),
0, // This is the limit the user sees.
Array::kMaxElements);
Exceptions::ThrowRangeError("length",
Integer::Handle(Integer::New(data.Length())),
0, // This is the limit the user sees.
Array::kMaxElements);
}
const GrowableObjectArray& new_array =
GrowableObjectArray::Handle(GrowableObjectArray::New(data));
+30 -29
View File
@@ -16,8 +16,10 @@
namespace dart {
DEFINE_FLAG(bool, trace_intrinsified_natives, false,
"Report if any of the intrinsified natives are called");
DEFINE_FLAG(bool,
trace_intrinsified_natives,
false,
"Report if any of the intrinsified natives are called");
// Smi natives.
@@ -42,8 +44,8 @@ DEFINE_NATIVE_ENTRY(Integer_bitAndFromInteger, 2) {
ASSERT(CheckInteger(right));
ASSERT(CheckInteger(left));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_bitAndFromInteger %s & %s\n",
right.ToCString(), left.ToCString());
OS::Print("Integer_bitAndFromInteger %s & %s\n", right.ToCString(),
left.ToCString());
}
const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_AND, right));
// A null result indicates that a bigint operation is required.
@@ -57,8 +59,8 @@ DEFINE_NATIVE_ENTRY(Integer_bitOrFromInteger, 2) {
ASSERT(CheckInteger(right));
ASSERT(CheckInteger(left));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_bitOrFromInteger %s | %s\n",
left.ToCString(), right.ToCString());
OS::Print("Integer_bitOrFromInteger %s | %s\n", left.ToCString(),
right.ToCString());
}
const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_OR, right));
// A null result indicates that a bigint operation is required.
@@ -72,8 +74,8 @@ DEFINE_NATIVE_ENTRY(Integer_bitXorFromInteger, 2) {
ASSERT(CheckInteger(right));
ASSERT(CheckInteger(left));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_bitXorFromInteger %s ^ %s\n",
left.ToCString(), right.ToCString());
OS::Print("Integer_bitXorFromInteger %s ^ %s\n", left.ToCString(),
right.ToCString());
}
const Integer& result = Integer::Handle(left.BitOp(Token::kBIT_XOR, right));
// A null result indicates that a bigint operation is required.
@@ -87,8 +89,8 @@ DEFINE_NATIVE_ENTRY(Integer_addFromInteger, 2) {
ASSERT(CheckInteger(right_int));
ASSERT(CheckInteger(left_int));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_addFromInteger %s + %s\n",
left_int.ToCString(), right_int.ToCString());
OS::Print("Integer_addFromInteger %s + %s\n", left_int.ToCString(),
right_int.ToCString());
}
const Integer& result =
Integer::Handle(left_int.ArithmeticOp(Token::kADD, right_int));
@@ -103,8 +105,8 @@ DEFINE_NATIVE_ENTRY(Integer_subFromInteger, 2) {
ASSERT(CheckInteger(right_int));
ASSERT(CheckInteger(left_int));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_subFromInteger %s - %s\n",
left_int.ToCString(), right_int.ToCString());
OS::Print("Integer_subFromInteger %s - %s\n", left_int.ToCString(),
right_int.ToCString());
}
const Integer& result =
Integer::Handle(left_int.ArithmeticOp(Token::kSUB, right_int));
@@ -119,8 +121,8 @@ DEFINE_NATIVE_ENTRY(Integer_mulFromInteger, 2) {
ASSERT(CheckInteger(right_int));
ASSERT(CheckInteger(left_int));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_mulFromInteger %s * %s\n",
left_int.ToCString(), right_int.ToCString());
OS::Print("Integer_mulFromInteger %s * %s\n", left_int.ToCString(),
right_int.ToCString());
}
const Integer& result =
Integer::Handle(left_int.ArithmeticOp(Token::kMUL, right_int));
@@ -148,8 +150,8 @@ DEFINE_NATIVE_ENTRY(Integer_moduloFromInteger, 2) {
ASSERT(CheckInteger(right_int));
ASSERT(CheckInteger(left_int));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_moduloFromInteger %s mod %s\n",
left_int.ToCString(), right_int.ToCString());
OS::Print("Integer_moduloFromInteger %s mod %s\n", left_int.ToCString(),
right_int.ToCString());
}
if (right_int.IsZero()) {
// Should have been caught before calling into runtime.
@@ -168,8 +170,8 @@ DEFINE_NATIVE_ENTRY(Integer_greaterThanFromInteger, 2) {
ASSERT(CheckInteger(right));
ASSERT(CheckInteger(left));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_greaterThanFromInteger %s > %s\n",
left.ToCString(), right.ToCString());
OS::Print("Integer_greaterThanFromInteger %s > %s\n", left.ToCString(),
right.ToCString());
}
return Bool::Get(left.CompareWith(right) == 1).raw();
}
@@ -181,8 +183,8 @@ DEFINE_NATIVE_ENTRY(Integer_equalToInteger, 2) {
ASSERT(CheckInteger(left));
ASSERT(CheckInteger(right));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Integer_equalToInteger %s == %s\n",
left.ToCString(), right.ToCString());
OS::Print("Integer_equalToInteger %s == %s\n", left.ToCString(),
right.ToCString());
}
return Bool::Get(left.CompareWith(right) == 0).raw();
}
@@ -289,8 +291,8 @@ DEFINE_NATIVE_ENTRY(Smi_bitAndFromSmi, 2) {
const Smi& left = Smi::CheckedHandle(arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, right, arguments->NativeArgAt(1));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Smi_bitAndFromSmi %s & %s\n",
left.ToCString(), right.ToCString());
OS::Print("Smi_bitAndFromSmi %s & %s\n", left.ToCString(),
right.ToCString());
}
const Smi& left_value = Smi::Cast(left);
const Smi& right_value = Smi::Cast(right);
@@ -303,25 +305,24 @@ DEFINE_NATIVE_ENTRY(Smi_shrFromInt, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Integer, value, arguments->NativeArgAt(1));
ASSERT(CheckInteger(amount));
ASSERT(CheckInteger(value));
const Integer& result = Integer::Handle(
ShiftOperationHelper(Token::kSHR, value, amount));
const Integer& result =
Integer::Handle(ShiftOperationHelper(Token::kSHR, value, amount));
// A null result indicates that a bigint operation is required.
return result.IsNull() ? result.raw() : result.AsValidInteger();
}
DEFINE_NATIVE_ENTRY(Smi_shlFromInt, 2) {
const Smi& amount = Smi::CheckedHandle(arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, value, arguments->NativeArgAt(1));
ASSERT(CheckInteger(amount));
ASSERT(CheckInteger(value));
if (FLAG_trace_intrinsified_natives) {
OS::Print("Smi_shlFromInt: %s << %s\n",
value.ToCString(), amount.ToCString());
OS::Print("Smi_shlFromInt: %s << %s\n", value.ToCString(),
amount.ToCString());
}
const Integer& result = Integer::Handle(
ShiftOperationHelper(Token::kSHL, value, amount));
const Integer& result =
Integer::Handle(ShiftOperationHelper(Token::kSHL, value, amount));
// A null result indicates that a bigint operation is required.
return result.IsNull() ? result.raw() : result.AsValidInteger();
}
+2 -2
View File
@@ -20,7 +20,7 @@ class InvocationMirror : public AllStatic {
kMethod = 0,
kGetter = 1,
kSetter = 2,
kField = 3,
kField = 3,
kLocalVar = 4,
kTypeShift = 0,
kTypeBits = 3,
@@ -32,7 +32,7 @@ class InvocationMirror : public AllStatic {
// NoSuchMethodError for compile-time resolution failures.
kDynamic = 0,
kSuper = 1,
kStatic = 2,
kStatic = 2,
kConstructor = 3,
kTopLevel = 4,
kCallShift = kTypeBits,
+37 -60
View File
@@ -25,7 +25,9 @@
namespace dart {
DEFINE_FLAG(bool, i_like_slow_isolate_spawn, false,
DEFINE_FLAG(bool,
i_like_slow_isolate_spawn,
false,
"Block the parent thread when loading spawned isolates.");
static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
@@ -60,8 +62,7 @@ DEFINE_NATIVE_ENTRY(CapabilityImpl_get_hashcode, 1) {
DEFINE_NATIVE_ENTRY(RawReceivePortImpl_factory, 1) {
ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
Dart_Port port_id =
PortMap::CreatePort(isolate->message_handler());
Dart_Port port_id = PortMap::CreatePort(isolate->message_handler());
return ReceivePort::New(port_id, false /* not control port */);
}
@@ -111,16 +112,16 @@ DEFINE_NATIVE_ENTRY(SendPortImpl_sendInternal_, 2) {
const bool can_send_any_object = isolate->origin_id() == port.origin_id();
if (ApiObjectConverter::CanConvert(obj.raw())) {
PortMap::PostMessage(new Message(
destination_port_id, obj.raw(), Message::kNormalPriority));
PortMap::PostMessage(
new Message(destination_port_id, obj.raw(), Message::kNormalPriority));
} else {
uint8_t* data = NULL;
MessageWriter writer(&data, &allocator, can_send_any_object);
writer.WriteMessage(obj);
// TODO(turnidge): Throw an exception when the return value is false?
PortMap::PostMessage(new Message(destination_port_id,
data, writer.BytesWritten(),
PortMap::PostMessage(new Message(destination_port_id, data,
writer.BytesWritten(),
Message::kNormalPriority));
}
return Object::null();
@@ -154,14 +155,9 @@ class SpawnIsolateTask : public ThreadPool::Task {
// Make a copy of the state's isolate flags and hand it to the callback.
Dart_IsolateFlags api_flags = *(state_->isolate_flags());
Isolate* isolate = reinterpret_cast<Isolate*>(
(callback)(state_->script_url(),
state_->function_name(),
state_->package_root(),
state_->package_config(),
&api_flags,
state_->init_data(),
&error));
Isolate* isolate = reinterpret_cast<Isolate*>((callback)(
state_->script_url(), state_->function_name(), state_->package_root(),
state_->package_config(), &api_flags, state_->init_data(), &error));
state_->DecrementSpawnCount();
if (isolate == NULL) {
ReportError(error);
@@ -245,21 +241,12 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 10) {
Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id();
IsolateSpawnState* state =
new IsolateSpawnState(port.Id(),
isolate->origin_id(),
isolate->init_callback_data(),
String2UTF8(script_uri),
func,
message,
isolate->spawn_count_monitor(),
isolate->spawn_count(),
utf8_package_root,
utf8_package_config,
paused.value(),
fatal_errors,
on_exit_port,
on_error_port);
IsolateSpawnState* state = new IsolateSpawnState(
port.Id(), isolate->origin_id(), isolate->init_callback_data(),
String2UTF8(script_uri), func, message,
isolate->spawn_count_monitor(), isolate->spawn_count(),
utf8_package_root, utf8_package_config, paused.value(), fatal_errors,
on_exit_port, on_error_port);
ThreadPool::Task* spawn_task = new SpawnIsolateTask(state);
isolate->IncrementSpawnCount();
@@ -300,9 +287,9 @@ static const char* CanonicalizeUri(Thread* thread,
if (handler != NULL) {
TransitionVMToNative transition(thread);
Dart_EnterScope();
Dart_Handle handle = handler(Dart_kCanonicalizeUrl,
Api::NewHandle(thread, library.raw()),
Api::NewHandle(thread, uri.raw()));
Dart_Handle handle =
handler(Dart_kCanonicalizeUrl, Api::NewHandle(thread, library.raw()),
Api::NewHandle(thread, uri.raw()));
const Object& obj = Object::Handle(Api::UnwrapHandle(handle));
if (obj.IsString()) {
result = String2UTF8(String::Cast(obj));
@@ -312,9 +299,10 @@ static const char* CanonicalizeUri(Thread* thread,
*error = zone->PrintToString("Unable to canonicalize uri '%s': %s",
uri.ToCString(), error_obj.ToErrorCString());
} else {
*error = zone->PrintToString("Unable to canonicalize uri '%s': "
"library tag handler returned wrong type",
uri.ToCString());
*error = zone->PrintToString(
"Unable to canonicalize uri '%s': "
"library tag handler returned wrong type",
uri.ToCString());
}
Dart_ExitScope();
} else {
@@ -348,7 +336,7 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 12) {
if (Snapshot::IncludesCode(Dart::snapshot_kind())) {
const Array& args = Array::Handle(Array::New(1));
args.SetAt(0, String::Handle(String::New(
"Isolate.spawnUri not supported under precompilation")));
"Isolate.spawnUri not supported under precompilation")));
Exceptions::ThrowByType(Exceptions::kUnsupported, args);
UNREACHABLE();
}
@@ -372,21 +360,11 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 12) {
Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
Dart_Port on_error_port = onError.IsNull() ? ILLEGAL_PORT : onError.Id();
IsolateSpawnState* state =
new IsolateSpawnState(
port.Id(),
isolate->init_callback_data(),
canonical_uri,
utf8_package_root,
utf8_package_config,
args,
message,
isolate->spawn_count_monitor(),
isolate->spawn_count(),
paused.value(),
fatal_errors,
on_exit_port,
on_error_port);
IsolateSpawnState* state = new IsolateSpawnState(
port.Id(), isolate->init_callback_data(), canonical_uri,
utf8_package_root, utf8_package_config, args, message,
isolate->spawn_count_monitor(), isolate->spawn_count(), paused.value(),
fatal_errors, on_exit_port, on_error_port);
// If we were passed a value then override the default flags state for
// checked mode.
@@ -423,17 +401,17 @@ DEFINE_NATIVE_ENTRY(Isolate_spawnUri, 12) {
DEFINE_NATIVE_ENTRY(Isolate_getPortAndCapabilitiesOfCurrentIsolate, 0) {
const Array& result = Array::Handle(Array::New(3));
result.SetAt(0, SendPort::Handle(SendPort::New(isolate->main_port())));
result.SetAt(1, Capability::Handle(
Capability::New(isolate->pause_capability())));
result.SetAt(2, Capability::Handle(
Capability::New(isolate->terminate_capability())));
result.SetAt(
1, Capability::Handle(Capability::New(isolate->pause_capability())));
result.SetAt(
2, Capability::Handle(Capability::New(isolate->terminate_capability())));
return result.raw();
}
DEFINE_NATIVE_ENTRY(Isolate_getCurrentRootUriStr, 0) {
const Library& root_lib = Library::Handle(zone,
isolate->object_store()->root_library());
const Library& root_lib =
Library::Handle(zone, isolate->object_store()->root_library());
return root_lib.url();
}
@@ -449,8 +427,7 @@ DEFINE_NATIVE_ENTRY(Isolate_sendOOB, 2) {
MessageWriter writer(&data, &allocator, false);
writer.WriteMessage(msg);
PortMap::PostMessage(new Message(port.Id(),
data, writer.BytesWritten(),
PortMap::PostMessage(new Message(port.Id(), data, writer.BytesWritten(),
Message::kOOBPriority));
return Object::null();
}
+2
View File
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// clang-format off
#include "{{INCLUDE}}" // NOLINT
// This file is used to generate the mapping of libraries which have
+5 -10
View File
@@ -23,8 +23,7 @@ DEFINE_NATIVE_ENTRY(LinkedHashMap_getIndex, 1) {
DEFINE_NATIVE_ENTRY(LinkedHashMap_setIndex, 2) {
const LinkedHashMap& map =
LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
const TypedData& index =
TypedData::CheckedHandle(arguments->NativeArgAt(1));
const TypedData& index = TypedData::CheckedHandle(arguments->NativeArgAt(1));
map.SetIndex(index);
return Object::null();
}
@@ -40,8 +39,7 @@ DEFINE_NATIVE_ENTRY(LinkedHashMap_getData, 1) {
DEFINE_NATIVE_ENTRY(LinkedHashMap_setData, 2) {
const LinkedHashMap& map =
LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
const Array& data =
Array::CheckedHandle(arguments->NativeArgAt(1));
const Array& data = Array::CheckedHandle(arguments->NativeArgAt(1));
map.SetData(data);
return Object::null();
}
@@ -57,8 +55,7 @@ DEFINE_NATIVE_ENTRY(LinkedHashMap_getHashMask, 1) {
DEFINE_NATIVE_ENTRY(LinkedHashMap_setHashMask, 2) {
const LinkedHashMap& map =
LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
const Smi& hashMask =
Smi::CheckedHandle(arguments->NativeArgAt(1));
const Smi& hashMask = Smi::CheckedHandle(arguments->NativeArgAt(1));
map.SetHashMask(hashMask.Value());
return Object::null();
}
@@ -74,8 +71,7 @@ DEFINE_NATIVE_ENTRY(LinkedHashMap_getDeletedKeys, 1) {
DEFINE_NATIVE_ENTRY(LinkedHashMap_setDeletedKeys, 2) {
const LinkedHashMap& map =
LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
const Smi& deletedKeys =
Smi::CheckedHandle(arguments->NativeArgAt(1));
const Smi& deletedKeys = Smi::CheckedHandle(arguments->NativeArgAt(1));
map.SetDeletedKeys(deletedKeys.Value());
return Object::null();
}
@@ -91,8 +87,7 @@ DEFINE_NATIVE_ENTRY(LinkedHashMap_getUsedData, 1) {
DEFINE_NATIVE_ENTRY(LinkedHashMap_setUsedData, 2) {
const LinkedHashMap& map =
LinkedHashMap::CheckedHandle(arguments->NativeArgAt(0));
const Smi& usedData =
Smi::CheckedHandle(arguments->NativeArgAt(1));
const Smi& usedData = Smi::CheckedHandle(arguments->NativeArgAt(1));
map.SetUsedData(usedData.Value());
return Object::null();
}
+8 -8
View File
@@ -68,8 +68,8 @@ DEFINE_NATIVE_ENTRY(Math_log, 1) {
DEFINE_NATIVE_ENTRY(Math_doublePow, 2) {
const double operand =
Double::CheckedHandle(arguments->NativeArgAt(0)).value();
GET_NON_NULL_NATIVE_ARGUMENT(
Double, exponent_object, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Double, exponent_object,
arguments->NativeArgAt(1));
const double exponent = exponent_object.value();
return Double::New(pow(operand, exponent));
}
@@ -106,14 +106,14 @@ DEFINE_NATIVE_ENTRY(Random_nextState, 1) {
uint64_t state = (A * state_lo) + state_hi;
array.SetUint32(0, static_cast<uint32_t>(state));
array.SetUint32(array.ElementSizeInBytes(),
static_cast<uint32_t>(state >> 32));
static_cast<uint32_t>(state >> 32));
return Object::null();
}
RawTypedData* CreateRandomState(Zone* zone, uint64_t seed) {
const TypedData& result = TypedData::Handle(
zone, TypedData::New(kTypedDataUint32ArrayCid, 2));
const TypedData& result =
TypedData::Handle(zone, TypedData::New(kTypedDataUint32ArrayCid, 2));
result.SetUint32(0, static_cast<uint32_t>(seed));
result.SetUint32(result.ElementSizeInBytes(),
static_cast<uint32_t>(seed >> 32));
@@ -125,11 +125,11 @@ uint64_t mix64(uint64_t n) {
// Thomas Wang 64-bit mix.
// http://www.concentric.net/~Ttwang/tech/inthash.htm
// via. http://web.archive.org/web/20071223173210/http://www.concentric.net/~Ttwang/tech/inthash.htm
n = (~n) + (n << 21); // n = (n << 21) - n - 1;
n = (~n) + (n << 21); // n = (n << 21) - n - 1;
n = n ^ (n >> 24);
n = n * 265; // n = (n + (n << 3)) + (n << 8);
n = n * 265; // n = (n + (n << 3)) + (n << 8);
n = n ^ (n >> 14);
n = n * 21; // n = (n + (n << 2)) + (n << 4);
n = n * 21; // n = (n + (n << 2)) + (n << 4);
n = n ^ (n >> 28);
n = n + (n << 31);
return n;
+156 -244
View File
@@ -24,18 +24,15 @@ namespace dart {
#define PROPAGATE_IF_MALFORMED(type) \
if (type.IsMalformed()) { \
Exceptions::PropagateError(Error::Handle(type.error())); \
} \
}
static RawInstance* CreateMirror(const String& mirror_class_name,
const Array& constructor_arguments) {
const Library& mirrors_lib = Library::Handle(Library::MirrorsLibrary());
const String& constructor_name = Symbols::Dot();
const Object& result = Object::Handle(
DartLibraryCalls::InstanceCreate(mirrors_lib,
mirror_class_name,
constructor_name,
constructor_arguments));
const Object& result = Object::Handle(DartLibraryCalls::InstanceCreate(
mirrors_lib, mirror_class_name, constructor_name, constructor_arguments));
ASSERT(!result.IsError());
return Instance::Cast(result).raw();
}
@@ -53,8 +50,8 @@ static void ThrowNoSuchMethod(const Instance& receiver,
const Array& argument_names,
const InvocationMirror::Call call,
const InvocationMirror::Type type) {
const Smi& invocation_type = Smi::Handle(Smi::New(
InvocationMirror::EncodeType(call, type)));
const Smi& invocation_type =
Smi::Handle(Smi::New(InvocationMirror::EncodeType(call, type)));
const Array& args = Array::Handle(Array::New(6));
args.SetAt(0, receiver);
@@ -73,12 +70,12 @@ static void ThrowNoSuchMethod(const Instance& receiver,
}
const Library& libcore = Library::Handle(Library::CoreLibrary());
const Class& NoSuchMethodError = Class::Handle(
libcore.LookupClass(Symbols::NoSuchMethodError()));
const Class& NoSuchMethodError =
Class::Handle(libcore.LookupClass(Symbols::NoSuchMethodError()));
const Function& throwNew = Function::Handle(
NoSuchMethodError.LookupFunctionAllowPrivate(Symbols::ThrowNew()));
const Object& result = Object::Handle(
DartEntry::InvokeFunction(throwNew, args));
const Object& result =
Object::Handle(DartEntry::InvokeFunction(throwNew, args));
ASSERT(result.IsError());
Exceptions::PropagateError(Error::Cast(result));
UNREACHABLE();
@@ -98,8 +95,8 @@ static void EnsureConstructorsAreCompiled(const Function& func) {
UNREACHABLE();
}
if (!func.HasCode()) {
const Error& error = Error::Handle(
zone, Compiler::CompileFunction(thread, func));
const Error& error =
Error::Handle(zone, Compiler::CompileFunction(thread, func));
if (!error.IsNull()) {
Exceptions::PropagateError(error);
UNREACHABLE();
@@ -111,8 +108,8 @@ static RawInstance* CreateParameterMirrorList(const Function& func,
const Instance& owner_mirror) {
HANDLESCOPE(Thread::Current());
const intptr_t implicit_param_count = func.NumImplicitParameters();
const intptr_t non_implicit_param_count = func.NumParameters() -
implicit_param_count;
const intptr_t non_implicit_param_count =
func.NumParameters() - implicit_param_count;
const intptr_t index_of_first_optional_param =
non_implicit_param_count - func.NumOptionalParameters();
const intptr_t index_of_first_named_param =
@@ -178,11 +175,11 @@ static RawInstance* CreateParameterMirrorList(const Function& func,
name ^= func.ParameterNameAt(implicit_param_count + i);
if (has_extra_parameter_info) {
is_final ^= param_descriptor.At(i * Parser::kParameterEntrySize +
Parser::kParameterIsFinalOffset);
Parser::kParameterIsFinalOffset);
default_value = param_descriptor.At(i * Parser::kParameterEntrySize +
Parser::kParameterDefaultValueOffset);
Parser::kParameterDefaultValueOffset);
metadata = param_descriptor.At(i * Parser::kParameterEntrySize +
Parser::kParameterMetadataOffset);
Parser::kParameterMetadataOffset);
}
ASSERT(default_value.IsNull() || default_value.IsInstance());
@@ -278,15 +275,15 @@ static RawInstance* CreateMethodMirror(const Function& func,
intptr_t kind_flags = 0;
kind_flags |= (func.is_abstract() << Mirrors::kAbstract);
kind_flags |= (func.IsGetterFunction() << Mirrors::kGetter);
kind_flags |= (func.IsSetterFunction() << Mirrors::kSetter);
kind_flags |= (func.IsGetterFunction() << Mirrors::kGetter);
kind_flags |= (func.IsSetterFunction() << Mirrors::kSetter);
bool is_ctor = (func.kind() == RawFunction::kConstructor);
kind_flags |= (is_ctor << Mirrors::kConstructor);
kind_flags |= (is_ctor << Mirrors::kConstructor);
kind_flags |= ((is_ctor && func.is_const()) << Mirrors::kConstCtor);
kind_flags |= ((is_ctor && func.IsGenerativeConstructor())
<< Mirrors::kGenerativeCtor);
kind_flags |= ((is_ctor && func.is_redirecting())
<< Mirrors::kRedirectingCtor);
kind_flags |=
((is_ctor && func.IsGenerativeConstructor()) << Mirrors::kGenerativeCtor);
kind_flags |=
((is_ctor && func.is_redirecting()) << Mirrors::kRedirectingCtor);
kind_flags |= ((is_ctor && func.IsFactory()) << Mirrors::kFactoryCtor);
kind_flags |= (func.is_external() << Mirrors::kExternal);
args.SetAt(5, Smi::Handle(Smi::New(kind_flags)));
@@ -364,10 +361,7 @@ static RawInstance* CreateLibraryMirror(Thread* thread, const Library& lib) {
args.SetAt(1, str);
str = lib.url();
const char* censored_libraries[] = {
"dart:_builtin",
"dart:_blink",
"dart:_vmservice",
NULL,
"dart:_builtin", "dart:_blink", "dart:_vmservice", NULL,
};
for (intptr_t i = 0; censored_libraries[i] != NULL; i++) {
if (str.Equals(censored_libraries[i])) {
@@ -378,8 +372,8 @@ static RawInstance* CreateLibraryMirror(Thread* thread, const Library& lib) {
if (str.Equals("dart:io")) {
// Hack around dart:io being loaded into non-service isolates in Dartium.
Isolate* isolate = thread->isolate();
const GrowableObjectArray& libraries = GrowableObjectArray::Handle(
zone, isolate->object_store()->libraries());
const GrowableObjectArray& libraries =
GrowableObjectArray::Handle(zone, isolate->object_store()->libraries());
Library& other_lib = Library::Handle(zone);
String& other_uri = String::Handle(zone);
for (intptr_t i = 0; i < libraries.Length(); i++) {
@@ -483,8 +477,8 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_libraryDependencies, 2) {
for (intptr_t i = 0; i < ports.Length(); i++) {
ns ^= ports.At(i);
if (!ns.IsNull()) {
dep = CreateLibraryDependencyMirror(
thread, lib_mirror, ns, prefix, true, false);
dep = CreateLibraryDependencyMirror(thread, lib_mirror, ns, prefix, true,
false);
if (!dep.IsNull()) {
deps.Add(dep);
}
@@ -495,8 +489,8 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_libraryDependencies, 2) {
ports = lib.exports();
for (intptr_t i = 0; i < ports.Length(); i++) {
ns ^= ports.At(i);
dep = CreateLibraryDependencyMirror(
thread, lib_mirror, ns, prefix, false, false);
dep = CreateLibraryDependencyMirror(thread, lib_mirror, ns, prefix, false,
false);
if (!dep.IsNull()) {
deps.Add(dep);
}
@@ -513,8 +507,8 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_libraryDependencies, 2) {
for (intptr_t i = 0; i < ports.Length(); i++) {
ns ^= ports.At(i);
if (!ns.IsNull()) {
dep = CreateLibraryDependencyMirror(
thread, lib_mirror, ns, prefix, true, prefix.is_deferred_load());
dep = CreateLibraryDependencyMirror(thread, lib_mirror, ns, prefix,
true, prefix.is_deferred_load());
if (!dep.IsNull()) {
deps.Add(dep);
}
@@ -541,8 +535,8 @@ static RawInstance* CreateTypeMirror(const AbstractType& type) {
if (type.IsFunctionType()) {
const Class& scope_class = Class::Handle(Type::Cast(type).type_class());
if (scope_class.IsTypedefClass()) {
return CreateTypedefMirror(scope_class,
type, Bool::False(), Object::null_instance());
return CreateTypedefMirror(scope_class, type, Bool::False(),
Object::null_instance());
} else {
return CreateFunctionTypeMirror(type);
}
@@ -577,8 +571,8 @@ static RawInstance* CreateIsolateMirror() {
Thread* thread = Thread::Current();
Isolate* isolate = thread->isolate();
const String& debug_name = String::Handle(String::New(isolate->name()));
const Library& root_library = Library::Handle(thread->zone(),
isolate->object_store()->root_library());
const Library& root_library =
Library::Handle(thread->zone(), isolate->object_store()->root_library());
const Instance& root_library_mirror =
Instance::Handle(CreateLibraryMirror(thread, root_library));
@@ -594,21 +588,21 @@ static void VerifyMethodKindShifts() {
Thread* thread = Thread::Current();
Zone* zone = thread->zone();
const Library& lib = Library::Handle(zone, Library::MirrorsLibrary());
const Class& cls = Class::Handle(zone,
lib.LookupClassAllowPrivate(Symbols::_LocalMethodMirror()));
const Class& cls = Class::Handle(
zone, lib.LookupClassAllowPrivate(Symbols::_LocalMethodMirror()));
const Error& error = Error::Handle(zone, cls.EnsureIsFinalized(thread));
ASSERT(error.IsNull());
Field& field = Field::Handle();
Smi& value = Smi::Handle();
#define CHECK_KIND_SHIFT(name) \
field = cls.LookupField(String::Handle(String::New(#name))); \
ASSERT(!field.IsNull()); \
value ^= field.StaticValue(); \
ASSERT(value.Value() == Mirrors::name);
#define CHECK_KIND_SHIFT(name) \
field = cls.LookupField(String::Handle(String::New(#name))); \
ASSERT(!field.IsNull()); \
value ^= field.StaticValue(); \
ASSERT(value.Value() == Mirrors::name);
MIRRORS_KIND_SHIFT_LIST(CHECK_KIND_SHIFT)
#undef CHECK_KIND_SHIFT
#undef CHECK_KIND_SHIFT
#endif
}
@@ -628,27 +622,21 @@ static RawInstance* ReturnResult(const Object& result) {
// Invoke the function, or noSuchMethod if it is null. Propagate any unhandled
// exceptions. Wrap and propagate any compilation errors.
static RawInstance* InvokeDynamicFunction(
const Instance& receiver,
const Function& function,
const String& target_name,
const Array& args,
const Array& args_descriptor_array) {
static RawInstance* InvokeDynamicFunction(const Instance& receiver,
const Function& function,
const String& target_name,
const Array& args,
const Array& args_descriptor_array) {
// Note "args" is already the internal arguments with the receiver as the
// first element.
Object& result = Object::Handle();
ArgumentsDescriptor args_descriptor(args_descriptor_array);
if (function.IsNull() ||
!function.is_reflectable() ||
if (function.IsNull() || !function.is_reflectable() ||
!function.AreValidArguments(args_descriptor, NULL)) {
result = DartEntry::InvokeNoSuchMethod(receiver,
target_name,
args,
result = DartEntry::InvokeNoSuchMethod(receiver, target_name, args,
args_descriptor_array);
} else {
result = DartEntry::InvokeFunction(function,
args,
args_descriptor_array);
result = DartEntry::InvokeFunction(function, args, args_descriptor_array);
}
return ReturnResult(result);
}
@@ -661,8 +649,7 @@ static RawInstance* InvokeLibraryGetter(const Library& library,
// The getter function may either be in the library or in the field's owner
// class, depending on whether it was an actual getter, or an uninitialized
// field.
const Field& field = Field::Handle(
library.LookupLocalField(getter_name));
const Field& field = Field::Handle(library.LookupLocalField(getter_name));
Function& getter = Function::Handle();
if (field.IsNull()) {
// No field found. Check for a getter in the lib.
@@ -698,13 +685,9 @@ static RawInstance* InvokeLibraryGetter(const Library& library,
}
if (throw_nsm_if_absent) {
ThrowNoSuchMethod(Instance::null_instance(),
getter_name,
getter,
Object::null_array(),
Object::null_array(),
InvocationMirror::kTopLevel,
InvocationMirror::kGetter);
ThrowNoSuchMethod(Instance::null_instance(), getter_name, getter,
Object::null_array(), Object::null_array(),
InvocationMirror::kTopLevel, InvocationMirror::kGetter);
UNREACHABLE();
}
@@ -719,13 +702,12 @@ static RawInstance* InvokeClassGetter(const Class& klass,
const String& getter_name,
const bool throw_nsm_if_absent) {
// Note static fields do not have implicit getters.
const Field& field =
Field::Handle(klass.LookupStaticField(getter_name));
const Field& field = Field::Handle(klass.LookupStaticField(getter_name));
if (field.IsNull() || field.IsUninitialized()) {
const String& internal_getter_name = String::Handle(
Field::GetterName(getter_name));
Function& getter = Function::Handle(
klass.LookupStaticFunction(internal_getter_name));
const String& internal_getter_name =
String::Handle(Field::GetterName(getter_name));
Function& getter =
Function::Handle(klass.LookupStaticFunction(internal_getter_name));
if (getter.IsNull() || !getter.is_reflectable()) {
if (getter.IsNull()) {
@@ -738,13 +720,9 @@ static RawInstance* InvokeClassGetter(const Class& klass,
}
}
if (throw_nsm_if_absent) {
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
getter_name,
getter,
Object::null_array(),
Object::null_array(),
InvocationMirror::kStatic,
InvocationMirror::kGetter);
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()), getter_name,
getter, Object::null_array(), Object::null_array(),
InvocationMirror::kStatic, InvocationMirror::kGetter);
UNREACHABLE();
}
// Fall through case: Indicate that we didn't find any function or field
@@ -791,8 +769,8 @@ static RawAbstractType* InstantiateType(const AbstractType& type,
DEFINE_NATIVE_ENTRY(MirrorSystem_libraries, 0) {
const GrowableObjectArray& libraries = GrowableObjectArray::Handle(
zone, isolate->object_store()->libraries());
const GrowableObjectArray& libraries =
GrowableObjectArray::Handle(zone, isolate->object_store()->libraries());
const intptr_t num_libraries = libraries.Length();
const GrowableObjectArray& library_mirrors = GrowableObjectArray::Handle(
@@ -829,8 +807,7 @@ DEFINE_NATIVE_ENTRY(Mirrors_makeLocalClassMirror, 1) {
Exceptions::ThrowArgumentError(type);
UNREACHABLE();
}
return CreateClassMirror(cls,
AbstractType::Handle(cls.DeclarationType()),
return CreateClassMirror(cls, AbstractType::Handle(cls.DeclarationType()),
Bool::True(), // is_declaration
Object::null_instance());
}
@@ -899,8 +876,7 @@ DEFINE_NATIVE_ENTRY(DeclarationMirror_metadata, 1) {
DEFINE_NATIVE_ENTRY(FunctionTypeMirror_call_method, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Instance,
owner_mirror,
GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner_mirror,
arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1));
// TODO(rmacnak): Return get:call() method on class _Closure instead?
@@ -921,8 +897,7 @@ DEFINE_NATIVE_ENTRY(FunctionTypeMirror_parameters, 2) {
DEFINE_NATIVE_ENTRY(FunctionTypeMirror_return_type, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(AbstractType,
instantiator,
GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, instantiator,
arguments->NativeArgAt(1));
const Function& func = Function::Handle(ref.GetFunctionReferent());
ASSERT(!func.IsNull());
@@ -1011,8 +986,7 @@ DEFINE_NATIVE_ENTRY(ClassMirror_mixin, 1) {
DEFINE_NATIVE_ENTRY(ClassMirror_mixin_instantiated, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, type, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(AbstractType,
instantiator,
GET_NON_NULL_NATIVE_ARGUMENT(AbstractType, instantiator,
arguments->NativeArgAt(1));
PROPAGATE_IF_MALFORMED(type);
ASSERT(type.IsFinalized());
@@ -1027,11 +1001,9 @@ DEFINE_NATIVE_ENTRY(ClassMirror_mixin_instantiated, 2) {
DEFINE_NATIVE_ENTRY(ClassMirror_members, 3) {
GET_NON_NULL_NATIVE_ARGUMENT(Instance,
owner_mirror,
GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner_mirror,
arguments->NativeArgAt(0));
GET_NATIVE_ARGUMENT(AbstractType,
owner_instantiator,
GET_NATIVE_ARGUMENT(AbstractType, owner_instantiator,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(2));
const Class& klass = Class::Handle(ref.GetClassReferent());
@@ -1065,10 +1037,10 @@ DEFINE_NATIVE_ENTRY(ClassMirror_members, 3) {
func ^= functions.At(i);
if (func.is_reflectable() &&
(func.kind() == RawFunction::kRegularFunction ||
func.kind() == RawFunction::kGetterFunction ||
func.kind() == RawFunction::kSetterFunction)) {
member_mirror = CreateMethodMirror(func, owner_mirror,
owner_instantiator);
func.kind() == RawFunction::kGetterFunction ||
func.kind() == RawFunction::kSetterFunction)) {
member_mirror =
CreateMethodMirror(func, owner_mirror, owner_instantiator);
member_mirrors.Add(member_mirror);
}
}
@@ -1078,11 +1050,9 @@ DEFINE_NATIVE_ENTRY(ClassMirror_members, 3) {
DEFINE_NATIVE_ENTRY(ClassMirror_constructors, 3) {
GET_NON_NULL_NATIVE_ARGUMENT(Instance,
owner_mirror,
GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner_mirror,
arguments->NativeArgAt(0));
GET_NATIVE_ARGUMENT(AbstractType,
owner_instantiator,
GET_NATIVE_ARGUMENT(AbstractType, owner_instantiator,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(2));
const Class& klass = Class::Handle(ref.GetClassReferent());
@@ -1096,15 +1066,15 @@ DEFINE_NATIVE_ENTRY(ClassMirror_constructors, 3) {
const intptr_t num_functions = functions.Length();
Instance& constructor_mirror = Instance::Handle();
const GrowableObjectArray& constructor_mirrors = GrowableObjectArray::Handle(
GrowableObjectArray::New(num_functions));
const GrowableObjectArray& constructor_mirrors =
GrowableObjectArray::Handle(GrowableObjectArray::New(num_functions));
Function& func = Function::Handle();
for (intptr_t i = 0; i < num_functions; i++) {
func ^= functions.At(i);
if (func.is_reflectable() && func.kind() == RawFunction::kConstructor) {
constructor_mirror = CreateMethodMirror(func, owner_mirror,
owner_instantiator);
constructor_mirror =
CreateMethodMirror(func, owner_mirror, owner_instantiator);
constructor_mirrors.Add(constructor_mirror);
}
}
@@ -1114,8 +1084,7 @@ DEFINE_NATIVE_ENTRY(ClassMirror_constructors, 3) {
DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Instance,
owner_mirror,
GET_NON_NULL_NATIVE_ARGUMENT(Instance, owner_mirror,
arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1));
const Library& library = Library::Handle(ref.GetLibraryReferent());
@@ -1139,8 +1108,7 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) {
// mixin applications.
if (!klass.IsDynamicClass() && !klass.IsMixinApplication()) {
type = klass.DeclarationType();
member_mirror = CreateClassMirror(klass,
type,
member_mirror = CreateClassMirror(klass, type,
Bool::True(), // is_declaration
owner_mirror);
member_mirrors.Add(member_mirror);
@@ -1155,10 +1123,10 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) {
const Function& func = Function::Cast(entry);
if (func.is_reflectable() &&
(func.kind() == RawFunction::kRegularFunction ||
func.kind() == RawFunction::kGetterFunction ||
func.kind() == RawFunction::kSetterFunction)) {
member_mirror = CreateMethodMirror(func, owner_mirror,
AbstractType::Handle());
func.kind() == RawFunction::kGetterFunction ||
func.kind() == RawFunction::kSetterFunction)) {
member_mirror =
CreateMethodMirror(func, owner_mirror, AbstractType::Handle());
member_mirrors.Add(member_mirror);
}
}
@@ -1222,8 +1190,7 @@ DEFINE_NATIVE_ENTRY(TypeVariableMirror_owner, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(TypeParameter, param, arguments->NativeArgAt(0));
const Class& owner = Class::Handle(param.parameterized_class());
const AbstractType& type = AbstractType::Handle(owner.DeclarationType());
return CreateClassMirror(owner,
type,
return CreateClassMirror(owner, type,
Bool::True(), // is_declaration
Instance::null_instance());
}
@@ -1259,10 +1226,8 @@ DEFINE_NATIVE_ENTRY(Mirrors_evalInLibraryWithPrivateKey, 2) {
}
}
ASSERT(!ctxt_library.IsNull());
const Object& result =
Object::Handle(ctxt_library.Evaluate(expression,
Array::empty_array(),
Array::empty_array()));
const Object& result = Object::Handle(ctxt_library.Evaluate(
expression, Array::empty_array(), Array::empty_array()));
if (result.IsError()) {
Exceptions::PropagateError(Error::Cast(result));
UNREACHABLE();
@@ -1285,8 +1250,7 @@ DEFINE_NATIVE_ENTRY(TypedefMirror_declaration, 1) {
ASSERT(type.IsFunctionType());
const Class& cls = Class::Handle(type.type_class());
ASSERT(cls.IsTypedefClass());
return CreateTypedefMirror(cls,
AbstractType::Handle(cls.DeclarationType()),
return CreateTypedefMirror(cls, AbstractType::Handle(cls.DeclarationType()),
Bool::True(), // is_declaration
Object::null_instance());
}
@@ -1296,14 +1260,14 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_invoke, 5) {
// because this native is an instance method in order to be polymorphic
// with its cousins.
GET_NATIVE_ARGUMENT(Instance, reflectee, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(
String, function_name, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(String, function_name,
arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Array, args, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Array, arg_names, arguments->NativeArgAt(4));
Class& klass = Class::Handle(reflectee.clazz());
Function& function = Function::Handle(zone,
Resolver::ResolveDynamicAnyArgs(zone, klass, function_name));
Function& function = Function::Handle(
zone, Resolver::ResolveDynamicAnyArgs(zone, klass, function_name));
const Array& args_descriptor =
Array::Handle(zone, ArgumentsDescriptor::New(args.Length(), arg_names));
@@ -1321,12 +1285,9 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_invoke, 5) {
getter_args.SetAt(0, reflectee);
const Array& getter_args_descriptor =
Array::Handle(zone, ArgumentsDescriptor::New(getter_args.Length()));
const Instance& getter_result = Instance::Handle(zone,
InvokeDynamicFunction(reflectee,
function,
getter_name,
getter_args,
getter_args_descriptor));
const Instance& getter_result = Instance::Handle(
zone, InvokeDynamicFunction(reflectee, function, getter_name,
getter_args, getter_args_descriptor));
// Replace the closure as the receiver in the arguments list.
args.SetAt(0, getter_result);
// Call the closure.
@@ -1341,10 +1302,7 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_invoke, 5) {
}
// Found an ordinary method.
return InvokeDynamicFunction(reflectee,
function,
function_name,
args,
return InvokeDynamicFunction(reflectee, function, function_name, args,
args_descriptor);
}
@@ -1357,17 +1315,17 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_invokeGetter, 3) {
GET_NON_NULL_NATIVE_ARGUMENT(String, getter_name, arguments->NativeArgAt(2));
Class& klass = Class::Handle(reflectee.clazz());
const String& internal_getter_name = String::Handle(
Field::GetterName(getter_name));
Function& function = Function::Handle(zone,
Resolver::ResolveDynamicAnyArgs(zone, klass, internal_getter_name));
const String& internal_getter_name =
String::Handle(Field::GetterName(getter_name));
Function& function = Function::Handle(
zone, Resolver::ResolveDynamicAnyArgs(zone, klass, internal_getter_name));
// Check for method extraction when method extractors are not created.
if (function.IsNull() && !FLAG_lazy_dispatchers) {
function = Resolver::ResolveDynamicAnyArgs(zone, klass, getter_name);
if (!function.IsNull()) {
const Function& closure_function =
Function::Handle(zone, function.ImplicitClosureFunction());
Function::Handle(zone, function.ImplicitClosureFunction());
return closure_function.ImplicitInstanceClosure(reflectee);
}
}
@@ -1379,10 +1337,7 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_invokeGetter, 3) {
Array::Handle(zone, ArgumentsDescriptor::New(args.Length()));
// InvokeDynamic invokes NoSuchMethod if the provided function is null.
return InvokeDynamicFunction(reflectee,
function,
internal_getter_name,
args,
return InvokeDynamicFunction(reflectee, function, internal_getter_name, args,
args_descriptor);
}
@@ -1398,8 +1353,8 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_invokeSetter, 4) {
const Class& klass = Class::Handle(zone, reflectee.clazz());
const String& internal_setter_name =
String::Handle(zone, Field::SetterName(setter_name));
const Function& setter = Function::Handle(zone,
Resolver::ResolveDynamicAnyArgs(zone, klass, internal_setter_name));
const Function& setter = Function::Handle(
zone, Resolver::ResolveDynamicAnyArgs(zone, klass, internal_setter_name));
const int kNumArgs = 2;
const Array& args = Array::Handle(zone, Array::New(kNumArgs));
@@ -1408,10 +1363,7 @@ DEFINE_NATIVE_ENTRY(InstanceMirror_invokeSetter, 4) {
const Array& args_descriptor =
Array::Handle(zone, ArgumentsDescriptor::New(args.Length()));
return InvokeDynamicFunction(reflectee,
setter,
internal_setter_name,
args,
return InvokeDynamicFunction(reflectee, setter, internal_setter_name, args,
args_descriptor);
}
@@ -1449,8 +1401,7 @@ DEFINE_NATIVE_ENTRY(ClosureMirror_function, 1) {
instantiator = Type::New(cls, arguments, TokenPosition::kNoSource);
instantiator.SetIsFinalized();
}
return CreateMethodMirror(function,
Instance::null_instance(),
return CreateMethodMirror(function, Instance::null_instance(),
instantiator);
}
return Instance::null();
@@ -1463,8 +1414,8 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invoke, 5) {
// with its cousins.
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1));
const Class& klass = Class::Handle(ref.GetClassReferent());
GET_NON_NULL_NATIVE_ARGUMENT(
String, function_name, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(String, function_name,
arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Array, args, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Array, arg_names, arguments->NativeArgAt(4));
@@ -1474,8 +1425,8 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invoke, 5) {
UNREACHABLE();
}
Function& function = Function::Handle(
klass.LookupStaticFunction(function_name));
Function& function =
Function::Handle(klass.LookupStaticFunction(function_name));
if (function.IsNull()) {
// Didn't find a method: try to find a getter and invoke call on its result.
@@ -1499,8 +1450,8 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invoke, 5) {
call_args.SetAt(i + 1, temp);
}
call_args.SetAt(0, getter_result);
const Array& call_args_descriptor_array =
Array::Handle(ArgumentsDescriptor::New(call_args.Length(), arg_names));
const Array& call_args_descriptor_array = Array::Handle(
ArgumentsDescriptor::New(call_args.Length(), arg_names));
// Call the closure.
const Object& call_result = Object::Handle(
DartEntry::InvokeClosure(call_args, call_args_descriptor_array));
@@ -1517,15 +1468,10 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invoke, 5) {
ArgumentsDescriptor args_descriptor(args_descriptor_array);
if (function.IsNull() ||
!function.AreValidArguments(args_descriptor, NULL) ||
if (function.IsNull() || !function.AreValidArguments(args_descriptor, NULL) ||
!function.is_reflectable()) {
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
function_name,
function,
args,
arg_names,
InvocationMirror::kStatic,
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()), function_name,
function, args, arg_names, InvocationMirror::kStatic,
InvocationMirror::kMethod);
UNREACHABLE();
}
@@ -1572,11 +1518,10 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invokeSetter, 4) {
}
// Check for real fields and user-defined setters.
const Field& field =
Field::Handle(klass.LookupStaticField(setter_name));
const Field& field = Field::Handle(klass.LookupStaticField(setter_name));
Function& setter = Function::Handle();
const String& internal_setter_name = String::Handle(
Field::SetterName(setter_name));
const String& internal_setter_name =
String::Handle(Field::SetterName(setter_name));
if (field.IsNull()) {
setter = klass.LookupStaticFunction(internal_setter_name);
@@ -1587,18 +1532,14 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invokeSetter, 4) {
if (setter.IsNull() || !setter.is_reflectable()) {
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
internal_setter_name,
setter,
args,
Object::null_array(),
InvocationMirror::kStatic,
internal_setter_name, setter, args,
Object::null_array(), InvocationMirror::kStatic,
InvocationMirror::kSetter);
UNREACHABLE();
}
// Invoke the setter and return the result.
Object& result = Object::Handle(
DartEntry::InvokeFunction(setter, args));
Object& result = Object::Handle(DartEntry::InvokeFunction(setter, args));
if (result.IsError()) {
Exceptions::PropagateError(Error::Cast(result));
UNREACHABLE();
@@ -1612,12 +1553,8 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invokeSetter, 4) {
args.SetAt(0, value);
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
internal_setter_name,
setter,
args,
Object::null_array(),
InvocationMirror::kStatic,
InvocationMirror::kSetter);
internal_setter_name, setter, args, Object::null_array(),
InvocationMirror::kStatic, InvocationMirror::kSetter);
UNREACHABLE();
}
@@ -1630,8 +1567,8 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invokeConstructor, 5) {
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0));
const Class& klass = Class::Handle(ref.GetClassReferent());
GET_NATIVE_ARGUMENT(Type, type, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(
String, constructor_name, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(String, constructor_name,
arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Array, explicit_args, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Array, arg_names, arguments->NativeArgAt(4));
@@ -1655,18 +1592,15 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invokeConstructor, 5) {
external_constructor_name = internal_constructor_name.raw();
}
Function& lookup_constructor = Function::Handle(
klass.LookupFunction(internal_constructor_name));
Function& lookup_constructor =
Function::Handle(klass.LookupFunction(internal_constructor_name));
if (lookup_constructor.IsNull() ||
(lookup_constructor.kind() != RawFunction::kConstructor) ||
!lookup_constructor.is_reflectable()) {
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
external_constructor_name,
lookup_constructor,
explicit_args,
arg_names,
InvocationMirror::kConstructor,
external_constructor_name, lookup_constructor,
explicit_args, arg_names, InvocationMirror::kConstructor,
InvocationMirror::kMethod);
UNREACHABLE();
}
@@ -1730,19 +1664,15 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invokeConstructor, 5) {
}
const Array& args_descriptor_array =
Array::Handle(ArgumentsDescriptor::New(args.Length(),
arg_names));
Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
ArgumentsDescriptor args_descriptor(args_descriptor_array);
if (!redirected_constructor.AreValidArguments(args_descriptor, NULL) ||
!redirected_constructor.is_reflectable()) {
external_constructor_name = redirected_constructor.name();
ThrowNoSuchMethod(AbstractType::Handle(klass.RareType()),
external_constructor_name,
redirected_constructor,
explicit_args,
arg_names,
InvocationMirror::kConstructor,
external_constructor_name, redirected_constructor,
explicit_args, arg_names, InvocationMirror::kConstructor,
InvocationMirror::kMethod);
UNREACHABLE();
}
@@ -1766,10 +1696,8 @@ DEFINE_NATIVE_ENTRY(ClassMirror_invokeConstructor, 5) {
}
// Invoke the constructor and return the new object.
const Object& result =
Object::Handle(DartEntry::InvokeFunction(redirected_constructor,
args,
args_descriptor_array));
const Object& result = Object::Handle(DartEntry::InvokeFunction(
redirected_constructor, args, args_descriptor_array));
if (result.IsError()) {
Exceptions::PropagateError(Error::Cast(result));
UNREACHABLE();
@@ -1792,13 +1720,13 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_invoke, 5) {
// with its cousins.
GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1));
const Library& library = Library::Handle(ref.GetLibraryReferent());
GET_NON_NULL_NATIVE_ARGUMENT(
String, function_name, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(String, function_name,
arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Array, args, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Array, arg_names, arguments->NativeArgAt(4));
Function& function = Function::Handle(
library.LookupLocalFunction(function_name));
Function& function =
Function::Handle(library.LookupLocalFunction(function_name));
if (function.IsNull()) {
// Didn't find a method: try to find a getter and invoke call on its result.
@@ -1831,15 +1759,10 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_invoke, 5) {
Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
ArgumentsDescriptor args_descriptor(args_descriptor_array);
if (function.IsNull() ||
!function.AreValidArguments(args_descriptor, NULL) ||
if (function.IsNull() || !function.AreValidArguments(args_descriptor, NULL) ||
!function.is_reflectable()) {
ThrowNoSuchMethod(Instance::null_instance(),
function_name,
function,
args,
arg_names,
InvocationMirror::kTopLevel,
ThrowNoSuchMethod(Instance::null_instance(), function_name, function, args,
arg_names, InvocationMirror::kTopLevel,
InvocationMirror::kMethod);
UNREACHABLE();
}
@@ -1877,8 +1800,7 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_invokeSetter, 4) {
// To access a top-level we may need to use the Field or the
// setter Function. The setter function may either be in the
// library or in the field's owner class, depending.
const Field& field = Field::Handle(
library.LookupLocalField(setter_name));
const Field& field = Field::Handle(library.LookupLocalField(setter_name));
Function& setter = Function::Handle();
const String& internal_setter_name =
String::Handle(Field::SetterName(setter_name));
@@ -1891,19 +1813,15 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_invokeSetter, 4) {
args.SetAt(0, value);
if (setter.IsNull() || !setter.is_reflectable()) {
ThrowNoSuchMethod(Instance::null_instance(),
internal_setter_name,
setter,
args,
Object::null_array(),
InvocationMirror::kTopLevel,
ThrowNoSuchMethod(Instance::null_instance(), internal_setter_name, setter,
args, Object::null_array(), InvocationMirror::kTopLevel,
InvocationMirror::kSetter);
UNREACHABLE();
}
// Invoke the setter and return the result.
const Object& result = Object::Handle(
DartEntry::InvokeFunction(setter, args));
const Object& result =
Object::Handle(DartEntry::InvokeFunction(setter, args));
if (result.IsError()) {
Exceptions::PropagateError(Error::Cast(result));
UNREACHABLE();
@@ -1916,12 +1834,8 @@ DEFINE_NATIVE_ENTRY(LibraryMirror_invokeSetter, 4) {
const Array& args = Array::Handle(Array::New(kNumArgs));
args.SetAt(0, value);
ThrowNoSuchMethod(Instance::null_instance(),
internal_setter_name,
setter,
args,
Object::null_array(),
InvocationMirror::kTopLevel,
ThrowNoSuchMethod(Instance::null_instance(), internal_setter_name, setter,
args, Object::null_array(), InvocationMirror::kTopLevel,
InvocationMirror::kSetter);
UNREACHABLE();
}
@@ -1936,8 +1850,8 @@ DEFINE_NATIVE_ENTRY(MethodMirror_owner, 2) {
GET_NATIVE_ARGUMENT(AbstractType, instantiator, arguments->NativeArgAt(1));
const Function& func = Function::Handle(ref.GetFunctionReferent());
if (func.IsNonImplicitClosureFunction()) {
return CreateMethodMirror(Function::Handle(
func.parent_function()), Object::null_instance(), instantiator);
return CreateMethodMirror(Function::Handle(func.parent_function()),
Object::null_instance(), instantiator);
}
const Class& owner = Class::Handle(func.Owner());
if (owner.IsTopLevel()) {
@@ -2012,10 +1926,8 @@ DEFINE_NATIVE_ENTRY(DeclarationMirror_location, 1) {
} else if (decl.IsClass()) {
const Class& cls = Class::Cast(decl);
const bool is_typedef = cls.IsTypedefClass();
if (cls.is_synthesized_class() &&
!is_typedef &&
!cls.is_mixin_app_alias() &&
!cls.is_enum_class()) {
if (cls.is_synthesized_class() && !is_typedef &&
!cls.is_mixin_app_alias() && !cls.is_enum_class()) {
return Instance::null(); // Synthetic.
}
script = cls.script();
+13 -13
View File
@@ -11,22 +11,22 @@ namespace dart {
class Mirrors : public AllStatic {
public:
#define MIRRORS_KIND_SHIFT_LIST(V) \
V(kAbstract) \
V(kGetter) \
V(kSetter) \
V(kConstructor) \
V(kConstCtor) \
V(kGenerativeCtor) \
V(kRedirectingCtor) \
V(kFactoryCtor) \
V(kExternal) \
#define MIRRORS_KIND_SHIFT_LIST(V) \
V(kAbstract) \
V(kGetter) \
V(kSetter) \
V(kConstructor) \
V(kConstCtor) \
V(kGenerativeCtor) \
V(kRedirectingCtor) \
V(kFactoryCtor) \
V(kExternal)
// These offsets much be kept in sync with those in mirrors_impl.dart.
enum KindShifts {
#define DEFINE_KIND_SHIFT_ENUM(name) name,
MIRRORS_KIND_SHIFT_LIST(DEFINE_KIND_SHIFT_ENUM)
#undef DEFINE_KIND_SHIFT_ENUM
#define DEFINE_KIND_SHIFT_ENUM(name) name,
MIRRORS_KIND_SHIFT_LIST(DEFINE_KIND_SHIFT_ENUM)
#undef DEFINE_KIND_SHIFT_ENUM
};
};
+25 -28
View File
@@ -73,8 +73,8 @@ DEFINE_NATIVE_ENTRY(Object_noSuchMethod, 6) {
GET_NON_NULL_NATIVE_ARGUMENT(String, member_name, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, invocation_type, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Instance, func_args, arguments->NativeArgAt(4));
GET_NON_NULL_NATIVE_ARGUMENT(
Instance, func_named_args, arguments->NativeArgAt(5));
GET_NON_NULL_NATIVE_ARGUMENT(Instance, func_named_args,
arguments->NativeArgAt(5));
const Array& dart_arguments = Array::Handle(Array::New(6));
dart_arguments.SetAt(0, instance);
dart_arguments.SetAt(1, member_name);
@@ -176,9 +176,8 @@ DEFINE_NATIVE_ENTRY(Object_instanceOf, 4) {
ASSERT(!type.IsMalformed());
ASSERT(!type.IsMalbounded());
Error& bound_error = Error::Handle(zone, Error::null());
const bool is_instance_of = instance.IsInstanceOf(type,
instantiator_type_arguments,
&bound_error);
const bool is_instance_of =
instance.IsInstanceOf(type, instantiator_type_arguments, &bound_error);
if (FLAG_trace_type_checks) {
const char* result_str = is_instance_of ? "true" : "false";
OS::Print("Native Object.instanceOf: result %s\n", result_str);
@@ -198,11 +197,11 @@ DEFINE_NATIVE_ENTRY(Object_instanceOf, 4) {
StackFrame* caller_frame = iterator.NextFrame();
ASSERT(caller_frame != NULL);
const TokenPosition location = caller_frame->GetTokenPos();
String& bound_error_message = String::Handle(
zone, String::New(bound_error.ToErrorCString()));
Exceptions::CreateAndThrowTypeError(
location, AbstractType::Handle(zone), AbstractType::Handle(zone),
Symbols::Empty(), bound_error_message);
String& bound_error_message =
String::Handle(zone, String::New(bound_error.ToErrorCString()));
Exceptions::CreateAndThrowTypeError(location, AbstractType::Handle(zone),
AbstractType::Handle(zone),
Symbols::Empty(), bound_error_message);
UNREACHABLE();
}
return Bool::Get(negate.value() ? !is_instance_of : is_instance_of).raw();
@@ -221,20 +220,19 @@ DEFINE_NATIVE_ENTRY(Object_simpleInstanceOf, 2) {
ASSERT(!type.IsMalformed());
ASSERT(!type.IsMalbounded());
Error& bound_error = Error::Handle(zone, Error::null());
const bool is_instance_of = instance.IsInstanceOf(type,
instantiator_type_arguments,
&bound_error);
const bool is_instance_of =
instance.IsInstanceOf(type, instantiator_type_arguments, &bound_error);
if (!is_instance_of && !bound_error.IsNull()) {
// Throw a dynamic type error only if the instanceof test fails.
DartFrameIterator iterator;
StackFrame* caller_frame = iterator.NextFrame();
ASSERT(caller_frame != NULL);
const TokenPosition location = caller_frame->GetTokenPos();
String& bound_error_message = String::Handle(
zone, String::New(bound_error.ToErrorCString()));
Exceptions::CreateAndThrowTypeError(
location, AbstractType::Handle(zone), AbstractType::Handle(zone),
Symbols::Empty(), bound_error_message);
String& bound_error_message =
String::Handle(zone, String::New(bound_error.ToErrorCString()));
Exceptions::CreateAndThrowTypeError(location, AbstractType::Handle(zone),
AbstractType::Handle(zone),
Symbols::Empty(), bound_error_message);
UNREACHABLE();
}
return Bool::Get(is_instance_of).raw();
@@ -314,9 +312,8 @@ DEFINE_NATIVE_ENTRY(Object_as, 3) {
if (instance.IsNull()) {
return instance.raw();
}
const bool is_instance_of = instance.IsInstanceOf(type,
instantiator_type_arguments,
&bound_error);
const bool is_instance_of =
instance.IsInstanceOf(type, instantiator_type_arguments, &bound_error);
if (FLAG_trace_type_checks) {
const char* result_str = is_instance_of ? "true" : "false";
OS::Print("Object.as: result %s\n", result_str);
@@ -339,21 +336,21 @@ DEFINE_NATIVE_ENTRY(Object_as, 3) {
AbstractType::Handle(zone, instance.GetType());
if (!type.IsInstantiated()) {
// Instantiate type before reporting the error.
type = type.InstantiateFrom(instantiator_type_arguments, NULL,
NULL, NULL, Heap::kNew);
type = type.InstantiateFrom(instantiator_type_arguments, NULL, NULL, NULL,
Heap::kNew);
// Note that the instantiated type may be malformed.
}
if (bound_error.IsNull()) {
Exceptions::CreateAndThrowTypeError(
location, instance_type, type,
Symbols::InTypeCast(), Object::null_string());
Exceptions::CreateAndThrowTypeError(location, instance_type, type,
Symbols::InTypeCast(),
Object::null_string());
} else {
ASSERT(isolate->type_checks());
const String& bound_error_message =
String::Handle(zone, String::New(bound_error.ToErrorCString()));
Exceptions::CreateAndThrowTypeError(
location, instance_type, AbstractType::Handle(zone),
Symbols::Empty(), bound_error_message);
location, instance_type, AbstractType::Handle(zone), Symbols::Empty(),
bound_error_message);
}
UNREACHABLE();
}
+5 -8
View File
@@ -20,10 +20,10 @@ DECLARE_FLAG(bool, trace_irregexp);
DEFINE_NATIVE_ENTRY(RegExp_factory, 4) {
ASSERT(TypeArguments::CheckedHandle(arguments->NativeArgAt(0)).IsNull());
GET_NON_NULL_NATIVE_ARGUMENT(String, pattern, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(
Instance, handle_multi_line, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(
Instance, handle_case_sensitive, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Instance, handle_multi_line,
arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Instance, handle_case_sensitive,
arguments->NativeArgAt(3));
bool ignore_case = handle_case_sensitive.raw() != Bool::True().raw();
bool multi_line = handle_multi_line.raw() == Bool::True().raw();
@@ -36,10 +36,7 @@ DEFINE_NATIVE_ENTRY(RegExp_factory, 4) {
}
// Create a RegExp object containing only the initial parameters.
return RegExpEngine::CreateRegExp(thread,
pattern,
multi_line,
ignore_case);
return RegExpEngine::CreateRegExp(thread, pattern, multi_line, ignore_case);
}
+15 -24
View File
@@ -13,8 +13,8 @@ namespace dart {
static void ThrowMaskRangeException(int64_t m) {
if ((m < 0) || (m > 255)) {
Exceptions::ThrowRangeError(
"mask", Integer::Handle(Integer::New(m)), 0, 255);
Exceptions::ThrowRangeError("mask", Integer::Handle(Integer::New(m)), 0,
255);
}
}
@@ -95,8 +95,7 @@ DEFINE_NATIVE_ENTRY(Float32x4_sub, 2) {
DEFINE_NATIVE_ENTRY(Float32x4_mul, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
float _x = self.x() * other.x();
float _y = self.y() * other.y();
float _z = self.z() * other.z();
@@ -277,7 +276,7 @@ DEFINE_NATIVE_ENTRY(Float32x4_shuffle, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1));
int64_t m = mask.AsInt64Value();
ThrowMaskRangeException(m);
float data[4] = { self.x(), self.y(), self.z(), self.w() };
float data[4] = {self.x(), self.y(), self.z(), self.w()};
float _x = data[m & 0x3];
float _y = data[(m >> 2) & 0x3];
float _z = data[(m >> 4) & 0x3];
@@ -292,8 +291,8 @@ DEFINE_NATIVE_ENTRY(Float32x4_shuffleMix, 3) {
GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2));
int64_t m = mask.AsInt64Value();
ThrowMaskRangeException(m);
float data[4] = { self.x(), self.y(), self.z(), self.w() };
float other_data[4] = { other.x(), other.y(), other.z(), other.w() };
float data[4] = {self.x(), self.y(), self.z(), self.w()};
float other_data[4] = {other.x(), other.y(), other.z(), other.w()};
float _x = data[m & 0x3];
float _y = data[(m >> 2) & 0x3];
float _z = other_data[(m >> 4) & 0x3];
@@ -348,8 +347,7 @@ DEFINE_NATIVE_ENTRY(Float32x4_setW, 2) {
DEFINE_NATIVE_ENTRY(Float32x4_min, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
float _x = self.x() < other.x() ? self.x() : other.x();
float _y = self.y() < other.y() ? self.y() : other.y();
float _z = self.z() < other.z() ? self.z() : other.z();
@@ -360,8 +358,7 @@ DEFINE_NATIVE_ENTRY(Float32x4_min, 2) {
DEFINE_NATIVE_ENTRY(Float32x4_max, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
float _x = self.x() > other.x() ? self.x() : other.x();
float _y = self.y() > other.y() ? self.y() : other.y();
float _z = self.z() > other.z() ? self.z() : other.z();
@@ -522,7 +519,7 @@ DEFINE_NATIVE_ENTRY(Int32x4_shuffle, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1));
int64_t m = mask.AsInt64Value();
ThrowMaskRangeException(m);
int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
int32_t data[4] = {self.x(), self.y(), self.z(), self.w()};
int32_t _x = data[m & 0x3];
int32_t _y = data[(m >> 2) & 0x3];
int32_t _z = data[(m >> 4) & 0x3];
@@ -537,8 +534,8 @@ DEFINE_NATIVE_ENTRY(Int32x4_shuffleMix, 3) {
GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2));
int64_t m = mask.AsInt64Value();
ThrowMaskRangeException(m);
int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
int32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
int32_t data[4] = {self.x(), self.y(), self.z(), self.w()};
int32_t zw_data[4] = {zw.x(), zw.y(), zw.z(), zw.w()};
int32_t _x = data[m & 0x3];
int32_t _y = data[(m >> 2) & 0x3];
int32_t _z = zw_data[(m >> 4) & 0x3];
@@ -672,12 +669,8 @@ DEFINE_NATIVE_ENTRY(Int32x4_setFlagW, 2) {
union float32_int32 {
float f;
int32_t u;
float32_int32(float v) {
f = v;
}
float32_int32(int32_t v) {
u = v;
}
float32_int32(float v) { f = v; }
float32_int32(int32_t v) { u = v; }
};
@@ -854,8 +847,7 @@ DEFINE_NATIVE_ENTRY(Float64x2_setY, 2) {
DEFINE_NATIVE_ENTRY(Float64x2_min, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, other,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, other, arguments->NativeArgAt(1));
double _x = self.x() < other.x() ? self.x() : other.x();
double _y = self.y() < other.y() ? self.y() : other.y();
return Float64x2::New(_x, _y);
@@ -864,8 +856,7 @@ DEFINE_NATIVE_ENTRY(Float64x2_min, 2) {
DEFINE_NATIVE_ENTRY(Float64x2_max, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, self, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, other,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Float64x2, other, arguments->NativeArgAt(1));
double _x = self.x() > other.x() ? self.x() : other.x();
double _y = self.y() > other.y() ? self.y() : other.y();
return Float64x2::New(_x, _y);
+2 -2
View File
@@ -46,8 +46,8 @@ const Stacktrace& GetCurrentStacktrace(int skip_frames) {
const Array& code_array = Array::Handle(Array::MakeArray(code_list));
const Array& pc_offset_array =
Array::Handle(Array::MakeArray(pc_offset_list));
const Stacktrace& stacktrace = Stacktrace::Handle(
Stacktrace::New(code_array, pc_offset_array));
const Stacktrace& stacktrace =
Stacktrace::Handle(Stacktrace::New(code_array, pc_offset_array));
return stacktrace;
}
+43 -53
View File
@@ -91,8 +91,8 @@ DEFINE_NATIVE_ENTRY(StringBase_createFromCodePoints, 3) {
DEFINE_NATIVE_ENTRY(StringBase_substringUnchecked, 3) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, start_obj, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, end_obj, arguments->NativeArgAt(2));
@@ -102,10 +102,10 @@ DEFINE_NATIVE_ENTRY(StringBase_substringUnchecked, 3) {
}
// Return the bitwise-or of all characters in the slice from start to end.
static uint16_t CharacterLimit(const String& string,
intptr_t start, intptr_t end) {
intptr_t start,
intptr_t end) {
ASSERT(string.IsTwoByteString() || string.IsExternalTwoByteString());
// Maybe do loop unrolling, and handle two uint16_t in a single uint32_t
// operation.
@@ -164,10 +164,9 @@ static bool CheckSlicesOneByte(const String& base,
DEFINE_NATIVE_ENTRY(StringBase_joinReplaceAllResult, 4) {
const String& base = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(GrowableObjectArray,
matches_growable, arguments->NativeArgAt(1));
const String& base = String::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(GrowableObjectArray, matches_growable,
arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, length_obj, arguments->NativeArgAt(2));
GET_NON_NULL_NATIVE_ARGUMENT(Bool, is_onebyte_obj, arguments->NativeArgAt(3));
@@ -219,12 +218,9 @@ DEFINE_NATIVE_ENTRY(StringBase_joinReplaceAllResult, 4) {
}
}
if (slice_length > 0) {
if (0 <= slice_start &&
slice_start + slice_length <= base_length &&
if (0 <= slice_start && slice_start + slice_length <= base_length &&
write_index + slice_length <= length) {
String::Copy(result, write_index,
base, slice_start,
slice_length);
String::Copy(result, write_index, base, slice_start, slice_length);
write_index += slice_length;
continue;
}
@@ -253,8 +249,8 @@ DEFINE_NATIVE_ENTRY(StringBase_joinReplaceAllResult, 4) {
}
DEFINE_NATIVE_ENTRY(OneByteString_substringUnchecked, 3) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(receiver.IsOneByteString());
GET_NON_NULL_NATIVE_ARGUMENT(Smi, start_obj, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, end_obj, arguments->NativeArgAt(2));
@@ -267,31 +263,26 @@ DEFINE_NATIVE_ENTRY(OneByteString_substringUnchecked, 3) {
// This is high-performance code.
DEFINE_NATIVE_ENTRY(OneByteString_splitWithCharCode, 2) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(receiver.IsOneByteString());
GET_NON_NULL_NATIVE_ARGUMENT(Smi, smi_split_code, arguments->NativeArgAt(1));
const intptr_t len = receiver.Length();
const intptr_t split_code = smi_split_code.Value();
const GrowableObjectArray& result = GrowableObjectArray::Handle(
zone,
GrowableObjectArray::New(16, Heap::kNew));
zone, GrowableObjectArray::New(16, Heap::kNew));
String& str = String::Handle(zone);
intptr_t start = 0;
intptr_t i = 0;
for (; i < len; i++) {
if (split_code == OneByteString::CharAt(receiver, i)) {
str = OneByteString::SubStringUnchecked(receiver,
start,
(i - start),
str = OneByteString::SubStringUnchecked(receiver, start, (i - start),
Heap::kNew);
result.Add(str);
start = i + 1;
}
}
str = OneByteString::SubStringUnchecked(receiver,
start,
(i - start),
str = OneByteString::SubStringUnchecked(receiver, start, (i - start),
Heap::kNew);
result.Add(str);
return result.raw();
@@ -305,8 +296,7 @@ DEFINE_NATIVE_ENTRY(OneByteString_allocate, 1) {
DEFINE_NATIVE_ENTRY(OneByteString_allocateFromOneByteList, 3) {
Instance& list = Instance::CheckedHandle(zone,
arguments->NativeArgAt(0));
Instance& list = Instance::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, start_obj, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, end_obj, arguments->NativeArgAt(2));
@@ -409,8 +399,7 @@ DEFINE_NATIVE_ENTRY(ExternalOneByteString_getCid, 0) {
DEFINE_NATIVE_ENTRY(TwoByteString_allocateFromTwoByteList, 3) {
Instance& list = Instance::CheckedHandle(zone,
arguments->NativeArgAt(0));
Instance& list = Instance::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, start_obj, arguments->NativeArgAt(1));
GET_NON_NULL_NATIVE_ARGUMENT(Smi, end_obj, arguments->NativeArgAt(2));
@@ -451,8 +440,8 @@ DEFINE_NATIVE_ENTRY(TwoByteString_allocateFromTwoByteList, 3) {
if (end > Smi::Value(TypedDataView::Length(list))) {
Exceptions::ThrowArgumentError(end_obj);
}
const Instance& data_obj = Instance::Handle(zone,
TypedDataView::Data(list));
const Instance& data_obj =
Instance::Handle(zone, TypedDataView::Data(list));
intptr_t data_offset = Smi::Value(TypedDataView::OffsetInBytes(list));
if (data_obj.IsTypedData()) {
const TypedData& array = TypedData::Cast(data_obj);
@@ -468,8 +457,8 @@ DEFINE_NATIVE_ENTRY(TwoByteString_allocateFromTwoByteList, 3) {
if (end > array.Length()) {
Exceptions::ThrowArgumentError(end_obj);
}
const String& string = String::Handle(zone,
TwoByteString::New(length, space));
const String& string =
String::Handle(zone, TwoByteString::New(length, space));
for (int i = 0; i < length; i++) {
intptr_t value =
Smi::Value(reinterpret_cast<RawSmi*>(array.At(start + i)));
@@ -481,8 +470,8 @@ DEFINE_NATIVE_ENTRY(TwoByteString_allocateFromTwoByteList, 3) {
if (end > array.Length()) {
Exceptions::ThrowArgumentError(end_obj);
}
const String& string = String::Handle(zone,
TwoByteString::New(length, space));
const String& string =
String::Handle(zone, TwoByteString::New(length, space));
for (int i = 0; i < length; i++) {
intptr_t value =
Smi::Value(reinterpret_cast<RawSmi*>(array.At(start + i)));
@@ -496,8 +485,8 @@ DEFINE_NATIVE_ENTRY(TwoByteString_allocateFromTwoByteList, 3) {
DEFINE_NATIVE_ENTRY(String_getHashCode, 1) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
intptr_t hash_val = receiver.Hash();
ASSERT(hash_val > 0);
ASSERT(Smi::IsValid(hash_val));
@@ -506,8 +495,8 @@ DEFINE_NATIVE_ENTRY(String_getHashCode, 1) {
DEFINE_NATIVE_ENTRY(String_getLength, 1) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
return Smi::New(receiver.Length());
}
@@ -527,8 +516,8 @@ static uint16_t StringValueAt(const String& str, const Integer& index) {
DEFINE_NATIVE_ENTRY(String_charAt, 2) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, index, arguments->NativeArgAt(1));
uint16_t value = StringValueAt(receiver, index);
return Symbols::FromCharCode(thread, static_cast<int32_t>(value));
@@ -537,8 +526,8 @@ DEFINE_NATIVE_ENTRY(String_charAt, 2) {
// Returns the 16-bit UTF-16 code unit at the given index.
DEFINE_NATIVE_ENTRY(String_codeUnitAt, 2) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Integer, index, arguments->NativeArgAt(1));
uint16_t value = StringValueAt(receiver, index);
return Smi::New(static_cast<intptr_t>(value));
@@ -546,24 +535,24 @@ DEFINE_NATIVE_ENTRY(String_codeUnitAt, 2) {
DEFINE_NATIVE_ENTRY(String_concat, 2) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(String, b, arguments->NativeArgAt(1));
return String::Concat(receiver, b);
}
DEFINE_NATIVE_ENTRY(String_toLowerCase, 1) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(!receiver.IsNull());
return String::ToLowerCase(receiver);
}
DEFINE_NATIVE_ENTRY(String_toUpperCase, 1) {
const String& receiver = String::CheckedHandle(zone,
arguments->NativeArgAt(0));
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(!receiver.IsNull());
return String::ToUpperCase(receiver);
}
@@ -586,7 +575,7 @@ DEFINE_NATIVE_ENTRY(String_concatRange, 3) {
} else if (argument.IsGrowableObjectArray()) {
const GrowableObjectArray& g_array = GrowableObjectArray::Cast(argument);
strings = g_array.data();
length = g_array.Length();
length = g_array.Length();
} else {
Exceptions::ThrowArgumentError(argument);
}
@@ -614,9 +603,10 @@ DEFINE_NATIVE_ENTRY(StringBuffer_createStringFromUint16Array, 3) {
if (length_value < 0 || length_value > array_length) {
Exceptions::ThrowRangeError("length", length, 0, array_length);
}
const String& result = isLatin1.value()
? String::Handle(OneByteString::New(length_value, Heap::kNew))
: String::Handle(TwoByteString::New(length_value, Heap::kNew));
const String& result =
isLatin1.value()
? String::Handle(OneByteString::New(length_value, Heap::kNew))
: String::Handle(TwoByteString::New(length_value, Heap::kNew));
NoSafepointScope no_safepoint;
uint16_t* data_position = reinterpret_cast<uint16_t*>(codeUnits.DataAddr(0));
+30 -50
View File
@@ -85,32 +85,26 @@ DEFINE_NATIVE_ENTRY(Timeline_reportTaskEvent, 6) {
// Convert phase to a C string and perform a sanity check.
const char* phase_string = phase.ToCString();
ASSERT(phase_string != NULL);
ASSERT((phase_string[0] == 'n') ||
(phase_string[0] == 'b') ||
ASSERT((phase_string[0] == 'n') || (phase_string[0] == 'b') ||
(phase_string[0] == 'e'));
ASSERT(phase_string[1] == '\0');
char* json = OS::SCreate(zone,
"{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64 ","
"\"ts\":%" Pd64 ",\"ph\":\"%s\",\"id\":%" Pd64 ", \"args\":%s}",
name.ToCString(),
category.ToCString(),
tid,
pid,
start.AsInt64Value(),
phase_string,
id.AsInt64Value(),
args.ToCString());
char* json = OS::SCreate(
zone, "{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64
","
"\"ts\":%" Pd64 ",\"ph\":\"%s\",\"id\":%" Pd64 ", \"args\":%s}",
name.ToCString(), category.ToCString(), tid, pid, start.AsInt64Value(),
phase_string, id.AsInt64Value(), args.ToCString());
switch (phase_string[0]) {
case 'n':
event->AsyncInstant("", id.AsInt64Value(), start.AsInt64Value());
break;
break;
case 'b':
event->AsyncBegin("", id.AsInt64Value(), start.AsInt64Value());
break;
break;
case 'e':
event->AsyncEnd("", id.AsInt64Value(), start.AsInt64Value());
break;
break;
default:
UNREACHABLE();
}
@@ -156,36 +150,25 @@ DEFINE_NATIVE_ENTRY(Timeline_reportCompleteEvent, 5) {
char* json = NULL;
if ((start_cpu.AsInt64Value() != -1) && (end_cpu != -1)) {
json = OS::SCreate(zone,
"{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64 ","
"\"ts\":%" Pd64 ",\"ph\":\"X\",\"dur\":%" Pd64 ","
"\"tdur\":%" Pd64 ",\"args\":%s}",
name.ToCString(),
category.ToCString(),
tid,
pid,
start.AsInt64Value(),
duration,
duration_cpu,
args.ToCString());
json = OS::SCreate(
zone, "{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64
","
"\"ts\":%" Pd64 ",\"ph\":\"X\",\"dur\":%" Pd64
","
"\"tdur\":%" Pd64 ",\"args\":%s}",
name.ToCString(), category.ToCString(), tid, pid, start.AsInt64Value(),
duration, duration_cpu, args.ToCString());
} else {
json = OS::SCreate(zone,
"{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64 ","
"\"ts\":%" Pd64 ",\"ph\":\"X\",\"dur\":%" Pd64 ",\"args\":%s}",
name.ToCString(),
category.ToCString(),
tid,
pid,
start.AsInt64Value(),
duration,
args.ToCString());
json = OS::SCreate(
zone, "{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64
","
"\"ts\":%" Pd64 ",\"ph\":\"X\",\"dur\":%" Pd64 ",\"args\":%s}",
name.ToCString(), category.ToCString(), tid, pid, start.AsInt64Value(),
duration, args.ToCString());
}
ASSERT(json != NULL);
event->Duration("",
start.AsInt64Value(),
end,
start_cpu.AsInt64Value(),
event->Duration("", start.AsInt64Value(), end, start_cpu.AsInt64Value(),
end_cpu);
// json was allocated in the zone and a copy will be stored in event.
event->CompleteWithPreSerializedJSON(json);
@@ -220,14 +203,11 @@ DEFINE_NATIVE_ENTRY(Timeline_reportInstantEvent, 4) {
ASSERT(os_thread != NULL);
int64_t tid = OSThread::ThreadIdToIntPtr(os_thread->trace_id());
char* json = OS::SCreate(zone,
"{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64 ","
"\"ts\":%" Pd64 ",\"ph\":\"I\",\"args\":%s}",
name.ToCString(),
category.ToCString(),
tid,
pid,
start.AsInt64Value(),
char* json = OS::SCreate(
zone, "{\"name\":\"%s\",\"cat\":\"%s\",\"tid\":%" Pd64 ",\"pid\":%" Pd64
","
"\"ts\":%" Pd64 ",\"ph\":\"I\",\"args\":%s}",
name.ToCString(), category.ToCString(), tid, pid, start.AsInt64Value(),
args.ToCString());
event->Instant("", start.AsInt64Value());
+92 -93
View File
@@ -22,10 +22,9 @@ static void RangeCheck(intptr_t offset_in_bytes,
if (!Utils::RangeCheck(offset_in_bytes, access_size, length_in_bytes)) {
const intptr_t index =
(offset_in_bytes + access_size) / element_size_in_bytes;
const intptr_t length =
length_in_bytes / element_size_in_bytes;
Exceptions::ThrowRangeError(
"index", Integer::Handle(Integer::New(index)), 0, length);
const intptr_t length = length_in_bytes / element_size_in_bytes;
Exceptions::ThrowRangeError("index", Integer::Handle(Integer::New(index)),
0, length);
}
}
@@ -34,8 +33,7 @@ static void RangeCheck(intptr_t offset_in_bytes,
static void LengthCheck(intptr_t len, intptr_t max) {
if (len < 0 || len > max) {
const String& error = String::Handle(String::NewFormatted(
"Length (%" Pd ") of object must be in range [0..%" Pd "]",
len, max));
"Length (%" Pd ") of object must be in range [0..%" Pd "]", len, max));
Exceptions::ThrowArgumentError(error);
}
}
@@ -44,8 +42,8 @@ static void LengthCheck(intptr_t len, intptr_t max) {
DEFINE_NATIVE_ENTRY(TypedData_length, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0));
if (instance.IsTypedData()) {
const TypedData& array = TypedData::Cast(instance);
return Smi::New(array.Length());
const TypedData& array = TypedData::Cast(instance);
return Smi::New(array.Length());
}
if (instance.IsExternalTypedData()) {
const ExternalTypedData& array = ExternalTypedData::Cast(instance);
@@ -59,8 +57,10 @@ DEFINE_NATIVE_ENTRY(TypedData_length, 1) {
template <typename DstType, typename SrcType>
static RawBool* CopyData(const Instance& dst, const Instance& src,
const Smi& dst_start, const Smi& src_start,
static RawBool* CopyData(const Instance& dst,
const Instance& src,
const Smi& dst_start,
const Smi& src_start,
const Smi& length,
bool clamped) {
const DstType& dst_array = DstType::Cast(dst);
@@ -68,18 +68,17 @@ static RawBool* CopyData(const Instance& dst, const Instance& src,
const intptr_t dst_offset_in_bytes = dst_start.Value();
const intptr_t src_offset_in_bytes = src_start.Value();
const intptr_t length_in_bytes = length.Value();
ASSERT(Utils::RangeCheck(
src_offset_in_bytes, length_in_bytes, src_array.LengthInBytes()));
ASSERT(Utils::RangeCheck(
dst_offset_in_bytes, length_in_bytes, dst_array.LengthInBytes()));
ASSERT(Utils::RangeCheck(src_offset_in_bytes, length_in_bytes,
src_array.LengthInBytes()));
ASSERT(Utils::RangeCheck(dst_offset_in_bytes, length_in_bytes,
dst_array.LengthInBytes()));
if (clamped) {
TypedData::ClampedCopy<DstType, SrcType>(dst_array, dst_offset_in_bytes,
src_array, src_offset_in_bytes,
length_in_bytes);
} else {
TypedData::Copy<DstType, SrcType>(dst_array, dst_offset_in_bytes,
src_array, src_offset_in_bytes,
length_in_bytes);
TypedData::Copy<DstType, SrcType>(dst_array, dst_offset_in_bytes, src_array,
src_offset_in_bytes, length_in_bytes);
}
return Bool::True().raw();
}
@@ -132,8 +131,8 @@ DEFINE_NATIVE_ENTRY(TypedData_setRange, 7) {
const bool needs_clamping = IsClamped(to_cid) && !IsUint8(from_cid);
if (dst.IsTypedData()) {
if (src.IsTypedData()) {
return CopyData<TypedData, TypedData>(
dst, src, dst_start, src_start, length, needs_clamping);
return CopyData<TypedData, TypedData>(dst, src, dst_start, src_start,
length, needs_clamping);
} else if (src.IsExternalTypedData()) {
return CopyData<TypedData, ExternalTypedData>(
dst, src, dst_start, src_start, length, needs_clamping);
@@ -158,83 +157,79 @@ DEFINE_NATIVE_ENTRY(TypedData_setRange, 7) {
// on whether the underlying architecture is 32-bit or 64-bit.
// Argument 0 is type arguments and is ignored.
#define TYPED_DATA_NEW(name) \
DEFINE_NATIVE_ENTRY(TypedData_##name##_new, 2) { \
GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(1)); \
intptr_t cid = kTypedData##name##Cid; \
intptr_t len = length.Value(); \
intptr_t max = TypedData::MaxElements(cid); \
LengthCheck(len, max); \
return TypedData::New(cid, len); \
} \
DEFINE_NATIVE_ENTRY(TypedData_##name##_new, 2) { \
GET_NON_NULL_NATIVE_ARGUMENT(Smi, length, arguments->NativeArgAt(1)); \
intptr_t cid = kTypedData##name##Cid; \
intptr_t len = length.Value(); \
intptr_t max = TypedData::MaxElements(cid); \
LengthCheck(len, max); \
return TypedData::New(cid, len); \
}
#define TYPED_DATA_NEW_NATIVE(name) \
TYPED_DATA_NEW(name) \
#define TYPED_DATA_NEW_NATIVE(name) TYPED_DATA_NEW(name)
CLASS_LIST_TYPED_DATA(TYPED_DATA_NEW_NATIVE)
#define TYPED_DATA_GETTER(getter, object, ctor, access_size) \
DEFINE_NATIVE_ENTRY(TypedData_##getter, 2) { \
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0)); \
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, arguments->NativeArgAt(1)); \
if (instance.IsTypedData()) { \
const TypedData& array = TypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, \
array.LengthInBytes(), access_size); \
return object::ctor(array.getter(offsetInBytes.Value())); \
} \
if (instance.IsExternalTypedData()) { \
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, \
array.LengthInBytes(), access_size); \
return object::ctor(array.getter(offsetInBytes.Value())); \
} \
const String& error = String::Handle(String::NewFormatted( \
"Expected a TypedData object but found %s", instance.ToCString())); \
Exceptions::ThrowArgumentError(error); \
return object::null(); \
} \
#define TYPED_DATA_SETTER(setter, \
object, \
get_object_value, \
access_size, \
access_type) \
DEFINE_NATIVE_ENTRY(TypedData_##setter, 3) { \
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0)); \
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, arguments->NativeArgAt(1)); \
GET_NON_NULL_NATIVE_ARGUMENT(object, value, arguments->NativeArgAt(2)); \
if (instance.IsTypedData()) { \
const TypedData& array = TypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, \
array.LengthInBytes(), access_size); \
array.setter(offsetInBytes.Value(), \
static_cast<access_type>(value.get_object_value())); \
} else if (instance.IsExternalTypedData()) { \
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, \
array.LengthInBytes(), access_size); \
array.setter(offsetInBytes.Value(), \
static_cast<access_type>(value.get_object_value())); \
} else { \
DEFINE_NATIVE_ENTRY(TypedData_##getter, 2) { \
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, \
arguments->NativeArgAt(0)); \
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, \
arguments->NativeArgAt(1)); \
if (instance.IsTypedData()) { \
const TypedData& array = TypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, array.LengthInBytes(), \
access_size); \
return object::ctor(array.getter(offsetInBytes.Value())); \
} \
if (instance.IsExternalTypedData()) { \
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, array.LengthInBytes(), \
access_size); \
return object::ctor(array.getter(offsetInBytes.Value())); \
} \
const String& error = String::Handle(String::NewFormatted( \
"Expected a TypedData object but found %s", instance.ToCString())); \
Exceptions::ThrowArgumentError(error); \
} \
return Object::null(); \
}
return object::null(); \
}
#define TYPED_DATA_NATIVES(type_name, \
object, \
ctor, \
get_object_value, \
access_size, \
access_type) \
#define TYPED_DATA_SETTER(setter, object, get_object_value, access_size, \
access_type) \
DEFINE_NATIVE_ENTRY(TypedData_##setter, 3) { \
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, \
arguments->NativeArgAt(0)); \
GET_NON_NULL_NATIVE_ARGUMENT(Smi, offsetInBytes, \
arguments->NativeArgAt(1)); \
GET_NON_NULL_NATIVE_ARGUMENT(object, value, arguments->NativeArgAt(2)); \
if (instance.IsTypedData()) { \
const TypedData& array = TypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, array.LengthInBytes(), \
access_size); \
array.setter(offsetInBytes.Value(), \
static_cast<access_type>(value.get_object_value())); \
} else if (instance.IsExternalTypedData()) { \
const ExternalTypedData& array = ExternalTypedData::Cast(instance); \
RangeCheck(offsetInBytes.Value(), access_size, array.LengthInBytes(), \
access_size); \
array.setter(offsetInBytes.Value(), \
static_cast<access_type>(value.get_object_value())); \
} else { \
const String& error = String::Handle(String::NewFormatted( \
"Expected a TypedData object but found %s", instance.ToCString())); \
Exceptions::ThrowArgumentError(error); \
} \
return Object::null(); \
}
#define TYPED_DATA_NATIVES(type_name, object, ctor, get_object_value, \
access_size, access_type) \
TYPED_DATA_GETTER(Get##type_name, object, ctor, access_size) \
TYPED_DATA_SETTER(Set##type_name, object, \
get_object_value, access_size, access_type) \
TYPED_DATA_SETTER(Set##type_name, object, get_object_value, access_size, \
access_type)
TYPED_DATA_NATIVES(Int8, Integer, New, AsTruncatedUint32Value, 1, int8_t)
TYPED_DATA_NATIVES(Uint8, Integer, New, AsTruncatedUint32Value, 1, uint8_t)
@@ -243,11 +238,15 @@ TYPED_DATA_NATIVES(Uint16, Integer, New, AsTruncatedUint32Value, 2, uint16_t)
TYPED_DATA_NATIVES(Int32, Integer, New, AsTruncatedUint32Value, 4, int32_t)
TYPED_DATA_NATIVES(Uint32, Integer, New, AsTruncatedUint32Value, 4, uint32_t)
TYPED_DATA_NATIVES(Int64, Integer, New, AsTruncatedInt64Value, 8, int64_t)
TYPED_DATA_NATIVES(
Uint64, Integer, NewFromUint64, AsTruncatedInt64Value, 8, uint64_t)
TYPED_DATA_NATIVES(Uint64,
Integer,
NewFromUint64,
AsTruncatedInt64Value,
8,
uint64_t)
TYPED_DATA_NATIVES(Float32, Double, New, value, 4, float)
TYPED_DATA_NATIVES(Float64, Double, New, value, 8, double)
TYPED_DATA_NATIVES(Float32x4, Float32x4, New, value, 16, simd128_value_t)
TYPED_DATA_NATIVES(Float32x4, Float32x4, New, value, 16, simd128_value_t)
TYPED_DATA_NATIVES(Int32x4, Int32x4, New, value, 16, simd128_value_t)
TYPED_DATA_NATIVES(Float64x2, Float64x2, New, value, 16, simd128_value_t)
@@ -344,11 +343,11 @@ DEFINE_NATIVE_ENTRY(ByteData_ToEndianFloat32, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Bool, little_endian, arguments->NativeArgAt(1));
float value = host_value.value();
if (little_endian.value()) {
value = bit_cast<float>(
Utils::HostToLittleEndian32(bit_cast<uint32_t>(value)));
value =
bit_cast<float>(Utils::HostToLittleEndian32(bit_cast<uint32_t>(value)));
} else {
value = bit_cast<float>(
Utils::HostToBigEndian32(bit_cast<uint32_t>(value)));
value =
bit_cast<float>(Utils::HostToBigEndian32(bit_cast<uint32_t>(value)));
}
return Double::New(value);
}
@@ -362,8 +361,8 @@ DEFINE_NATIVE_ENTRY(ByteData_ToEndianFloat64, 2) {
value = bit_cast<double>(
Utils::HostToLittleEndian64(bit_cast<uint64_t>(value)));
} else {
value = bit_cast<double>(
Utils::HostToBigEndian64(bit_cast<uint64_t>(value)));
value =
bit_cast<double>(Utils::HostToBigEndian64(bit_cast<uint64_t>(value)));
}
return Double::New(value);
}
+18 -33
View File
@@ -68,12 +68,11 @@ class RegisterRunningIsolatesVisitor : public IsolateVisitor {
args.SetAt(0, port_int);
args.SetAt(1, send_port);
args.SetAt(2, name);
const Object& r = Object::Handle(
DartEntry::InvokeFunction(register_function_, args));
const Object& r =
Object::Handle(DartEntry::InvokeFunction(register_function_, args));
if (FLAG_trace_service) {
OS::Print("vm-service: Isolate %s %" Pd64 " registered.\n",
name.ToCString(),
port_id);
name.ToCString(), port_id);
}
ASSERT(!r.IsError());
}
@@ -92,8 +91,8 @@ DEFINE_NATIVE_ENTRY(VMService_SendIsolateServiceMessage, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(Array, message, arguments->NativeArgAt(1));
// Set the type of the OOB message.
message.SetAt(0, Smi::Handle(thread->zone(),
Smi::New(Message::kServiceOOBMsg)));
message.SetAt(0,
Smi::Handle(thread->zone(), Smi::New(Message::kServiceOOBMsg)));
// Serialize message.
uint8_t* data = NULL;
@@ -102,8 +101,7 @@ DEFINE_NATIVE_ENTRY(VMService_SendIsolateServiceMessage, 2) {
// TODO(turnidge): Throw an exception when the return value is false?
bool result = PortMap::PostMessage(
new Message(sp.Id(), data, writer.BytesWritten(),
Message::kOOBPriority));
new Message(sp.Id(), data, writer.BytesWritten(), Message::kOOBPriority));
return Bool::Get(result).raw();
}
@@ -223,21 +221,13 @@ class TarArchive {
}
}
char* NextFilename() {
return filenames_.RemoveLast();
}
char* NextFilename() { return filenames_.RemoveLast(); }
uint8_t* NextContent() {
return contents_.RemoveLast();
}
uint8_t* NextContent() { return contents_.RemoveLast(); }
intptr_t NextContentLength() {
return content_lengths_.RemoveLast();
}
intptr_t NextContentLength() { return content_lengths_.RemoveLast(); }
bool HasMore() const {
return filenames_.length() > 0;
}
bool HasMore() const { return filenames_.length() > 0; }
intptr_t Length() const { return filenames_.length(); }
@@ -266,9 +256,7 @@ class TarArchive {
kTarXglType = 'g',
};
bool HasNext() const {
return !EndOfArchive();
}
bool HasNext() const { return !EndOfArchive(); }
bool Next(char** filename, uint8_t** data, intptr_t* data_length) {
intptr_t startOfBlock = rs_.Position();
@@ -404,8 +392,8 @@ DEFINE_NATIVE_ENTRY(VMService_DecodeAssets, 1) {
Dart_TypedData_Type typ;
void* bytes;
intptr_t length;
Dart_Handle err = Dart_TypedDataAcquireData(
data_handle, &typ, &bytes, &length);
Dart_Handle err =
Dart_TypedDataAcquireData(data_handle, &typ, &bytes, &length);
ASSERT(!Dart_IsError(err));
TarArchive archive(reinterpret_cast<uint8_t*>(bytes), length);
@@ -426,17 +414,15 @@ DEFINE_NATIVE_ENTRY(VMService_DecodeAssets, 1) {
intptr_t contents_length = archive.NextContentLength();
Dart_Handle dart_filename = Dart_NewExternalLatin1String(
reinterpret_cast<uint8_t*>(filename),
strlen(filename),
filename,
reinterpret_cast<uint8_t*>(filename), strlen(filename), filename,
FilenameFinalizer);
ASSERT(!Dart_IsError(dart_filename));
Dart_Handle dart_contents = Dart_NewExternalTypedData(
Dart_TypedData_kUint8, contents, contents_length);
ASSERT(!Dart_IsError(dart_contents));
Dart_NewWeakPersistentHandle(
dart_contents, contents, contents_length, ContentsFinalizer);
Dart_NewWeakPersistentHandle(dart_contents, contents, contents_length,
ContentsFinalizer);
Dart_ListSetAt(result_list, idx, dart_filename);
Dart_ListSetAt(result_list, (idx + 1), dart_contents);
@@ -449,7 +435,6 @@ DEFINE_NATIVE_ENTRY(VMService_DecodeAssets, 1) {
}
DEFINE_NATIVE_ENTRY(VMService_spawnUriNotify, 2) {
#ifndef PRODUCT
if (!FLAG_support_service) {
@@ -469,8 +454,8 @@ DEFINE_NATIVE_ENTRY(VMService_spawnUriNotify, 2) {
// There is no isolate at the control port anymore. Must have
// died already.
ServiceEvent spawn_event(NULL, ServiceEvent::kIsolateSpawn);
const String& error = String::Handle(String::New(
"spawned isolate exited before notification completed"));
const String& error = String::Handle(
String::New("spawned isolate exited before notification completed"));
spawn_event.set_spawn_token(&token);
spawn_event.set_spawn_error(&error);
Service::HandleEvent(&spawn_event);
+6 -6
View File
@@ -21,22 +21,22 @@ DEFINE_NATIVE_ENTRY(WeakProperty_new, 2) {
DEFINE_NATIVE_ENTRY(WeakProperty_getKey, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(
WeakProperty, weak_property, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(WeakProperty, weak_property,
arguments->NativeArgAt(0));
return weak_property.key();
}
DEFINE_NATIVE_ENTRY(WeakProperty_getValue, 1) {
GET_NON_NULL_NATIVE_ARGUMENT(
WeakProperty, weak_property, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(WeakProperty, weak_property,
arguments->NativeArgAt(0));
return weak_property.value();
}
DEFINE_NATIVE_ENTRY(WeakProperty_setValue, 2) {
GET_NON_NULL_NATIVE_ARGUMENT(
WeakProperty, weak_property, arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(WeakProperty, weak_property,
arguments->NativeArgAt(0));
GET_NON_NULL_NATIVE_ARGUMENT(Instance, value, arguments->NativeArgAt(1));
weak_property.set_value(value);
return Object::null();