| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 // STRING_TYPE (if it is not a symbol). | 214 // STRING_TYPE (if it is not a symbol). |
| 215 // | 215 // |
| 216 // NOTE: The following things are some that depend on the string types having | 216 // NOTE: The following things are some that depend on the string types having |
| 217 // instance_types that are less than those of all other types: | 217 // instance_types that are less than those of all other types: |
| 218 // HeapObject::Size, HeapObject::IterateBody, the typeof operator, and | 218 // HeapObject::Size, HeapObject::IterateBody, the typeof operator, and |
| 219 // Object::IsString. | 219 // Object::IsString. |
| 220 // | 220 // |
| 221 // NOTE: Everything following JS_VALUE_TYPE is considered a | 221 // NOTE: Everything following JS_VALUE_TYPE is considered a |
| 222 // JSObject for GC purposes. The first four entries here have typeof | 222 // JSObject for GC purposes. The first four entries here have typeof |
| 223 // 'object', whereas JS_FUNCTION_TYPE has typeof 'function'. | 223 // 'object', whereas JS_FUNCTION_TYPE has typeof 'function'. |
| 224 #define INSTANCE_TYPE_LIST_ALL(V) \ | 224 #define INSTANCE_TYPE_LIST_ALL(V) \ |
| 225 V(SHORT_SYMBOL_TYPE) \ | 225 V(SYMBOL_TYPE) \ |
| 226 V(MEDIUM_SYMBOL_TYPE) \ | 226 V(ASCII_SYMBOL_TYPE) \ |
| 227 V(LONG_SYMBOL_TYPE) \ | 227 V(CONS_SYMBOL_TYPE) \ |
| 228 V(SHORT_ASCII_SYMBOL_TYPE) \ | 228 V(CONS_ASCII_SYMBOL_TYPE) \ |
| 229 V(MEDIUM_ASCII_SYMBOL_TYPE) \ | 229 V(EXTERNAL_SYMBOL_TYPE) \ |
| 230 V(LONG_ASCII_SYMBOL_TYPE) \ | 230 V(EXTERNAL_ASCII_SYMBOL_TYPE) \ |
| 231 V(SHORT_CONS_SYMBOL_TYPE) \ | 231 V(STRING_TYPE) \ |
| 232 V(MEDIUM_CONS_SYMBOL_TYPE) \ | 232 V(ASCII_STRING_TYPE) \ |
| 233 V(LONG_CONS_SYMBOL_TYPE) \ | 233 V(CONS_STRING_TYPE) \ |
| 234 V(SHORT_CONS_ASCII_SYMBOL_TYPE) \ | 234 V(CONS_ASCII_STRING_TYPE) \ |
| 235 V(MEDIUM_CONS_ASCII_SYMBOL_TYPE) \ | 235 V(EXTERNAL_STRING_TYPE) \ |
| 236 V(LONG_CONS_ASCII_SYMBOL_TYPE) \ | 236 V(EXTERNAL_ASCII_STRING_TYPE) \ |
| 237 V(SHORT_EXTERNAL_SYMBOL_TYPE) \ | 237 V(PRIVATE_EXTERNAL_ASCII_STRING_TYPE) \ |
| 238 V(MEDIUM_EXTERNAL_SYMBOL_TYPE) \ | 238 \ |
| 239 V(LONG_EXTERNAL_SYMBOL_TYPE) \ | 239 V(MAP_TYPE) \ |
| 240 V(SHORT_EXTERNAL_ASCII_SYMBOL_TYPE) \ | 240 V(HEAP_NUMBER_TYPE) \ |
| 241 V(MEDIUM_EXTERNAL_ASCII_SYMBOL_TYPE) \ | 241 V(FIXED_ARRAY_TYPE) \ |
| 242 V(LONG_EXTERNAL_ASCII_SYMBOL_TYPE) \ | 242 V(CODE_TYPE) \ |
| 243 V(SHORT_STRING_TYPE) \ | 243 V(JS_GLOBAL_PROPERTY_CELL_TYPE) \ |
| 244 V(MEDIUM_STRING_TYPE) \ | 244 V(ODDBALL_TYPE) \ |
| 245 V(LONG_STRING_TYPE) \ | 245 V(PROXY_TYPE) \ |
| 246 V(SHORT_ASCII_STRING_TYPE) \ | 246 V(BYTE_ARRAY_TYPE) \ |
| 247 V(MEDIUM_ASCII_STRING_TYPE) \ | 247 V(PIXEL_ARRAY_TYPE) \ |
| 248 V(LONG_ASCII_STRING_TYPE) \ | 248 /* Note: the order of these external array */ \ |
| 249 V(SHORT_CONS_STRING_TYPE) \ | 249 /* types is relied upon in */ \ |
| 250 V(MEDIUM_CONS_STRING_TYPE) \ | 250 /* Object::IsExternalArray(). */ \ |
| 251 V(LONG_CONS_STRING_TYPE) \ | 251 V(EXTERNAL_BYTE_ARRAY_TYPE) \ |
| 252 V(SHORT_CONS_ASCII_STRING_TYPE) \ | 252 V(EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE) \ |
| 253 V(MEDIUM_CONS_ASCII_STRING_TYPE) \ | 253 V(EXTERNAL_SHORT_ARRAY_TYPE) \ |
| 254 V(LONG_CONS_ASCII_STRING_TYPE) \ | 254 V(EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE) \ |
| 255 V(SHORT_EXTERNAL_STRING_TYPE) \ | 255 V(EXTERNAL_INT_ARRAY_TYPE) \ |
| 256 V(MEDIUM_EXTERNAL_STRING_TYPE) \ | 256 V(EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) \ |
| 257 V(LONG_EXTERNAL_STRING_TYPE) \ | 257 V(EXTERNAL_FLOAT_ARRAY_TYPE) \ |
| 258 V(SHORT_EXTERNAL_ASCII_STRING_TYPE) \ | 258 V(FILLER_TYPE) \ |
| 259 V(MEDIUM_EXTERNAL_ASCII_STRING_TYPE) \ | 259 \ |
| 260 V(LONG_EXTERNAL_ASCII_STRING_TYPE) \ | 260 V(ACCESSOR_INFO_TYPE) \ |
| 261 V(LONG_PRIVATE_EXTERNAL_ASCII_STRING_TYPE) \ | 261 V(ACCESS_CHECK_INFO_TYPE) \ |
| 262 \ | 262 V(INTERCEPTOR_INFO_TYPE) \ |
| 263 V(MAP_TYPE) \ | 263 V(SHARED_FUNCTION_INFO_TYPE) \ |
| 264 V(HEAP_NUMBER_TYPE) \ | 264 V(CALL_HANDLER_INFO_TYPE) \ |
| 265 V(FIXED_ARRAY_TYPE) \ | 265 V(FUNCTION_TEMPLATE_INFO_TYPE) \ |
| 266 V(CODE_TYPE) \ | 266 V(OBJECT_TEMPLATE_INFO_TYPE) \ |
| 267 V(JS_GLOBAL_PROPERTY_CELL_TYPE) \ | 267 V(SIGNATURE_INFO_TYPE) \ |
| 268 V(ODDBALL_TYPE) \ | 268 V(TYPE_SWITCH_INFO_TYPE) \ |
| 269 V(PROXY_TYPE) \ | 269 V(SCRIPT_TYPE) \ |
| 270 V(BYTE_ARRAY_TYPE) \ | 270 \ |
| 271 V(PIXEL_ARRAY_TYPE) \ | 271 V(JS_VALUE_TYPE) \ |
| 272 /* Note: the order of these external array */ \ | 272 V(JS_OBJECT_TYPE) \ |
| 273 /* types is relied upon in */ \ | 273 V(JS_CONTEXT_EXTENSION_OBJECT_TYPE) \ |
| 274 /* Object::IsExternalArray(). */ \ | 274 V(JS_GLOBAL_OBJECT_TYPE) \ |
| 275 V(EXTERNAL_BYTE_ARRAY_TYPE) \ | 275 V(JS_BUILTINS_OBJECT_TYPE) \ |
| 276 V(EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE) \ | 276 V(JS_GLOBAL_PROXY_TYPE) \ |
| 277 V(EXTERNAL_SHORT_ARRAY_TYPE) \ | 277 V(JS_ARRAY_TYPE) \ |
| 278 V(EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE) \ | 278 V(JS_REGEXP_TYPE) \ |
| 279 V(EXTERNAL_INT_ARRAY_TYPE) \ | 279 \ |
| 280 V(EXTERNAL_UNSIGNED_INT_ARRAY_TYPE) \ | 280 V(JS_FUNCTION_TYPE) \ |
| 281 V(EXTERNAL_FLOAT_ARRAY_TYPE) \ | |
| 282 V(FILLER_TYPE) \ | |
| 283 \ | |
| 284 V(ACCESSOR_INFO_TYPE) \ | |
| 285 V(ACCESS_CHECK_INFO_TYPE) \ | |
| 286 V(INTERCEPTOR_INFO_TYPE) \ | |
| 287 V(SHARED_FUNCTION_INFO_TYPE) \ | |
| 288 V(CALL_HANDLER_INFO_TYPE) \ | |
| 289 V(FUNCTION_TEMPLATE_INFO_TYPE) \ | |
| 290 V(OBJECT_TEMPLATE_INFO_TYPE) \ | |
| 291 V(SIGNATURE_INFO_TYPE) \ | |
| 292 V(TYPE_SWITCH_INFO_TYPE) \ | |
| 293 V(SCRIPT_TYPE) \ | |
| 294 \ | |
| 295 V(JS_VALUE_TYPE) \ | |
| 296 V(JS_OBJECT_TYPE) \ | |
| 297 V(JS_CONTEXT_EXTENSION_OBJECT_TYPE) \ | |
| 298 V(JS_GLOBAL_OBJECT_TYPE) \ | |
| 299 V(JS_BUILTINS_OBJECT_TYPE) \ | |
| 300 V(JS_GLOBAL_PROXY_TYPE) \ | |
| 301 V(JS_ARRAY_TYPE) \ | |
| 302 V(JS_REGEXP_TYPE) \ | |
| 303 \ | |
| 304 V(JS_FUNCTION_TYPE) \ | |
| 305 | 281 |
| 306 #ifdef ENABLE_DEBUGGER_SUPPORT | 282 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 307 #define INSTANCE_TYPE_LIST_DEBUGGER(V) \ | 283 #define INSTANCE_TYPE_LIST_DEBUGGER(V) \ |
| 308 V(DEBUG_INFO_TYPE) \ | 284 V(DEBUG_INFO_TYPE) \ |
| 309 V(BREAK_POINT_INFO_TYPE) | 285 V(BREAK_POINT_INFO_TYPE) |
| 310 #else | 286 #else |
| 311 #define INSTANCE_TYPE_LIST_DEBUGGER(V) | 287 #define INSTANCE_TYPE_LIST_DEBUGGER(V) |
| 312 #endif | 288 #endif |
| 313 | 289 |
| 314 #define INSTANCE_TYPE_LIST(V) \ | 290 #define INSTANCE_TYPE_LIST(V) \ |
| 315 INSTANCE_TYPE_LIST_ALL(V) \ | 291 INSTANCE_TYPE_LIST_ALL(V) \ |
| 316 INSTANCE_TYPE_LIST_DEBUGGER(V) | 292 INSTANCE_TYPE_LIST_DEBUGGER(V) |
| 317 | 293 |
| 318 | 294 |
| 319 // Since string types are not consecutive, this macro is used to | 295 // Since string types are not consecutive, this macro is used to |
| 320 // iterate over them. | 296 // iterate over them. |
| 321 #define STRING_TYPE_LIST(V) \ | 297 #define STRING_TYPE_LIST(V) \ |
| 322 V(SHORT_SYMBOL_TYPE, \ | 298 V(SYMBOL_TYPE, \ |
| 323 SeqTwoByteString::kAlignedSize, \ | 299 SeqTwoByteString::kAlignedSize, \ |
| 324 short_symbol, \ | 300 symbol, \ |
| 325 ShortSymbol) \ | 301 Symbol) \ |
| 326 V(MEDIUM_SYMBOL_TYPE, \ | 302 V(ASCII_SYMBOL_TYPE, \ |
| 303 SeqAsciiString::kAlignedSize, \ |
| 304 ascii_symbol, \ |
| 305 AsciiSymbol) \ |
| 306 V(CONS_SYMBOL_TYPE, \ |
| 307 ConsString::kSize, \ |
| 308 cons_symbol, \ |
| 309 ConsSymbol) \ |
| 310 V(CONS_ASCII_SYMBOL_TYPE, \ |
| 311 ConsString::kSize, \ |
| 312 cons_ascii_symbol, \ |
| 313 ConsAsciiSymbol) \ |
| 314 V(EXTERNAL_SYMBOL_TYPE, \ |
| 315 ExternalTwoByteString::kSize, \ |
| 316 external_symbol, \ |
| 317 ExternalSymbol) \ |
| 318 V(EXTERNAL_ASCII_SYMBOL_TYPE, \ |
| 319 ExternalAsciiString::kSize, \ |
| 320 external_ascii_symbol, \ |
| 321 ExternalAsciiSymbol) \ |
| 322 V(STRING_TYPE, \ |
| 327 SeqTwoByteString::kAlignedSize, \ | 323 SeqTwoByteString::kAlignedSize, \ |
| 328 medium_symbol, \ | 324 string, \ |
| 329 MediumSymbol) \ | 325 String) \ |
| 330 V(LONG_SYMBOL_TYPE, \ | 326 V(ASCII_STRING_TYPE, \ |
| 331 SeqTwoByteString::kAlignedSize, \ | |
| 332 long_symbol, \ | |
| 333 LongSymbol) \ | |
| 334 V(SHORT_ASCII_SYMBOL_TYPE, \ | |
| 335 SeqAsciiString::kAlignedSize, \ | 327 SeqAsciiString::kAlignedSize, \ |
| 336 short_ascii_symbol, \ | 328 ascii_string, \ |
| 337 ShortAsciiSymbol) \ | 329 AsciiString) \ |
| 338 V(MEDIUM_ASCII_SYMBOL_TYPE, \ | 330 V(CONS_STRING_TYPE, \ |
| 339 SeqAsciiString::kAlignedSize, \ | |
| 340 medium_ascii_symbol, \ | |
| 341 MediumAsciiSymbol) \ | |
| 342 V(LONG_ASCII_SYMBOL_TYPE, \ | |
| 343 SeqAsciiString::kAlignedSize, \ | |
| 344 long_ascii_symbol, \ | |
| 345 LongAsciiSymbol) \ | |
| 346 V(SHORT_CONS_SYMBOL_TYPE, \ | |
| 347 ConsString::kSize, \ | 331 ConsString::kSize, \ |
| 348 short_cons_symbol, \ | 332 cons_string, \ |
| 349 ShortConsSymbol) \ | 333 ConsString) \ |
| 350 V(MEDIUM_CONS_SYMBOL_TYPE, \ | 334 V(CONS_ASCII_STRING_TYPE, \ |
| 351 ConsString::kSize, \ | 335 ConsString::kSize, \ |
| 352 medium_cons_symbol, \ | 336 cons_ascii_string, \ |
| 353 MediumConsSymbol) \ | 337 ConsAsciiString) \ |
| 354 V(LONG_CONS_SYMBOL_TYPE, \ | 338 V(EXTERNAL_STRING_TYPE, \ |
| 355 ConsString::kSize, \ | |
| 356 long_cons_symbol, \ | |
| 357 LongConsSymbol) \ | |
| 358 V(SHORT_CONS_ASCII_SYMBOL_TYPE, \ | |
| 359 ConsString::kSize, \ | |
| 360 short_cons_ascii_symbol, \ | |
| 361 ShortConsAsciiSymbol) \ | |
| 362 V(MEDIUM_CONS_ASCII_SYMBOL_TYPE, \ | |
| 363 ConsString::kSize, \ | |
| 364 medium_cons_ascii_symbol, \ | |
| 365 MediumConsAsciiSymbol) \ | |
| 366 V(LONG_CONS_ASCII_SYMBOL_TYPE, \ | |
| 367 ConsString::kSize, \ | |
| 368 long_cons_ascii_symbol, \ | |
| 369 LongConsAsciiSymbol) \ | |
| 370 V(SHORT_EXTERNAL_SYMBOL_TYPE, \ | |
| 371 ExternalTwoByteString::kSize, \ | 339 ExternalTwoByteString::kSize, \ |
| 372 short_external_symbol, \ | 340 external_string, \ |
| 373 ShortExternalSymbol) \ | 341 ExternalString) \ |
| 374 V(MEDIUM_EXTERNAL_SYMBOL_TYPE, \ | 342 V(EXTERNAL_ASCII_STRING_TYPE, \ |
| 375 ExternalTwoByteString::kSize, \ | |
| 376 medium_external_symbol, \ | |
| 377 MediumExternalSymbol) \ | |
| 378 V(LONG_EXTERNAL_SYMBOL_TYPE, \ | |
| 379 ExternalTwoByteString::kSize, \ | |
| 380 long_external_symbol, \ | |
| 381 LongExternalSymbol) \ | |
| 382 V(SHORT_EXTERNAL_ASCII_SYMBOL_TYPE, \ | |
| 383 ExternalAsciiString::kSize, \ | 343 ExternalAsciiString::kSize, \ |
| 384 short_external_ascii_symbol, \ | 344 external_ascii_string, \ |
| 385 ShortExternalAsciiSymbol) \ | 345 ExternalAsciiString) \ |
| 386 V(MEDIUM_EXTERNAL_ASCII_SYMBOL_TYPE, \ | |
| 387 ExternalAsciiString::kSize, \ | |
| 388 medium_external_ascii_symbol, \ | |
| 389 MediumExternalAsciiSymbol) \ | |
| 390 V(LONG_EXTERNAL_ASCII_SYMBOL_TYPE, \ | |
| 391 ExternalAsciiString::kSize, \ | |
| 392 long_external_ascii_symbol, \ | |
| 393 LongExternalAsciiSymbol) \ | |
| 394 V(SHORT_STRING_TYPE, \ | |
| 395 SeqTwoByteString::kAlignedSize, \ | |
| 396 short_string, \ | |
| 397 ShortString) \ | |
| 398 V(MEDIUM_STRING_TYPE, \ | |
| 399 SeqTwoByteString::kAlignedSize, \ | |
| 400 medium_string, \ | |
| 401 MediumString) \ | |
| 402 V(LONG_STRING_TYPE, \ | |
| 403 SeqTwoByteString::kAlignedSize, \ | |
| 404 long_string, \ | |
| 405 LongString) \ | |
| 406 V(SHORT_ASCII_STRING_TYPE, \ | |
| 407 SeqAsciiString::kAlignedSize, \ | |
| 408 short_ascii_string, \ | |
| 409 ShortAsciiString) \ | |
| 410 V(MEDIUM_ASCII_STRING_TYPE, \ | |
| 411 SeqAsciiString::kAlignedSize, \ | |
| 412 medium_ascii_string, \ | |
| 413 MediumAsciiString) \ | |
| 414 V(LONG_ASCII_STRING_TYPE, \ | |
| 415 SeqAsciiString::kAlignedSize, \ | |
| 416 long_ascii_string, \ | |
| 417 LongAsciiString) \ | |
| 418 V(SHORT_CONS_STRING_TYPE, \ | |
| 419 ConsString::kSize, \ | |
| 420 short_cons_string, \ | |
| 421 ShortConsString) \ | |
| 422 V(MEDIUM_CONS_STRING_TYPE, \ | |
| 423 ConsString::kSize, \ | |
| 424 medium_cons_string, \ | |
| 425 MediumConsString) \ | |
| 426 V(LONG_CONS_STRING_TYPE, \ | |
| 427 ConsString::kSize, \ | |
| 428 long_cons_string, \ | |
| 429 LongConsString) \ | |
| 430 V(SHORT_CONS_ASCII_STRING_TYPE, \ | |
| 431 ConsString::kSize, \ | |
| 432 short_cons_ascii_string, \ | |
| 433 ShortConsAsciiString) \ | |
| 434 V(MEDIUM_CONS_ASCII_STRING_TYPE, \ | |
| 435 ConsString::kSize, \ | |
| 436 medium_cons_ascii_string, \ | |
| 437 MediumConsAsciiString) \ | |
| 438 V(LONG_CONS_ASCII_STRING_TYPE, \ | |
| 439 ConsString::kSize, \ | |
| 440 long_cons_ascii_string, \ | |
| 441 LongConsAsciiString) \ | |
| 442 V(SHORT_EXTERNAL_STRING_TYPE, \ | |
| 443 ExternalTwoByteString::kSize, \ | |
| 444 short_external_string, \ | |
| 445 ShortExternalString) \ | |
| 446 V(MEDIUM_EXTERNAL_STRING_TYPE, \ | |
| 447 ExternalTwoByteString::kSize, \ | |
| 448 medium_external_string, \ | |
| 449 MediumExternalString) \ | |
| 450 V(LONG_EXTERNAL_STRING_TYPE, \ | |
| 451 ExternalTwoByteString::kSize, \ | |
| 452 long_external_string, \ | |
| 453 LongExternalString) \ | |
| 454 V(SHORT_EXTERNAL_ASCII_STRING_TYPE, \ | |
| 455 ExternalAsciiString::kSize, \ | |
| 456 short_external_ascii_string, \ | |
| 457 ShortExternalAsciiString) \ | |
| 458 V(MEDIUM_EXTERNAL_ASCII_STRING_TYPE, \ | |
| 459 ExternalAsciiString::kSize, \ | |
| 460 medium_external_ascii_string, \ | |
| 461 MediumExternalAsciiString) \ | |
| 462 V(LONG_EXTERNAL_ASCII_STRING_TYPE, \ | |
| 463 ExternalAsciiString::kSize, \ | |
| 464 long_external_ascii_string, \ | |
| 465 LongExternalAsciiString) | |
| 466 | 346 |
| 467 // A struct is a simple object a set of object-valued fields. Including an | 347 // A struct is a simple object a set of object-valued fields. Including an |
| 468 // object type in this causes the compiler to generate most of the boilerplate | 348 // object type in this causes the compiler to generate most of the boilerplate |
| 469 // code for the class including allocation and garbage collection routines, | 349 // code for the class including allocation and garbage collection routines, |
| 470 // casts and predicates. All you need to define is the class, methods and | 350 // casts and predicates. All you need to define is the class, methods and |
| 471 // object verification routines. Easy, no? | 351 // object verification routines. Easy, no? |
| 472 // | 352 // |
| 473 // Note that for subtle reasons related to the ordering or numerical values of | 353 // Note that for subtle reasons related to the ordering or numerical values of |
| 474 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST | 354 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST |
| 475 // manually. | 355 // manually. |
| 476 #define STRUCT_LIST_ALL(V) \ | 356 #define STRUCT_LIST_ALL(V) \ |
| 477 V(ACCESSOR_INFO, AccessorInfo, accessor_info) \ | 357 V(ACCESSOR_INFO, AccessorInfo, accessor_info) \ |
| 478 V(ACCESS_CHECK_INFO, AccessCheckInfo, access_check_info) \ | 358 V(ACCESS_CHECK_INFO, AccessCheckInfo, access_check_info) \ |
| 479 V(INTERCEPTOR_INFO, InterceptorInfo, interceptor_info) \ | 359 V(INTERCEPTOR_INFO, InterceptorInfo, interceptor_info) \ |
| 480 V(CALL_HANDLER_INFO, CallHandlerInfo, call_handler_info) \ | 360 V(CALL_HANDLER_INFO, CallHandlerInfo, call_handler_info) \ |
| 481 V(FUNCTION_TEMPLATE_INFO, FunctionTemplateInfo, function_template_info) \ | 361 V(FUNCTION_TEMPLATE_INFO, FunctionTemplateInfo, function_template_info) \ |
| 482 V(OBJECT_TEMPLATE_INFO, ObjectTemplateInfo, object_template_info) \ | 362 V(OBJECT_TEMPLATE_INFO, ObjectTemplateInfo, object_template_info) \ |
| 483 V(SIGNATURE_INFO, SignatureInfo, signature_info) \ | 363 V(SIGNATURE_INFO, SignatureInfo, signature_info) \ |
| 484 V(TYPE_SWITCH_INFO, TypeSwitchInfo, type_switch_info) \ | 364 V(TYPE_SWITCH_INFO, TypeSwitchInfo, type_switch_info) \ |
| 485 V(SCRIPT, Script, script) | 365 V(SCRIPT, Script, script) |
| 486 | 366 |
| 487 #ifdef ENABLE_DEBUGGER_SUPPORT | 367 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 488 #define STRUCT_LIST_DEBUGGER(V) \ | 368 #define STRUCT_LIST_DEBUGGER(V) \ |
| 489 V(DEBUG_INFO, DebugInfo, debug_info) \ | 369 V(DEBUG_INFO, DebugInfo, debug_info) \ |
| 490 V(BREAK_POINT_INFO, BreakPointInfo, break_point_info) | 370 V(BREAK_POINT_INFO, BreakPointInfo, break_point_info) |
| 491 #else | 371 #else |
| 492 #define STRUCT_LIST_DEBUGGER(V) | 372 #define STRUCT_LIST_DEBUGGER(V) |
| 493 #endif | 373 #endif |
| 494 | 374 |
| 495 #define STRUCT_LIST(V) \ | 375 #define STRUCT_LIST(V) \ |
| 496 STRUCT_LIST_ALL(V) \ | 376 STRUCT_LIST_ALL(V) \ |
| 497 STRUCT_LIST_DEBUGGER(V) | 377 STRUCT_LIST_DEBUGGER(V) |
| 498 | 378 |
| 499 // We use the full 8 bits of the instance_type field to encode heap object | 379 // We use the full 8 bits of the instance_type field to encode heap object |
| 500 // instance types. The high-order bit (bit 7) is set if the object is not a | 380 // instance types. The high-order bit (bit 7) is set if the object is not a |
| 501 // string, and cleared if it is a string. | 381 // string, and cleared if it is a string. |
| 502 const uint32_t kIsNotStringMask = 0x80; | 382 const uint32_t kIsNotStringMask = 0x80; |
| 503 const uint32_t kStringTag = 0x0; | 383 const uint32_t kStringTag = 0x0; |
| 504 const uint32_t kNotStringTag = 0x80; | 384 const uint32_t kNotStringTag = 0x80; |
| 505 | 385 |
| 506 // If bit 7 is clear, bit 5 indicates that the string is a symbol (if set) or | 386 // If bit 7 is clear, bit 5 indicates that the string is a symbol (if set) or |
| 507 // not (if cleared). | 387 // not (if cleared). |
| 508 const uint32_t kIsSymbolMask = 0x20; | 388 const uint32_t kIsSymbolMask = 0x20; |
| 509 const uint32_t kNotSymbolTag = 0x0; | 389 const uint32_t kNotSymbolTag = 0x0; |
| 510 const uint32_t kSymbolTag = 0x20; | 390 const uint32_t kSymbolTag = 0x20; |
| 511 | 391 |
| 512 // If bit 7 is clear, bits 3 and 4 are the string's size (short, medium or | |
| 513 // long). These values are very special in that they are also used to shift | |
| 514 // the length field to get the length, removing the hash value. This avoids | |
| 515 // using if or switch when getting the length of a string. | |
| 516 const uint32_t kStringSizeMask = 0x18; | |
| 517 const uint32_t kShortStringTag = 0x18; | |
| 518 const uint32_t kMediumStringTag = 0x10; | |
| 519 const uint32_t kLongStringTag = 0x00; | |
| 520 | |
| 521 // If bit 7 is clear then bit 2 indicates whether the string consists of | 392 // If bit 7 is clear then bit 2 indicates whether the string consists of |
| 522 // two-byte characters or one-byte characters. | 393 // two-byte characters or one-byte characters. |
| 523 const uint32_t kStringEncodingMask = 0x4; | 394 const uint32_t kStringEncodingMask = 0x4; |
| 524 const uint32_t kTwoByteStringTag = 0x0; | 395 const uint32_t kTwoByteStringTag = 0x0; |
| 525 const uint32_t kAsciiStringTag = 0x4; | 396 const uint32_t kAsciiStringTag = 0x4; |
| 526 | 397 |
| 527 // If bit 7 is clear, the low-order 2 bits indicate the representation | 398 // If bit 7 is clear, the low-order 2 bits indicate the representation |
| 528 // of the string. | 399 // of the string. |
| 529 const uint32_t kStringRepresentationMask = 0x03; | 400 const uint32_t kStringRepresentationMask = 0x03; |
| 530 enum StringRepresentationTag { | 401 enum StringRepresentationTag { |
| 531 kSeqStringTag = 0x0, | 402 kSeqStringTag = 0x0, |
| 532 kConsStringTag = 0x1, | 403 kConsStringTag = 0x1, |
| 533 kExternalStringTag = 0x3 | 404 kExternalStringTag = 0x3 |
| 534 }; | 405 }; |
| 535 | 406 |
| 536 | 407 |
| 537 // A ConsString with an empty string as the right side is a candidate | 408 // A ConsString with an empty string as the right side is a candidate |
| 538 // for being shortcut by the garbage collector unless it is a | 409 // for being shortcut by the garbage collector unless it is a |
| 539 // symbol. It's not common to have non-flat symbols, so we do not | 410 // symbol. It's not common to have non-flat symbols, so we do not |
| 540 // shortcut them thereby avoiding turning symbols into strings. See | 411 // shortcut them thereby avoiding turning symbols into strings. See |
| 541 // heap.cc and mark-compact.cc. | 412 // heap.cc and mark-compact.cc. |
| 542 const uint32_t kShortcutTypeMask = | 413 const uint32_t kShortcutTypeMask = |
| 543 kIsNotStringMask | | 414 kIsNotStringMask | |
| 544 kIsSymbolMask | | 415 kIsSymbolMask | |
| 545 kStringRepresentationMask; | 416 kStringRepresentationMask; |
| 546 const uint32_t kShortcutTypeTag = kConsStringTag; | 417 const uint32_t kShortcutTypeTag = kConsStringTag; |
| 547 | 418 |
| 548 | 419 |
| 549 enum InstanceType { | 420 enum InstanceType { |
| 550 SHORT_SYMBOL_TYPE = kShortStringTag | kSymbolTag | kSeqStringTag, | 421 SYMBOL_TYPE = kSymbolTag | kSeqStringTag, |
| 551 MEDIUM_SYMBOL_TYPE = kMediumStringTag | kSymbolTag | kSeqStringTag, | 422 ASCII_SYMBOL_TYPE = kAsciiStringTag | kSymbolTag | kSeqStringTag, |
| 552 LONG_SYMBOL_TYPE = kLongStringTag | kSymbolTag | kSeqStringTag, | 423 CONS_SYMBOL_TYPE = kSymbolTag | kConsStringTag, |
| 553 SHORT_ASCII_SYMBOL_TYPE = | 424 CONS_ASCII_SYMBOL_TYPE = kAsciiStringTag | kSymbolTag | kConsStringTag, |
| 554 kShortStringTag | kAsciiStringTag | kSymbolTag | kSeqStringTag, | 425 EXTERNAL_SYMBOL_TYPE = kSymbolTag | kExternalStringTag, |
| 555 MEDIUM_ASCII_SYMBOL_TYPE = | 426 EXTERNAL_ASCII_SYMBOL_TYPE = |
| 556 kMediumStringTag | kAsciiStringTag | kSymbolTag | kSeqStringTag, | 427 kAsciiStringTag | kSymbolTag | kExternalStringTag, |
| 557 LONG_ASCII_SYMBOL_TYPE = | 428 STRING_TYPE = kSeqStringTag, |
| 558 kLongStringTag | kAsciiStringTag | kSymbolTag | kSeqStringTag, | 429 ASCII_STRING_TYPE = kAsciiStringTag | kSeqStringTag, |
| 559 SHORT_CONS_SYMBOL_TYPE = kShortStringTag | kSymbolTag | kConsStringTag, | 430 CONS_STRING_TYPE = kConsStringTag, |
| 560 MEDIUM_CONS_SYMBOL_TYPE = kMediumStringTag | kSymbolTag | kConsStringTag, | 431 CONS_ASCII_STRING_TYPE = kAsciiStringTag | kConsStringTag, |
| 561 LONG_CONS_SYMBOL_TYPE = kLongStringTag | kSymbolTag | kConsStringTag, | 432 EXTERNAL_STRING_TYPE = kExternalStringTag, |
| 562 SHORT_CONS_ASCII_SYMBOL_TYPE = | 433 EXTERNAL_ASCII_STRING_TYPE = kAsciiStringTag | kExternalStringTag, |
| 563 kShortStringTag | kAsciiStringTag | kSymbolTag | kConsStringTag, | 434 PRIVATE_EXTERNAL_ASCII_STRING_TYPE = EXTERNAL_ASCII_STRING_TYPE, |
| 564 MEDIUM_CONS_ASCII_SYMBOL_TYPE = | |
| 565 kMediumStringTag | kAsciiStringTag | kSymbolTag | kConsStringTag, | |
| 566 LONG_CONS_ASCII_SYMBOL_TYPE = | |
| 567 kLongStringTag | kAsciiStringTag | kSymbolTag | kConsStringTag, | |
| 568 SHORT_EXTERNAL_SYMBOL_TYPE = | |
| 569 kShortStringTag | kSymbolTag | kExternalStringTag, | |
| 570 MEDIUM_EXTERNAL_SYMBOL_TYPE = | |
| 571 kMediumStringTag | kSymbolTag | kExternalStringTag, | |
| 572 LONG_EXTERNAL_SYMBOL_TYPE = kLongStringTag | kSymbolTag | kExternalStringTag, | |
| 573 SHORT_EXTERNAL_ASCII_SYMBOL_TYPE = | |
| 574 kShortStringTag | kAsciiStringTag | kSymbolTag | kExternalStringTag, | |
| 575 MEDIUM_EXTERNAL_ASCII_SYMBOL_TYPE = | |
| 576 kMediumStringTag | kAsciiStringTag | kSymbolTag | kExternalStringTag, | |
| 577 LONG_EXTERNAL_ASCII_SYMBOL_TYPE = | |
| 578 kLongStringTag | kAsciiStringTag | kSymbolTag | kExternalStringTag, | |
| 579 SHORT_STRING_TYPE = kShortStringTag | kSeqStringTag, | |
| 580 MEDIUM_STRING_TYPE = kMediumStringTag | kSeqStringTag, | |
| 581 LONG_STRING_TYPE = kLongStringTag | kSeqStringTag, | |
| 582 SHORT_ASCII_STRING_TYPE = kShortStringTag | kAsciiStringTag | kSeqStringTag, | |
| 583 MEDIUM_ASCII_STRING_TYPE = kMediumStringTag | kAsciiStringTag | kSeqStringTag, | |
| 584 LONG_ASCII_STRING_TYPE = kLongStringTag | kAsciiStringTag | kSeqStringTag, | |
| 585 SHORT_CONS_STRING_TYPE = kShortStringTag | kConsStringTag, | |
| 586 MEDIUM_CONS_STRING_TYPE = kMediumStringTag | kConsStringTag, | |
| 587 LONG_CONS_STRING_TYPE = kLongStringTag | kConsStringTag, | |
| 588 SHORT_CONS_ASCII_STRING_TYPE = | |
| 589 kShortStringTag | kAsciiStringTag | kConsStringTag, | |
| 590 MEDIUM_CONS_ASCII_STRING_TYPE = | |
| 591 kMediumStringTag | kAsciiStringTag | kConsStringTag, | |
| 592 LONG_CONS_ASCII_STRING_TYPE = | |
| 593 kLongStringTag | kAsciiStringTag | kConsStringTag, | |
| 594 SHORT_EXTERNAL_STRING_TYPE = kShortStringTag | kExternalStringTag, | |
| 595 MEDIUM_EXTERNAL_STRING_TYPE = kMediumStringTag | kExternalStringTag, | |
| 596 LONG_EXTERNAL_STRING_TYPE = kLongStringTag | kExternalStringTag, | |
| 597 SHORT_EXTERNAL_ASCII_STRING_TYPE = | |
| 598 kShortStringTag | kAsciiStringTag | kExternalStringTag, | |
| 599 MEDIUM_EXTERNAL_ASCII_STRING_TYPE = | |
| 600 kMediumStringTag | kAsciiStringTag | kExternalStringTag, | |
| 601 LONG_EXTERNAL_ASCII_STRING_TYPE = | |
| 602 kLongStringTag | kAsciiStringTag | kExternalStringTag, | |
| 603 LONG_PRIVATE_EXTERNAL_ASCII_STRING_TYPE = LONG_EXTERNAL_ASCII_STRING_TYPE, | |
| 604 | 435 |
| 605 MAP_TYPE = kNotStringTag, | 436 MAP_TYPE = kNotStringTag, |
| 606 HEAP_NUMBER_TYPE, | 437 HEAP_NUMBER_TYPE, |
| 607 FIXED_ARRAY_TYPE, | 438 FIXED_ARRAY_TYPE, |
| 608 CODE_TYPE, | 439 CODE_TYPE, |
| 609 ODDBALL_TYPE, | 440 ODDBALL_TYPE, |
| 610 JS_GLOBAL_PROPERTY_CELL_TYPE, | 441 JS_GLOBAL_PROPERTY_CELL_TYPE, |
| 611 PROXY_TYPE, | 442 PROXY_TYPE, |
| 612 BYTE_ARRAY_TYPE, | 443 BYTE_ARRAY_TYPE, |
| 613 PIXEL_ARRAY_TYPE, | 444 PIXEL_ARRAY_TYPE, |
| (...skipping 3289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3903 // A string value is a member of the type String and is a finite | 3734 // A string value is a member of the type String and is a finite |
| 3904 // ordered sequence of zero or more 16-bit unsigned integer values. | 3735 // ordered sequence of zero or more 16-bit unsigned integer values. |
| 3905 // | 3736 // |
| 3906 // All string values have a length field. | 3737 // All string values have a length field. |
| 3907 class String: public HeapObject { | 3738 class String: public HeapObject { |
| 3908 public: | 3739 public: |
| 3909 // Get and set the length of the string. | 3740 // Get and set the length of the string. |
| 3910 inline int length(); | 3741 inline int length(); |
| 3911 inline void set_length(int value); | 3742 inline void set_length(int value); |
| 3912 | 3743 |
| 3913 // Get and set the uninterpreted length field of the string. Notice | 3744 // Get and set the hash field of the string. |
| 3914 // that the length field is also used to cache the hash value of | 3745 inline uint32_t hash_field(); |
| 3915 // strings. In order to get or set the actual length of the string | 3746 inline void set_hash_field(uint32_t value); |
| 3916 // use the length() and set_length methods. | |
| 3917 inline uint32_t length_field(); | |
| 3918 inline void set_length_field(uint32_t value); | |
| 3919 | 3747 |
| 3920 inline bool IsAsciiRepresentation(); | 3748 inline bool IsAsciiRepresentation(); |
| 3921 inline bool IsTwoByteRepresentation(); | 3749 inline bool IsTwoByteRepresentation(); |
| 3922 | 3750 |
| 3923 // Get and set individual two byte chars in the string. | 3751 // Get and set individual two byte chars in the string. |
| 3924 inline void Set(int index, uint16_t value); | 3752 inline void Set(int index, uint16_t value); |
| 3925 // Get individual two byte char in the string. Repeated calls | 3753 // Get individual two byte char in the string. Repeated calls |
| 3926 // to this method are not efficient unless the string is flat. | 3754 // to this method are not efficient unless the string is flat. |
| 3927 inline uint16_t Get(int index); | 3755 inline uint16_t Get(int index); |
| 3928 | 3756 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3979 // do any heap allocations. This is useful when printing stack traces. | 3807 // do any heap allocations. This is useful when printing stack traces. |
| 3980 SmartPointer<uc16> ToWideCString( | 3808 SmartPointer<uc16> ToWideCString( |
| 3981 RobustnessFlag robustness_flag = FAST_STRING_TRAVERSAL); | 3809 RobustnessFlag robustness_flag = FAST_STRING_TRAVERSAL); |
| 3982 | 3810 |
| 3983 // Tells whether the hash code has been computed. | 3811 // Tells whether the hash code has been computed. |
| 3984 inline bool HasHashCode(); | 3812 inline bool HasHashCode(); |
| 3985 | 3813 |
| 3986 // Returns a hash value used for the property table | 3814 // Returns a hash value used for the property table |
| 3987 inline uint32_t Hash(); | 3815 inline uint32_t Hash(); |
| 3988 | 3816 |
| 3989 static uint32_t ComputeLengthAndHashField(unibrow::CharacterStream* buffer, | 3817 static uint32_t ComputeHashField(unibrow::CharacterStream* buffer, |
| 3990 int length); | 3818 int length); |
| 3991 | 3819 |
| 3992 static bool ComputeArrayIndex(unibrow::CharacterStream* buffer, | 3820 static bool ComputeArrayIndex(unibrow::CharacterStream* buffer, |
| 3993 uint32_t* index, | 3821 uint32_t* index, |
| 3994 int length); | 3822 int length); |
| 3995 | 3823 |
| 3996 // Externalization. | 3824 // Externalization. |
| 3997 bool MakeExternal(v8::String::ExternalStringResource* resource); | 3825 bool MakeExternal(v8::String::ExternalStringResource* resource); |
| 3998 bool MakeExternal(v8::String::ExternalAsciiStringResource* resource); | 3826 bool MakeExternal(v8::String::ExternalAsciiStringResource* resource); |
| 3999 | 3827 |
| 4000 // Conversion. | 3828 // Conversion. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 4011 // Dispatched behavior. | 3839 // Dispatched behavior. |
| 4012 void StringShortPrint(StringStream* accumulator); | 3840 void StringShortPrint(StringStream* accumulator); |
| 4013 #ifdef DEBUG | 3841 #ifdef DEBUG |
| 4014 void StringPrint(); | 3842 void StringPrint(); |
| 4015 void StringVerify(); | 3843 void StringVerify(); |
| 4016 #endif | 3844 #endif |
| 4017 inline bool IsFlat(); | 3845 inline bool IsFlat(); |
| 4018 | 3846 |
| 4019 // Layout description. | 3847 // Layout description. |
| 4020 static const int kLengthOffset = HeapObject::kHeaderSize; | 3848 static const int kLengthOffset = HeapObject::kHeaderSize; |
| 4021 static const int kSize = kLengthOffset + kIntSize; | 3849 static const int kHashFieldOffset = kLengthOffset + kIntSize; |
| 3850 static const int kSize = kHashFieldOffset + kIntSize; |
| 4022 // Notice: kSize is not pointer-size aligned if pointers are 64-bit. | 3851 // Notice: kSize is not pointer-size aligned if pointers are 64-bit. |
| 4023 | 3852 |
| 4024 // Maximum number of characters to consider when trying to convert a string | 3853 // Maximum number of characters to consider when trying to convert a string |
| 4025 // value into an array index. | 3854 // value into an array index. |
| 4026 static const int kMaxArrayIndexSize = 10; | 3855 static const int kMaxArrayIndexSize = 10; |
| 4027 | 3856 |
| 4028 // Max ascii char code. | 3857 // Max ascii char code. |
| 4029 static const int kMaxAsciiCharCode = unibrow::Utf8::kMaxOneByteChar; | 3858 static const int kMaxAsciiCharCode = unibrow::Utf8::kMaxOneByteChar; |
| 4030 static const unsigned kMaxAsciiCharCodeU = unibrow::Utf8::kMaxOneByteChar; | 3859 static const unsigned kMaxAsciiCharCodeU = unibrow::Utf8::kMaxOneByteChar; |
| 4031 static const int kMaxUC16CharCode = 0xffff; | 3860 static const int kMaxUC16CharCode = 0xffff; |
| 4032 | 3861 |
| 4033 // Minimum length for a cons string. | 3862 // Minimum length for a cons string. |
| 4034 static const int kMinNonFlatLength = 13; | 3863 static const int kMinNonFlatLength = 13; |
| 4035 | 3864 |
| 4036 // Mask constant for checking if a string has a computed hash code | 3865 // Mask constant for checking if a string has a computed hash code |
| 4037 // and if it is an array index. The least significant bit indicates | 3866 // and if it is an array index. The least significant bit indicates |
| 4038 // whether a hash code has been computed. If the hash code has been | 3867 // whether a hash code has been computed. If the hash code has been |
| 4039 // computed the 2nd bit tells whether the string can be used as an | 3868 // computed the 2nd bit tells whether the string can be used as an |
| 4040 // array index. | 3869 // array index. |
| 4041 static const int kHashComputedMask = 1; | 3870 static const int kHashComputedMask = 1; |
| 4042 static const int kIsArrayIndexMask = 1 << 1; | 3871 static const int kIsArrayIndexMask = 1 << 1; |
| 4043 static const int kNofLengthBitFields = 2; | 3872 static const int kNofLengthBitFields = 2; |
| 4044 | 3873 |
| 3874 // Shift constant retrieving hash code from hash field. |
| 3875 static const int kHashShift = kNofLengthBitFields; |
| 3876 |
| 4045 // Array index strings this short can keep their index in the hash | 3877 // Array index strings this short can keep their index in the hash |
| 4046 // field. | 3878 // field. |
| 4047 static const int kMaxCachedArrayIndexLength = 7; | 3879 static const int kMaxCachedArrayIndexLength = 7; |
| 4048 | 3880 |
| 4049 // Shift constants for retrieving length and hash code from | 3881 // For strings which are array indexes the hash value has the string length |
| 4050 // length/hash field. | 3882 // mixed into the hash, mainly to avoid a hash value of zero which would be |
| 4051 static const int kHashShift = kNofLengthBitFields; | 3883 // the case for the string '0'. 24 bits are used for the array index value. |
| 4052 static const int kShortLengthShift = kHashShift + kShortStringTag; | 3884 static const int kArrayIndexHashLengthShift = 24 + kNofLengthBitFields; |
| 4053 static const int kMediumLengthShift = kHashShift + kMediumStringTag; | 3885 static const int kArrayIndexHashMask = (1 << kArrayIndexHashLengthShift) - 1; |
| 4054 static const int kLongLengthShift = kHashShift + kLongStringTag; | 3886 static const int kArrayIndexValueBits = |
| 3887 kArrayIndexHashLengthShift - kHashShift; |
| 4055 | 3888 |
| 4056 // Maximal string length that can be stored in the hash/length field for | 3889 // Value of empty hash field indicating that the hash is not computed. |
| 4057 // different types of strings. | 3890 static const int kEmptyHashField = 0; |
| 4058 static const int kMaxShortSize = (1 << (32 - kShortLengthShift)) - 1; | 3891 |
| 4059 static const int kMaxMediumSize = (1 << (32 - kMediumLengthShift)) - 1; | 3892 // Maximal string length. |
| 4060 static const int kMaxLength = (1 << (32 - kLongLengthShift)) - 1; | 3893 static const int kMaxLength = (1 << (32 - 2)) - 1; |
| 3894 |
| 3895 // Max length for computing hash. For strings longer than this limit the |
| 3896 // string length is used as the hash value. |
| 3897 static const int kMaxHashCalcLength = 16383; |
| 4061 | 3898 |
| 4062 // Limit for truncation in short printing. | 3899 // Limit for truncation in short printing. |
| 4063 static const int kMaxShortPrintLength = 1024; | 3900 static const int kMaxShortPrintLength = 1024; |
| 4064 | 3901 |
| 4065 // Support for regular expressions. | 3902 // Support for regular expressions. |
| 4066 const uc16* GetTwoByteData(); | 3903 const uc16* GetTwoByteData(); |
| 4067 const uc16* GetTwoByteData(unsigned start); | 3904 const uc16* GetTwoByteData(unsigned start); |
| 4068 | 3905 |
| 4069 // Support for StringInputBuffer | 3906 // Support for StringInputBuffer |
| 4070 static const unibrow::byte* ReadBlock(String* input, | 3907 static const unibrow::byte* ReadBlock(String* input, |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4332 void ExternalAsciiStringIterateBody(ObjectVisitor* v); | 4169 void ExternalAsciiStringIterateBody(ObjectVisitor* v); |
| 4333 | 4170 |
| 4334 // Support for StringInputBuffer. | 4171 // Support for StringInputBuffer. |
| 4335 const unibrow::byte* ExternalAsciiStringReadBlock(unsigned* remaining, | 4172 const unibrow::byte* ExternalAsciiStringReadBlock(unsigned* remaining, |
| 4336 unsigned* offset, | 4173 unsigned* offset, |
| 4337 unsigned chars); | 4174 unsigned chars); |
| 4338 inline void ExternalAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, | 4175 inline void ExternalAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, |
| 4339 unsigned* offset, | 4176 unsigned* offset, |
| 4340 unsigned chars); | 4177 unsigned chars); |
| 4341 | 4178 |
| 4342 // Identify the map for the external string/symbol with a particular length. | |
| 4343 static inline Map* StringMap(int length); | |
| 4344 static inline Map* SymbolMap(int length); | |
| 4345 private: | 4179 private: |
| 4346 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString); | 4180 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString); |
| 4347 }; | 4181 }; |
| 4348 | 4182 |
| 4349 | 4183 |
| 4350 // The ExternalTwoByteString class is an external string backed by a UTF-16 | 4184 // The ExternalTwoByteString class is an external string backed by a UTF-16 |
| 4351 // encoded string. | 4185 // encoded string. |
| 4352 class ExternalTwoByteString: public ExternalString { | 4186 class ExternalTwoByteString: public ExternalString { |
| 4353 public: | 4187 public: |
| 4354 typedef v8::String::ExternalStringResource Resource; | 4188 typedef v8::String::ExternalStringResource Resource; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4367 static inline ExternalTwoByteString* cast(Object* obj); | 4201 static inline ExternalTwoByteString* cast(Object* obj); |
| 4368 | 4202 |
| 4369 // Garbage collection support. | 4203 // Garbage collection support. |
| 4370 void ExternalTwoByteStringIterateBody(ObjectVisitor* v); | 4204 void ExternalTwoByteStringIterateBody(ObjectVisitor* v); |
| 4371 | 4205 |
| 4372 // Support for StringInputBuffer. | 4206 // Support for StringInputBuffer. |
| 4373 void ExternalTwoByteStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, | 4207 void ExternalTwoByteStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, |
| 4374 unsigned* offset_ptr, | 4208 unsigned* offset_ptr, |
| 4375 unsigned chars); | 4209 unsigned chars); |
| 4376 | 4210 |
| 4377 // Identify the map for the external string/symbol with a particular length. | |
| 4378 static inline Map* StringMap(int length); | |
| 4379 static inline Map* SymbolMap(int length); | |
| 4380 private: | 4211 private: |
| 4381 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalTwoByteString); | 4212 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalTwoByteString); |
| 4382 }; | 4213 }; |
| 4383 | 4214 |
| 4384 | 4215 |
| 4385 // Utility superclass for stack-allocated objects that must be updated | 4216 // Utility superclass for stack-allocated objects that must be updated |
| 4386 // on gc. It provides two ways for the gc to update instances, either | 4217 // on gc. It provides two ways for the gc to update instances, either |
| 4387 // iterating or updating after gc. | 4218 // iterating or updating after gc. |
| 4388 class Relocatable BASE_EMBEDDED { | 4219 class Relocatable BASE_EMBEDDED { |
| 4389 public: | 4220 public: |
| (...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5053 } else { | 4884 } else { |
| 5054 value &= ~(1 << bit_position); | 4885 value &= ~(1 << bit_position); |
| 5055 } | 4886 } |
| 5056 return value; | 4887 return value; |
| 5057 } | 4888 } |
| 5058 }; | 4889 }; |
| 5059 | 4890 |
| 5060 } } // namespace v8::internal | 4891 } } // namespace v8::internal |
| 5061 | 4892 |
| 5062 #endif // V8_OBJECTS_H_ | 4893 #endif // V8_OBJECTS_H_ |
| OLD | NEW |