< Summary

Class:NanoCLang.Entities.StructReadExpression
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Expression\StructReadExpression.cs
Covered lines:19
Uncovered lines:3
Coverable lines:22
Total lines:54
Line coverage:86.3% (19 of 22)
Covered branches:3
Total branches:4
Branch coverage:75% (3 of 4)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
get_Structure()100%1100%
get_Member()100%1100%
DoInferWorld(...)100%1100%
Tokens()100%2100%
RequiredFunctions()100%1100%
Equals(...)100%1100%
Equals(...)50%2100%
GetHashCode()100%10%
op_Equality(...)100%10%
op_Inequality(...)100%10%

File(s)

C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Expression\StructReadExpression.cs

#LineLine coverage
 1using NanoCLang.Environemnts;
 2using System;
 3using System.Collections.Generic;
 4
 5namespace NanoCLang.Entities {
 6    /// <summary>
 7    /// Provides a class for structure read expressions.
 8    /// </summary>
 9    public class StructReadExpression : ReadExpression, IEquatable<StructReadExpression?> {
 10        /// <summary>
 11        /// Creates a new instance of a structure read expression that reads the value of the <paramref name="structure"
 12        /// </summary>
 13        /// <param name="structure">Structure to write to.</param>
 14        /// <param name="member">Member in the structure to access.</param>
 2015        public StructReadExpression(PureExpression structure, string member) {
 1016            Structure = structure;
 1017            Member = member;
 1018        }
 19        /// <summary>
 20        /// Structure that is read from.
 21        /// </summary>
 1822        public PureExpression Structure { get; }
 23        /// <summary>
 24        /// Member in the structure to access.
 25        /// </summary>
 1026        public string Member { get; }
 27        /// <inheritdoc/>
 628        protected override World DoInferWorld(GlobalEnvironment phi, LocalEnvironment gamma, Heap heap) {
 629            VerbConsole.WriteLine(VerbosityLevel.Default, "T-StrRead");
 630            return (BaseRead = new PointerReadExpression(StructWriteExpression.GetProjectionPointer(phi, gamma, Structur
 631                .InferWorld(phi, gamma, heap);
 532        }
 33        /// <inheritdoc/>
 434        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 2435            foreach (var tk in Structure.Tokens(args)) yield return tk;
 436            yield return "->";
 437            yield return Member;
 438        }
 39        /// <inheritdoc/>
 840        public override IEnumerable<string> RequiredFunctions() { yield break; }
 41        #region Equality checks
 42        /// <inheritdoc/>
 443        public override bool Equals(object? obj) => Equals(obj as StructReadExpression);
 44        /// <inheritdoc/>
 445        public bool Equals(StructReadExpression? other) => !(other is null) && EqualityComparer<PureExpression>.Default.
 46        /// <inheritdoc/>
 047        public override int GetHashCode() => HashCode.Combine(Structure);
 48        /// <inheritdoc/>
 049        public static bool operator ==(StructReadExpression? left, StructReadExpression? right) => EqualityComparer<Stru
 50        /// <inheritdoc/>
 051        public static bool operator !=(StructReadExpression? left, StructReadExpression? right) => !(left == right);
 52        #endregion
 53    }
 54}