mirror of
https://github.com/ZuneDev/MicrosoftIris.git
synced 2026-07-27 13:13:29 -07:00
Add project files.
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
// Decompiled with JetBrains decompiler
|
||||
// Type: Microsoft.Iris.Markup.Validation.ValidateExpressionConstant
|
||||
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
||||
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
|
||||
// Assembly location: C:\Program Files\Zune\UIX.dll
|
||||
|
||||
using Microsoft.Iris.Data;
|
||||
using Microsoft.Iris.Library;
|
||||
using Microsoft.Iris.Markup.UIX;
|
||||
|
||||
namespace Microsoft.Iris.Markup.Validation
|
||||
{
|
||||
internal class ValidateExpressionConstant : ValidateExpression
|
||||
{
|
||||
private string _constantInline;
|
||||
private ConstantType _constantType;
|
||||
private object _foundConstant;
|
||||
private int _foundTypeIndex;
|
||||
|
||||
public ValidateExpressionConstant(
|
||||
SourceMarkupLoader owner,
|
||||
string constantInline,
|
||||
ConstantType constantType,
|
||||
int line,
|
||||
int column)
|
||||
: base(owner, line, column, ExpressionType.Constant)
|
||||
{
|
||||
_constantInline = constantInline;
|
||||
_constantType = constantType;
|
||||
}
|
||||
|
||||
public ValidateExpressionConstant(
|
||||
SourceMarkupLoader owner,
|
||||
bool constantValue,
|
||||
int line,
|
||||
int column)
|
||||
: base(owner, line, column, ExpressionType.Constant)
|
||||
{
|
||||
_constantInline = null;
|
||||
_constantType = ConstantType.Boolean;
|
||||
_foundConstant = BooleanBoxes.Box(constantValue);
|
||||
}
|
||||
|
||||
public ConstantType ConstantType => _constantType;
|
||||
|
||||
public override void Validate(TypeRestriction typeRestriction, ValidateContext context)
|
||||
{
|
||||
if (Usage == ExpressionUsage.LValue)
|
||||
ReportError("Expression cannot be used as the target an assignment (related symbol: '{0}')", _constantInline);
|
||||
TypeSchema evaluationType;
|
||||
switch (_constantType)
|
||||
{
|
||||
case ConstantType.String:
|
||||
int errorIndex;
|
||||
string invalidSequence;
|
||||
_foundConstant = StringUtility.Unescape(_constantInline, out errorIndex, out invalidSequence);
|
||||
if (_foundConstant == null)
|
||||
ReportErrorWithAdjustedPosition(string.Format("Invalid escape sequence '{0}' in string literal", invalidSequence), 0, errorIndex + 1);
|
||||
evaluationType = StringSchema.Type;
|
||||
break;
|
||||
case ConstantType.StringLiteral:
|
||||
_foundConstant = _constantInline;
|
||||
_constantType = ConstantType.String;
|
||||
evaluationType = StringSchema.Type;
|
||||
break;
|
||||
case ConstantType.Integer:
|
||||
Result result1 = Int32Schema.Type.TypeConverter(_constantInline, StringSchema.Type, out _foundConstant);
|
||||
if (result1.Failed)
|
||||
ReportError(result1.Error);
|
||||
evaluationType = Int32Schema.Type;
|
||||
break;
|
||||
case ConstantType.LongInteger:
|
||||
Result result2 = Int64Schema.Type.TypeConverter(_constantInline, StringSchema.Type, out _foundConstant);
|
||||
if (result2.Failed)
|
||||
ReportError(result2.Error);
|
||||
evaluationType = Int64Schema.Type;
|
||||
break;
|
||||
case ConstantType.Float:
|
||||
Result result3 = SingleSchema.Type.TypeConverter(_constantInline, StringSchema.Type, out _foundConstant);
|
||||
if (result3.Failed)
|
||||
ReportError(result3.Error);
|
||||
evaluationType = SingleSchema.Type;
|
||||
break;
|
||||
case ConstantType.Boolean:
|
||||
evaluationType = BooleanSchema.Type;
|
||||
break;
|
||||
case ConstantType.Null:
|
||||
_foundConstant = null;
|
||||
evaluationType = NullSchema.Type;
|
||||
break;
|
||||
default:
|
||||
evaluationType = null;
|
||||
break;
|
||||
}
|
||||
DeclareEvaluationType(evaluationType, typeRestriction);
|
||||
if (ObjectType == null)
|
||||
MarkHasErrors();
|
||||
else
|
||||
_foundTypeIndex = Owner.TrackImportedType(ObjectType);
|
||||
}
|
||||
|
||||
public object FoundConstant => _foundConstant;
|
||||
|
||||
public int FoundTypeIndex => _foundTypeIndex;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user