Esempio n. 1
0
        private static IValue GetStructureVersionHolder(this IVault vault)
        {
            // Load all possible version holders
            var versionHolder1 = vault.GetValue("$version");
            var versionHolder2 = vault.GetValue("$format");
            var versionHolder3 = vault.GetValue("$structureversion");

            // Get version token from the latest holder
            var genuineHolder = versionHolder3 ?? versionHolder2 ?? versionHolder1;

            genuineHolder = genuineHolder ?? vault.CreateValue("$structureversion");
            var genuineVersion = genuineHolder.ContentString;

            // Ensure that all kinds of version holders are present in the vault (backward compat!)
            versionHolder1 = versionHolder1 ?? vault.GetOrCreateValue("$version");
            versionHolder2 = versionHolder2 ?? vault.GetOrCreateValue("$format");
            versionHolder3 = versionHolder3 ?? vault.GetOrCreateValue("$structureversion");
            var allHolders = new [] { versionHolder1, versionHolder2, versionHolder3 };

            // Now synchronize all version signatures across all holders
            foreach (var anyVersionHolder in allHolders)
            {
                if (anyVersionHolder != null)
                {
                    anyVersionHolder.SetContent(genuineVersion);
                }
            }

            // Return only the latest holder
            return(genuineHolder);
        }
Esempio n. 2
0
        private static Expression Expand(VariableExpression vex, IVault vault, IVault repository, List<Expression> stack, Dictionary<String, IBranch> nodes)
        {
            var @ref = vault.GetBranch(vex.Name.FromElfIdentifier());
            if (@ref == null)
            {
                throw new ReferencedBranchDoesNotExistException(vex.Name);
            }

            if (@ref.IsFov())
            {
                if (@ref.GetOrCreateValue("declarationType", "source").ContentString == "source")
                {
                    String val;
                    if (repository == null)
                    {
                        val = @ref.GetValue("valueForTesting").ContentString;
                    }
                    else
                    {
                        var external = @ref.GetValue("repositoryValue").ContentString;
                        val = repository.GetValue(external).ContentString;
                    }

                    return new LiteralExpression(String.Format("[[{0}]]{1}", @ref.GetValue("type").ContentString, val));
                }
                else
                {
                    return ExpandRhs(@ref, repository, stack, nodes);
                }
            }
            else
            {
                var varName = @ref.VPath.ToElfIdentifier();
                nodes[varName] = @ref;
                return new VariableExpression(varName);
            }
        }