private static bool DoString(ref StateContext context, int position) { if (context.Flags.IsEscaping()) { context.Accept(Escape(context.Character)); context.Flags.IsEscaping(false); } else { if (context.Character == '\\') { context.Flags.IsEscaping(true); } else if (context.Character == context.Flags.GetStringQuote()) { context.State = State.Parameter; context.AppendParameterConstant(context.Stack.Peek()); } else { context.Accept(); } } return(true); }
private static bool DoNumber(ref StateContext context, int position) { switch (context.Character) { case ',': var ownerState = context.GetOwnerState(); if (ownerState != State.Indexer && ownerState != State.Method) { context.OnError(EXCEPTION_UNKNOWN_MESSAGE); return(false); } context.State = ownerState; context.AppendParameterConstant(context.Stack.Peek()); break; case ']': if (context.GetOwnerState() != State.Indexer) { context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position)); return(false); } context.AppendParameterConstant(context.Stack.Pop()); context.ResetState(); break; case ')': if (context.GetOwnerState() != State.Method) { context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position)); return(false); } context.AppendParameterConstant(context.Stack.Pop()); context.ResetState(); break; case '.': var numberType = context.Flags.GetConstantType(); if (numberType == TypeCode.Double || numberType == TypeCode.Single || numberType == TypeCode.Decimal) { context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position)); return(false); } context.Flags.SetConstantType(TypeCode.Double); context.Accept(); break; case 'L': context.State = State.Parameter; context.Flags.SetConstantType(TypeCode.Int64); context.AppendParameterConstant(context.Stack.Peek()); break; case 'f': case 'F': context.State = State.Parameter; context.Flags.SetConstantType(TypeCode.Single); context.AppendParameterConstant(context.Stack.Peek()); break; case 'm': case 'M': context.State = State.Parameter; context.Flags.SetConstantType(TypeCode.Decimal); context.AppendParameterConstant(context.Stack.Peek()); break; default: if (context.Character >= '0' && context.Character <= '9') { context.Accept(); } else if (context.IsWhitespace()) { context.State = State.Parameter; context.AppendParameterConstant(context.Stack.Peek()); } else { context.OnError(GetIllegalCharacterExceptionMessage(context.Character, position)); return(false); } break; } return(true); }