Esempio n. 1
0
 private static void CoerceString(ref object value, LiteralType type)
 {
     if (type != LiteralType.String)
     {
         value = value.ToString();
     }
 }
Esempio n. 2
0
        public Literal BuildLiteral(LiteralType type)
        {
            switch (type)
                {
                    case LiteralType.Integer:
                        return new IntegerLiteral();

                    case LiteralType.Real:
                        return new RealLiteral();
                    case LiteralType.Money:
                        return new MoneyLiteral();
                    case LiteralType.Binary:
                        return new BinaryLiteral();
                    case LiteralType.String:
                        return new StringLiteral();
                    case LiteralType.Null:
                        return new NullLiteral();
                    case LiteralType.Default:
                        return new DefaultLiteral();
                    case LiteralType.Max:
                        return new MaxLiteral();
                    case LiteralType.Odbc:
                        return new OdbcLiteral();
                    case LiteralType.Identifier:
                        return new IdentifierLiteral();
                    case LiteralType.Numeric:
                        return new NumericLiteral();
                }

                throw new ArgumentException("Unknown literal type");
        }
Esempio n. 3
0
        private IType TypeFromLiteralType(LiteralType type)
        {
            switch (type)
            {
            case LiteralType.String: return(NHibernateUtil.String);

            case LiteralType.Boolean: return(NHibernateUtil.Boolean);

            case LiteralType.Single: return(NHibernateUtil.Single);

            case LiteralType.Double: return(NHibernateUtil.Double);

            case LiteralType.Decimal: return(NHibernateUtil.Decimal);

            case LiteralType.Int: return(NHibernateUtil.Int32);

            case LiteralType.Long: return(NHibernateUtil.Int64);

            case LiteralType.Binary: return(NHibernateUtil.Binary);

            case LiteralType.DateTime: return(NHibernateUtil.DateTime);

            case LiteralType.Guid: return(NHibernateUtil.Guid);

            case LiteralType.Duration: return(NHibernateUtil.TimeSpan);

            default: throw new NotSupportedException();
            }
        }
Esempio n. 4
0
        List <Literal> CoerceLiteralsToSingleType(List <Runtime.Object> parametersIn)
        {
            LiteralType litType = LiteralType.Int;

            // Find out what the output type is
            // "higher level" types infect both so that binary operations
            // use the same type on both sides. e.g. binary operation of
            // int and float causes the int to be casted to a float.
            foreach (var obj in parametersIn)
            {
                var literal = (Literal)obj;
                if (literal.literalType > litType)
                {
                    litType = literal.literalType;
                }
            }

            // Coerce to this chosen type
            var parametersOut = new List <Literal> ();

            foreach (Literal literal in parametersIn)
            {
                var castedLiteral = literal.Cast(litType);
                parametersOut.Add(castedLiteral);
            }

            return(parametersOut);
        }
Esempio n. 5
0
        static void _ldtoken()
        {
            var type        = Instruction.TypeOperand;
            var literalType = new LiteralType(type);

            emitPush <LiteralType>(literalType);
        }
Esempio n. 6
0
        public override Literal Cast(LiteralType newType)
        {
            if (newType == literalType)
            {
                return(this);
            }

            if (newType == LiteralType.Int)
            {
                int parsedInt;
                if (int.TryParse(value, out parsedInt))
                {
                    return(new LiteralInt(parsedInt));
                }
                else
                {
                    return(null);
                }
            }

            if (newType == LiteralType.Float)
            {
                float parsedFloat;
                if (float.TryParse(value, out parsedFloat))
                {
                    return(new LiteralFloat(parsedFloat));
                }
                else
                {
                    return(null);
                }
            }

            throw new System.Exception("Unexpected type cast of Literal to new LiteralType");
        }
 private static ScalarExpression GetColumnValue(string value, LiteralType type)
 {
     switch (type)
     {
         case LiteralType.Integer:
             return new IntegerLiteral {Value = value};
         case LiteralType.Real:
             return new RealLiteral {Value = value};
         case LiteralType.Money:
             return new MoneyLiteral {Value = value};
         case LiteralType.Binary:
             return new BinaryLiteral {Value = value};
         case LiteralType.String:
             return new StringLiteral {Value = value.Replace("'", "''")};
         case LiteralType.Null:
             return new NullLiteral {Value = value};
         case LiteralType.Default:
             return new DefaultLiteral {Value = value};
         case LiteralType.Max:
             return new MaxLiteral {Value = value};
         case LiteralType.Odbc:
             return new OdbcLiteral {Value = value};
         case LiteralType.Identifier:
             return new IdentifierLiteral {Value = value};
             ;
         case LiteralType.Numeric:
             return new NumericLiteral {Value = value};
             ;
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
Esempio n. 8
0
        public Literal(string value, LiteralType type)
        {
            var rawValue = TryGetObjectValue(value, type);

            Value = rawValue;
            Type  = type;
        }
Esempio n. 9
0
        private static void CoerceDecimal(ref object value, LiteralType type)
        {
            switch (type)
            {
            case LiteralType.Long:
                value = (decimal)(long)value;
                break;

            case LiteralType.Int:
                value = (decimal)(int)value;
                break;

            case LiteralType.Single:
                value = (decimal)(float)value;
                break;

            case LiteralType.Double:
                value = (decimal)(double)value;
                break;

            case LiteralType.Decimal:
                break;

            default:
                throw new NotSupportedException();
            }
        }
Esempio n. 10
0
        private slice <byte> LiteralType(LiteralType lit)
        {
            var result = lit.Token.Text.AsByteSlice();

            switch (lit.Token.Type)
            {
            case TokenType.HEREDOC:
                // Clear the trailing newline from heredocs
                if (result[result.Length - 1] == '\n')
                {
                    result = result.Slice(upper: result.Length - 1);
                }

                // Poison lines 2+ so that we don't indent them
                result = this.HeredocIndent(result);
                break;

            case TokenType.STRING:
                // If this is a multiline string, poison lines 2+ so we don't
                // indent them.

                if (result.IndexOf((byte)'\n') >= 0)
                {
                    result = this.HeredocIndent(result);
                }
                break;
            }

            return(result);
        }
Esempio n. 11
0
        public LiteralToken(object value, LiteralType literalType)
            : base(TokenType.Literal)
        {
            Value = value;
            LiteralType = literalType;

            Debug.Assert(literalType == LiteralUtil.GetLiteralType(value));
        }
Esempio n. 12
0
        public LiteralToken(object value, LiteralType literalType)
            : base(TokenType.Literal)
        {
            Value       = value;
            LiteralType = literalType;

            Debug.Assert(literalType == LiteralUtil.GetLiteralType(value));
        }
Esempio n. 13
0
 public bool Equals(LiteralExpression compareNode)
 {
     return
         (compareNode != null &&
          LiteralType?.Equals(compareNode.LiteralType) != false &&
          SemanticType?.Equals(compareNode.SemanticType) != false &&
          base.Equals(compareNode));
 }
Esempio n. 14
0
        public static Int32 GetCloserOfPositionOfLiteral(String Code, Int32 SearchOffset, LiteralType Type)
        {
            Regex Expression = (Type == LiteralType.String)
                ? (new Regex("[^\\\\]?\""))
                : (new Regex("[^\\\\]?'"));

            Match CloserMatch = Expression.Match(Code, SearchOffset);
            return (CloserMatch.Success) ? (CloserMatch.Index + CloserMatch.Length - 1) : IndexNotFound;
        }
Esempio n. 15
0
        void AddOpFuncForType(LiteralType litType, object op)
        {
            if (_operationFuncs == null)
            {
                _operationFuncs = new Dictionary <LiteralType, object> ();
            }

            _operationFuncs [litType] = op;
        }
Esempio n. 16
0
        public override Literal Cast(LiteralType newType)
        {
            if (newType == literalType)
            {
                return(this);
            }

            throw new System.Exception("Unexpected type cast of Literal to new LiteralType");
        }
Esempio n. 17
0
        private void DoGetHashCodeTest(object obj, LiteralType type)
        {
            // Arrange
            Literal sut = new Literal(obj, type);

            // Act
            int result = sut.GetHashCode();

            // Assert
        }
Esempio n. 18
0
        IsolateNumericLiteral(
            ScanStream ScanStream,
            TextTraits Traits,
            int Bx)
        {
            // for now, all numeric literals are simple integers.
            // have to expand to determine if a float, decimal, what the sign is,
            // what the precision is.
            LiteralType litType = LiteralType.Integer;

            string             litText = null;
            PatternScanResults nonWord = null;

            // step from char to char. Look for a char that is not part of the
            // numeric literal.
            int ix    = Bx;
            int litEx = Bx;

            while (true)
            {
                if (ix >= ScanStream.Stream.Length)
                {
                    break;
                }
                char ch1 = ScanStream.Stream[ix];
                if (Char.IsDigit(ch1) == false)
                {
                    break;
                }

                litEx = ix;
                ix   += 1;
            }

            // isolate the numeric literal.
            int lx = litEx - Bx + 1;

            litText = ScanStream.Substring(Bx, lx);

            // isolate the delim that follows that numeric literal.
            int bx = litEx + 1;

            if (bx < ScanStream.Stream.Length)
            {
                nonWord = Scanner.ScanEqualAny(ScanStream.Stream, bx, Traits.DelimPatterns);
//        foundPat = rv.Item1;
//        foundIx = rv.Item2;
//        foundLx = rv.Item3;
//        nonWord = rv.Item3;
            }

            return(new Tuple <LiteralType, string, PatternScanResults>(
                       litType, litText, nonWord));
        }
 private bool ResolveEquals(object left, object right, LiteralType type)
 {
     if (type == LiteralType.Binary)
     {
         return(LiteralUtil.ByteArrayEquals((byte[])left, (byte[])right));
     }
     else
     {
         return(Equals(left, right));
     }
 }
Esempio n. 20
0
        private void DoEqualsTest(object a, LiteralType aType, object b, LiteralType bType, bool expected)
        {
            // Arrange
            Literal aa = new Literal(a, aType);
            Literal bb = new Literal(b, bType);

            // Act
            bool result = aa.Equals(bb);

            // Assert
            Assert.AreEqual(expected, result);
        }
Esempio n. 21
0
        static void AddOpToNativeFunc(string name, int args, LiteralType litType, object op)
        {
            NativeFunctionCall nativeFunc = null;

            if (!_nativeFunctions.TryGetValue(name, out nativeFunc))
            {
                nativeFunc = new NativeFunctionCall(name, args);
                _nativeFunctions [name] = nativeFunc;
            }

            nativeFunc.AddOpFuncForType(litType, op);
        }
Esempio n. 22
0
 public AtomText(
     ScanAtomCode AtomCode,
     string LitText, LiteralType LiteralType,
     TextLocation StartLoc, TextLocation EndLoc)
 {
     this.AtomCode        = AtomCode;
     this.ScanText        = LitText;
     this.ReplacementText = null;
     this.LiteralType     = LiteralType;
     this.StartLoc        = StartLoc;
     this.EndLoc          = EndLoc;
     this.UserCode        = null;
 }
Esempio n. 23
0
 public static bool IsQuoted(this LiteralType LitType)
 {
     if ((LitType == LiteralType.String) ||
         (LitType == LiteralType.VerbatimString) ||
         (LitType == LiteralType.Char))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Esempio n. 24
0
        public byte ReadByteValue()
        {
            byte        result      = 0;
            LiteralType literalType = LiteralType.Decimal;
            string      sval        = "";

            if (Peek() == '0')
            {
                if (char.ToLower(Peek(1)) == 'x')
                {
                    CurrentNdx += 2;
                    literalType = LiteralType.Hexidecimal;
                }
                else if (char.ToLower(Peek(1)) == 'b')
                {
                    CurrentNdx += 2;
                    literalType = LiteralType.Binary;
                }
                else if (char.ToLower(Peek(1)) == 'd')
                {
                    CurrentNdx += 2;
                    literalType = LiteralType.Decimal;
                }
            }

            while (char.IsLetterOrDigit(Peek()))
            {
                sval += Get();
            }

            switch (literalType)
            {
            case LiteralType.Binary:
                result = Convert.ToByte(sval, 2);
                break;

            case LiteralType.Hexidecimal:
                result = Convert.ToByte(sval, 16);
                break;

            case LiteralType.Decimal:
                result = byte.Parse(sval);
                break;

            default:
                result = 0;
                break;
            }

            return(result);
        }
        IsolateQuotedWord(
            ScanStream ScanStream,
            TextTraits Traits,
            int Bx)
        {
            LiteralType litType = LiteralType.none;
            string      litText = null;
            char        ch1     = ScanStream.Stream[Bx];

            ScanPattern foundPat = null;
            int         foundIx  = -1;
            int         quoteEx  = -1;

            // is start of a verbatim string literal
            if ((Traits.VerbatimLiteralPattern != null) &&
                (Traits.VerbatimLiteralPattern.Match(ScanStream.Stream, Bx)))
            {
                var rv = VerbatimLiteral.ScanCloseQuote(
                    ScanStream.Stream, Traits.VerbatimLiteralPattern, Bx);
                quoteEx = rv.Item1;
                litText = rv.Item2;
                litType = LiteralType.VerbatimString;
            }

            // is a quoted literal
            else if (Traits.IsQuoteChar(ch1) == true)
            {
                quoteEx = Scanner.ScanCloseQuote(ScanStream.Stream, Bx, Traits.QuoteEncapsulation);
                if (quoteEx != -1)
                {
                    int lx = quoteEx - Bx + 1;
                    litText = ScanStream.Substring(Bx, lx);

                    // correct the following at some point. Should be either string or
                    // char lit.
                    litType = LiteralType.String;
                }
            }

            // isolate the delim that follows that quoted word.
            {
                int bx = quoteEx + 1;
                var rv = Scanner.ScanEqualAny(ScanStream.Stream, bx, Traits.DelimPatterns);
                foundPat = rv.Item1;
                foundIx  = rv.Item2;
            }

            return(new Tuple <LiteralType, string, ScanPattern, int>(
                       litType, litText, foundPat, foundIx));
        }
Esempio n. 26
0
 public static bool IsNumeric(this LiteralType LitType)
 {
     if ((LitType == LiteralType.Decimal) ||
         (LitType == LiteralType.Float) ||
         (LitType == LiteralType.Integer) ||
         (LitType == LiteralType.Long))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Esempio n. 27
0
        private static void CoerceLong(ref object value, LiteralType type)
        {
            switch (type)
            {
            case LiteralType.Long:
                break;

            case LiteralType.Int:
                value = (long)(int)value;
                break;

            default:
                throw new NotSupportedException();
            }
        }
Esempio n. 28
0
        private static object TryGetObjectValue(string value, LiteralType type)
        {
            switch (type)
            {
            case LiteralType.String: return(value);

            case LiteralType.Int: return(int.Parse(value));

            case LiteralType.Bool: return(bool.Parse(value));

            case LiteralType.Double: return(double.Parse(value));
            }

            throw new InvalidOperationException($"Cannot get literal value of type {type}.");
        }
Esempio n. 29
0
        Literal Call <T>(List <Literal> parametersOfSingleType)
        {
            Literal     param1  = (Literal)parametersOfSingleType [0];
            LiteralType litType = param1.literalType;

            var val1 = (Literal <T>)param1;

            int paramCount = parametersOfSingleType.Count;

            if (paramCount == 2 || paramCount == 1)
            {
                object opForTypeObj = null;
                if (!_operationFuncs.TryGetValue(litType, out opForTypeObj))
                {
                    throw new StoryException("Can not perform operation '" + this.name + "' on " + litType);
                }

                // Binary
                if (paramCount == 2)
                {
                    Literal param2 = (Literal)parametersOfSingleType [1];

                    var val2 = (Literal <T>)param2;

                    var opForType = (BinaryOp <T>)opForTypeObj;

                    // Return value unknown until it's evaluated
                    object resultVal = opForType(val1.value, val2.value);

                    return(Literal.Create(resultVal));
                }

                // Unary
                else
                {
                    var opForType = (UnaryOp <T>)opForTypeObj;

                    var resultVal = opForType(val1.value);

                    return(Literal.Create(resultVal));
                }
            }

            else
            {
                throw new System.Exception("Unexpected number of parameters to NativeFunctionCall: " + parametersOfSingleType.Count);
            }
        }
Esempio n. 30
0
 public LiteralNode(LiteralType t, object val) : base(NodeType.LiteralNode)
 {
     this.type  = t;
     this.Value = val;
     children   = new List <BaseNode>();
     if (t == LiteralType.String)
     {
         string v = (string)val;
         Value = v.Substring(5);
     }
     if (t == LiteralType.Func)
     {
         children.Add((FuncLiteral)Value);
     }
     initReturnType();
 }
Esempio n. 31
0
        public static LiteralType CoerceLiteralValues(ref object left, LiteralType leftType, ref object right, LiteralType rightType)
        {
            if (leftType == rightType)
            {
                return(leftType);
            }

            if (leftType != LiteralType.Null && rightType != LiteralType.Null)
            {
                if (leftType == LiteralType.String || rightType == LiteralType.String)
                {
                    CoerceString(ref left, leftType);
                    CoerceString(ref right, rightType);

                    return(LiteralType.String);
                }
                else if (IsInteger(leftType) && IsInteger(rightType))
                {
                    CoerceLong(ref left, leftType);
                    CoerceLong(ref right, rightType);

                    return(LiteralType.Long);
                }
                else if (IsFloatingOrInteger(leftType) && IsFloatingOrInteger(rightType))
                {
                    if (leftType == LiteralType.Decimal || rightType == LiteralType.Decimal)
                    {
                        CoerceDecimal(ref left, leftType);
                        CoerceDecimal(ref right, rightType);

                        return(LiteralType.Decimal);
                    }
                    else
                    {
                        CoerceDouble(ref left, leftType);
                        CoerceDouble(ref right, rightType);

                        return(LiteralType.Double);
                    }
                }
            }

            throw new ODataException(String.Format(
                                         ErrorMessages.LiteralUtil_IncompatibleTypes,
                                         leftType, rightType
                                         ));
        }
        private object ResolveMod(object left, object right, LiteralType type)
        {
            switch (type)
            {
            case LiteralType.Decimal: return((decimal)left % (decimal)right);

            case LiteralType.Double: return((double)left % (double)right);

            case LiteralType.Int: return((int)left % (int)right);

            case LiteralType.Long: return((long)left % (long)right);

            case LiteralType.Single: return((float)left % (float)right);

            default: return(null);
            }
        }
Esempio n. 33
0
        /// <summary>
        ///     Sets the entity to be a literal of the type specified.
        /// </summary>
        /// <param name="token">One of "CDATA", "SDATA" or "PI".</param>
        public void SetLiteralType(string token)
        {
            switch (token)
            {
            case "CDATA":
                this.m_literalType = LiteralType.CDATA;
                break;

            case "SDATA":
                this.m_literalType = LiteralType.SDATA;
                break;

            case "PI":
                this.m_literalType = LiteralType.PI;
                break;
            }
        }
        private object ResolveSub(object left, object right, LiteralType type)
        {
            switch (type)
            {
            case LiteralType.Decimal: return((decimal)left - (decimal)right);

            case LiteralType.Double: return((double)left - (double)right);

            // case LiteralType.Duration: return (XmlTimeSpan)left - (XmlTimeSpan)right;
            case LiteralType.Int: return((int)left - (int)right);

            case LiteralType.Long: return((long)left - (long)right);

            case LiteralType.Single: return((float)left - (float)right);

            default: return(null);
            }
        }
Esempio n. 35
0
		void CheckSoapBindingExtensions (ConformanceCheckContext ctx, Binding value, LiteralType type)
		{
			bool violationNS = false;
			bool violation2717 = false;
			bool violation2720 = false;
			bool violation2721 = false;

			foreach (OperationBinding op in value.Operations) {
				SoapBodyBinding sbb = op.Extensions.Find (typeof (SoapBodyBinding)) as SoapBodyBinding;
				if (sbb != null) {
					if (type == LiteralType.Document && sbb.Namespace != null)
						violationNS = true;
					if (type == LiteralType.Rpc && sbb.Namespace == null)
						violation2717 = true;
				}

				SoapHeaderBinding shb = op.Extensions.Find (typeof (SoapHeaderBinding)) as SoapHeaderBinding;
				if (shb != null) {
					violationNS |= shb.Namespace != null;
					violation2720 |= !IsValidPart (shb.Part);
				}

				SoapHeaderFaultBinding sfhb = op.Extensions.Find (typeof (SoapHeaderFaultBinding)) as SoapHeaderFaultBinding;
				if (sfhb != null) {
					violationNS |= sfhb.Namespace != null;
					violation2720 |= !IsValidPart (sfhb.Part);
				}

				SoapFaultBinding sfb = op.Extensions.Find (typeof (SoapFaultBinding)) as SoapFaultBinding;
				if (sfb != null) {
					violation2721 |= sfb.Name == null;
					violationNS |= sfb.Namespace != null;
				}
			}
			if (violationNS)
				ctx.ReportRuleViolation (value,
					type == LiteralType.Document ?
					BasicProfileRules.R2716 :
					BasicProfileRules.R2726);
			if (violation2717)
				ctx.ReportRuleViolation (value, BasicProfileRules.R2717);
			if (violation2720)
				ctx.ReportRuleViolation (value, BasicProfileRules.R2720);
			if (violation2721)
				ctx.ReportRuleViolation (value, BasicProfileRules.R2721);
		}
Esempio n. 36
0
 public void SetLiteralType(string token) {
     switch (token) {
         case "CDATA":
             LiteralType = LiteralType.CDATA;
             break;
         case "SDATA":
             LiteralType = LiteralType.SDATA;
             break;
         case "PI":
             LiteralType = LiteralType.PI;
             break;
     }
 }
Esempio n. 37
0
        private Token ScanLiteral(LiteralType literalType)
        {
            Debug.Assert(_chars[_curPos] == '"' || _chars[_curPos] == '\'');

            char quoteChar = _chars[_curPos];
            char replaceChar = (literalType == LiteralType.AttributeValue) ? (char)0x20 : (char)0xA;
            int startQuoteEntityId = _currentEntityId;

            _literalLineInfo.Set(LineNo, LinePos);

            _curPos++;
            _tokenStartPos = _curPos;

#if SILVERLIGHT
            stringBuilder.Clear();
#else
            _stringBuilder.Length = 0;
#endif

            for (;;)
            {
                while (_xmlCharType.IsAttributeValueChar(_chars[_curPos]) && _chars[_curPos] != '%')
                {
                    _curPos++;
                }

                if (_chars[_curPos] == quoteChar && _currentEntityId == startQuoteEntityId)
                {
                    if (_stringBuilder.Length > 0)
                    {
                        _stringBuilder.Append(_chars, _tokenStartPos, _curPos - _tokenStartPos);
                    }
                    _curPos++;
                    _literalQuoteChar = quoteChar;
                    return Token.Literal;
                }

                int tmp1 = _curPos - _tokenStartPos;
                if (tmp1 > 0)
                {
                    _stringBuilder.Append(_chars, _tokenStartPos, tmp1);
                    _tokenStartPos = _curPos;
                }

                switch (_chars[_curPos])
                {
                    case '"':
                    case '\'':
                    case '>':
                        _curPos++;
                        continue;
                    // eol
                    case (char)0xA:
                        _curPos++;
                        if (Normalize)
                        {
                            _stringBuilder.Append(replaceChar);        // For attributes: CDATA normalization of 0xA
                            _tokenStartPos = _curPos;
                        }
                        _readerAdapter.OnNewLine(_curPos);
                        continue;
                    case (char)0xD:
                        if (_chars[_curPos + 1] == (char)0xA)
                        {
                            if (Normalize)
                            {
                                if (literalType == LiteralType.AttributeValue)
                                {
                                    _stringBuilder.Append(_readerAdapter.IsEntityEolNormalized ? "\u0020\u0020" : "\u0020"); // CDATA normalization of 0xD 0xA
                                }
                                else
                                {
                                    _stringBuilder.Append(_readerAdapter.IsEntityEolNormalized ? "\u000D\u000A" : "\u000A"); // EOL normalization of 0xD 0xA                                    
                                }
                                _tokenStartPos = _curPos + 2;

                                SaveParsingBuffer();          // EOL normalization of 0xD 0xA in internal subset value
                                _readerAdapter.CurrentPosition++;
                            }
                            _curPos += 2;
                        }
                        else if (_curPos + 1 == _charsUsed)
                        {
                            goto ReadData;
                        }
                        else
                        {
                            _curPos++;
                            if (Normalize)
                            {
                                _stringBuilder.Append(replaceChar); // For attributes: CDATA normalization of 0xD and 0xD 0xA
                                _tokenStartPos = _curPos;              // For entities:   EOL normalization of 0xD and 0xD 0xA
                            }
                        }
                        _readerAdapter.OnNewLine(_curPos);
                        continue;
                    // tab
                    case (char)0x9:
                        if (literalType == LiteralType.AttributeValue && Normalize)
                        {
                            _stringBuilder.Append((char)0x20);      // For attributes: CDATA normalization of 0x9
                            _tokenStartPos++;
                        }
                        _curPos++;
                        continue;
                    // attribute values cannot contain '<'
                    case '<':
                        if (literalType == LiteralType.AttributeValue)
                        {
                            Throw(_curPos, SR.Xml_BadAttributeChar, XmlException.BuildCharExceptionArgs('<', '\0'));
                        }
                        _curPos++;
                        continue;
                    // parameter entity reference
                    case '%':
                        if (literalType != LiteralType.EntityReplText)
                        {
                            _curPos++;
                            continue;
                        }
                        HandleEntityReference(true, true, literalType == LiteralType.AttributeValue);
                        _tokenStartPos = _curPos;
                        continue;
                    // general entity reference
                    case '&':
                        if (literalType == LiteralType.SystemOrPublicID)
                        {
                            _curPos++;
                            continue;
                        }
                        if (_curPos + 1 == _charsUsed)
                        {
                            goto ReadData;
                        }
                        // numeric characters reference
                        if (_chars[_curPos + 1] == '#')
                        {
                            SaveParsingBuffer();
                            int endPos = _readerAdapter.ParseNumericCharRef(SaveInternalSubsetValue ? _internalSubsetValueSb : null);
                            LoadParsingBuffer();
                            _stringBuilder.Append(_chars, _curPos, endPos - _curPos);
                            _readerAdapter.CurrentPosition = endPos;
                            _tokenStartPos = endPos;
                            _curPos = endPos;
                            continue;
                        }
                        else
                        {
                            // general entity reference
                            SaveParsingBuffer();
                            if (literalType == LiteralType.AttributeValue)
                            {
                                int endPos = _readerAdapter.ParseNamedCharRef(true, SaveInternalSubsetValue ? _internalSubsetValueSb : null);
                                LoadParsingBuffer();

                                if (endPos >= 0)
                                {
                                    _stringBuilder.Append(_chars, _curPos, endPos - _curPos);
                                    _readerAdapter.CurrentPosition = endPos;
                                    _tokenStartPos = endPos;
                                    _curPos = endPos;
                                    continue;
                                }
                                else
                                {
                                    HandleEntityReference(false, true, true);
                                    _tokenStartPos = _curPos;
                                }
                                continue;
                            }
                            else
                            {
                                int endPos = _readerAdapter.ParseNamedCharRef(false, null);
                                LoadParsingBuffer();

                                if (endPos >= 0)
                                {
                                    _tokenStartPos = _curPos;
                                    _curPos = endPos;
                                    continue;
                                }
                                else
                                {
                                    _stringBuilder.Append('&');
                                    _curPos++;
                                    _tokenStartPos = _curPos;
                                    // Bypass general entities in entity values
                                    XmlQualifiedName entityName = ScanEntityName();
                                    VerifyEntityReference(entityName, false, false, false);
                                }
                                continue;
                            }
                        }
                    default:
                        // end of buffer
                        if (_curPos == _charsUsed)
                        {
                            goto ReadData;
                        }
                        // surrogate chars
                        else
                        {
                            char ch = _chars[_curPos];
                            if (XmlCharType.IsHighSurrogate(ch))
                            {
                                if (_curPos + 1 == _charsUsed)
                                {
                                    goto ReadData;
                                }
                                _curPos++;
                                if (XmlCharType.IsLowSurrogate(_chars[_curPos]))
                                {
                                    _curPos++;
                                    continue;
                                }
                            }
                            ThrowInvalidChar(_chars, _charsUsed, _curPos);
                            return Token.None;
                        }
                }

            ReadData:
                Debug.Assert(_curPos - _tokenStartPos == 0);

                // read new characters into the buffer
                if (_readerAdapter.IsEof || ReadData() == 0)
                {
                    if (literalType == LiteralType.SystemOrPublicID || !HandleEntityEnd(true))
                    {
                        Throw(_curPos, SR.Xml_UnclosedQuote);
                    }
                }
                _tokenStartPos = _curPos;
            }
        }
Esempio n. 38
0
 private static void CoerceString(ref object value, LiteralType type)
 {
     if (type != LiteralType.String)
         value = value.ToString();
 }
Esempio n. 39
0
 /// <summary>
 /// Sets the entity to be a literal of the type specified.
 /// </summary>
 /// <param name="token">One of "CData", "SData" or "PI".</param>
 public void SetLiteralType(string token)
 {
     switch (token)
     {
         case "CDATA":
             _literalType = LiteralType.CData;
             break;
         case "SDATA":
             _literalType = LiteralType.SData;
             break;
         case "PI":
             _literalType = LiteralType.ProcessingInstruction;
             break;
         default:
             throw Error.InvalidLiteralTypeValue(token);
     }
 }
Esempio n. 40
0
        private Token ScanLiteral( LiteralType literalType ) {
            Debug.Assert( chars[curPos] == '"' || chars[curPos] == '\'' );
            
            char quoteChar = chars[curPos];
            char replaceChar = ( literalType == LiteralType.AttributeValue ) ? (char)0x20 : (char)0xA;
            int startQuoteEntityId = currentEntityId;

            literalLineInfo.Set( LineNo, LinePos );

            curPos++;
            tokenStartPos = curPos;

            stringBuilder.Length = 0;

            for (;;) {
                unsafe {
                    while ( ( xmlCharType.charProperties[chars[curPos]] & XmlCharType.fAttrValue ) != 0 && chars[curPos] != '%' ) {
                        curPos++;
                    }
                }

                if ( chars[curPos] == quoteChar && currentEntityId == startQuoteEntityId ) {
                    if ( stringBuilder.Length > 0 ) {
                        stringBuilder.Append( chars, tokenStartPos, curPos - tokenStartPos );
                    }
                    curPos++;
                    literalQuoteChar = quoteChar;
                    return Token.Literal;
                }

                int tmp1 = curPos - tokenStartPos;
                if ( tmp1 > 0 ) {
                    stringBuilder.Append( chars, tokenStartPos, tmp1 );
                    tokenStartPos = curPos;
                }

                switch ( chars[curPos] ) {
                    case '"':
                    case '\'':
                    case '>':
                        curPos++;
                        continue;
                    // eol
                    case (char)0xA:
                        curPos++;
                        if ( normalize ) {
                            stringBuilder.Append( replaceChar );        // For attributes: CDATA normalization of 0xA
                            tokenStartPos = curPos;
                        }
                        readerAdapter.OnNewLine( curPos );
                        continue;
                    case (char)0xD:
                        if ( chars[curPos+1] == (char)0xA ) {
                            if ( normalize ) {
                                if ( literalType == LiteralType.AttributeValue ) {
                                    stringBuilder.Append( readerAdapter.IsEntityEolNormalized ? "\u0020\u0020" : "\u0020" ); // CDATA normalization of 0xD 0xA
                                }
                                else {
                                    stringBuilder.Append( readerAdapter.IsEntityEolNormalized ? "\u000D\u000A" : "\u000A" ); // EOL normalization of 0xD 0xA									
                                }
                                tokenStartPos = curPos + 2;

                                SaveParsingBuffer();          // EOL normalization of 0xD 0xA in internal subset value
                                readerAdapter.CurrentPosition++;
                            }
                            curPos += 2;
                        }
                        else if ( curPos+1 == charsUsed ) {
                            goto ReadData;
                        }
                        else {
                            curPos++;
                            if ( normalize ) {
                                stringBuilder.Append( replaceChar ); // For attributes: CDATA normalization of 0xD and 0xD 0xA
                                tokenStartPos = curPos;              // For entities:   EOL normalization of 0xD and 0xD 0xA
                            }
                        }
                        readerAdapter.OnNewLine( curPos );
                        continue;
                    // tab
                    case (char)0x9:
                        if ( literalType == LiteralType.AttributeValue && normalize ) {
                            stringBuilder.Append( (char)0x20 );      // For attributes: CDATA normalization of 0x9
                            tokenStartPos++;
                        }
                        curPos++;
                        continue;
                    // attribute values cannot contain '<'
                    case '<':
                        if ( literalType == LiteralType.AttributeValue ) {
                            Throw( curPos, Res.Xml_BadAttributeChar, XmlException.BuildCharExceptionStr( '<' ) );
                        }
                        curPos++;
                        continue;
                    // parameter entity reference
                    case '%':
                        if ( literalType != LiteralType.EntityReplText ) {
                            curPos++;
                            continue;
                        }
                        HandleEntityReference( true, true, literalType == LiteralType.AttributeValue );
                        tokenStartPos = curPos;
                        continue;
                    // general entity reference
                    case '&':
                        if ( literalType == LiteralType.SystemOrPublicID ) {
                            curPos++;
                            continue;
                        }
                        if ( curPos + 1 == charsUsed ) {
                            goto ReadData;
                        }
                        // numeric characters reference
                        if ( chars[curPos + 1] == '#' ) {
                            SaveParsingBuffer();
                            int endPos = readerAdapter.ParseNumericCharRef( SaveInternalSubsetValue ? internalSubsetValueSb : null );
                            LoadParsingBuffer();
                            stringBuilder.Append( chars, curPos, endPos - curPos );
                            readerAdapter.CurrentPosition = endPos;
                            tokenStartPos = endPos;
                            curPos = endPos;
                            continue;
                        }
                        else {
                            // general entity reference
                            SaveParsingBuffer();
                            if ( literalType == LiteralType.AttributeValue ) {
                                int endPos = readerAdapter.ParseNamedCharRef( true, SaveInternalSubsetValue ? internalSubsetValueSb : null );
                                LoadParsingBuffer();

                                if ( endPos >= 0 ) {
                                    stringBuilder.Append( chars, curPos, endPos - curPos );
                                    readerAdapter.CurrentPosition = endPos;
                                    tokenStartPos = endPos;
                                    curPos = endPos;
                                    continue;
                                }
                                else {
                                    HandleEntityReference( false, true, true );
                                    tokenStartPos = curPos;
                                }
                                continue;
                            }
                            else {
                                int endPos = readerAdapter.ParseNamedCharRef( false, null );
                                LoadParsingBuffer();
    
                                if ( endPos >= 0 ) {
                                    tokenStartPos = curPos;
                                    curPos = endPos;
                                    continue;
                                }
                                else {
                                    stringBuilder.Append( '&' );
                                    curPos++;
                                    tokenStartPos = curPos;
                                    // Bypass general entities in entity values
                                    XmlQualifiedName entityName = ScanEntityName();
                                    VerifyEntityReference( entityName, false, false, false );
                                }
                                continue;
                            }
                        }
                    default:
                        // end of buffer
                        if ( curPos == charsUsed ) {
                            goto ReadData;
                        }
                        // surrogate chars
                        else { 
                            char ch = chars[curPos];
                            if ( ch >= 0xd800 && ch <=0xdbff ) {
                                if ( curPos + 1 == charsUsed ) {
                                    goto ReadData;
                                }
                                curPos++;
                                if ( chars[curPos] >= 0xdc00 && chars[curPos] <= 0xdfff) {
                                    curPos++;
                                    continue;
                                }
                            }
                            ThrowInvalidChar( curPos, ch );
                            return Token.None;
                        }
                }

            ReadData:
                Debug.Assert( curPos - tokenStartPos == 0 );

                // read new characters into the buffer
                if ( readerAdapter.IsEof || ReadData() == 0 ) {
                    if ( literalType == LiteralType.SystemOrPublicID || !HandleEntityEnd( true ) ) {
                        Throw( curPos, Res.Xml_UnclosedQuote );
                    }
                }
                tokenStartPos = curPos;
            }
        }
Esempio n. 41
0
 /// <summary>
 /// Конструтор
 /// </summary>
 /// <param name="value">тектовое представление литерала</param>
 /// <param name="literalType">тип литерала</param>
 public Literal(string value, LiteralType literalType)
 {
     Value = value;
     LiteralType = literalType;
 }
Esempio n. 42
0
        private static void CoerceDouble(ref object value, LiteralType type)
        {
            switch (type)
            {
                case LiteralType.Long:
                    value = (double)(long)value;
                    break;

                case LiteralType.Int:
                    value = (double)(int)value;
                    break;

                case LiteralType.Single:
                    value = (double)(float)value;
                    break;

                case LiteralType.Double:
                    break;

                default:
                    throw new NotSupportedException();
            }
        }
Esempio n. 43
0
        public static LiteralType CoerceLiteralValues(ref object left, LiteralType leftType, ref object right, LiteralType rightType)
        {
            if (leftType == rightType)
                return leftType;

            if (leftType != LiteralType.Null && rightType != LiteralType.Null)
            {
                if (leftType == LiteralType.String || rightType == LiteralType.String)
                {
                    CoerceString(ref left, leftType);
                    CoerceString(ref right, rightType);

                    return LiteralType.String;
                }
                else if (IsInteger(leftType) && IsInteger(rightType))
                {
                    CoerceLong(ref left, leftType);
                    CoerceLong(ref right, rightType);

                    return LiteralType.Long;
                }
                else if (IsFloatingOrInteger(leftType) && IsFloatingOrInteger(rightType))
                {
                    if (leftType == LiteralType.Decimal || rightType == LiteralType.Decimal)
                    {
                        CoerceDecimal(ref left, leftType);
                        CoerceDecimal(ref right, rightType);

                        return LiteralType.Decimal;
                    }
                    else
                    {
                        CoerceDouble(ref left, leftType);
                        CoerceDouble(ref right, rightType);

                        return LiteralType.Double;
                    }
                }
            }

            throw new ODataException(String.Format(
                ErrorMessages.LiteralUtil_IncompatibleTypes,
                leftType, rightType
            ));
        }
Esempio n. 44
0
        private static void CoerceLong(ref object value, LiteralType type)
        {
            switch (type)
            {
                case LiteralType.Long:
                    break;

                case LiteralType.Int:
                    value = (long)(int)value;
                    break;

                default:
                    throw new NotSupportedException();
            }
        }
Esempio n. 45
0
 private static bool IsFloatingOrInteger(LiteralType type)
 {
     return IsFloating(type) || IsInteger(type);
 }
Esempio n. 46
0
 private static bool IsFloating(LiteralType type)
 {
     return type == LiteralType.Single || type == LiteralType.Double || type == LiteralType.Decimal;
 }
Esempio n. 47
0
 private static bool IsInteger(LiteralType type)
 {
     return type == LiteralType.Long || type == LiteralType.Int;
 }
Esempio n. 48
0
 public LiteralColumnMapping(string literal, LiteralType literalType, DBColumn destinationColumn, ColumnUse columnUse)
     : base(destinationColumn, columnUse)
 {
     this.literal = literal;
     this.literalType = literalType;
 }
Esempio n. 49
0
 public Literal(string desc, LiteralType t, int depth)
 {
     this.description = desc;
     this.type = t;
     this.depth = depth;
 }