263 lines
11 KiB
XML
263 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
/// Copyright 2021 The Tint Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
-->
|
|
|
|
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
|
|
|
<!--=================================================================-->
|
|
<!-- utils -->
|
|
<!--=================================================================-->
|
|
|
|
<Type Name="tint::utils::Slice<*>">
|
|
<DisplayString>{{ length={len}, capacity={cap} }}</DisplayString>
|
|
<Expand>
|
|
<!--<Item Name="[length]">len</Item>
|
|
<Item Name="[capacity]">cap</Item>-->
|
|
<ArrayItems>
|
|
<Size>len</Size>
|
|
<ValuePointer>data</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="tint::utils::Vector<*,*>">
|
|
<Intrinsic Name="Length" Expression="(size_t)(impl_.slice.len)" />
|
|
<Expand>
|
|
<Item Name="[heap]">impl_.slice.cap > (int)$T2</Item>
|
|
<!--<ExpandedItem>impl_.slice</ExpandedItem>-->
|
|
<!--<Item Name="[slice]">impl_.slice</Item>-->
|
|
<ArrayItems>
|
|
<Size>Length()</Size>
|
|
<ValuePointer>impl_.slice.data</ValuePointer>
|
|
</ArrayItems>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="tint::utils::VectorRef<*>">
|
|
<Expand>
|
|
<Item Name="[can move]">can_move_</Item>
|
|
<ExpandedItem>slice_</ExpandedItem>
|
|
<!--<Item Name="[slice]">slice_</Item>-->
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="tint::Symbol">
|
|
<DisplayString Optional="true">{name_,sb}</DisplayString>
|
|
</Type>
|
|
|
|
<!--=================================================================-->
|
|
<!-- ast -->
|
|
<!--=================================================================-->
|
|
|
|
<Type Name="tint::ast::AssignmentStatement">
|
|
<DisplayString>{*lhs} = {*rhs};</DisplayString>
|
|
<Expand>
|
|
<Item Name="lhs">*lhs</Item>
|
|
<Item Name="rhs">*rhs</Item>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::IfStatement">
|
|
<DisplayString Condition="!else_statement">if ({*condition}) {*body}</DisplayString>
|
|
<DisplayString Condition="else_statement">if ({*condition}) {*body} else { *else_statement }</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::ElseStatement">
|
|
<DisplayString Condition="!condition">else {*body}</DisplayString>
|
|
<DisplayString Condition="!!condition">else if ({*condition}) {*body}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::BlockStatement">
|
|
<DisplayString Condition="statements.Length() == 1">{{ {*statements[0]} }} </DisplayString>
|
|
<DisplayString Condition="statements.Length() == 2">{{ {*statements[0]} {*statements[1]} }} </DisplayString>
|
|
<DisplayString Condition="statements.Length() == 3">{{ {*statements[0]} {*statements[1]} {*statements[2]} }} </DisplayString>
|
|
<DisplayString Condition="statements.Length() > 3">{{ {*statements[0]} {*statements[1]} {*statements[2]} {statements.Length()-3} more... }} </DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::ReturnStatement">
|
|
<DisplayString Condition="!value">return;</DisplayString>
|
|
<DisplayString Condition="!!value">return {*value};</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::Function">
|
|
<DisplayString Condition="params.size() == 0">fn {symbol}() -> {*return_type} {*body}</DisplayString>
|
|
<DisplayString Condition="params.size() == 1">fn {symbol}({*params[0]}) -> {*return_type} {*body}</DisplayString>
|
|
<DisplayString Condition="params.size() == 2">fn {symbol}({*params[0]} {*params[1]}) -> {*return_type} {*body}</DisplayString>
|
|
<DisplayString Condition="params.size() == 3">fn {symbol}({*params[0]} {*params[1]} {*params[2]}) -> {*return_type} {*body}</DisplayString>
|
|
<DisplayString Condition="params.size() > 3">fn {symbol}({*params[0]} {*params[1]} {*params[2]} {params.size()-3} more...) -> {*return_type} {*body}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::IdentifierExpression">
|
|
<!--the ",sb" specifier removes the double quotes on the displayed string -->
|
|
<DisplayString>{symbol}</DisplayString>
|
|
<Expand>
|
|
<Item Name="symbol">symbol</Item>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::IndexAccessorExpression">
|
|
<DisplayString>{*object}[{*index}]</DisplayString>
|
|
<Expand>
|
|
<Item Name="object">*object</Item>
|
|
<Item Name="index">*index</Item>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::MemberAccessorExpression">
|
|
<DisplayString>{*structure}.{*member}</DisplayString>
|
|
<Expand>
|
|
<Item Name="structure">*structure</Item>
|
|
<Item Name="member">*member</Item>
|
|
</Expand>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::Let">
|
|
<DisplayString Condition="!!type">let {symbol} : {*type} = {*initializer}</DisplayString>
|
|
<DisplayString Condition=" !type">let {symbol} = {*initializer}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::Variable">
|
|
<DisplayString Condition="!!type & !!initializer">var {symbol} : {*type} = {*initializer}</DisplayString>
|
|
<DisplayString Condition="!!type & !initializer">var {symbol} : {*type}</DisplayString>
|
|
<DisplayString Condition=" !type & !!initializer">var {symbol} = {*initializer}</DisplayString>
|
|
<DisplayString Condition=" !type & !initializer">var {symbol}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::VariableDeclStatement">
|
|
<DisplayString>{*variable};</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::IntLiteralExpression">
|
|
<DisplayString>{value}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::BoolLiteralExpression">
|
|
<DisplayString>{value}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::UnaryOpExpression">
|
|
<DisplayString Condition="op==tint::ast::UnaryOp::kAddressOf">&({*expr})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::UnaryOp::kComplement">~({*expr})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::UnaryOp::kIndirection">*({*expr})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::UnaryOp::kNegation">-({*expr})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::UnaryOp::kNot">!({*expr})</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::BinaryExpression">
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kNone">({*lhs} NONE {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kAnd">({*lhs} & {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kOr">({*lhs} | {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kXor">({*lhs} ^ {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kLogicalAnd">({*lhs} && {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kLogicalOr">({*lhs} || {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kEqual">({*lhs} == {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kNotEqual">({*lhs} != {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kLessThan">({*lhs} < {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kGreaterThan">({*lhs} > {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kLessThanEqual">({*lhs} <= {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kGreaterThanEqual">({*lhs} >= {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kShiftLeft">({*lhs} << {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kShiftRight">({*lhs} >> {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kAdd">({*lhs} + {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kSubtract">({*lhs} - {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kMultiply">({*lhs} * {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kDivide">({*lhs} / {*rhs})</DisplayString>
|
|
<DisplayString Condition="op==tint::ast::BinaryOp::kModulo">({*lhs} % {*rhs})</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::CallExpression">
|
|
<DisplayString Condition="args.Length() == 0">{target}()</DisplayString>
|
|
<DisplayString Condition="args.Length() == 1">{target}({*args[0]})</DisplayString>
|
|
<DisplayString Condition="args.Length() == 2">{target}({*args[0]}, {*args[1]})</DisplayString>
|
|
<DisplayString Condition="args.Length() == 3">{target}({*args[0]}, {*args[1]}, {*args[2]})</DisplayString>
|
|
<DisplayString Condition="args.Length() == 4">{target}({*args[0]}, {*args[1]}, {*args[2]}, {*args[3]})</DisplayString>
|
|
<DisplayString Condition="args.Length() > 4">{target}({*args[0]}, {*args[1]}, {*args[2]}, {args.Length()-3} more...)</DisplayString>
|
|
<!-- TODO: add more overloads -->
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::CallExpression::Target">
|
|
<DisplayString Condition ="name != nullptr">{*name}</DisplayString>
|
|
<DisplayString Condition ="name == nullptr">{*type}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::Array">
|
|
<DisplayString Condition="count != nullptr">array<{*type},{*count}></DisplayString>
|
|
<DisplayString Condition="count == nullptr">array<{*type}></DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::Vector">
|
|
<DisplayString Condition="width==2 & !type">vec2</DisplayString>
|
|
<DisplayString Condition="width==3 & !type">vec3</DisplayString>
|
|
<DisplayString Condition="width==4 & !type">vec4</DisplayString>
|
|
<DisplayString Condition="width==2 & !!type">vec2<{*type}></DisplayString>
|
|
<DisplayString Condition="width==3 & !!type">vec3<{*type}></DisplayString>
|
|
<DisplayString Condition="width==4 & !!type">vec4<{*type}></DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::TypeName">
|
|
<DisplayString>{name}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::Bool">
|
|
<DisplayString>bool</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::I32">
|
|
<DisplayString>i32</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::U32">
|
|
<DisplayString>u32</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::ast::F32">
|
|
<DisplayString>f32</DisplayString>
|
|
</Type>
|
|
|
|
<!--=================================================================-->
|
|
<!-- sem -->
|
|
<!--=================================================================-->
|
|
|
|
<Type Name="tint::type::AbstractInt">
|
|
<DisplayString>AbstractInt</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::type::AbstractFloat">
|
|
<DisplayString>AbstractFloat</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::type::Bool">
|
|
<DisplayString>bool</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::type::F32">
|
|
<DisplayString>f32</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::type::Vector">
|
|
<DisplayString>vec{width_}<{*subtype_}></DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::constant::Value">
|
|
<DisplayString>Type={*Type()} Value={Value()}</DisplayString>
|
|
</Type>
|
|
|
|
<Type Name="tint::sem::ValueExpression">
|
|
<DisplayString>Decl={*declaration_}</DisplayString>
|
|
</Type>
|
|
|
|
</AutoVisualizer>
|