예제 #1
0
        public override void Resolve()
        {
            EnumDef target = _baseField.StructDef.StructFile.GetEnumByName(_targetName);

            if (target == null)
            {
                throw new ParseException("Unknown enum " + _targetName, _position, _targetName.Length);
            }
            _baseField.SetAttributeValue(_attrName, target);
        }
예제 #2
0
파일: EnumDef.cs 프로젝트: yole/structorian
 private void InitBaseEnum()
 {
     if (_baseEnum == null)
     {
         _baseEnum = _structFile.GetEnumByName(_inherit);
         if (_baseEnum == null)
         {
             throw new LoadDataException("Base enum " + _inherit + " not found");
         }
     }
 }
예제 #3
0
        private void LoadEnum(StructLexer lexer, List <Attribute> attrs)
        {
            string  name    = lexer.GetNextToken(StructTokenType.String);
            EnumDef enumDef = new EnumDef(_curStructFile, name);

            LoadAttributes(lexer, attrs);

            foreach (Attribute attr in attrs)
            {
                enumDef.SetAttribute(attr.Key, attr.Value);
            }

            lexer.GetNextToken(StructTokenType.OpenCurly);
            uint lastValue = UInt32.MaxValue;

            while (!lexer.CheckNextToken(StructTokenType.CloseCurly))
            {
                string constName = lexer.GetNextToken(StructTokenType.String);
                if (lexer.CheckNextToken(StructTokenType.Equals))
                {
                    string constValue = lexer.GetNextToken(StructTokenType.String);
                    lastValue = (uint)ExpressionParser.Parse(constValue).EvaluateInt(null);
                }
                else
                {
                    lastValue++;
                }
                enumDef.AddValue(constName, lastValue);

                if (!lexer.CheckNextToken(StructTokenType.Comma))
                {
                    if (lexer.PeekNextToken() != StructTokenType.CloseCurly)
                    {
                        throw new Exception("Unexpected token in enum: " + lexer.PeekNextToken());
                    }
                }
            }
            _curStructFile.Add(enumDef);
        }
예제 #4
0
 public EnumEvaluateContext(IEvaluateContext context, EnumDef def, bool set)
     : base(context)
 {
     _def = def;
     _set = set;
 }
예제 #5
0
 public void Add(EnumDef def)
 {
     _enumDefs.Add(def);
 }
예제 #6
0
 private void InitBaseEnum()
 {
     if (_baseEnum == null)
     {
         _baseEnum = _structFile.GetEnumByName(_inherit);
         if (_baseEnum == null)
             throw new LoadDataException("Base enum " + _inherit + " not found");
     }
 }
예제 #7
0
 public EnumEvaluateContext(IEvaluateContext context, EnumDef def, bool set) : base(context)
 {
     _def = def;
     _set = set;
 }
예제 #8
0
        private void LoadEnum(StructLexer lexer, List<Attribute> attrs)
        {
            string name = lexer.GetNextToken(StructTokenType.String);
            EnumDef enumDef = new EnumDef(_curStructFile, name);
            LoadAttributes(lexer, attrs);

            foreach (Attribute attr in attrs)
                enumDef.SetAttribute(attr.Key, attr.Value);

            lexer.GetNextToken(StructTokenType.OpenCurly);
            uint lastValue = UInt32.MaxValue;
            while(!lexer.CheckNextToken(StructTokenType.CloseCurly))
            {
                string constName = lexer.GetNextToken(StructTokenType.String);
                if (lexer.CheckNextToken(StructTokenType.Equals))
                {
                    string constValue = lexer.GetNextToken(StructTokenType.String);
                    lastValue = (uint) ExpressionParser.Parse(constValue).EvaluateInt(null);
                }
                else
                    lastValue++;
                enumDef.AddValue(constName, lastValue);

                if (!lexer.CheckNextToken(StructTokenType.Comma))
                {
                    if (lexer.PeekNextToken() != StructTokenType.CloseCurly)
                        throw new Exception("Unexpected token in enum: " + lexer.PeekNextToken());
                }
            }
            _curStructFile.Add(enumDef);
        }