<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
	<Type Name="Line">
		<DisplayString>{(enum_act)mActionType} ln {mLineNumber}</DisplayString>
    <Expand>
      <Item Name="act">(enum_act)mActionType</Item>
      <Item Name="file">sSourceFile[mFileIndex],sub</Item>
      <Item Name="line">mLineNumber,d</Item>
      <Item Name="args">mArg,[mArgc]</Item>
      <Item Name="func" Condition="mActionType == ACT_BLOCK_BEGIN">(UserFunc*)mAttribute</Item>
    </Expand>
	</Type>
  <Type Name="ArgStruct">
    <DisplayString Condition="is_expression || !postfix">{text,sub}</DisplayString>
    <DisplayString Condition="!is_expression &amp;&amp; postfix">{text,su}</DisplayString>
  </Type>
  <Type Name="ExprTokenType">
    <DisplayString Condition="symbol == SYM_STRING">{marker}</DisplayString>
    <DisplayString Condition="symbol == SYM_INTEGER">{value_int64}</DisplayString>
    <DisplayString Condition="symbol == SYM_FLOAT">{value_double}</DisplayString>
    <DisplayString Condition="symbol == SYM_OBJECT">{object}</DisplayString>
    <DisplayString Condition="symbol == SYM_VAR &amp;&amp; (*(UINT*)var->mName &amp; 0xffffff00) != 0xcdcdcd00">{*var}</DisplayString>
    <DisplayString Condition="symbol == SYM_VAR &amp;&amp; var_deref->type == 0 &amp;&amp; (UINT)var_deref->marker != 0xcdcdcdcd">{*var_deref}</DisplayString>
    <DisplayString Condition="symbol == SYM_COUNT">(end marker)</DisplayString>
    <DisplayString Condition="symbol &gt;= SYM_OPERAND_END">{symbol,en}  {error_reporting_marker,sub}</DisplayString>
    <DisplayString>{symbol,en}</DisplayString>
    <Expand>
      <Item Name="value" Condition="symbol == SYM_STRING">marker</Item>
      <Item Name="length" Condition="symbol == SYM_STRING">marker_length</Item>
      <Item Name="value" Condition="symbol == SYM_INTEGER">value_int64</Item>
      <Item Name="value" Condition="symbol == SYM_FLOAT">value_double</Item>
      <Item Name="object" Condition="symbol == SYM_OBJECT">object</Item>
      <Item Name="var" Condition="symbol == SYM_VAR &amp;&amp; (*(UINT*)var->mName &amp; 0xffffff00) != 0xcdcdcd00">var</Item>
      <Item Name="var_deref" Condition="symbol == SYM_VAR &amp;&amp; var_deref->type == 0 &amp;&amp; (UINT)var_deref->marker != 0xcdcdcdcd">var_deref</Item>
      <Item Name="callsite" Condition="symbol == SYM_FUNC">callsite</Item>
      <Item Name="marker" Condition="symbol == SYM_OPAREN">marker</Item>
    </Expand>
  </Type>
  <Type Name="Var">
    <DisplayString Condition="mAttrib &amp; 0x10">{mName,sub} = {mContentsInt64}</DisplayString>
    <DisplayString Condition="mAttrib &amp; 0x20">{mName,sub} = {mContentsDouble}</DisplayString>
    <DisplayString Condition="mAttrib &amp; 0x40">{mName,sub} = {mObject}</DisplayString>
    <DisplayString Condition="mType == VAR_ALIAS">{mName,sub} -> {mAliasFor}</DisplayString>
    <DisplayString Condition="mAttrib &amp; 0x02">{mName,sub} is unset</DisplayString>
    <DisplayString>{mName,sub} = {mCharContents,su}</DisplayString>
    <Expand>
      <Item Name="object" Condition="mAttrib &amp; 0x40">mObject</Item>
    </Expand>
  </Type>
  <Type Name="DerefType">
    <DisplayString>{marker,[length]sub}</DisplayString>
  </Type>
  <Type Name="Func">
    <DisplayString>{mName,sub}()</DisplayString>
  </Type>
  <Type Name="Object">
    <DisplayString Condition="mFields.data->length >= 4">{((FieldType *)(mFields.data + 1))[0]}, {((FieldType *)(mFields.data + 1))[1]}, {((FieldType *)(mFields.data + 1))[2]}, {((FieldType *)(mFields.data + 1))[3]}</DisplayString>
    <DisplayString Condition="mFields.data->length == 3">{((FieldType *)(mFields.data + 1))[0]}, {((FieldType *)(mFields.data + 1))[1]}, {((FieldType *)(mFields.data + 1))[2]}</DisplayString>
    <DisplayString Condition="mFields.data->length == 2">{((FieldType *)(mFields.data + 1))[0]}, {((FieldType *)(mFields.data + 1))[1]}</DisplayString>
    <DisplayString Condition="mFields.data->length == 1">{((FieldType *)(mFields.data + 1))[0]}</DisplayString>
    <DisplayString>(no properties)</DisplayString>
    <Expand>
      <Synthetic Name="Properties">
        <Expand>
          <ArrayItems>
            <Size>mFields.data->length</Size>
            <ValuePointer>(FieldType *)(mFields.data + 1)</ValuePointer>
          </ArrayItems>
        </Expand>
      </Synthetic>
    </Expand>
  </Type>
  <Type Name="Object::Variant">
    <DisplayString Condition="symbol == SYM_STRING">{string}</DisplayString>
    <DisplayString Condition="symbol == SYM_INTEGER">{n_int64}</DisplayString>
    <DisplayString Condition="symbol == SYM_FLOAT">{n_double}</DisplayString>
    <DisplayString Condition="symbol == SYM_OBJECT">{{{*object}}}</DisplayString>
    <DisplayString Condition="symbol == SYM_DYNAMIC">{*prop}</DisplayString>
    <DisplayString Condition="symbol == SYM_MISSING">unset</DisplayString>
    <DisplayString>(bad symbol: {symbol})</DisplayString>
  </Type>
  <Type Name="Object::FieldType">
    <DisplayString>{name,sub} = {*(Variant *)this,nd}</DisplayString>
    <Expand>
      <Item Name="name">name,sub</Item>
      <Item Name="value" Condition="symbol == SYM_STRING">string</Item>
      <Item Name="value" Condition="symbol == SYM_INTEGER">n_int64</Item>
      <Item Name="value" Condition="symbol == SYM_FLOAT">n_double</Item>
      <Item Name="value" Condition="symbol == SYM_OBJECT">*object</Item>
      <Item Name="value" Condition="symbol == SYM_DYNAMIC">*prop</Item>
      <Item Name="raw">*(Variant *)this,nd</Item>
    </Expand>
  </Type>
  <Type Name="Property">
    <Expand>
      <Item Name="get" Condition="mGet">*mGet</Item>
      <Item Name="set" Condition="mSet">*mSet</Item>
      <Item Name="call" Condition="mCall">*mCall</Item>
    </Expand>
  </Type>
  <Type Name="Array">
    <Expand>
      <ArrayItems>
        <Size>mLength</Size>
        <ValuePointer>mItem</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>
  <Type Name="FlatVector&lt;wchar_t,unsigned __int64&gt;">
    <DisplayString>{(wchar_t*)(data + 1),su}</DisplayString>
  </Type>
</AutoVisualizer>