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

Side by Side Diff: runtime/bin/dartutils.cc

Issue 9403012: Add utility functions for creating and accessing Dart_CObject structures (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments from ager@ Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« runtime/bin/dartutils.h ('K') | « runtime/bin/dartutils.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "bin/dartutils.h" 5 #include "bin/dartutils.h"
6 6
7 #include "bin/file.h" 7 #include "bin/file.h"
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/globals.h" 10 #include "platform/globals.h"
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 if (canonical_filename == NULL) { 245 if (canonical_filename == NULL) {
246 return absolute_filename; 246 return absolute_filename;
247 } 247 }
248 free(absolute_filename); 248 free(absolute_filename);
249 return canonical_filename; 249 return canonical_filename;
250 } 250 }
251 251
252 252
253 bool DartUtils::PostNull(Dart_Port port_id) { 253 bool DartUtils::PostNull(Dart_Port port_id) {
254 // Post a message with just the null object. 254 // Post a message with just the null object.
255 Dart_CObject object; 255 return Dart_PostCObject(port_id, CObject::Null()->AsApiCObject());
256 object.type = Dart_CObject::kNull;
257 return Dart_PostCObject(port_id, &object);
258 } 256 }
259 257
260 258
261 bool DartUtils::PostInt32(Dart_Port port_id, int32_t value) { 259 bool DartUtils::PostInt32(Dart_Port port_id, int32_t value) {
262 // Post a message with the integer value. 260 // Post a message with the integer value.
263 int32_t min = 0xc0000000; // -1073741824 261 int32_t min = 0xc0000000; // -1073741824
264 int32_t max = 0x3fffffff; // 1073741823 262 int32_t max = 0x3fffffff; // 1073741823
265 ASSERT(min <= value && value < max); 263 ASSERT(min <= value && value < max);
266 Dart_CObject object; 264 Dart_CObject object;
267 object.type = Dart_CObject::kInt32; 265 object.type = Dart_CObject::kInt32;
268 object.value.as_int32 = value; 266 object.value.as_int32 = value;
269 return Dart_PostCObject(port_id, &object); 267 return Dart_PostCObject(port_id, &object);
270 } 268 }
269
270
271 // Statically allocated Dart_CObject instances for immutable
272 // objects. As these will be used by different threads the use of
273 // these depends on the fact that the marking internally in the
274 // Dart_CObject structure is not marking simple value objects.
275 Dart_CObject CObject::api_null_ = { Dart_CObject::kNull , { 0 } };
276 Dart_CObject CObject::api_true_ = { Dart_CObject::kBool , { true } };
277 Dart_CObject CObject::api_false_ = { Dart_CObject::kBool, { false } };
278 CObject CObject::null_ = CObject(&api_null_);
279 CObject CObject::true_ = CObject(&api_true_);
280 CObject CObject::false_ = CObject(&api_false_);
281
282
283 CObject* CObject::Null() {
284 return &null_;
285 }
286
287
288 CObject* CObject::True() {
289 return &true_;
290 }
291
292
293 CObject* CObject::False() {
294 return &false_;
295 }
296
297
298 CObject* CObject::Bool(bool value) {
299 return value ? &true_ : &false_;
300 }
301
302
303 Dart_CObject* CObject::New(Dart_CObject::Type type, int additional_bytes) {
304 Dart_CObject* cobject = reinterpret_cast<Dart_CObject*>(
305 Dart_ScopeAllocate(sizeof(Dart_CObject) + additional_bytes));
306 cobject->type = type;
307 return cobject;
308 }
309
310
311 Dart_CObject* CObject::NewInt32(int32_t value) {
312 Dart_CObject* cobject = New(Dart_CObject::kInt32);
313 cobject->value.as_int32 = value;
314 return cobject;
315 }
316
317
318 Dart_CObject* CObject::NewInt64(int64_t value) {
319 Dart_CObject* cobject = New(Dart_CObject::kInt64);
320 cobject->value.as_int64 = value;
321 return cobject;
322 }
323
324
325 Dart_CObject* CObject::NewDouble(double value) {
326 Dart_CObject* cobject = New(Dart_CObject::kDouble);
327 cobject->value.as_double = value;
328 return cobject;
329 }
330
331
332 Dart_CObject* CObject::NewString(int length) {
333 Dart_CObject* cobject = New(Dart_CObject::kString, length + 1);
334 cobject->value.as_string = reinterpret_cast<char*>(cobject + 1);
335 return cobject;
336 }
337
338
339 Dart_CObject* CObject::NewString(const char* str) {
340 int length = strlen(str);
341 Dart_CObject* cobject = NewString(length);
342 memmove(cobject->value.as_string, str, length + 1);
343 return cobject;
344 }
345
346
347 Dart_CObject* CObject::NewArray(int length) {
348 Dart_CObject* cobject =
349 New(Dart_CObject::kArray, length * sizeof(Dart_CObject*)); // NOLINT
350 cobject->value.as_array.length = length;
351 cobject->value.as_array.values =
352 reinterpret_cast<Dart_CObject**>(cobject + 1);
353 return cobject;
354 }
OLDNEW
« runtime/bin/dartutils.h ('K') | « runtime/bin/dartutils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698