BFSchema.Hierarchy.Check C# (CSharp) Method

Check() public method

public Check ( BinaryFileSchema schema ) : void
schema BinaryFileSchema
return void
        public void Check( BinaryFileSchema schema )
        {
            this.schema = schema;

            foreach (IBfsDataBlock block in schema.DatablockList)
            {
                //Generate map over unresolved expression variables;
                foreach (BfsLocalField field in block.LocalFields.Values)
                    if (field.AssignmentExpression != null)
                        CheckExpression(field.AssignmentExpression, block);

                if (block is IBfsStructType)
                {
                    IBfsStructType structType = (IBfsStructType)block;

                    foreach (BfsStructField field in structType.StructFields.Values)
                    {
                        //Check conditional expressions
                        if (field.Conditional != null)
                            CheckExpression(field.Conditional, block);

                        if (field.FieldType.ArrayExtension != null)
                            if(field.FieldType.ArrayExtension is BfsKnownArray)
                                CheckExpression((field.FieldType.ArrayExtension as BfsKnownArray).Expression, block);
                            //Check that no unknown sized arrays are located within any structure that is compressed (seeking not allowed)
                            else if(field.FieldType.ArrayExtension is BfsUnknownArray && structType.CompressionMethod != null)
                                BfsCompiler.ReportError(field.FieldType.ArrayExtension.SourceRange,
                                    "Cannot have unknown sized arrays within compressed blocks: '" + field.Name + "'");

                    }
                }
                else if (block is BfsEnum)
                {
                    foreach( BfsEnumField field in (block as BfsEnum).EnumFields)
                        if(field.Actions != null)
                            foreach( IBfsAction action in field.Actions )
                                if( action is BfsActionAssignment )
                                    CheckExpression((action as BfsActionAssignment).Expression, block);
                }
                else if (block is BfsBitfield)
                {
                    foreach (BfsBitfieldField field in (block as BfsBitfield).BitFieldFields)
                        if (field.Actions != null)
                            foreach (IBfsAction action in field.Actions)
                                if (action is BfsActionAssignment)
                                    CheckExpression((action as BfsActionAssignment).Expression, block);
                }
            }
        }