Exemple #1
0
 public override string GenerateScript(LanguageOption options, int indentationlevel = 0)
 {
     if (UoToken != null)
     {
         return(UoToken.Value);
     }
     if (Object is UoFieldExpressionNode && ((UoFieldExpressionNode)Object).isConst && !options.HasOption(LanguageOption.Constants))
     {
         int index;
         UoFieldExpressionNode node = (UoFieldExpressionNode)Object;
         if (node.UoTypeToken != Types.List)
         {
             throw new InvalidOperationException(string.Format("Cannot index, This constant expression ({0}) is not a list", node.Name));
         }
         else if (Index.UoToken == null || !Index.UoToken.IsLiteral)
         {
             throw new InvalidOperationException("Constant list indexers must be compile time constants.");
         }
         else if (!Index.UoToken.Value.TryParseHex(out index))
         {
             throw new InvalidOperationException("Constant list indexers must be compile time constant integers.");
         }
         else if (index >= Object.ChildNodes.Count)
         {
             return("0");
         }
         else
         {
             return(((UoFieldExpressionNode)Object.ChildNodes[index]).GenerateScript(options));
         }
     }
     return(string.Format("{0}{1}{2}{3}", Object.GenerateScript(options), Punct.LBrack.Value, Index.GenerateScript(options), Punct.RBrack.Value));
 }
Exemple #2
0
 public override void Init(ParsingContext context, ParseTreeNode treeNode)
 {
     base.Init(context, treeNode);
     SetUoTypeToken(Types.Int);
     Field    = (UoFieldExpressionNode)treeNode.FirstChild.AstNode;
     Operator = ((Tokenizer)treeNode.LastChild.LastChild.Term).Tokenize();
     AsString = Operator.Value;
 }
Exemple #3
0
        public override void Init(ParsingContext context, ParseTreeNode treeNode)
        {
            base.Init(context, treeNode);

            if (treeNode.ChildNodes[0].AstNode is UoFieldExpressionNode)
            {
                Field  = (UoFieldExpressionNode)treeNode.ChildNodes[0].AstNode;
                Assign = (AssignNode)treeNode.ChildNodes[1].AstNode;
            }
            else if (treeNode.ChildNodes[0].AstNode is UnaryAssign)
            {
                Field  = ((UnaryAssign)treeNode.ChildNodes[0].AstNode).Field;
                Assign = (UnaryAssign)treeNode.ChildNodes[0].AstNode;
            }

            ChildNodes.Add(Field);
            ChildNodes.Add(Assign);
            Field.Parent = Assign.Parent = this;
        }
Exemple #4
0
        public override void CheckScope(ParsingContext context)
        {
            if (Object is UoFieldExpressionNode && ((UoFieldExpressionNode)Object).isConst)
            {
                int index;

                UoFieldExpressionNode node = (UoFieldExpressionNode)Object;
                if (node.UoTypeToken != Types.List)
                {
                    context.AddParserMessage(ParserErrorLevel.Error, node.Span, "Cannot index, This constant expression ({0}) is not a list", node.Name);
                }
                else if (Index.UoToken == null || !Index.UoToken.IsLiteral)
                {
                    context.AddParserMessage(ParserErrorLevel.Error, node.Span, "Constant list indexers must be compile time constants.");
                }
                else if (!Index.UoToken.Value.TryParseHex(out index))
                {
                    context.AddParserMessage(ParserErrorLevel.Error, node.Span, "Constant list indexers must be compile time constant integers.");
                }
                else
                {
                    IEnumerable <ConstantDeclarationNode.ConstantListElement> values = (IEnumerable <ConstantDeclarationNode.ConstantListElement>)((UoFieldExpressionNode)Object).Field.Value;
                    if (index < values.Count())
                    {
                        ConstantDeclarationNode.ConstantListElement value = values.ElementAt(index);
                        SetUoToken(value.UoToken);
                        SetUoTypeToken(value.UoTypeToken);
                    }
                }
            }
            else if (Object.UoTypeToken == Types.String)
            {
                SetUoTypeToken(Types.Char);
            }
            else
            {
                SetUoTypeToken(null); // any
            }
        }