desc. in objects.h



//
// Most object types in the V8 JavaScript are described in this file.
//
// Inheritance hierarchy:
// - Object
//   - Smi          (immediate small integer)
//   - HeapObject   (superclass for everything allocated in the heap)
//     - JSReceiver  (suitable for property access)
//       - JSObject
//         - JSArray
//         - JSArrayBuffer
//         - JSArrayBufferView
//           - JSTypedArray
//           - JSDataView
//         - JSBoundFunction
//         - JSCollection
//           - JSSet
//           - JSMap
//         - JSStringIterator
//         - JSSetIterator
//         - JSMapIterator
//         - JSWeakCollection
//           - JSWeakMap
//           - JSWeakSet
//         - JSRegExp
//         - JSFunction
//         - JSGeneratorObject
//         - JSGlobalObject
//         - JSGlobalProxy
//         - JSValue
//           - JSDate
//         - JSMessageObject
//         - JSModuleNamespace
//       - JSProxy
//     - FixedArrayBase
//       - ByteArray
//       - BytecodeArray
//       - FixedArray
//         - DescriptorArray
//         - FrameArray
//         - HashTable
//           - Dictionary
//           - StringTable
//           - StringSet
//           - CompilationCacheTable
//           - CodeCacheHashTable
//           - MapCache
//         - OrderedHashTable
//           - OrderedHashSet
//           - OrderedHashMap
//         - Context
//         - FeedbackMetadata
//         - FeedbackVector
//         - TemplateList
//         - TransitionArray
//         - ScopeInfo
//         - ModuleInfo
//         - ScriptContextTable
//         - WeakFixedArray
//       - FixedDoubleArray
//     - Name
//       - String
//         - SeqString
//           - SeqOneByteString
//           - SeqTwoByteString
//         - SlicedString
//         - ConsString
//         - ThinString
//         - ExternalString
//           - ExternalOneByteString
//           - ExternalTwoByteString
//         - InternalizedString
//           - SeqInternalizedString
//             - SeqOneByteInternalizedString
//             - SeqTwoByteInternalizedString
//           - ConsInternalizedString
//           - ExternalInternalizedString
//             - ExternalOneByteInternalizedString
//             - ExternalTwoByteInternalizedString
//       - Symbol
//     - HeapNumber
//     - Cell
//     - PropertyCell
//     - Code
//     - AbstractCode, a wrapper around Code or BytecodeArray
//     - Map
//     - Oddball
//     - Foreign
//     - SharedFunctionInfo
//     - Struct
//       - AccessorInfo
//       - PromiseResolveThenableJobInfo
//       - PromiseReactionJobInfo
//       - AccessorPair
//       - AccessCheckInfo
//       - InterceptorInfo
//       - CallHandlerInfo
//       - TemplateInfo
//         - FunctionTemplateInfo
//         - ObjectTemplateInfo
//       - Script
//       - DebugInfo
//       - BreakPointInfo
//       - CodeCache
//       - PrototypeInfo
//       - Module
//       - ModuleInfoEntry
//     - WeakCell
//
// Formats of Object*:
//  Smi:        [31 bit signed int] 0
//  HeapObject: [32 bit direct pointer] (4 byte aligned) | 01
Tuesday, October 31, 2017 by blast

v8 bailout related



bailout reasons
https://github.com/vhf/v8-bailout-reasons

Optimization-killers
https://github.com/petkaantonov/bluebird/wiki/Optimization-killers

Thursday, September 28, 2017 by blast

21种v8的元素类型



enum ElementsKind {
  // The "fast" kind for elements that only contain SMI values. Must be first
  // to make it possible to efficiently check maps for this kind.
  FAST_SMI_ELEMENTS,
  FAST_HOLEY_SMI_ELEMENTS,

  // The "fast" kind for tagged values. Must be second to make it possible to
  // efficiently check maps for this and the FAST_SMI_ONLY_ELEMENTS kind
  // together at once.
  FAST_ELEMENTS,
  FAST_HOLEY_ELEMENTS,

  // The "fast" kind for unwrapped, non-tagged double values.
  FAST_DOUBLE_ELEMENTS,
  FAST_HOLEY_DOUBLE_ELEMENTS,

  // The "slow" kind.
  DICTIONARY_ELEMENTS,

  // Elements kind of the "arguments" object (only in sloppy mode).
  FAST_SLOPPY_ARGUMENTS_ELEMENTS,
  SLOW_SLOPPY_ARGUMENTS_ELEMENTS,

  // For string wrapper objects ("new String('...')"), the string's characters
  // are overlaid onto a regular elements backing store.
  FAST_STRING_WRAPPER_ELEMENTS,
  SLOW_STRING_WRAPPER_ELEMENTS,

  // Fixed typed arrays.
  UINT8_ELEMENTS,
  INT8_ELEMENTS,
  UINT16_ELEMENTS,
  INT16_ELEMENTS,
  UINT32_ELEMENTS,
  INT32_ELEMENTS,
  FLOAT32_ELEMENTS,
  FLOAT64_ELEMENTS,
  UINT8_CLAMPED_ELEMENTS,

  // Sentinel ElementsKind for objects with no elements.
  NO_ELEMENTS,

  // Derived constants from ElementsKind.
  FIRST_ELEMENTS_KIND = FAST_SMI_ELEMENTS,
  LAST_ELEMENTS_KIND = UINT8_CLAMPED_ELEMENTS,
  FIRST_FAST_ELEMENTS_KIND = FAST_SMI_ELEMENTS,
  LAST_FAST_ELEMENTS_KIND = FAST_HOLEY_DOUBLE_ELEMENTS,
  FIRST_FIXED_TYPED_ARRAY_ELEMENTS_KIND = UINT8_ELEMENTS,
  LAST_FIXED_TYPED_ARRAY_ELEMENTS_KIND = UINT8_CLAMPED_ELEMENTS,
  TERMINAL_FAST_ELEMENTS_KIND = FAST_HOLEY_ELEMENTS
};
Wednesday, September 27, 2017 by blast

AT command



https://www.diafaan.com/sms-tutorials/gsm-modem-tutorial/

General SMS Commands
AT+CMGF – Set SMS Text Mode or SMS PDU Mode
AT+CMGD – Delete a Received Message

PDU Mode SMS Commands
AT+CMGL – List Received Messages

Text Mode SMS Commands
AT+CMGS – Send SMS Message
AT+CMGL – List Received Messages

————————

AT + CMGF - 设置短信模式或SMS PDU模式
AT + CMGF命令将GSM调制解调器设置为SMS文本模式或SMS PDU模式。

在文本模式下,SMS消息被表示为可读文本。 在PDU模式下,所有SMS消息都表示为十六进制字符编码的二进制字符串,如31020B911326880736F40000A900。

虽然文本模式更容易使用,但PDU模式在不同的GSM调制解调器上更为一致。

命令 回应
AT+ CMGF= OK
参数
:0 = PDU模式,1 =文本模式
= ASCII字符13

将GSM调制解调器设置为文本模式短信,并向GSM号码+31628870634发送消息。

AT+CMGF=1
OK
AT+CMGS="+31628870634"
> This is the text message.→
+CMGS: 198
OK

————————
AT + CMGD - 删除接收到的消息
AT + CMGD命令从GSM调制解调器中删除接收到的SMS消息。 您可以使用AT + CMGL命令检索消息的索引号。

命令 回应
AT + CMGD=<索引>
参数
:消息的索引号
:ASCII字符13


将GSM调制解调器设置为文本模式SMS,列出所有接收到的消息,并从GSM调制解调器中删除消息。

AT+CMGF=1
OK
AT+CMGL="ALL"
+CMGL: 1,"REC UNREAD","+31628870634",,"11/01/09,10:26:26+04"
This is text message 1
+CMGL: 2,"REC UNREAD","+31628870634",,"11/01/09,10:26:49+04"
This is text message 2
OK
AT+CMGD=1
OK
AT+CMGD=2
OK

————————
AT + CMGL - 在PDU模式下列出接收到的消息
AT + CMGL命令列出在GSM调制解调器上接收到的消息。 它可以用于获取所有收到的消息,所有未读消息或所有读消息。

命令 回应
AT + CMGL = + CMGL:,[alpha],

OK
参数
:Status = 0 - 未读,1 - 读取,4 - 全部
:消息的索引号
发件人名称(如果在电话簿中可用)
:PDU的长度

:接收到的SMS-DELIVER PDU
:ASCII字符13
:ASCII字符10

解码SMS-DELIVER PDU

使用在线SMS-DELIVER PDU解码器对接收到的PDU进行解码。

将GSM调制解调器设置为SMS PDU模式,列出所有接收的消息,并从3G调制解调器中删除消息。

AT+CMGF=0
OK
AT+CMGL=4
+CMGL: 1,0,,39
07911326040011F5240B911326880736F40000111081017362401654747A0E4ACF41F4329E0E6A97E7F3F0B90C8A01
+CMGL: 2,0,,39
07911326040011F5240B911326880736F40000111081017323401654747A0E4ACF41F4329E0E6A97E7F3F0B90C9201
OK
AT+CMGD=1
OK
AT+CMGD=2
OK

————————
AT + CMGS - 以文本模式发送短信命令
AT + CMGS命令向GSM手机发送一条SMS消息。 在文本模式下,这个命令比PDU模式的功能不那么强大,但它当然更容易使用。

命令 响应
AT + CMGS=<编号> <消息> + CMGS:<先生>

参数
= ASCII字符13
= ASCII字符26
=消息参考

将GSM调制解调器设置为文本模式短信,并向GSM号码+31628870634发送消息。

AT+CMGF=1
OK
AT+CMGS="+31628870634"
> This is the text message.→
+CMGS: 198
OK

————————
AT + CMGL - 以文本模式列出接收到的消息
AT + CMGL命令列出在GSM调制解调器上接收到的消息。 它可以用于获取所有收到的消息,所有未读消息或所有读消息。

命令积极回应
AT + CMGL = + CMGL:,[α],[]

OK
参数
:Status =“ALL”,“REC UNREAD”或“REC READ”
:消息的索引号
:发起人地址
发件人名称(如果在电话簿中可用)
:服务中心时间戳
:短信的内容
:ASCII字符13
:ASCII字符10

将GSM调制解调器设置为文本模式SMS,列出所有接收到的消息,并从GSM调制解调器中删除消息。

AT+CMGF=1
OK
AT+CMGL="ALL"
+CMGL: 1,"REC UNREAD","+31628870634",,"11/01/09,10:26:26+04"
This is text message 1
+CMGL: 2,"REC UNREAD","+31628870634",,"11/01/09,10:26:49+04"
This is text message 2
OK
AT+CMGD=1
OK
AT+CMGD=2
OK
Tuesday, September 19, 2017 by blast

note



https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/example-12—using-page-heap-verification-to-find-a-bug

Monday, September 18, 2017 by blast

SIMD128_TYPES



// V has parameters (TYPE, Type, type, lane count, lane type)
#define SIMD128_TYPES(V)
V(FLOAT32X4, Float32×4, float32×4, 4, float)
V(INT32X4, Int32×4, int32×4, 4, int32_t)
V(UINT32X4, Uint32×4, uint32×4, 4, uint32_t)
V(BOOL32X4, Bool32×4, bool32×4, 4, bool)
V(INT16X8, Int16×8, int16×8, 8, int16_t)
V(UINT16X8, Uint16×8, uint16×8, 8, uint16_t)
V(BOOL16X8, Bool16×8, bool16×8, 8, bool)
V(INT8X16, Int8×16, int8×16, 16, int8_t)
V(UINT8X16, Uint8×16, uint8×16, 16, uint8_t)
V(BOOL8X16, Bool8×16, bool8×16, 16, bool)

Wednesday, September 6, 2017 by blast

INTERNALIZED_STRING_LIST



#define INTERNALIZED_STRING_LIST(V)
V(anonymous_string, “anonymous”)
V(apply_string, “apply”)
V(assign_string, “assign”)
V(arguments_string, “arguments”)
V(Arguments_string, “Arguments”)
V(Array_string, “Array”)
V(arguments_to_string, “[object Arguments]”)
V(array_to_string, “[object Array]”)
V(boolean_to_string, “[object Boolean]”)
V(date_to_string, “[object Date]”)
V(error_to_string, “[object Error]”)
V(function_to_string, “[object Function]”)
V(number_to_string, “[object Number]”)
V(object_to_string, “[object Object]”)
V(regexp_to_string, “[object RegExp]”)
V(string_to_string, “[object String]”)
V(bind_string, “bind”)
V(bool16×8_string, “bool16×8”)
V(Bool16×8_string, “Bool16×8”)
V(bool32×4_string, “bool32×4”)
V(Bool32×4_string, “Bool32×4”)
V(bool8×16_string, “bool8×16”)
V(Bool8×16_string, “Bool8×16”)
V(boolean_string, “boolean”)
V(Boolean_string, “Boolean”)
V(bound__string, “bound “)
V(buffer_string, “buffer”)
V(byte_length_string, “byteLength”)
V(byte_offset_string, “byteOffset”)
V(call_string, “call”)
V(callee_string, “callee”)
V(caller_string, “caller”)
V(cell_value_string, “%cell_value”)
V(char_at_string, “CharAt”)
V(closure_string, “(closure)”)
V(column_string, “column”)
V(compare_ic_string, “==”)
V(configurable_string, “configurable”)
V(constructor_string, “constructor”)
V(construct_string, “construct”)
V(create_string, “create”)
V(Date_string, “Date”)
V(default_string, “default”)
V(defineProperty_string, “defineProperty”)
V(deleteProperty_string, “deleteProperty”)
V(display_name_string, “displayName”)
V(done_string, “done”)
V(dot_result_string, “.result”)
V(dot_string, “.”)
V(entries_string, “entries”)
V(enumerable_string, “enumerable”)
V(Error_string, “Error”)
V(eval_string, “eval”)
V(EvalError_string, “EvalError”)
V(false_string, “false”)
V(float32×4_string, “float32×4”)
V(Float32×4_string, “Float32×4”)
V(for_api_string, “for_api”)
V(for_string, “for”)
V(function_string, “function”)
V(Function_string, “Function”)
V(Generator_string, “Generator”)
V(getOwnPropertyDescriptor_string, “getOwnPropertyDescriptor”)
V(getOwnPropertyDescriptors_string, “getOwnPropertyDescriptors”)
V(getPrototypeOf_string, “getPrototypeOf”)
V(get_string, “get”)
V(global_string, “global”)
V(has_string, “has”)
V(illegal_access_string, “illegal access”)
V(illegal_argument_string, “illegal argument”)
V(index_string, “index”)
V(infinity_string, “Infinity”)
V(input_string, “input”)
V(int16×8_string, “int16×8”)
V(Int16×8_string, “Int16×8”)
V(int32×4_string, “int32×4”)
V(Int32×4_string, “Int32×4”)
V(int8×16_string, “int8×16”)
V(Int8×16_string, “Int8×16”)
V(isExtensible_string, “isExtensible”)
V(isView_string, “isView”)
V(KeyedLoadMonomorphic_string, “KeyedLoadMonomorphic”)
V(KeyedStoreMonomorphic_string, “KeyedStoreMonomorphic”)
V(last_index_string, “lastIndex”)
V(length_string, “length”)
V(line_string, “line”)
V(Map_string, “Map”)
V(message_string, “message”)
V(minus_infinity_string, “-Infinity”)
V(minus_zero_string, “-0”)
V(name_string, “name”)
V(nan_string, “NaN”)
V(next_string, “next”)
V(not_equal, “not-equal”)
V(null_string, “null”)
V(null_to_string, “[object Null]”)
V(number_string, “number”)
V(Number_string, “Number”)
V(object_string, “object”)
V(Object_string, “Object”)
V(ok, “ok”)
V(ownKeys_string, “ownKeys”)
V(position_string, “position”)
V(preventExtensions_string, “preventExtensions”)
V(private_api_string, “private_api”)
V(Promise_string, “Promise”)
V(proto_string, “__proto__”)
V(prototype_string, “prototype”)
V(Proxy_string, “Proxy”)
V(query_colon_string, “(?:)”)
V(RangeError_string, “RangeError”)
V(ReferenceError_string, “ReferenceError”)
V(RegExp_string, “RegExp”)
V(script_string, “script”)
V(setPrototypeOf_string, “setPrototypeOf”)
V(set_string, “set”)
V(Set_string, “Set”)
V(source_mapping_url_string, “source_mapping_url”)
V(source_string, “source”)
V(sourceText_string, “sourceText”)
V(source_url_string, “source_url”)
V(stack_string, “stack”)
V(stackTraceLimit_string, “stackTraceLimit”)
V(strict_compare_ic_string, “===”)
V(string_string, “string”)
V(String_string, “String”)
V(symbol_string, “symbol”)
V(Symbol_string, “Symbol”)
V(SyntaxError_string, “SyntaxError”)
V(this_string, “this”)
V(throw_string, “throw”)
V(timed_out, “timed-out”)
V(toJSON_string, “toJSON”)
V(toString_string, “toString”)
V(true_string, “true”)
V(TypeError_string, “TypeError”)
V(uint16×8_string, “uint16×8”)
V(Uint16×8_string, “Uint16×8”)
V(uint32×4_string, “uint32×4”)
V(Uint32×4_string, “Uint32×4”)
V(uint8×16_string, “uint8×16”)
V(Uint8×16_string, “Uint8×16”)
V(undefined_string, “undefined”)
V(undefined_to_string, “[object Undefined]”)
V(URIError_string, “URIError”)
V(valueOf_string, “valueOf”)
V(values_string, “values”)
V(value_string, “value”)
V(WeakMap_string, “WeakMap”)
V(WeakSet_string, “WeakSet”)
V(writable_string, “writable”)

Tuesday, September 5, 2017 by blast

immtable



https://github.com/camsong/blog/issues/3

https://developer.mozilla.org/en-US/docs/Glossary/Mutable

by blast

symbols of v8



heap-symbols.h

#define PRIVATE_SYMBOL_LIST(V)
V(array_iteration_kind_symbol)
V(array_iterator_next_symbol)
V(array_iterator_object_symbol)
V(call_site_constructor_symbol)
V(call_site_function_symbol)
V(call_site_position_symbol)
V(call_site_receiver_symbol)
V(call_site_strict_symbol)
V(call_site_wasm_obj_symbol)
V(call_site_wasm_func_index_symbol)
V(class_end_position_symbol)
V(class_start_position_symbol)
V(detailed_stack_trace_symbol)
V(elements_transition_symbol)
V(error_end_pos_symbol)
V(error_script_symbol)
V(error_start_pos_symbol)
V(frozen_symbol)
V(hash_code_symbol)
V(home_object_symbol)
V(intl_impl_object_symbol)
V(intl_initialized_marker_symbol)
V(intl_pattern_symbol)
V(intl_resolved_symbol)
V(megamorphic_symbol)
V(native_context_index_symbol)
V(nonexistent_symbol)
V(nonextensible_symbol)
V(normal_ic_symbol)
V(not_mapped_symbol)
V(premonomorphic_symbol)
V(promise_combined_deferred_symbol)
V(promise_debug_marker_symbol)
V(promise_deferred_reactions_symbol)
V(promise_fulfill_reactions_symbol)
V(promise_has_handler_symbol)
V(promise_raw_symbol)
V(promise_reject_reactions_symbol)
V(promise_result_symbol)
V(promise_state_symbol)
V(sealed_symbol)
V(stack_trace_symbol)
V(strict_function_transition_symbol)
V(string_iterator_iterated_string_symbol)
V(string_iterator_next_index_symbol)
V(uninitialized_symbol)

#define PUBLIC_SYMBOL_LIST(V)
V(iterator_symbol, Symbol.iterator)
V(match_symbol, Symbol.match)
V(replace_symbol, Symbol.replace)
V(search_symbol, Symbol.search)
V(species_symbol, Symbol.species)
V(split_symbol, Symbol.split)
V(to_primitive_symbol, Symbol.toPrimitive)
V(unscopables_symbol, Symbol.unscopables)

// Well-Known Symbols are “Public” symbols, which have a bit set which causes
// them to produce an undefined value when a load results in a failed access
// check. Because this behaviour is not specified properly as of yet, it only
// applies to a subset of spec-defined Well-Known Symbols.
#define WELL_KNOWN_SYMBOL_LIST(V)
V(has_instance_symbol, Symbol.hasInstance)
V(is_concat_spreadable_symbol, Symbol.isConcatSpreadable)
V(to_string_tag_symbol, Symbol.toStringTag)

Monday, September 4, 2017 by blast

win10自动休眠的问题



http://blog.csdn.net/ivan_ljf/article/details/51104991

为什么win10这么智障呢,产品经理总是喜欢帮用户做决定……

Saturday, September 2, 2017 by blast