diff --git a/.gitignore b/.gitignore index 813e7d15c..2bdcfc394 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ obj /lib/*.dll /ICSharpCode.NRefactory.Tests/PartCover/* _ReSharper*/* +.DS_Store +*.userprefs +Packages/* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..74399843c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "external/ikvm"] + path = external/ikvm + url = https://github.com/mono/ikvm-fork +[submodule "external/NRefactory"] + path = external/NRefactory + url = https://github.com/icsharpcode/NRefactory.git +[submodule "external/cecil"] + path = external/cecil + url = https://github.com/jbevain/cecil.git diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs deleted file mode 100644 index 5f42f47cc..000000000 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs +++ /dev/null @@ -1,993 +0,0 @@ -// -// dynamic.cs: support for dynamic expressions -// -// Authors: Marek Safar (marek.safar@gmail.com) -// -// Dual licensed under the terms of the MIT X11 or GNU GPL -// -// Copyright 2009 Novell, Inc -// Copyright 2011 Xamarin Inc. -// - -using System; -using System.Linq; -using SLE = System.Linq.Expressions; - -#if NET_4_0 || MOBILE_DYNAMIC -using System.Dynamic; -#endif - -namespace ICSharpCode.NRefactory.MonoCSharp -{ - // - // A copy of Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinderFlags.cs - // has to be kept in sync - // - [Flags] - public enum CSharpBinderFlags - { - None = 0, - CheckedContext = 1, - InvokeSimpleName = 1 << 1, - InvokeSpecialName = 1 << 2, - BinaryOperationLogical = 1 << 3, - ConvertExplicit = 1 << 4, - ConvertArrayIndex = 1 << 5, - ResultIndexed = 1 << 6, - ValueFromCompoundAssignment = 1 << 7, - ResultDiscarded = 1 << 8 - } - - // - // Type expression with internal dynamic type symbol - // - class DynamicTypeExpr : TypeExpr - { - public DynamicTypeExpr (Location loc) - { - this.loc = loc; - } - - public override TypeSpec ResolveAsType (IMemberContext ec, bool allowUnboundTypeArguments) - { - eclass = ExprClass.Type; - type = ec.Module.Compiler.BuiltinTypes.Dynamic; - return type; - } - } - - #region Dynamic runtime binder expressions - - // - // Expression created from runtime dynamic object value by dynamic binder - // - public class RuntimeValueExpression : Expression, IDynamicAssign, IMemoryLocation - { -#if !NET_4_0 && !MOBILE_DYNAMIC - public class DynamicMetaObject - { - public TypeSpec RuntimeType; - public TypeSpec LimitType; - public SLE.Expression Expression; - } -#endif - - readonly DynamicMetaObject obj; - - public RuntimeValueExpression (DynamicMetaObject obj, TypeSpec type) - { - this.obj = obj; - this.type = type; - this.eclass = ExprClass.Variable; - } - - #region Properties - - public bool IsSuggestionOnly { get; set; } - - public DynamicMetaObject MetaObject { - get { return obj; } - } - - #endregion - - public void AddressOf (EmitContext ec, AddressOp mode) - { - throw new NotImplementedException (); - } - - public override bool ContainsEmitWithAwait () - { - throw new NotSupportedException (); - } - - public override Expression CreateExpressionTree (ResolveContext ec) - { - throw new NotSupportedException (); - } - - protected override Expression DoResolve (ResolveContext ec) - { - return this; - } - - public override Expression DoResolveLValue (ResolveContext ec, Expression right_side) - { - return this; - } - - public override void Emit (EmitContext ec) - { - throw new NotImplementedException (); - } - - #region IAssignMethod Members - - public void Emit (EmitContext ec, bool leave_copy) - { - throw new NotImplementedException (); - } - - public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound) - { - throw new NotImplementedException (); - } - - #endregion - - public SLE.Expression MakeAssignExpression (BuilderContext ctx, Expression source) - { - return obj.Expression; - } - - public override SLE.Expression MakeExpression (BuilderContext ctx) - { -#if STATIC - return base.MakeExpression (ctx); -#else - -#if NET_4_0 || MOBILE_DYNAMIC - if (type.IsStruct && !obj.Expression.Type.IsValueType) - return SLE.Expression.Unbox (obj.Expression, type.GetMetaInfo ()); - - if (obj.Expression.NodeType == SLE.ExpressionType.Parameter) { - if (((SLE.ParameterExpression) obj.Expression).IsByRef) - return obj.Expression; - } - #endif - - return SLE.Expression.Convert (obj.Expression, type.GetMetaInfo ()); -#endif - } - } - - // - // Wraps runtime dynamic expression into expected type. Needed - // to satify expected type check by dynamic binder and no conversion - // is required (ResultDiscarded). - // - public class DynamicResultCast : ShimExpression - { - public DynamicResultCast (TypeSpec type, Expression expr) - : base (expr) - { - this.type = type; - } - - protected override Expression DoResolve (ResolveContext ec) - { - expr = expr.Resolve (ec); - eclass = ExprClass.Value; - return this; - } - -#if NET_4_0 || MOBILE_DYNAMIC - public override SLE.Expression MakeExpression (BuilderContext ctx) - { -#if STATIC - return base.MakeExpression (ctx); -#else - return SLE.Expression.Block (expr.MakeExpression (ctx), SLE.Expression.Default (type.GetMetaInfo ())); -#endif - } -#endif - } - - #endregion - - // - // Creates dynamic binder expression - // - interface IDynamicBinder - { - Expression CreateCallSiteBinder (ResolveContext ec, Arguments args); - } - - // - // Extends standard assignment interface for expressions - // supported by dynamic resolver - // - interface IDynamicAssign : IAssignMethod - { - SLE.Expression MakeAssignExpression (BuilderContext ctx, Expression source); - } - - // - // Base dynamic expression statement creator - // - class DynamicExpressionStatement : ExpressionStatement - { - // - // Binder flag dynamic constant, the value is combination of - // flags known at resolve stage and flags known only at emit - // stage - // - protected class BinderFlags : EnumConstant - { - readonly DynamicExpressionStatement statement; - readonly CSharpBinderFlags flags; - - public BinderFlags (CSharpBinderFlags flags, DynamicExpressionStatement statement) - : base (statement.loc) - { - this.flags = flags; - this.statement = statement; - eclass = 0; - } - - protected override Expression DoResolve (ResolveContext ec) - { - Child = new IntConstant (ec.BuiltinTypes, (int) (flags | statement.flags), statement.loc); - - type = ec.Module.PredefinedTypes.BinderFlags.Resolve (); - eclass = Child.eclass; - return this; - } - } - - readonly Arguments arguments; - protected IDynamicBinder binder; - protected Expression binder_expr; - - // Used by BinderFlags - protected CSharpBinderFlags flags; - - TypeSpec binder_type; - TypeParameters context_mvars; - - public DynamicExpressionStatement (IDynamicBinder binder, Arguments args, Location loc) - { - this.binder = binder; - this.arguments = args; - this.loc = loc; - } - - public Arguments Arguments { - get { - return arguments; - } - } - - public override bool ContainsEmitWithAwait () - { - return arguments.ContainsEmitWithAwait (); - } - - public override Expression CreateExpressionTree (ResolveContext ec) - { - ec.Report.Error (1963, loc, "An expression tree cannot contain a dynamic operation"); - return null; - } - - protected override Expression DoResolve (ResolveContext rc) - { - if (DoResolveCore (rc)) - binder_expr = binder.CreateCallSiteBinder (rc, arguments); - - return this; - } - - protected bool DoResolveCore (ResolveContext rc) - { - foreach (var arg in arguments) { - if (arg.Type == InternalType.VarOutType) { - // Should be special error message about dynamic dispatch - rc.Report.Error (8047, arg.Expr.Location, "Declaration expression cannot be used in this context"); - } - } - - if (rc.CurrentTypeParameters != null && rc.CurrentTypeParameters[0].IsMethodTypeParameter) - context_mvars = rc.CurrentTypeParameters; - - int errors = rc.Report.Errors; - var pt = rc.Module.PredefinedTypes; - - binder_type = pt.Binder.Resolve (); - pt.CallSite.Resolve (); - pt.CallSiteGeneric.Resolve (); - - eclass = ExprClass.Value; - - if (type == null) - type = rc.BuiltinTypes.Dynamic; - - if (rc.Report.Errors == errors) - return true; - - rc.Report.Error (1969, loc, - "Dynamic operation cannot be compiled without `Microsoft.CSharp.dll' assembly reference"); - return false; - } - - public override void Emit (EmitContext ec) - { - EmitCall (ec, binder_expr, arguments, false); - } - - public override void EmitStatement (EmitContext ec) - { - EmitCall (ec, binder_expr, arguments, true); - } - - protected void EmitCall (EmitContext ec, Expression binder, Arguments arguments, bool isStatement) - { - // - // This method generates all internal infrastructure for a dynamic call. The - // reason why it's quite complicated is the mixture of dynamic and anonymous - // methods. Dynamic itself requires a temporary class (ContainerX) and anonymous - // methods can generate temporary storey as well (AnonStorey). Handling MVAR - // type parameters rewrite is non-trivial in such case as there are various - // combinations possible therefore the mutator is not straightforward. Secondly - // we need to keep both MVAR(possibly VAR for anon storey) and type VAR to emit - // correct Site field type and its access from EmitContext. - // - - int dyn_args_count = arguments == null ? 0 : arguments.Count; - int default_args = isStatement ? 1 : 2; - var module = ec.Module; - - bool has_ref_out_argument = false; - var targs = new TypeExpression[dyn_args_count + default_args]; - targs[0] = new TypeExpression (module.PredefinedTypes.CallSite.TypeSpec, loc); - - TypeExpression[] targs_for_instance = null; - TypeParameterMutator mutator; - - var site_container = ec.CreateDynamicSite (); - - if (context_mvars != null) { - TypeParameters tparam; - TypeContainer sc = site_container; - do { - tparam = sc.CurrentTypeParameters; - sc = sc.Parent; - } while (tparam == null); - - mutator = new TypeParameterMutator (context_mvars, tparam); - - if (!ec.IsAnonymousStoreyMutateRequired) { - targs_for_instance = new TypeExpression[targs.Length]; - targs_for_instance[0] = targs[0]; - } - } else { - mutator = null; - } - - for (int i = 0; i < dyn_args_count; ++i) { - Argument a = arguments[i]; - if (a.ArgType == Argument.AType.Out || a.ArgType == Argument.AType.Ref) - has_ref_out_argument = true; - - var t = a.Type; - - // Convert any internal type like dynamic or null to object - if (t.Kind == MemberKind.InternalCompilerType) - t = ec.BuiltinTypes.Object; - - if (targs_for_instance != null) - targs_for_instance[i + 1] = new TypeExpression (t, loc); - - if (mutator != null) - t = t.Mutate (mutator); - - targs[i + 1] = new TypeExpression (t, loc); - } - - TypeExpr del_type = null; - TypeExpr del_type_instance_access = null; - if (!has_ref_out_argument) { - string d_name = isStatement ? "Action" : "Func"; - - TypeSpec te = null; - Namespace type_ns = module.GlobalRootNamespace.GetNamespace ("System", true); - if (type_ns != null) { - te = type_ns.LookupType (module, d_name, dyn_args_count + default_args, LookupMode.Normal, loc); - } - - if (te != null) { - if (!isStatement) { - var t = type; - if (t.Kind == MemberKind.InternalCompilerType) - t = ec.BuiltinTypes.Object; - - if (targs_for_instance != null) - targs_for_instance[targs_for_instance.Length - 1] = new TypeExpression (t, loc); - - if (mutator != null) - t = t.Mutate (mutator); - - targs[targs.Length - 1] = new TypeExpression (t, loc); - } - - del_type = new GenericTypeExpr (te, new TypeArguments (targs), loc); - if (targs_for_instance != null) - del_type_instance_access = new GenericTypeExpr (te, new TypeArguments (targs_for_instance), loc); - else - del_type_instance_access = del_type; - } - } - - // - // Create custom delegate when no appropriate predefined delegate has been found - // - Delegate d; - if (del_type == null) { - TypeSpec rt = isStatement ? ec.BuiltinTypes.Void : type; - Parameter[] p = new Parameter[dyn_args_count + 1]; - p[0] = new Parameter (targs[0], "p0", Parameter.Modifier.NONE, null, loc); - - var site = ec.CreateDynamicSite (); - int index = site.Containers == null ? 0 : site.Containers.Count; - - if (mutator != null) - rt = mutator.Mutate (rt); - - for (int i = 1; i < dyn_args_count + 1; ++i) { - p[i] = new Parameter (targs[i], "p" + i.ToString ("X"), arguments[i - 1].Modifier, null, loc); - } - - d = new Delegate (site, new TypeExpression (rt, loc), - Modifiers.INTERNAL | Modifiers.COMPILER_GENERATED, - new MemberName ("Container" + index.ToString ("X")), - new ParametersCompiled (p), null); - - d.CreateContainer (); - d.DefineContainer (); - d.Define (); - d.PrepareEmit (); - - site.AddTypeContainer (d); - - // - // Add new container to inflated site container when the - // member cache already exists - // - if (site.CurrentType is InflatedTypeSpec && index > 0) - site.CurrentType.MemberCache.AddMember (d.CurrentType); - - del_type = new TypeExpression (d.CurrentType, loc); - if (targs_for_instance != null) { - del_type_instance_access = null; - } else { - del_type_instance_access = del_type; - } - } else { - d = null; - } - - var site_type_decl = new GenericTypeExpr (module.PredefinedTypes.CallSiteGeneric.TypeSpec, new TypeArguments (del_type), loc); - var field = site_container.CreateCallSiteField (site_type_decl, loc); - if (field == null) - return; - - if (del_type_instance_access == null) { - var dt = d.CurrentType.DeclaringType.MakeGenericType (module, context_mvars.Types); - del_type_instance_access = new TypeExpression (MemberCache.GetMember (dt, d.CurrentType), loc); - } - - var instanceAccessExprType = new GenericTypeExpr (module.PredefinedTypes.CallSiteGeneric.TypeSpec, - new TypeArguments (del_type_instance_access), loc); - - if (instanceAccessExprType.ResolveAsType (ec.MemberContext) == null) - return; - - bool inflate_using_mvar = context_mvars != null && ec.IsAnonymousStoreyMutateRequired; - - TypeSpec gt; - if (inflate_using_mvar || context_mvars == null) { - gt = site_container.CurrentType; - } else { - gt = site_container.CurrentType.MakeGenericType (module, context_mvars.Types); - } - - // When site container already exists the inflated version has to be - // updated manually to contain newly created field - if (gt is InflatedTypeSpec && site_container.AnonymousMethodsCounter > 1) { - var tparams = gt.MemberDefinition.TypeParametersCount > 0 ? gt.MemberDefinition.TypeParameters : TypeParameterSpec.EmptyTypes; - var inflator = new TypeParameterInflator (module, gt, tparams, gt.TypeArguments); - gt.MemberCache.AddMember (field.InflateMember (inflator)); - } - - FieldExpr site_field_expr = new FieldExpr (MemberCache.GetMember (gt, field), loc); - - BlockContext bc = new BlockContext (ec.MemberContext, null, ec.BuiltinTypes.Void); - - Arguments args = new Arguments (1); - args.Add (new Argument (binder)); - StatementExpression s = new StatementExpression (new SimpleAssign (site_field_expr, new Invocation (new MemberAccess (instanceAccessExprType, "Create"), args))); - - using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { - if (s.Resolve (bc)) { - Statement init = new If (new Binary (Binary.Operator.Equality, site_field_expr, new NullLiteral (loc)), s, loc); - init.Emit (ec); - } - - args = new Arguments (1 + dyn_args_count); - args.Add (new Argument (site_field_expr)); - if (arguments != null) { - int arg_pos = 1; - foreach (Argument a in arguments) { - if (a is NamedArgument) { - // Name is not valid in this context - args.Add (new Argument (a.Expr, a.ArgType)); - } else { - args.Add (a); - } - - if (inflate_using_mvar && a.Type != targs[arg_pos].Type) - a.Expr.Type = targs[arg_pos].Type; - - ++arg_pos; - } - } - - Expression target = new DelegateInvocation (new MemberAccess (site_field_expr, "Target", loc).Resolve (bc), args, false, loc).Resolve (bc); - if (target != null) - target.Emit (ec); - } - } - - public override void FlowAnalysis (FlowAnalysisContext fc) - { - arguments.FlowAnalysis (fc); - } - - public static MemberAccess GetBinderNamespace (Location loc) - { - return new MemberAccess (new MemberAccess ( - new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "Microsoft", loc), "CSharp", loc), "RuntimeBinder", loc); - } - - protected MemberAccess GetBinder (string name, Location loc) - { - return new MemberAccess (new TypeExpression (binder_type, loc), name, loc); - } - } - - // - // Dynamic member access compound assignment for events - // - class DynamicEventCompoundAssign : ExpressionStatement - { - class IsEvent : DynamicExpressionStatement, IDynamicBinder - { - string name; - - public IsEvent (string name, Arguments args, Location loc) - : base (null, args, loc) - { - this.name = name; - binder = this; - } - - public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) - { - type = ec.BuiltinTypes.Bool; - - Arguments binder_args = new Arguments (3); - - binder_args.Add (new Argument (new BinderFlags (0, this))); - binder_args.Add (new Argument (new StringLiteral (ec.BuiltinTypes, name, loc))); - binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); - - return new Invocation (GetBinder ("IsEvent", loc), binder_args); - } - } - - Expression condition; - ExpressionStatement invoke, assign; - - public DynamicEventCompoundAssign (string name, Arguments args, ExpressionStatement assignment, ExpressionStatement invoke, Location loc) - { - condition = new IsEvent (name, args, loc); - this.invoke = invoke; - this.assign = assignment; - this.loc = loc; - } - - public override Expression CreateExpressionTree (ResolveContext ec) - { - return condition.CreateExpressionTree (ec); - } - - protected override Expression DoResolve (ResolveContext rc) - { - type = rc.BuiltinTypes.Dynamic; - eclass = ExprClass.Value; - condition = condition.Resolve (rc); - return this; - } - - public override void Emit (EmitContext ec) - { - var rc = new ResolveContext (ec.MemberContext); - var expr = new Conditional (new BooleanExpression (condition), invoke, assign, loc).Resolve (rc); - expr.Emit (ec); - } - - public override void EmitStatement (EmitContext ec) - { - var stmt = new If (condition, new StatementExpression (invoke), new StatementExpression (assign), loc); - using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { - stmt.Emit (ec); - } - } - - public override void FlowAnalysis (FlowAnalysisContext fc) - { - invoke.FlowAnalysis (fc); - } - } - - class DynamicConversion : DynamicExpressionStatement, IDynamicBinder - { - public DynamicConversion (TypeSpec targetType, CSharpBinderFlags flags, Arguments args, Location loc) - : base (null, args, loc) - { - type = targetType; - base.flags = flags; - base.binder = this; - } - - public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) - { - Arguments binder_args = new Arguments (3); - - flags |= ec.HasSet (ResolveContext.Options.CheckedScope) ? CSharpBinderFlags.CheckedContext : 0; - - binder_args.Add (new Argument (new BinderFlags (flags, this))); - binder_args.Add (new Argument (new TypeOf (type, loc))); - binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); - return new Invocation (GetBinder ("Convert", loc), binder_args); - } - } - - class DynamicConstructorBinder : DynamicExpressionStatement, IDynamicBinder - { - public DynamicConstructorBinder (TypeSpec type, Arguments args, Location loc) - : base (null, args, loc) - { - this.type = type; - base.binder = this; - } - - public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) - { - Arguments binder_args = new Arguments (3); - - binder_args.Add (new Argument (new BinderFlags (0, this))); - binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); - binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); - - return new Invocation (GetBinder ("InvokeConstructor", loc), binder_args); - } - } - - class DynamicIndexBinder : DynamicMemberAssignable - { - bool can_be_mutator; - - public DynamicIndexBinder (Arguments args, Location loc) - : base (args, loc) - { - } - - public DynamicIndexBinder (CSharpBinderFlags flags, Arguments args, Location loc) - : this (args, loc) - { - base.flags = flags; - } - - protected override Expression DoResolve (ResolveContext ec) - { - can_be_mutator = true; - return base.DoResolve (ec); - } - - protected override Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet) - { - Arguments binder_args = new Arguments (3); - - binder_args.Add (new Argument (new BinderFlags (flags, this))); - binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); - binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); - - isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; - return new Invocation (GetBinder (isSet ? "SetIndex" : "GetIndex", loc), binder_args); - } - - protected override Arguments CreateSetterArguments (ResolveContext rc, Expression rhs) - { - // - // Indexer has arguments which complicates things as the setter and getter - // are called in two steps when unary mutator is used. We have to make a - // copy of all variable arguments to not duplicate any side effect. - // - // ++d[++arg, Foo ()] - // - - if (!can_be_mutator) - return base.CreateSetterArguments (rc, rhs); - - var setter_args = new Arguments (Arguments.Count + 1); - for (int i = 0; i < Arguments.Count; ++i) { - var expr = Arguments[i].Expr; - - if (expr is Constant || expr is VariableReference || expr is This) { - setter_args.Add (Arguments [i]); - continue; - } - - LocalVariable temp = LocalVariable.CreateCompilerGenerated (expr.Type, rc.CurrentBlock, loc); - expr = new SimpleAssign (temp.CreateReferenceExpression (rc, expr.Location), expr).Resolve (rc); - Arguments[i].Expr = temp.CreateReferenceExpression (rc, expr.Location).Resolve (rc); - setter_args.Add (Arguments [i].Clone (expr)); - } - - setter_args.Add (new Argument (rhs)); - return setter_args; - } - } - - class DynamicInvocation : DynamicExpressionStatement, IDynamicBinder - { - readonly ATypeNameExpression member; - - public DynamicInvocation (ATypeNameExpression member, Arguments args, Location loc) - : base (null, args, loc) - { - base.binder = this; - this.member = member; - } - - public static DynamicInvocation CreateSpecialNameInvoke (ATypeNameExpression member, Arguments args, Location loc) - { - return new DynamicInvocation (member, args, loc) { - flags = CSharpBinderFlags.InvokeSpecialName - }; - } - - public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) - { - Arguments binder_args = new Arguments (member != null ? 5 : 3); - bool is_member_access = member is MemberAccess; - - CSharpBinderFlags call_flags; - if (!is_member_access && member is SimpleName) { - call_flags = CSharpBinderFlags.InvokeSimpleName; - is_member_access = true; - } else { - call_flags = 0; - } - - binder_args.Add (new Argument (new BinderFlags (call_flags, this))); - - if (is_member_access) - binder_args.Add (new Argument (new StringLiteral (ec.BuiltinTypes, member.Name, member.Location))); - - if (member != null && member.HasTypeArguments) { - TypeArguments ta = member.TypeArguments; - if (ta.Resolve (ec, false)) { - var targs = new ArrayInitializer (ta.Count, loc); - foreach (TypeSpec t in ta.Arguments) - targs.Add (new TypeOf (t, loc)); - - binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (targs, loc))); - } - } else if (is_member_access) { - binder_args.Add (new Argument (new NullLiteral (loc))); - } - - binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); - - Expression real_args; - if (args == null) { - // Cannot be null because .NET trips over - real_args = new ArrayCreation ( - new MemberAccess (GetBinderNamespace (loc), "CSharpArgumentInfo", loc), - new ArrayInitializer (0, loc), loc); - } else { - real_args = new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc); - } - - binder_args.Add (new Argument (real_args)); - - return new Invocation (GetBinder (is_member_access ? "InvokeMember" : "Invoke", loc), binder_args); - } - - public override void EmitStatement (EmitContext ec) - { - flags |= CSharpBinderFlags.ResultDiscarded; - base.EmitStatement (ec); - } - } - - class DynamicMemberBinder : DynamicMemberAssignable - { - readonly string name; - - public DynamicMemberBinder (string name, Arguments args, Location loc) - : base (args, loc) - { - this.name = name; - } - - public DynamicMemberBinder (string name, CSharpBinderFlags flags, Arguments args, Location loc) - : this (name, args, loc) - { - base.flags = flags; - } - - protected override Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet) - { - Arguments binder_args = new Arguments (4); - - binder_args.Add (new Argument (new BinderFlags (flags, this))); - binder_args.Add (new Argument (new StringLiteral (ec.BuiltinTypes, name, loc))); - binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); - binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); - - isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; - return new Invocation (GetBinder (isSet ? "SetMember" : "GetMember", loc), binder_args); - } - } - - // - // Any member binder which can be source and target of assignment - // - abstract class DynamicMemberAssignable : DynamicExpressionStatement, IDynamicBinder, IAssignMethod - { - Expression setter; - Arguments setter_args; - - protected DynamicMemberAssignable (Arguments args, Location loc) - : base (null, args, loc) - { - base.binder = this; - } - - public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) - { - // - // DoResolve always uses getter - // - return CreateCallSiteBinder (ec, args, false); - } - - protected abstract Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet); - - protected virtual Arguments CreateSetterArguments (ResolveContext rc, Expression rhs) - { - var setter_args = new Arguments (Arguments.Count + 1); - setter_args.AddRange (Arguments); - setter_args.Add (new Argument (rhs)); - return setter_args; - } - - public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) - { - if (right_side == EmptyExpression.OutAccess) { - right_side.DoResolveLValue (rc, this); - return null; - } - - if (DoResolveCore (rc)) { - setter_args = CreateSetterArguments (rc, right_side); - setter = CreateCallSiteBinder (rc, setter_args, true); - } - - eclass = ExprClass.Variable; - return this; - } - - public override void Emit (EmitContext ec) - { - // It's null for ResolveLValue used without assignment - if (binder_expr == null) - EmitCall (ec, setter, Arguments, false); - else - base.Emit (ec); - } - - public override void EmitStatement (EmitContext ec) - { - // It's null for ResolveLValue used without assignment - if (binder_expr == null) - EmitCall (ec, setter, Arguments, true); - else - base.EmitStatement (ec); - } - - #region IAssignMethod Members - - public void Emit (EmitContext ec, bool leave_copy) - { - throw new NotImplementedException (); - } - - public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound) - { - EmitCall (ec, setter, setter_args, !leave_copy); - } - - #endregion - } - - class DynamicUnaryConversion : DynamicExpressionStatement, IDynamicBinder - { - readonly string name; - - public DynamicUnaryConversion (string name, Arguments args, Location loc) - : base (null, args, loc) - { - this.name = name; - base.binder = this; - } - - public static DynamicUnaryConversion CreateIsTrue (ResolveContext rc, Arguments args, Location loc) - { - return new DynamicUnaryConversion ("IsTrue", args, loc) { type = rc.BuiltinTypes.Bool }; - } - - public static DynamicUnaryConversion CreateIsFalse (ResolveContext rc, Arguments args, Location loc) - { - return new DynamicUnaryConversion ("IsFalse", args, loc) { type = rc.BuiltinTypes.Bool }; - } - - public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) - { - Arguments binder_args = new Arguments (4); - - MemberAccess sle = new MemberAccess (new MemberAccess ( - new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "System", loc), "Linq", loc), "Expressions", loc); - - var flags = ec.HasSet (ResolveContext.Options.CheckedScope) ? CSharpBinderFlags.CheckedContext : 0; - - binder_args.Add (new Argument (new BinderFlags (flags, this))); - binder_args.Add (new Argument (new MemberAccess (new MemberAccess (sle, "ExpressionType", loc), name, loc))); - binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); - binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); - - return new Invocation (GetBinder ("UnaryOperation", loc), binder_args); - } - } - - sealed class DynamicSiteClass : HoistedStoreyClass - { - public DynamicSiteClass (TypeDefinition parent, MemberBase host, TypeParameters tparams) - : base (parent, MakeMemberName (host, "DynamicSite", parent.DynamicSitesCounter, tparams, Location.Null), tparams, Modifiers.STATIC, MemberKind.Class) - { - parent.DynamicSitesCounter++; - } - - public FieldSpec CreateCallSiteField (FullNamedExpression type, Location loc) - { - int index = AnonymousMethodsCounter++; - Field f = new HoistedField (this, type, Modifiers.PUBLIC | Modifiers.STATIC, "Site" + index.ToString ("X"), null, loc); - f.Define (); - - AddField (f); - return f.Spec; - } - } -} diff --git a/ICSharpCode.NRefactory.Cecil/CecilLoader.cs b/ICSharpCode.NRefactory.Cecil/CecilLoader.cs index e3a04e7d9..25bda39f9 100644 --- a/ICSharpCode.NRefactory.Cecil/CecilLoader.cs +++ b/ICSharpCode.NRefactory.Cecil/CecilLoader.cs @@ -23,16 +23,18 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Threading; -using ICSharpCode.NRefactory.Documentation; -using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.TypeSystem.Implementation; -using ICSharpCode.NRefactory.Utils; -using Mono.Cecil; +using ICSharpCode.NRefactory.Ps; +using ICSharpCode.NRefactory.Ps.Documentation; +using ICSharpCode.NRefactory.Ps.Utils; +using ICSharpCode.NRefactory.Ps.Semantics; +using ICSharpCode.NRefactory.Ps.TypeSystem; +using ICSharpCode.NRefactory.Ps.TypeSystem.Implementation; +using Mono.Cecil; -namespace ICSharpCode.NRefactory.TypeSystem +namespace ICSharpCode.NRefactory.PlayScript.TypeSystem { - using BlobReader = ICSharpCode.NRefactory.TypeSystem.Implementation.BlobReader; + using BlobReader = ICSharpCode.NRefactory.Ps.TypeSystem.Implementation.BlobReader; /// /// Allows loading an IProjectContent from an already compiled assembly. @@ -92,14 +94,14 @@ public sealed class CecilLoader : AssemblyLoader CecilUnresolvedAssembly currentAssembly; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// public CecilLoader() { } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// /// If true references to the cecil objects are hold. In this case the cecil loader can do a type system -> cecil mapping. diff --git a/ICSharpCode.NRefactory.Cecil/ICSharpCode.NRefactory.Cecil.csproj b/ICSharpCode.NRefactory.Cecil/ICSharpCode.NRefactory.PlayScript.Cecil.csproj similarity index 75% rename from ICSharpCode.NRefactory.Cecil/ICSharpCode.NRefactory.Cecil.csproj rename to ICSharpCode.NRefactory.Cecil/ICSharpCode.NRefactory.PlayScript.Cecil.csproj index fcda55e37..f1bab9a23 100644 --- a/ICSharpCode.NRefactory.Cecil/ICSharpCode.NRefactory.Cecil.csproj +++ b/ICSharpCode.NRefactory.Cecil/ICSharpCode.NRefactory.PlayScript.Cecil.csproj @@ -3,13 +3,11 @@ Debug AnyCPU - 10.0.0 - 2.0 - {2B8F4F83-C2B3-4E84-A27B-8DEE1BE0E006} + {C2B518AC-75DD-4267-A18A-8E310CCF9181} Library ICSharpCode.NRefactory.Cecil - ICSharpCode.NRefactory.Cecil - true + ICSharpCode.NRefactory.PlayScript.Cecil + false ..\ICSharpCode.NRefactory.snk False False @@ -18,43 +16,6 @@ obj\$(Configuration)\ $(IntermediateOutputPath)ICSharpCode.NRefactory.Cecil.xml 1591 - - - true - Full - False - ..\bin\Debug - prompt - 4 - false - v4.0 - - - PdbOnly - True - ..\bin\Release - prompt - 4 - false - v4.0 - - - true - Full - False - ..\bin\Debug - prompt - 4 - false - v4.5 - - - PdbOnly - True - ..\bin\Release - prompt - 4 - false v4.5 @@ -82,9 +43,38 @@ False obj\ + + true + Full + false + ..\bin\Debug + prompt + 4 + false + + + true + ..\bin\Release + prompt + 4 + false + + + false + bin\net_4_5_Debug + 4 + + + false + bin\net_4_5_Release + 4 + + + ..\external\NRefactory\bin\Debug\Mono.Cecil.dll + @@ -95,14 +85,17 @@ - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory + + {B1AF7070-8E25-4117-A441-14684219F4FD} + ICSharpCode.NRefactory.PlayScript.Xml + + + {CBDF3A0D-8B3A-4DEE-B9F9-6FA492A06187} + ICSharpCode.NRefactory.Ps - - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - true + + {0D8EC1C8-9706-4D8B-96F2-8636F2C9F894} + ICSharpCode.NRefactory.PlayScript diff --git a/ICSharpCode.NRefactory.Cecil/Properties/AssemblyInfo.cs b/ICSharpCode.NRefactory.Cecil/Properties/AssemblyInfo.cs index ccb27b40b..49b20e26f 100644 --- a/ICSharpCode.NRefactory.Cecil/Properties/AssemblyInfo.cs +++ b/ICSharpCode.NRefactory.Cecil/Properties/AssemblyInfo.cs @@ -30,7 +30,7 @@ // Information about this assembly is defined by the following attributes. // Change them to the values specific to your project. -[assembly: AssemblyTitle("ICSharpCode.NRefactory.Cecil")] +[assembly: AssemblyTitle("ICSharpCode.NRefactory.PlayScript.Cecil")] [assembly: AssemblyDescription("Cecil Assembly Loader for NRefactory")] [assembly: CLSCompliant(true)] diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/CSharpFile.cs b/ICSharpCode.NRefactory.ConsistencyCheck/CSharpFile.cs index 780385015..0dc3c75b0 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/CSharpFile.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/CSharpFile.cs @@ -17,16 +17,14 @@ // DEALINGS IN THE SOFTWARE. using System; -using System.Collections.Generic; using System.IO; -using System.Linq; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; -using ICSharpCode.NRefactory.Editor; +using ICSharpCode.NRefactory.PlayScript; +//using ICSharpCode.NRefactory.Ps.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { public class CSharpFile { @@ -42,7 +40,7 @@ public CSharpFile(CSharpProject project, string fileName) this.Project = project; this.FileName = fileName; - CSharpParser p = new CSharpParser(project.CompilerSettings); + PlayScriptParser p = new PlayScriptParser(project.CompilerSettings); // using (var stream = File.OpenRead(fileName)) { // this.CompilationUnit = p.Parse(stream, fileName); // } diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs b/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs index 5dc3b0ae4..56fca515c 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs @@ -21,12 +21,13 @@ using System.IO; using System.Linq; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; using Microsoft.Build.Framework; using Microsoft.Build.Logging; +using ICSharpCode.NRefactory.Ps.TypeSystem; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { /// /// Represents a C# project (.csproj file) diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs b/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs index 1ad62c900..53df703ec 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs @@ -21,12 +21,12 @@ using System.Diagnostics; using System.Linq; using System.Threading; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.Ps.Semantics; +using ICSharpCode.NRefactory.Ps.TypeSystem; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { public class FindReferencesConsistencyCheck { diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj b/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.PlayScript.ConsistencyCheck.csproj similarity index 60% rename from ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj rename to ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.PlayScript.ConsistencyCheck.csproj index c26c29252..5f50a670c 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj +++ b/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.PlayScript.ConsistencyCheck.csproj @@ -3,10 +3,10 @@ {D81206EF-3DCA-4A30-897B-E262A2AD9EE3} Debug - x86 + AnyCPU Exe ICSharpCode.NRefactory.ConsistencyCheck - ICSharpCode.NRefactory.ConsistencyCheck + ICSharpCode.NRefactory.PlayScript.ConsistencyCheck Properties @@ -15,7 +15,8 @@ 4 false bin\$(Configuration)\ - 10.0.0 + v4.5 + 8.0.30703 2.0 @@ -52,48 +53,40 @@ TRACE v4.5 - - bin\Debug\ - v4.0 - - - bin\Release\ - v4.0 - - - bin\net_4_5_Debug\ - v4.5 - - - bin\net_4_5_Release\ - v4.5 - - v4.0 + ..\bin\Debug\ - v4.0 - - - v4.5 - - - v4.5 + + + ..\bin\Release\ - - 3.5 - + - - 3.5 - + - - 3.5 + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.Cecil.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.CSharp.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.CSharp.Refactoring.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.IKVM.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.Xml.dll @@ -119,23 +112,31 @@ + - - {2B8F4F83-C2B3-4E84-A27B-8DEE1BE0E006} - ICSharpCode.NRefactory.Cecil + + {0D8EC1C8-9706-4D8B-96F2-8636F2C9F894} + ICSharpCode.NRefactory.PlayScript + + + {54C56049-DD33-4AD4-AF45-4D1AAF883449} + ICSharpCode.NRefactory.PlayScript.AstVerifier - - {53DCA265-3C3C-42F9-B647-F72BA678122B} - ICSharpCode.NRefactory.CSharp + + {B1AF7070-8E25-4117-A441-14684219F4FD} + ICSharpCode.NRefactory.PlayScript.Xml - - {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6} - ICSharpCode.NRefactory.Xml + + {CBDF3A0D-8B3A-4DEE-B9F9-6FA492A06187} + ICSharpCode.NRefactory.Ps - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory + + {D9654D35-F86C-4105-B4E6-FAA656487BF8} + ICSharpCode.NRefactory.PlayScript.Refactoring + + + {C2B518AC-75DD-4267-A18A-8E310CCF9181} + ICSharpCode.NRefactory.PlayScript.Cecil - \ No newline at end of file diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/PatternMatchingTest.cs b/ICSharpCode.NRefactory.ConsistencyCheck/PatternMatchingTest.cs index ea3653563..9ba4bfecd 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/PatternMatchingTest.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/PatternMatchingTest.cs @@ -18,10 +18,10 @@ using System; using System.Linq; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.Ps.PatternMatching; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { /// /// Validates pattern matching: diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs b/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs index 0cce00b00..eaea42206 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs @@ -21,11 +21,12 @@ using System.Diagnostics; using System.IO; using System.Linq; -using ICSharpCode.NRefactory.ConsistencyCheck.Xml; -using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.Utils; +using ICSharpCode.NRefactory.PlayScript.ConsistencyCheck.Xml; +using ICSharpCode.NRefactory.Ps.TypeSystem; +using ICSharpCode.NRefactory.Ps.Utils; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { class Program { diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs b/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs index b19447df8..43fdfea20 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs @@ -23,12 +23,12 @@ using System.IO; using System.Linq; using System.Threading; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.Ps.Semantics; +using ICSharpCode.NRefactory.Ps.TypeSystem; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { public class RandomizedOrderResolverTest { diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs b/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs index 1c6f16c61..376298fbe 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs @@ -21,12 +21,12 @@ using System.IO; using System.Linq; using System.Threading; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.Ps.Semantics; +using ICSharpCode.NRefactory.Ps.TypeSystem; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { /// /// Validates that no compile errors are found in valid code. diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/RoundtripTest.cs b/ICSharpCode.NRefactory.ConsistencyCheck/RoundtripTest.cs index abfe5b3d8..099a3b48b 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/RoundtripTest.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/RoundtripTest.cs @@ -20,11 +20,11 @@ using System.Diagnostics; using System.IO; using System.Text; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.Ps.Editor; +using ICSharpCode.NRefactory.Ps.PatternMatching; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { /// /// Tests parser + output visitor by roundtripping code. @@ -55,12 +55,12 @@ public static void RunTest(CSharpFile file) if (file.FileName.EndsWith("DefaultResolvedTypeDefinition.cs")) return; // skip due to MethodDeclarationTests.GenericMethodWithMultipleConstraints - Roundtrip(new CSharpParser(file.Project.CompilerSettings), file.FileName, code); + Roundtrip(new PlayScriptParser(file.Project.CompilerSettings), file.FileName, code); // After trying unix-style newlines, also try windows-style newlines: - Roundtrip(new CSharpParser(file.Project.CompilerSettings), file.FileName, code.Replace("\n", "\r\n")); + Roundtrip(new PlayScriptParser(file.Project.CompilerSettings), file.FileName, code.Replace("\n", "\r\n")); } - public static void Roundtrip(CSharpParser parser, string fileName, string code) + public static void Roundtrip(PlayScriptParser parser, string fileName, string code) { // 1. Parse SyntaxTree syntaxTree = parser.Parse(code, fileName); diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/Solution.cs b/ICSharpCode.NRefactory.ConsistencyCheck/Solution.cs index ef249dd60..e0cd6ffb4 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/Solution.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/Solution.cs @@ -23,10 +23,10 @@ using System.Linq; using System.Text.RegularExpressions; -using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.Utils; +using ICSharpCode.NRefactory.Ps.TypeSystem; +using ICSharpCode.NRefactory.Ps.Utils; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { public class Solution { diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/TypeSystemTests.cs b/ICSharpCode.NRefactory.ConsistencyCheck/TypeSystemTests.cs index 74fcbfecf..dc36d38c2 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/TypeSystemTests.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/TypeSystemTests.cs @@ -19,10 +19,10 @@ using System; using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.Documentation; -using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.Ps.Documentation; +using ICSharpCode.NRefactory.Ps.TypeSystem; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { public class TypeSystemTests { diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs b/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs index 32e0fb4bd..e3d6355e5 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs @@ -20,9 +20,9 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { /// /// Determines the fastest way to retrieve a List{IdentifierExpression} of all identifiers diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/Xml/IncrementalXmlParserTests.cs b/ICSharpCode.NRefactory.ConsistencyCheck/Xml/IncrementalXmlParserTests.cs index a30d00b21..5d096df35 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/Xml/IncrementalXmlParserTests.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/Xml/IncrementalXmlParserTests.cs @@ -22,11 +22,11 @@ using System.IO; using System.Linq; using System.Text; -using ICSharpCode.NRefactory.ConsistencyCheck.Xml; -using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.Xml; +using ICSharpCode.NRefactory.PlayScript.ConsistencyCheck.Xml; +using ICSharpCode.NRefactory.Ps.Editor; +using ICSharpCode.NRefactory.PlayScript.Xml; -namespace ICSharpCode.NRefactory.ConsistencyCheck +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck { /// /// Tests incremental tag soup parser. diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/Xml/XmlReaderTest.cs b/ICSharpCode.NRefactory.ConsistencyCheck/Xml/XmlReaderTest.cs index 418c2dc93..6b5cb6a0c 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/Xml/XmlReaderTest.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/Xml/XmlReaderTest.cs @@ -24,11 +24,12 @@ using System.Reflection; using System.Xml; using System.Xml.Linq; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.Xml; +using ICSharpCode.NRefactory.PlayScript; -namespace ICSharpCode.NRefactory.ConsistencyCheck.Xml +using ICSharpCode.NRefactory.Ps.Editor; +using ICSharpCode.NRefactory.PlayScript.Xml; + +namespace ICSharpCode.NRefactory.PlayScript.ConsistencyCheck.Xml { public static class XmlReaderTest { diff --git a/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs b/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs index 672e1eabe..79d872959 100644 --- a/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs +++ b/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs @@ -95,8 +95,24 @@ private void InitializeComponent() this.csharpCodeTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.csharpCodeTextBox.Size = new System.Drawing.Size(475, 178); this.csharpCodeTextBox.TabIndex = 0; - this.csharpCodeTextBox.Text = "using System;\r\nusing System.Linq;\r\nclass Test\r\n{\r\n public void Main(string[] a" + - "rgs)\r\n {\r\n Console.WriteLine(\"Hello, World\");\r\n }\r\n}"; + this.csharpCodeTextBox.Text = @"package { + import flash.display.Sprite; + import flash.text.TextField; + + public class HelloWorld extends Sprite { + + public function HelloWorld() { + var display_txt:TextField = new TextField(); + display_txt.text = ""Hello World!""; + addChild(display_txt); + } + } +}"; +// +// +// +// "using System;\r\nusing System.Linq;\r\nclass Test\r\n{\r\n public void Main(string[] a" + +// "rgs)\r\n {\r\n Console.WriteLine(\"Hello, World\");\r\n }\r\n}"; this.csharpCodeTextBox.WordWrap = false; this.csharpCodeTextBox.TextChanged += new System.EventHandler(this.CsharpCodeTextBoxTextChanged); // diff --git a/ICSharpCode.NRefactory.Demo/CSDemo.cs b/ICSharpCode.NRefactory.Demo/CSDemo.cs index 523c5cc09..b434d90d4 100644 --- a/ICSharpCode.NRefactory.Demo/CSDemo.cs +++ b/ICSharpCode.NRefactory.Demo/CSDemo.cs @@ -28,10 +28,11 @@ using System.Threading.Tasks; using System.Windows.Forms; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.Ps.Semantics; +using ICSharpCode.NRefactory.Ps.TypeSystem; +using ICSharpCode.NRefactory.Ps; namespace ICSharpCode.NRefactory.Demo { @@ -187,7 +188,7 @@ void CSharpTreeViewAfterSelect(object sender, TreeViewEventArgs e) // typeof(System.Xml.XmlDocument).Assembly, // System.Xml.dll // typeof(System.Drawing.Bitmap).Assembly, // System.Drawing.dll // typeof(Form).Assembly, // System.Windows.Forms.dll - typeof(ICSharpCode.NRefactory.TypeSystem.IProjectContent).Assembly, + typeof(ICSharpCode.NRefactory.Ps.TypeSystem.IProjectContent).Assembly, }; IUnresolvedAssembly[] projectContents = new IUnresolvedAssembly[assemblies.Length]; Stopwatch total = Stopwatch.StartNew(); diff --git a/ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.Demo.csproj b/ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.PlayScript.Demo.csproj similarity index 84% rename from ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.Demo.csproj rename to ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.PlayScript.Demo.csproj index 59e165619..3716c2339 100644 --- a/ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.Demo.csproj +++ b/ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.PlayScript.Demo.csproj @@ -1,16 +1,17 @@  - {9C19E629-C93E-4ACB-9A4B-13072B5AEF9D} + {70269B19-1BBB-4384-AF22-5140F396E469} Debug - x86 + AnyCPU WinExe ICSharpCode.NRefactory.Demo - ICSharpCode.NRefactory.Demo + ICSharpCode.NRefactory.PlayScript.Demo Properties - 10.0.0 - 2.0 ..\bin\$(Configuration)\ + v4.5 + 8.0.30703 + 2.0 x86 @@ -31,18 +32,6 @@ x86 - - 4 - - - 4 - - - 4 - - - 4 - True Full @@ -51,14 +40,6 @@ DEBUG;TRACE v4.5 - - 4 - v4.5 - - - 4 - v4.5 - PdbOnly True @@ -66,19 +47,37 @@ TRACE v4.5 + + 4 + ..\bin\Debug\ + + + 4 + ..\bin\Release\ + + + + + 4 + + + 4 + + + 4 + 4 - v4.5 + + + 4 4 - v4.5 - - 3.5 - + @@ -109,13 +108,13 @@ - - {53DCA265-3C3C-42F9-B647-F72BA678122B} - ICSharpCode.NRefactory.CSharp + + {CBDF3A0D-8B3A-4DEE-B9F9-6FA492A06187} + ICSharpCode.NRefactory.Ps - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory + + {0D8EC1C8-9706-4D8B-96F2-8636F2C9F894} + ICSharpCode.NRefactory.PlayScript @@ -130,4 +129,4 @@ - \ No newline at end of file + diff --git a/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs b/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs index fe19df0eb..6067c69fd 100644 --- a/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs +++ b/ICSharpCode.NRefactory.Demo/MainForm.Designer.cs @@ -50,10 +50,10 @@ private void InitializeComponent() this.tabPage1 = new System.Windows.Forms.TabPage(); this.csDemo1 = new ICSharpCode.NRefactory.Demo.CSDemo(); this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage2 = new System.Windows.Forms.TabPage(); +// this.tabPage2 = new System.Windows.Forms.TabPage(); this.tabPage1.SuspendLayout(); this.tabControl1.SuspendLayout(); - this.tabPage2.SuspendLayout(); +// this.tabPage2.SuspendLayout(); this.SuspendLayout(); // // miniToolStrip @@ -76,7 +76,7 @@ private void InitializeComponent() this.tabPage1.Padding = new System.Windows.Forms.Padding(3); this.tabPage1.Size = new System.Drawing.Size(507, 458); this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "C#"; + this.tabPage1.Text = "PlayScript"; this.tabPage1.UseVisualStyleBackColor = true; // // csDemo1 @@ -90,7 +90,7 @@ private void InitializeComponent() // tabControl1 // this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); +// this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl1.Location = new System.Drawing.Point(0, 0); this.tabControl1.Name = "tabControl1"; @@ -100,13 +100,13 @@ private void InitializeComponent() // // tabPage2 // - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(507, 458); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "VB"; - this.tabPage2.UseVisualStyleBackColor = true; +// this.tabPage2.Location = new System.Drawing.Point(4, 22); +// this.tabPage2.Name = "tabPage2"; +// this.tabPage2.Padding = new System.Windows.Forms.Padding(3); +// this.tabPage2.Size = new System.Drawing.Size(507, 458); +// this.tabPage2.TabIndex = 1; +// this.tabPage2.Text = "VB"; +// this.tabPage2.UseVisualStyleBackColor = true; // // MainForm // @@ -118,10 +118,10 @@ private void InitializeComponent() this.Text = "NRefactory Demo"; this.tabPage1.ResumeLayout(false); this.tabControl1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); +// this.tabPage2.ResumeLayout(false); this.ResumeLayout(false); } - private System.Windows.Forms.TabPage tabPage2; +// private System.Windows.Forms.TabPage tabPage2; private ICSharpCode.NRefactory.Demo.CSDemo csDemo1; private System.Windows.Forms.ToolStrip miniToolStrip; private System.Windows.Forms.TabPage tabPage1; diff --git a/ICSharpCode.NRefactory.Demo/SemanticTreeDialog.cs b/ICSharpCode.NRefactory.Demo/SemanticTreeDialog.cs index 85d9e16a4..21267b1e4 100644 --- a/ICSharpCode.NRefactory.Demo/SemanticTreeDialog.cs +++ b/ICSharpCode.NRefactory.Demo/SemanticTreeDialog.cs @@ -23,7 +23,7 @@ using System.Reflection; using System.Text; using System.Windows.Forms; -using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.Ps.Semantics; namespace ICSharpCode.NRefactory.Demo { diff --git a/ICSharpCode.NRefactory.GtkDemo/ActionScript.as b/ICSharpCode.NRefactory.GtkDemo/ActionScript.as new file mode 100644 index 000000000..12f3e1e89 --- /dev/null +++ b/ICSharpCode.NRefactory.GtkDemo/ActionScript.as @@ -0,0 +1,13 @@ +package { + import flash.display.Sprite; + import flash.text.TextField; + + public class HelloWorld extends Sprite { + + public function HelloWorld() { + var display_txt:TextField = new TextField(); + display_txt.text = "Hello World!"; + addChild(display_txt); + } + } +} diff --git a/ICSharpCode.NRefactory.GtkDemo/ICSharpCode.NRefactory.GtkDemo.csproj b/ICSharpCode.NRefactory.GtkDemo/ICSharpCode.NRefactory.PlayScript.GtkDemo.csproj similarity index 57% rename from ICSharpCode.NRefactory.GtkDemo/ICSharpCode.NRefactory.GtkDemo.csproj rename to ICSharpCode.NRefactory.GtkDemo/ICSharpCode.NRefactory.PlayScript.GtkDemo.csproj index 255831256..943d7aa7b 100644 --- a/ICSharpCode.NRefactory.GtkDemo/ICSharpCode.NRefactory.GtkDemo.csproj +++ b/ICSharpCode.NRefactory.GtkDemo/ICSharpCode.NRefactory.PlayScript.GtkDemo.csproj @@ -3,18 +3,17 @@ Debug AnyCPU - 10.0.0 - 2.0 - {A7EEF7F8-238F-459D-95A9-96467539641D} + {BF360491-0779-4ADA-B4B4-70265417E672} WinExe ICSharpCode.NRefactory.GtkDemo - ICSharpCode.NRefactory.GtkDemo + ICSharpCode.NRefactory.PlayScript.GtkDemo + v4.5 true full false - bin\Debug + ..\bin\Debug DEBUG; prompt 4 @@ -23,30 +22,10 @@ none false - bin\Release - prompt - 4 - false - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - v4.5 - - - none - false - bin\Release + ..\bin\Release prompt 4 false - v4.5 @@ -58,6 +37,25 @@ + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.Cecil.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.CSharp.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.CSharp.Refactoring.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.IKVM.dll + + + ..\external\NRefactory\bin\Debug\ICSharpCode.NRefactory.Xml.dll + @@ -90,30 +88,37 @@ - - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory - - - {53DCA265-3C3C-42F9-B647-F72BA678122B} - ICSharpCode.NRefactory.CSharp - - - {2B8F4F83-C2B3-4E84-A27B-8DEE1BE0E006} - ICSharpCode.NRefactory.Cecil - - - {D68133BD-1E63-496E-9EDE-4FBDBF77B486} - Mono.Cecil - - PreserveNewest + + PreserveNewest + - \ No newline at end of file + + + {0D8EC1C8-9706-4D8B-96F2-8636F2C9F894} + ICSharpCode.NRefactory.PlayScript + + + {C2B518AC-75DD-4267-A18A-8E310CCF9181} + ICSharpCode.NRefactory.PlayScript.Cecil + + + {54C56049-DD33-4AD4-AF45-4D1AAF883449} + ICSharpCode.NRefactory.PlayScript.AstVerifier + + + {D9654D35-F86C-4105-B4E6-FAA656487BF8} + ICSharpCode.NRefactory.PlayScript.Refactoring + + + {B1AF7070-8E25-4117-A441-14684219F4FD} + ICSharpCode.NRefactory.PlayScript.Xml + + + diff --git a/ICSharpCode.NRefactory.GtkDemo/MainWindow.cs b/ICSharpCode.NRefactory.GtkDemo/MainWindow.cs index 366a95590..61dff4497 100644 --- a/ICSharpCode.NRefactory.GtkDemo/MainWindow.cs +++ b/ICSharpCode.NRefactory.GtkDemo/MainWindow.cs @@ -24,15 +24,24 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using Gtk; using System.IO; using System.Text; using System.Reflection; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; + +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.Documentation; +using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Semantics; -using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; + +using ResolveResult = ICSharpCode.NRefactory.Semantics.ResolveResult; + + +using System.Collections.Generic; using System.Threading.Tasks; using Gdk; using System.Threading; @@ -76,7 +85,7 @@ public MainWindow () : // this.treeviewNodes.HeadersVisible = false; this.textview1.ModifyFont (Pango.FontDescription.FromString ("Mono 14")); this.textview1.MoveCursor += HandleMoveCursor; - string path = System.IO.Path.Combine (System.IO.Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location), "CSharpDemo.cs"); + string path = System.IO.Path.Combine (System.IO.Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location), "ActionScript.as"); this.textview1.Buffer.Text = File.ReadAllText (path); buttonParse.Clicked += HandleClicked; buttonGenerate.Clicked += CSharpGenerateCodeButtonClick; @@ -122,14 +131,15 @@ void SelectionChanged (object sender, EventArgs e) this.textview1.MoveCursor -= HandleMoveCursor; if (node.StartLocation.IsEmpty || node.EndLocation.IsEmpty) return; - var textIter = this.textview1.Buffer.GetIterAtLineOffset (node.StartLocation.Line - 1, node.StartLocation.Column - 1); +// var textIter = this.textview1.Buffer.GetIterAtLineOffset (node.StartLocation.Line - 1, node.StartLocation.Column - 1); + var textIter = this.textview1.Buffer.GetIterAtLineOffset (node.StartLocation.Line - 1, 1); // node.StartLocation.Column - 1); this.textview1.ScrollToIter (textIter, 0, false, 0, 0); this.textview1.Buffer.PlaceCursor (textIter); - this.textview1.Buffer.SelectRange (textIter, this.textview1.Buffer.GetIterAtLineOffset (node.EndLocation.Line -1, node.EndLocation.Column - 1)); +// this.textview1.Buffer.SelectRange (textIter, this.textview1.Buffer.GetIterAtLineOffset (node.EndLocation.Line -1, node.EndLocation.Column - 1)); + this.textview1.Buffer.SelectRange (textIter, this.textview1.Buffer.GetIterAtLineOffset (node.EndLocation.Line -1, 1)); // node.EndLocation.Column - 1)); this.textview1.MoveCursor += HandleMoveCursor; } - public void ShowUnit (SyntaxTree unit, CSharpAstResolver visitor) { this.unit = unit; @@ -222,16 +232,19 @@ string GetNodeTitle(AstNode node) void HandleClicked (object sender, EventArgs e) { - var parser = new CSharpParser (); - var unit = parser.Parse (textview1.Buffer.Text, "dummy.cs"); + var parser = new PlayScriptParser (); // CSharpParser (); + var unit = parser.Parse (textview1.Buffer.Text, "ActionScript.as"); var unresolvedFile = unit.ToTypeSystem(); - - IProjectContent project = new CSharpProjectContent (); + + IProjectContent project = (IProjectContent)new CSharpProjectContent (); + project = project.AddOrUpdateFiles (unresolvedFile); +// foreach (var foo in builtInLibs.Value) { +//// Console.WriteLine ("AssemblyName: {0}", foo.AssemblyName); +// } project = project.AddAssemblyReferences (builtInLibs.Value); - - + CSharpAstResolver resolver = new CSharpAstResolver(project.CreateCompilation (), unit, unresolvedFile); ShowUnit (unit, resolver); @@ -242,13 +255,15 @@ void HandleClicked (object sender, EventArgs e) Assembly[] assemblies = new Assembly[] { typeof(object).Assembly, // mscorlib typeof(Uri).Assembly, // System.dll - typeof(System.Linq.Enumerable).Assembly, // System.Core.dll +// typeof(System.Linq.Enumerable).Assembly, // System.Core.dll // typeof(System.Xml.XmlDocument).Assembly, // System.Xml.dll -// typeof(System.Drawing.Bitmap).Assembly, // System.Drawing.dll -// typeof(Form).Assembly, // System.Windows.Forms.dll typeof(ICSharpCode.NRefactory.TypeSystem.IProjectContent).Assembly, }; + foreach (var foo in assemblies) { + Console.WriteLine ("AssemblyName: {0}", foo.FullName); + } IUnresolvedAssembly[] projectContents = new IUnresolvedAssembly[assemblies.Length]; + Console.WriteLine("IUnresolvedAssembly Length: {0}", projectContents.Length); Parallel.For( 0, assemblies.Length, delegate (int i) { diff --git a/ICSharpCode.NRefactory.GtkDemo/gtk-gui/ICSharpCode.NRefactory.GtkDemo.MainWindow.cs b/ICSharpCode.NRefactory.GtkDemo/gtk-gui/ICSharpCode.NRefactory.GtkDemo.MainWindow.cs index f02e6675c..770b82da6 100644 --- a/ICSharpCode.NRefactory.GtkDemo/gtk-gui/ICSharpCode.NRefactory.GtkDemo.MainWindow.cs +++ b/ICSharpCode.NRefactory.GtkDemo/gtk-gui/ICSharpCode.NRefactory.GtkDemo.MainWindow.cs @@ -19,7 +19,7 @@ public partial class MainWindow private global::Gtk.ScrolledWindow GtkScrolledWindow1; private global::Gtk.TreeView treeviewNodes; - + protected virtual void Build () { global::Stetic.Gui.Initialize (this); @@ -38,6 +38,7 @@ protected virtual void Build () this.scrolledwindow1.ShadowType = ((global::Gtk.ShadowType)(1)); // Container child scrolledwindow1.Gtk.Container+ContainerChild this.textview1 = new global::Gtk.TextView (); + this.textview1.Buffer.Text = "package\n{\n\tpublic class MainClass\n\t{\n\t\tpublic static function Main():void\n\t\t{\n\t\t\ttrace(\"Hello World from PlayScript!\");\n\t\t}\n\t}\n}"; this.textview1.CanFocus = true; this.textview1.Name = "textview1"; this.scrolledwindow1.Add (this.textview1); diff --git a/ICSharpCode.NRefactory.GtkDemo/gtk-gui/generated.cs b/ICSharpCode.NRefactory.GtkDemo/gtk-gui/generated.cs index 9636f6fc5..9ef336398 100644 --- a/ICSharpCode.NRefactory.GtkDemo/gtk-gui/generated.cs +++ b/ICSharpCode.NRefactory.GtkDemo/gtk-gui/generated.cs @@ -5,7 +5,7 @@ namespace Stetic internal class Gui { private static bool initialized; - + internal static void Initialize (Gtk.Widget iconRenderer) { if ((Stetic.Gui.initialized == false)) { @@ -13,14 +13,14 @@ internal static void Initialize (Gtk.Widget iconRenderer) } } } - + internal class ActionGroups { public static Gtk.ActionGroup GetActionGroup (System.Type type) { return Stetic.ActionGroups.GetActionGroup (type.FullName); } - + public static Gtk.ActionGroup GetActionGroup (string name) { return null; diff --git a/ICSharpCode.NRefactory.GtkDemo/gtk-gui/gui.stetic b/ICSharpCode.NRefactory.GtkDemo/gtk-gui/gui.stetic index 498ab55f1..9fb97d2bf 100644 --- a/ICSharpCode.NRefactory.GtkDemo/gtk-gui/gui.stetic +++ b/ICSharpCode.NRefactory.GtkDemo/gtk-gui/gui.stetic @@ -1,12 +1,12 @@  - ../../ICSharpCode.NRefactory.GtkDemo + .. 2.12 - + @@ -25,7 +25,16 @@ True - + package +{ + public class MainClass + { + public static function Main():void + { + trace("Hello World from PlayScript!"); + } + } +} diff --git a/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj b/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.PlayScript.IKVM.csproj similarity index 53% rename from ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj rename to ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.PlayScript.IKVM.csproj index 3932c463f..f5ed2c7a1 100644 --- a/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.IKVM.csproj +++ b/ICSharpCode.NRefactory.IKVM/ICSharpCode.NRefactory.PlayScript.IKVM.csproj @@ -3,14 +3,14 @@ Debug AnyCPU - 10.0.0 - 2.0 - {A727169F-D94F-443F-B305-B057D7F3B420} + {6FBE63EB-4D01-4BED-BC3E-F4AB31AB7D6F} Library ICSharpCode.NRefactory.IKVM - ICSharpCode.NRefactory.IKVM - true + ICSharpCode.NRefactory.PlayScript.IKVM + false ..\ICSharpCode.NRefactory.snk + False + v4.5 true @@ -21,7 +21,6 @@ prompt 4 false - v4.0 full @@ -30,31 +29,34 @@ prompt 4 false - v4.0 - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - v4.5 - - - full - true - bin\Release - prompt - 4 - false - v4.5 + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Cecil.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.Refactoring.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.IKVM.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Xml.dll + + + ..\..\Nrefactory-upstream\bin\Debug\IKVM.Reflection.dll + + + ..\..\Nrefactory-upstream\bin\Debug\Mono.Cecil.dll + @@ -69,14 +71,4 @@ - - - {4CB170EF-DFE6-4A56-9E1B-A85449E827A7} - IKVM.Reflection - - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory - - - \ No newline at end of file + diff --git a/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs b/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs index 4cec1bf3f..f84391254 100644 --- a/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs +++ b/ICSharpCode.NRefactory.IKVM/IkvmLoader.cs @@ -33,12 +33,18 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; + +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Documentation; -using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Utils; +using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.TypeSystem.Implementation; +using ICSharpCode.NRefactory.TypeSystem.Implementation; + using IKVM.Reflection; -namespace ICSharpCode.NRefactory.TypeSystem +namespace ICSharpCode.NRefactory.PlayScript.TypeSystem { /// /// Allows loading an IProjectContent from an already compiled assembly. @@ -84,7 +90,7 @@ public override IUnresolvedAssembly LoadAssemblyFile(string fileName) if (fileName == null) throw new ArgumentNullException("fileName"); - using (var universe = new Universe (UniverseOptions.DisablePseudoCustomAttributeRetrieval | UniverseOptions.SupressReferenceTypeIdentityConversion | UniverseOptions.ResolveMissingMembers)) { + using (var universe = new Universe (UniverseOptions.DisablePseudoCustomAttributeRetrieval | UniverseOptions.ResolveMissingMembers)) { universe.AssemblyResolve += delegate(object sender, IKVM.Reflection.ResolveEventArgs args) { return universe.CreateMissingAssembly(args.Name); }; @@ -98,7 +104,7 @@ public IUnresolvedAssembly LoadAssemblyFile(string fileName, Stream stream) if (fileName == null) throw new ArgumentNullException("fileName"); - using (var universe = new Universe (UniverseOptions.DisablePseudoCustomAttributeRetrieval | UniverseOptions.SupressReferenceTypeIdentityConversion)) { + using (var universe = new Universe (UniverseOptions.DisablePseudoCustomAttributeRetrieval)) { universe.AssemblyResolve += delegate(object sender, IKVM.Reflection.ResolveEventArgs args) { return universe.CreateMissingAssembly(args.Name); }; @@ -137,8 +143,8 @@ public IUnresolvedAssembly LoadAssembly(Assembly assembly) moduleAttributes = interningProvider.InternList(moduleAttributes); currentAssembly.Location = assembly.Location; - currentAssembly.AssemblyAttributes.AddRange(assemblyAttributes); - currentAssembly.ModuleAttributes.AddRange(moduleAttributes); +// currentAssembly.AssemblyAttributes.AddRange(assemblyAttributes); +// currentAssembly.ModuleAttributes.AddRange(moduleAttributes); // Register type forwarders: foreach (var type in assembly.ManifestModule.__GetExportedTypes ()) { if (type.Assembly != assembly) { @@ -1299,30 +1305,31 @@ bool IsVisible(FieldAttributes att) if (attribute.ConstructorArguments.Count != 5) return null; - var reader = new BlobReader(attribute.__GetBlob(), null); - if (reader.ReadUInt16() != 0x0001) { - Debug.WriteLine("Unknown blob prolog"); - return null; - } + throw new NotImplementedException (); +// var reader = new BlobReader(attribute.__GetBlob(), null); +// if (reader.ReadUInt16() != 0x0001) { +// Debug.WriteLine("Unknown blob prolog"); +// return null; +// } // DecimalConstantAttribute has the arguments (byte scale, byte sign, uint hi, uint mid, uint low) or (byte scale, byte sign, int hi, int mid, int low) // Both of these invoke the Decimal constructor (int lo, int mid, int hi, bool isNegative, byte scale) with explicit argument conversions if required. var ctorArgs = new object[attribute.ConstructorArguments.Count]; - for (int i = 0; i < ctorArgs.Length; i++) { - switch (attribute.ConstructorArguments[i].ArgumentType.FullName) { - case "System.Byte": - ctorArgs[i] = reader.ReadByte(); - break; - case "System.Int32": - ctorArgs[i] = reader.ReadInt32(); - break; - case "System.UInt32": - ctorArgs[i] = unchecked((int)reader.ReadUInt32()); - break; - default: - return null; - } - } +// for (int i = 0; i < ctorArgs.Length; i++) { +// switch (attribute.ConstructorArguments[i].ArgumentType.FullName) { +// case "System.Byte": +// ctorArgs[i] = reader.ReadByte(); +// break; +// case "System.Int32": +// ctorArgs[i] = reader.ReadInt32(); +// break; +// case "System.UInt32": +// ctorArgs[i] = unchecked((int)reader.ReadUInt32()); +// break; +// default: +// return null; +// } +// } if (!ctorArgs.Select(a => a.GetType()).SequenceEqual(new[] { typeof(byte), typeof(byte), typeof(int), typeof(int), typeof(int) })) return null; @@ -1464,7 +1471,7 @@ public IUnresolvedProperty ReadProperty(PropertyInfo property, IUnresolvedTypeDe p.Name = property.Name.Substring(property.Name.LastIndexOf('.') + 1); p.IsExplicitInterfaceImplementation = true; foreach (var mr in accessor.ExplicitInterfaceImplementations) { - p.ExplicitInterfaceImplementations.Add(new AccessorOwnerMemberReference(mr)); +// p.ExplicitInterfaceImplementations.Add(new AccessorOwnerMemberReference(mr)); } } @@ -1497,7 +1504,7 @@ public IUnresolvedEvent ReadEvent(EventInfo ev, IUnresolvedTypeDefinition parent e.Name = ev.Name.Substring(ev.Name.LastIndexOf('.') + 1); e.IsExplicitInterfaceImplementation = true; foreach (var mr in accessor.ExplicitInterfaceImplementations) { - e.ExplicitInterfaceImplementations.Add(new AccessorOwnerMemberReference(mr)); +// e.ExplicitInterfaceImplementations.Add(new AccessorOwnerMemberReference(mr)); } } diff --git a/ICSharpCode.NRefactory.IKVM/IntConstantValue.cs b/ICSharpCode.NRefactory.IKVM/IntConstantValue.cs index dc760c4f8..a07486e05 100644 --- a/ICSharpCode.NRefactory.IKVM/IntConstantValue.cs +++ b/ICSharpCode.NRefactory.IKVM/IntConstantValue.cs @@ -24,10 +24,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.Semantics; + +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.Documentation; +using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory +namespace ICSharpCode.NRefactory.PlayScript { [Serializable] sealed class IntConstantValue : IConstantValue, ISupportsInterning diff --git a/ICSharpCode.NRefactory.IKVM/NonFrozenInterningProvider.cs b/ICSharpCode.NRefactory.IKVM/NonFrozenInterningProvider.cs index c2d969e69..b60d313b3 100644 --- a/ICSharpCode.NRefactory.IKVM/NonFrozenInterningProvider.cs +++ b/ICSharpCode.NRefactory.IKVM/NonFrozenInterningProvider.cs @@ -23,9 +23,14 @@ using System.Linq; using System.Runtime.CompilerServices; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.Documentation; using ICSharpCode.NRefactory.Utils; +using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory.TypeSystem.Implementation +namespace ICSharpCode.NRefactory.PlayScript.TypeSystem.Implementation { sealed class NonFrozenInterningProvider : InterningProvider { diff --git a/ICSharpCode.NRefactory.IKVM/Properties/AssemblyInfo.cs b/ICSharpCode.NRefactory.IKVM/Properties/AssemblyInfo.cs index f3919fc3a..2d8c83856 100644 --- a/ICSharpCode.NRefactory.IKVM/Properties/AssemblyInfo.cs +++ b/ICSharpCode.NRefactory.IKVM/Properties/AssemblyInfo.cs @@ -31,7 +31,7 @@ // Information about this assembly is defined by the following attributes. // Change them to the values specific to your project. -[assembly: AssemblyTitle("ICSharpCode.NRefactory.IKVM")] +[assembly: AssemblyTitle("ICSharpCode.NRefactory.PlayScript.IKVM")] [assembly: AssemblyDescription("IKVM.Reflection-based Assembly Loader for NRefactory")] [assembly: CLSCompliant(true)] diff --git a/ICSharpCode.NRefactory.IKVM/ShortConstantValue.cs b/ICSharpCode.NRefactory.IKVM/ShortConstantValue.cs index 788691a4e..3c7d01148 100644 --- a/ICSharpCode.NRefactory.IKVM/ShortConstantValue.cs +++ b/ICSharpCode.NRefactory.IKVM/ShortConstantValue.cs @@ -24,10 +24,18 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.Semantics; + +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.Documentation; +using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; + -namespace ICSharpCode.NRefactory +namespace ICSharpCode.NRefactory.PlayScript { [Serializable] sealed class ShortConstantValue : IConstantValue, ISupportsInterning diff --git a/ICSharpCode.NRefactory.IKVM/StringConstantValue.cs b/ICSharpCode.NRefactory.IKVM/StringConstantValue.cs index db75c1a00..b1d8d6daf 100644 --- a/ICSharpCode.NRefactory.IKVM/StringConstantValue.cs +++ b/ICSharpCode.NRefactory.IKVM/StringConstantValue.cs @@ -24,10 +24,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.Semantics; + +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.Documentation; +using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory +namespace ICSharpCode.NRefactory.PlayScript { [Serializable] sealed class StringConstantValue : IConstantValue, ISupportsInterning diff --git a/ICSharpCode.NRefactory.IKVM/StructConstantValue.cs b/ICSharpCode.NRefactory.IKVM/StructConstantValue.cs index 25db4b56f..7b013e8ba 100644 --- a/ICSharpCode.NRefactory.IKVM/StructConstantValue.cs +++ b/ICSharpCode.NRefactory.IKVM/StructConstantValue.cs @@ -24,10 +24,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.TypeSystem; +//using ICSharpCode.NRefactory.Semantics; + +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.Documentation; +using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory +namespace ICSharpCode.NRefactory.PlayScript { [Serializable] sealed class StructConstantValue : IConstantValue, ISupportsInterning where T : struct diff --git a/ICSharpCode.NRefactory.IKVM/packages.config b/ICSharpCode.NRefactory.IKVM/packages.config new file mode 100644 index 000000000..c8d73fdfb --- /dev/null +++ b/ICSharpCode.NRefactory.IKVM/packages.config @@ -0,0 +1,4 @@ + + + + diff --git a/ICSharpCode.NRefactory.CSharp.AstVerifier/AssemblyInfo.cs b/ICSharpCode.NRefactory.PlayScript.AstVerifier/AssemblyInfo.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp.AstVerifier/AssemblyInfo.cs rename to ICSharpCode.NRefactory.PlayScript.AstVerifier/AssemblyInfo.cs index 7bd701bed..c7a2bc1e8 100644 --- a/ICSharpCode.NRefactory.CSharp.AstVerifier/AssemblyInfo.cs +++ b/ICSharpCode.NRefactory.PlayScript.AstVerifier/AssemblyInfo.cs @@ -4,7 +4,7 @@ // Information about this assembly is defined by the following attributes. // Change them to the values specific to your project. -[assembly: AssemblyTitle("ICSharpCode.NRefactory.CSharp.AstVerifier")] +[assembly: AssemblyTitle("ICSharpCode.NRefactory.PlayScript.AstVerifier")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] diff --git a/ICSharpCode.NRefactory.CSharp.AstVerifier/ICSharpCode.NRefactory.CSharp.AstVerifier.csproj b/ICSharpCode.NRefactory.PlayScript.AstVerifier/ICSharpCode.NRefactory.PlayScript.AstVerifier.csproj similarity index 51% rename from ICSharpCode.NRefactory.CSharp.AstVerifier/ICSharpCode.NRefactory.CSharp.AstVerifier.csproj rename to ICSharpCode.NRefactory.PlayScript.AstVerifier/ICSharpCode.NRefactory.PlayScript.AstVerifier.csproj index c31f1197e..fa9ea5a40 100644 --- a/ICSharpCode.NRefactory.CSharp.AstVerifier/ICSharpCode.NRefactory.CSharp.AstVerifier.csproj +++ b/ICSharpCode.NRefactory.PlayScript.AstVerifier/ICSharpCode.NRefactory.PlayScript.AstVerifier.csproj @@ -3,32 +3,13 @@ Debug AnyCPU - 10.0.0 - 2.0 - {961DADFA-7CE6-429F-BC22-47630D6DB826} + {54C56049-DD33-4AD4-AF45-4D1AAF883449} Exe ICSharpCode.NRefactory.CSharp.AstVerifier - AstVerifier + ICSharpCode.NRefactory.PlayScript.AstVerifier + v4.5 - true - full - false - bin\Debug\ - DEBUG; - prompt - 4 - true - - - none - false - bin\Release\ - prompt - 4 - true - - true full false @@ -37,19 +18,35 @@ prompt 4 true - v4.5 - + none false bin\net_4_5_Release\ prompt 4 true - v4.5 + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Cecil.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.Refactoring.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.IKVM.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Xml.dll + @@ -57,13 +54,13 @@ - - {53DCA265-3C3C-42F9-B647-F72BA678122B} - ICSharpCode.NRefactory.CSharp + + {CBDF3A0D-8B3A-4DEE-B9F9-6FA492A06187} + ICSharpCode.NRefactory.Ps - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory + + {0D8EC1C8-9706-4D8B-96F2-8636F2C9F894} + ICSharpCode.NRefactory.PlayScript - \ No newline at end of file + diff --git a/ICSharpCode.NRefactory.CSharp.AstVerifier/Main.cs b/ICSharpCode.NRefactory.PlayScript.AstVerifier/Main.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.AstVerifier/Main.cs rename to ICSharpCode.NRefactory.PlayScript.AstVerifier/Main.cs index 9fa2877a4..7018b4237 100644 --- a/ICSharpCode.NRefactory.CSharp.AstVerifier/Main.cs +++ b/ICSharpCode.NRefactory.PlayScript.AstVerifier/Main.cs @@ -1,7 +1,7 @@ using System; using System.IO; -namespace ICSharpCode.NRefactory.CSharp.AstVerifier +namespace ICSharpCode.NRefactory.PlayScript.AstVerifier { class MainClass { @@ -56,7 +56,7 @@ public static void Main (string[] args) int failed = 0, passed = 0; Console.WriteLine ("search in " + directory); foreach (var file in Directory.GetFileSystemEntries (directory, "*", SearchOption.AllDirectories)) { - if (!file.EndsWith (".cs", StringComparison.Ordinal)) + if (!file.EndsWith (".as", StringComparison.Ordinal)) continue; string text = File.ReadAllText (file); var unit = SyntaxTree.Parse (text, file); diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AbstractAndVirtualConversionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AbstractAndVirtualConversionAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AbstractAndVirtualConversionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AbstractAndVirtualConversionAction.cs index e15d6591a..2b797ada5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AbstractAndVirtualConversionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AbstractAndVirtualConversionAction.cs @@ -23,12 +23,12 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Make abstract member virtual", Description = "Implements an abstract member as a virtual one")] public class AbstractAndVirtualConversionAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddAnotherAccessorAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddAnotherAccessorAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddAnotherAccessorAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddAnotherAccessorAction.cs index 78b8a8f2f..11b3ad993 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddAnotherAccessorAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddAnotherAccessorAction.cs @@ -26,7 +26,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Add another accessor to a property declaration that has only one. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddArgumentNameAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddArgumentNameAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddArgumentNameAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddArgumentNameAction.cs index 2cf1b70db..f1baaa6f3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddArgumentNameAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddArgumentNameAction.cs @@ -27,12 +27,12 @@ using System; using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using ICSharpCode.NRefactory.Semantics; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Add name for argument @@ -68,10 +68,10 @@ protected override CodeAction GetAction(RefactoringContext context, Expression e if (context.Location != expression.StartLocation) return null; var parent = expression.Parent; - if (!(parent is CSharp.Attribute) && !(parent is IndexerExpression) && !(parent is InvocationExpression)) + if (!(parent is ICSharpCode.NRefactory.PlayScript.Attribute) && !(parent is IndexerExpression) && !(parent is InvocationExpression)) return null; - var attribute = parent as CSharp.Attribute; + var attribute = parent as ICSharpCode.NRefactory.PlayScript.Attribute; if (attribute != null) { var resolvedResult = context.Resolve(attribute) as CSharpInvocationResolveResult; if (resolvedResult == null || resolvedResult.IsError) diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddBracesAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddBracesAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddBracesAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddBracesAction.cs index e6cb02b5c..7ffee8eee 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddBracesAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddBracesAction.cs @@ -28,7 +28,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Add braces", Description = "Removes redundant braces around a statement.")] public class AddBracesAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddCatchTypeAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddCatchTypeAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddCatchTypeAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddCatchTypeAction.cs index 58558556a..46b02ffba 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddCatchTypeAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddCatchTypeAction.cs @@ -23,10 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Add type to general catch clause", Description = "Adds an exception type specifier to general catch clauses.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddExceptionDescriptionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddExceptionDescriptionAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddExceptionDescriptionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddExceptionDescriptionAction.cs index f2f0fae58..291fb01d9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddExceptionDescriptionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddExceptionDescriptionAction.cs @@ -23,13 +23,13 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.Xml; using ICSharpCode.NRefactory.Documentation; +using ICSharpCode.NRefactory.PlayScript.Xml; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Add an exception description to the xml documentation", Description = "Add an exception description to the xml documentation")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddOptionalParameterToInvocationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddOptionalParameterToInvocationAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddOptionalParameterToInvocationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddOptionalParameterToInvocationAction.cs index 5c1ef5347..d04df0309 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddOptionalParameterToInvocationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddOptionalParameterToInvocationAction.cs @@ -24,16 +24,16 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.Xml; +using ICSharpCode.NRefactory.PlayScript.Xml; using ICSharpCode.NRefactory.Documentation; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Add one or more optional parameters to an invocation, using their default values", Description = "Add one or more optional parameters to an invocation.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddUsingAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddUsingAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddUsingAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddUsingAction.cs index c4c50195f..a06fac4a9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AddUsingAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AddUsingAction.cs @@ -22,11 +22,12 @@ using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// 1) When a type cannot be resolved, offers to add a using declaration diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AutoLinqSumAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AutoLinqSumAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AutoLinqSumAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AutoLinqSumAction.cs index 5eacb98c3..406b3285f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/AutoLinqSumAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/AutoLinqSumAction.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Convers a loop to a Linq expression. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CS1105ExtensionMethodMustBeDeclaredStaticAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CS1105ExtensionMethodMustBeDeclaredStaticAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CS1105ExtensionMethodMustBeDeclaredStaticAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CS1105ExtensionMethodMustBeDeclaredStaticAction.cs index ad6936dc1..c3e290694 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CS1105ExtensionMethodMustBeDeclaredStaticAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CS1105ExtensionMethodMustBeDeclaredStaticAction.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Extension methods must be declared static")] public class CS1105ExtensionMethodMustBeDeclaredStaticAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CS1520MethodMustHaveAReturnTypeAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CS1520MethodMustHaveAReturnTypeAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CS1520MethodMustHaveAReturnTypeAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CS1520MethodMustHaveAReturnTypeAction.cs index 404f31f57..c4091fa13 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CS1520MethodMustHaveAReturnTypeAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CS1520MethodMustHaveAReturnTypeAction.cs @@ -26,12 +26,13 @@ // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.TypeSystem; using System.Threading; using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Class, struct or interface method must have a return type", Description = "Found method without return type.")] public class CS1520MethodMustHaveAReturnTypeAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ChangeAccessModifierAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ChangeAccessModifierAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ChangeAccessModifierAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ChangeAccessModifierAction.cs index 75c0744fd..51fead135 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ChangeAccessModifierAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ChangeAccessModifierAction.cs @@ -23,13 +23,13 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Changes the access level of an entity declaration diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CheckIfParameterIsNullAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CheckIfParameterIsNullAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CheckIfParameterIsNullAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CheckIfParameterIsNullAction.cs index fc4ad1d48..e3d582a20 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CheckIfParameterIsNullAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CheckIfParameterIsNullAction.cs @@ -27,7 +27,7 @@ using ICSharpCode.NRefactory.PatternMatching; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Creates a 'if (param == null) throw new System.ArgumentNullException ();' contruct for a parameter. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ComputeConstantValueAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ComputeConstantValueAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ComputeConstantValueAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ComputeConstantValueAction.cs index 37ab12e92..9def84758 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ComputeConstantValueAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ComputeConstantValueAction.cs @@ -23,10 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Compute constant value", Description = "Computes the value of the current expression and replaces it.")] public class ComputeConstantValueAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAnonymousDelegateToLambdaAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAnonymousDelegateToLambdaAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAnonymousDelegateToLambdaAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAnonymousDelegateToLambdaAction.cs index 4aa66c8c4..84d1311ae 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAnonymousDelegateToLambdaAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAnonymousDelegateToLambdaAction.cs @@ -26,7 +26,7 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert anonymous delegate to lambda", Description = "Converts an anonymous delegate into a lambda")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAsToCastAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAsToCastAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAsToCastAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAsToCastAction.cs index 20b2860fc..72e59d920 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAsToCastAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAsToCastAction.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Converts an 'as' expression to a cast expression diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAssignmentToIfAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAssignmentToIfAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAssignmentToIfAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAssignmentToIfAction.cs index 29f1fc3c8..316f68471 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertAssignmentToIfAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertAssignmentToIfAction.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert assignment to 'if'", Description = "Convert assignment to 'if'")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertBitwiseFlagComparisonToHasFlagsAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertBitwiseFlagComparisonToHasFlagsAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertBitwiseFlagComparisonToHasFlagsAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertBitwiseFlagComparisonToHasFlagsAction.cs index 191b36dd5..0ff3a1220 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertBitwiseFlagComparisonToHasFlagsAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertBitwiseFlagComparisonToHasFlagsAction.cs @@ -23,10 +23,11 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.PatternMatching; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Replace bitwise flag comparison with call to 'Enum.HasFlag'", Description = "Replace bitwise flag comparison with call to 'Enum.HasFlag'")] public class ConvertBitwiseFlagComparisonToHasFlagsAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertCastToAsAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertCastToAsAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertCastToAsAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertCastToAsAction.cs index 4d546fb01..08dc56807 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertCastToAsAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertCastToAsAction.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Converts a cast expression to an 'as' expression diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertDecToHexAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertDecToHexAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertDecToHexAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertDecToHexAction.cs index 18e78daf0..a09d3bb70 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertDecToHexAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertDecToHexAction.cs @@ -26,7 +26,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Convert a dec numer to hex. For example: 16 -> 0x10 diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertDoWhileToWhileLoopAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertDoWhileToWhileLoopAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertDoWhileToWhileLoopAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertDoWhileToWhileLoopAction.cs index 30a87564c..6d37ffdb5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertDoWhileToWhileLoopAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertDoWhileToWhileLoopAction.cs @@ -23,13 +23,13 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Convert do...while to while. For instance, { do x++; while (Foo(x)); } becomes { while(Foo(x)) x++; }. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertEqualityOperatorToEqualsAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertEqualityOperatorToEqualsAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertEqualityOperatorToEqualsAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertEqualityOperatorToEqualsAction.cs index 03d0d26bd..75ee98f3f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertEqualityOperatorToEqualsAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertEqualityOperatorToEqualsAction.cs @@ -23,15 +23,15 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Convert do...while to while. For instance, { do x++; while (Foo(x)); } becomes { while(Foo(x)) x++; }. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertEqualsToEqualityOperatorAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertEqualsToEqualityOperatorAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertEqualsToEqualityOperatorAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertEqualsToEqualityOperatorAction.cs index 9d2b1474a..c514fea16 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertEqualsToEqualityOperatorAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertEqualsToEqualityOperatorAction.cs @@ -23,15 +23,15 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Convert do...while to while. For instance, { do x++; while (Foo(x)); } becomes { while(Foo(x)) x++; }. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertExplicitToImplicitImplementationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertExplicitToImplicitImplementationAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertExplicitToImplicitImplementationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertExplicitToImplicitImplementationAction.cs index 85661446a..ce09ba0ff 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertExplicitToImplicitImplementationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertExplicitToImplicitImplementationAction.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Convert explicit to implict implementation", Description = " Convert explicit implementation of an interface method to implicit implementation")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertForToWhileAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertForToWhileAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertForToWhileAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertForToWhileAction.cs index 01ed03b52..389f38636 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertForToWhileAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertForToWhileAction.cs @@ -26,7 +26,7 @@ using System; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert 'for' loop to 'while'", Description = "Works on 'for' loops.")] public class ConvertForToWhileAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertForeachToForAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertForeachToForAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertForeachToForAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertForeachToForAction.cs index be81d4e14..fc78940e3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertForeachToForAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertForeachToForAction.cs @@ -27,8 +27,9 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; using System.Collections.Generic; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Converts a foreach loop to for. @@ -39,7 +40,7 @@ public class ConvertForeachToForAction : CodeActionProvider static readonly string[] VariableNames = { "i", "j", "k", "l", "n", "m", "x", "y", "z"}; static readonly string[] CollectionNames = { "list" }; - static string GetName(ICSharpCode.NRefactory.CSharp.Resolver.CSharpResolver state, string[] variableNames) + static string GetName(CSharpResolver state, string[] variableNames) { for (int i = 0; i < 1000; i++) { foreach (var vn in variableNames) { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertHasFlagsToBitwiseFlagComparisonAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertHasFlagsToBitwiseFlagComparisonAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertHasFlagsToBitwiseFlagComparisonAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertHasFlagsToBitwiseFlagComparisonAction.cs index f1691d45c..18bcbcbeb 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertHasFlagsToBitwiseFlagComparisonAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertHasFlagsToBitwiseFlagComparisonAction.cs @@ -24,10 +24,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Replace 'Enum.HasFlag' call with bitwise flag comparison", Description = "Replace 'Enum.HasFlag' call with bitwise flag comparison")] public class ConvertHasFlagsToBitwiseFlagComparisonAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertHexToDecAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertHexToDecAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertHexToDecAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertHexToDecAction.cs index ca2b717ba..17c11d439 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertHexToDecAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertHexToDecAction.cs @@ -26,7 +26,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Convert a hex numer to dec. For example: 0x10 -> 16 diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToConditionalTernaryExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToConditionalTernaryExpressionAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToConditionalTernaryExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToConditionalTernaryExpressionAction.cs index 06853a41b..18b867d3f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToConditionalTernaryExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToConditionalTernaryExpressionAction.cs @@ -27,7 +27,7 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert 'if' to '?:'", Description = "Convert 'if' to '?:'")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToNullCoalescingExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToNullCoalescingExpressionAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToNullCoalescingExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToNullCoalescingExpressionAction.cs index b53e7c28c..508238808 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToNullCoalescingExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToNullCoalescingExpressionAction.cs @@ -28,7 +28,7 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Convert 'if' to '??' expression", Category = IssueCategories.Opportunities, diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToReturnStatementAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToReturnStatementAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToReturnStatementAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToReturnStatementAction.cs index f20be9a19..d22d46184 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToReturnStatementAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToReturnStatementAction.cs @@ -24,12 +24,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.PatternMatching; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert 'if' to 'return'", Description = "Convert 'if' to 'return'")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToSwitchStatementAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToSwitchStatementAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToSwitchStatementAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToSwitchStatementAction.cs index 10c4d8d64..0304cedf2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertIfStatementToSwitchStatementAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertIfStatementToSwitchStatementAction.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ( "Convert 'if' to 'switch'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertImplicitToExplicitImplementationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertImplicitToExplicitImplementationAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertImplicitToExplicitImplementationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertImplicitToExplicitImplementationAction.cs index 97e5a22fd..3567edc3e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertImplicitToExplicitImplementationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertImplicitToExplicitImplementationAction.cs @@ -27,7 +27,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Convert implict to explicit implementation", Description = " Convert implict implementation of an interface method to explicit implementation")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaBodyExpressionToStatementAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaBodyExpressionToStatementAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaBodyExpressionToStatementAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaBodyExpressionToStatementAction.cs index ad197225e..b68aa4b17 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaBodyExpressionToStatementAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaBodyExpressionToStatementAction.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Converts expression of lambda body to statement", Description = "Converts expression of lambda body to statement")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaBodyStatementToExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaBodyStatementToExpressionAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaBodyStatementToExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaBodyStatementToExpressionAction.cs index 485c9a0d8..60e159d03 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaBodyStatementToExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaBodyStatementToExpressionAction.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Converts statement of lambda body to expression", Description = "Converts statement of lambda body to expression")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs index fe64acbe9..b086c5ebe 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs @@ -24,11 +24,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert lambda to anonymous delegate", Description = "Converts a lambda to an anonymous delegate.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMethodGroupToAnonymousMethodAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMethodGroupToAnonymousMethodAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMethodGroupToAnonymousMethodAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMethodGroupToAnonymousMethodAction.cs index 78c2cec7a..efd0eb429 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMethodGroupToAnonymousMethodAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMethodGroupToAnonymousMethodAction.cs @@ -24,12 +24,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert method group to anoymous method", Description = "Convert method group to anoymous method")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMethodGroupToLambdaAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMethodGroupToLambdaAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMethodGroupToLambdaAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMethodGroupToLambdaAction.cs index b7053437b..962f6efa3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMethodGroupToLambdaAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMethodGroupToLambdaAction.cs @@ -24,12 +24,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert method group to lambda expression", Description = "Convert method group to lambda expression")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMultiplyToShiftAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMultiplyToShiftAction.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMultiplyToShiftAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMultiplyToShiftAction.cs index f995c47b1..f88f14186 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertMultiplyToShiftAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertMultiplyToShiftAction.cs @@ -25,10 +25,8 @@ // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.CSharp; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert '*'/'/' to '<<'/'>>'", Description = "Convert '*'/'/' to '<<'/'>>'")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertNullCoalescingToConditionalExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertNullCoalescingToConditionalExpressionAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertNullCoalescingToConditionalExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertNullCoalescingToConditionalExpressionAction.cs index 04afa590b..aee923b8c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertNullCoalescingToConditionalExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertNullCoalescingToConditionalExpressionAction.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert '??' to '?:'", Description = "Convert '??' to '?:'")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertReturnStatementToIfAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertReturnStatementToIfAction.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertReturnStatementToIfAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertReturnStatementToIfAction.cs index 3b3913f09..cb3f1c4f1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertReturnStatementToIfAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertReturnStatementToIfAction.cs @@ -23,13 +23,8 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System; -using ICSharpCode.NRefactory.PatternMatching; -using System.Linq; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.CSharp; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert 'return' to 'if'", Description = "Convert 'return' to 'if'")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertShiftToMultiplyAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertShiftToMultiplyAction.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertShiftToMultiplyAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertShiftToMultiplyAction.cs index 64076b18e..d4dd98402 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertShiftToMultiplyAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertShiftToMultiplyAction.cs @@ -24,10 +24,8 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.CSharp; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert '<<'/'>>' to '*'/'/'", Description = "Convert '<<'/'>>' to '*'/'/'")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertSwitchToIfAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertSwitchToIfAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertSwitchToIfAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertSwitchToIfAction.cs index f91af2d5a..3da92ae34 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertSwitchToIfAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertSwitchToIfAction.cs @@ -26,7 +26,7 @@ using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Convert 'switch' to 'if'", Description = "Convert 'switch' statement to 'if' statement")] public class ConvertSwitchToIfAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/AccessPath.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/AccessPath.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/AccessPath.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/AccessPath.cs index 10cc5ae3f..323eec97e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/AccessPath.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/AccessPath.cs @@ -24,13 +24,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.TypeSystem; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { class AccessPath { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/ConvertInitializerToExplicitInitializationsAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/ConvertInitializerToExplicitInitializationsAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/ConvertInitializerToExplicitInitializationsAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/ConvertInitializerToExplicitInitializationsAction.cs index bd7766b56..f11b7f64d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/ConvertInitializerToExplicitInitializationsAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/ConvertInitializerToExplicitInitializationsAction.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert to explicit initializers", Description = "Converts an object or collection initializer to explicit initializations.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs index 13585a98e..aeaa3991f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/ConvertToInitializerAction.cs @@ -26,7 +26,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [ContextAction("Convert to initializer", // Description = "Converts a set of assignments and .Add() calls to an initializer.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs index a9c6af8a2..5251ef2ba 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertToInitializer/StatementsToInitializerConverter.cs @@ -24,16 +24,16 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp.Refactoring; using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; using System.Threading; using System.Diagnostics; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public class StatementsToInitializerConverter { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertWhileToDoWhileLoopAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertWhileToDoWhileLoopAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertWhileToDoWhileLoopAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertWhileToDoWhileLoopAction.cs index 320c29b3a..686da3ab1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ConvertWhileToDoWhileLoopAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ConvertWhileToDoWhileLoopAction.cs @@ -26,7 +26,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Converts a while loop to a do...while loop. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CopyCommentsFromBase.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CopyCommentsFromBase.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CopyCommentsFromBase.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CopyCommentsFromBase.cs index e5cbbfe5b..2a13d438b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CopyCommentsFromBase.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CopyCommentsFromBase.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Copies documented comments from base to overriding methods. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CopyCommentsFromInterface.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CopyCommentsFromInterface.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CopyCommentsFromInterface.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CopyCommentsFromInterface.cs index d041eaa6f..588b508a1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CopyCommentsFromInterface.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CopyCommentsFromInterface.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Copies documented comments from interface to overriding methods. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateBackingStoreAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateBackingStoreAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateBackingStoreAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateBackingStoreAction.cs index a2ff5a1a9..ed53074fa 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateBackingStoreAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateBackingStoreAction.cs @@ -26,7 +26,7 @@ using System; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create backing store for auto property", Description = "Creates a backing field for an auto property.")] public class CreateBackingStoreAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateChangedEventAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateChangedEventAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateChangedEventAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateChangedEventAction.cs index cf4d5f317..2825d50dc 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateChangedEventAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateChangedEventAction.cs @@ -25,14 +25,14 @@ // THE SOFTWARE. using System; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using System.Threading; using System.Collections.Generic; using System.Threading.Tasks; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create changed event for property", Description = "Creates a changed event for an property.")] public class CreateChangedEventAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateClassDeclarationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateClassDeclarationAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateClassDeclarationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateClassDeclarationAction.cs index d0d1dd315..3e494ea08 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateClassDeclarationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateClassDeclarationAction.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create class", Description = "Creates a class declaration out of an object creation.")] public class CreateClassDeclarationAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateConstructorDeclarationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateConstructorDeclarationAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateConstructorDeclarationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateConstructorDeclarationAction.cs index e8cef71af..58451c999 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateConstructorDeclarationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateConstructorDeclarationAction.cs @@ -25,9 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create constructor", Description = "Creates a constructor declaration out of an object creation.")] public class CreateConstructorDeclarationAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateCustomEventImplementationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateCustomEventImplementationAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateCustomEventImplementationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateCustomEventImplementationAction.cs index 25dd1748f..aefe71b57 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateCustomEventImplementationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateCustomEventImplementationAction.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Create custom event implementation", Description = "Create custom event implementation.")] public class CreateCustomEventImplementationAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateDelegateAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateDelegateAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateDelegateAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateDelegateAction.cs index d540a7499..5c30f86f6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateDelegateAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateDelegateAction.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create delegate", Description = "Creates a delegate declaration out of an event declaration.")] public class CreateDelegateAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateEnumValue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateEnumValue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateEnumValue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateEnumValue.cs index efe806f49..c20ab6d3c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateEnumValue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateEnumValue.cs @@ -29,10 +29,10 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Threading; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create enum value", Description = "Creates an enum value for a undefined enum value.")] public class CreateEnumValue : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateEventInvocatorAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateEventInvocatorAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateEventInvocatorAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateEventInvocatorAction.cs index dee384cb0..211112806 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateEventInvocatorAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateEventInvocatorAction.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create event invocator", Description = "Creates a standard OnXXX event method.")] public class CreateEventInvocatorAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateFieldAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateFieldAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateFieldAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateFieldAction.cs index ac1f95663..b652ea2b0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateFieldAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateFieldAction.cs @@ -30,10 +30,10 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Threading; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create field", Description = "Creates a field for a undefined variable.")] public class CreateFieldAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateIndexerAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateIndexerAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateIndexerAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateIndexerAction.cs index 561f9ffa9..77d2e0d0a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateIndexerAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateIndexerAction.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Text; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create indexer", Description = "Creates an indexer declaration out of an indexer expression.")] public class CreateIndexerAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateLocalVariableAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateLocalVariableAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateLocalVariableAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateLocalVariableAction.cs index 778f0af58..556fd874a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateLocalVariableAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateLocalVariableAction.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create local variable", Description = "Creates a local variable for a undefined variable.")] public class CreateLocalVariableAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateMethodDeclarationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateMethodDeclarationAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateMethodDeclarationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateMethodDeclarationAction.cs index b1b22360a..d37319374 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateMethodDeclarationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateMethodDeclarationAction.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Text; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create method", Description = "Creates a method declaration out of an invocation.")] public class CreateMethodDeclarationAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateOverloadWithoutParameterAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateOverloadWithoutParameterAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateOverloadWithoutParameterAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateOverloadWithoutParameterAction.cs index 6b6124578..07cf4ea09 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreateOverloadWithoutParameterAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreateOverloadWithoutParameterAction.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Threading.Tasks; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Create overload without parameter", Description = "Create overload without the selected parameter.")] public class CreateOverloadWithoutParameterAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreatePropertyAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreatePropertyAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreatePropertyAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreatePropertyAction.cs index 3894ea229..88ee4c11d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/CreatePropertyAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/CreatePropertyAction.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create property", Description = "Creates a property for a undefined variable.")] public class CreatePropertyAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/DeclareLocalVariableAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/DeclareLocalVariableAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/DeclareLocalVariableAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/DeclareLocalVariableAction.cs index 6e68019f1..8be5b5582 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/DeclareLocalVariableAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/DeclareLocalVariableAction.cs @@ -28,11 +28,11 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Declare local variable", Description = "Declare a local variable out of a selected expression.")] public class DeclareLocalVariableAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtensionMethodInvocationToStaticMethodInvocationAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtensionMethodInvocationToStaticMethodInvocationAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtensionMethodInvocationToStaticMethodInvocationAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtensionMethodInvocationToStaticMethodInvocationAction.cs index 446c9ab52..319a059a3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtensionMethodInvocationToStaticMethodInvocationAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtensionMethodInvocationToStaticMethodInvocationAction.cs @@ -24,10 +24,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; using System.Linq; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring + +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Invoke using static method syntax", Description = "Converts the call into static method call syntax.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractAnonymousMethodAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractAnonymousMethodAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractAnonymousMethodAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractAnonymousMethodAction.cs index dabaca84a..eb2b793e7 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractAnonymousMethodAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractAnonymousMethodAction.cs @@ -27,9 +27,10 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Extract anonymous method", Description = "Extract anonymous method to method of the containing type")] @@ -112,7 +113,7 @@ static MethodDeclaration GetMethod (RefactoringContext context, LambdaResolveRes static bool ContainsLocalReferences (RefactoringContext context, AstNode expr, AstNode body) { - var visitor = new ExtractMethod.VariableLookupVisitor (context); + var visitor = new VariableLookupVisitor (context); body.AcceptVisitor (visitor); return visitor.UsedVariables.Any (variable => !expr.Contains (variable.Region.Begin)); } diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractFieldAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractFieldAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractFieldAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractFieldAction.cs index 11292b046..63a5d1cdc 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractFieldAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractFieldAction.cs @@ -27,10 +27,10 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.MonoCSharp; +using ICSharpCode.NRefactory.MonoPlayScript; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Extract field", Description = "Extracts a field from a local variable declaration.")] public class ExtractFieldAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/ExtractMethodAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/ExtractMethodAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/ExtractMethodAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/ExtractMethodAction.cs index 027e8b4dd..0246a8091 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/ExtractMethodAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/ExtractMethodAction.cs @@ -27,14 +27,9 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.Analysis; -using System.Threading; using ICSharpCode.NRefactory.TypeSystem; -using System.Threading.Tasks; -using ICSharpCode.NRefactory.MonoCSharp; -namespace ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod +namespace ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod { [ContextAction("Extract method", Description = "Creates a new method out of selected text.")] public class ExtractMethodAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/StaticVisitor.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/StaticVisitor.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/StaticVisitor.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/StaticVisitor.cs index 41fc00093..eb9715dd6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/StaticVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/StaticVisitor.cs @@ -27,9 +27,9 @@ using System; using ICSharpCode.NRefactory.Semantics; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod +namespace ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod { class StaticVisitor : DepthFirstAstVisitor { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/VariableLookupVisitor.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/VariableLookupVisitor.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/VariableLookupVisitor.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/VariableLookupVisitor.cs index a4f46bffa..86c9fbdac 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/VariableLookupVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/VariableLookupVisitor.cs @@ -27,8 +27,9 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod +namespace ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod { class VariableLookupVisitor : DepthFirstAstVisitor { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/VariableUsageAnalyzation.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/VariableUsageAnalyzation.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/VariableUsageAnalyzation.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/VariableUsageAnalyzation.cs index 7a132b434..0d4486ec5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractMethod/VariableUsageAnalyzation.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractMethod/VariableUsageAnalyzation.cs @@ -28,8 +28,9 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Linq; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod +namespace ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod { public enum VariableState { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractWhileConditionToInternalIfStatementAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractWhileConditionToInternalIfStatementAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractWhileConditionToInternalIfStatementAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractWhileConditionToInternalIfStatementAction.cs index 7f123765d..0de36ec2b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ExtractWhileConditionToInternalIfStatementAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ExtractWhileConditionToInternalIfStatementAction.cs @@ -27,10 +27,10 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.MonoCSharp; +using ICSharpCode.NRefactory.MonoPlayScript; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Extract field", Description = "Extracts a field from a local variable declaration.")] public class ExtractWhileConditionToInternalIfStatementAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/FlipEqualsTargetAndArgumentAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/FlipEqualsTargetAndArgumentAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/FlipEqualsTargetAndArgumentAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/FlipEqualsTargetAndArgumentAction.cs index e8749605d..d2879d1eb 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/FlipEqualsTargetAndArgumentAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/FlipEqualsTargetAndArgumentAction.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Swap 'Equals' target and argument", Description = "Swap 'Equals' target and argument")] public class FlipEqualsTargetAndArgumentAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/FlipOperatorArgumentsAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/FlipOperatorArgumentsAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/FlipOperatorArgumentsAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/FlipOperatorArgumentsAction.cs index 2230d6bf9..2f768e45d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/FlipOperatorArgumentsAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/FlipOperatorArgumentsAction.cs @@ -27,7 +27,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Swaps left and right arguments.", Description = "Swaps left and right arguments.")] public class FlipOperatorArgumentsAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GenerateGetterAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GenerateGetterAction.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GenerateGetterAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GenerateGetterAction.cs index be3a76407..d3bd3859a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GenerateGetterAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GenerateGetterAction.cs @@ -30,7 +30,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Generate getter", Description = "Generates a getter for a field.")] public class GenerateGetterAction : CodeActionProvider @@ -65,9 +65,9 @@ public override IEnumerable GetActions(RefactoringContext context) static PropertyDeclaration GeneratePropertyDeclaration (RefactoringContext context, FieldDeclaration field, VariableInitializer initializer) { - var mod = ICSharpCode.NRefactory.CSharp.Modifiers.Public; - if (field.HasModifier (ICSharpCode.NRefactory.CSharp.Modifiers.Static)) - mod |= ICSharpCode.NRefactory.CSharp.Modifiers.Static; + var mod = ICSharpCode.NRefactory.PlayScript.Modifiers.Public; + if (field.HasModifier (ICSharpCode.NRefactory.PlayScript.Modifiers.Static)) + mod |= ICSharpCode.NRefactory.PlayScript.Modifiers.Static; return new PropertyDeclaration () { Modifiers = mod, diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GeneratePropertyAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GeneratePropertyAction.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GeneratePropertyAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GeneratePropertyAction.cs index 991b829a0..1bb7d2c6a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GeneratePropertyAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GeneratePropertyAction.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Generate property", Description = "Generates a getter and setter for a field.")] public class GeneratePropertyAction : CodeActionProvider @@ -70,9 +70,9 @@ public override IEnumerable GetActions(RefactoringContext context) static PropertyDeclaration GeneratePropertyDeclaration (RefactoringContext context, FieldDeclaration field, string fieldName) { - var mod = ICSharpCode.NRefactory.CSharp.Modifiers.Public; - if (field.HasModifier (ICSharpCode.NRefactory.CSharp.Modifiers.Static)) - mod |= ICSharpCode.NRefactory.CSharp.Modifiers.Static; + var mod = ICSharpCode.NRefactory.PlayScript.Modifiers.Public; + if (field.HasModifier (ICSharpCode.NRefactory.PlayScript.Modifiers.Static)) + mod |= ICSharpCode.NRefactory.PlayScript.Modifiers.Static; return new PropertyDeclaration () { Modifiers = mod, diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GenerateSwitchLabelsAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GenerateSwitchLabelsAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GenerateSwitchLabelsAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GenerateSwitchLabelsAction.cs index 4d8c12c25..647e26cb2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/GenerateSwitchLabelsAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/GenerateSwitchLabelsAction.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Generate switch labels", Description = "Creates switch lables for enumerations.")] public class GenerateSwitchLabelsAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementAbstractMembersAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementAbstractMembersAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementAbstractMembersAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementAbstractMembersAction.cs index 391b0957d..b1edbaf7e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementAbstractMembersAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementAbstractMembersAction.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Implement abstract members", Description = "Implements abstract members from an abstract class.")] public class ImplementAbstractMembersAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementInterfaceAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementInterfaceAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementInterfaceAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementInterfaceAction.cs index 76261d9a1..51420f3f5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementInterfaceAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementInterfaceAction.cs @@ -30,7 +30,7 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Implement interface", Description = "Creates an interface implementation.")] public class ImplementInterfaceAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementInterfaceExplicitAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementInterfaceExplicitAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementInterfaceExplicitAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementInterfaceExplicitAction.cs index 60db42e6c..fce78e40f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementInterfaceExplicitAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementInterfaceExplicitAction.cs @@ -30,7 +30,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Implement interface explicit", Description = "Creates an interface implementation.")] public class ImplementInterfaceExplicitAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementNotImplementedProperty.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementNotImplementedProperty.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementNotImplementedProperty.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementNotImplementedProperty.cs index 294549d4d..be38e03a4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ImplementNotImplementedProperty.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ImplementNotImplementedProperty.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Create a backing field for a not implemented property", Description = "Creates a backing field for a not implemented property.")] public class ImplementNotImplementedProperty : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InlineLocalVariableAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InlineLocalVariableAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InlineLocalVariableAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InlineLocalVariableAction.cs index 87059906e..2f805ad20 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InlineLocalVariableAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InlineLocalVariableAction.cs @@ -28,9 +28,10 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring + +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Inline local variable", Description = "Inlines a local variable.")] public class InlineLocalVariableAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InsertAnonymousMethodSignatureAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InsertAnonymousMethodSignatureAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InsertAnonymousMethodSignatureAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InsertAnonymousMethodSignatureAction.cs index 47e6feb88..77fc23780 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InsertAnonymousMethodSignatureAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InsertAnonymousMethodSignatureAction.cs @@ -30,7 +30,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Insert anonymous method signature", Description = "Inserts a signature to parameterless anonymous methods.")] public class InsertAnonymousMethodSignatureAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IntroduceConstantAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IntroduceConstantAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IntroduceConstantAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IntroduceConstantAction.cs index bf0cc06c2..e185515d9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IntroduceConstantAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IntroduceConstantAction.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Introduce constant", Description = "Creates a constant for a non constant primitive expression.")] public class IntroduceConstantAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IntroduceFormatItemAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IntroduceFormatItemAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IntroduceFormatItemAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IntroduceFormatItemAction.cs index efb6f8c8e..4da1ab318 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IntroduceFormatItemAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IntroduceFormatItemAction.cs @@ -25,12 +25,13 @@ // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.PatternMatching; using System.Collections.Generic; using System.Linq; using System.Threading; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Introduce format item. Works on strings that contain selections. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertConditionalOperatorAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertConditionalOperatorAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertConditionalOperatorAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertConditionalOperatorAction.cs index 66299b1c4..ad1487e80 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertConditionalOperatorAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertConditionalOperatorAction.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Invert conditional operator", Description = "Inverts an '?:' expression.")] public class InvertConditionalOperatorAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertIfAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertIfAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertIfAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertIfAction.cs index 142c2d445..5977b97fc 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertIfAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertIfAction.cs @@ -27,7 +27,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Invert if", Description = "Inverts an 'if ... else' expression.")] public class InvertIfAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertIfAndSimplify.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertIfAndSimplify.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertIfAndSimplify.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertIfAndSimplify.cs index ac1b7aab0..dcb3a26be 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertIfAndSimplify.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertIfAndSimplify.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Invert If and Simplify", Description = "Inverts if and simplify branching")] public class InvertIfAndSimplify : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertLogicalExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertLogicalExpressionAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertLogicalExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertLogicalExpressionAction.cs index 702f169e4..0b5cf8ee2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/InvertLogicalExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/InvertLogicalExpressionAction.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Invert logical expression", Description = "Inverts a logical expression")] public class InvertLogicalExpressionAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IterateViaForeachAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IterateViaForeachAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IterateViaForeachAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IterateViaForeachAction.cs index 098cc9e96..f1c47f910 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/IterateViaForeachAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/IterateViaForeachAction.cs @@ -23,13 +23,12 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.TypeSystem; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Iterate via foreach", Description = "Iterates an IEnumerable with a foreach loop.")] public class IterateViaForeachAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/JoinDeclarationAndAssignmentAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/JoinDeclarationAndAssignmentAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/JoinDeclarationAndAssignmentAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/JoinDeclarationAndAssignmentAction.cs index 2dcf395f2..6a4c48d83 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/JoinDeclarationAndAssignmentAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/JoinDeclarationAndAssignmentAction.cs @@ -27,7 +27,7 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Join local variable declaration and assignment", Description = "Join local variable declaration and assignment.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/JoinStringAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/JoinStringAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/JoinStringAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/JoinStringAction.cs index 962137e15..21ef01b63 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/JoinStringAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/JoinStringAction.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Join string literal", Description = "Join string literals.")] public class JoinStringAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/LinqFluentToQueryAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/LinqFluentToQueryAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/LinqFluentToQueryAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/LinqFluentToQueryAction.cs index 536bf4ce8..f51943d8b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/LinqFluentToQueryAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/LinqFluentToQueryAction.cs @@ -26,7 +26,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Convert LINQ query to fluent syntax", Description = "Convert LINQ query to fluent syntax")] public class LinqFluentToQueryAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/LinqQueryToFluentAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/LinqQueryToFluentAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/LinqQueryToFluentAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/LinqQueryToFluentAction.cs index 52a5ce1b1..6fbecd667 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/LinqQueryToFluentAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/LinqQueryToFluentAction.cs @@ -26,11 +26,11 @@ using System; using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Convert LINQ query to fluent syntax", Description = "Converts a LINQ query to the equivalent fluent syntax.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/MergeNestedIfAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/MergeNestedIfAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/MergeNestedIfAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/MergeNestedIfAction.cs index 4498b2da2..31991bdbe 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/MergeNestedIfAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/MergeNestedIfAction.cs @@ -26,7 +26,7 @@ using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Merge nested 'if'", Description = "Merge two nested 'if' statements.")] public class MergeNestedIfAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/MoveToOuterScopeAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/MoveToOuterScopeAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/MoveToOuterScopeAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/MoveToOuterScopeAction.cs index ed624cf37..7d4092a1e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/MoveToOuterScopeAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/MoveToOuterScopeAction.cs @@ -25,12 +25,12 @@ // THE SOFTWARE. using System.Collections.Generic; using System; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; using ICSharpCode.NRefactory.Semantics; using System.Threading; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Move to outer scope", Description = "Moves a declaration to the parent scope.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/NegateIsExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/NegateIsExpressionAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/NegateIsExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/NegateIsExpressionAction.cs index bdf15509f..fb8b6bf76 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/NegateIsExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/NegateIsExpressionAction.cs @@ -23,7 +23,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Negate 'is' expression", Description = "Negate an is expression.")] public class NegateIsExpressionAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/NegateRelationalExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/NegateRelationalExpressionAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/NegateRelationalExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/NegateRelationalExpressionAction.cs index 71eabd10b..61cd4b68b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/NegateRelationalExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/NegateRelationalExpressionAction.cs @@ -27,7 +27,7 @@ // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Negate a relational expression", Description = "Negate a relational expression.")] public class NegateRelationalExpressionAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/PutInsideUsingAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/PutInsideUsingAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/PutInsideUsingAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/PutInsideUsingAction.cs index 2954be3b0..4654823c0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/PutInsideUsingAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/PutInsideUsingAction.cs @@ -26,12 +26,13 @@ using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("put inside 'using'", Description = "put IDisposable inside 'using' construct")] public class PutInsideUsingAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveBackingStoreAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveBackingStoreAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveBackingStoreAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveBackingStoreAction.cs index 504294d0b..3c4ab5309 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveBackingStoreAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveBackingStoreAction.cs @@ -25,13 +25,13 @@ // THE SOFTWARE. using System; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Remove backing store for property", Description = "Removes the backing store of a property and creates an auto property.")] public class RemoveBackingStoreAction : CodeActionProvider @@ -111,7 +111,7 @@ internal static IField GetBackingField (BaseRefactoringContext context, Property // automatic properties always need getter & setter if (propertyDeclaration == null || propertyDeclaration.Getter.IsNull || propertyDeclaration.Setter.IsNull || propertyDeclaration.Getter.Body.IsNull || propertyDeclaration.Setter.Body.IsNull) return null; - if (!context.Supports(csharp3) || propertyDeclaration.HasModifier (ICSharpCode.NRefactory.CSharp.Modifiers.Abstract) || ((TypeDeclaration)propertyDeclaration.Parent).ClassType == ClassType.Interface) + if (!context.Supports(csharp3) || propertyDeclaration.HasModifier (ICSharpCode.NRefactory.PlayScript.Modifiers.Abstract) || ((TypeDeclaration)propertyDeclaration.Parent).ClassType == ClassType.Interface) return null; var getterField = ScanGetter (context, propertyDeclaration); if (getterField == null) diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveBracesAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveBracesAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveBracesAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveBracesAction.cs index 76ab473fc..8c048b28b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveBracesAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveBracesAction.cs @@ -28,7 +28,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Remove braces", Description = "Removes redundant braces around a statement.")] public class RemoveBracesAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveRedundantCatchTypeAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveRedundantCatchTypeAction.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveRedundantCatchTypeAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveRedundantCatchTypeAction.cs index 3d0244862..a0cd2e26f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveRedundantCatchTypeAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveRedundantCatchTypeAction.cs @@ -23,15 +23,13 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.TypeSystem; using System; using ICSharpCode.NRefactory.Semantics; using System.Threading; -using ICSharpCode.NRefactory.CSharp.Resolver; -using System.Linq; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Remove redundant type", Description = "Removes a redundant exception type specifier from catch clauses.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveRegionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveRegionAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveRegionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveRegionAction.cs index 14bec1f6d..46c520126 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/RemoveRegionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/RemoveRegionAction.cs @@ -28,7 +28,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Remove region", Description = "Removes a pre processor #region/#endregion directive.")] public class RemoveRegionAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceAssignmentWithPostfixExpressionAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceAssignmentWithPostfixExpressionAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceAssignmentWithPostfixExpressionAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceAssignmentWithPostfixExpressionAction.cs index b58423846..42dc3b310 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceAssignmentWithPostfixExpressionAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceAssignmentWithPostfixExpressionAction.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Replace assignment with postfix expression", Description = "Replace assignment with postfix expression")] public class ReplaceAssignmentWithPostfixExpressionAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceEmptyStringAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceEmptyStringAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceEmptyStringAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceEmptyStringAction.cs index 074cc3343..879b11b35 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceEmptyStringAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceEmptyStringAction.cs @@ -27,7 +27,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Use string.Empty", Description = "Replaces \"\" with string.Empty")] public class ReplaceEmptyStringAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceOperatorAssignmentWithAssignmentAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceOperatorAssignmentWithAssignmentAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceOperatorAssignmentWithAssignmentAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceOperatorAssignmentWithAssignmentAction.cs index 3ab4cf48c..def4b2933 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceOperatorAssignmentWithAssignmentAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceOperatorAssignmentWithAssignmentAction.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Replace operator assignment with assignment", Description = "Replace operator assignment with assignment")] public class ReplaceOperatorAssignmentWithAssignmentAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplacePostfixExpressionWithAssignmentAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplacePostfixExpressionWithAssignmentAction.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplacePostfixExpressionWithAssignmentAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplacePostfixExpressionWithAssignmentAction.cs index 4623c9232..c393d5e2f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplacePostfixExpressionWithAssignmentAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplacePostfixExpressionWithAssignmentAction.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Replace postfix expression with assignment", Description = "Replace postfix expression with assignment")] public class ReplacePostfixExpressionWithAssignmentAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceWithOperatorAssignmentAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceWithOperatorAssignmentAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceWithOperatorAssignmentAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceWithOperatorAssignmentAction.cs index be605f9f6..2321b161a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReplaceWithOperatorAssignmentAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReplaceWithOperatorAssignmentAction.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Replace assignment with operator assignment", Description = "Replace assignment with operator assignment")] public class ReplaceWithOperatorAssignmentAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReverseDirectionForForLoopAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReverseDirectionForForLoopAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReverseDirectionForForLoopAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReverseDirectionForForLoopAction.cs index 2b9eef30e..e26746dca 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/ReverseDirectionForForLoopAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/ReverseDirectionForForLoopAction.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Reverse the direction of a for loop", Description = "Reverse the direction of a for loop")] public class ReverseDirectionForForLoopAction : SpecializedCodeAction diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SimplifyIfFlowAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SimplifyIfFlowAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SimplifyIfFlowAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SimplifyIfFlowAction.cs index 4d19ae9d7..c068405aa 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SimplifyIfFlowAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SimplifyIfFlowAction.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Simplify if flow", Description = "Inverts if and reduces branching ")] public class SimplifyIfFlowAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SimplifyIfInLoopsFlowAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SimplifyIfInLoopsFlowAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SimplifyIfInLoopsFlowAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SimplifyIfInLoopsFlowAction.cs index 37811b430..2ab32d30f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SimplifyIfInLoopsFlowAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SimplifyIfInLoopsFlowAction.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Simplify if flow in loops", Description = "Inverts if and reduces branching ")] public class SimplifyIfInLoopsFlowAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SortUsingsAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SortUsingsAction.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SortUsingsAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SortUsingsAction.cs index 04b8e4d48..52350790b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SortUsingsAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SortUsingsAction.cs @@ -27,13 +27,14 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { - [ContextAction("Sort usings", Description = "Sorts usings by their origin and then alphabetically.")] + [ContextAction("Sort imports", Description = "Sorts imports by their origin and then alphabetically.")] public class SortUsingsAction: CodeActionProvider { public override IEnumerable GetActions(RefactoringContext context) @@ -42,7 +43,7 @@ public override IEnumerable GetActions(RefactoringContext context) if (usingNode == null) yield break; - yield return new CodeAction(context.TranslateString("Sort usings"), script => + yield return new CodeAction(context.TranslateString("Sort imports"), script => { var blocks = EnumerateUsingBlocks(context.RootNode); diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SpecializedCodeAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SpecializedCodeAction.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SpecializedCodeAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SpecializedCodeAction.cs index 603a47611..b3b25b636 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SpecializedCodeAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SpecializedCodeAction.cs @@ -1,6 +1,6 @@ using System; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// A specialized code action creates a code action assoziated with one special type of ast nodes. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitDeclarationAndAssignmentAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitDeclarationAndAssignmentAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitDeclarationAndAssignmentAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitDeclarationAndAssignmentAction.cs index f3fd5ca00..e14b549ac 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitDeclarationAndAssignmentAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitDeclarationAndAssignmentAction.cs @@ -33,7 +33,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Split local variable declaration and assignment", Description = "Splits local variable declaration and assignment.")] public class SplitDeclarationAndAssignmentAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitDeclarationListAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitDeclarationListAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitDeclarationListAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitDeclarationListAction.cs index a881d05f1..e693181ac 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitDeclarationListAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitDeclarationListAction.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Split declaration list", Description = "Split variable declaration with multiple variables into declarations with a single variable")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitIfAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitIfAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitIfAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitIfAction.cs index 1a88478bd..9fe1f00c4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitIfAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitIfAction.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction ("Split 'if' statement", Description = "Splits an if statement into two nested if statements")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitStringAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitStringAction.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitStringAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitStringAction.cs index b5376516f..170083127 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/SplitStringAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/SplitStringAction.cs @@ -26,8 +26,9 @@ using System; using System.Threading; using System.Collections.Generic; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Split string literal", Description = "Splits string literal into two.")] public class SplitStringAction : CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseAsAndNullCheckAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseAsAndNullCheckAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseAsAndNullCheckAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseAsAndNullCheckAction.cs index 8046091b1..76d58ceae 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseAsAndNullCheckAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseAsAndNullCheckAction.cs @@ -30,7 +30,7 @@ using System.Linq; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction( "Use 'as' and null check", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseExplicitTypeAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseExplicitTypeAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseExplicitTypeAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseExplicitTypeAction.cs index 1aeb517f2..c960ed499 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseExplicitTypeAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseExplicitTypeAction.cs @@ -30,7 +30,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Use explicit type", Description = "Converts local variable declaration to be explicit typed.")] public class UseExplicitTypeAction: CodeActionProvider diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseStringFormatAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseStringFormatAction.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseStringFormatAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseStringFormatAction.cs index 2a7878c34..66695ef53 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseStringFormatAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseStringFormatAction.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Use string.Format()", Description = "Convert concatenation of strings and objects to string.Format()")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseVarKeywordAction.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseVarKeywordAction.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseVarKeywordAction.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseVarKeywordAction.cs index 86aa6e500..0f4436c3c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/UseVarKeywordAction.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeActions/UseVarKeywordAction.cs @@ -29,7 +29,7 @@ using System.Threading; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [ContextAction("Use 'var' keyword", Description = "Converts local variable declaration to be implicit typed.")] diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/AdditionalOfTypeIssues.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/AdditionalOfTypeIssues.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/AdditionalOfTypeIssues.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/AdditionalOfTypeIssues.cs index 9c2477253..75bac5164 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/AdditionalOfTypeIssues.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/AdditionalOfTypeIssues.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType (extended)", Description = "Replace with call to OfType (extended cases)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/BaseMethodParameterNameMismatchIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/BaseMethodParameterNameMismatchIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/BaseMethodParameterNameMismatchIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/BaseMethodParameterNameMismatchIssue.cs index 78580e90e..3effc9759 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/BaseMethodParameterNameMismatchIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/BaseMethodParameterNameMismatchIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Parameter name differs in base declaration", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CallToObjectEqualsViaBaseIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CallToObjectEqualsViaBaseIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CallToObjectEqualsViaBaseIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CallToObjectEqualsViaBaseIssue.cs index ccda1e65f..73f38212f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CallToObjectEqualsViaBaseIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CallToObjectEqualsViaBaseIssue.cs @@ -30,7 +30,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Call to base.Equals resolves to Object.Equals, which is reference equality", Description = "Finds potentially erroneous calls to Object.Equals.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CastExpressionOfIncompatibleTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CastExpressionOfIncompatibleTypeIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CastExpressionOfIncompatibleTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CastExpressionOfIncompatibleTypeIssue.cs index 2682a147a..bc016bb7b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CastExpressionOfIncompatibleTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CastExpressionOfIncompatibleTypeIssue.cs @@ -26,11 +26,12 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring + +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Type cast expression of incompatible type", Description = "Type cast expression of incompatible type", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CheckNamespaceIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CheckNamespaceIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CheckNamespaceIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CheckNamespaceIssue.cs index 5b9a86f0e..41436f41c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CheckNamespaceIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CheckNamespaceIssue.cs @@ -26,7 +26,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ( "Check if a namespace corresponds to a file location", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0029InvalidConversionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0029InvalidConversionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0029InvalidConversionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0029InvalidConversionIssue.cs index dbc99fc42..1c8751562 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0029InvalidConversionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0029InvalidConversionIssue.cs @@ -25,14 +25,14 @@ // THE SOFTWARE. using System; +using System.Linq; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using System.Linq; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS0029: Cannot implicitly convert type 'A' to 'B'.", Description = "This error occurs when trying to assign a value of an incompatible type.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0126ReturnMustBeFollowedByAnyExpression.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0126ReturnMustBeFollowedByAnyExpression.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0126ReturnMustBeFollowedByAnyExpression.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0126ReturnMustBeFollowedByAnyExpression.cs index 78b1fca6a..2d9b6e0e1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0126ReturnMustBeFollowedByAnyExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0126ReturnMustBeFollowedByAnyExpression.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS0126: A method with return type cannot return without value.", Description = "Since 'function' doesn't return void, a return keyword must be followed by an object expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0127ReturnMustNotBeFollowedByAnyExpression.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0127ReturnMustNotBeFollowedByAnyExpression.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0127ReturnMustNotBeFollowedByAnyExpression.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0127ReturnMustNotBeFollowedByAnyExpression.cs index 61b0168a1..bc77efe07 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0127ReturnMustNotBeFollowedByAnyExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0127ReturnMustNotBeFollowedByAnyExpression.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS0127: A method with a void return type cannot return a value.", Description = "Since 'function' returns void, a return keyword must not be followed by an object expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0152DuplicateCaseLabelValueIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0152DuplicateCaseLabelValueIssue.cs similarity index 89% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0152DuplicateCaseLabelValueIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0152DuplicateCaseLabelValueIssue.cs index 36d92bd68..2cc2f1671 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0152DuplicateCaseLabelValueIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0152DuplicateCaseLabelValueIssue.cs @@ -23,16 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.MonoCSharp; -using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Duplicate case label value issue", Description = "A case label value is duplicate.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0169FieldIsNeverUsedIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0169FieldIsNeverUsedIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0169FieldIsNeverUsedIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0169FieldIsNeverUsedIssue.cs index ebf712a46..534108980 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0169FieldIsNeverUsedIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0169FieldIsNeverUsedIssue.cs @@ -27,11 +27,11 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; using System.Linq; using System; -using ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS0169: Field is never used", Description = "CS0169: Field is never used", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0618UsageOfObsoleteMemberIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0618UsageOfObsoleteMemberIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0618UsageOfObsoleteMemberIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0618UsageOfObsoleteMemberIssue.cs index 87e665b1b..03e7f602b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0618UsageOfObsoleteMemberIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0618UsageOfObsoleteMemberIssue.cs @@ -28,12 +28,9 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.MonoCSharp; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("CS0618: Member is obsolete", Description = "CS0618: Member is obsolete", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0659OverrideEqualWithoutGetHashCode.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0659OverrideEqualWithoutGetHashCode.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0659OverrideEqualWithoutGetHashCode.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0659OverrideEqualWithoutGetHashCode.cs index 490ec086d..e1649a214 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0659OverrideEqualWithoutGetHashCode.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0659OverrideEqualWithoutGetHashCode.cs @@ -28,10 +28,10 @@ using System.Linq; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS0659: Class overrides Object.Equals but not Object.GetHashCode.", Description = "If two objects are equal then they must both have the same hash code", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0759RedundantPartialMethodIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0759RedundantPartialMethodIssue.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0759RedundantPartialMethodIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0759RedundantPartialMethodIssue.cs index 76015a783..c6f82d32e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS0759RedundantPartialMethodIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS0759RedundantPartialMethodIssue.cs @@ -22,16 +22,11 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; -using System.Linq; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.MonoCSharp; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("CS0759: A partial method implementation is missing a partial method declaration", Description = "A partial method must have a defining declaration that defines the signature (name, return type and parameters) of the method. The implementation or method body is optional.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS1729TypeHasNoConstructorWithNArgumentsIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS1729TypeHasNoConstructorWithNArgumentsIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS1729TypeHasNoConstructorWithNArgumentsIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS1729TypeHasNoConstructorWithNArgumentsIssue.cs index 54d71273f..a69753d6d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/CS1729TypeHasNoConstructorWithNArgumentsIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/CS1729TypeHasNoConstructorWithNArgumentsIssue.cs @@ -28,10 +28,11 @@ using System.Linq; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring + +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("CS1729: Class does not contain a 0 argument constructor", Description = "CS1729: Class does not contain a 0 argument constructor", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/ExpressionIsNeverOfProvidedTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/ExpressionIsNeverOfProvidedTypeIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/ExpressionIsNeverOfProvidedTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/ExpressionIsNeverOfProvidedTypeIssue.cs index e920c4fbd..d3d749811 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/ExpressionIsNeverOfProvidedTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/ExpressionIsNeverOfProvidedTypeIssue.cs @@ -26,12 +26,12 @@ using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS0184:Given expression is never of the provided type", Description = "CS0184:Given expression is never of the provided type.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/MissingInterfaceMemberImplementationIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/MissingInterfaceMemberImplementationIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/MissingInterfaceMemberImplementationIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/MissingInterfaceMemberImplementationIssue.cs index 3b35d0d63..f2128cf08 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/MissingInterfaceMemberImplementationIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/MissingInterfaceMemberImplementationIssue.cs @@ -27,7 +27,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Missing interface members", Description = "Searches for missing interface implementations", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/StaticConstructorParameterIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/StaticConstructorParameterIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/StaticConstructorParameterIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/StaticConstructorParameterIssue.cs index 3ca1c7240..89ccf0397 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/CompilerErrors/StaticConstructorParameterIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/CompilerErrors/StaticConstructorParameterIssue.cs @@ -30,7 +30,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Static constructor should be parameterless", Description = "Static constructor should be parameterless", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ConstantConditionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ConstantConditionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ConstantConditionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ConstantConditionIssue.cs index c6a901e18..a4c7da503 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ConstantConditionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ConstantConditionIssue.cs @@ -26,8 +26,9 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Condition is always 'true' or always 'false'", Description = "Condition is always 'true' or always 'false'.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ConvertIfToAndExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ConvertIfToAndExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ConvertIfToAndExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ConvertIfToAndExpressionIssue.cs index a80937182..952d15e79 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ConvertIfToAndExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ConvertIfToAndExpressionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'if' statement can be re-written as '&&' expression", Description = "Convert 'if' to '&&' expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/LockThisIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/LockThisIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/LockThisIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/LockThisIssue.cs index 5415b312f..85746b66b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/LockThisIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/LockThisIssue.cs @@ -26,15 +26,13 @@ using System; using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Analysis; using ICSharpCode.NRefactory.Refactoring; -using System.Threading.Tasks; using System.Runtime.CompilerServices; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Use of lock (this) or MethodImplOptions.Synchronized is discouraged", Description = "Warns about using lock (this) or MethodImplOptions.Synchronized.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/MixedUseOfFieldsAndGettersIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/MixedUseOfFieldsAndGettersIssue.cs similarity index 85% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/MixedUseOfFieldsAndGettersIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/MixedUseOfFieldsAndGettersIssue.cs index 40d5b2358..0082bf81d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/MixedUseOfFieldsAndGettersIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/MixedUseOfFieldsAndGettersIssue.cs @@ -24,18 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.Linq; -using ICSharpCode.NRefactory.CSharp.Analysis; -using ICSharpCode.NRefactory.Refactoring; -using System.Threading.Tasks; -using System.Runtime.CompilerServices; -using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.Semantics; - -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Detects if fields & simple getters are used at the same time inside a class.", // Description = "Detects if fields & simple getters are used at the same time inside a class.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/NegativeRelationalExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/NegativeRelationalExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/NegativeRelationalExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/NegativeRelationalExpressionIssue.cs index 8b2d2bf96..25e418000 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/NegativeRelationalExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/NegativeRelationalExpressionIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Simplify negative relational expression", Description = "Simplify negative relational expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/NotImplementedExceptionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/NotImplementedExceptionIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/NotImplementedExceptionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/NotImplementedExceptionIssue.cs index 375907ec7..5b1d9191f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/NotImplementedExceptionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/NotImplementedExceptionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// This inspector just shows that there is a not implemented exception. It doesn't offer a fix. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ParameterOnlyAssignedIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ParameterOnlyAssignedIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ParameterOnlyAssignedIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ParameterOnlyAssignedIssue.cs index aa2c92311..5e4461179 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/ParameterOnlyAssignedIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/ParameterOnlyAssignedIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Parameter is only assigned", Description = "Parameter is assigned but its value is never used.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantAssignmentIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantAssignmentIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantAssignmentIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantAssignmentIssue.cs index b1d215c54..aa1b3cc3f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantAssignmentIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantAssignmentIssue.cs @@ -25,12 +25,12 @@ // THE SOFTWARE. using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant assignment", Description = "Value assigned to a variable or parameter is not used in all execution path.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantInternalIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantInternalIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantInternalIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantInternalIssue.cs index ddaf17766..135ec9a6d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantInternalIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantInternalIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Finds redundant internal modifiers. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantPrivateIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantPrivateIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantPrivateIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantPrivateIssue.cs index 65e7cc172..2c74a2546 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/RedundantPrivateIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/RedundantPrivateIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Finds redundant internal modifiers. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/StaticEventSubscriptionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/StaticEventSubscriptionIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/StaticEventSubscriptionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/StaticEventSubscriptionIssue.cs index 6bf0532b6..9119b7d4a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/StaticEventSubscriptionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/StaticEventSubscriptionIssue.cs @@ -28,12 +28,12 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.MonoCSharp; +using ICSharpCode.NRefactory.MonoPlayScript; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Static event removal check", Description = "Checks if static events are removed", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/UnreachableCodeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/UnreachableCodeIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/UnreachableCodeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/UnreachableCodeIssue.cs index 9d921b9d6..661b6ef81 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/UnreachableCodeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/UnreachableCodeIssue.cs @@ -26,11 +26,12 @@ using System; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Analysis; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Code is unreachable", Description = "Code is unreachable.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/VariableOnlyAssignedIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/VariableOnlyAssignedIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/VariableOnlyAssignedIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/VariableOnlyAssignedIssue.cs index d5897d2b2..df4d260ae 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/VariableOnlyAssignedIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/VariableOnlyAssignedIssue.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public abstract class VariableOnlyAssignedIssue : GatherVisitorCodeIssueProvider { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/XmlDocIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/XmlDocIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/XmlDocIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/XmlDocIssue.cs index e6e41e11e..bccb85fb6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Custom/XmlDocIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Custom/XmlDocIssue.cs @@ -27,15 +27,15 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using ICSharpCode.NRefactory.Documentation; using ICSharpCode.NRefactory.Editor; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.Xml; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.Xml; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Validate Xml documentation", Description = "Validate Xml docs", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/GatherVisitorBase.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/GatherVisitorBase.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/GatherVisitorBase.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/GatherVisitorBase.cs index 47e75c96d..a6c0dd7f3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/GatherVisitorBase.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/GatherVisitorBase.cs @@ -27,12 +27,10 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.MonoCSharp; -using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { class GatherVisitorConstants { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/IssueCategories.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/IssueCategories.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/IssueCategories.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/IssueCategories.cs index 9eff8cd9b..cd8238328 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/IssueCategories.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/IssueCategories.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public class IssueCategories { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToClosureIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToClosureIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToClosureIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToClosureIssue.cs index 857e98656..4cba121e3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToClosureIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToClosureIssue.cs @@ -26,12 +26,12 @@ using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Analysis; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using System; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public abstract class AccessToClosureIssue : GatherVisitorCodeIssueProvider { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs index 6af6c855f..5d4251f64 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToDisposedClosureIssue.cs @@ -26,11 +26,10 @@ using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Analysis; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription ("Access to disposed closure variable", // Description = "Access to closure variable from anonymous method when the variable is" + diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs index 94f6f3ad8..2aebb275c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/AccessToModifiedClosureIssue.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Access to modified closure variable", // Description = "Access to closure variable from anonymous method when the variable is modified " + diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/LocalVariableNamePicker.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/LocalVariableNamePicker.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/LocalVariableNamePicker.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/LocalVariableNamePicker.cs index d9f42949a..69c483384 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/LocalVariableNamePicker.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/AccessToClosureIssues/LocalVariableNamePicker.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public static class LocalVariableNamePicker { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateBodyMethodIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateBodyMethodIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateBodyMethodIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateBodyMethodIssue.cs index aad1d4816..b4d56473c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateBodyMethodIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateBodyMethodIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Methods have duplicate body", // Description = "One method has the same body as other method", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateExpressionsInConditionsIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateExpressionsInConditionsIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateExpressionsInConditionsIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateExpressionsInConditionsIssue.cs index 4d25a2fb6..f229c331b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateExpressionsInConditionsIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateExpressionsInConditionsIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Expression has some redundant items", // Description = "Expression has some redundant items", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateIfInIfChainIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateIfInIfChainIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateIfInIfChainIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateIfInIfChainIssue.cs index 6f54aa62e..6f0b67d4b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/DuplicateIfInIfChainIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/DuplicateIfInIfChainIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Else branch has some redundant if", // Description = "One Else-if was checked before so is not be true", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/ParameterCanBeIEnumerableIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/ParameterCanBeIEnumerableIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/ParameterCanBeIEnumerableIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/ParameterCanBeIEnumerableIssue.cs index cc4b82e08..d1df0ac2b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/ParameterCanBeIEnumerableIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/ParameterCanBeIEnumerableIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // Does this even make sense ? We've a parameter can be demoted issue which does mostly the same. // [IssueDescription("A parameter can IEnumerable/ICollection/IList", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs index ea8c0c2e6..b75725f79 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/NotWorking/VariableDeclaredInWideScopeIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("The variable can be declared in a nested scope", // Description = "Highlights variables that can be declared in a nested scope.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/RefactoringExtensions.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/RefactoringExtensions.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/RefactoringExtensions.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/RefactoringExtensions.cs index f16099a98..6acf9ec06 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/RefactoringExtensions.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/RefactoringExtensions.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { static class RefactoringExtensions { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/BaseMethodCallWithDefaultParameterIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/BaseMethodCallWithDefaultParameterIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/BaseMethodCallWithDefaultParameterIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/BaseMethodCallWithDefaultParameterIssue.cs index d1e47fdd1..b9e3ff938 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/BaseMethodCallWithDefaultParameterIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/BaseMethodCallWithDefaultParameterIssue.cs @@ -23,16 +23,12 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System; -using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Refactoring; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Call to base member with implicit default parameters", Description="Call to base member with implicit default parameters", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/BitwiseOperatorOnEnumWithoutFlagsIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/BitwiseOperatorOnEnumWithoutFlagsIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/BitwiseOperatorOnEnumWithoutFlagsIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/BitwiseOperatorOnEnumWithoutFlagsIssue.cs index ad1d347d5..f0f8d2f9f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/BitwiseOperatorOnEnumWithoutFlagsIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/BitwiseOperatorOnEnumWithoutFlagsIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Bitwise operation on enum which has no [Flags] attribute", Description = "Bitwise operation on enum which has no [Flags] attribute", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CanBeReplacedWithTryCastAndCheckForNullIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CanBeReplacedWithTryCastAndCheckForNullIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CanBeReplacedWithTryCastAndCheckForNullIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CanBeReplacedWithTryCastAndCheckForNullIssue.cs index 04fa833ed..0d90e9ac6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CanBeReplacedWithTryCastAndCheckForNullIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CanBeReplacedWithTryCastAndCheckForNullIssue.cs @@ -32,7 +32,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Type check and casts can be replaced with 'as' and null check", Description="Type check and casts can be replaced with 'as' and null check", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CompareNonConstrainedGenericWithNullIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CompareNonConstrainedGenericWithNullIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CompareNonConstrainedGenericWithNullIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CompareNonConstrainedGenericWithNullIssue.cs index 84935b17f..bc76ef765 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CompareNonConstrainedGenericWithNullIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CompareNonConstrainedGenericWithNullIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ( "Possible compare of value type with 'null'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CompareOfFloatsByEqualityOperatorIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CompareOfFloatsByEqualityOperatorIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CompareOfFloatsByEqualityOperatorIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CompareOfFloatsByEqualityOperatorIssue.cs index 53c8fc01a..a7c1699a2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/CompareOfFloatsByEqualityOperatorIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/CompareOfFloatsByEqualityOperatorIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Compare floating point numbers with equality operator", Description = "Comparison of floating point numbers with equality operator.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ConditionalTernaryEqualBranchIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ConditionalTernaryEqualBranchIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ConditionalTernaryEqualBranchIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ConditionalTernaryEqualBranchIssue.cs index d5dae7be5..e387664b5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ConditionalTernaryEqualBranchIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ConditionalTernaryEqualBranchIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("'?:' expression has identical true and false branches", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs index 5f574ee68..3a9eafee0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/DelegateSubtractionIssue.cs @@ -24,11 +24,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Delegate subtractions", Description = "Delegate subtraction has unpredictable result", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DoNotCallOverridableMethodsInConstructorIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/DoNotCallOverridableMethodsInConstructorIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DoNotCallOverridableMethodsInConstructorIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/DoNotCallOverridableMethodsInConstructorIssue.cs index 99b312582..2c715aead 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/DoNotCallOverridableMethodsInConstructorIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/DoNotCallOverridableMethodsInConstructorIssue.cs @@ -23,12 +23,11 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp.Refactoring; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Virtual member call in constructor", Description = "Warns about calls to virtual member functions occuring in the constructor.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EmptyGeneralCatchClauseIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EmptyGeneralCatchClauseIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EmptyGeneralCatchClauseIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EmptyGeneralCatchClauseIssue.cs index 9e22da9a8..b7e09e520 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EmptyGeneralCatchClauseIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EmptyGeneralCatchClauseIssue.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// A catch clause that catches System.Exception and has an empty body diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EqualExpressionComparisonIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EqualExpressionComparisonIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EqualExpressionComparisonIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EqualExpressionComparisonIssue.cs index 0e48fc702..d0bceb89c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EqualExpressionComparisonIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EqualExpressionComparisonIssue.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Equal expression comparison", Description="Comparing equal expression for equality is usually useless", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EventUnsubscriptionViaAnonymousDelegateIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EventUnsubscriptionViaAnonymousDelegateIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EventUnsubscriptionViaAnonymousDelegateIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EventUnsubscriptionViaAnonymousDelegateIssue.cs index 6b723e374..6048d6cef 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/EventUnsubscriptionViaAnonymousDelegateIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/EventUnsubscriptionViaAnonymousDelegateIssue.cs @@ -26,11 +26,12 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Event unsubscription via anonymous delegate", Description="Event unsubscription via anonymous delegate is useless", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ForControlVariableIsNeverModifiedIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ForControlVariableIsNeverModifiedIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ForControlVariableIsNeverModifiedIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ForControlVariableIsNeverModifiedIssue.cs index e3fdefa4a..18c7b8060 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ForControlVariableIsNeverModifiedIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ForControlVariableIsNeverModifiedIssue.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("'for' loop control variable is never modified", Description = "'for' loop control variable is never modified.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/FormatStringProblemIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/FormatStringProblemIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/FormatStringProblemIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/FormatStringProblemIssue.cs index 9d5f17520..a91d40a00 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/FormatStringProblemIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/FormatStringProblemIssue.cs @@ -25,12 +25,13 @@ // THE SOFTWARE. using System; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("String formatting problems", Description = "Finds issues with format strings.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/FunctionNeverReturnsIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/FunctionNeverReturnsIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/FunctionNeverReturnsIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/FunctionNeverReturnsIssue.cs index bded542a5..d5112ee5f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/FunctionNeverReturnsIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/FunctionNeverReturnsIssue.cs @@ -24,13 +24,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Analysis; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.Analysis; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Function never returns", Description = "Function does not reach its end or a 'return' statement by any of possible execution paths.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/LocalVariableHidesMemberIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/LocalVariableHidesMemberIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/LocalVariableHidesMemberIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/LocalVariableHidesMemberIssue.cs index c2ebc8fcd..4779fd661 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/LocalVariableHidesMemberIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/LocalVariableHidesMemberIssue.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Local variable hides member", Description = "Local variable has the same name as a member and hides it.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/LongLiteralEndingLowerLIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/LongLiteralEndingLowerLIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/LongLiteralEndingLowerLIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/LongLiteralEndingLowerLIssue.cs index dd08a9361..42ab92d09 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/LongLiteralEndingLowerLIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/LongLiteralEndingLowerLIssue.cs @@ -23,11 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Long literal ends with 'l' instead of 'L'", Description = "Lowercase 'l' is often confused with '1'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/MemberHidesStaticFromOuterClassIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/MemberHidesStaticFromOuterClassIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/MemberHidesStaticFromOuterClassIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/MemberHidesStaticFromOuterClassIssue.cs index ea201c7a5..eaa74d8b7 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/MemberHidesStaticFromOuterClassIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/MemberHidesStaticFromOuterClassIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ( "Member hides static member from outer class", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/MethodOverloadWithOptionalParameterIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/MethodOverloadWithOptionalParameterIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/MethodOverloadWithOptionalParameterIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/MethodOverloadWithOptionalParameterIssue.cs index beb91ae5d..2f23b2d48 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/MethodOverloadWithOptionalParameterIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/MethodOverloadWithOptionalParameterIssue.cs @@ -30,7 +30,7 @@ using System.Linq; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ( "Method with optional parameter is hidden by overload", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/NonReadonlyReferencedInGetHashCodeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/NonReadonlyReferencedInGetHashCodeIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/NonReadonlyReferencedInGetHashCodeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/NonReadonlyReferencedInGetHashCodeIssue.cs index 6abe3b706..4d06e3445 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/NonReadonlyReferencedInGetHashCodeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/NonReadonlyReferencedInGetHashCodeIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Non-readonly field referenced in 'GetHashCode()'", Description= "Non-readonly field referenced in 'GetHashCode()'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/NotResolvedInTextIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/NotResolvedInTextIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/NotResolvedInTextIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/NotResolvedInTextIssue.cs index 576849218..62dfa044e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/NotResolvedInTextIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/NotResolvedInTextIssue.cs @@ -24,7 +24,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp.Refactoring; using System.Collections.Generic; using ICSharpCode.NRefactory.Semantics; using System; @@ -32,7 +31,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Cannot resolve symbol in text argument", Description = "Cannot resolve symbol in text argument", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ObjectCreationAsStatementIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ObjectCreationAsStatementIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ObjectCreationAsStatementIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ObjectCreationAsStatementIssue.cs index 9afb6f228..1da171497 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ObjectCreationAsStatementIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ObjectCreationAsStatementIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Possible unassigned object created by 'new'", Description = "Possible unassigned object created by 'new'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OperatorIsCanBeUsedIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OperatorIsCanBeUsedIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OperatorIsCanBeUsedIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OperatorIsCanBeUsedIssue.cs index bed5eb333..167845812 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OperatorIsCanBeUsedIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OperatorIsCanBeUsedIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Operator 'is' can be used", Description = "Operator Is can be used instead of comparing object GetType() and instances of System.Type object.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterHierarchyMismatchIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterHierarchyMismatchIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterHierarchyMismatchIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterHierarchyMismatchIssue.cs index 557b03bfc..0601fe1c0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterHierarchyMismatchIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterHierarchyMismatchIssue.cs @@ -28,10 +28,9 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Mismatch optional parameter value in overridden method", Description = "The value of an optional parameter in a method does not match the base method.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterRefOutIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterRefOutIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterRefOutIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterRefOutIssue.cs index ac099f3bc..cceb1f9a4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterRefOutIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/OptionalParameterRefOutIssue.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("[Optional] attribute with 'ref' or 'out' parameter", Description="C# doesn't support optional 'ref' or 'out' parameters", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ParameterHidesMemberIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ParameterHidesMemberIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ParameterHidesMemberIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ParameterHidesMemberIssue.cs index f10fffdc9..973173511 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ParameterHidesMemberIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ParameterHidesMemberIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Semantics; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Parameter hides a member", Description = "Parameter has the same name as a member and hides it.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PartialMethodParameterNameMismatchIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PartialMethodParameterNameMismatchIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PartialMethodParameterNameMismatchIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PartialMethodParameterNameMismatchIssue.cs index d03d3fd2a..bb30c5122 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PartialMethodParameterNameMismatchIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PartialMethodParameterNameMismatchIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Parameter name differs in partial method declaration", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PolymorphicFieldLikeEventInvocationIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PolymorphicFieldLikeEventInvocationIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PolymorphicFieldLikeEventInvocationIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PolymorphicFieldLikeEventInvocationIssue.cs index 298784e93..4d525411b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PolymorphicFieldLikeEventInvocationIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PolymorphicFieldLikeEventInvocationIssue.cs @@ -28,9 +28,9 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ( "Invocation of polymorphic field event", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PossibleAssignmentToReadonlyFieldIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PossibleAssignmentToReadonlyFieldIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PossibleAssignmentToReadonlyFieldIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PossibleAssignmentToReadonlyFieldIssue.cs index ac7b51769..30a2b39b6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PossibleAssignmentToReadonlyFieldIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PossibleAssignmentToReadonlyFieldIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ( "Possible assignment to readonly field", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PossibleMultipleEnumerationIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PossibleMultipleEnumerationIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PossibleMultipleEnumerationIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PossibleMultipleEnumerationIssue.cs index d32fb8e3e..fd35a9abb 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/PossibleMultipleEnumerationIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/PossibleMultipleEnumerationIssue.cs @@ -27,12 +27,12 @@ using System; using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Possible multiple enumeration of IEnumerable", Description = "Possible multiple enumeration of IEnumerable", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/StaticFieldInGenericTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/StaticFieldInGenericTypeIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/StaticFieldInGenericTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/StaticFieldInGenericTypeIssue.cs index 64951c640..0affa3f66 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/StaticFieldInGenericTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/StaticFieldInGenericTypeIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Diagnostics.CodeAnalysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Static field in generic type", Description = "Warns about static fields in generic types.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ThreadStaticAtInstanceFieldIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ThreadStaticAtInstanceFieldIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ThreadStaticAtInstanceFieldIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ThreadStaticAtInstanceFieldIssue.cs index 27fe952b8..706f5a79d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ThreadStaticAtInstanceFieldIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ThreadStaticAtInstanceFieldIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("[ThreadStatic] doesn't work with instance fields", Description = "[ThreadStatic] doesn't work with instance fields", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ValueParameterNotUsedIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ValueParameterNotUsedIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ValueParameterNotUsedIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ValueParameterNotUsedIssue.cs index 3efaf6d3e..64218842c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CodeQuality/ValueParameterNotUsedIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CodeQuality/ValueParameterNotUsedIssue.cs @@ -28,12 +28,12 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Threading; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'value' parameter not used", Description = "Warns about property or indexer setters and event adders or removers that do not use the value parameter.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerErrors/ProhibitedModifiersIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerErrors/ProhibitedModifiersIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerErrors/ProhibitedModifiersIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerErrors/ProhibitedModifiersIssue.cs index 2b748c9f1..817fbf682 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerErrors/ProhibitedModifiersIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerErrors/ProhibitedModifiersIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Checks for prohibited modifiers", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS0183ExpressionIsAlwaysOfProvidedTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS0183ExpressionIsAlwaysOfProvidedTypeIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS0183ExpressionIsAlwaysOfProvidedTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS0183ExpressionIsAlwaysOfProvidedTypeIssue.cs index a4beadf81..8c12a3785 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS0183ExpressionIsAlwaysOfProvidedTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS0183ExpressionIsAlwaysOfProvidedTypeIssue.cs @@ -25,12 +25,12 @@ // THE SOFTWARE. using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS0183:Given expression is always of the provided type", Description = "CS0183:Given expression is always of the provided type.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1573ParameterHasNoMatchingParamTagIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1573ParameterHasNoMatchingParamTagIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1573ParameterHasNoMatchingParamTagIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1573ParameterHasNoMatchingParamTagIssue.cs index 39f5d28f2..52fc7d5d2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1573ParameterHasNoMatchingParamTagIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1573ParameterHasNoMatchingParamTagIssue.cs @@ -25,6 +25,7 @@ // THE SOFTWARE. using System; using System.Collections.Generic; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; @@ -35,7 +36,7 @@ using System.IO; using ICSharpCode.NRefactory.Documentation; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Parameter has no matching param tag in the XML comment", Description = "Parameter has no matching param tag in the XML comment", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1717AssignmentMadeToSameVariableIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1717AssignmentMadeToSameVariableIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1717AssignmentMadeToSameVariableIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1717AssignmentMadeToSameVariableIssue.cs index 0b0c2e0c4..9b965a235 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1717AssignmentMadeToSameVariableIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/CS1717AssignmentMadeToSameVariableIssue.cs @@ -32,7 +32,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("CS1717:Assignment made to same variable", Description = "CS1717:Assignment made to same variable.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/UnassignedReadonlyFieldIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/UnassignedReadonlyFieldIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/UnassignedReadonlyFieldIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/UnassignedReadonlyFieldIssue.cs index 2ebee431c..208648145 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/CompilerWarnings/UnassignedReadonlyFieldIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/CompilerWarnings/UnassignedReadonlyFieldIssue.cs @@ -27,12 +27,11 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; using System.Linq; using System; -using ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Unassigned readonly field", Description = "Unassigned readonly field", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/AffectedEntity.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/AffectedEntity.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/AffectedEntity.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/AffectedEntity.cs index 792363ae3..b463398cf 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/AffectedEntity.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/AffectedEntity.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [Flags] public enum AffectedEntity diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/DefaultRules.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/DefaultRules.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/DefaultRules.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/DefaultRules.cs index 7a30d7351..5856d43da 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/DefaultRules.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/DefaultRules.cs @@ -26,7 +26,7 @@ using System; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public static class DefaultRules { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/InconsistentNamingIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/InconsistentNamingIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/InconsistentNamingIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/InconsistentNamingIssue.cs index 50c72dee4..e9f15e096 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/InconsistentNamingIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/InconsistentNamingIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Inconsistent Naming", Description = "Name doesn't match the defined style for this entity.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingConventionService.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingConventionService.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingConventionService.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingConventionService.cs index a1c2e9b6e..403bf4e4c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingConventionService.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingConventionService.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public abstract class NamingConventionService { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs index 6deb6422e..df535bcb0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingRule.cs @@ -29,7 +29,7 @@ using System.Text; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public class NamingRule : IEquatable { diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingStyle.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingStyle.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingStyle.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingStyle.cs index a2c7e5873..c0daf7ab4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingStyle.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/ConstraintViolations/InconsistentNamingIssue/NamingStyle.cs @@ -24,7 +24,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public enum NamingStyle { None, diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/NUnit/NonPublicMethodWithTestAttributeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/NUnit/NonPublicMethodWithTestAttributeIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/NUnit/NonPublicMethodWithTestAttributeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/NUnit/NonPublicMethodWithTestAttributeIssue.cs index dc0e65a23..71be1c6ab 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/NUnit/NonPublicMethodWithTestAttributeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/NUnit/NonPublicMethodWithTestAttributeIssue.cs @@ -28,11 +28,11 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("NUnit Test methods should have public visibility", Description = "Non public methods are not found by NUnit.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertClosureToMethodGroupIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertClosureToMethodGroupIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertClosureToMethodGroupIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertClosureToMethodGroupIssue.cs index a44fe3963..6f9c74a97 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertClosureToMethodGroupIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertClosureToMethodGroupIssue.cs @@ -28,11 +28,11 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Convert anonymous method to method group", Description = "Anonymous method or lambda expression can be simplified to method group.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertConditionalTernaryToNullCoalescingIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertConditionalTernaryToNullCoalescingIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertConditionalTernaryToNullCoalescingIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertConditionalTernaryToNullCoalescingIssue.cs index 2885f6626..0ec6cc5c5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertConditionalTernaryToNullCoalescingIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertConditionalTernaryToNullCoalescingIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Checks for "a != null ? a : other" diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToConditionalTernaryExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToConditionalTernaryExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToConditionalTernaryExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToConditionalTernaryExpressionIssue.cs index 2622f7320..46a586a93 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToConditionalTernaryExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToConditionalTernaryExpressionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'if' statement can be re-written as '?:' expression", Description = "Convert 'if' to '?:'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToNullCoalescingExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToNullCoalescingExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToNullCoalescingExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToNullCoalescingExpressionIssue.cs index 17b990a1d..2e7601578 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToNullCoalescingExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToNullCoalescingExpressionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'if' statement can be re-written as '??' expression", Description="Convert 'if' to '??'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToSwitchStatementIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToSwitchStatementIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToSwitchStatementIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToSwitchStatementIssue.cs index eebaa3831..17c7d28c2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToSwitchStatementIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertIfStatementToSwitchStatementIssue.cs @@ -27,7 +27,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'if' statement can be re-written as 'switch' statement", Description="Convert 'if' to 'switch'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertNullableToShortFormIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertNullableToShortFormIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertNullableToShortFormIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertNullableToShortFormIssue.cs index 00555117b..7f561fc97 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertNullableToShortFormIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertNullableToShortFormIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Convert 'Nullable' to 'T?'", Description = "Convert 'Nullable' to the short form 'T?'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToAutoPropertyIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToAutoPropertyIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToAutoPropertyIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToAutoPropertyIssue.cs index 5cf69031a..584761c63 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToAutoPropertyIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToAutoPropertyIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Convert property to auto property", Description = "Convert property to auto property", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToLambdaExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToLambdaExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToLambdaExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToLambdaExpressionIssue.cs index 3b6f42abc..cb53075f8 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToLambdaExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToLambdaExpressionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Convert to lambda expression", Description = "Convert to lambda with expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToStaticTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToStaticTypeIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToStaticTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToStaticTypeIssue.cs index cfcb45605..feb0753c8 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ConvertToStaticTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ConvertToStaticTypeIssue.cs @@ -24,12 +24,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using System.Linq; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Class can be converted to static", Description = "If all fields, properties and methods members are static, the class can be made static.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ForCanBeConvertedToForeachIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ForCanBeConvertedToForeachIssue.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ForCanBeConvertedToForeachIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ForCanBeConvertedToForeachIssue.cs index d2e2d36c2..007dc1a41 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/ForCanBeConvertedToForeachIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/ForCanBeConvertedToForeachIssue.cs @@ -30,8 +30,9 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'for' can be converted into 'foreach'", Description = "Foreach loops are more efficient", @@ -195,9 +196,9 @@ public override void VisitForStatement(ForStatement forStatement) false ); forStatement.EmbeddedStatement.AcceptVisitor(analyze); - if (analyze.GetStatus(lr.Variable) == ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod.VariableState.Changed || - analyze.GetStatus(ir.Variable) == ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod.VariableState.Changed || - analyze.GetStatus(ir.Variable) == ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod.VariableState.Used) + if (analyze.GetStatus(lr.Variable) == VariableState.Changed || + analyze.GetStatus(ir.Variable) == VariableState.Changed || + analyze.GetStatus(ir.Variable) == VariableState.Used) return; AddIssue(new CodeIssue( diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/InvokeAsExtensionMethodIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/InvokeAsExtensionMethodIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/InvokeAsExtensionMethodIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/InvokeAsExtensionMethodIssue.cs index 668cd9b6b..82d230068 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/InvokeAsExtensionMethodIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/InvokeAsExtensionMethodIssue.cs @@ -30,10 +30,10 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Convert static method call to extension method call", Description = "If an extension method is called as static method convert it to method syntax", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/RewriteIfReturnToReturnIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/RewriteIfReturnToReturnIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/RewriteIfReturnToReturnIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/RewriteIfReturnToReturnIssue.cs index 39f5de6c5..17a5ccb6b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/RewriteIfReturnToReturnIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/RewriteIfReturnToReturnIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'if...return' statement can be re-written as 'return' statement", Description="Convert 'if...return' to 'return'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/SuggestUseVarKeywordEvidentIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/SuggestUseVarKeywordEvidentIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/SuggestUseVarKeywordEvidentIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/SuggestUseVarKeywordEvidentIssue.cs index 2345af606..fb5b90355 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/Opportunities/SuggestUseVarKeywordEvidentIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/Opportunities/SuggestUseVarKeywordEvidentIssue.cs @@ -23,13 +23,12 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using System; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -using System; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Checks for places where the 'var' keyword can be used. Note that the action is actually done with a context diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/AccessToStaticMemberViaDerivedTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/AccessToStaticMemberViaDerivedTypeIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/AccessToStaticMemberViaDerivedTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/AccessToStaticMemberViaDerivedTypeIssue.cs index 606fbc8ab..873720db0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/AccessToStaticMemberViaDerivedTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/AccessToStaticMemberViaDerivedTypeIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Call to static member via a derived class", Description = "Suggests using the class declaring a static function when calling it.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/BaseMemberHasParamsIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/BaseMemberHasParamsIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/BaseMemberHasParamsIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/BaseMemberHasParamsIssue.cs index d727fb99c..f3b943108 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/BaseMemberHasParamsIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/BaseMemberHasParamsIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Base parameter has 'params' modifier, but missing in overrider", Description = "Base parameter has 'params' modifier, but missing in overrider", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfDoToWhileIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfDoToWhileIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfDoToWhileIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfDoToWhileIssue.cs index b0ae36376..f9e665094 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfDoToWhileIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfDoToWhileIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'if-do-while' statement can be re-written as 'while' statement", Description = "Convert 'if-do-while' to 'while' statement", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfToOrExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfToOrExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfToOrExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfToOrExpressionIssue.cs index bad8fa3ce..d6ab4fdd3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfToOrExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertIfToOrExpressionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'if' statement can be re-written as '||' expression", Description = "Convert 'if' to '||' expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs index 30aa5b8cb..a7be41329 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ConvertToConstantIssue.cs @@ -27,17 +27,13 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; -using System.Threading; using ICSharpCode.NRefactory.TypeSystem.Implementation; using System; -using System.Diagnostics; -using ICSharpCode.NRefactory.Utils; -using ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Convert local variable or field to constant", Description = "Convert local variable or field to constant", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/EmptyEmbeddedStatementIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/EmptyEmbeddedStatementIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/EmptyEmbeddedStatementIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/EmptyEmbeddedStatementIssue.cs index 3ad11d89f..7e6e40a1a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/EmptyEmbeddedStatementIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/EmptyEmbeddedStatementIssue.cs @@ -26,7 +26,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Empty control statement body", Description = "';' should be avoided. Use '{}' instead", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/FieldCanBeMadeReadOnlyIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/FieldCanBeMadeReadOnlyIssue.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/FieldCanBeMadeReadOnlyIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/FieldCanBeMadeReadOnlyIssue.cs index dcf9e2a04..8382b61f6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/FieldCanBeMadeReadOnlyIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/FieldCanBeMadeReadOnlyIssue.cs @@ -27,17 +27,11 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; -using System.Threading; -using ICSharpCode.NRefactory.TypeSystem.Implementation; using System; -using System.Diagnostics; -using ICSharpCode.NRefactory.Utils; -using ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Convert field to readonly", Description = "Convert field to readonly", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/MemberCanBeMadeStaticIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/MemberCanBeMadeStaticIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/MemberCanBeMadeStaticIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/MemberCanBeMadeStaticIssue.cs index 8308b4eec..632819535 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/MemberCanBeMadeStaticIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/MemberCanBeMadeStaticIssue.cs @@ -24,14 +24,13 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Member can be made static", Description = "A member doesn't use 'this' object neither explicit nor implicit. It can be made static.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ParameterCanBeDeclaredWithBaseTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ParameterCanBeDeclaredWithBaseTypeIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ParameterCanBeDeclaredWithBaseTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ParameterCanBeDeclaredWithBaseTypeIssue.cs index 9f4da08fe..7325a35c7 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ParameterCanBeDeclaredWithBaseTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ParameterCanBeDeclaredWithBaseTypeIssue.cs @@ -28,12 +28,13 @@ using ICSharpCode.NRefactory.Semantics; using System.Linq; using System; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.TypeSystem.Implementation; using System.Diagnostics; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Parameter can be declared with base type", Description = "Finds parameters that can be demoted to a base class.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PossibleMistakenCallToGetTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PossibleMistakenCallToGetTypeIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PossibleMistakenCallToGetTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PossibleMistakenCallToGetTypeIssue.cs index 1ea483b63..fd9c29774 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PossibleMistakenCallToGetTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PossibleMistakenCallToGetTypeIssue.cs @@ -25,10 +25,10 @@ // THE SOFTWARE. using System; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Possible mistaken call to 'object.GetType()'", Description = "Possible mistaken call to 'object.GetType()'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PublicConstructorInAbstractClass.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PublicConstructorInAbstractClass.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PublicConstructorInAbstractClass.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PublicConstructorInAbstractClass.cs index ad799a6fd..48c81c813 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PublicConstructorInAbstractClass.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/PublicConstructorInAbstractClass.cs @@ -25,9 +25,10 @@ using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Make constructor in abstract class protected", Description = "Constructor in abstract class should not be public", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReferenceEqualsWithValueTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReferenceEqualsWithValueTypeIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReferenceEqualsWithValueTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReferenceEqualsWithValueTypeIssue.cs index 32a996e5a..83ac89ead 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReferenceEqualsWithValueTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReferenceEqualsWithValueTypeIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Check for reference equality instead", Description = "Check for reference equality instead", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithFirstOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithFirstOrDefaultIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithFirstOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithFirstOrDefaultIssue.cs index 78b85c31f..f5d83ee02 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithFirstOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithFirstOrDefaultIssue.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with FirstOrDefault()", Description = "Replace with call to FirstOrDefault()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithLastOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithLastOrDefaultIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithLastOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithLastOrDefaultIssue.cs index 494a06b0a..44c8f96cb 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithLastOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithLastOrDefaultIssue.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with LastOrDefault()", Description = "Replace with call to LastOrDefault()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeAny.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeAny.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeAny.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeAny.cs index befbbe14c..85307a3b7 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeAny.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeAny.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().Any()", Description = "Replace with call to OfType().Any()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeCountIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeCountIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeCountIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeCountIssue.cs index 4cc91a289..4a297e284 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeCountIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeCountIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().Count()", Description = "Replace with call to OfType().Count()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstIssue.cs index 0575e3e09..38a0d2be4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().First()", Description = "Replace with call to OfType().First()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstOrDefaultIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstOrDefaultIssue.cs index 6060a2aac..36467047b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeFirstOrDefaultIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().FirstOrDefault()", Description = "Replace with call to OfType().FirstOrDefault()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeIssue.cs index e9a35d196..64899cc0f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeIssue.cs @@ -31,7 +31,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType", Description = "Replace with call to OfType", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastIssue.cs index 5fbf9c1f5..5a2998588 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().Last()", Description = "Replace with call to OfType().Last()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastOrDefaultIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastOrDefaultIssue.cs index fd4ca1372..29eefd7b8 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLastOrDefaultIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().LastOrDefault()", Description = "Replace with call to OfType().LastOrDefault()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLongCountIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLongCountIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLongCountIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLongCountIssue.cs index 148f9b25a..eacd977d1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLongCountIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeLongCountIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().LongCount()", Description = "Replace with call to OfType().LongCount()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleIssue.cs index 4c5090ef4..2286642f9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().Single()", Description = "Replace with call to OfType().Single()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleOrDefaultIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleOrDefaultIssue.cs index 28730528a..98ee6c5b1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeSingleOrDefaultIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().SingleOrDefault()", Description = "Replace with call to OfType().SingleOrDefault()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeWhereIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeWhereIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeWhereIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeWhereIssue.cs index 055197980..c801f3349 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeWhereIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithOfTypeWhereIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with OfType().Where()", Description = "Replace with call to OfType().Where()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSimpleAssignmentIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSimpleAssignmentIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSimpleAssignmentIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSimpleAssignmentIssue.cs index 07d85fc63..6065224d2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSimpleAssignmentIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSimpleAssignmentIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.PatternMatching; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Replace with simple assignment", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAnyIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAnyIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAnyIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAnyIssue.cs index 9a33adf65..bddc88832 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAnyIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAnyIssue.cs @@ -32,7 +32,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Any(...)", Description = "Replace with single call to Any(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs index 20eae5fa0..6e3f7ffdd 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToAverageIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Average(...)", Description = "Replace with single call to Average(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToCountIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToCountIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToCountIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToCountIssue.cs index 51daf27b6..a5fe89b4e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToCountIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToCountIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Count(...)", Description = "Replace with single call to Count(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstIssue.cs index b11fb0640..243d4952e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to First(...)", Description = "Replace with single call to First(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstOrDefaultIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstOrDefaultIssue.cs index 05dc3a0d6..71725a9c9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToFirstOrDefaultIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to FirstOrDefault(...)", Description = "Replace with single call to FirstOrDefault(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastIssue.cs index 16c186612..0fe47a0b8 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Last(...)", Description = "Replace with single call to Last(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastOrDefaultIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastOrDefaultIssue.cs index 0c2090256..bf03e9f35 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLastOrDefaultIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to LastOrDefault(...)", Description = "Replace with single call to LastOrDefault(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLongCountIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLongCountIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLongCountIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLongCountIssue.cs index 2ddc41213..1ef300734 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLongCountIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToLongCountIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to LongCount(...)", Description = "Replace with single call to LongCount(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs index d8597f0bf..8e16969e9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMaxIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Max(...)", Description = "Replace with single call to Max(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs index 2b63149e8..b2e21004f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToMinIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Min(...)", Description = "Replace with single call to Min(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleIssue.cs index 67f57f13b..60249e15c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Single(...)", Description = "Replace with single call to Single(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleOrDefaultIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleOrDefaultIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleOrDefaultIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleOrDefaultIssue.cs index 874ad256e..a1dbc0c99 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleOrDefaultIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSingleOrDefaultIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to SingleOrDefault(...)", Description = "Replace with single call to SingleOrDefault(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs index 45f113137..fbf04af5c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithSingleCallToSumIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Replace with single call to Sum(...)", Description = "Replace with single call to Sum(...)", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithStringIsNullOrEmptyIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithStringIsNullOrEmptyIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithStringIsNullOrEmptyIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithStringIsNullOrEmptyIssue.cs index 94db875c3..2b22e667c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithStringIsNullOrEmptyIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/ReplaceWithStringIsNullOrEmptyIssue.cs @@ -26,10 +26,11 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Checks for str == null && str == " " diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyConditionalTernaryExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyConditionalTernaryExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyConditionalTernaryExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyConditionalTernaryExpressionIssue.cs index 4aad3673e..fda2e811a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyConditionalTernaryExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyConditionalTernaryExpressionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Simplify conditional expression", Description = "Conditional expression can be simplified", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyLinqExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyLinqExpressionIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyLinqExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyLinqExpressionIssue.cs index 7f508da9f..16ba28699 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyLinqExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/SimplifyLinqExpressionIssue.cs @@ -28,9 +28,9 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Simplify LINQ expression", Description = "Simplify LINQ expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareIsCultureSpecificIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareIsCultureSpecificIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareIsCultureSpecificIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareIsCultureSpecificIssue.cs index 54fc1c3ab..474dbaedc 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareIsCultureSpecificIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareIsCultureSpecificIssue.cs @@ -27,11 +27,11 @@ using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'string.Compare' is culture-aware", Description = "Warns when a culture-aware 'Compare' call is used by default.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareToIsCultureSpecificIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareToIsCultureSpecificIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareToIsCultureSpecificIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareToIsCultureSpecificIssue.cs index 225aad269..d16dd2f3a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareToIsCultureSpecificIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringCompareToIsCultureSpecificIssue.cs @@ -27,11 +27,11 @@ using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'string.CompareTo' is culture-aware", Description = "Warns when a culture-aware 'string.CompareTo' call is used by default.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringEndsWithIsCultureSpecificIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringEndsWithIsCultureSpecificIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringEndsWithIsCultureSpecificIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringEndsWithIsCultureSpecificIssue.cs index 6a108fdaf..0a59cde33 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringEndsWithIsCultureSpecificIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringEndsWithIsCultureSpecificIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'string.EndsWith' is culture-aware", Description = "Warns when a culture-aware 'EndsWith' call is used by default.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringIndexOfIsCultureSpecificIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringIndexOfIsCultureSpecificIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringIndexOfIsCultureSpecificIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringIndexOfIsCultureSpecificIssue.cs index fcc81d8e2..a1215d26c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringIndexOfIsCultureSpecificIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringIndexOfIsCultureSpecificIssue.cs @@ -33,7 +33,7 @@ using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'string.IndexOf' is culture-aware", Description = "Warns when a culture-aware 'IndexOf' call is used by default.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringLastIndexOfIsCultureSpecificIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringLastIndexOfIsCultureSpecificIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringLastIndexOfIsCultureSpecificIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringLastIndexOfIsCultureSpecificIssue.cs index 5c0ad9d3d..082c67f2d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringLastIndexOfIsCultureSpecificIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringLastIndexOfIsCultureSpecificIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'string.LastIndexOf' is culture-aware", Description = "Warns when a culture-aware 'LastIndexOf' call is used by default.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringStartsWithIsCultureSpecificIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringStartsWithIsCultureSpecificIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringStartsWithIsCultureSpecificIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringStartsWithIsCultureSpecificIssue.cs index ffbc1fba2..381bc7d88 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringStartsWithIsCultureSpecificIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/StringStartsWithIsCultureSpecificIssue.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'string.StartsWith' is culture-aware", Description = "Warns when a culture-aware 'StartsWith' call is used by default.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseArrayCreationExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseArrayCreationExpressionIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseArrayCreationExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseArrayCreationExpressionIssue.cs index a7096f413..3bcd2e985 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseArrayCreationExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseArrayCreationExpressionIssue.cs @@ -27,11 +27,11 @@ using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Use array creation expression", Description = "Use array creation expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseIsOperatorIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseIsOperatorIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseIsOperatorIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseIsOperatorIssue.cs index 66d3cd9ea..b3a9e623d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseIsOperatorIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseIsOperatorIssue.cs @@ -28,7 +28,7 @@ using System; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Use 'is' operator", Description = "'is' operator can be used", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodAnyIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodAnyIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodAnyIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodAnyIssue.cs index 6cd1c652a..7f214500a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodAnyIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodAnyIssue.cs @@ -30,9 +30,9 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Use method 'Any()'", Description = "Replace usages of 'Count()' with call to 'Any()'", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodIsInstanceOfTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodIsInstanceOfTypeIssue.cs similarity index 87% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodIsInstanceOfTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodIsInstanceOfTypeIssue.cs index eb65a0f1b..08dfae0b9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodIsInstanceOfTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/PracticesAndImprovements/UseMethodIsInstanceOfTypeIssue.cs @@ -23,21 +23,11 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; -using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Analysis; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; -using System.Threading; -using ICSharpCode.NRefactory.TypeSystem.Implementation; -using System; -using System.Diagnostics; -using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Use method IsInstanceOfType", Description = "Use method IsInstanceOfType", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ArrayCreationCanBeReplacedWithArrayInitializerIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ArrayCreationCanBeReplacedWithArrayInitializerIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ArrayCreationCanBeReplacedWithArrayInitializerIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ArrayCreationCanBeReplacedWithArrayInitializerIssue.cs index d127972f2..74d0941d6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ArrayCreationCanBeReplacedWithArrayInitializerIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ArrayCreationCanBeReplacedWithArrayInitializerIssue.cs @@ -27,7 +27,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Array creation can be replaced with array initializer", Description = "When initializing explicitly typed local variable or array type, array creation expression can be replaced with array initializer.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConditionIsAlwaysTrueOrFalseIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConditionIsAlwaysTrueOrFalseIssue.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConditionIsAlwaysTrueOrFalseIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConditionIsAlwaysTrueOrFalseIssue.cs index ae09175b6..463b568ef 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConditionIsAlwaysTrueOrFalseIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConditionIsAlwaysTrueOrFalseIssue.cs @@ -24,18 +24,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using System.Linq; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.PatternMatching; -using System.Runtime.InteropServices.ComTypes; -using ICSharpCode.NRefactory.CSharp.Analysis; -using ICSharpCode.NRefactory.CSharp.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Expression is always 'true' or always 'false'", Description = "Value of the expression can be determined at compile time", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConstantNullCoalescingConditionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConstantNullCoalescingConditionIssue.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConstantNullCoalescingConditionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConstantNullCoalescingConditionIssue.cs index f1e7deaff..ae8d1db99 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConstantNullCoalescingConditionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ConstantNullCoalescingConditionIssue.cs @@ -23,18 +23,11 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System; using System.Collections.Generic; -using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.Semantics; -using System.Linq; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.PatternMatching; -using System.Runtime.InteropServices.ComTypes; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'??' condition is known to be null or not null", Description = "Finds redundant null coalescing expressions such as expr ?? expr", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/DoubleNegationOperatorIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/DoubleNegationOperatorIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/DoubleNegationOperatorIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/DoubleNegationOperatorIssue.cs index 7e96cd7aa..434f94cc9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/DoubleNegationOperatorIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/DoubleNegationOperatorIssue.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Double negation operator", Description = "Double negation is meaningless.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/EmptyStatementIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/EmptyStatementIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/EmptyStatementIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/EmptyStatementIssue.cs index b7f8aff10..16587c4c4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/EmptyStatementIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/EmptyStatementIssue.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Empty statement is redundant", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ForStatementConditionIsTrueIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ForStatementConditionIsTrueIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ForStatementConditionIsTrueIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ForStatementConditionIsTrueIssue.cs index c3865b3dc..31b9a2f1e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/ForStatementConditionIsTrueIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/ForStatementConditionIsTrueIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("'true' is redundant as for statement condition", Description = "true is redundant as for statement condition, thus can be safely ommited", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAnonymousTypePropertyNameIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAnonymousTypePropertyNameIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAnonymousTypePropertyNameIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAnonymousTypePropertyNameIssue.cs index bddff9ce7..42446a2eb 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAnonymousTypePropertyNameIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAnonymousTypePropertyNameIssue.cs @@ -26,10 +26,10 @@ using System; using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Redundant anonymous type property name", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentDefaultValueIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentDefaultValueIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentDefaultValueIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentDefaultValueIssue.cs index c0269a76c..c87491293 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentDefaultValueIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentDefaultValueIssue.cs @@ -26,11 +26,13 @@ using System; using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Redundant argument with default value", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentNameIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentNameIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentNameIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentNameIssue.cs index 8d227eb99..611c14ee6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentNameIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantArgumentNameIssue.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant explicit argument name specification", Description= "Redundant explicit argument name specification", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs index deb6e6894..e9dca790a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantAttributeParenthesesIssue.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Parentheses are redundant if attribute has no arguments", Description = "Parentheses are redundant if attribute has no arguments.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBaseQualifierIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBaseQualifierIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBaseQualifierIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBaseQualifierIssue.cs index 5ea256a56..a0ef7eb63 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBaseQualifierIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBaseQualifierIssue.cs @@ -28,12 +28,12 @@ using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; using System.Linq; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Finds redundant base qualifier diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBoolCompareIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBoolCompareIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBoolCompareIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBoolCompareIssue.cs index 7540511e4..706936b64 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBoolCompareIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantBoolCompareIssue.cs @@ -26,11 +26,12 @@ using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Comparison of boolean with 'true' or 'false'", Description = "Comparison of a boolean value with 'true' or 'false' constant.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCaseLabelIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCaseLabelIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCaseLabelIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCaseLabelIssue.cs index 2d276507a..46c9920a9 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCaseLabelIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCaseLabelIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Redundant 'case' label", Description = "'case' label is redundant.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCastIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCastIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCastIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCastIssue.cs index 20fc31459..aa2f19a92 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCastIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCastIssue.cs @@ -29,10 +29,11 @@ using System.Linq; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant cast", Description = "Type cast can be safely removed.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCatchClauseIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCatchClauseIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCatchClauseIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCatchClauseIssue.cs index ff2b2b61d..9a94c950e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCatchClauseIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCatchClauseIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant catch clause", Description = "Catch clause with a single 'throw' statement is redundant.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCheckBeforeAssignmentIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCheckBeforeAssignmentIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCheckBeforeAssignmentIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCheckBeforeAssignmentIssue.cs index c0c395691..12d6786c0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCheckBeforeAssignmentIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCheckBeforeAssignmentIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant condition check before assignment", Description = "Check for inequality before assignment is redundant if (x != value) x = value;", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCommaInArrayInitializerIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCommaInArrayInitializerIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCommaInArrayInitializerIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCommaInArrayInitializerIssue.cs index 1f94bb024..5eb9d9527 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCommaInArrayInitializerIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantCommaInArrayInitializerIssue.cs @@ -26,7 +26,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Redundant comma in array initializer", Description = "Redundant comma in array initializer.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantComparisonWithNullIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantComparisonWithNullIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantComparisonWithNullIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantComparisonWithNullIssue.cs index b84461526..f889557f5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantComparisonWithNullIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantComparisonWithNullIssue.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant comparison with 'null'", Description = "When 'is' keyword is used, which implicitly check null.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantDelegateCreationIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantDelegateCreationIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantDelegateCreationIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantDelegateCreationIssue.cs index b92e92fb1..b3b952357 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantDelegateCreationIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantDelegateCreationIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ( "Explicit delegate creation expression is redundant", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyDefaultSwitchBranchIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyDefaultSwitchBranchIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyDefaultSwitchBranchIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyDefaultSwitchBranchIssue.cs index 6cd9d280e..031a512e4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyDefaultSwitchBranchIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyDefaultSwitchBranchIssue.cs @@ -26,7 +26,7 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Redundant empty 'default' switch branch", Description = "Redundant empty 'default' switch branch", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyFinallyBlockIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyFinallyBlockIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyFinallyBlockIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyFinallyBlockIssue.cs index b946b569c..66ebf4bad 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyFinallyBlockIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyFinallyBlockIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Redundant empty finally block", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyObjectCreationArgumentListssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyObjectCreationArgumentListssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyObjectCreationArgumentListssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyObjectCreationArgumentListssue.cs index a4224cbdf..f6d11c107 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyObjectCreationArgumentListssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEmptyObjectCreationArgumentListssue.cs @@ -26,7 +26,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Redundant empty argument list on object creation expression", Description = "When object creation uses object or collection initializer, empty argument list is redundant.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEnumerableCastCallIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEnumerableCastCallIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEnumerableCastCallIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEnumerableCastCallIssue.cs index 93e891f9d..18936a2e4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEnumerableCastCallIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantEnumerableCastCallIssue.cs @@ -25,11 +25,11 @@ // THE SOFTWARE. using System; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // OfType -> Underline (+suggest to compare to null) [IssueDescription ( diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArrayCreationIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArrayCreationIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArrayCreationIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArrayCreationIssue.cs index b86cedfe4..40ba2a7ec 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArrayCreationIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArrayCreationIssue.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Redundant explicit type in array creation", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArraySizeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArraySizeIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArraySizeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArraySizeIssue.cs index 898ec8385..5adc19a71 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArraySizeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitArraySizeIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Redundant explicit size in array creation", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitNullableCreationIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitNullableCreationIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitNullableCreationIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitNullableCreationIssue.cs index 470bc2bcb..4dd8b0142 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitNullableCreationIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExplicitNullableCreationIssue.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant explicit nullable type creation", Description= "Value types are implicitly convertible to nullables", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExtendsListEntryIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExtendsListEntryIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExtendsListEntryIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExtendsListEntryIssue.cs index abfaaa2bb..6a3e5657e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExtendsListEntryIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantExtendsListEntryIssue.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Type is either mentioned in the base type list of other part, or it is interface and appears as other's type base and contains no explicit implementation. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantIfElseBlockIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantIfElseBlockIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantIfElseBlockIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantIfElseBlockIssue.cs index c039a22c2..c51436539 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantIfElseBlockIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantIfElseBlockIssue.cs @@ -24,11 +24,11 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Analysis; using System.Linq; +using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant 'else' keyword", Description = "Redundant 'else' keyword.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaParameterTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaParameterTypeIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaParameterTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaParameterTypeIssue.cs index b5b69d002..7a0172631 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaParameterTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaParameterTypeIssue.cs @@ -30,11 +30,11 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant lambda explicit type specification", Description= "Explicit type specification can be removed as it can be implicitly inferred", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaSignatureParenthesesIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaSignatureParenthesesIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaSignatureParenthesesIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaSignatureParenthesesIssue.cs index 40aca23bb..5f1d49fb0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaSignatureParenthesesIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLambdaSignatureParenthesesIssue.cs @@ -27,11 +27,11 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant lambda signature parentheses", Description= "Redundant lambda signature parentheses", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLogicalConditionalExpressionOperandIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLogicalConditionalExpressionOperandIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLogicalConditionalExpressionOperandIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLogicalConditionalExpressionOperandIssue.cs index 3d2ae11d0..97499c65b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLogicalConditionalExpressionOperandIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantLogicalConditionalExpressionOperandIssue.cs @@ -27,12 +27,12 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant operand in logical conditional expression", Description= "Redundant operand in logical conditional expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantNameQualifierIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantNameQualifierIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantNameQualifierIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantNameQualifierIssue.cs index fd00aa0a5..0826915ba 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantNameQualifierIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantNameQualifierIssue.cs @@ -32,7 +32,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Finds redundant namespace usages. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantObjectOrCollectionInitializerIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantObjectOrCollectionInitializerIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantObjectOrCollectionInitializerIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantObjectOrCollectionInitializerIssue.cs index 82cc58bfd..d32660ad4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantObjectOrCollectionInitializerIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantObjectOrCollectionInitializerIssue.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant empty object or collection initializer", Description = "Redundant empty object or collection initializer.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantStringToCharArrayCallIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantStringToCharArrayCallIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantStringToCharArrayCallIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantStringToCharArrayCallIssue.cs index 1ef59e031..cee32476c 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantStringToCharArrayCallIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantStringToCharArrayCallIssue.cs @@ -30,7 +30,7 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant 'string.ToCharArray()' call", Description = "Redundant 'string.ToCharArray()' call", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantTernaryExpressionIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantTernaryExpressionIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantTernaryExpressionIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantTernaryExpressionIssue.cs index c8131f4e4..4338227f4 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantTernaryExpressionIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantTernaryExpressionIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant conditional expression", Description = "Redundant conditional expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantThisQualifierIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantThisQualifierIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantThisQualifierIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantThisQualifierIssue.cs index f712889e2..28610efea 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantThisQualifierIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantThisQualifierIssue.cs @@ -29,14 +29,13 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Refactoring; -using System.Diagnostics; -using ICSharpCode.NRefactory.Utils; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Finds redundant this usages. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallForValueTypesIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallForValueTypesIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallForValueTypesIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallForValueTypesIssue.cs index 5c3b74d4f..462f5a08a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallForValueTypesIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallForValueTypesIssue.cs @@ -26,13 +26,14 @@ using System; using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using System.Linq; using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring + +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant 'object.ToString()' call for value types", Description = "Finds value type calls to ToString() which would be generated automatically by the compiler.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallIssue.cs index 75ed144fc..270e4ac88 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantToStringCallIssue.cs @@ -26,13 +26,13 @@ using System; using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using System.Linq; using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant 'object.ToString()' call", Description = "Finds calls to ToString() which would be generated automatically by the compiler.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUnsafeContextIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUnsafeContextIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUnsafeContextIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUnsafeContextIssue.cs index b9c6362c6..cedbc03af 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUnsafeContextIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUnsafeContextIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Redundant 'unsafe' modifier", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUsingDirectiveIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUsingDirectiveIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUsingDirectiveIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUsingDirectiveIssue.cs index 1200344f1..94d95be45 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUsingDirectiveIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RedundantUsingDirectiveIssue.cs @@ -29,11 +29,11 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// Finds redundant using declarations. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RemoveRedundantOrStatementIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RemoveRedundantOrStatementIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RemoveRedundantOrStatementIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RemoveRedundantOrStatementIssue.cs index 349c39031..64af5e878 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/RemoveRedundantOrStatementIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/RemoveRedundantOrStatementIssue.cs @@ -29,7 +29,7 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Remove redundant statement", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/UnusedAnonymousMethodSignatureIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/UnusedAnonymousMethodSignatureIssue.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/UnusedAnonymousMethodSignatureIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/UnusedAnonymousMethodSignatureIssue.cs index 5bb8dbc99..bd3dfa8ed 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInCode/UnusedAnonymousMethodSignatureIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInCode/UnusedAnonymousMethodSignatureIssue.cs @@ -28,12 +28,12 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; using System.Linq; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.PlayScript.Refactoring.ExtractMethod; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Anonymous method signature is not required", Description = "Detects when no delegate parameter is used in the anonymous method body.", @@ -73,7 +73,7 @@ public override void VisitAnonymousMethodExpression(AnonymousMethodExpression an var rr = ctx.Resolve(parameter) as LocalResolveResult; if (rr == null) continue; - if (usageAnalysis.GetStatus(rr.Variable) != ICSharpCode.NRefactory.CSharp.Refactoring.ExtractMethod.VariableState.None) + if (usageAnalysis.GetStatus(rr.Variable) != VariableState.None) return; } } diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyConstructorIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyConstructorIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyConstructorIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyConstructorIssue.cs index cdcb8c125..d9f3101a1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyConstructorIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyConstructorIssue.cs @@ -27,7 +27,7 @@ using System.Linq; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Empty constructor", Description = "An empty public constructor without paramaters is redundant.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyDestructorIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyDestructorIssue.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyDestructorIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyDestructorIssue.cs index 0a898a2eb..6918592e6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyDestructorIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyDestructorIssue.cs @@ -22,14 +22,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Empty destructor", Description = "Empty destructor is redundant", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyNamespaceIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyNamespaceIssue.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyNamespaceIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyNamespaceIssue.cs index 2c4955145..f602af2a2 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyNamespaceIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EmptyNamespaceIssue.cs @@ -22,13 +22,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; -using System.Linq; -using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Empty namespace declaration", Description = "Empty namespace declaration is redundant", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EnumUnderlyingTypeIsIntIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EnumUnderlyingTypeIsIntIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EnumUnderlyingTypeIsIntIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EnumUnderlyingTypeIsIntIssue.cs index 020b7ad6d..42dfeefb5 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EnumUnderlyingTypeIsIntIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/EnumUnderlyingTypeIsIntIssue.cs @@ -26,9 +26,9 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Underlying type of enum is int", Description = "The default underlying type of enums is int, so defining it explicitly is redundant.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/LocalVariableNotUsedIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/LocalVariableNotUsedIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/LocalVariableNotUsedIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/LocalVariableNotUsedIssue.cs index c684ed5c0..b2c2f66cd 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/LocalVariableNotUsedIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/LocalVariableNotUsedIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Unused local variable", Description = "Local variable is never used.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/PartialTypeWithSinglePartIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/PartialTypeWithSinglePartIssue.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/PartialTypeWithSinglePartIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/PartialTypeWithSinglePartIssue.cs index c40620eac..b161ed316 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/PartialTypeWithSinglePartIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/PartialTypeWithSinglePartIssue.cs @@ -26,12 +26,9 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.MonoCSharp; using ICSharpCode.NRefactory.Semantics; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Redundant 'partial' modifier in type declaration", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantBaseConstructorCallIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantBaseConstructorCallIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantBaseConstructorCallIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantBaseConstructorCallIssue.cs index 30ec0fc24..51de7dae7 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantBaseConstructorCallIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantBaseConstructorCallIssue.cs @@ -26,7 +26,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant base constructor call", Description = "This is generated by the compiler and can be safely removed.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantDefaultFieldInitializerIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantDefaultFieldInitializerIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantDefaultFieldInitializerIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantDefaultFieldInitializerIssue.cs index 96d585667..8619240ba 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantDefaultFieldInitializerIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantDefaultFieldInitializerIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Redundant field initializer", Description = "Initializing field with default value is redundant.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantOverridenMemberIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantOverridenMemberIssue.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantOverridenMemberIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantOverridenMemberIssue.cs index 88c32c9b5..18a29d63d 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantOverridenMemberIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantOverridenMemberIssue.cs @@ -30,9 +30,9 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; using System.Runtime.InteropServices; -using ICSharpCode.NRefactory.MonoCSharp; +using ICSharpCode.NRefactory.MonoPlayScript; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription ("Redundant member override", Description = "The override of a virtual member is redundant because it consists of only a call to the base", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantParamsIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantParamsIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantParamsIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantParamsIssue.cs index a30df3594..ee3bb91fe 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantParamsIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/RedundantParamsIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Refactoring; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("'params' is ignored on overrides", Description = "'params' is ignored on overrides", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/SealedMemberInSealedClassIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/SealedMemberInSealedClassIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/SealedMemberInSealedClassIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/SealedMemberInSealedClassIssue.cs index 2e94d42a5..3c8ec9b1e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/SealedMemberInSealedClassIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/SealedMemberInSealedClassIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Sealed member in sealed class", Description = "'sealed' modifier is redundant in sealed classes", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedLabelIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedLabelIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedLabelIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedLabelIssue.cs index 504e0962f..58e2971c8 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedLabelIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedLabelIssue.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription( "Unused label", @@ -52,7 +52,7 @@ public GatherVisitor(BaseRefactoringContext ctx) class LabelDescriptor { - public List LabelStatement = new List(); + public List LabelStatement = new List(); public bool IsUsed; public LabelDescriptor(LabelStatement labelStatement) diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedParameterIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedParameterIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedParameterIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedParameterIssue.cs index affe5d704..c83d14133 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedParameterIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedParameterIssue.cs @@ -28,11 +28,11 @@ using System.Linq; using ICSharpCode.NRefactory.TypeSystem; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Unused parameter", Description = "Parameter is never used.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedTypeParameterIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedTypeParameterIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedTypeParameterIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedTypeParameterIssue.cs index 3b3ccff2e..46fb8e7b3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedTypeParameterIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Synced/RedundanciesInDeclaration/UnusedTypeParameterIssue.cs @@ -27,12 +27,12 @@ using System; using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { [IssueDescription("Unused type parameter", Description = "Type parameter is never used.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/ConvertTailRecursiveCallToLoopIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/ConvertTailRecursiveCallToLoopIssue.cs similarity index 89% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/ConvertTailRecursiveCallToLoopIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/ConvertTailRecursiveCallToLoopIssue.cs index e58f970ff..d431137e3 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/ConvertTailRecursiveCallToLoopIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/ConvertTailRecursiveCallToLoopIssue.cs @@ -23,13 +23,8 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; -using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.Refactoring; -using System.Linq; -using ICSharpCode.NRefactory.CSharp.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription ("Tail recursive call may be replaced by loop", // Description = "Tail recursive calls should be avoided.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/LoopCanBeConvertedToQueryIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/LoopCanBeConvertedToQueryIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/LoopCanBeConvertedToQueryIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/LoopCanBeConvertedToQueryIssue.cs index 4bdc18e91..c3b857eee 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/LoopCanBeConvertedToQueryIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/LoopCanBeConvertedToQueryIssue.cs @@ -26,7 +26,7 @@ using System; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription ("Loop can be converted into LINQ expression", // Description = "Loop can be converted into LINQ expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/PartOfBodyCanBeConvertedToQueryIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/PartOfBodyCanBeConvertedToQueryIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/PartOfBodyCanBeConvertedToQueryIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/PartOfBodyCanBeConvertedToQueryIssue.cs index 50195115c..89edd7d6e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/PartOfBodyCanBeConvertedToQueryIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/PartOfBodyCanBeConvertedToQueryIssue.cs @@ -26,7 +26,7 @@ using System; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription ("Part of the loop body can be converted into LINQ expression", // Description = "Part of the loop body can be converted into LINQ expression", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/RedundantTypeArgumentsOfMethodIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/RedundantTypeArgumentsOfMethodIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/RedundantTypeArgumentsOfMethodIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/RedundantTypeArgumentsOfMethodIssue.cs index 03aaadf04..3303a364b 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/TODO/RedundantTypeArgumentsOfMethodIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/TODO/RedundantTypeArgumentsOfMethodIssue.cs @@ -26,7 +26,7 @@ using System; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription ("Redundant type arguments in method call", // Description = "Explicit specifiction is redundant because they are inferred from arguments", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs index c7b91edf2..b99942761 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/AutoAsyncIssue.cs @@ -26,18 +26,13 @@ using System; using System.Linq; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Analysis; using ICSharpCode.NRefactory.PatternMatching; - -using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.Refactoring; - +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Old-style asynchronous function can be converted to C# 5 async", // Description = "Detects usage of old-style TaskCompletionSource/ContinueWith and suggests using async/await instead", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs index 69dd07640..c4ab507eb 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DisposeMethodInNonIDisposableTypeIssue.cs @@ -28,9 +28,9 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Type does not implement IDisposable despite having a Dispose method", // Description="This type declares a method named Dispose, but it does not implement the System.IDisposable interface", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs index 5c5354377..4e68b2354 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DontUseLinqWhenItsVerboseAndInefficientIssue.cs @@ -25,12 +25,13 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Use of Linq methods when there's a better alternative", // Description="Detects usage of Linq when there's a simpler and faster alternative", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs index 507700430..80ed24bf6 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/DuplicatedLinqToListOrArrayIssue.cs @@ -24,17 +24,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -using System.Collections.Generic; -using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp; -using ICSharpCode.NRefactory.CSharp.Refactoring; using ICSharpCode.NRefactory.PatternMatching; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription ("Duplicated ToList() or ToArray() call", // Description = "Duplicated call to ToList() or ToArray()", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs index 7f0e69be9..95dc595bc 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ExceptionRethrowIssue.cs @@ -29,7 +29,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("A throw statement throws the caught exception by passing it explicitly", // Description = "Finds throws that throws the caught exception and therefore should be empty.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs index 9e8f44908..8923d9255 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ExplicitConversionInForEachIssue.cs @@ -18,12 +18,13 @@ using System; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Refactoring + +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Incorrect element type in foreach over generic collection", // Description= "Detects hidden explicit conversions in foreach loops.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs index e29898798..0f8f6a39f 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/IncorrectCallToObjectGetHashCodeIssue.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Call resolves to Object.GetHashCode, which is reference based", // Description = "Finds calls to Object.GetHashCode inside overridden GetHashCode.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs index caa9992d1..89d21db6e 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/RedundantBlockInDifferentBranchesIssue.cs @@ -27,7 +27,7 @@ using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("RedundantBlockInDifferentBranches", // Description = "Blocks in if/else can be simplified to any of the branches if they have the same block.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs index 56653b847..a73d14f44 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/RedundantNotNullAttributeInNonNullableTypeIssue.cs @@ -30,8 +30,10 @@ using ICSharpCode.NRefactory.Refactoring; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring + +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Use of NotNullAttribute in non-nullable type is redundant.", // Description = "Detects unnecessary usages of the NotNullAttribute.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs index 97b678e32..e8d22e74a 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/ResultOfAsyncCallShouldNotBeIgnoredIssue.cs @@ -22,7 +22,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Result of async call is ignored", // Description = "Warns when the task returned by an async call is ignored, which causes exceptions" + diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs index 5b8f77193..a9214c758 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/SameGuardConditionExpressionInIfelseBranchesIssue.cs @@ -23,12 +23,12 @@ // THE SOFTWARE. using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Refactoring; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Same guard condition expression in different if else branch", // Description = "A warning should be given for the case: if (condition) {…} else if (condition) {…}.", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs index 3a42ea4e7..7ceb52591 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/UnmatchedSizeSpecificationInArrayCreationIssue.cs @@ -28,7 +28,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// When array initializer has the different number of elements as specified in size creation, it is an error. diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs index 905f76126..615a057a1 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/CodeIssues/Uncategorized/UseOfMemberOfNullReference.cs @@ -27,12 +27,10 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using System.Linq; -using ICSharpCode.NRefactory.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.Analysis; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { // [IssueDescription("Use of (non-extension method) member of null value will cause a NullReferenceException", // Description = "Detects when a member of a null value is used", diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/ICSharpCode.NRefactory.CSharp.Refactoring.csproj b/ICSharpCode.NRefactory.PlayScript.Refactoring/ICSharpCode.NRefactory.PlayScript.Refactoring.csproj similarity index 94% rename from ICSharpCode.NRefactory.CSharp.Refactoring/ICSharpCode.NRefactory.CSharp.Refactoring.csproj rename to ICSharpCode.NRefactory.PlayScript.Refactoring/ICSharpCode.NRefactory.PlayScript.Refactoring.csproj index 02e165f0c..a1dc2ebe0 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/ICSharpCode.NRefactory.CSharp.Refactoring.csproj +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/ICSharpCode.NRefactory.PlayScript.Refactoring.csproj @@ -3,19 +3,18 @@ Debug AnyCPU - 8.0.30703 - 2.0 - {2A705FC6-1A9E-4941-9E47-254D79F2D9D5} + {D9654D35-F86C-4105-B4E6-FAA656487BF8} Library - ICSharpCode.NRefactory.CSharp.Refactoring - ICSharpCode.NRefactory.CSharp.Refactoring - true + ICSharpCode.NRefactory.PlayScript.Refactoring + ICSharpCode.NRefactory.PlayScript.Refactoring + false ..\ICSharpCode.NRefactory.snk False File ..\bin\$(Configuration)\ICSharpCode.NRefactory.CSharp.Refactoring.xml 1591,1587,1570 ..\bin\$(Configuration)\ + v4.5 AnyCPU @@ -34,50 +33,61 @@ False TRACE;FULL_AST;NET_4_0 - - none - True - ..\bin\Release\ - 4 - - - full - True - True - ..\bin\Debug\ - 4 - False False DEBUG;TRACE;FULL_AST;NET_4_0;NET_4_5 v4.5 - - full - True - True - v4.5 - ..\bin\net_4_5_Debug\ - 4 - True False TRACE;FULL_AST;NET_4_0;NET_4_5 v4.5 - + + true + full + ..\bin\Debug\ + DEBUG;TRACE;FULL_AST;NET_4_0;NET_4_5 + 4 + true + + none - True - v4.5 - ..\bin\net_4_5_Release\ + ..\bin\Release\ + TRACE;FULL_AST;NET_4_0;NET_4_5 + 4 + true + + + 4 + + 4 + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Cecil.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.Refactoring.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.IKVM.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Xml.dll + @@ -433,23 +443,6 @@ - - - {53DCA265-3C3C-42F9-B647-F72BA678122B} - ICSharpCode.NRefactory.CSharp - False - - - {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6} - ICSharpCode.NRefactory.Xml - False - - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory - False - - @@ -463,4 +456,14 @@ + + + {0D8EC1C8-9706-4D8B-96F2-8636F2C9F894} + ICSharpCode.NRefactory.PlayScript + + + {B1AF7070-8E25-4117-A441-14684219F4FD} + ICSharpCode.NRefactory.PlayScript.Xml + + diff --git a/ICSharpCode.NRefactory.CSharp.Refactoring/Properties/AssemblyInfo.cs b/ICSharpCode.NRefactory.PlayScript.Refactoring/Properties/AssemblyInfo.cs similarity index 90% rename from ICSharpCode.NRefactory.CSharp.Refactoring/Properties/AssemblyInfo.cs rename to ICSharpCode.NRefactory.PlayScript.Refactoring/Properties/AssemblyInfo.cs index 0f7e2c115..3cfc94b53 100644 --- a/ICSharpCode.NRefactory.CSharp.Refactoring/Properties/AssemblyInfo.cs +++ b/ICSharpCode.NRefactory.PlayScript.Refactoring/Properties/AssemblyInfo.cs @@ -26,5 +26,5 @@ using System.Reflection; using System.Runtime.CompilerServices; -[assembly: AssemblyTitle ("ICSharpCode.NRefactory.CSharp.Refactoring")] -[assembly: AssemblyDescription("C# refactorings")] +[assembly: AssemblyTitle ("ICSharpCode.NRefactory.PlayScript.Refactoring")] +[assembly: AssemblyDescription("PlayScript refactorings")] diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/AnnotationNames.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/AnnotationNames.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Analysis/AnnotationNames.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/AnnotationNames.cs index 94d19e4b6..6bf8ea6e6 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/AnnotationNames.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/AnnotationNames.cs @@ -26,7 +26,7 @@ using System; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript.Analysis { public static class AnnotationNames { diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/ControlFlow.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/ControlFlow.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Analysis/ControlFlow.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/ControlFlow.cs index 2d3895b1e..9da0503a5 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/ControlFlow.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/ControlFlow.cs @@ -21,14 +21,14 @@ using System.Diagnostics; using System.Linq; using System.Threading; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; -using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Utils; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { /// /// Represents a node in the control flow graph of a C# method. @@ -39,7 +39,7 @@ public class ControlFlowNode public readonly Statement NextStatement; public readonly ControlFlowNodeType Type; - + public readonly List Outgoing = new List(); public readonly List Incoming = new List(); diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/DeclarationSpace/LocalDeclarationSpace.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/DeclarationSpace/LocalDeclarationSpace.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Analysis/DeclarationSpace/LocalDeclarationSpace.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/DeclarationSpace/LocalDeclarationSpace.cs index a412cba3a..32541568e 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/DeclarationSpace/LocalDeclarationSpace.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/DeclarationSpace/LocalDeclarationSpace.cs @@ -28,7 +28,7 @@ using System.Linq; using System; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { /// /// Represents a declaration space. (§3.3) diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/DeclarationSpace/LocalDeclarationSpaceVisitor.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/DeclarationSpace/LocalDeclarationSpaceVisitor.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Analysis/DeclarationSpace/LocalDeclarationSpaceVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/DeclarationSpace/LocalDeclarationSpaceVisitor.cs index 08389a413..4d44cecd8 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/DeclarationSpace/LocalDeclarationSpaceVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/DeclarationSpace/LocalDeclarationSpaceVisitor.cs @@ -26,7 +26,7 @@ using System; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { public class LocalDeclarationSpaceVisitor : DepthFirstAstVisitor { diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/DefiniteAssignmentAnalysis.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/DefiniteAssignmentAnalysis.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Analysis/DefiniteAssignmentAnalysis.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/DefiniteAssignmentAnalysis.cs index 9b33e74a7..8343bfcee 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/DefiniteAssignmentAnalysis.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/DefiniteAssignmentAnalysis.cs @@ -22,13 +22,13 @@ using System.Linq; using System.Threading; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Utils; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { /// /// Represents the definite assignment status of a variable at a specific location. diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/NullValueAnalysis.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/NullValueAnalysis.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Analysis/NullValueAnalysis.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/NullValueAnalysis.cs index a20b4a0f0..9592bc372 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/NullValueAnalysis.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/NullValueAnalysis.cs @@ -31,15 +31,15 @@ using System.Linq; using System.Threading; using System.Text; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Refactoring; using ICSharpCode.NRefactory.PatternMatching; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using ICSharpCode.NRefactory.Utils; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { public class NullValueAnalysis { diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/NullValueStatus.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/NullValueStatus.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Analysis/NullValueStatus.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/NullValueStatus.cs index f6816dfd5..650bb0957 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/NullValueStatus.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/NullValueStatus.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { /// /// Represents the null value status of a variable at a specific location. diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/ReachabilityAnalysis.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/ReachabilityAnalysis.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Analysis/ReachabilityAnalysis.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/ReachabilityAnalysis.cs index ce64f5f3b..51f2e8301 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/ReachabilityAnalysis.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/ReachabilityAnalysis.cs @@ -20,12 +20,13 @@ using System.Collections.Generic; using System.Linq; using System.Threading; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { /// /// Statement reachability analysis. diff --git a/ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs b/ICSharpCode.NRefactory.PlayScript/Analysis/SemanticHighlightingVisitor.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/Analysis/SemanticHighlightingVisitor.cs index 3bb0e1e83..a5a4d36d4 100644 --- a/ICSharpCode.NRefactory.CSharp/Analysis/SemanticHighlightingVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/Analysis/SemanticHighlightingVisitor.cs @@ -20,14 +20,17 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using System.Threading; -using ICSharpCode.NRefactory.CSharp.Completion; +using ICSharpCode.NRefactory.Completion; using System.Collections.ObjectModel; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PlayScript.Refactoring; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp.Analysis +namespace ICSharpCode.NRefactory.PlayScript.Analysis { /// /// C# Semantic highlighter. @@ -650,7 +653,7 @@ public override void VisitPreProcessorDirective(PreProcessorDirective preProcess { } - public override void VisitAttribute(ICSharpCode.NRefactory.CSharp.Attribute attribute) + public override void VisitAttribute(ICSharpCode.NRefactory.PlayScript.Attribute attribute) { ITypeDefinition attrDef = resolver.Resolve(attribute.Type, cancellationToken).Type.GetDefinition(); if (attrDef != null && IsInactiveConditional(attrDef.Attributes)) { diff --git a/ICSharpCode.NRefactory.CSharp/Ast/AstNode.cs b/ICSharpCode.NRefactory.PlayScript/Ast/AstNode.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/AstNode.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/AstNode.cs index 8676beb67..986c4d448 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/AstNode.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/AstNode.cs @@ -31,11 +31,17 @@ using System.IO; using System.Linq; using System.Threading; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PatternMatching; + +using INode = ICSharpCode.NRefactory.PatternMatching.INode; + +namespace ICSharpCode.NRefactory.PlayScript -namespace ICSharpCode.NRefactory.CSharp { - public abstract class AstNode : AbstractAnnotatable, ICSharpCode.NRefactory.TypeSystem.IFreezable, PatternMatching.INode, ICloneable + + public abstract class AstNode : AbstractAnnotatable, ICSharpCode.NRefactory.TypeSystem.IFreezable, INode, ICloneable { // the Root role must be available when creating the null nodes, so we can't put it in the Roles class internal static readonly Role RootRole = new Role ("Root"); @@ -72,7 +78,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch (AstNode other, Match match) { return other == null || other.IsNull; } @@ -80,16 +86,16 @@ protected internal override bool DoMatch (AstNode other, PatternMatching.Match m #endregion #region PatternPlaceholder - public static implicit operator AstNode (PatternMatching.Pattern pattern) + public static implicit operator AstNode (Pattern pattern) { return pattern != null ? new PatternPlaceholder (pattern) : null; } - sealed class PatternPlaceholder : AstNode, PatternMatching.INode + sealed class PatternPlaceholder : AstNode, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder (PatternMatching.Pattern child) + public PatternPlaceholder (Pattern child) { this.child = child; } @@ -113,12 +119,12 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder (this, child, data); } - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch (AstNode other, Match match) { return child.DoMatch (other, match); } - bool PatternMatching.INode.DoMatchCollection (Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection (Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection (role, pos, match, backtrackingInfo); } @@ -649,34 +655,78 @@ object ICloneable.Clone() #region Pattern Matching protected static bool MatchString (string pattern, string text) { - return PatternMatching.Pattern.MatchString(pattern, text); + return Pattern.MatchString(pattern, text); } - protected internal abstract bool DoMatch (AstNode other, PatternMatching.Match match); + protected internal abstract bool DoMatch (AstNode other, Match match); - bool PatternMatching.INode.DoMatch (PatternMatching.INode other, PatternMatching.Match match) + bool INode.DoMatch (INode other, Match match) { AstNode o = other as AstNode; // try matching if other is null, or if other is an AstNode return (other == null || o != null) && DoMatch (o, match); } - bool PatternMatching.INode.DoMatchCollection (Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection (Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { AstNode o = pos as AstNode; return (pos == null || o != null) && DoMatch (o, match); } - PatternMatching.INode PatternMatching.INode.NextSibling { + INode INode.NextSibling { get { return nextSibling; } } - PatternMatching.INode PatternMatching.INode.FirstChild { + INode INode.FirstChild { get { return firstChild; } } #endregion - + + + // For PlayScript, we want to fix out of order nodes, as the current parser puts the nodes in C# order, and PlayScript's + // nodes typically don't go in the same order. We need to fix the parser, but for the time being this actually puts the + // nodes in the right order so that the GetNodeAt() methods can actually find the right node. + private static List _sortList = new List(); + public void FixOutOfOrderLocations() + { + // Get list of nodes + _sortList.Clear(); + var node = firstChild; + while (node != null) { + _sortList.Add(node); + node = node.nextSibling; + } + + // Resort list by start location (assuming some of them might be out of order due to incorrect placement in PlayScript). + if (_sortList.Count > 0) { + _sortList.Sort((a,b) => a.StartLocation.CompareTo(b.StartLocation)); + for (var i = 0; i < _sortList.Count; i++) { + if (i == 0) { + firstChild = _sortList[i]; + _sortList[i].prevSibling = null; + } else { + _sortList[i - 1].nextSibling = _sortList[i]; + _sortList[i].prevSibling = _sortList[i - 1]; + } + if (i == _sortList.Count - 1) { + lastChild = _sortList[i]; + _sortList[i].nextSibling = null; + } else { + _sortList[i].nextSibling = _sortList[i + 1]; + _sortList[i + 1].prevSibling = _sortList[i]; + } + } + } + + // Fix all children nodes + node = firstChild; + while (node != null) { + node.FixOutOfOrderLocations(); + node = node.nextSibling; + } + } + public AstNode GetNextNode () { if (NextSibling != null) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/AstNodeCollection.cs b/ICSharpCode.NRefactory.PlayScript/Ast/AstNodeCollection.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Ast/AstNodeCollection.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/AstNodeCollection.cs index 32d08b2e4..77b8b1170 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/AstNodeCollection.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/AstNodeCollection.cs @@ -22,9 +22,12 @@ using System.Diagnostics; using System.Linq; using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory; + +namespace ICSharpCode.NRefactory.PlayScript -namespace ICSharpCode.NRefactory.CSharp { + /// /// Represents the children of an AstNode that have a specific role. /// diff --git a/ICSharpCode.NRefactory.CSharp/Ast/AstType.cs b/ICSharpCode.NRefactory.PlayScript/Ast/AstType.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/AstType.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/AstType.cs index 2f13f0fdd..9e74e2814 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/AstType.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/AstType.cs @@ -18,11 +18,15 @@ using System; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory; + +namespace ICSharpCode.NRefactory.PlayScript -namespace ICSharpCode.NRefactory.CSharp { + /// /// A type reference in the C# AST. /// @@ -54,7 +58,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -67,16 +71,16 @@ public override ITypeReference ToTypeReference(NameLookupMode lookupMode, Intern #endregion #region PatternPlaceholder - public static implicit operator AstType(PatternMatching.Pattern pattern) + public static implicit operator AstType(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : AstType, PatternMatching.INode + sealed class PatternPlaceholder : AstType, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -105,12 +109,12 @@ public override ITypeReference ToTypeReference(NameLookupMode lookupMode, Intern throw new NotSupportedException(); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/CSharpModifierToken.cs b/ICSharpCode.NRefactory.PlayScript/Ast/CSharpModifierToken.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Ast/CSharpModifierToken.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/CSharpModifierToken.cs index 1a46006f2..2081dd3a8 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/CSharpModifierToken.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/CSharpModifierToken.cs @@ -26,9 +26,13 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript -namespace ICSharpCode.NRefactory.CSharp { + public class CSharpModifierToken : CSharpTokenNode { Modifiers modifier; @@ -52,7 +56,7 @@ public override string ToString(CSharpFormattingOptions formattingOptions) return GetModifierName (Modifier); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CSharpModifierToken o = other as CSharpModifierToken; return o != null && this.modifier == o.modifier; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/CSharpTokenNode.cs b/ICSharpCode.NRefactory.PlayScript/Ast/CSharpTokenNode.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/CSharpTokenNode.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/CSharpTokenNode.cs index 713f664b3..f85ddd753 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/CSharpTokenNode.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/CSharpTokenNode.cs @@ -24,9 +24,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + /// /// Represents a token in C#. Note that the type of the token is defined through the TokenRole. /// @@ -63,7 +66,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -121,7 +124,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitCSharpTokenNode (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CSharpTokenNode o = other as CSharpTokenNode; return o != null && !o.IsNull && !(o is CSharpModifierToken); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/CSharpUtil.cs b/ICSharpCode.NRefactory.PlayScript/Ast/CSharpUtil.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Ast/CSharpUtil.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/CSharpUtil.cs index a2a07ad6e..8bb3ff9a9 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/CSharpUtil.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/CSharpUtil.cs @@ -24,11 +24,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + public static class CSharpUtil { /// diff --git a/ICSharpCode.NRefactory.CSharp/Ast/ComposedType.cs b/ICSharpCode.NRefactory.PlayScript/Ast/ComposedType.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/ComposedType.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/ComposedType.cs index 0c0f96c62..61788d812 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/ComposedType.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/ComposedType.cs @@ -27,10 +27,13 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + public class ComposedType : AstType { public static readonly TokenRole NullableRole = new TokenRole("?"); @@ -99,7 +102,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitComposedType (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ComposedType o = other as ComposedType; return o != null && this.HasNullableSpecifier == o.HasNullableSpecifier && this.PointerRank == o.PointerRank @@ -215,7 +218,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitArraySpecifier(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ArraySpecifier o = other as ArraySpecifier; return o != null && this.Dimensions == o.Dimensions; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs b/ICSharpCode.NRefactory.PlayScript/Ast/DepthFirstAstVisitor.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/DepthFirstAstVisitor.cs index d8c678e2b..30a5ef413 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/DepthFirstAstVisitor.cs @@ -25,9 +25,11 @@ // THE SOFTWARE. using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + /// /// AST visitor with a default implementation that visits all node depth-first. /// @@ -627,7 +629,7 @@ public virtual void VisitErrorNode(AstNode errorNode) VisitChildren(errorNode); } - public virtual void VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern) + public virtual void VisitPatternPlaceholder(AstNode placeholder, Pattern pattern) { VisitChildren (placeholder); } @@ -1234,7 +1236,7 @@ public virtual T VisitErrorNode(AstNode errorNode) return VisitChildren(errorNode); } - public virtual T VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern) + public virtual T VisitPatternPlaceholder(AstNode placeholder, Pattern pattern) { return VisitChildren (placeholder); } @@ -1841,7 +1843,7 @@ public virtual S VisitErrorNode(AstNode errorNode, T data) return VisitChildren(errorNode, data); } - public virtual S VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern, T data) + public virtual S VisitPatternPlaceholder(AstNode placeholder, Pattern pattern, T data) { return VisitChildren (placeholder, data); } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/DocumentationReference.cs b/ICSharpCode.NRefactory.PlayScript/Ast/DocumentationReference.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Ast/DocumentationReference.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/DocumentationReference.cs index 633f921b2..7e7be2e6b 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/DocumentationReference.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/DocumentationReference.cs @@ -18,9 +18,14 @@ using System; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; + +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript -namespace ICSharpCode.NRefactory.CSharp { + /// /// Represents a 'cref' reference in XML documentation. /// diff --git a/ICSharpCode.NRefactory.CSharp/Ast/ErrorNode.cs b/ICSharpCode.NRefactory.PlayScript/Ast/ErrorNode.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/ErrorNode.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/ErrorNode.cs index 36d9ef6e0..6110d683b 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/ErrorNode.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/ErrorNode.cs @@ -24,9 +24,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript -namespace ICSharpCode.NRefactory.CSharp { + /// /// Represents a parsing error in the ast. At the moment it only represents missing closing bracket. /// This closing bracket is replaced by a node at the highest possible position. @@ -73,7 +77,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitErrorNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { var o = other as ErrorNode; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousMethodExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AnonymousMethodExpression.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousMethodExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AnonymousMethodExpression.cs index e8de95431..e0781efe2 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousMethodExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AnonymousMethodExpression.cs @@ -26,8 +26,9 @@ using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// [async] delegate(Parameters) {Body} @@ -107,7 +108,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitAnonymousMethodExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { AnonymousMethodExpression o = other as AnonymousMethodExpression; return o != null && this.IsAsync == o.IsAsync && this.HasParameterList == o.HasParameterList diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousTypeCreateExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AnonymousTypeCreateExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousTypeCreateExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AnonymousTypeCreateExpression.cs index 944bf61f5..f650aef50 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousTypeCreateExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AnonymousTypeCreateExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System; using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// new { [ExpressionList] } @@ -81,7 +82,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitAnonymousTypeCreateExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { var o = other as AnonymousTypeCreateExpression; return o != null && this.Initializers.DoMatch(o.Initializers, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ArrayCreateExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ArrayCreateExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/ArrayCreateExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ArrayCreateExpression.cs index 3720a3fc8..44188f923 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ArrayCreateExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ArrayCreateExpression.cs @@ -18,8 +18,10 @@ using System; using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// new Type[Dimensions] @@ -71,7 +73,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitArrayCreateExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ArrayCreateExpression o = other as ArrayCreateExpression; return o != null && this.Type.DoMatch(o.Type, match) && this.Arguments.DoMatch(o.Arguments, match) && this.AdditionalArraySpecifiers.DoMatch(o.AdditionalArraySpecifiers, match) && this.Initializer.DoMatch(o.Initializer, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ArrayInitializerExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ArrayInitializerExpression.cs similarity index 88% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/ArrayInitializerExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ArrayInitializerExpression.cs index fa3246f92..0b8c6e475 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ArrayInitializerExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ArrayInitializerExpression.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// { Elements } @@ -85,7 +87,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -119,7 +121,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitArrayInitializerExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ArrayInitializerExpression o = other as ArrayInitializerExpression; return o != null && this.Elements.DoMatch(o.Elements, match); @@ -143,16 +145,16 @@ public override bool IsSingleElement { } #region PatternPlaceholder - public static implicit operator ArrayInitializerExpression(PatternMatching.Pattern pattern) + public static implicit operator ArrayInitializerExpression(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : ArrayInitializerExpression, PatternMatching.INode + sealed class PatternPlaceholder : ArrayInitializerExpression, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -176,12 +178,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AsExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AsExpression.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/AsExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AsExpression.cs index 5a7b5ac5d..8540f87ce 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AsExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AsExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Expression as TypeReference @@ -74,7 +75,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitAsExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { AsExpression o = other as AsExpression; return o != null && this.Expression.DoMatch(o.Expression, match) && this.Type.DoMatch(o.Type, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AssignmentExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AssignmentExpression.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/AssignmentExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AssignmentExpression.cs index 95d0cdf28..ed45fa7c9 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/AssignmentExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/AssignmentExpression.cs @@ -27,8 +27,10 @@ using System; using System.Linq.Expressions; using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Left Operator= Right @@ -102,7 +104,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitAssignmentExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { AssignmentExpression o = other as AssignmentExpression; return o != null && (this.Operator == AssignmentOperatorType.Any || this.Operator == o.Operator) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/BaseReferenceExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/BaseReferenceExpression.cs similarity index 91% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/BaseReferenceExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/BaseReferenceExpression.cs index 399c36c22..a6cc19ab6 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/BaseReferenceExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/BaseReferenceExpression.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// base @@ -62,7 +64,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitBaseReferenceExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { BaseReferenceExpression o = other as BaseReferenceExpression; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/BinaryOperatorExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/BinaryOperatorExpression.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/BinaryOperatorExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/BinaryOperatorExpression.cs index e4408e184..f96ff1da0 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/BinaryOperatorExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/BinaryOperatorExpression.cs @@ -27,8 +27,11 @@ using System; using System.Linq.Expressions; using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp + +namespace ICSharpCode.NRefactory.PlayScript { /// /// Left Operator Right @@ -103,7 +106,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitBinaryOperatorExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { BinaryOperatorExpression o = other as BinaryOperatorExpression; return o != null && (this.Operator == BinaryOperatorType.Any || this.Operator == o.Operator) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/CastExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/CastExpression.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/CastExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/CastExpression.cs index e771d18fe..f2dadda94 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/CastExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/CastExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// (CastTo)Expression @@ -76,7 +77,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitCastExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CastExpression o = other as CastExpression; return o != null && this.Type.DoMatch(o.Type, match) && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/CheckedExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/CheckedExpression.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/CheckedExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/CheckedExpression.cs index 66bdcb54d..a57e1d5ed 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/CheckedExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/CheckedExpression.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// checked(Expression) @@ -74,7 +75,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitCheckedExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CheckedExpression o = other as CheckedExpression; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ConditionalExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ConditionalExpression.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/ConditionalExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ConditionalExpression.cs index 4367a0cce..fc37a7703 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ConditionalExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ConditionalExpression.cs @@ -24,8 +24,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Condition ? TrueExpression : FalseExpression @@ -87,7 +89,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitConditionalExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ConditionalExpression o = other as ConditionalExpression; return o != null && this.Condition.DoMatch(o.Condition, match) && this.TrueExpression.DoMatch(o.TrueExpression, match) && this.FalseExpression.DoMatch(o.FalseExpression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/DefaultValueExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/DefaultValueExpression.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/DefaultValueExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/DefaultValueExpression.cs index 0aab343f3..d00127d87 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/DefaultValueExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/DefaultValueExpression.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// default(Type) @@ -74,7 +75,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitDefaultValueExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { DefaultValueExpression o = other as DefaultValueExpression; return o != null && this.Type.DoMatch(o.Type, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/DirectionExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/DirectionExpression.cs similarity index 89% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/DirectionExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/DirectionExpression.cs index a17c117bb..0ca763ac5 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/DirectionExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/DirectionExpression.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum FieldDirection { @@ -47,7 +48,7 @@ public FieldDirection FieldDirection { } public CSharpTokenNode FieldDirectionToken { - get { return FieldDirection == ICSharpCode.NRefactory.CSharp.FieldDirection.Ref ? GetChildByRole (RefKeywordRole) : GetChildByRole (OutKeywordRole); } + get { return FieldDirection == ICSharpCode.NRefactory.PlayScript.FieldDirection.Ref ? GetChildByRole (RefKeywordRole) : GetChildByRole (OutKeywordRole); } } public Expression Expression { @@ -80,7 +81,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitDirectionExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { DirectionExpression o = other as DirectionExpression; return o != null && this.FieldDirection == o.FieldDirection && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ErrorExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ErrorExpression.cs index 6054792e4..91587e3cb 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ErrorExpression.cs @@ -24,8 +24,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { [Obsolete("This class is obsolete. Remove all referencing code.")] public class EmptyExpression : AstNode @@ -119,7 +121,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitErrorNode(this, data); } - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch (AstNode other, Match match) { var o = other as ErrorExpression; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/Expression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/Expression.cs similarity index 91% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/Expression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/Expression.cs index 22962a606..842f5aade 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/Expression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/Expression.cs @@ -18,8 +18,10 @@ using System; using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Base class for expressions. @@ -56,7 +58,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -64,16 +66,16 @@ protected internal override bool DoMatch(AstNode other, PatternMatching.Match ma #endregion #region PatternPlaceholder - public static implicit operator Expression(PatternMatching.Pattern pattern) + public static implicit operator Expression(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : Expression, PatternMatching.INode + sealed class PatternPlaceholder : Expression, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -97,12 +99,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/IdentifierExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IdentifierExpression.cs similarity index 86% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/IdentifierExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IdentifierExpression.cs index 0ec466c3f..270314dbe 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/IdentifierExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IdentifierExpression.cs @@ -24,8 +24,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class IdentifierExpression : Expression { @@ -40,7 +42,7 @@ public IdentifierExpression(string identifier) public IdentifierExpression(string identifier, TextLocation location) { - SetChildByRole(Roles.Identifier, CSharp.Identifier.Create (identifier, location)); + SetChildByRole(Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (identifier, location)); } // public Identifier IdentifierToken { @@ -52,7 +54,7 @@ public string Identifier { return GetChildByRole (Roles.Identifier).Name; } set { - SetChildByRole(Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole(Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -84,7 +86,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitIdentifierExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { IdentifierExpression o = other as IdentifierExpression; return o != null && MatchString(this.Identifier, o.Identifier) && this.TypeArguments.DoMatch(o.TypeArguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/IndexerExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IndexerExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/IndexerExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IndexerExpression.cs index cbc80c2cf..667b56469 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/IndexerExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IndexerExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Target[Arguments] @@ -83,7 +84,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitIndexerExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { IndexerExpression o = other as IndexerExpression; return o != null && this.Target.DoMatch(o.Target, match) && this.Arguments.DoMatch(o.Arguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/InvocationExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/InvocationExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/InvocationExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/InvocationExpression.cs index ad768d541..9bef846da 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/InvocationExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/InvocationExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Target(Arguments) @@ -83,7 +84,7 @@ public InvocationExpression (Expression target, params Expression[] arguments) : { } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { InvocationExpression o = other as InvocationExpression; return o != null && this.Target.DoMatch(o.Target, match) && this.Arguments.DoMatch(o.Arguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/IsExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IsExpression.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/IsExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IsExpression.cs index 791ab25d7..15b1bfae4 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/IsExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/IsExpression.cs @@ -24,8 +24,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Expression is Type @@ -74,7 +75,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitIsExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { IsExpression o = other as IsExpression; return o != null && this.Expression.DoMatch(o.Expression, match) && this.Type.DoMatch(o.Type, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/LambdaExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/LambdaExpression.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/LambdaExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/LambdaExpression.cs index e85902d84..315042422 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/LambdaExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/LambdaExpression.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// [async] Parameters => Body @@ -80,7 +82,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitLambdaExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { LambdaExpression o = other as LambdaExpression; return o != null && this.IsAsync == o.IsAsync && this.Parameters.DoMatch(o.Parameters, match) && this.Body.DoMatch(o.Body, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/MemberReferenceExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/MemberReferenceExpression.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/MemberReferenceExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/MemberReferenceExpression.cs index 334c6a260..e7dd6b94e 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/MemberReferenceExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/MemberReferenceExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Target.MemberName @@ -110,7 +111,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitMemberReferenceExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { MemberReferenceExpression o = other as MemberReferenceExpression; return o != null && this.Target.DoMatch(o.Target, match) && MatchString(this.MemberName, o.MemberName) && this.TypeArguments.DoMatch(o.TypeArguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/NamedArgumentExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NamedArgumentExpression.cs similarity index 90% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/NamedArgumentExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NamedArgumentExpression.cs index 6b485f015..8cfebb3b5 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/NamedArgumentExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NamedArgumentExpression.cs @@ -17,8 +17,9 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Represents a named argument passed to a method or attribute. @@ -41,7 +42,7 @@ public string Name { return GetChildByRole (Roles.Identifier).Name; } set { - SetChildByRole(Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole(Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -78,7 +79,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitNamedArgumentExpression(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { NamedArgumentExpression o = other as NamedArgumentExpression; return o != null && MatchString(this.Name, o.Name) && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/NamedExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NamedExpression.cs similarity index 91% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/NamedExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NamedExpression.cs index 92bc993b1..0745ef541 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/NamedExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NamedExpression.cs @@ -26,8 +26,9 @@ using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// name = expression @@ -51,7 +52,7 @@ public string Name { return GetChildByRole (Roles.Identifier).Name; } set { - SetChildByRole(Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole(Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -88,7 +89,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitNamedExpression(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { var o = other as NamedExpression; return o != null && MatchString(this.Name, o.Name) && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/NullReferenceExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NullReferenceExpression.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/NullReferenceExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NullReferenceExpression.cs index fbfeb6f91..1d752bf0b 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/NullReferenceExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/NullReferenceExpression.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// null @@ -74,7 +76,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullReferenceExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { NullReferenceExpression o = other as NullReferenceExpression; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ObjectCreateExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ObjectCreateExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/ObjectCreateExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ObjectCreateExpression.cs index a9665f8c7..544d5e040 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ObjectCreateExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ObjectCreateExpression.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// new Type(Arguments) { Initializer } @@ -95,7 +97,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitObjectCreateExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ObjectCreateExpression o = other as ObjectCreateExpression; return o != null && this.Type.DoMatch(o.Type, match) && this.Arguments.DoMatch(o.Arguments, match) && this.Initializer.DoMatch(o.Initializer, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ParenthesizedExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ParenthesizedExpression.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/ParenthesizedExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ParenthesizedExpression.cs index 7dddcb3fb..2aa1a86a1 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ParenthesizedExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ParenthesizedExpression.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// ( Expression ) @@ -68,7 +69,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitParenthesizedExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ParenthesizedExpression o = other as ParenthesizedExpression; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PointerReferenceExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/PointerReferenceExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/PointerReferenceExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/PointerReferenceExpression.cs index 35c4a7203..d573763b6 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PointerReferenceExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/PointerReferenceExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Target->MemberName @@ -81,7 +82,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitPointerReferenceExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { PointerReferenceExpression o = other as PointerReferenceExpression; return o != null && MatchString(this.MemberName, o.MemberName) && this.TypeArguments.DoMatch(o.TypeArguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/PrimitiveExpression.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/PrimitiveExpression.cs index adfe7c3ba..12c3c4f42 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/PrimitiveExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/PrimitiveExpression.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Represents a literal value. @@ -153,7 +155,7 @@ unsafe static TextLocation AdvanceLocation(TextLocation startLocation, string st return new TextLocation (line, col); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { PrimitiveExpression o = other as PrimitiveExpression; return o != null && (this.Value == AnyValue || object.Equals(this.Value, o.Value)); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/QueryExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/QueryExpression.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/QueryExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/QueryExpression.cs index b52f50a47..e60d419ff 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/QueryExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/QueryExpression.cs @@ -19,7 +19,10 @@ using System; using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript { public class QueryExpression : Expression { @@ -51,7 +54,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -77,7 +80,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitQueryExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryExpression o = other as QueryExpression; return o != null && !o.IsNull && this.Clauses.DoMatch(o.Clauses, match); @@ -194,7 +197,7 @@ public string Identifier { return GetChildByRole (Roles.Identifier).Name; } set { - SetChildByRole(Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole(Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -217,7 +220,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryContinuationClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryContinuationClause o = other as QueryContinuationClause; return o != null && MatchString(this.Identifier, o.Identifier) && this.PrecedingQuery.DoMatch(o.PrecedingQuery, match); @@ -243,7 +246,7 @@ public string Identifier { return GetChildByRole (Roles.Identifier).Name; } set { - SetChildByRole(Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole(Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -275,7 +278,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryFromClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryFromClause o = other as QueryFromClause; return o != null && this.Type.DoMatch(o.Type, match) && MatchString(this.Identifier, o.Identifier) @@ -296,7 +299,7 @@ public string Identifier { return GetChildByRole(Roles.Identifier).Name; } set { - SetChildByRole(Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole(Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -328,7 +331,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryLetClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryLetClause o = other as QueryLetClause; return o != null && MatchString(this.Identifier, o.Identifier) && this.Expression.DoMatch(o.Expression, match); @@ -364,7 +367,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryWhereClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryWhereClause o = other as QueryWhereClause; return o != null && this.Condition.DoMatch(o.Condition, match); @@ -473,7 +476,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryJoinClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryJoinClause o = other as QueryJoinClause; return o != null && this.IsGroupJoin == o.IsGroupJoin @@ -512,7 +515,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryOrderClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryOrderClause o = other as QueryOrderClause; return o != null && this.Orderings.DoMatch(o.Orderings, match); @@ -557,7 +560,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryOrdering (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryOrdering o = other as QueryOrdering; return o != null && this.Direction == o.Direction && this.Expression.DoMatch(o.Expression, match); @@ -599,7 +602,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQuerySelectClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QuerySelectClause o = other as QuerySelectClause; return o != null && this.Expression.DoMatch(o.Expression, match); @@ -646,7 +649,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitQueryGroupClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { QueryGroupClause o = other as QueryGroupClause; return o != null && this.Projection.DoMatch(o.Projection, match) && this.Key.DoMatch(o.Key, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/SizeOfExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/SizeOfExpression.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/SizeOfExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/SizeOfExpression.cs index 8a794960c..c0ff23a13 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/SizeOfExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/SizeOfExpression.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// sizeof(Type) @@ -74,7 +75,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitSizeOfExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { SizeOfExpression o = other as SizeOfExpression; return o != null && this.Type.DoMatch(o.Type, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/StackAllocExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/StackAllocExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/StackAllocExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/StackAllocExpression.cs index ad9f58c1b..1059d2e63 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/StackAllocExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/StackAllocExpression.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// stackalloc Type[Count] @@ -70,7 +71,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitStackAllocExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { StackAllocExpression o = other as StackAllocExpression; return o != null && this.Type.DoMatch(o.Type, match) && this.CountExpression.DoMatch(o.CountExpression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ThisReferenceExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ThisReferenceExpression.cs similarity index 91% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/ThisReferenceExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ThisReferenceExpression.cs index 481ef6658..46b82b9ba 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ThisReferenceExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/ThisReferenceExpression.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// this @@ -62,7 +64,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitThisReferenceExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ThisReferenceExpression o = other as ThisReferenceExpression; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/TypeOfExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/TypeOfExpression.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/TypeOfExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/TypeOfExpression.cs index fd2e93ab8..3793db794 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/TypeOfExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/TypeOfExpression.cs @@ -23,9 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; - -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// typeof(Type) @@ -75,7 +75,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitTypeOfExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { TypeOfExpression o = other as TypeOfExpression; return o != null && this.Type.DoMatch(o.Type, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/TypeReferenceExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/TypeReferenceExpression.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/TypeReferenceExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/TypeReferenceExpression.cs index 84b2d60dc..59f2aa844 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/TypeReferenceExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/TypeReferenceExpression.cs @@ -17,8 +17,9 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Represents an AstType as an expression. @@ -55,7 +56,7 @@ public TypeReferenceExpression (AstType type) AddChild (type, Roles.Type); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { TypeReferenceExpression o = other as TypeReferenceExpression; return o != null && this.Type.DoMatch(o.Type, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UnaryOperatorExpression.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UnaryOperatorExpression.cs index 878d6132f..afa6fc306 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UnaryOperatorExpression.cs @@ -26,8 +26,9 @@ using System; using System.Linq.Expressions; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Operator Expression @@ -84,7 +85,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUnaryOperatorExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UnaryOperatorExpression o = other as UnaryOperatorExpression; return o != null && (this.Operator == UnaryOperatorType.Any || this.Operator == o.Operator) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UncheckedExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UncheckedExpression.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/UncheckedExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UncheckedExpression.cs index 5b8686a26..97365f9d7 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UncheckedExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UncheckedExpression.cs @@ -24,7 +24,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript { /// /// unchecked(Expression) @@ -74,7 +76,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUncheckedExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UncheckedExpression o = other as UncheckedExpression; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UndocumentedExpression.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UndocumentedExpression.cs similarity index 85% rename from ICSharpCode.NRefactory.CSharp/Ast/Expressions/UndocumentedExpression.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UndocumentedExpression.cs index 0efc0d70f..0e8111e29 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UndocumentedExpression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Expressions/UndocumentedExpression.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum UndocumentedExpressionType { @@ -54,14 +55,14 @@ public UndocumentedExpressionType UndocumentedExpressionType { public CSharpTokenNode UndocumentedToken { get { switch (UndocumentedExpressionType) { - case ICSharpCode.NRefactory.CSharp.UndocumentedExpressionType.ArgListAccess: - case ICSharpCode.NRefactory.CSharp.UndocumentedExpressionType.ArgList: + case ICSharpCode.NRefactory.PlayScript.UndocumentedExpressionType.ArgListAccess: + case ICSharpCode.NRefactory.PlayScript.UndocumentedExpressionType.ArgList: return GetChildByRole (ArglistKeywordRole); - case ICSharpCode.NRefactory.CSharp.UndocumentedExpressionType.RefValue: + case ICSharpCode.NRefactory.PlayScript.UndocumentedExpressionType.RefValue: return GetChildByRole (RefvalueKeywordRole); - case ICSharpCode.NRefactory.CSharp.UndocumentedExpressionType.RefType: + case ICSharpCode.NRefactory.PlayScript.UndocumentedExpressionType.RefType: return GetChildByRole (ReftypeKeywordRole); - case ICSharpCode.NRefactory.CSharp.UndocumentedExpressionType.MakeRef: + case ICSharpCode.NRefactory.PlayScript.UndocumentedExpressionType.MakeRef: return GetChildByRole (MakerefKeywordRole); } return CSharpTokenNode.Null; @@ -95,7 +96,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUndocumentedExpression (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UndocumentedExpression o = other as UndocumentedExpression; return o != null && this.UndocumentedExpressionType == o.UndocumentedExpressionType && this.Arguments.DoMatch(o.Arguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Attribute.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Attribute.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Attribute.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Attribute.cs index cc99936e5..bdcfa85cb 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Attribute.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Attribute.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Attribute(Arguments) @@ -77,7 +78,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitAttribute (this, data); } - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch (AstNode other, Match match) { Attribute o = other as Attribute; return o != null && this.Type.DoMatch (o.Type, match) && this.Arguments.DoMatch (o.Arguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/AttributeSection.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/AttributeSection.cs similarity index 85% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/AttributeSection.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/AttributeSection.cs index 67b04412b..1f5010e63 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/AttributeSection.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/AttributeSection.cs @@ -27,8 +27,10 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// [AttributeTarget: Attributes] @@ -36,16 +38,16 @@ namespace ICSharpCode.NRefactory.CSharp public class AttributeSection : AstNode { #region PatternPlaceholder - public static implicit operator AttributeSection(PatternMatching.Pattern pattern) + public static implicit operator AttributeSection(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : AttributeSection, PatternMatching.INode + sealed class PatternPlaceholder : AttributeSection, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -69,12 +71,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } @@ -96,7 +98,7 @@ public string AttributeTarget { return GetChildByRole (Roles.Identifier).Name; } set { - SetChildByRole (Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole (Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -132,7 +134,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitAttributeSection (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { AttributeSection o = other as AttributeSection; return o != null && MatchString(this.AttributeTarget, o.AttributeTarget) && this.Attributes.DoMatch(o.Attributes, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Comment.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Comment.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Comment.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Comment.cs index 9d53f6e66..55f713d4e 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Comment.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Comment.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum CommentType { @@ -130,7 +132,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitComment (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { Comment o = other as Comment; return o != null && this.CommentType == o.CommentType && MatchString(this.Content, o.Content); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Constraint.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Constraint.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Constraint.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Constraint.cs index c49930427..89b554c82 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/Constraint.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/Constraint.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// where TypeParameter : BaseTypes @@ -75,7 +76,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitConstraint (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { Constraint o = other as Constraint; return o != null && this.TypeParameter.DoMatch (o.TypeParameter, match) && this.BaseTypes.DoMatch(o.BaseTypes, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/DelegateDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/DelegateDeclaration.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/DelegateDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/DelegateDeclaration.cs index 68489bc7f..cbaabc24f 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/DelegateDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/DelegateDeclaration.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// delegate ReturnType Name<TypeParameters>(Parameters) where Constraints; @@ -80,7 +82,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitDelegateDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { DelegateDeclaration o = other as DelegateDeclaration; return o != null && MatchString(this.Name, o.Name) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/ExternAliasDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/ExternAliasDeclaration.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/ExternAliasDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/ExternAliasDeclaration.cs index 9404d417f..da07de40a 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/ExternAliasDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/ExternAliasDeclaration.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// extern alias ; @@ -82,7 +83,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitExternAliasDeclaration (this, data); } - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch (AstNode other, Match match) { var o = other as ExternAliasDeclaration; return o != null && MatchString (this.Name, o.Name); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/NamespaceDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/NamespaceDeclaration.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/NamespaceDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/NamespaceDeclaration.cs index dbcf0192d..7df3385c1 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/NamespaceDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/NamespaceDeclaration.cs @@ -27,8 +27,10 @@ using System.Linq; using System.Text; using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// namespace Name { Members } @@ -149,7 +151,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitNamespaceDeclaration(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { NamespaceDeclaration o = other as NamespaceDeclaration; return o != null && MatchString(this.Name, o.Name) && this.Members.DoMatch(o.Members, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/NewLineNode.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/NewLineNode.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/NewLineNode.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/NewLineNode.cs index 12b004420..0077e032c 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/NewLineNode.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/NewLineNode.cs @@ -1,5 +1,7 @@ using System; -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory; + +namespace ICSharpCode.NRefactory.PlayScript { /// diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/PreProcessorDirective.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/PreProcessorDirective.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/PreProcessorDirective.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/PreProcessorDirective.cs index 631f35e98..a3b5f62d7 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/PreProcessorDirective.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/PreProcessorDirective.cs @@ -26,8 +26,10 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum PreProcessorDirectiveType : byte { @@ -195,7 +197,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitPreProcessorDirective (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { PreProcessorDirective o = other as PreProcessorDirective; return o != null && Type == o.Type && MatchString(Argument, o.Argument); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TextNode.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TextNode.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TextNode.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TextNode.cs index 4c7f9b942..afaf6d032 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TextNode.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TextNode.cs @@ -25,7 +25,10 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript { /// /// A text node contains text without syntactic or semantic information. @@ -84,7 +87,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitText (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { var o = other as TextNode; return o != null && o.Text == Text; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TypeDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TypeDeclaration.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TypeDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TypeDeclaration.cs index f2dedfa16..c2ab38b78 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TypeDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TypeDeclaration.cs @@ -27,8 +27,10 @@ using System.Collections.Generic; using System.Linq; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum ClassType { @@ -133,7 +135,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitTypeDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { TypeDeclaration o = other as TypeDeclaration; return o != null && this.ClassType == o.ClassType && MatchString(this.Name, o.Name) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TypeParameterDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TypeParameterDeclaration.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TypeParameterDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TypeParameterDeclaration.cs index c992b629a..d6a147237 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/TypeParameterDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/TypeParameterDeclaration.cs @@ -18,8 +18,10 @@ using System; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// [in|out] Name @@ -104,7 +106,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitTypeParameterDeclaration(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { TypeParameterDeclaration o = other as TypeParameterDeclaration; return o != null && this.Variance == o.Variance && MatchString(this.Name, o.Name) && this.Attributes.DoMatch(o.Attributes, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/UsingAliasDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/UsingAliasDeclaration.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/UsingAliasDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/UsingAliasDeclaration.cs index 9924132d3..b04154048 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/UsingAliasDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/UsingAliasDeclaration.cs @@ -23,15 +23,17 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// using Alias = Import; /// public class UsingAliasDeclaration : AstNode { - public static readonly TokenRole UsingKeywordRole = new TokenRole ("using"); + public static readonly TokenRole UsingKeywordRole = new TokenRole ("import"); public static readonly Role AliasRole = new Role("Alias", Identifier.Null); public static readonly Role ImportRole = UsingDeclaration.ImportRole; @@ -98,7 +100,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUsingAliasDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UsingAliasDeclaration o = other as UsingAliasDeclaration; return o != null && MatchString(this.Alias, o.Alias) && this.Import.DoMatch(o.Import, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/UsingDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/UsingDeclaration.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/UsingDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/UsingDeclaration.cs index 9e0c35a89..999038e88 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/UsingDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/UsingDeclaration.cs @@ -28,8 +28,10 @@ using System.Linq; using System.Text; using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// using Import; @@ -113,7 +115,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUsingDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UsingDeclaration o = other as UsingDeclaration; return o != null && this.Import.DoMatch(o.Import, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/WhitespaceNode.cs b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/WhitespaceNode.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/WhitespaceNode.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/WhitespaceNode.cs index c7e37f704..56b6f0e59 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/GeneralScope/WhitespaceNode.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/GeneralScope/WhitespaceNode.cs @@ -25,7 +25,10 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript { /// /// A Whitespace node contains only whitespaces. @@ -81,7 +84,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitWhitespace (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { var o = other as WhitespaceNode; return o != null && o.WhiteSpaceText == WhiteSpaceText; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs b/ICSharpCode.NRefactory.PlayScript/Ast/IAstVisitor.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/IAstVisitor.cs index 4aadddbdc..ad9b1558c 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/IAstVisitor.cs @@ -17,9 +17,11 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + /// /// AST visitor. /// @@ -149,7 +151,7 @@ public interface IAstVisitor void VisitNullNode(AstNode nullNode); void VisitErrorNode(AstNode errorNode); - void VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern); + void VisitPatternPlaceholder(AstNode placeholder, Pattern pattern); } /// @@ -281,7 +283,7 @@ public interface IAstVisitor S VisitNullNode(AstNode nullNode); S VisitErrorNode(AstNode errorNode); - S VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern); + S VisitPatternPlaceholder(AstNode placeholder, Pattern pattern); } /// @@ -413,6 +415,6 @@ public interface IAstVisitor S VisitNullNode(AstNode nullNode, T data); S VisitErrorNode(AstNode errorNode, T data); - S VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern, T data); + S VisitPatternPlaceholder(AstNode placeholder, Pattern pattern, T data); } } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Identifier.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Identifier.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Identifier.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Identifier.cs index cf403afbd..15ef4a813 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Identifier.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Identifier.cs @@ -25,9 +25,12 @@ // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + public class Identifier : AstNode { public new static readonly Identifier Null = new NullIdentifier (); @@ -54,7 +57,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -164,7 +167,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitIdentifier (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { Identifier o = other as Identifier; return o != null && !o.IsNull && MatchString(this.Name, o.Name); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/IdentifierExpressionBackreference.cs b/ICSharpCode.NRefactory.PlayScript/Ast/IdentifierExpressionBackreference.cs similarity index 82% rename from ICSharpCode.NRefactory.CSharp/Ast/IdentifierExpressionBackreference.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/IdentifierExpressionBackreference.cs index 7bfacd990..ecbbb9305 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/IdentifierExpressionBackreference.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/IdentifierExpressionBackreference.cs @@ -20,8 +20,10 @@ using System.Linq; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript + { + /// /// Matches identifier expressions that have the same identifier as the referenced variable/type definition/method definition. /// @@ -42,13 +44,13 @@ public IdentifierExpressionBackreference(string referencedGroupName) public override bool DoMatch(INode other, Match match) { - CSharp.IdentifierExpression ident = other as CSharp.IdentifierExpression; + ICSharpCode.NRefactory.PlayScript.IdentifierExpression ident = other as ICSharpCode.NRefactory.PlayScript.IdentifierExpression; if (ident == null || ident.TypeArguments.Any()) return false; - CSharp.AstNode referenced = (CSharp.AstNode)match.Get(referencedGroupName).Last(); + ICSharpCode.NRefactory.PlayScript.AstNode referenced = (ICSharpCode.NRefactory.PlayScript.AstNode)match.Get(referencedGroupName).Last(); if (referenced == null) return false; - return ident.Identifier == referenced.GetChildByRole(CSharp.Roles.Identifier).Name; + return ident.Identifier == referenced.GetChildByRole(ICSharpCode.NRefactory.PlayScript.Roles.Identifier).Name; } } } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/MemberType.cs b/ICSharpCode.NRefactory.PlayScript/Ast/MemberType.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/MemberType.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/MemberType.cs index 2045d00ed..47644c3f0 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/MemberType.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/MemberType.cs @@ -28,11 +28,15 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript + { + public class MemberType : AstType { public static readonly Role TargetRole = new Role("Target", AstType.Null); @@ -112,7 +116,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitMemberType (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { MemberType o = other as MemberType; return o != null && this.IsDoubleColon == o.IsDoubleColon diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Modifiers.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Modifiers.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/Modifiers.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Modifiers.cs index eb320495c..f0b73c392 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Modifiers.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Modifiers.cs @@ -25,11 +25,12 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // - using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + [Flags] public enum Modifiers { diff --git a/ICSharpCode.NRefactory.CSharp/Ast/NodeType.cs b/ICSharpCode.NRefactory.PlayScript/Ast/NodeType.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/NodeType.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/NodeType.cs index cf96a60c8..721e65dac 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/NodeType.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/NodeType.cs @@ -23,11 +23,12 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. - using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + public enum NodeType { Unknown, diff --git a/ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs b/ICSharpCode.NRefactory.PlayScript/Ast/ObservableAstVisitor.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/ObservableAstVisitor.cs index 898d51864..20661d178 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/ObservableAstVisitor.cs @@ -26,8 +26,12 @@ using System; -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript + { + public class ObservableAstVisitor : IAstVisitor { void Visit(Action enter, Action leave, T node) where T : AstNode @@ -850,7 +854,7 @@ void IAstVisitor.VisitNamedExpression(NamedExpression namedExpression) Visit(EnterNamedExpression, LeaveNamedExpression, namedExpression); } - void IAstVisitor.VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern) + void IAstVisitor.VisitPatternPlaceholder(AstNode placeholder, Pattern pattern) { } } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs b/ICSharpCode.NRefactory.PlayScript/Ast/PrimitiveType.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/PrimitiveType.cs index e3761bc82..712b837a0 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/PrimitiveType.cs @@ -26,12 +26,15 @@ using System; using System.Collections.Generic; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + public class PrimitiveType : AstType { TextLocation location; @@ -99,7 +102,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitPrimitiveType (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { PrimitiveType o = other as PrimitiveType; return o != null && MatchString(this.Keyword, o.Keyword); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Roles.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Roles.cs similarity index 83% rename from ICSharpCode.NRefactory.CSharp/Ast/Roles.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Roles.cs index a7408c91d..87e2799ab 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Roles.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Roles.cs @@ -25,27 +25,30 @@ // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + public static class Roles { public static readonly Role Root = AstNode.RootRole; // some pre defined constants for common roles - public static readonly Role Identifier = new Role ("Identifier", CSharp.Identifier.Null); - public static readonly Role Body = new Role ("Body", CSharp.BlockStatement.Null); + public static readonly Role Identifier = new Role ("Identifier", ICSharpCode.NRefactory.PlayScript.Identifier.Null); + public static readonly Role Body = new Role ("Body", ICSharpCode.NRefactory.PlayScript.BlockStatement.Null); public static readonly Role Parameter = new Role ("Parameter"); - public static readonly Role Argument = new Role ("Argument", CSharp.Expression.Null); - public static readonly Role Type = new Role ("Type", CSharp.AstType.Null); - public static readonly Role Expression = new Role ("Expression", CSharp.Expression.Null); - public static readonly Role TargetExpression = new Role ("Target", CSharp.Expression.Null); - public readonly static Role Condition = new Role ("Condition", CSharp.Expression.Null); + public static readonly Role Argument = new Role ("Argument", ICSharpCode.NRefactory.PlayScript.Expression.Null); + public static readonly Role Type = new Role ("Type", ICSharpCode.NRefactory.PlayScript.AstType.Null); + public static readonly Role Expression = new Role ("Expression", ICSharpCode.NRefactory.PlayScript.Expression.Null); + public static readonly Role TargetExpression = new Role ("Target", ICSharpCode.NRefactory.PlayScript.Expression.Null); + public readonly static Role Condition = new Role ("Condition", ICSharpCode.NRefactory.PlayScript.Expression.Null); public static readonly Role TypeParameter = new Role ("TypeParameter"); - public static readonly Role TypeArgument = new Role ("TypeArgument", CSharp.AstType.Null); + public static readonly Role TypeArgument = new Role ("TypeArgument", ICSharpCode.NRefactory.PlayScript.AstType.Null); public readonly static Role Constraint = new Role ("Constraint"); public static readonly Role Variable = new Role ("Variable", VariableInitializer.Null); - public static readonly Role EmbeddedStatement = new Role ("EmbeddedStatement", CSharp.Statement.Null); + public static readonly Role EmbeddedStatement = new Role ("EmbeddedStatement", ICSharpCode.NRefactory.PlayScript.Statement.Null); public readonly static Role TypeMemberRole = new Role ("TypeMember"); @@ -81,16 +84,19 @@ public static class Roles public readonly static TokenRole WhereKeyword = new TokenRole ("where"); public readonly static Role ConstraintTypeParameter = new Role ("TypeParameter", SimpleType.Null); - public readonly static TokenRole DelegateKeyword = new TokenRole ("delegate"); + public readonly static TokenRole DelegateKeyword = new TokenRole ("function"); public static readonly TokenRole ExternKeyword = new TokenRole ("extern"); public static readonly TokenRole AliasKeyword = new TokenRole ("alias"); - public static readonly TokenRole NamespaceKeyword = new TokenRole ("namespace"); + public static readonly TokenRole NamespaceKeyword = new TokenRole ("package"); public static readonly TokenRole EnumKeyword = new TokenRole ("enum"); public static readonly TokenRole InterfaceKeyword = new TokenRole ("interface"); public static readonly TokenRole StructKeyword = new TokenRole ("struct"); public static readonly TokenRole ClassKeyword = new TokenRole ("class"); + public static readonly TokenRole FunctionKeyword = new TokenRole ("function"); + public static readonly TokenRole IndexerKeyword = new TokenRole ("indexer"); + public static readonly TokenRole PropertyKeyword = new TokenRole ("property"); } } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/SimpleType.cs b/ICSharpCode.NRefactory.PlayScript/Ast/SimpleType.cs similarity index 88% rename from ICSharpCode.NRefactory.CSharp/Ast/SimpleType.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/SimpleType.cs index 529a62fbe..07ee1eb1a 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/SimpleType.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/SimpleType.cs @@ -28,12 +28,15 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + public class SimpleType : AstType { #region Null @@ -62,7 +65,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -90,7 +93,7 @@ public SimpleType (Identifier identifier) public SimpleType(string identifier, TextLocation location) { - SetChildByRole (Roles.Identifier, CSharp.Identifier.Create (identifier, location)); + SetChildByRole (Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (identifier, location)); } public SimpleType (string identifier, IEnumerable typeArguments) @@ -110,7 +113,7 @@ public string Identifier { return GetChildByRole (Roles.Identifier).Name; } set { - SetChildByRole (Roles.Identifier, CSharp.Identifier.Create (value)); + SetChildByRole (Roles.Identifier, ICSharpCode.NRefactory.PlayScript.Identifier.Create (value)); } } @@ -142,7 +145,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitSimpleType (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { SimpleType o = other as SimpleType; return o != null && MatchString(this.Identifier, o.Identifier) && this.TypeArguments.DoMatch(o.TypeArguments, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/BlockStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/BlockStatement.cs similarity index 84% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/BlockStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/BlockStatement.cs index 24b9cd106..53cf34243 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/BlockStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/BlockStatement.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// { Statements } @@ -60,7 +62,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -68,16 +70,16 @@ protected internal override bool DoMatch(AstNode other, PatternMatching.Match ma #endregion #region PatternPlaceholder - public static implicit operator BlockStatement(PatternMatching.Pattern pattern) + public static implicit operator BlockStatement(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - - sealed class PatternPlaceholder : BlockStatement, PatternMatching.INode + + sealed class PatternPlaceholder : BlockStatement, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -101,12 +103,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } @@ -140,7 +142,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitBlockStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { BlockStatement o = other as BlockStatement; return o != null && !o.IsNull && this.Statements.DoMatch(o.Statements, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/BreakStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/BreakStatement.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/BreakStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/BreakStatement.cs index 4bb4e39ef..ce102b74c 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/BreakStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/BreakStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// break; @@ -56,7 +57,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitBreakStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { BreakStatement o = other as BreakStatement; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/CheckedStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/CheckedStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/CheckedStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/CheckedStatement.cs index 803067aff..b5d7cb6cd 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/CheckedStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/CheckedStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// checked BodyBlock @@ -66,7 +67,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitCheckedStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CheckedStatement o = other as CheckedStatement; return o != null && this.Body.DoMatch(o.Body, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ContinueStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ContinueStatement.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/ContinueStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/ContinueStatement.cs index aac1690b2..027b39328 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ContinueStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ContinueStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// continue; @@ -56,7 +57,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitContinueStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ContinueStatement o = other as ContinueStatement; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/DoWhileStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/DoWhileStatement.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/DoWhileStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/DoWhileStatement.cs index 280ca7cea..e0e7ad3e6 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/DoWhileStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/DoWhileStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE.using System; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// "do EmbeddedStatement while(Condition);" @@ -79,7 +80,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitDoWhileStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { DoWhileStatement o = other as DoWhileStatement; return o != null && this.EmbeddedStatement.DoMatch(o.EmbeddedStatement, match) && this.Condition.DoMatch(o.Condition, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/EmptyStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/EmptyStatement.cs similarity index 91% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/EmptyStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/EmptyStatement.cs index deaa3a9c4..ce9953c4b 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/EmptyStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/EmptyStatement.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// ; @@ -63,7 +65,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitEmptyStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { EmptyStatement o = other as EmptyStatement; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ExpressionStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ExpressionStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/ExpressionStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/ExpressionStatement.cs index 1fdc4ddc4..0f1d39d25 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ExpressionStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ExpressionStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Expression; @@ -64,7 +65,7 @@ public ExpressionStatement(Expression expression) this.Expression = expression; } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ExpressionStatement o = other as ExpressionStatement; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/FixedStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/FixedStatement.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/FixedStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/FixedStatement.cs index d44366504..51ef06438 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/FixedStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/FixedStatement.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// fixed (Type Variables) EmbeddedStatement @@ -76,7 +77,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitFixedStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { FixedStatement o = other as FixedStatement; return o != null && this.Type.DoMatch(o.Type, match) && this.Variables.DoMatch(o.Variables, match) && this.EmbeddedStatement.DoMatch(o.EmbeddedStatement, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ForStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ForStatement.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/ForStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/ForStatement.cs index d369536d0..5c4c9d2a5 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ForStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ForStatement.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using System.Collections.Generic; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// for (Initializers; Condition; Iterators) EmbeddedStatement @@ -87,7 +89,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitForStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ForStatement o = other as ForStatement; return o != null && this.Initializers.DoMatch(o.Initializers, match) && this.Condition.DoMatch(o.Condition, match) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ForeachStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ForeachStatement.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/ForeachStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/ForeachStatement.cs index b3a9c5f78..3e3d23457 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ForeachStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ForeachStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// foreach (Type VariableName in InExpression) EmbeddedStatement @@ -98,7 +99,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitForeachStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ForeachStatement o = other as ForeachStatement; return o != null && this.VariableType.DoMatch(o.VariableType, match) && MatchString(this.VariableName, o.VariableName) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/GotoStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/GotoStatement.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/GotoStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/GotoStatement.cs index 7aff7a82f..a215d8221 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/GotoStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/GotoStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// "goto Label;" @@ -77,7 +78,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitGotoStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { GotoStatement o = other as GotoStatement; return o != null && MatchString(this.Label, o.Label); @@ -127,7 +128,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitGotoCaseStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { GotoCaseStatement o = other as GotoCaseStatement; return o != null && this.LabelExpression.DoMatch(o.LabelExpression, match); @@ -169,7 +170,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitGotoDefaultStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { GotoDefaultStatement o = other as GotoDefaultStatement; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/IfElseStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/IfElseStatement.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/IfElseStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/IfElseStatement.cs index 70ece3fd5..dedfee1d7 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/IfElseStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/IfElseStatement.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// if (Condition) TrueStatement else FalseStatement @@ -83,7 +85,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitIfElseStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { IfElseStatement o = other as IfElseStatement; return o != null && this.Condition.DoMatch(o.Condition, match) && this.TrueStatement.DoMatch(o.TrueStatement, match) && this.FalseStatement.DoMatch(o.FalseStatement, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/LabelStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/LabelStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/LabelStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/LabelStatement.cs index 43d22cea7..33af91973 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/LabelStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/LabelStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Label: @@ -64,7 +65,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitLabelStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { LabelStatement o = other as LabelStatement; return o != null && MatchString(this.Label, o.Label); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/LockStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/LockStatement.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/LockStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/LockStatement.cs index e59f99308..d8db41883 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/LockStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/LockStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// lock (Expression) EmbeddedStatement; @@ -70,7 +71,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitLockStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { LockStatement o = other as LockStatement; return o != null && this.Expression.DoMatch(o.Expression, match) && this.EmbeddedStatement.DoMatch(o.EmbeddedStatement, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ReturnStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ReturnStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/ReturnStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/ReturnStatement.cs index 0970bce43..f79fa5331 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ReturnStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ReturnStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// return Expression; @@ -70,7 +71,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitReturnStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ReturnStatement o = other as ReturnStatement; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/Statement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/Statement.cs similarity index 84% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/Statement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/Statement.cs index 24d3ede92..454c36bfd 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/Statement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/Statement.cs @@ -17,8 +17,10 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Base class for statements. @@ -55,7 +57,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -63,16 +65,16 @@ protected internal override bool DoMatch(AstNode other, PatternMatching.Match ma #endregion #region PatternPlaceholder - public static implicit operator Statement(PatternMatching.Pattern pattern) + public static implicit operator Statement(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : Statement, PatternMatching.INode + sealed class PatternPlaceholder : Statement, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -96,12 +98,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/SwitchStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/SwitchStatement.cs similarity index 88% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/SwitchStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/SwitchStatement.cs index fa8e80cd5..49ee6c0fc 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/SwitchStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/SwitchStatement.cs @@ -26,8 +26,10 @@ using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// switch (Expression) { SwitchSections } @@ -81,7 +83,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitSwitchStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { SwitchStatement o = other as SwitchStatement; return o != null && this.Expression.DoMatch(o.Expression, match) && this.SwitchSections.DoMatch(o.SwitchSections, match); @@ -91,16 +93,16 @@ protected internal override bool DoMatch(AstNode other, PatternMatching.Match ma public class SwitchSection : AstNode { #region PatternPlaceholder - public static implicit operator SwitchSection(PatternMatching.Pattern pattern) + public static implicit operator SwitchSection(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : SwitchSection, PatternMatching.INode + sealed class PatternPlaceholder : SwitchSection, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -124,12 +126,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } @@ -167,7 +169,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitSwitchSection (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { SwitchSection o = other as SwitchSection; return o != null && this.CaseLabels.DoMatch(o.CaseLabels, match) && this.Statements.DoMatch(o.Statements, match); @@ -221,7 +223,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitCaseLabel (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CaseLabel o = other as CaseLabel; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ThrowStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ThrowStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/ThrowStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/ThrowStatement.cs index 98e27d1e7..271205997 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/ThrowStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/ThrowStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// throw Expression; @@ -70,7 +71,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitThrowStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ThrowStatement o = other as ThrowStatement; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/TryCatchStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/TryCatchStatement.cs similarity index 89% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/TryCatchStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/TryCatchStatement.cs index b93a168a4..804f6c00f 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/TryCatchStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/TryCatchStatement.cs @@ -26,8 +26,10 @@ using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// try TryBlock CatchClauses finally FinallyBlock @@ -77,7 +79,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitTryCatchStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { TryCatchStatement o = other as TryCatchStatement; return o != null && this.TryBlock.DoMatch(o.TryBlock, match) && this.CatchClauses.DoMatch(o.CatchClauses, match) && this.FinallyBlock.DoMatch(o.FinallyBlock, match); @@ -119,7 +121,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -127,16 +129,16 @@ protected internal override bool DoMatch(AstNode other, PatternMatching.Match ma #endregion #region PatternPlaceholder - public static implicit operator CatchClause(PatternMatching.Pattern pattern) + public static implicit operator CatchClause(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : CatchClause, PatternMatching.INode + sealed class PatternPlaceholder : CatchClause, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -160,12 +162,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } @@ -243,7 +245,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitCatchClause (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CatchClause o = other as CatchClause; return o != null && this.Type.DoMatch(o.Type, match) && MatchString(this.VariableName, o.VariableName) && this.Body.DoMatch(o.Body, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/UncheckedStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/UncheckedStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/UncheckedStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/UncheckedStatement.cs index 765cd9ab3..31a940329 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/UncheckedStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/UncheckedStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// unchecked BodyBlock @@ -66,7 +67,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUncheckedStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UncheckedStatement o = other as UncheckedStatement; return o != null && this.Body.DoMatch(o.Body, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/UnsafeStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/UnsafeStatement.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/UnsafeStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/UnsafeStatement.cs index fa6421ae6..84cc7358c 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/UnsafeStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/UnsafeStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// unsafe { Body } @@ -57,7 +58,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUnsafeStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UnsafeStatement o = other as UnsafeStatement; return o != null && this.Body.DoMatch(o.Body, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/UsingStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/UsingStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/UsingStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/UsingStatement.cs index c87304675..af92c7311 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/UsingStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/UsingStatement.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// using (ResourceAcquisition) EmbeddedStatement @@ -74,7 +76,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitUsingStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { UsingStatement o = other as UsingStatement; return o != null && this.ResourceAcquisition.DoMatch(o.ResourceAcquisition, match) && this.EmbeddedStatement.DoMatch(o.EmbeddedStatement, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/VariableDeclarationStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/VariableDeclarationStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/VariableDeclarationStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/VariableDeclarationStatement.cs index 32c141d96..239dbae6a 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/VariableDeclarationStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/VariableDeclarationStatement.cs @@ -26,8 +26,10 @@ using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class VariableDeclarationStatement : Statement { @@ -81,7 +83,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitVariableDeclarationStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { VariableDeclarationStatement o = other as VariableDeclarationStatement; return o != null && this.Modifiers == o.Modifiers && this.Type.DoMatch(o.Type, match) && this.Variables.DoMatch(o.Variables, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/WhileStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/WhileStatement.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/WhileStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/WhileStatement.cs index e38daa144..42832b226 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/WhileStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/WhileStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// "while (Condition) EmbeddedStatement" @@ -70,7 +71,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitWhileStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { WhileStatement o = other as WhileStatement; return o != null && this.Condition.DoMatch(o.Condition, match) && this.EmbeddedStatement.DoMatch(o.EmbeddedStatement, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/YieldBreakStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/YieldBreakStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/YieldBreakStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/YieldBreakStatement.cs index ea5cac4a6..640222a42 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/YieldBreakStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/YieldBreakStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// yield break; @@ -61,7 +62,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitYieldBreakStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { YieldBreakStatement o = other as YieldBreakStatement; return o != null; diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Statements/YieldReturnStatement.cs b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/YieldReturnStatement.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/Statements/YieldReturnStatement.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/Statements/YieldReturnStatement.cs index 6539bf0c0..f8a34afb9 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Statements/YieldReturnStatement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/Statements/YieldReturnStatement.cs @@ -23,8 +23,9 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// yield return Expression; @@ -66,7 +67,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitYieldReturnStatement (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { YieldReturnStatement o = other as YieldReturnStatement; return o != null && this.Expression.DoMatch(o.Expression, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/SyntaxExtensions.cs b/ICSharpCode.NRefactory.PlayScript/Ast/SyntaxExtensions.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/SyntaxExtensions.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/SyntaxExtensions.cs index bac28bb76..35a1c8736 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/SyntaxExtensions.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/SyntaxExtensions.cs @@ -20,8 +20,11 @@ using System; -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript { + /// /// Extension methods for the syntax tree. /// diff --git a/ICSharpCode.NRefactory.CSharp/Ast/SyntaxTree.cs b/ICSharpCode.NRefactory.PlayScript/Ast/SyntaxTree.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/SyntaxTree.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/SyntaxTree.cs index 8e6c3e09d..d4fc0316e 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/SyntaxTree.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/SyntaxTree.cs @@ -26,16 +26,20 @@ using System; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; using System.Threading; using ICSharpCode.NRefactory.MonoCSharp; using System.IO; +using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.Editor; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript -namespace ICSharpCode.NRefactory.CSharp { + [Obsolete("CompilationUnit was renamed to SyntaxTree", true)] public class CompilationUnit {} @@ -129,7 +133,7 @@ public IEnumerable GetTypes(bool includeInnerTypes = false) } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { SyntaxTree o = other as SyntaxTree; return o != null && this.Members.DoMatch(o.Members, match); @@ -165,28 +169,28 @@ public CSharpUnresolvedFile ToTypeSystem () public static SyntaxTree Parse (string program, string fileName = "", CompilerSettings settings = null, CancellationToken cancellationToken = default (CancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); - var parser = new CSharpParser (settings); + var parser = new PlayScriptParser (settings); return parser.Parse (program, fileName); } public static SyntaxTree Parse (TextReader reader, string fileName = "", CompilerSettings settings = null, CancellationToken cancellationToken = default (CancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); - var parser = new CSharpParser (settings); + var parser = new PlayScriptParser (settings); return parser.Parse (reader, fileName); } public static SyntaxTree Parse (Stream stream, string fileName = "", CompilerSettings settings = null, CancellationToken cancellationToken = default (CancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); - var parser = new CSharpParser (settings); + var parser = new PlayScriptParser (settings); return parser.Parse (stream, fileName); } public static SyntaxTree Parse (ITextSource textSource, string fileName = "", CompilerSettings settings = null, CancellationToken cancellationToken = default (CancellationToken)) { cancellationToken.ThrowIfCancellationRequested(); - var parser = new CSharpParser (settings); + var parser = new PlayScriptParser (settings); return parser.Parse (textSource, fileName); } } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TokenRole.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TokenRole.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/TokenRole.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TokenRole.cs index 8c9c7392a..93402bf92 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TokenRole.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TokenRole.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + /// /// A specific role only used for C# tokens /// diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/Accessor.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/Accessor.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/Accessor.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/Accessor.cs index 8bd18c477..12515499b 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/Accessor.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/Accessor.cs @@ -26,8 +26,10 @@ using System; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// get/set/add/remove @@ -58,7 +60,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -108,7 +110,7 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitAccessor (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { Accessor o = other as Accessor; return o != null && !o.IsNull && this.MatchAttributesAndModifiers(o, match) && this.Body.DoMatch(o.Body, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/ConstructorDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/ConstructorDeclaration.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/ConstructorDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/ConstructorDeclaration.cs index 23a973a5c..fd9497313 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/ConstructorDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/ConstructorDeclaration.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class ConstructorDeclaration : EntityDeclaration { @@ -77,7 +79,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitConstructorDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ConstructorDeclaration o = other as ConstructorDeclaration; return o != null && this.MatchAttributesAndModifiers(o, match) && this.Parameters.DoMatch(o.Parameters, match) @@ -126,7 +128,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -179,7 +181,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitConstructorInitializer (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ConstructorInitializer o = other as ConstructorInitializer; return o != null && !o.IsNull diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/DestructorDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/DestructorDeclaration.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/DestructorDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/DestructorDeclaration.cs index 0609e5dc6..832790d2e 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/DestructorDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/DestructorDeclaration.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class DestructorDeclaration : EntityDeclaration { @@ -67,7 +69,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitDestructorDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { DestructorDeclaration o = other as DestructorDeclaration; return o != null && this.MatchAttributesAndModifiers(o, match) && this.Body.DoMatch(o.Body, match); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EntityDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EntityDeclaration.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EntityDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EntityDeclaration.cs index c02ff21b6..4af68fdeb 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EntityDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EntityDeclaration.cs @@ -19,8 +19,10 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public abstract class EntityDeclaration : AstNode { @@ -109,7 +111,7 @@ internal static void SetModifiers(AstNode node, Modifiers newValue) } } - protected bool MatchAttributesAndModifiers (EntityDeclaration o, PatternMatching.Match match) + protected bool MatchAttributesAndModifiers (EntityDeclaration o, Match match) { return (this.Modifiers == Modifiers.Any || this.Modifiers == o.Modifiers) && this.Attributes.DoMatch (o.Attributes, match); } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EnumMemberDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EnumMemberDeclaration.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EnumMemberDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EnumMemberDeclaration.cs index b7c924ab9..8ed78a8cb 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EnumMemberDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EnumMemberDeclaration.cs @@ -26,8 +26,10 @@ using System; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class EnumMemberDeclaration : EntityDeclaration { @@ -61,7 +63,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitEnumMemberDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { EnumMemberDeclaration o = other as EnumMemberDeclaration; return o != null && this.MatchAttributesAndModifiers(o, match) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EventDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EventDeclaration.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EventDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EventDeclaration.cs index d543f9ea7..d733a9b6d 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/EventDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/EventDeclaration.cs @@ -27,10 +27,12 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class EventDeclaration : EntityDeclaration { @@ -77,7 +79,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitEventDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { EventDeclaration o = other as EventDeclaration; return o != null && this.MatchAttributesAndModifiers(o, match) @@ -140,7 +142,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitCustomEventDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { CustomEventDeclaration o = other as CustomEventDeclaration; return o != null && MatchString(this.Name, o.Name) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FieldDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FieldDeclaration.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FieldDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FieldDeclaration.cs index de220ecd7..83361882b 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FieldDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FieldDeclaration.cs @@ -27,8 +27,10 @@ using System; using System.ComponentModel; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class FieldDeclaration : EntityDeclaration { @@ -69,7 +71,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitFieldDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { FieldDeclaration o = other as FieldDeclaration; return o != null && this.MatchAttributesAndModifiers(o, match) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FixedFieldDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FixedFieldDeclaration.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FixedFieldDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FixedFieldDeclaration.cs index fea2a2af2..23591f6f0 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FixedFieldDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FixedFieldDeclaration.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using System; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class FixedFieldDeclaration : EntityDeclaration { @@ -60,7 +62,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitFixedFieldDeclaration (this, data); } - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch (AstNode other, Match match) { var o = other as FixedFieldDeclaration; return o != null && this.MatchAttributesAndModifiers (o, match) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FixedVariableInitializer.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FixedVariableInitializer.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FixedVariableInitializer.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FixedVariableInitializer.cs index 2c320a826..30382aaad 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/FixedVariableInitializer.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/FixedVariableInitializer.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Name [ CountExpression ] diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/IndexerDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/IndexerDeclaration.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/IndexerDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/IndexerDeclaration.cs index 56156dd19..eec6223f6 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/IndexerDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/IndexerDeclaration.cs @@ -27,8 +27,10 @@ using System; using System.ComponentModel; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class IndexerDeclaration : EntityDeclaration { @@ -109,7 +111,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitIndexerDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { IndexerDeclaration o = other as IndexerDeclaration; return o != null diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/MethodDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/MethodDeclaration.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/MethodDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/MethodDeclaration.cs index 90aaa3047..a6a3ca27e 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/MethodDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/MethodDeclaration.cs @@ -25,8 +25,10 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class MethodDeclaration : EntityDeclaration { @@ -90,7 +92,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitMethodDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { MethodDeclaration o = other as MethodDeclaration; return o != null && MatchString(this.Name, o.Name) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/OperatorDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/OperatorDeclaration.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/OperatorDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/OperatorDeclaration.cs index 960e8053f..51707e099 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/OperatorDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/OperatorDeclaration.cs @@ -27,8 +27,10 @@ using System; using System.ComponentModel; using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum OperatorType { @@ -257,7 +259,7 @@ public override Identifier NameToken { set { throw new NotSupportedException(); } } - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch (AstNode other, Match match) { OperatorDeclaration o = other as OperatorDeclaration; return o != null && this.MatchAttributesAndModifiers (o, match) && this.OperatorType == o.OperatorType diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/ParameterDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/ParameterDeclaration.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/ParameterDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/ParameterDeclaration.cs index cc69ff1fd..9c8a649d9 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/ParameterDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/ParameterDeclaration.cs @@ -27,8 +27,10 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum ParameterModifier { None, @@ -113,7 +115,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitParameterDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { ParameterDeclaration o = other as ParameterDeclaration; return o != null && this.Attributes.DoMatch(o.Attributes, match) && this.ParameterModifier == o.ParameterModifier diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/PropertyDeclaration.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/PropertyDeclaration.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/PropertyDeclaration.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/PropertyDeclaration.cs index 1f137e0c9..65f9997e9 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/PropertyDeclaration.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/PropertyDeclaration.cs @@ -24,8 +24,10 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class PropertyDeclaration : EntityDeclaration { @@ -80,7 +82,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitPropertyDeclaration (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { PropertyDeclaration o = other as PropertyDeclaration; return o != null && MatchString(this.Name, o.Name) diff --git a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/VariableInitializer.cs b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/VariableInitializer.cs similarity index 84% rename from ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/VariableInitializer.cs rename to ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/VariableInitializer.cs index dbf4bbe3d..178fcc40b 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/TypeMembers/VariableInitializer.cs +++ b/ICSharpCode.NRefactory.PlayScript/Ast/TypeMembers/VariableInitializer.cs @@ -23,8 +23,10 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public class VariableInitializer : AstNode { @@ -54,7 +56,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitNullNode(this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return other == null || other.IsNull; } @@ -62,16 +64,16 @@ protected internal override bool DoMatch(AstNode other, PatternMatching.Match ma #endregion #region PatternPlaceholder - public static implicit operator VariableInitializer(PatternMatching.Pattern pattern) + public static implicit operator VariableInitializer(Pattern pattern) { return pattern != null ? new PatternPlaceholder(pattern) : null; } - sealed class PatternPlaceholder : VariableInitializer, PatternMatching.INode + sealed class PatternPlaceholder : VariableInitializer, INode { - readonly PatternMatching.Pattern child; + readonly Pattern child; - public PatternPlaceholder(PatternMatching.Pattern child) + public PatternPlaceholder(Pattern child) { this.child = child; } @@ -95,12 +97,12 @@ public override S AcceptVisitor(IAstVisitor visitor, T data) return visitor.VisitPatternPlaceholder(this, child, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { return child.DoMatch(other, match); } - bool PatternMatching.INode.DoMatchCollection(Role role, PatternMatching.INode pos, PatternMatching.Match match, PatternMatching.BacktrackingInfo backtrackingInfo) + bool INode.DoMatchCollection(Role role, INode pos, Match match, BacktrackingInfo backtrackingInfo) { return child.DoMatchCollection(role, pos, match, backtrackingInfo); } @@ -165,7 +167,7 @@ public override S AcceptVisitor (IAstVisitor visitor, T data) return visitor.VisitVariableInitializer (this, data); } - protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) + protected internal override bool DoMatch(AstNode other, Match match) { VariableInitializer o = other as VariableInitializer; return o != null && MatchString(this.Name, o.Name) && this.Initializer.DoMatch(o.Initializer, match); diff --git a/ICSharpCode.NRefactory.CSharp/CSharpProjectContent.cs b/ICSharpCode.NRefactory.PlayScript/CSharpProjectContent.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/CSharpProjectContent.cs rename to ICSharpCode.NRefactory.PlayScript/CSharpProjectContent.cs index ae0ba716e..98cffbbe8 100644 --- a/ICSharpCode.NRefactory.CSharp/CSharpProjectContent.cs +++ b/ICSharpCode.NRefactory.PlayScript/CSharpProjectContent.cs @@ -20,13 +20,16 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; -using ICSharpCode.NRefactory.CSharp.TypeSystem; -using ICSharpCode.NRefactory.TypeSystem; + using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Utils; +using ICSharpCode.NRefactory.PatternMatching; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + [Serializable] public class CSharpProjectContent : IProjectContent { diff --git a/ICSharpCode.NRefactory.CSharp/CombineQueryExpressions.cs b/ICSharpCode.NRefactory.PlayScript/CombineQueryExpressions.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/CombineQueryExpressions.cs rename to ICSharpCode.NRefactory.PlayScript/CombineQueryExpressions.cs index 5311d9a24..11015a650 100644 --- a/ICSharpCode.NRefactory.CSharp/CombineQueryExpressions.cs +++ b/ICSharpCode.NRefactory.PlayScript/CombineQueryExpressions.cs @@ -25,11 +25,12 @@ using System; using System.Linq; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + /// /// Combines query expressions and removes transparent identifiers. /// diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.PlayScript/Completion/CSharpCompletionEngine.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs rename to ICSharpCode.NRefactory.PlayScript/Completion/CSharpCompletionEngine.cs index 23ed30c4a..e7fc97d62 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/Completion/CSharpCompletionEngine.cs @@ -28,14 +28,15 @@ using System.Linq; using System.Text; using ICSharpCode.NRefactory.Completion; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Editor; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Completion +namespace ICSharpCode.NRefactory.PlayScript.Completion { public enum EditorBrowsableBehavior { @@ -627,16 +628,24 @@ IEnumerable MagicKeyCompletion(char completionChar, bool contro var text = GetMemberTextToCaret(); var lexer = new MiniLexer(text.Item1); lexer.Parse(); - if (lexer.IsInSingleComment || - lexer.IsInChar || - lexer.IsInMultiLineComment || - lexer.IsInPreprocessorDirective) { - return Enumerable.Empty(); - } - - if (lexer.IsInString || lexer.IsInVerbatimString) - return HandleStringFormatItems(); - return HandleMemberReferenceCompletion(GetExpressionBeforeCursor()); +// if (lexer.IsInSingleComment || +// lexer.IsInChar || +// lexer.IsInMultiLineComment || +// lexer.IsInPreprocessorDirective) { +// return Enumerable.Empty(); +// } +// if (lexer.IsInString || lexer.IsInVerbatimString) +// return HandleStringFormatItems(); +// return HandleMemberReferenceCompletion(GetExpressionBeforeCursor()); + // PlayScript + var wrapper1 = new CompletionDataWrapper(this); + AddTypesAndNamespaces( + wrapper1, + GetState(), + null, + t => currentType != null && !currentType.ReflectionName.Equals(t.ReflectionName) ? t : null + ); + return wrapper1.Result; case '"': text = GetMemberTextToCaret(); lexer = new MiniLexer(text.Item1); @@ -894,14 +903,14 @@ IEnumerable MagicKeyCompletion(char completionChar, bool contro } return null; case ":": - if (currentMember == null) { +// if (currentMember == null) { token = GetPreviousToken(ref tokenIndex, false); token = GetPreviousToken(ref tokenIndex, false); if (token == "enum") return HandleEnumContext(); - var wrapper = new CompletionDataWrapper(this); + var wrapperTwo = new CompletionDataWrapper(this); AddTypesAndNamespaces( - wrapper, + wrapperTwo, GetState(), null, t => { @@ -913,8 +922,8 @@ IEnumerable MagicKeyCompletion(char completionChar, bool contro return t; } ); - return wrapper.Result; - } + return wrapperTwo.Result; +// } return null; } @@ -1023,7 +1032,7 @@ IEnumerable MagicKeyCompletion(char completionChar, bool contro // Do not pop up completion on identifier identifier (should be handled by keyword completion). tokenIndex = offset - 1; token = GetPreviousToken(ref tokenIndex, false); - if (token == "class" || token == "interface" || token == "struct" || token == "enum" || token == "namespace") { + if (token == "class" || token == "interface" || token == "struct" || token == "enum" || token == "package" || token == "var" || token == "const") { // after these always follows a name return null; } @@ -1039,7 +1048,7 @@ IEnumerable MagicKeyCompletion(char completionChar, bool contro int prevTokenIndex = tokenIndex; var prevToken2 = GetPreviousToken(ref prevTokenIndex, false); - if (prevToken2 == "delegate") { + if (prevToken2 == "function") { // after these always follows a name return null; } @@ -1237,7 +1246,7 @@ IEnumerable MagicKeyCompletion(char completionChar, bool contro csResolver = new CSharpResolver(ctx); var nodes = new List(); nodes.Add(n); - if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) { + if (n.Parent is ICSharpCode.NRefactory.PlayScript.Attribute) { nodes.Add(n.Parent); } var astResolver = CompletionContextProvider.GetResolver(csResolver, identifierStart.Unit); @@ -1248,7 +1257,7 @@ IEnumerable MagicKeyCompletion(char completionChar, bool contro csResolver = GetState(); } // add attribute properties. - if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) { + if (n.Parent is ICSharpCode.NRefactory.PlayScript.Attribute) { var rr = ResolveExpression(n.Parent); if (rr != null) AddAttributeProperties(contextList, rr.Result); @@ -2043,9 +2052,9 @@ IEnumerable HandleKeywordCompletion(int wordStart, string word) return null; } switch (word) { - case "namespace": + case "pacakge": return null; - case "using": + case "import": if (currentType != null) { return null; } @@ -3435,7 +3444,7 @@ ExpressionResult GetExpressionAtCursor() ExpressionResult GetExpressionAt(int offset) { - var parser = new CSharpParser(); + var parser = new PlayScriptParser(); var text = GetMemberTextToCaret(); int closingBrackets = 0, generatedLines = 0; @@ -3456,7 +3465,7 @@ ExpressionResult GetExpressionAt(int offset) ExpressionResult GetNewExpressionAt(int offset) { - var parser = new CSharpParser(); + var parser = new PlayScriptParser(); var text = GetMemberTextToCaret(); int closingBrackets = 0, generatedLines = 0; var sb = CreateWrapper("a ();", false, "", text.Item1, text.Item2, ref closingBrackets, ref generatedLines); @@ -3734,7 +3743,8 @@ IEnumerable GetXmlDocumentationCompletionData() "out", "ref", "null", - "delegate", + "undefined", + "function", "default" }; static string[] primitiveTypesKeywords = new string [] { @@ -3753,7 +3763,10 @@ IEnumerable GetXmlDocumentationCompletionData() "float", "double", "decimal", - "string" + "string", + "String", + "Number", + "Boolean" }; static string[] statementStartKeywords = new string [] { "base", "new", "sizeof", "this", "true", "false", "typeof", "checked", "unchecked", "from", "break", "checked", @@ -3763,7 +3776,7 @@ IEnumerable GetXmlDocumentationCompletionData() "catch" }; static string[] globalLevelKeywords = new string [] { - "namespace", "using", "extern", "public", "internal", + "package", "import", "use", "public", "internal", "class", "interface", "struct", "enum", "delegate", "abstract", "sealed", "static", "unsafe", "partial" }; @@ -3774,9 +3787,10 @@ IEnumerable GetXmlDocumentationCompletionData() "public", "internal", "protected", "private", "async", "class", "interface", "struct", "enum", "delegate", "abstract", "sealed", "static", "unsafe", "partial", - "const", "event", "extern", "fixed", "new", + "const", "var", "event", "extern", "fixed", "new", "operator", "explicit", "implicit", - "override", "readonly", "virtual", "volatile" + "override", "readonly", "virtual", "volatile", + "function", "indexer", "operator" }; static string[] linqKeywords = new string[] { "from", diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/ICSharpCode.NRefactory.PlayScript/Completion/CSharpCompletionEngineBase.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs rename to ICSharpCode.NRefactory.PlayScript/Completion/CSharpCompletionEngineBase.cs index c61f77bc5..fbccb6b67 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs +++ b/ICSharpCode.NRefactory.PlayScript/Completion/CSharpCompletionEngineBase.cs @@ -28,14 +28,16 @@ using System.Linq; using System.Text; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.Editor; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem.Implementation; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; +using ICSharpCode.NRefactory; +using ICSharpCode.NRefactory.Completion; -namespace ICSharpCode.NRefactory.CSharp.Completion +namespace ICSharpCode.NRefactory.PlayScript.Completion { /// /// Acts as a common base between code completion and parameter completion. @@ -716,9 +718,9 @@ protected StringBuilder CreateWrapper(string continuation, bool appendSemicolon, var wrapper = new StringBuilder(); bool wrapInClass = memberLocation != new TextLocation(1, 1); if (wrapInClass) { - wrapper.Append("class Stub {"); + wrapper.Append("package { class Stub {"); wrapper.AppendLine(); - closingBrackets++; + closingBrackets += 2; generatedLines++; } wrapper.Append(memberText); @@ -740,10 +742,10 @@ protected SyntaxTree ParseStub(string continuation, bool appendSemicolon = true, string memberText = mt.Item1; var memberLocation = mt.Item2; - int closingBrackets = 1; + int closingBrackets = 0; int generatedLines = 0; var wrapper = CreateWrapper(continuation, appendSemicolon, afterContinuation, memberText, memberLocation, ref closingBrackets, ref generatedLines); - var parser = new CSharpParser (); + var parser = new PlayScriptParser (); foreach (var sym in CompletionContextProvider.ConditionalSymbols) parser.CompilerSettings.ConditionalSymbols.Add (sym); parser.InitialLocation = new TextLocation(memberLocation.Line - generatedLines, 1); diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs b/ICSharpCode.NRefactory.PlayScript/Completion/CSharpParameterCompletionEngine.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs rename to ICSharpCode.NRefactory.PlayScript/Completion/CSharpParameterCompletionEngine.cs index e5919834e..ed10e77b3 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpParameterCompletionEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/Completion/CSharpParameterCompletionEngine.cs @@ -24,16 +24,16 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; -using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.Completion; using System.Collections.Generic; +using System.Linq; +using ICSharpCode.NRefactory.Completion; +using ICSharpCode.NRefactory.Editor; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; -using System.Linq; -namespace ICSharpCode.NRefactory.CSharp.Completion +namespace ICSharpCode.NRefactory.PlayScript.Completion { public class CSharpParameterCompletionEngine : CSharpCompletionEngineBase { @@ -294,7 +294,7 @@ public IParameterDataProvider GetParameterDataProvider(int offset, char completi return factory.CreateConstructorProvider(document.GetOffset(invoke.Node.StartLocation), createType.Result.Type); } - if (invoke.Node is ICSharpCode.NRefactory.CSharp.Attribute) { + if (invoke.Node is ICSharpCode.NRefactory.PlayScript.Attribute) { var attribute = ResolveExpression(invoke); if (attribute == null || attribute.Result == null) { return null; diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs b/ICSharpCode.NRefactory.PlayScript/Completion/CompletionDataWrapper.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs rename to ICSharpCode.NRefactory.PlayScript/Completion/CompletionDataWrapper.cs index 4bf10d937..558178fe1 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs +++ b/ICSharpCode.NRefactory.PlayScript/Completion/CompletionDataWrapper.cs @@ -28,9 +28,9 @@ using ICSharpCode.NRefactory.Completion; using ICSharpCode.NRefactory.TypeSystem; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; -namespace ICSharpCode.NRefactory.CSharp.Completion +namespace ICSharpCode.NRefactory.PlayScript.Completion { public class CompletionDataWrapper { diff --git a/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs b/ICSharpCode.NRefactory.PlayScript/Completion/ICompletionContextProvider.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs rename to ICSharpCode.NRefactory.PlayScript/Completion/ICompletionContextProvider.cs index b6e9822ee..4ede4b33a 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs +++ b/ICSharpCode.NRefactory.PlayScript/Completion/ICompletionContextProvider.cs @@ -27,11 +27,12 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Completion +namespace ICSharpCode.NRefactory.PlayScript.Completion { public interface ICompletionContextProvider { diff --git a/ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs b/ICSharpCode.NRefactory.PlayScript/Completion/ICompletionDataFactory.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs rename to ICSharpCode.NRefactory.PlayScript/Completion/ICompletionDataFactory.cs index da61f8907..966ab3e71 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/ICompletionDataFactory.cs +++ b/ICSharpCode.NRefactory.PlayScript/Completion/ICompletionDataFactory.cs @@ -28,7 +28,7 @@ using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Completion; -namespace ICSharpCode.NRefactory.CSharp.Completion +namespace ICSharpCode.NRefactory.PlayScript.Completion { public interface ICompletionDataFactory { diff --git a/ICSharpCode.NRefactory.CSharp/Completion/IParameterCompletionDataFactory.cs b/ICSharpCode.NRefactory.PlayScript/Completion/IParameterCompletionDataFactory.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Completion/IParameterCompletionDataFactory.cs rename to ICSharpCode.NRefactory.PlayScript/Completion/IParameterCompletionDataFactory.cs index 5bbb64e40..d8a4b2c26 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/IParameterCompletionDataFactory.cs +++ b/ICSharpCode.NRefactory.PlayScript/Completion/IParameterCompletionDataFactory.cs @@ -26,10 +26,10 @@ using System; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.Completion; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp.Completion +namespace ICSharpCode.NRefactory.PlayScript.Completion { public interface IParameterCompletionDataFactory { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/CSharpFormatter.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/CSharpFormatter.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Formatter/CSharpFormatter.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/CSharpFormatter.cs index a6969fea7..e2d7fc91a 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/CSharpFormatter.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/CSharpFormatter.cs @@ -27,11 +27,12 @@ using ICSharpCode.NRefactory.Editor; using System.Threading; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Refactoring; using ICSharpCode.NRefactory.TypeSystem; using System.Collections.Generic; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum FormattingMode { OnTheFly, @@ -87,7 +88,7 @@ public FormattingMode FormattingMode { } /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The formatting policy to use. /// The text editor options (optional). Default is: TextEditorOptions.Default diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/CSharpFormattingOptions.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/CSharpFormattingOptions.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/CSharpFormattingOptions.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/CSharpFormattingOptions.cs index 0a97a1c0b..54928f9ab 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/CSharpFormattingOptions.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/CSharpFormattingOptions.cs @@ -28,7 +28,7 @@ using System.Reflection; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum BraceStyle { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/ConstructFixer.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/ConstructFixer.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/ConstructFixer.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/ConstructFixer.cs index f2fd87547..baacda3bd 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/ConstructFixer.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/ConstructFixer.cs @@ -28,8 +28,9 @@ using System.Text; using System.Reflection; using System.Linq; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { abstract class ConstructCompleter { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingChanges.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingChanges.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingChanges.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingChanges.cs index f60b58bbd..94eb14e24 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingChanges.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingChanges.cs @@ -27,11 +27,11 @@ using ICSharpCode.NRefactory.Editor; using System.Threading; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Refactoring; using ICSharpCode.NRefactory.TypeSystem; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// The formatting changes are used to format a specific region inside a document and apply a minimal formatting diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingOptionsFactory.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingOptionsFactory.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingOptionsFactory.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingOptionsFactory.cs index ff32c1f8c..ff0125be7 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingOptionsFactory.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingOptionsFactory.cs @@ -25,7 +25,7 @@ // THE SOFTWARE. using System; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// The formatting options factory creates pre defined formatting option styles. diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor.cs index 485996c91..fba3064b2 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor.cs @@ -32,8 +32,9 @@ using System.Threading; using System.Collections.Generic; using ICSharpCode.NRefactory.Utils; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { [Obsolete("This class was replaced by CSharpFormatter.")] public class AstFormattingVisitor {} diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Expressions.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Expressions.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Expressions.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Expressions.cs index 582e26fea..41f7bc69b 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Expressions.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Expressions.cs @@ -27,7 +27,7 @@ using System.Linq; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { partial class FormattingVisitor : DepthFirstAstVisitor { @@ -336,7 +336,7 @@ void FormatArguments(AstNode node) arguments = invocationExpression.Arguments.Cast().ToList(); } - if (formatter.FormattingMode == ICSharpCode.NRefactory.CSharp.FormattingMode.OnTheFly) + if (formatter.FormattingMode == ICSharpCode.NRefactory.PlayScript.FormattingMode.OnTheFly) methodCallArgumentWrapping = Wrapping.DoNotChange; int argumentStart = 1; var firstarg = arguments.FirstOrDefault(); diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Global.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Global.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Global.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Global.cs index b91cbdd9a..d9c37b11b 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Global.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Global.cs @@ -26,7 +26,7 @@ using System; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { partial class FormattingVisitor : DepthFirstAstVisitor { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Query.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Query.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Query.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Query.cs index bfdc47640..ee28b4dbb 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Query.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Query.cs @@ -26,7 +26,7 @@ using System; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { partial class FormattingVisitor { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Statements.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Statements.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Statements.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Statements.cs index 3c5c92095..d608bee35 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_Statements.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_Statements.cs @@ -26,8 +26,9 @@ using System; using System.Linq; using ICSharpCode.NRefactory.Editor; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { partial class FormattingVisitor : DepthFirstAstVisitor { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_TypeMembers.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_TypeMembers.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_TypeMembers.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_TypeMembers.cs index 913a61e2e..20438c89c 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/FormattingVisitor_TypeMembers.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/FormattingVisitor_TypeMembers.cs @@ -26,7 +26,7 @@ using System; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { partial class FormattingVisitor : DepthFirstAstVisitor { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/GeneratedCodeSettings.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/GeneratedCodeSettings.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/GeneratedCodeSettings.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/GeneratedCodeSettings.cs index dd2df993e..7ceac5c73 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/GeneratedCodeSettings.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/GeneratedCodeSettings.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum GeneratedCodeMember { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/Indent.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/Indent.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Formatter/Indent.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/Indent.cs index 347e66f6e..d0638c7cd 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/Indent.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/Indent.cs @@ -27,7 +27,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public enum IndentType { diff --git a/ICSharpCode.NRefactory.CSharp/Formatter/TextEditorOptions.cs b/ICSharpCode.NRefactory.PlayScript/Formatter/TextEditorOptions.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Formatter/TextEditorOptions.cs rename to ICSharpCode.NRefactory.PlayScript/Formatter/TextEditorOptions.cs index 7c3eef2d2..7dac7b56f 100644 --- a/ICSharpCode.NRefactory.CSharp/Formatter/TextEditorOptions.cs +++ b/ICSharpCode.NRefactory.PlayScript/Formatter/TextEditorOptions.cs @@ -26,7 +26,7 @@ using System; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// The text editor options class holds basic information about the text editor settings that influences code generation and formatting beside diff --git a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj b/ICSharpCode.NRefactory.PlayScript/ICSharpCode.NRefactory.PlayScript.csproj similarity index 92% rename from ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj rename to ICSharpCode.NRefactory.PlayScript/ICSharpCode.NRefactory.PlayScript.csproj index 80522fbdd..7bf7219d4 100644 --- a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj +++ b/ICSharpCode.NRefactory.PlayScript/ICSharpCode.NRefactory.PlayScript.csproj @@ -1,20 +1,18 @@  - {53DCA265-3C3C-42F9-B647-F72BA678122B} + {0D8EC1C8-9706-4D8B-96F2-8636F2C9F894} Debug AnyCPU Library ICSharpCode.NRefactory.CSharp - ICSharpCode.NRefactory.CSharp + ICSharpCode.NRefactory.PlayScript Properties False False 4 False - 8.0.30703 - 2.0 - true + false ..\ICSharpCode.NRefactory.snk False File @@ -23,6 +21,7 @@ False obj\$(Configuration)\ $(IntermediateOutputPath)ICSharpCode.NRefactory.CSharp.xml + v4.5 AnyCPU @@ -42,47 +41,54 @@ TRACE;FULL_AST;NET_4_0 obj\ - - PdbOnly - True - ..\bin\Release\ - - - full - True - True - ..\bin\Debug\ - False False DEBUG;TRACE;FULL_AST;NET_4_0;NET_4_5 v4.5 - - full - True - True - v4.5 - ..\bin\net_4_5_Debug\ - True False TRACE;FULL_AST;NET_4_0;NET_4_5 v4.5 - + + true + full + ..\bin\Debug\ + DEBUG;TRACE;FULL_AST;NET_4_0;NET_4_5 + True + + none + ..\bin\Release\ + TRACE;FULL_AST;NET_4_0;NET_4_5 True - v4.5 - ..\bin\net_4_5_Release\ + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Cecil.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.CSharp.Refactoring.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.IKVM.dll + + + ..\..\Nrefactory-upstream\bin\Debug\ICSharpCode.NRefactory.Xml.dll + @@ -309,8 +315,6 @@ - - @@ -350,7 +354,6 @@ - @@ -389,12 +392,14 @@ - - - - {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} - ICSharpCode.NRefactory - + + + + + + + + @@ -412,9 +417,16 @@ + - \ No newline at end of file + + + {CBDF3A0D-8B3A-4DEE-B9F9-6FA492A06187} + ICSharpCode.NRefactory.Ps + + + diff --git a/ICSharpCode.NRefactory.CSharp/IndentEngine/CSharpIndentEngine.cs b/ICSharpCode.NRefactory.PlayScript/IndentEngine/CSharpIndentEngine.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/IndentEngine/CSharpIndentEngine.cs rename to ICSharpCode.NRefactory.PlayScript/IndentEngine/CSharpIndentEngine.cs index 478bc45c6..b713314da 100644 --- a/ICSharpCode.NRefactory.CSharp/IndentEngine/CSharpIndentEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/IndentEngine/CSharpIndentEngine.cs @@ -24,12 +24,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using ICSharpCode.NRefactory.Editor; +using ICSharpCode.NRefactory; using System; using System.Collections.Generic; using System.Linq; using System.Text; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Indentation engine based on a state machine. diff --git a/ICSharpCode.NRefactory.CSharp/IndentEngine/CacheIndentEngine.cs b/ICSharpCode.NRefactory.PlayScript/IndentEngine/CacheIndentEngine.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/IndentEngine/CacheIndentEngine.cs rename to ICSharpCode.NRefactory.PlayScript/IndentEngine/CacheIndentEngine.cs index b19f38868..f10427d3a 100644 --- a/ICSharpCode.NRefactory.CSharp/IndentEngine/CacheIndentEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/IndentEngine/CacheIndentEngine.cs @@ -27,8 +27,9 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Represents a decorator of an IStateMachineIndentEngine instance that provides diff --git a/ICSharpCode.NRefactory.CSharp/IndentEngine/IDocumentIndentEngine.cs b/ICSharpCode.NRefactory.PlayScript/IndentEngine/IDocumentIndentEngine.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/IndentEngine/IDocumentIndentEngine.cs rename to ICSharpCode.NRefactory.PlayScript/IndentEngine/IDocumentIndentEngine.cs index 821aa0bc8..9bc6b1021 100644 --- a/ICSharpCode.NRefactory.CSharp/IndentEngine/IDocumentIndentEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/IndentEngine/IDocumentIndentEngine.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using ICSharpCode.NRefactory.Editor; using System; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// The base interface for all indent engines. diff --git a/ICSharpCode.NRefactory.CSharp/IndentEngine/IStateMachineIndentEngine.cs b/ICSharpCode.NRefactory.PlayScript/IndentEngine/IStateMachineIndentEngine.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/IndentEngine/IStateMachineIndentEngine.cs rename to ICSharpCode.NRefactory.PlayScript/IndentEngine/IStateMachineIndentEngine.cs index 44c3949cf..9a5a40132 100644 --- a/ICSharpCode.NRefactory.CSharp/IndentEngine/IStateMachineIndentEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/IndentEngine/IStateMachineIndentEngine.cs @@ -23,7 +23,7 @@ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public interface IStateMachineIndentEngine : IDocumentIndentEngine { diff --git a/ICSharpCode.NRefactory.CSharp/IndentEngine/IndentState.cs b/ICSharpCode.NRefactory.PlayScript/IndentEngine/IndentState.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/IndentEngine/IndentState.cs rename to ICSharpCode.NRefactory.PlayScript/IndentEngine/IndentState.cs index 8867268e6..9f8d79fd2 100644 --- a/ICSharpCode.NRefactory.CSharp/IndentEngine/IndentState.cs +++ b/ICSharpCode.NRefactory.PlayScript/IndentEngine/IndentState.cs @@ -29,7 +29,7 @@ using System.Linq; using System.Text; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { #region IndentState diff --git a/ICSharpCode.NRefactory.CSharp/IndentEngine/NullIStateMachineIndentEngine.cs b/ICSharpCode.NRefactory.PlayScript/IndentEngine/NullIStateMachineIndentEngine.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/IndentEngine/NullIStateMachineIndentEngine.cs rename to ICSharpCode.NRefactory.PlayScript/IndentEngine/NullIStateMachineIndentEngine.cs index b62932e5b..d0dfe5e6d 100644 --- a/ICSharpCode.NRefactory.CSharp/IndentEngine/NullIStateMachineIndentEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/IndentEngine/NullIStateMachineIndentEngine.cs @@ -24,8 +24,9 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// An empty IStateMachineIndentEngine implementation that does nothing. diff --git a/ICSharpCode.NRefactory.CSharp/IndentEngine/TextPasteIndentEngine.cs b/ICSharpCode.NRefactory.PlayScript/IndentEngine/TextPasteIndentEngine.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/IndentEngine/TextPasteIndentEngine.cs rename to ICSharpCode.NRefactory.PlayScript/IndentEngine/TextPasteIndentEngine.cs index 9170b029f..6b1d17cd4 100644 --- a/ICSharpCode.NRefactory.CSharp/IndentEngine/TextPasteIndentEngine.cs +++ b/ICSharpCode.NRefactory.PlayScript/IndentEngine/TextPasteIndentEngine.cs @@ -29,8 +29,9 @@ using System.Linq; using System.Reflection; using System.Text; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Represents a decorator of an IStateMachineIndentEngine instance diff --git a/ICSharpCode.NRefactory.CSharp/IntroduceQueryExpressions.cs b/ICSharpCode.NRefactory.PlayScript/IntroduceQueryExpressions.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/IntroduceQueryExpressions.cs rename to ICSharpCode.NRefactory.PlayScript/IntroduceQueryExpressions.cs index d80ddb82c..d33b65d72 100644 --- a/ICSharpCode.NRefactory.CSharp/IntroduceQueryExpressions.cs +++ b/ICSharpCode.NRefactory.PlayScript/IntroduceQueryExpressions.cs @@ -25,11 +25,12 @@ using System; using System.Diagnostics; using System.Linq; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { + static class NRefactoryExtensions { public static T Detach(this T node) where T : AstNode diff --git a/ICSharpCode.NRefactory.CSharp/NameLookupMode.cs b/ICSharpCode.NRefactory.PlayScript/NameLookupMode.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/NameLookupMode.cs rename to ICSharpCode.NRefactory.PlayScript/NameLookupMode.cs index 3196dc583..75ca66ba4 100644 --- a/ICSharpCode.NRefactory.CSharp/NameLookupMode.cs +++ b/ICSharpCode.NRefactory.PlayScript/NameLookupMode.cs @@ -18,8 +18,11 @@ using System; -namespace ICSharpCode.NRefactory.CSharp +using ICSharpCode.NRefactory.PatternMatching; + +namespace ICSharpCode.NRefactory.PlayScript { + public enum NameLookupMode { /// diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/CSharpAmbience.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/CSharpAmbience.cs index 8476f9515..f961769ff 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/CSharpAmbience.cs @@ -18,10 +18,10 @@ using System; using System.IO; -using ICSharpCode.NRefactory.CSharp.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Refactoring; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// C# ambience. Used to convert type system symbols to text (usually for displaying the symbol to the user; e.g. in editor tooltips) diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/CSharpOutputVisitor.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/CSharpOutputVisitor.cs index 37a014fc2..b15bdf4f5 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/CSharpOutputVisitor.cs @@ -25,9 +25,10 @@ using System.Threading.Tasks; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Outputs the AST. @@ -2247,7 +2248,7 @@ void IAstVisitor.VisitErrorNode(AstNode errorNode) #endregion #region Pattern Nodes - public virtual void VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern) + public virtual void VisitPatternPlaceholder(AstNode placeholder, Pattern pattern) { StartNode(placeholder); VisitNodeInPattern(pattern); diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/CodeDomConvertVisitor.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/CodeDomConvertVisitor.cs index da1f4d6e8..25a9d39fc 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/CodeDomConvertVisitor.cs @@ -21,14 +21,15 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using ICSharpCode.NRefactory.CSharp.Refactoring; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.Semantics; -using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; + -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Converts from C# AST to CodeDom. diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/ITokenWriter.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/ITokenWriter.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/ITokenWriter.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/ITokenWriter.cs index 31b73f987..825f38e61 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/ITokenWriter.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/ITokenWriter.cs @@ -18,8 +18,9 @@ using System; using System.IO; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { public abstract class TokenWriter { diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertMissingTokensDecorator.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertMissingTokensDecorator.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertMissingTokensDecorator.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertMissingTokensDecorator.cs index 3f9200145..da2e51da8 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertMissingTokensDecorator.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertMissingTokensDecorator.cs @@ -19,8 +19,9 @@ using System; using System.Collections.Generic; using System.Linq; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { class InsertMissingTokensDecorator : DecoratingTokenWriter { diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertParenthesesVisitor.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertParenthesesVisitor.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertParenthesesVisitor.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertParenthesesVisitor.cs index 6a4274dc6..97e8b4ae7 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertParenthesesVisitor.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertParenthesesVisitor.cs @@ -18,7 +18,7 @@ using System; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Inserts the parentheses into the AST that are needed to ensure the AST can be printed correctly. diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertRequiredSpacesDecorator.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertRequiredSpacesDecorator.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertRequiredSpacesDecorator.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertRequiredSpacesDecorator.cs index e9aca4bf5..6a03b73a6 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertRequiredSpacesDecorator.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertRequiredSpacesDecorator.cs @@ -26,9 +26,10 @@ using System.Threading.Tasks; using ICSharpCode.NRefactory.PatternMatching; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { class InsertRequiredSpacesDecorator : DecoratingTokenWriter { diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertSpecialsDecorator.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertSpecialsDecorator.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertSpecialsDecorator.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertSpecialsDecorator.cs index 0fafdeef0..707a04e7b 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/InsertSpecialsDecorator.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/InsertSpecialsDecorator.cs @@ -20,9 +20,10 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { class InsertSpecialsDecorator : DecoratingTokenWriter { diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/TextWriterOutputFormatter.cs b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/TextWriterOutputFormatter.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/OutputVisitor/TextWriterOutputFormatter.cs rename to ICSharpCode.NRefactory.PlayScript/OutputVisitor/TextWriterOutputFormatter.cs index 277b1c3e9..32e33801a 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/TextWriterOutputFormatter.cs +++ b/ICSharpCode.NRefactory.PlayScript/OutputVisitor/TextWriterOutputFormatter.cs @@ -20,8 +20,9 @@ using System.Globalization; using System.IO; using System.Text; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// Writes C# code into a TextWriter. diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.PlayScript/Parser/CSharpParser.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/CSharpParser.cs index 04225cde0..6124b9b85 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/CSharpParser.cs @@ -27,13 +27,15 @@ using System.Linq; using System.Collections.Generic; using System.IO; +using System.Text; using ICSharpCode.NRefactory.Editor; -using ICSharpCode.NRefactory.MonoCSharp; +using ICSharpCode.NRefactory.MonoPlayScript; +using Mono.PlayScript; using ICSharpCode.NRefactory.TypeSystem; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { - public class CSharpParser + public class PlayScriptParser { CompilerSettings compilerSettings; @@ -94,7 +96,7 @@ public override void Visit(ModuleContainer mc) if (nspace.Usings != null) { foreach (var us in nspace.Usings) { - us.Accept(this); +// us.Accept(this); } } @@ -177,7 +179,7 @@ void AddTypeArguments(ATypeNameExpression texpr, AstType result) if (loc != null && loc.Count >= 2) result.AddChild(new CSharpTokenNode(Convert(loc [loc.Count - 1]), Roles.RChevron), Roles.RChevron); } - + static AstType ConvertToType(TypeParameter spec) { AstType result; @@ -214,7 +216,7 @@ AstType ConvertToType(MemberName memberName) return result; } - AstType ConvertToType(ICSharpCode.NRefactory.MonoCSharp.Expression typeName) + AstType ConvertToType(ICSharpCode.NRefactory.MonoPlayScript.Expression typeName) { if (typeName == null) // may happen in typeof(Generic<,,,,>) return new SimpleType(); @@ -298,7 +300,7 @@ AstType ConvertToType(ICSharpCode.NRefactory.MonoCSharp.Expression typeName) return new SimpleType("unknown"); } - IEnumerable GetAttributes(IEnumerable optAttributes) + IEnumerable GetAttributes(IEnumerable optAttributes) { if (optAttributes == null) yield break; @@ -357,7 +359,7 @@ IEnumerable GetAttributes(IEnumerable optAttributes) + AttributeSection ConvertAttributeSection(IEnumerable optAttributes) { if (optAttributes == null) return null; @@ -556,7 +558,7 @@ public override void Visit(Class c) if (c.TypeBaseExpressions != null) { if (location != null && curLoc < location.Count) - newType.AddChild(new CSharpTokenNode(Convert(location [curLoc++]), Roles.Colon), Roles.Colon); + newType.AddChild(new CSharpTokenNode(Convert(location [curLoc++]), Roles.ClassKeyword), Roles.ClassKeyword); var commaLocations = LocationsBag.GetLocations(c.TypeBaseExpressions); int i = 0; @@ -605,7 +607,7 @@ public override void Visit(Struct s) if (s.TypeBaseExpressions != null) { if (location != null && curLoc < location.Count) - newType.AddChild(new CSharpTokenNode(Convert(location [curLoc++]), Roles.Colon), Roles.Colon); + newType.AddChild(new CSharpTokenNode(Convert(location [curLoc++]), Roles.ClassKeyword), Roles.ClassKeyword); var commaLocations = LocationsBag.GetLocations(s.TypeBaseExpressions); int i = 0; foreach (var baseTypes in s.TypeBaseExpressions) { @@ -650,7 +652,7 @@ public override void Visit(Interface i) if (i.TypeBaseExpressions != null) { if (location != null && curLoc < location.Count) - newType.AddChild(new CSharpTokenNode(Convert(location [curLoc++]), Roles.Colon), Roles.Colon); + newType.AddChild(new CSharpTokenNode(Convert(location [curLoc++]), Roles.ClassKeyword), Roles.ClassKeyword); var commaLocations = LocationsBag.GetLocations(i.TypeBaseExpressions); int j = 0; foreach (var baseTypes in i.TypeBaseExpressions) { @@ -680,7 +682,7 @@ public override void Visit(Interface i) AddType(newType); } - public override void Visit(ICSharpCode.NRefactory.MonoCSharp.Delegate d) + public override void Visit(ICSharpCode.NRefactory.MonoPlayScript.Delegate d) { var newDelegate = new DelegateDeclaration(); var location = LocationsBag.GetMemberLocation(d); @@ -726,7 +728,7 @@ void AddToNamespace(AstNode child) } } - public override void Visit(ICSharpCode.NRefactory.MonoCSharp.Enum e) + public override void Visit(ICSharpCode.NRefactory.MonoPlayScript.Enum e) { var newType = new TypeDeclaration(); newType.ClassType = ClassType.Enum; @@ -1072,12 +1074,13 @@ public override void Visit(Method m) AddAttributeSection(newMethod, m); var location = LocationsBag.GetMemberLocation(m); AddModifiers(newMethod, location); - newMethod.AddChild(ConvertToType(m.TypeExpression), Roles.Type); AddExplicitInterface(newMethod, m.MethodName); newMethod.AddChild(Identifier.Create(m.MethodName.Name, Convert(m.Location)), Roles.Identifier); AddTypeParameters(newMethod, m.MemberName); - + + newMethod.AddChild(ConvertToType(m.TypeExpression), Roles.Type); + if (location != null && location.Count > 0) newMethod.AddChild(new CSharpTokenNode(Convert(location [0]), Roles.LPar), Roles.LPar); AddParameter(newMethod, m.ParameterInfo); @@ -1106,27 +1109,27 @@ public override void Visit(Method m) typeStack.Peek().AddChild(newMethod, Roles.TypeMemberRole); } - static readonly Dictionary modifierTable = new Dictionary(); + static readonly Dictionary modifierTable = new Dictionary(); static readonly string[] keywordTable; static ConversionVisitor() { - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.NEW] = Modifiers.New; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.PUBLIC] = Modifiers.Public; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.PROTECTED] = Modifiers.Protected; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.PRIVATE] = Modifiers.Private; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.INTERNAL] = Modifiers.Internal; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.ABSTRACT] = Modifiers.Abstract; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.VIRTUAL] = Modifiers.Virtual; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.SEALED] = Modifiers.Sealed; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.STATIC] = Modifiers.Static; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.OVERRIDE] = Modifiers.Override; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.READONLY] = Modifiers.Readonly; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.PARTIAL] = Modifiers.Partial; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.EXTERN] = Modifiers.Extern; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.VOLATILE] = Modifiers.Volatile; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.UNSAFE] = Modifiers.Unsafe; - modifierTable [ICSharpCode.NRefactory.MonoCSharp.Modifiers.ASYNC] = Modifiers.Async; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.NEW] = Modifiers.New; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.PUBLIC] = Modifiers.Public; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.PROTECTED] = Modifiers.Protected; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.PRIVATE] = Modifiers.Private; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.INTERNAL] = Modifiers.Internal; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.ABSTRACT] = Modifiers.Abstract; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.VIRTUAL] = Modifiers.Virtual; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.SEALED] = Modifiers.Sealed; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.STATIC] = Modifiers.Static; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.OVERRIDE] = Modifiers.Override; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.READONLY] = Modifiers.Readonly; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.PARTIAL] = Modifiers.Partial; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.EXTERN] = Modifiers.Extern; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.VOLATILE] = Modifiers.Volatile; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.UNSAFE] = Modifiers.Unsafe; + modifierTable [ICSharpCode.NRefactory.MonoPlayScript.Modifiers.ASYNC] = Modifiers.Async; keywordTable = new string[255]; for (int i = 0; i< keywordTable.Length; i++) @@ -1419,7 +1422,7 @@ public override void Visit(EventProperty ep) #region Statements - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Statement stmt) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Statement stmt) { Console.WriteLine("unknown statement:" + stmt); return null; @@ -1508,14 +1511,14 @@ public override object Visit(BlockConstant blockConstantDeclaration) return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.EmptyStatement emptyStatement) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.EmptyStatement emptyStatement) { var result = new EmptyStatement(); result.Location = Convert(emptyStatement.loc); return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.ErrorExpression errorExpression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.ErrorExpression errorExpression) { return new ErrorExpression(Convert(errorExpression.Location)); } @@ -1591,7 +1594,7 @@ public override object Visit(While whileStatement) return result; } - void AddStatementOrList(ForStatement forStatement, ICSharpCode.NRefactory.MonoCSharp.Statement init, Role role) + void AddStatementOrList(ForStatement forStatement, ICSharpCode.NRefactory.MonoPlayScript.Statement init, Role role) { if (init == null) return; @@ -1600,7 +1603,7 @@ void AddStatementOrList(ForStatement forStatement, ICSharpCode.NRefactory.MonoCS foreach (var stmt in stmtList.Statements) { forStatement.AddChild((Statement)stmt.Accept(this), role); } - } else if (init is ICSharpCode.NRefactory.MonoCSharp.EmptyStatement) { + } else if (init is ICSharpCode.NRefactory.MonoPlayScript.EmptyStatement) { } else { forStatement.AddChild((Statement)init.Accept(this), role); @@ -1661,19 +1664,19 @@ public override object Visit(StatementErrorExpression errorStatement) return result; } - public override object Visit(InvalidStatementExpression invalidStatementExpression) - { - var result = new ExpressionStatement(); - if (invalidStatementExpression.Expression == null) - return result; - var expr = invalidStatementExpression.Expression.Accept(this) as Expression; - if (expr != null) - result.AddChild(expr, Roles.Expression); - var location = LocationsBag.GetLocations(invalidStatementExpression); - if (location != null) - result.AddChild(new CSharpTokenNode(Convert(location [0]), Roles.Semicolon), Roles.Semicolon); - return result; - } +// public object Visit(InvalidStatementExpression invalidStatementExpression) +// { +// var result = new ExpressionStatement(); +// if (invalidStatementExpression.Expression == null) +// return result; +// var expr = invalidStatementExpression.Expression.Accept(this) as Expression; +// if (expr != null) +// result.AddChild(expr, Roles.Expression); +// var location = LocationsBag.GetLocations(invalidStatementExpression); +// if (location != null) +// result.AddChild(new CSharpTokenNode(Convert(location [0]), Roles.Semicolon), Roles.Semicolon); +// return result; +// } public override object Visit(Return returnStatement) { @@ -1784,7 +1787,7 @@ public static bool IsLower(Location left, Location right) public UsingStatement CreateUsingStatement(Block blockStatement) { var usingResult = new UsingStatement(); - ICSharpCode.NRefactory.MonoCSharp.Statement cur = blockStatement.Statements [0]; + ICSharpCode.NRefactory.MonoPlayScript.Statement cur = blockStatement.Statements [0]; var u = cur as Using; if (u != null) { usingResult.AddChild(new CSharpTokenNode(Convert(u.loc), UsingStatement.UsingKeywordRole), UsingStatement.UsingKeywordRole); @@ -1836,7 +1839,7 @@ void AddBlockChildren(BlockStatement result, Block blockStatement, ref int curLo if (convertTypeSystemMode) { return; } - foreach (ICSharpCode.NRefactory.MonoCSharp.Statement stmt in blockStatement.Statements) { + foreach (ICSharpCode.NRefactory.MonoPlayScript.Statement stmt in blockStatement.Statements) { if (stmt == null) continue; /* if (curLocal < localVariables.Count && IsLower (localVariables[curLocal].Location, stmt.loc)) { @@ -2181,7 +2184,7 @@ public override object Visit(YieldBreak yieldBreakStatement) #region Expression - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Expression expression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Expression expression) { Console.WriteLine("Visit unknown expression:" + expression); Console.WriteLine(Environment.StackTrace); @@ -2271,7 +2274,7 @@ public override object Visit(BooleanExpression booleanExpression) return booleanExpression.Expr.Accept(this); } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.ParenthesizedExpression parenthesizedExpression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.ParenthesizedExpression parenthesizedExpression) { var result = new ParenthesizedExpression(); var location = LocationsBag.GetLocations(parenthesizedExpression); @@ -2417,7 +2420,7 @@ public override object Visit(ComposedCast composedCast) return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.DefaultValueExpression defaultValueExpression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.DefaultValueExpression defaultValueExpression) { var result = new DefaultValueExpression(); result.AddChild(new CSharpTokenNode(Convert(defaultValueExpression.Location), DefaultValueExpression.DefaultKeywordRole), DefaultValueExpression.DefaultKeywordRole); @@ -2502,7 +2505,7 @@ public override object Visit(Binary binaryExpression) return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Nullable.NullCoalescingOperator nullCoalescingOperator) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Nullable.NullCoalescingOperator nullCoalescingOperator) { var result = new BinaryOperatorExpression(); result.Operator = BinaryOperatorType.NullCoalescing; @@ -3276,7 +3279,7 @@ public override object Visit(CompoundAssign compoundAssign) return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.AnonymousMethodExpression anonymousMethodExpression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.AnonymousMethodExpression anonymousMethodExpression) { var result = new AnonymousMethodExpression(); var location = LocationsBag.GetLocations(anonymousMethodExpression); @@ -3303,7 +3306,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.AnonymousMethodEx return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.LambdaExpression lambdaExpression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.LambdaExpression lambdaExpression) { var result = new LambdaExpression(); var location = LocationsBag.GetLocations(lambdaExpression); @@ -3371,7 +3374,7 @@ public override object Visit(ArrayInitializer arrayInitializer) QueryOrderClause currentQueryOrderClause; - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.QueryExpression queryExpression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.QueryExpression queryExpression) { var oldQueryOrderClause = currentQueryOrderClause; try { @@ -3400,7 +3403,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.QueryExpress } } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.QueryStartClause queryExpression) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.QueryStartClause queryExpression) { if (queryExpression.Expr == null) { var intoClause = new QueryContinuationClause(); @@ -3427,7 +3430,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.QueryStartCl return fromClause; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.SelectMany selectMany) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.SelectMany selectMany) { var fromClause = new QueryFromClause(); @@ -3447,7 +3450,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.SelectMany s return fromClause; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Select select) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.Select select) { var result = new QuerySelectClause(); result.AddChild(new CSharpTokenNode(Convert(select.Location), QuerySelectClause.SelectKeywordRole), QuerySelectClause.SelectKeywordRole); @@ -3456,7 +3459,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Select selec return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.GroupBy groupBy) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.GroupBy groupBy) { var result = new QueryGroupClause(); var location = LocationsBag.GetLocations(groupBy); @@ -3473,7 +3476,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.GroupBy grou return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Let let) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.Let let) { var result = new QueryLetClause(); var location = LocationsBag.GetLocations(let); @@ -3487,7 +3490,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Let let) return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Where where) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.Where where) { var result = new QueryWhereClause(); result.AddChild(new CSharpTokenNode(Convert(where.Location), QueryWhereClause.WhereKeywordRole), QueryWhereClause.WhereKeywordRole); @@ -3496,7 +3499,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Where where) return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Join join) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.Join join) { var result = new QueryJoinClause(); var location = LocationsBag.GetLocations(join); @@ -3533,7 +3536,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.Join join) return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.GroupJoin groupJoin) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.GroupJoin groupJoin) { var result = new QueryJoinClause(); var location = LocationsBag.GetLocations(groupJoin); @@ -3569,7 +3572,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.GroupJoin gr return result; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.OrderByAscending orderByAscending) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.OrderByAscending orderByAscending) { currentQueryOrderClause = new QueryOrderClause(); var location2 = LocationsBag.GetLocations(orderByAscending.block); @@ -3587,7 +3590,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.OrderByAscen return currentQueryOrderClause; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.OrderByDescending orderByDescending) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.OrderByDescending orderByDescending) { currentQueryOrderClause = new QueryOrderClause(); @@ -3603,7 +3606,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.OrderByDesce return currentQueryOrderClause; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.ThenByAscending thenByAscending) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.ThenByAscending thenByAscending) { var ordering = new QueryOrdering(); if (thenByAscending.Expr != null) @@ -3617,7 +3620,7 @@ public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.ThenByAscend return null; } - public override object Visit(ICSharpCode.NRefactory.MonoCSharp.Linq.ThenByDescending thenByDescending) + public override object Visit(ICSharpCode.NRefactory.MonoPlayScript.Linq.ThenByDescending thenByDescending) { var ordering = new QueryOrdering(); if (thenByDescending.Expr != null) @@ -3714,12 +3717,12 @@ ParameterDeclaration ConvertXmlDocParameter(DocumentationParameter p) } - public CSharpParser() + public PlayScriptParser() { compilerSettings = new CompilerSettings(); } - public CSharpParser(CompilerSettings args) + public PlayScriptParser(CompilerSettings args) { compilerSettings = args ?? new CompilerSettings(); } @@ -3911,13 +3914,16 @@ public SyntaxTree Parse(CompilerCompilationUnit top, string fileName) if (top == null) { return null; } - CSharpParser.ConversionVisitor conversionVisitor = new ConversionVisitor(GenerateTypeSystemMode, top.LocationsBag); + PlayScriptParser.ConversionVisitor conversionVisitor = new ConversionVisitor(GenerateTypeSystemMode, top.LocationsBag); top.ModuleCompiled.Accept(conversionVisitor); + + conversionVisitor.Unit.FixOutOfOrderLocations(); // Reorder locations that are incorrect for PlayScript + InsertComments(top, conversionVisitor); if (CompilationUnitCallback != null) { CompilationUnitCallback(top); } - var expr = top.LastYYValue as ICSharpCode.NRefactory.MonoCSharp.Expression; + var expr = top.LastYYValue as ICSharpCode.NRefactory.MonoPlayScript.Expression; if (expr != null) conversionVisitor.Unit.TopExpression = expr.Accept(conversionVisitor) as AstNode; @@ -4017,13 +4023,26 @@ SyntaxTree Parse(ITextSource program, string fileName, int initialLine, int init var session = new ParserSession(); session.LocationsBag = new LocationsBag(); var report = new Report(ctx, errorReportPrinter); - var parser = Driver.Parse(reader, file, module, session, report, initialLine - 1, initialColumn - 1); - var top = new CompilerCompilationUnit { - ModuleCompiled = module, - LocationsBag = session.LocationsBag, - SpecialsBag = parser.Lexer.sbag, - Conditionals = parser.Lexer.SourceFile.Conditionals - }; + CompilerCompilationUnit top; + if (String.IsNullOrEmpty(fileName) || fileName.EndsWith(".play") || fileName.EndsWith(".as")) { + if (String.IsNullOrEmpty(fileName) || fileName.EndsWith(".play")) + file.PsExtended = true; // Assume playscript unless we have an actual file ext. + var parser = Driver.PsParse(reader, file, module, session, report, initialLine - 1, initialColumn - 1); + top = new CompilerCompilationUnit() { + ModuleCompiled = module, + LocationsBag = session.LocationsBag, + SpecialsBag = parser.Lexer.sbag, + Conditionals = parser.Lexer.SourceFile.Conditionals + }; + } else { + var parser = Driver.PsParse(reader, file, module, session, report, initialLine - 1, initialColumn - 1); + top = new CompilerCompilationUnit() { + ModuleCompiled = module, + LocationsBag = session.LocationsBag, + SpecialsBag = parser.Lexer.sbag, + Conditionals = parser.Lexer.SourceFile.Conditionals + }; + } var unit = Parse(top, fileName); unit.Errors.AddRange(errorReportPrinter.Errors); CompilerCallableEntryPoint.Reset(); @@ -4133,10 +4152,11 @@ public DocumentationReference ParseDocumentationReference(string cref) var report = new Report(ctx, errorReportPrinter); var session = new ParserSession(); session.LocationsBag = new LocationsBag(); - var parser = new ICSharpCode.NRefactory.MonoCSharp.CSharpParser(reader, source_file, report, session); + var parser = new Mono.PlayScript.PlayScriptParser(reader, source_file, report, session); + parser.parsing_playscript = (source_file.SourceFile != null) ? source_file.SourceFile.PsExtended : true; parser.Lexer.Line += initialLocation.Line - 1; parser.Lexer.Column += initialLocation.Column - 1; - parser.Lexer.putback_char = Tokenizer.DocumentationXref; + parser.Lexer.putback_char = Mono.PlayScript.Tokenizer.DocumentationXref; parser.Lexer.parsing_generic_declaration_doc = true; parser.parse(); if (report.Errors > 0) { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CompilerSettings.cs b/ICSharpCode.NRefactory.PlayScript/Parser/CompilerSettings.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Parser/CompilerSettings.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/CompilerSettings.cs index 6a3380e20..be3085803 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CompilerSettings.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/CompilerSettings.cs @@ -20,7 +20,7 @@ using System.Collections.Generic; using ICSharpCode.NRefactory.TypeSystem.Implementation; -namespace ICSharpCode.NRefactory.CSharp +namespace ICSharpCode.NRefactory.PlayScript { /// /// C# compiler settings. @@ -68,7 +68,7 @@ public bool CheckForOverflow { set { checkForOverflow = value; } } - Version languageVersion = new Version((int)ICSharpCode.NRefactory.MonoCSharp.LanguageVersion.Default, 0); + Version languageVersion = new Version((int)ICSharpCode.NRefactory.MonoPlayScript.LanguageVersion.Default, 0); /// /// Gets/Sets the language version used by the parser. @@ -131,12 +131,12 @@ public IList DisabledWarnings { get { return disabledWarnings; } } - internal ICSharpCode.NRefactory.MonoCSharp.CompilerSettings ToMono() + internal ICSharpCode.NRefactory.MonoPlayScript.CompilerSettings ToMono() { - var s = new ICSharpCode.NRefactory.MonoCSharp.CompilerSettings(); + var s = new ICSharpCode.NRefactory.MonoPlayScript.CompilerSettings(); s.Unsafe = allowUnsafeBlocks; s.Checked = checkForOverflow; - s.Version = (ICSharpCode.NRefactory.MonoCSharp.LanguageVersion)languageVersion.Major; + s.Version = (ICSharpCode.NRefactory.MonoPlayScript.LanguageVersion)languageVersion.Major; s.WarningsAreErrors = treatWarningsAsErrors; s.WarningLevel = warningLevel; foreach (int code in disabledWarnings) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/SeekableStreamReader.cs b/ICSharpCode.NRefactory.PlayScript/Parser/SeekableStreamReader.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Parser/SeekableStreamReader.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/SeekableStreamReader.cs index 8243a2dd7..d1d1a3bd6 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/SeekableStreamReader.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/SeekableStreamReader.cs @@ -28,7 +28,7 @@ using System.IO; using System.Text; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public class SeekableStreamReader : IDisposable { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/CryptoConvert.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/CryptoConvert.cs similarity index 100% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/CryptoConvert.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/CryptoConvert.cs diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolFile.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/MonoSymbolFile.cs similarity index 100% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolFile.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/MonoSymbolFile.cs diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/MonoSymbolTable.cs similarity index 100% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/MonoSymbolTable.cs index b032f52fc..60b89a6ca 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/MonoSymbolTable.cs @@ -29,10 +29,10 @@ // using System; -using System.Security.Cryptography; using System.Collections.Generic; -using System.Text; using System.IO; +using System.Security.Cryptography; +using System.Text; // // Parts which are actually written into the symbol file are marked with diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolWriter.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/MonoSymbolWriter.cs similarity index 100% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolWriter.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/MonoSymbolWriter.cs diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/SourceMethodBuilder.cs similarity index 100% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/SourceMethodBuilder.cs diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/anonymous.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/anonymous.cs index fb78b003f..0b8b21521 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/anonymous.cs @@ -18,13 +18,13 @@ #if STATIC using IKVM.Reflection; using IKVM.Reflection.Emit; -using System.Diagnostics; #else using System.Reflection; using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +// ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public abstract class CompilerGeneratedContainer : ClassOrStruct { @@ -956,10 +956,18 @@ protected override Expression DoResolve (ResolveContext rc) public ParametersBlock Block; - public AnonymousMethodExpression (Location loc) + // PlayScript requires us to remember both parameters and return type. (Will be null in C#) + public ParametersCompiled AsParameters; + public FullNamedExpression AsReturnType; + + public AnonymousMethodExpression (Location loc, ParametersCompiled asParameters = null, FullNamedExpression asReturnType = null) { this.loc = loc; this.compatibles = new Dictionary (); + + // Actionscript anon function declarations include concrete parameter types and return types. + this.AsParameters = asParameters; + this.AsReturnType = asReturnType; } #region Properties @@ -1362,6 +1370,11 @@ protected override Expression DoResolve (ResolveContext rc) if (!DoResolveParameters (rc)) return null; + // Cast to Delgate for PlayScript (forces implicit conversion to Func<> or Action<> delegate types). + if (rc.IsPlayScript) { + return new Cast(new TypeExpression(rc.BuiltinTypes.Delegate, this.Location), this, this.Location).Resolve (rc); + } + return this; } @@ -1427,7 +1440,14 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Continue && this.Block != null) + this.Block.Accept (visitor); + } + + return ret; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/argument.cs similarity index 72% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/argument.cs index 83cd673b8..8f79fb948 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/argument.cs @@ -18,8 +18,9 @@ #else using System.Reflection.Emit; #endif +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // Argument expression used for invocation @@ -44,6 +45,10 @@ public enum AType : byte public readonly AType ArgType; public Expression Expr; + // For PlayScript array/object initializer type inference. + public AsArrayInitializer InferArrayInitializer; + public AsObjectInitializer InferObjInitializer; + public Argument (Expression expr, AType type) { this.Expr = expr; @@ -192,6 +197,18 @@ public bool ResolveMethodGroup (ResolveContext ec) public void Resolve (ResolveContext ec) { + // Keep track of the array initializer, we need it to do array type inference when searching for + // a matching method. + if (ec.IsPlayScript) { + if (Expr is AsArrayInitializer) { + InferArrayInitializer = (AsArrayInitializer)Expr; + } else if (Expr is AsObjectInitializer) { + InferObjInitializer = (AsObjectInitializer)Expr; + } else if (Expr is AnonymousMethodExpression) { + Expr = new Cast(new TypeExpression(ec.BuiltinTypes.Delegate, Expr.Location), Expr, Expr.Location); + } + } + // Verify that the argument is readable if (ArgType != AType.Out) Expr = Expr.Resolve (ec); @@ -275,7 +292,7 @@ public Location Location { } } - public class Arguments + public partial class Arguments { sealed class ArgumentsOrdered : Arguments { @@ -354,7 +371,7 @@ public ArrayInitializer CreateDynamicBinderArguments (ResolveContext rc) Location loc = Location.Null; var all = new ArrayInitializer (args.Count, loc); - MemberAccess binder = DynamicExpressionStatement.GetBinderNamespace (loc); + MemberAccess binder = DynamicExpressionStatement.GetBinderNamespace (rc, loc); foreach (Argument a in args) { Arguments dargs = new Arguments (2); @@ -381,21 +398,49 @@ public ArrayInitializer CreateDynamicBinderArguments (ResolveContext rc) new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "IsStaticType", loc)); } - var arg_type = a.Expr.Type; + TypeSpec arg_type; + + if (rc.FileType == SourceFileType.PlayScript && + a.Expr is ArrayInitializer || a.Expr is AsObjectInitializer) { + if (a.Expr is ArrayInitializer) { + arg_type = rc.Module.PredefinedTypes.AsArray.Resolve(); + } else { + arg_type = rc.Module.PredefinedTypes.AsExpandoObject.Resolve(); + } + } else { + arg_type = a.Expr.Type; + } if (arg_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic && arg_type != InternalType.NullLiteral) { MethodGroupExpr mg = a.Expr as MethodGroupExpr; - if (mg != null) { - rc.Report.Error (1976, a.Expr.Location, - "The method group `{0}' cannot be used as an argument of dynamic operation. Consider using parentheses to invoke the method", - mg.Name); - } else if (arg_type == InternalType.AnonymousMethod) { - rc.Report.Error (1977, a.Expr.Location, - "An anonymous method or lambda expression cannot be used as an argument of dynamic operation. Consider using a cast"); - } else if (arg_type.Kind == MemberKind.Void || arg_type == InternalType.Arglist || arg_type.IsPointer) { - rc.Report.Error (1978, a.Expr.Location, - "An expression of type `{0}' cannot be used as an argument of dynamic operation", - arg_type.GetSignatureForError ()); + + bool wasConverted = false; + + // In PlayScript, we try to implicity convert to dynamic, which handles conversions of method groups to delegates, and + // anon methods to delegates. + if (rc.FileType == SourceFileType.PlayScript && (mg != null || arg_type == InternalType.AnonymousMethod)) { + var expr = Convert.ImplicitConversion (rc, a.Expr, rc.BuiltinTypes.Dynamic, loc); + if (expr != null) { + a.Expr = expr; + arg_type = rc.BuiltinTypes.Dynamic; + wasConverted = true; + } + } + + // Failed.. check the C# error + if (!wasConverted) { + if (mg != null) { + rc.Report.Error (1976, a.Expr.Location, + "The method group `{0}' cannot be used as an argument of dynamic operation. Consider using parentheses to invoke the method", + mg.Name); + } else if (arg_type == InternalType.AnonymousMethod) { + rc.Report.Error (1977, a.Expr.Location, + "An anonymous method or lambda expression cannot be used as an argument of dynamic operation. Consider using a cast"); + } else if (arg_type.Kind == MemberKind.Void || arg_type == InternalType.Arglist || arg_type.IsPointer) { + rc.Report.Error (1978, a.Expr.Location, + "An expression of type `{0}' cannot be used as an argument of dynamic operation", + arg_type.GetSignatureForError ()); + } } info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, @@ -670,5 +715,115 @@ public Argument this [int index] { get { return args [index]; } set { args [index] = value; } } + + public void CastDynamicArgs(ResolveContext rc) + { + for (int i = 0; i < args.Count; ++i) { + Argument a = args[i]; + // remove dynamic + a.Expr = EmptyCast.RemoveDynamic(rc, a.Expr); + } + } + + public bool AsTryResolveDynamicArgs (ResolveContext ec, MemberSpec memberSpec) + { + AParametersCollection parameters = null; + int fixedArgsLen = 0; + + if (memberSpec is MethodSpec) { + MethodSpec methodSpec = memberSpec as MethodSpec; + parameters = methodSpec.Parameters; + fixedArgsLen = parameters.FixedParameters.Length; + if (methodSpec.IsExtensionMethod) + fixedArgsLen--; + } else if (memberSpec is IndexerSpec) { + IndexerSpec indexerSpec = memberSpec as IndexerSpec; + parameters = indexerSpec.Parameters; + fixedArgsLen = parameters.FixedParameters.Length; + } + + if (parameters == null) { + return false; + } + + if (fixedArgsLen < args.Count) { + // too many arguments + return false; + } + + for (var i = 0; i < args.Count; i++) { + var arg = args [i]; + var paramType = parameters.Types [i]; + if (arg.Expr.Type.IsDynamic) { + var parCastType = paramType.BuiltinType == BuiltinTypeSpec.Type.Dynamic ? ec.BuiltinTypes.Object : paramType; + var new_arg = new Argument (new Cast ( + new TypeExpression (parCastType, arg.Expr.Location), + arg.Expr, arg.Expr.Location), arg.ArgType); + new_arg.Resolve (ec); + args [i] = new_arg; + } + } + return true; + } + + + // Resolve any dynamic params to the type of the target parameters list (for PlayScript only). + public bool AsTryResolveDynamicArgs (ResolveContext ec, IList candidates) + { + if (candidates.Count == 0) { + return false; + } + + if (candidates.Count == 1) { + // if there's a single candidate, then use it + return AsTryResolveDynamicArgs(ec, candidates[0]); + } + + AParametersCollection parameters = null; + + foreach (MemberSpec memberSpec in candidates) { + + AParametersCollection possibleParams = null; + int fixedArgsLen = 0; + + if (memberSpec is MethodSpec) { + MethodSpec methodSpec = memberSpec as MethodSpec; + possibleParams = methodSpec.Parameters; + fixedArgsLen = possibleParams.FixedParameters.Length; + if (methodSpec.IsExtensionMethod) + fixedArgsLen--; + } else if (memberSpec is IndexerSpec) { + IndexerSpec indexerSpec = memberSpec as IndexerSpec; + possibleParams = indexerSpec.Parameters; + fixedArgsLen = possibleParams.FixedParameters.Length; + } + + if (fixedArgsLen == args.Count) { + if (parameters != null) { + parameters = null; // Can't be more than one - or we give up and do a dynamic call.. + break; + } + parameters = possibleParams; + } + } + + if (parameters != null) { + for (var i = 0; i < args.Count; i++) { + var arg = args [i]; + var paramType = parameters.Types [i]; + if (arg.Expr.Type.IsDynamic) { + var parCastType = paramType.BuiltinType == BuiltinTypeSpec.Type.Dynamic ? ec.BuiltinTypes.Object : paramType; + var new_arg = new Argument (new Cast ( + new TypeExpression (parCastType, arg.Expr.Location), + arg.Expr, arg.Expr.Location), arg.ArgType); + new_arg.Resolve (ec); + args [i] = new_arg; + } + } + return true; + } + + return false; + } } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/assembly.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/assembly.cs index 0850e7204..4c1f6e75b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/assembly.cs @@ -10,7 +10,6 @@ // Copyright 2011-2013 Xamarin Inc // - using System; using System.IO; using System.Collections.Generic; @@ -31,7 +30,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public interface IAssemblyDefinition { @@ -44,7 +43,7 @@ public interface IAssemblyDefinition bool IsFriendAssemblyTo (IAssemblyDefinition assembly); } - public abstract class AssemblyDefinition : IAssemblyDefinition + public abstract partial class AssemblyDefinition : IAssemblyDefinition { // TODO: make it private and move all builder based methods here public AssemblyBuilder Builder; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/assign.cs similarity index 91% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/assign.cs index dc97c63c7..0107367bf 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/assign.cs @@ -20,7 +20,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// This interface is implemented by expressions that can be assigned to. @@ -290,7 +290,7 @@ public void AddressOf (EmitContext ec, AddressOp mode) /// The Assign node takes care of assigning the value of source into /// the expression represented by target. /// - public abstract class Assign : ExpressionStatement { + public abstract partial class Assign : ExpressionStatement { protected Expression target, source; protected Assign (Expression target, Expression source, Location loc) @@ -330,6 +330,7 @@ public override Expression CreateExpressionTree (ResolveContext ec) protected override Expression DoResolve (ResolveContext ec) { bool ok = true; + source = source.Resolve (ec); if (source == null) { @@ -441,7 +442,20 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.target != null) + this.target.Accept (visitor); + if (visitor.Continue && this.source != null) + this.source.Accept (visitor); + } + + return ret; } } @@ -482,7 +496,20 @@ protected override Expression DoResolve (ResolveContext ec) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.source != null) + this.source.Accept (visitor); + if (visitor.Continue && this.target != null) + this.target.Accept (visitor); + } + + return ret; } public override void FlowAnalysis (FlowAnalysisContext fc) @@ -527,7 +554,7 @@ public RuntimeExplicitAssign (Expression target, Expression source) protected override Expression ResolveConversions (ResolveContext ec) { - source = EmptyCast.Create (source, target.Type); + source = EmptyCast.Create (source, target.Type, ec); return this; } } @@ -713,10 +740,10 @@ public override void EmitStatement (EmitContext ec) // // This class is used for compound assignments. // - public class CompoundAssign : Assign + public partial class CompoundAssign : Assign { // This is just a hack implemented for arrays only - public sealed class TargetExpression : Expression + public sealed partial class TargetExpression : Expression { readonly Expression child; @@ -758,7 +785,7 @@ public override Expression EmitToField (EmitContext ec) readonly Binary.Operator op; Expression right; Expression left; - + public Binary.Operator Op { get { return op; @@ -858,21 +885,24 @@ protected override Expression DoResolve (ResolveContext ec) if (target is DynamicMemberBinder) { source = new DynamicMemberBinder (ma.Name, binder_flags, args, loc).Resolve (ec); - // Handles possible event addition/subtraction - if (op == Binary.Operator.Addition || op == Binary.Operator.Subtraction) { - args = new Arguments (targs.Count + 1); - args.AddRange (targs); - args.Add (new Argument (right)); - string method_prefix = op == Binary.Operator.Addition ? - Event.AEventAccessor.AddPrefix : Event.AEventAccessor.RemovePrefix; - - var invoke = DynamicInvocation.CreateSpecialNameInvoke ( - new MemberAccess (right, method_prefix + ma.Name, loc), args, loc).Resolve (ec); - - args = new Arguments (targs.Count); - args.AddRange (targs); - source = new DynamicEventCompoundAssign (ma.Name, args, - (ExpressionStatement) source, (ExpressionStatement) invoke, loc).Resolve (ec); + if (!ec.Module.Compiler.Settings.NewDynamicRuntime_EventAddRemove || (ec.FileType != SourceFileType.PlayScript)) + { + // Handles possible event addition/subtraction + if (op == Binary.Operator.Addition || op == Binary.Operator.Subtraction) { + args = new Arguments (targs.Count + 1); + args.AddRange (targs); + args.Add (new Argument (right)); + string method_prefix = op == Binary.Operator.Addition ? + Event.AEventAccessor.AddPrefix : Event.AEventAccessor.RemovePrefix; + + var invoke = DynamicInvocation.CreateSpecialNameInvoke ( + new MemberAccess (right, method_prefix + ma.Name, loc), args, loc).Resolve (ec); + + args = new Arguments (targs.Count); + args.AddRange (targs); + source = new DynamicEventCompoundAssign (ma.Name, args, + (ExpressionStatement) source, (ExpressionStatement) invoke, loc).Resolve (ec); + } } } else { source = new DynamicIndexBinder (binder_flags, args, loc).Resolve (ec); @@ -962,7 +992,20 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.target != null) + this.target.Accept (visitor); + if (visitor.Continue && this.source != null) + this.source.Accept (visitor); + } + + return ret; } } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/async.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/async.cs index 1959a4e6a..d456fde49 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/async.cs @@ -23,19 +23,19 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public class Await : ExpressionStatement { Expression expr; AwaitStatement stmt; - + public Expression Expression { get { return expr; } } - + public Await (Expression expr, Location loc) { this.expr = expr; @@ -136,7 +136,20 @@ public override void MarkReachable (Reachability rc) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && expr != null) + this.expr.Accept (visitor); + if (visitor.Continue && stmt != null) + this.stmt.Accept (visitor); + } + + return ret; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/attribute.cs similarity index 96% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/attribute.cs index c851a68d7..d7d3f5614 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/attribute.cs @@ -31,8 +31,9 @@ using System.Reflection; using System.Reflection.Emit; #endif +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// Base class for objects that can have Attributes applied to them. @@ -47,11 +48,12 @@ public void AddAttributes (Attributes attrs, IMemberContext context) { if (attrs == null) return; - + if (attributes == null) attributes = attrs; else attributes.AddAttributes (attrs.Attrs); + attrs.AttachTo (this, context); } @@ -155,6 +157,12 @@ public ATypeNameExpression TypeExpression { } } + public ATypeNameExpression TypeNameExpression { + get { + return expression; + } + } + void AddModuleCharSet (ResolveContext rc) { const string dll_import_char_set = "CharSet"; @@ -185,7 +193,7 @@ public Attribute Clone () } // - // When the same attribute is attached to multiple fiels + // When the same attribute is attached to multiple fields // we use @target field as a list of targets. The attribute // has to be resolved only once but emitted for each target. // @@ -453,12 +461,6 @@ public string Name { get { return expression.Name; } } - public ATypeNameExpression TypeNameExpression { - get { - return expression; - } - } - public Report Report { get { return context.Module.Compiler.Report; } } @@ -1203,29 +1205,29 @@ public TypeSpec GetArgumentType () } } - public class Attributes + public partial class Attributes { public readonly List Attrs; -#if FULL_AST + #if FULL_AST public readonly List> Sections = new List> (); -#endif + #endif public Attributes (Attribute a) { Attrs = new List (); Attrs.Add (a); - -#if FULL_AST + #if FULL_AST Sections.Add (Attrs); -#endif + #endif + } public Attributes (List attrs) { Attrs = attrs ?? new List (); -#if FULL_AST + #if FULL_AST Sections.Add (attrs); -#endif + #endif } public void AddAttribute (Attribute attr) @@ -1235,11 +1237,11 @@ public void AddAttribute (Attribute attr) public void AddAttributes (List attrs) { -#if FULL_AST + #if FULL_AST Sections.Add (attrs); -#else + #else Attrs.AddRange (attrs); -#endif + #endif } public void AttachTo (Attributable attributable, IMemberContext context) @@ -1749,8 +1751,24 @@ public class PredefinedAttributes public readonly PredefinedAttribute CallerLineNumberAttribute; public readonly PredefinedAttribute CallerFilePathAttribute; + // ActionScript attributes + public readonly PredefinedAttribute AsDynamicClassAttribute; + public readonly PredefinedAsUntypedAttribute AsUntypedAttribute; + public readonly PredefinedAttribute AsBindableAttribute; + public readonly PredefinedAttribute AsAllowDynamicAttribute; + public readonly PredefinedAttribute AsForbidDynamicAttribute; + + public readonly PredefinedAttribute NumberIsFloatAttribute; + + // Mono.Optimization attributes + public readonly PredefinedAttribute InlineAttribute; + + ModuleContainer module; + public PredefinedAttributes (ModuleContainer module) { + this.module = module; + ParamArray = new PredefinedAttribute (module, "System", "ParamArrayAttribute"); Out = new PredefinedAttribute (module, "System.Runtime.InteropServices", "OutAttribute"); ParamArray.Resolve (); @@ -1812,6 +1830,18 @@ public PredefinedAttributes (ModuleContainer module) CallerLineNumberAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerLineNumberAttribute"); CallerFilePathAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerFilePathAttribute"); + // ActionScript + AsDynamicClassAttribute = new PredefinedAttribute (module, "PlayScript", "DynamicClassAttribute"); + AsUntypedAttribute = new PredefinedAsUntypedAttribute (module, "PlayScript", "AsUntypedAttribute"); + AsBindableAttribute = new PredefinedAttribute (module, PsConsts.PsRootNamespace, "BindableAttribute"); + AsAllowDynamicAttribute = new PredefinedAttribute (module, PsConsts.PsRootNamespace, "AllowDynamicAttribute"); + AsForbidDynamicAttribute = new PredefinedAttribute (module, PsConsts.PsRootNamespace, "ForbidDynamicAttribute"); + + NumberIsFloatAttribute = new PredefinedAttribute (module, "PlayScript", "NumberIsFloatAttribute"); + + // Mono.Optimization + InlineAttribute = new PredefinedAttribute (module, "Mono.Optimization", "InlineAttribute"); + // TODO: Should define only attributes which are used for comparison const System.Reflection.BindingFlags all_fields = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly; @@ -1820,6 +1850,12 @@ public PredefinedAttributes (ModuleContainer module) ((PredefinedAttribute) fi.GetValue (this)).Define (); } } + + public ModuleContainer Module { + get { + return module; + } + } } public class PredefinedAttribute : PredefinedType @@ -1965,7 +2001,7 @@ public void EmitAttribute (AssemblyBuilder builder, System.Diagnostics.Debuggabl return; MethodSpec ctor = null; - foreach (MethodSpec m in MemberCache.FindMembers (atype.TypeSpec, MonoCSharp.Constructor.ConstructorName, true)) { + foreach (MethodSpec m in MemberCache.FindMembers (atype.TypeSpec, ICSharpCode.NRefactory.MonoCSharp.Constructor.ConstructorName, true)) { if (m.Parameters.Count != 1) continue; @@ -2158,8 +2194,26 @@ bool ResolveTransformationCtor (Location loc) if (tctor != null) return true; - tctor = module.PredefinedMembers.DynamicAttributeCtor.Resolve (loc); + tctor = GetTransformationCtor ().Resolve (loc); return tctor != null; } + + virtual protected PredefinedMember GetTransformationCtor () + { + return module.PredefinedMembers.DynamicAttributeCtor; + } + } + + public class PredefinedAsUntypedAttribute : PredefinedDynamicAttribute + { + public PredefinedAsUntypedAttribute (ModuleContainer module, string ns, string name) + : base (module, ns, name) + { + } + + override protected PredefinedMember GetTransformationCtor () + { + return module.PredefinedMembers.AsUntypedAttributeCtor; + } } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cfold.cs similarity index 94% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/cfold.cs index 40079c654..905d36fca 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cfold.cs @@ -10,7 +10,7 @@ // using System; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public static class ConstantFold { @@ -22,6 +22,14 @@ public static TypeSpec[] CreateBinaryPromotionsTypes (BuiltinTypes types) }; } + public static TypeSpec[] CreateAsBinaryPromotionsTypes (BuiltinTypes types) + { + return new TypeSpec[] { + types.Bool, types.Decimal, types.Double, types.Float, + types.ULong, types.Long, types.UInt + }; + } + // // Performs the numeric promotions on the left and right expresions // and deposits the results on `lc' and `rc'. @@ -37,7 +45,11 @@ static bool DoBinaryNumericPromotions (ResolveContext rc, ref Constant left, ref TypeSpec ltype = left.Type; TypeSpec rtype = right.Type; - foreach (TypeSpec t in rc.BuiltinTypes.BinaryPromotionsTypes) { + // PlayScript - AS has bool as an additional binary promotion type. + TypeSpec[] binaryPromotionsTypes = (rc.FileType == SourceFileType.PlayScript ? + rc.BuiltinTypes.AsBinaryPromotionsTypes : rc.BuiltinTypes.BinaryPromotionsTypes); + + foreach (TypeSpec t in binaryPromotionsTypes) { if (t == ltype) return t == rtype || ConvertPromotion (rc, ref right, ref left, t); @@ -45,14 +57,14 @@ static bool DoBinaryNumericPromotions (ResolveContext rc, ref Constant left, ref return t == ltype || ConvertPromotion (rc, ref left, ref right, t); } - left = left.ConvertImplicitly (rc.BuiltinTypes.Int); - right = right.ConvertImplicitly (rc.BuiltinTypes.Int); + left = left.ConvertImplicitly (rc.BuiltinTypes.Int, rc); + right = right.ConvertImplicitly (rc.BuiltinTypes.Int, rc); return left != null && right != null; } static bool ConvertPromotion (ResolveContext rc, ref Constant prim, ref Constant second, TypeSpec type) { - Constant c = prim.ConvertImplicitly (type); + Constant c = prim.ConvertImplicitly (type, rc); if (c != null) { prim = c; return true; @@ -60,8 +72,8 @@ static bool ConvertPromotion (ResolveContext rc, ref Constant prim, ref Constant if (type.BuiltinType == BuiltinTypeSpec.Type.UInt) { type = rc.BuiltinTypes.Long; - prim = prim.ConvertImplicitly (type); - second = second.ConvertImplicitly (type); + prim = prim.ConvertImplicitly (type, rc); + second = second.ConvertImplicitly (type, rc); return prim != null && second != null; } @@ -299,15 +311,34 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, break; case Binary.Operator.Addition: + // + // In PlayScript, null has the string value "null". In C#, it is the empty string. + // +#if !DISABLE_AS3_NULL_STRINGS + var nullString = ec.IsPlayScript ? "null" : ""; +#else + var nullString = ""; +#endif + // // If both sides are strings, then concatenate // // string operator + (string x, string y) // - if (lt.BuiltinType == BuiltinTypeSpec.Type.String || rt.BuiltinType == BuiltinTypeSpec.Type.String){ - if (lt == rt) - return new StringConstant (ec.BuiltinTypes, (string)left.GetValue () + (string)right.GetValue (), - left.Location); + if (lt.BuiltinType == BuiltinTypeSpec.Type.String || rt.BuiltinType == BuiltinTypeSpec.Type.String) { + if (lt == rt) { + var leftValue = left.GetValue () ?? nullString; + var rightValue = right.GetValue () ?? nullString; + return new StringConstant (ec.BuiltinTypes, (string)leftValue + (string)rightValue, left.Location); + } + + if (ec.IsPlayScript) { + if (lt == InternalType.NullLiteral) + return new StringConstant (ec.BuiltinTypes, nullString + right.GetValue (), left.Location); + + if (rt == InternalType.NullLiteral) + return new StringConstant (ec.BuiltinTypes, left.GetValue () + nullString, left.Location); + } if (lt == InternalType.NullLiteral || left.IsNull) return new StringConstant (ec.BuiltinTypes, "" + right.GetValue (), left.Location); @@ -323,7 +354,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, // if (lt == InternalType.NullLiteral) { if (rt.BuiltinType == BuiltinTypeSpec.Type.Object) - return new StringConstant (ec.BuiltinTypes, "" + right.GetValue (), left.Location); + return new StringConstant (ec.BuiltinTypes, nullString + right.GetValue (), left.Location); if (lt == rt) { ec.Report.Error (34, loc, "Operator `{0}' is ambiguous on operands of type `{1}' and `{2}'", @@ -339,7 +370,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, // if (rt == InternalType.NullLiteral) { if (lt.BuiltinType == BuiltinTypeSpec.Type.Object) - return new StringConstant (ec.BuiltinTypes, right.GetValue () + "", left.Location); + return new StringConstant (ec.BuiltinTypes, left.GetValue () + nullString, left.Location); return left; } @@ -358,7 +389,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, } // U has to be implicitly convetible to E.base - right = right.ConvertImplicitly (lc.Child.Type); + right = right.ConvertImplicitly (lc.Child.Type, ec); if (right == null) return null; @@ -477,7 +508,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, } // U has to be implicitly convetible to E.base - right = right.ConvertImplicitly (lc.Child.Type); + right = right.ConvertImplicitly (lc.Child.Type, ec); if (right == null) return null; @@ -894,7 +925,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, return (Constant) new Binary (oper, lifted_int, right).ResolveOperator (ec); } - IntConstant ic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant; + IntConstant ic = right.ConvertImplicitly (ec.BuiltinTypes.Int, ec) as IntConstant; if (ic == null){ return null; } @@ -913,7 +944,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, if (left is NullLiteral) return (Constant) new Binary (oper, left, right).ResolveOperator (ec); - left = left.ConvertImplicitly (ec.BuiltinTypes.Int); + left = left.ConvertImplicitly (ec.BuiltinTypes.Int, ec); if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int) return new IntConstant (ec.BuiltinTypes, ((IntConstant) left).Value << lshift_val, left.Location); @@ -929,7 +960,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, return (Constant) new Binary (oper, lifted_int, right).ResolveOperator (ec); } - IntConstant sic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant; + IntConstant sic = right.ConvertImplicitly (ec.BuiltinTypes.Int, ec) as IntConstant; if (sic == null){ return null; } @@ -947,7 +978,7 @@ static public Constant BinaryFold (ResolveContext ec, Binary.Operator oper, if (left is NullLiteral) return (Constant) new Binary (oper, left, right).ResolveOperator (ec); - left = left.ConvertImplicitly (ec.BuiltinTypes.Int); + left = left.ConvertImplicitly (ec.BuiltinTypes.Int, ec); if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int) return new IntConstant (ec.BuiltinTypes, ((IntConstant) left).Value >> rshift_val, left.Location); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/class.cs similarity index 87% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/class.cs index d14c59535..b181b3f58 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/class.cs @@ -35,13 +35,14 @@ using System.Reflection; using System.Reflection.Emit; #endif +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // General types container, used as a base class for all constructs which can hold types // - public abstract class TypeContainer : MemberCore + public abstract partial class TypeContainer : MemberCore { public readonly MemberKind Kind; @@ -51,8 +52,16 @@ public abstract class TypeContainer : MemberCore protected Dictionary defined_names; + // Playscript "static" and "instance" names + protected Dictionary defined_static_names; + protected Dictionary defined_instance_names; + protected bool is_defined; + // Should dynamic code be allowed in this container? + protected bool? allow_dynamic; + + public int CounterAnonymousTypes { get; set; } public int CounterAnonymousMethods { get; set; } public int CounterAnonymousContainers { get; set; } public int CounterSwitchTypes { get; set; } @@ -62,6 +71,8 @@ protected TypeContainer (TypeContainer parent, MemberName name, Attributes attrs { this.Kind = kind; defined_names = new Dictionary (); + defined_static_names = new Dictionary (); + defined_instance_names = new Dictionary (); } public override TypeSpec CurrentType { @@ -76,6 +87,18 @@ public Dictionary DefinedNames { } } + public Dictionary DefinedStaticNames { + get { + return defined_static_names; + } + } + + public Dictionary DefinedInstanceNames { + get { + return defined_instance_names; + } + } + public TypeDefinition PartialContainer { get { return main_container; @@ -91,6 +114,21 @@ public IList Containers { } } + public virtual bool? AllowDynamic { + get { + if (allow_dynamic != null) { + return allow_dynamic; + } else if (this.Parent != null) { + return this.Parent.AllowDynamic; + } else { + return Compiler.Settings.AllowDynamic; + } + } + set { + allow_dynamic = value; + } + } + // // Any unattached attributes during parsing get added here. User // by FULL_AST mode @@ -254,8 +292,12 @@ public override bool Define () // Release cache used by parser only if (Module.Evaluator == null) { defined_names = null; + defined_static_names = null; + defined_instance_names = null; } else { defined_names.Clear (); + defined_static_names.Clear (); + defined_instance_names.Clear (); } return true; @@ -359,8 +401,12 @@ public override string GetSignatureForError () return MemberName.GetSignatureForError (); } - public virtual string GetSignatureForMetadata () + public string GetSignatureForMetadata () { + if (Parent is TypeDefinition) { + return Parent.GetSignatureForMetadata () + "+" + TypeNameParser.Escape (MemberName.Basename); + } + var sb = new StringBuilder (); CreateMetadataName (sb); return sb.ToString (); @@ -391,9 +437,37 @@ public override void WriteDebugSymbol (MonoSymbolFile file) } } } + + protected void AcceptChildContainers (StructuralVisitor visitor) + { + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && containers != null && containers.Count > 0) { + foreach (var container in containers) { + if (visitor.Continue) { + if (container is TypeDefinition && visitor.Depth >= VisitDepth.Types) + container.Accept (visitor); + else if (container is NamespaceContainer && visitor.Depth >= VisitDepth.Namespaces) + container.Accept (visitor); + } + } + } + } + } + + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + + AcceptChildContainers (visitor); + } + } - public abstract class TypeDefinition : TypeContainer, ITypeDefinition + public abstract partial class TypeDefinition : TypeContainer, ITypeDefinition { // // Different context is needed when resolving type container base @@ -472,6 +546,13 @@ public FullNamedExpression LookupNamespaceOrType (string name, int arity, Lookup return tc.Parent.LookupNamespaceOrType (name, arity, mode, loc); } + public SourceFileType FileType + { + get { + return tc.Location.SourceFile != null ? tc.Location.SourceFile.FileType : SourceFileType.CSharp; + } + } + #endregion } @@ -626,7 +707,7 @@ public bool HasMembersDefined { return members_defined; } } - + public List TypeBaseExpressions { get { return type_bases; @@ -747,28 +828,26 @@ public override string[] ValidAttributeTargets { } } -#if FULL_AST - public bool HasOptionalSemicolon { - get; - private set; - } - Location optionalSemicolon; - public Location OptionalSemicolon { - get { - return optionalSemicolon; - } - set { - optionalSemicolon = value; - HasOptionalSemicolon = true; - } - } -#endif - #endregion public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue) + AcceptChildContainers (visitor); + if (visitor.Continue && members != null && members.Count > 0 && visitor.Depth >= VisitDepth.Members) { + foreach (var member in members) { + if (visitor.Continue && (visitor.Depth & VisitDepth.Members) != 0) + member.Accept (visitor); + } + } + } } public void AddMember (MemberCore symbol) @@ -785,6 +864,15 @@ public void AddMember (MemberCore symbol) members.Add (symbol); } + public void ReplaceMember (MemberCore oldsymbol, MemberCore newsymbol) + { + var i = members.IndexOf (oldsymbol); + if (i == -1) + throw new InvalidOperationException("No member to replace"); + members[i] = newsymbol; + ReplaceNameInContainer (newsymbol, newsymbol.MemberName.Basename); + } + public override void AddTypeContainer (TypeContainer tc) { AddNameToContainer (tc, tc.MemberName.Basename); @@ -811,9 +899,22 @@ public virtual void AddNameToContainer (MemberCore symbol, string name) return; MemberCore mc; - if (!PartialContainer.defined_names.TryGetValue (name, out mc)) { - PartialContainer.defined_names.Add (name, symbol); - return; + + if (this.FileType == SourceFileType.PlayScript && symbol is MethodCore || symbol is Property) { + if (!PartialContainer.defined_names.TryGetValue (name, out mc)) { + PartialContainer.defined_names.Add (name, symbol); + } + var inst_or_static_names = (symbol.ModFlags & Modifiers.STATIC) != 0 ? + PartialContainer.defined_static_names : PartialContainer.defined_instance_names; + if (!inst_or_static_names.TryGetValue (name, out mc)) { + inst_or_static_names.Add (name, symbol); + return; + } + } else { + if (!PartialContainer.defined_names.TryGetValue (name, out mc)) { + PartialContainer.defined_names.Add (name, symbol); + return; + } } if (symbol.EnableOverloadChecks (mc)) @@ -840,6 +941,43 @@ public virtual void AddNameToContainer (MemberCore symbol, string name) return; } + + // + // Replaces the member in the defined_names table. + // + public virtual void ReplaceNameInContainer (MemberCore newsymbol, string name) + { + if (((ModFlags | newsymbol.ModFlags) & Modifiers.COMPILER_GENERATED) != 0) + return; + + MemberCore mc; + if (PartialContainer.defined_names.TryGetValue (name, out mc)) { + PartialContainer.defined_names[name] = newsymbol; + } + + // Handle static/instance name dictionaries for PlayScript + if (this.FileType == SourceFileType.PlayScript) { + var inst_or_static_names = (newsymbol.ModFlags & Modifiers.STATIC) != 0 ? + PartialContainer.defined_static_names : PartialContainer.defined_instance_names; + if (inst_or_static_names.TryGetValue (name, out mc)) + inst_or_static_names.Add (name, newsymbol); + } + } + + public MemberCore LookupNameInContainer(string name, Modifiers modifiers) { + MemberCore mc = null; + if (this.FileType == SourceFileType.PlayScript) { + if ((modifiers & Modifiers.STATIC) != 0) { + PartialContainer.defined_static_names.TryGetValue (name, out mc); + } else { + PartialContainer.defined_instance_names.TryGetValue (name, out mc); + } + } else { + PartialContainer.defined_names.TryGetValue (name, out mc); + } + + return mc; + } public void AddConstructor (Constructor c) { @@ -982,6 +1120,44 @@ public bool IsComImport { } } + // Is this an ActionScript dynamic class? + public bool IsAsDynamicClass { + get { + if (base_type != null) { + if (base_type.IsAsDynamicClass) + return true; + } + + if (OptAttributes == null) + return false; + + if (Module.PredefinedAttributes != null) { + return OptAttributes.Contains (Module.PredefinedAttributes.AsDynamicClassAttribute); + } else { + foreach (var attr in OptAttributes.Attrs) { + var memAcc = attr.TypeExpression as MemberAccess; + if (memAcc != null) { + var simpName = memAcc.LeftExpression as SimpleName; + if (simpName != null && simpName.Name == "PlayScript" && memAcc.Name == "DynamicClassAttribute") { + return true; + } + } + } + return false; + } + } + } + + // Is this an actionscript bindable class? + public bool IsAsBindableClass { + get { + if (OptAttributes == null) + return false; + + return OptAttributes.Contains (Module.PredefinedAttributes.AsBindableAttribute); + } + } + public void RegisterFieldForInitialization (MemberCore field, FieldInitializer expression) { if (IsPartialPart) @@ -1145,13 +1321,20 @@ public virtual CompilationSourceFile GetCompilationSourceFile () } } - public override string GetSignatureForMetadata () + public virtual void AddBaseForPart (FullNamedExpression aBase) { - if (Parent is TypeDefinition) { - return Parent.GetSignatureForMetadata () + "+" + TypeNameParser.Escape (FilterNestedName (MemberName.Basename)); + if (type_bases == null) + type_bases = new List (); + type_bases.Add (aBase); + } + + public virtual void AddBasesForPart (List bases) + { + if (bases.Count > 0) { + if (type_bases == null) + type_bases = new List (); + type_bases.AddRange (bases); } - - return base.GetSignatureForMetadata (); } public virtual void SetBaseTypes (List baseTypes) @@ -1171,7 +1354,18 @@ public virtual void SetBaseTypes (List baseTypes) /// protected virtual TypeSpec[] ResolveBaseTypes (out FullNamedExpression base_class) { - base_class = null; + // PlayScript will default to the "_root.Object" base class.. not null. + if (this.Location.SourceFile != null && + this.Location.SourceFile.FileType == SourceFileType.PlayScript && + this is Class && !this.IsStatic) { + base_class = new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "Object"); + base_type = base_class.ResolveAsType (new BaseContext (this)); + if (base_type == null) + base_class = null; + } else { + base_class = null; + } + if (type_bases == null) return null; @@ -1807,6 +2001,8 @@ public override bool CreateContainer () protected override void DoDefineContainer () { + allow_dynamic = CheckAllowDynamic (); + DefineBaseTypes (); DoResolveTypeParameters (); @@ -2010,6 +2206,34 @@ protected virtual bool DoDefineMembers () } var count = members.Count; + + // PlayScript: Switch non null "const" fields to vars. + if (this.Location.SourceFile != null && this.Location.SourceFile.FileType == SourceFileType.PlayScript) { + for (int i = 0; i < count; ++i) { + var c = members[i] as Const; + if (c == null) + continue; + + var t = c.TypeExpression.ResolveAsType (this); + if (t.IsStruct || t.BuiltinType == BuiltinTypeSpec.Type.String) + continue; + + if (c.Initializer == null || (c.Initializer is NullConstant) || (c.Initializer is NullLiteral)) + continue; + + var f = new Field(this, c.TypeExpression, c.ModFlags | Modifiers.READONLY, c.MemberName, c.OptAttributes); + if (c.Initializer != null) { + if (c.Initializer is ConstInitializer) { + f.Initializer = ((ConstInitializer)c.Initializer).Expr; + } else { + f.Initializer = c.Initializer; + } + } + + ReplaceMember (c, f); + } + } + for (int i = 0; i < count; ++i) { var mc = members[i] as InterfaceMemberBase; if (mc == null || !mc.IsExplicitImpl) @@ -2191,11 +2415,8 @@ public override void VerifyMembers () base.VerifyMembers (); } - public override void Emit () + private void ValidateEmit () { - if (OptAttributes != null) - OptAttributes.Emit (); - if (!IsCompilerGenerated) { if (!IsTopLevel) { MemberSpec candidate; @@ -2231,6 +2452,14 @@ public override void Emit () } } } + } + + public override void Emit () + { + if (OptAttributes != null) + OptAttributes.Emit (); + + ValidateEmit (); if (all_tp_builders != null) { int current_starts_index = CurrentTypeParametersStartIndex; @@ -2270,7 +2499,6 @@ public override void Emit () pending.VerifyPendingMethods (); } - void CheckAttributeClsCompliance () { if (!spec.IsAttribute || !IsExposedFromAssembly () || !Compiler.Settings.VerifyClsCompliance || !IsClsComplianceRequired ()) @@ -2344,6 +2572,7 @@ public bool MethodModifiersValid (MemberCore mc) const Modifiers nv = (Modifiers.NEW | Modifiers.VIRTUAL); bool ok = true; var flags = mc.ModFlags; + var isPlay = this.Location.SourceFile != null && this.Location.SourceFile.FileType == SourceFileType.PlayScript; // // At most one of static, virtual or override @@ -2391,7 +2620,7 @@ public bool MethodModifiersValid (MemberCore mc) } } - if ((flags & Modifiers.PRIVATE) != 0){ + if (!isPlay && (flags & Modifiers.PRIVATE) != 0){ if ((flags & vao) != 0){ Report.Error (621, mc.Location, "`{0}': virtual or abstract members cannot be private", mc.GetSignatureForError ()); ok = false; @@ -2609,7 +2838,7 @@ public override string DocCommentHeader { } } - public abstract class ClassOrStruct : TypeDefinition + public abstract partial class ClassOrStruct : TypeDefinition { public const TypeAttributes StaticClassAttribute = TypeAttributes.Abstract | TypeAttributes.Sealed; @@ -2774,8 +3003,7 @@ public override void Emit () } } - - public sealed class Class : ClassOrStruct + public sealed partial class Class : ClassOrStruct { const Modifiers AllowedModifiers = Modifiers.NEW | @@ -2792,13 +3020,64 @@ public Class (TypeContainer parent, MemberName name, Modifiers mod, Attributes a : base (parent, name, attrs, MemberKind.Class) { var accmods = IsTopLevel ? Modifiers.INTERNAL : Modifiers.PRIVATE; - this.ModFlags = ModifiersExtensions.Check (AllowedModifiers, mod, accmods, Location, Report); + var allowedMods = AllowedModifiers; + // Modify allowed modifiers for classes in PlayScript + if (this.Location.SourceFile != null && this.Location.SourceFile.FileType == SourceFileType.PlayScript) { + allowedMods = allowedMods | Modifiers.AS_DYNAMIC & ~Modifiers.UNSAFE; // Dynamic classes yes, but no unsafe code in AS + if (!this.Location.SourceFile.PsExtended) { // Normal AS does not support STATIC or ABSTRACT classes either + allowedMods &= ~(Modifiers.ABSTRACT | Modifiers.NEW); + if (!name.Basename.EndsWith("_fn")) + allowedMods &= ~Modifiers.STATIC; // Only function classes can be static in standard AS + } + + // Add "Dynamic" attribute for dynamic classes + if ((mod & Modifiers.AS_DYNAMIC) != 0) { + + // Check if attribute was already added.. + bool attribute_exists = false; + if (attributes != null) { + foreach (var checkAttr in attributes.Attrs) { + var memberAcc = checkAttr.TypeExpression as MemberAccess; + if (memberAcc != null) { + var simpName = memberAcc.LeftExpression as SimpleName; + if (simpName != null && simpName.Name == "PlayScript" && memberAcc.Name == "DynamicClassAttribute") { + attribute_exists = true; + break; + } + } + } + } + + // No? Then add it. + if (!attribute_exists) { + var attr = new Attribute(null, new MemberAccess(new SimpleName("PlayScript", parent.Location), + "DynamicClassAttribute", parent.Location), null, parent.Location, false); + AddAttributes(new Attributes(attr), this); + } + } + } + this.ModFlags = ModifiersExtensions.Check (allowedMods, mod, accmods, Location, Report); spec = new TypeSpec (Kind, null, this, null, ModFlags); } public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue) + AcceptChildContainers (visitor); + if (visitor.Continue && Members != null && Members.Count > 0 && visitor.Depth >= VisitDepth.Members) { + foreach (var member in Members) { + if (visitor.Continue) + member.Accept (visitor); + } + } + } } public override void SetBaseTypes (List baseTypes) @@ -2848,6 +3127,15 @@ public override AttributeTargets AttributeTargets { protected override bool DoDefineMembers () { + // + // We provide a mechanism to use single precision floats instead of + // doubles for the PlayScript Number type via the [NumberIsFloat] + // attribute. This is a class/interface level attribute that we apply + // recursively using a visitor. + // + if (OptAttributes != null && OptAttributes.Contains (Module.PredefinedAttributes.NumberIsFloatAttribute)) + Accept (new DoubleToFloatConverter (this)); + if ((ModFlags & Modifiers.ABSTRACT) == Modifiers.ABSTRACT && (ModFlags & (Modifiers.SEALED | Modifiers.STATIC)) != 0) { Report.Error (418, Location, "`{0}': an abstract class cannot be sealed or static", GetSignatureForError ()); } @@ -2999,7 +3287,106 @@ public override string[] ConditionalConditions () } } - public sealed class Struct : ClassOrStruct + public sealed class DoubleToFloatConverter : StructuralVisitor + { + TypeContainer tc; + + public DoubleToFloatConverter (TypeContainer root) + { + AutoVisit = true; + tc = root; + } + + public override void Visit (Constructor c) + { + base.Visit (c); + + if (c.ParameterInfo != null) + VisitParameters (c.ParameterInfo.FixedParameters as Parameter[]); + } + + public override void Visit (Field f) + { + base.Visit (f); + + if (ConvertToFloat (f.TypeExpression)) + ConvertToFloat (f.Initializer); + } + + public override void Visit (Const c) + { + base.Visit (c); + + if (ConvertToFloat (c.TypeExpression)) { + if (c.Initializer is ConstInitializer) { + var initializer = c.Initializer as ConstInitializer; + ConvertToFloat (initializer.Expr); + } + } + } + + public override void Visit (Property p) + { + base.Visit (p); + + ConvertToFloat (p.TypeExpression); + if (p.Get != null && p.Get.ParameterInfo != null) + VisitParameters (p.Get.ParameterInfo.FixedParameters as Parameter[]); + if (p.Set != null && p.Set.ParameterInfo != null) + VisitParameters (p.Set.ParameterInfo.FixedParameters as Parameter[]); + } + + public override void Visit (Method m) + { + base.Visit (m); + + ConvertToFloat (m.TypeExpression); + if (m.ParameterInfo != null) + VisitParameters (m.ParameterInfo.FixedParameters as Parameter[]); + } + + private void VisitParameters (Parameter[] parameters) + { + if (parameters != null) { + foreach (Parameter param in parameters) + ConvertToFloat (param.TypeExpression); + } + } + + public override object Visit (BlockVariable b) + { + var result = base.Visit (b); + + ConvertToFloat (b.TypeExpression); + if (b.Declarators != null) { + foreach (BlockVariableDeclarator declarator in b.Declarators) + ConvertToFloat (declarator.TypeExpression); + } + + return result; + } + + public override object Visit (BlockConstant b) + { + var result = base.Visit (b); + + ConvertToFloat (b.TypeExpression); + ConvertToFloat (b.Initializer); + + return result; + } + + private bool ConvertToFloat (Expression e) + { + if (e != null && e.Type != null && e.Type.BuiltinType == BuiltinTypeSpec.Type.Double) { + e.Type = tc.Compiler.BuiltinTypes.Float; + return true; + } + return false; + } + } + + public sealed partial class Struct : ClassOrStruct { bool is_unmanaged, has_unmanaged_check_done; bool InTransit; @@ -3032,6 +3419,21 @@ public override AttributeTargets AttributeTargets { public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue) + AcceptChildContainers (visitor); + if (visitor.Continue && Members != null && Members.Count > 0 && visitor.Depth >= VisitDepth.Members) { + foreach (var member in Members) { + if (visitor.Continue) + member.Accept (visitor); + } + } + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -3245,9 +3647,38 @@ protected override TypeAttributes TypeAttr { #endregion + protected override bool DoDefineMembers () + { + // + // We provide a mechanism to use single precision floats instead of + // doubles for the PlayScript Number type via the [NumberIsFloat] + // attribute. This is a class/interface level attribute that we apply + // recursively using a visitor. + // + if (OptAttributes != null && OptAttributes.Contains (Module.PredefinedAttributes.NumberIsFloatAttribute)) + Accept (new DoubleToFloatConverter (this)); + + return base.DoDefineMembers (); + } + public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue) + AcceptChildContainers (visitor); + if (visitor.Continue && Members != null && Members.Count > 0 && visitor.Depth >= VisitDepth.Members) { + foreach (var member in Members) { + if (visitor.Continue) + member.Accept (visitor); + } + } + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -3280,7 +3711,7 @@ protected override bool VerifyClsCompliance () } } - public abstract class InterfaceMemberBase : MemberBase + public abstract partial class InterfaceMemberBase : MemberBase { // // Common modifiers allowed in a class declaration @@ -3376,27 +3807,7 @@ protected override bool CheckBase () if ((ModFlags & Modifiers.OVERRIDE) != 0) { if (base_member == null) { - if (candidate == null) { - if (this is Method && ((Method)this).ParameterInfo.IsEmpty && MemberName.Name == Destructor.MetadataName && MemberName.Arity == 0) { - Report.Error (249, Location, "Do not override `{0}'. Use destructor syntax instead", - "object.Finalize()"); - } else { - Report.Error (115, Location, "`{0}' is marked as an override but no suitable {1} found to override", - GetSignatureForError (), SimpleName.GetMemberType (this)); - } - } else { - Report.SymbolRelatedToPreviousError (candidate); - if (this is Event) - Report.Error (72, Location, "`{0}': cannot override because `{1}' is not an event", - GetSignatureForError (), TypeManager.GetFullNameSignature (candidate)); - else if (this is PropertyBase) - Report.Error (544, Location, "`{0}': cannot override because `{1}' is not a property", - GetSignatureForError (), TypeManager.GetFullNameSignature (candidate)); - else - Report.Error (505, Location, "`{0}': cannot override because `{1}' is not a method", - GetSignatureForError (), TypeManager.GetFullNameSignature (candidate)); - } - + Error_OverrideWithoutBase (candidate); return false; } @@ -3640,7 +4051,7 @@ protected override void DoMemberTypeDependentChecks () VarianceDecl.CheckTypeVariance (MemberType, ExpectedMemberTypeVariance, this); } - public override void Emit() + private void CheckExternImpl () { // for extern static method must be specified either DllImport attribute or MethodImplAttribute. // We are more strict than csc and report this as an error because SRE does not allow emit that @@ -3654,6 +4065,11 @@ public override void Emit() GetSignatureForError ()); } } + } + + public override void Emit() + { + CheckExternImpl (); base.Emit (); } @@ -3692,6 +4108,30 @@ protected void Error_CannotChangeAccessModifiers (MemberCore member, MemberSpec base_member.GetSignatureForError ()); } + protected virtual void Error_OverrideWithoutBase (MemberSpec candidate) + { + if (candidate == null) { + if (this is Method && ((Method) this).ParameterInfo.IsEmpty && MemberName.Name == Destructor.MetadataName && MemberName.Arity == 0) { + Report.Error (249, Location, "Do not override `{0}'. Use destructor syntax instead", + "object.Finalize()"); + } else { + Report.Error (115, Location, "`{0}' is marked as an override but no suitable {1} found to override", + GetSignatureForError (), SimpleName.GetMemberType (this)); + } + } else { + Report.SymbolRelatedToPreviousError (candidate); + if (this is Event) + Report.Error (72, Location, "`{0}': cannot override because `{1}' is not an event", + GetSignatureForError (), TypeManager.GetFullNameSignature (candidate)); + else if (this is PropertyBase) + Report.Error (544, Location, "`{0}': cannot override because `{1}' is not a property", + GetSignatureForError (), TypeManager.GetFullNameSignature (candidate)); + else + Report.Error (505, Location, "`{0}': cannot override because `{1}' is not a method", + GetSignatureForError (), TypeManager.GetFullNameSignature (candidate)); + } + } + protected void Error_StaticReturnType () { Report.Error (722, Location, @@ -3742,7 +4182,7 @@ public string GetFullName (string name) public override string GetSignatureForDocumentation () { if (IsExplicitImpl) - return Parent.GetSignatureForDocumentation () + "." + InterfaceType.GetSignatureForDocumentation (true) + "#" + ShortName; + return Parent.GetSignatureForDocumentation () + "." + InterfaceType.GetExplicitNameSignatureForDocumentation () + "#" + ShortName; return Parent.GetSignatureForDocumentation () + "." + ShortName; } @@ -3903,6 +4343,19 @@ protected virtual bool ResolveMemberType () throw new InternalErrorException ("Multi-resolve"); member_type = type_expr.ResolveAsType (this); + + // + // Switch the type from dynamic to "*" if the AsUntyped attribute is present. + // This is required to use the "*" type in C# code. + // + if (member_type == Module.Compiler.BuiltinTypes.Dynamic) { + if (OptAttributes != null) { + var a = OptAttributes.Search (Module.PredefinedAttributes.AsUntypedAttribute); + if (a != null && a.ExplicitTarget == "return") + member_type = Module.Compiler.BuiltinTypes.AsUntyped; + } + } + return member_type != null; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/codegen.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/codegen.cs index fb21028bf..7ba3ac405 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/codegen.cs @@ -24,7 +24,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// An Emit Context is created for each body of code (from methods, @@ -74,7 +74,13 @@ public class EmitContext : BuilderContext /// Whether we are inside an anonymous method. /// public AnonymousExpression CurrentAnonymousMethod; - + + + // + // MSIL Intrinsic context information. + // +// public MsilIntrinsicContext IntrinsicContext; + readonly IMemberContext member_context; readonly SourceMethodBuilder methodSymbols; @@ -259,7 +265,7 @@ public bool Mark (Location loc) return false; var sf = loc.SourceFile; - if (sf.IsHiddenLocation (loc)) + if (sf == null || sf.IsHiddenLocation (loc)) return false; #if NET_4_0 diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/complete.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/complete.cs index 95c95f120..cd22b4680 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/complete.cs @@ -17,7 +17,7 @@ using System.Collections.Generic; using System.Linq; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { // // A common base class for Completing expressions, it diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/const.cs similarity index 77% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/const.cs index 56b1869ba..5bd474dcc 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/const.cs @@ -15,7 +15,7 @@ using System.Reflection; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public class Const : FieldBase { @@ -62,10 +62,12 @@ public override bool Define () new FieldInitializer (this, initializer, Location)); if (declarators != null) { - var t = new TypeExpression (MemberType, TypeExpression.Location); foreach (var d in declarators) { + var t = new TypeExpression (d.Type, TypeExpression.Location); var c = new Const (Parent, t, ModFlags & ~Modifiers.STATIC, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); c.initializer = d.Initializer; + if (d.Initializer is ConstInitializer) + ((ConstInitializer)d.Initializer).Field = c; ((ConstInitializer) c.initializer).Name = d.Name.Value; c.Define (); Parent.PartialContainer.Members.Add (c); @@ -110,6 +112,22 @@ public static void Error_InvalidConstantType (TypeSpec t, Location loc, Report R public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && this.Initializer != null && visitor.Depth >= VisitDepth.Initializers) + this.Initializer.Accept (visitor); + if (visitor.Continue && declarators != null && visitor.Depth >= VisitDepth.Initializers) { + foreach (var decl in declarators) { + if (visitor.Continue && decl.Initializer != null) { + decl.Initializer.Accept (visitor); + } + } + } + } } } @@ -148,13 +166,13 @@ public Constant GetConstant (ResolveContext rc) public class ConstInitializer : ShimExpression { bool in_transit; - readonly FieldBase field; + public FieldBase Field; public ConstInitializer (FieldBase field, Expression value, Location loc) : base (value) { this.loc = loc; - this.field = field; + this.Field = field; } public string Name { get; set; } @@ -165,14 +183,14 @@ protected override Expression DoResolve (ResolveContext unused) return expr; var opt = ResolveContext.Options.ConstantScope; - if (field is EnumMember) + if (Field is EnumMember) opt |= ResolveContext.Options.EnumScope; // // Use a context in which the constant was declared and // not the one in which is referenced // - var rc = new ResolveContext (field, opt); + var rc = new ResolveContext (Field, opt); expr = DoResolveInitializer (rc); type = expr.Type; @@ -182,7 +200,7 @@ protected override Expression DoResolve (ResolveContext unused) protected virtual Expression DoResolveInitializer (ResolveContext rc) { if (in_transit) { - field.Compiler.Report.Error (110, expr.Location, + Field.Compiler.Report.Error (110, expr.Location, "The evaluation of the constant value for `{0}' involves a circular definition", GetSignatureForError ()); @@ -197,24 +215,24 @@ protected virtual Expression DoResolveInitializer (ResolveContext rc) if (expr != null) { Constant c = expr as Constant; if (c != null) - c = field.ConvertInitializer (rc, c); + c = Field.ConvertInitializer (rc, c); if (c == null) { - if (TypeSpec.IsReferenceType (field.MemberType)) - Error_ConstantCanBeInitializedWithNullOnly (rc, field.MemberType, expr.Location, GetSignatureForError ()); + if (TypeSpec.IsReferenceType (Field.MemberType)) + Error_ConstantCanBeInitializedWithNullOnly (rc, Field.MemberType, expr.Location, GetSignatureForError ()); else if (!(expr is Constant)) Error_ExpressionMustBeConstant (rc, expr.Location, GetSignatureForError ()); else - expr.Error_ValueCannotBeConverted (rc, field.MemberType, false); + expr.Error_ValueCannotBeConverted (rc, Field.MemberType, false); } expr = c; } if (expr == null) { - expr = New.Constantify (field.MemberType, Location); + expr = New.Constantify (Field.MemberType, Location, rc.FileType); if (expr == null) - expr = Constant.CreateConstantFromValue (field.MemberType, null, Location); + expr = Constant.CreateConstantFromValue (Field.MemberType, null, Location); expr = expr.Resolve (rc); } @@ -224,14 +242,25 @@ protected virtual Expression DoResolveInitializer (ResolveContext rc) public override string GetSignatureForError () { if (Name == null) - return field.GetSignatureForError (); + return Field.GetSignatureForError (); - return field.Parent.GetSignatureForError () + "." + Name; + return Field.Parent.GetSignatureForError () + "." + Name; } public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + } + + return ret; } } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/constant.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/constant.cs index e36447128..39c06dfaf 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/constant.cs @@ -19,12 +19,12 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// Base class for constants and literals. /// - public abstract class Constant : Expression + public abstract partial class Constant : Expression { static readonly NumberFormatInfo nfi = CultureInfo.InvariantCulture.NumberFormat; @@ -60,7 +60,7 @@ public virtual object GetTypedValue () public override void Error_ValueCannotBeConverted (ResolveContext ec, TypeSpec target, bool expl) { - if (!expl && IsLiteral && type.BuiltinType != BuiltinTypeSpec.Type.Double && + if (!expl && IsLiteral && BuiltinTypeSpec.IsPrimitiveTypeOrDecimal (target) && BuiltinTypeSpec.IsPrimitiveTypeOrDecimal (type)) { ec.Report.Error (31, loc, "Constant value `{0}' cannot be converted to a `{1}'", @@ -72,7 +72,7 @@ public override void Error_ValueCannotBeConverted (ResolveContext ec, TypeSpec t public Constant ImplicitConversionRequired (ResolveContext ec, TypeSpec type) { - Constant c = ConvertImplicitly (type); + Constant c = ConvertImplicitly (type, ec); if (c == null) Error_ValueCannotBeConverted (ec, type, false); @@ -84,16 +84,16 @@ public override bool ContainsEmitWithAwait () return false; } - public virtual Constant ConvertImplicitly (TypeSpec type) + public virtual Constant ConvertImplicitly (TypeSpec type, ResolveContext opt_ec, bool upconvert_only = false) { if (this.type == type) return this; - if (!Convert.ImplicitNumericConversionExists (this.type, type)) + if (!Convert.ImplicitNumericConversionExists (this.type, type, opt_ec, upconvert_only)) return null; bool fail; - object constant_value = ChangeType (GetValue (), type, out fail); + object constant_value = ChangeType (GetValue (), type, opt_ec, out fail); if (fail){ // // We should always catch the error before this is ever @@ -113,33 +113,33 @@ public static Constant CreateConstantFromValue (TypeSpec t, object v, Location l { switch (t.BuiltinType) { case BuiltinTypeSpec.Type.Int: - return new IntConstant (t, (int) v, loc); + return new IntConstant (t, System.Convert.ToInt32 (v), loc); case BuiltinTypeSpec.Type.String: return new StringConstant (t, (string) v, loc); case BuiltinTypeSpec.Type.UInt: - return new UIntConstant (t, (uint) v, loc); + return new UIntConstant (t, System.Convert.ToUInt32 (v), loc); case BuiltinTypeSpec.Type.Long: - return new LongConstant (t, (long) v, loc); + return new LongConstant (t, System.Convert.ToInt64 (v), loc); case BuiltinTypeSpec.Type.ULong: - return new ULongConstant (t, (ulong) v, loc); + return new ULongConstant (t, System.Convert.ToUInt64 (v), loc); case BuiltinTypeSpec.Type.Float: - return new FloatConstant (t, (float) v, loc); + return new FloatConstant (t, System.Convert.ToSingle (v), loc); case BuiltinTypeSpec.Type.Double: - return new DoubleConstant (t, (double) v, loc); + return new DoubleConstant (t, System.Convert.ToDouble (v), loc); case BuiltinTypeSpec.Type.Short: - return new ShortConstant (t, (short) v, loc); + return new ShortConstant (t, System.Convert.ToInt16 (v), loc); case BuiltinTypeSpec.Type.UShort: - return new UShortConstant (t, (ushort) v, loc); + return new UShortConstant (t, System.Convert.ToUInt16 (v), loc); case BuiltinTypeSpec.Type.SByte: - return new SByteConstant (t, (sbyte) v, loc); + return new SByteConstant (t, System.Convert.ToSByte (v), loc); case BuiltinTypeSpec.Type.Byte: - return new ByteConstant (t, (byte) v, loc); + return new ByteConstant (t, System.Convert.ToByte (v), loc); case BuiltinTypeSpec.Type.Char: - return new CharConstant (t, (char) v, loc); + return new CharConstant (t, System.Convert.ToChar (v), loc); case BuiltinTypeSpec.Type.Bool: - return new BoolConstant (t, (bool) v, loc); + return new BoolConstant (t, System.Convert.ToBoolean (v), loc); case BuiltinTypeSpec.Type.Decimal: - return new DecimalConstant (t, (decimal) v, loc); + return new DecimalConstant (t, System.Convert.ToDecimal (v), loc); } if (t.IsEnum) { @@ -258,11 +258,11 @@ public override Expression CreateExpressionTree (ResolveContext ec) /// It throws OverflowException /// // DON'T CALL THIS METHOD DIRECTLY AS IT DOES NOT HANDLE ENUMS - public abstract Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type); + public abstract Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec); // This is a custom version of Convert.ChangeType() which works // with the TypeBuilder defined types when compiling corlib. - static object ChangeType (object value, TypeSpec targetType, out bool error) + static object ChangeType (object value, TypeSpec targetType, ResolveContext opt_ec, out bool error) { IConvertible convert_value = value as IConvertible; @@ -271,6 +271,36 @@ static object ChangeType (object value, TypeSpec targetType, out bool error) return null; } + // PlayScript: Make sure we convert NaN, Ivaluenity, -Infinity, +Infinity to 0 for int conversions. + if (opt_ec != null && opt_ec.FileType == SourceFileType.PlayScript && (value is double || value is float)) { + switch (targetType.BuiltinType) { + case BuiltinTypeSpec.Type.Bool: + case BuiltinTypeSpec.Type.Byte: + case BuiltinTypeSpec.Type.SByte: + case BuiltinTypeSpec.Type.Char: + case BuiltinTypeSpec.Type.Short: + case BuiltinTypeSpec.Type.UShort: + case BuiltinTypeSpec.Type.Int: + case BuiltinTypeSpec.Type.UInt: + case BuiltinTypeSpec.Type.Long: + case BuiltinTypeSpec.Type.ULong: + case BuiltinTypeSpec.Type.Decimal: + if (value is double && + (double.IsNaN((double)value) || double.IsInfinity((double)value) || + double.IsNegativeInfinity((double)value) || double.IsPositiveInfinity((double)value))) + { + value = 0.0; + } + if (value is float && + (float.IsNaN((float)value) || float.IsInfinity((float)value) || + float.IsNegativeInfinity((float)value) || float.IsPositiveInfinity((float)value))) + { + value = 0.0f; + } + break; + } + } + // // We cannot rely on build-in type conversions as they are // more limited than what C# supports. @@ -346,7 +376,7 @@ public Constant Reduce (ResolveContext ec, TypeSpec target_type) Error_ValueCannotBeConverted (ec, target_type, false); } - return New.Constantify (target_type, loc); + return New.Constantify (target_type, loc, ec.FileType); } } @@ -380,7 +410,7 @@ Constant TryReduceConstant (ResolveContext ec, TypeSpec target_type) return new EnumConstant (c, target_type); } - return ConvertExplicitly (ec.ConstantCheckState, target_type); + return ConvertExplicitly (ec.ConstantCheckState, target_type, ec); } /// @@ -458,11 +488,6 @@ public override System.Linq.Expressions.Expression MakeExpression (BuilderContex // It exists only as hint not to call Resolve on constants return true; } - - public override object Accept (StructuralVisitor visitor) - { - return visitor.Visit (this); - } } @@ -478,7 +503,7 @@ protected IntegralConstant (TypeSpec type, Location loc) public override void Error_ValueCannotBeConverted (ResolveContext ec, TypeSpec target, bool expl) { try { - ConvertExplicitly (true, target); + ConvertExplicitly (true, target, ec); base.Error_ValueCannotBeConverted (ec, target, expl); } catch @@ -494,6 +519,7 @@ public override string GetValueAsLiteral () } public abstract Constant Increment (); + } public class BoolConstant : Constant { @@ -557,7 +583,7 @@ public override bool IsZeroInteger { get { return Value == false; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { return null; } @@ -626,7 +652,7 @@ public override bool IsZeroInteger { get { return Value == 0; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.SByte: @@ -749,7 +775,7 @@ public override bool IsZeroInteger { get { return Value == '\0'; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -854,7 +880,7 @@ public override bool IsZeroInteger { get { return Value == 0; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -957,7 +983,7 @@ public override bool IsOneInteger { } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1070,7 +1096,7 @@ public override bool IsZeroInteger { get { return Value == 0; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1179,7 +1205,7 @@ public override bool IsZeroInteger { get { return Value == 0; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1235,7 +1261,7 @@ public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec ta return null; } - public override Constant ConvertImplicitly (TypeSpec type) + public override Constant ConvertImplicitly (TypeSpec type, ResolveContext opt_ec, bool upconvert_only) { if (this.type == type) return this; @@ -1244,7 +1270,7 @@ public override Constant ConvertImplicitly (TypeSpec type) if (c != null) return c; //.Resolve (rc); - return base.ConvertImplicitly (type); + return base.ConvertImplicitly (type, opt_ec, upconvert_only); } /// @@ -1355,7 +1381,7 @@ public override bool IsZeroInteger { get { return Value == 0; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1472,7 +1498,7 @@ public override bool IsZeroInteger { get { return Value == 0; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1532,13 +1558,13 @@ public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec ta return null; } - public override Constant ConvertImplicitly (TypeSpec type) + public override Constant ConvertImplicitly (TypeSpec type, ResolveContext opt_ec, bool upconvert_only) { if (Value >= 0 && type.BuiltinType == BuiltinTypeSpec.Type.ULong) { return new ULongConstant (type, (ulong) Value, loc); } - return base.ConvertImplicitly (type); + return base.ConvertImplicitly (type, opt_ec, upconvert_only); } } @@ -1603,7 +1629,7 @@ public override bool IsZeroInteger { get { return Value == 0; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1672,12 +1698,13 @@ public FloatConstant (TypeSpec type, double v, Location loc) DoubleValue = v; } - public override Constant ConvertImplicitly (TypeSpec type) +// public override Constant ConvertImplicitly (TypeSpec type) + public override Constant ConvertImplicitly (TypeSpec type, ResolveContext opt_ec, bool upconvert_only = false) { if (type.BuiltinType == BuiltinTypeSpec.Type.Double) return new DoubleConstant (type, DoubleValue, loc); - return base.ConvertImplicitly (type); + return base.ConvertImplicitly (type, opt_ec, upconvert_only); } public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) @@ -1723,7 +1750,7 @@ public override bool IsNegative { } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1791,7 +1818,7 @@ public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec ta } - public class DoubleConstant : Constant + public partial class DoubleConstant : Constant { public readonly double Value; @@ -1846,7 +1873,7 @@ public override bool IsNegative { } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Byte: @@ -1912,6 +1939,7 @@ public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec ta return null; } + } public class DecimalConstant : Constant { @@ -1990,7 +2018,7 @@ public override bool IsNegative { } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.SByte: @@ -2036,7 +2064,7 @@ public override long GetValueAsLong () } } - public class StringConstant : Constant { + public partial class StringConstant : Constant { public StringConstant (BuiltinTypes types, string s, Location loc) : this (types.String, s, loc) { @@ -2126,17 +2154,17 @@ public override bool IsNull { } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { return null; } - public override Constant ConvertImplicitly (TypeSpec type) + public override Constant ConvertImplicitly (TypeSpec type, ResolveContext opt_ec, bool upconvert_only = false) { if (IsDefaultValue && type.BuiltinType == BuiltinTypeSpec.Type.Object) return new NullConstant (type, loc); - return base.ConvertImplicitly (type); + return base.ConvertImplicitly (type, opt_ec, upconvert_only); } } @@ -2269,7 +2297,7 @@ public Expression ResolveOverload (ResolveContext rc, Arguments args) // // Null constant can have its own type, think of `default (Foo)' // - public class NullConstant : Constant + public partial class NullConstant : Constant { public NullConstant (TypeSpec type, Location loc) : base (loc) @@ -2329,7 +2357,7 @@ public override string ExprClassName { } } - public override Constant ConvertExplicitly (bool inCheckedContext, TypeSpec targetType) + public override Constant ConvertExplicitly (bool inCheckedContext, TypeSpec targetType, ResolveContext opt_ec) { if (targetType.IsPointer) { if (IsLiteral || this is NullPointer) @@ -2342,7 +2370,7 @@ public override Constant ConvertExplicitly (bool inCheckedContext, TypeSpec targ if (targetType.Kind == MemberKind.InternalCompilerType && targetType.BuiltinType != BuiltinTypeSpec.Type.Dynamic) return null; - if (!IsLiteral && !Convert.ImplicitStandardConversionExists (this, targetType)) + if (!IsLiteral && !Convert.ImplicitStandardConversionExists (this, targetType, opt_ec)) return null; if (TypeSpec.IsReferenceType (targetType)) @@ -2354,9 +2382,9 @@ public override Constant ConvertExplicitly (bool inCheckedContext, TypeSpec targ return null; } - public override Constant ConvertImplicitly (TypeSpec targetType) + public override Constant ConvertImplicitly (TypeSpec targetType, ResolveContext opt_ec, bool upconvert_only = false) { - return ConvertExplicitly (false, targetType); + return ConvertExplicitly (false, targetType, opt_ec); } public override string GetSignatureForError () @@ -2500,9 +2528,9 @@ public override bool IsZeroInteger { get { return value.IsZeroInteger; } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { - Constant new_value = value.ConvertExplicitly (in_checked_context, target_type); + Constant new_value = value.ConvertExplicitly (in_checked_context, target_type, opt_ec); if (new_value == null) return null; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/context.cs similarity index 86% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/context.cs index 841d73bcc..1389b4001 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/context.cs @@ -15,8 +15,9 @@ using System.IO; using System.Security.Cryptography; using System.Diagnostics; +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public enum LookupMode { @@ -207,7 +208,13 @@ public enum Options ExpressionTreeConversion = 1 << 25, - InvokeSpecialName = 1 << 26 + InvokeSpecialName = 1 << 26, + + PsExtended = 1 << 27, + + PsDynamicDisabled = 1 << 28, + + HasNoReturnType = 1 << 29, } // utility helper for CheckExpr, UnCheckExpr, Checked and Unchecked statements @@ -244,6 +251,9 @@ public void Dispose () protected Options flags; + protected SourceFileType fileType; + protected bool isPlayScript; + // // Whether we are inside an anonymous method. // @@ -258,6 +268,13 @@ public void Dispose () public readonly IMemberContext MemberContext; + + //83aec9d3 M Ben Cooley 06/25/2013 Activated inliner. Only functions work.. void functions will fail. /// If this is non-null, points to the current statement + /// + /// If this is non-null, points to the current statement + /// + public Statement Statement; + public ResolveContext (IMemberContext mc) { if (mc == null) @@ -275,6 +292,46 @@ public ResolveContext (IMemberContext mc) // The constant check state is always set to true // flags |= Options.ConstantCheckState; + + // + // File type set from member context module sourcefile. + // + var memberCore = mc as MemberCore; + if (memberCore != null && memberCore.Location.SourceFile != null) { + fileType = memberCore.Location.SourceFile.FileType; + } else if (mc.Module != null && mc.Module.Location.SourceFile != null) { + fileType = mc.Module.Location.SourceFile.FileType; + if (mc.Module.Location.SourceFile.PsExtended) + flags |= Options.PsExtended; + } else { + fileType = SourceFileType.CSharp; + } + isPlayScript = fileType == SourceFileType.PlayScript ? true : false; + + // + // Set dynamic enabled state + // + if (memberCore is MethodCore) { + if (!(((MethodCore)mc).AllowDynamic ?? true)) + flags |= Options.PsDynamicDisabled; + } else if (memberCore is TypeDefinition) { + if (!(((TypeDefinition)mc).AllowDynamic ?? true)) + flags |= Options.PsDynamicDisabled; + } else if (memberCore != null && memberCore.Parent != null) { + if (!(memberCore.Parent.AllowDynamic ?? true)) + flags |= Options.PsDynamicDisabled; + } else { + if (!Module.Compiler.Settings.AllowDynamic) + flags |= Options.PsDynamicDisabled; + } + + // + // Handle missing return type + // + if (memberCore is Method) { + if (((Method)memberCore).HasNoReturnType) + flags |= Options.HasNoReturnType; + } } public ResolveContext (IMemberContext mc, Options options) @@ -345,6 +402,12 @@ public bool IsUnsafe { } } + public bool AllowDynamic { + get { + return (flags & Options.PsDynamicDisabled) == 0; + } + } + public bool IsRuntimeBinder { get { return Module.Compiler.IsRuntimeBinder; @@ -357,6 +420,12 @@ public bool IsVariableCapturingRequired { } } + public bool HasNoReturnType { + get { + return (flags & Options.HasNoReturnType) != 0; + } + } + public ModuleContainer Module { get { return MemberContext.Module; @@ -369,6 +438,40 @@ public Report Report { } } + public SourceFileType FileType { + get { return fileType; } + set { fileType = value; } + } + + public bool IsPlayScript { + get { return isPlayScript; } + } + + public bool PsExtended { + get { return (flags & Options.PsExtended) != 0; } + set { + if (value) + flags |= Options.PsExtended; + else + flags &= ~Options.PsExtended; + } + } + + public bool PsNumberIsFloat { + get { + if (CurrentMemberDefinition != null && CurrentMemberDefinition.Parent != null) { + var attributes = CurrentMemberDefinition.Parent.OptAttributes; + if (attributes != null && attributes.Contains (Module.PredefinedAttributes.NumberIsFloatAttribute)) + return true; + } + return false; + } + } + + public Target Target { + get { return Module.Compiler.Settings.Target; } + } + #endregion public bool MustCaptureVariable (INamedBlockVariable local) @@ -777,6 +880,7 @@ public class ParserSession public LocationsBag LocationsBag { get; set; } public bool UseJayGlobalArrays { get; set; } public LocatedToken[] LocatedTokens { get; set; } + public Mono.PlayScript.LocatedToken[] AsLocatedTokens { get; set; } public MD5 GetChecksumAlgorithm () { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/convert.cs similarity index 74% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/convert.cs index fb949f393..7d1f39c8f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/convert.cs @@ -20,7 +20,9 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +using Mono.PlayScript; + +namespace ICSharpCode.NRefactory.MonoPlayScript { // // A container class for all the conversion operations @@ -57,9 +59,9 @@ static bool ArrayToIList (ArrayContainer array, TypeSpec list, bool isExplicit) return false; if (isExplicit) - return ExplicitReferenceConversionExists (array.Element, arg_type); + return ExplicitReferenceConversionExists (array.Element, arg_type, null); - return ImplicitReferenceConversionExists (array.Element, arg_type); + return ImplicitReferenceConversionExists (array.Element, arg_type, null, false); } static bool IList_To_Array(TypeSpec list, ArrayContainer array) @@ -71,7 +73,7 @@ static bool IList_To_Array(TypeSpec list, ArrayContainer array) if (array.Element == arg_type) return true; - return ImplicitReferenceConversionExists (array.Element, arg_type) || ExplicitReferenceConversionExists (array.Element, arg_type); + return ImplicitReferenceConversionExists (array.Element, arg_type, null, false) || ExplicitReferenceConversionExists (array.Element, arg_type, null); } public static Expression ImplicitTypeParameterConversion (Expression expr, TypeParameterSpec expr_type, TypeSpec target_type) @@ -168,7 +170,7 @@ static Expression ExplicitTypeParameterConversionToT (Expression source, TypeSpe return null; } - public static Expression ImplicitReferenceConversion (Expression expr, TypeSpec target_type, bool explicit_cast) + public static Expression ImplicitReferenceConversion (Expression expr, TypeSpec target_type, bool explicit_cast, ResolveContext opt_ec, bool upconvert_only) { TypeSpec expr_type = expr.Type; @@ -180,17 +182,17 @@ public static Expression ImplicitReferenceConversion (Expression expr, TypeSpec // NullLiteral nl = expr as NullLiteral; if (nl != null) { - return nl.ConvertImplicitly (target_type); + return nl.ConvertImplicitly (target_type, null); } - if (ImplicitReferenceConversionExists (expr_type, target_type)) { + if (ImplicitReferenceConversionExists (expr_type, target_type, opt_ec, upconvert_only)) { // // Avoid wrapping implicitly convertible reference type // if (!explicit_cast) return expr; - return EmptyCast.Create (expr, target_type); + return EmptyCast.Create (expr, target_type, opt_ec); } return null; @@ -199,17 +201,20 @@ public static Expression ImplicitReferenceConversion (Expression expr, TypeSpec // // Implicit reference conversions // - public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSpec target_type) + public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) { - return ImplicitReferenceConversionExists (expr_type, target_type, true); + return ImplicitReferenceConversionExists (expr_type, target_type, true, opt_ec, upconvert_only); } - public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSpec target_type, bool refOnlyTypeParameter) + public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSpec target_type, bool refOnlyTypeParameter, ResolveContext opt_ec, bool upconvert_only) { + var isPlayScript = (opt_ec == null) ? false : opt_ec.IsPlayScript; + // It's here only to speed things up if (target_type.IsStruct) return false; + switch (expr_type.Kind) { case MemberKind.TypeParameter: return ImplicitTypeParameterConversion (null, (TypeParameterSpec) expr_type, target_type) != null && @@ -268,6 +273,15 @@ public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSp // if (target_type_array != null && expr_type_array.Rank == target_type_array.Rank) { + // + // Disable this conversion for PlayScript, specifically for + // the case of passing an array to a function which accepts + // var args. We want the function to receive 1 parameter of + // type array, rather than n parameters. + // + if (isPlayScript) + return false; + // // Both SE and TE are reference-types. TE check is defered // to ImplicitReferenceConversionExists @@ -279,7 +293,7 @@ public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSp // // An implicit reference conversion exists from SE to TE // - return ImplicitReferenceConversionExists (expr_element_type, target_type_array.Element); + return ImplicitReferenceConversionExists (expr_element_type, target_type_array.Element, opt_ec, upconvert_only); } // @@ -374,6 +388,116 @@ public static bool ImplicitReferenceConversionExists (TypeSpec expr_type, TypeSp return false; } + + public static Expression ImplicitPlayScriptConversion (Expression expr, TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) + { + if (!ImplicitPlayScriptConversionExists (expr.Type, target_type, opt_ec, upconvert_only)) + return null; + + TypeSpec expr_type = expr.Type; + + // PlayScript references can always be implicitly cast to bool + if (target_type.BuiltinType == BuiltinTypeSpec.Type.Bool) { + if (expr_type.BuiltinType == BuiltinTypeSpec.Type.Bool) { + // already a boolean + return expr; + } + + if (expr is NullLiteral) { + // cast null to false + return new BoolConstant(opt_ec.BuiltinTypes, false, expr.Location); + } + + // if its a class or interface reference then just compare against null, else call the more expensive boolean conversion function + // strings and objects still have to go through the more expensive test + if ((expr_type.IsClass || expr_type.IsInterface) && (expr_type.BuiltinType != BuiltinTypeSpec.Type.String) && (expr_type.BuiltinType != BuiltinTypeSpec.Type.Object)) { + // test against null + return new Binary(Binary.Operator.Inequality, expr, new NullLiteral(expr.Location)).Resolve(opt_ec); + } else { + // PlayScript: Call the "Boolean()" static method to convert a dynamic to a bool. EXPENSIVE, but hey.. + Arguments args = new Arguments (1); + if (BuiltinTypeSpec.IsPrimitiveType (expr_type)) + args.Add (new Argument (new BoxedCast (expr, target_type))); + else + args.Add (new Argument(EmptyCast.Create(expr, opt_ec.BuiltinTypes.Object, opt_ec))); + + var function = new MemberAccess (new MemberAccess ( + new SimpleName (PsConsts.PsRootNamespace, expr.Location), "Boolean_fn", expr.Location), "Boolean", expr.Location); + + return new Invocation (function, args).Resolve (opt_ec); + } + } + + // PlayScript references can always be implicitly cast to string + if (expr_type.BuiltinType != BuiltinTypeSpec.Type.String && target_type.BuiltinType == BuiltinTypeSpec.Type.String) { + if (expr_type.BuiltinType == BuiltinTypeSpec.Type.String) { + // already a string + return expr; + } + + Arguments args = new Arguments (1); + + // Use a dynamic conversion where possible to take advantage of type hints + if (expr_type.IsDynamic) { + args.Add (new Argument (expr)); + return new DynamicConversion (target_type, 0, args, expr.Location).Resolve (opt_ec); + } + + // PlayScript: Call the "CastToString()" static method to convert a dynamic to a string. EXPENSIVE, but hey.. + if (BuiltinTypeSpec.IsPrimitiveType (expr_type)) + args.Add (new Argument (new BoxedCast (expr, target_type))); + else + args.Add (new Argument(EmptyCast.Create(expr, opt_ec.BuiltinTypes.Object, opt_ec))); + + var function = new MemberAccess (new MemberAccess ( + new SimpleName (PsConsts.PsRootNamespace, expr.Location), "String_fn", expr.Location), "CastToString", expr.Location); + + return new Invocation (function, args).Resolve (opt_ec); + } + + // Can always cast between Object (Dynamic) and * (AsUntyped) + if ((expr_type.IsDynamic || TypeManager.IsAsUndefined (expr_type, opt_ec)) && target_type.IsDynamic) { + if (expr_type == target_type) + return expr; // nothing to do + + Arguments args = new Arguments (1); + args.Add (new Argument (expr)); + return new DynamicConversion (target_type, 0, args, expr.Location).Resolve (opt_ec); + } + + return null; + } + + public static bool ImplicitPlayScriptConversionExists (TypeSpec expr_type, TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) + { + if (opt_ec == null) + return false; + + // + // Can always cast between Object (Dynamic) and * (AsUntyped), + // even in C#. This is to support using the "*" type in C#. + // + if ((expr_type.IsDynamic || TypeManager.IsAsUndefined (expr_type, opt_ec)) && target_type.IsDynamic) + return true; + + if (opt_ec.FileType != SourceFileType.PlayScript || upconvert_only) + return false; + + // + // PlayScript types can always be implicitly cast to bool + // + if (target_type.BuiltinType == BuiltinTypeSpec.Type.Bool) + return true; + + // + // PlayScript types can always be implicitly cast to string + // + if (target_type.BuiltinType == BuiltinTypeSpec.Type.String) + return true; + + return false; + } + public static Expression ImplicitBoxingConversion (Expression expr, TypeSpec expr_type, TypeSpec target_type) { switch (target_type.BuiltinType) { @@ -461,9 +585,9 @@ public static Expression ImplicitNulableConversion (ResolveContext ec, Expressio return EmptyExpression.Null; if (expr is Constant) - return ((Constant) expr).ConvertImplicitly (t_el); + return ((Constant) expr).ConvertImplicitly (t_el, ec); - return ImplicitNumericConversion (null, expr_type, t_el); + return ImplicitNumericConversion (null, expr_type, t_el, ec, false); } Expression unwrap; @@ -475,9 +599,9 @@ public static Expression ImplicitNulableConversion (ResolveContext ec, Expressio Expression conv = unwrap; if (!TypeSpecComparer.IsEqual (expr_type, t_el)) { if (conv is Constant) - conv = ((Constant)conv).ConvertImplicitly (t_el); + conv = ((Constant)conv).ConvertImplicitly (t_el, ec); else - conv = ImplicitNumericConversion (conv, expr_type, t_el); + conv = ImplicitNumericConversion (conv, expr_type, t_el, ec, false); if (conv == null) return null; @@ -495,18 +619,20 @@ public static Expression ImplicitNulableConversion (ResolveContext ec, Expressio /// expr is the expression to convert, returns a new expression of type /// target_type or null if an implicit conversion is not possible. /// - public static Expression ImplicitNumericConversion (Expression expr, TypeSpec target_type) + public static Expression ImplicitNumericConversion (Expression expr, TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) { - return ImplicitNumericConversion (expr, expr.Type, target_type); + return ImplicitNumericConversion (expr, expr.Type, target_type, opt_ec, upconvert_only); } - public static bool ImplicitNumericConversionExists (TypeSpec expr_type, TypeSpec target_type) + public static bool ImplicitNumericConversionExists (TypeSpec expr_type, TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) { - return ImplicitNumericConversion (null, expr_type, target_type) != null; + return ImplicitNumericConversion (null, expr_type, target_type, opt_ec, upconvert_only) != null; } - static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type, TypeSpec target_type) + static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type, TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) { + var isPlayScript = (opt_ec == null) ? false : opt_ec.IsPlayScript; + switch (expr_type.BuiltinType) { case BuiltinTypeSpec.Type.SByte: // @@ -525,9 +651,11 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I2); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); - + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new IntLiteral(opt_ec.BuiltinTypes, 0, expr.Location)).Resolve(opt_ec); + break; } - break; case BuiltinTypeSpec.Type.Byte: // @@ -538,7 +666,7 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type case BuiltinTypeSpec.Type.UInt: case BuiltinTypeSpec.Type.Short: case BuiltinTypeSpec.Type.UShort: - return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type); + return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type, opt_ec); case BuiltinTypeSpec.Type.ULong: return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U8); case BuiltinTypeSpec.Type.Long: @@ -549,6 +677,10 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_R8); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new UIntLiteral(opt_ec.BuiltinTypes, 0, expr.Location)).Resolve(opt_ec); + break; } break; case BuiltinTypeSpec.Type.Short: @@ -557,7 +689,7 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type // switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Int: - return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type); + return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type, opt_ec); case BuiltinTypeSpec.Type.Long: return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I8); case BuiltinTypeSpec.Type.Double: @@ -566,6 +698,10 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_R4); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new IntLiteral(opt_ec.BuiltinTypes, 0, expr.Location)).Resolve(opt_ec); + break; } break; case BuiltinTypeSpec.Type.UShort: @@ -575,7 +711,7 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type switch (target_type.BuiltinType) { case BuiltinTypeSpec.Type.Int: case BuiltinTypeSpec.Type.UInt: - return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type); + return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type, opt_ec); case BuiltinTypeSpec.Type.ULong: return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U8); case BuiltinTypeSpec.Type.Long: @@ -586,6 +722,10 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_R4); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary (Binary.Operator.Inequality, expr, new UIntLiteral (opt_ec.BuiltinTypes, 0, expr.Location)).Resolve (opt_ec); + break; } break; case BuiltinTypeSpec.Type.Int: @@ -601,6 +741,18 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_R4); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); + case BuiltinTypeSpec.Type.UInt: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U4); + break; + case BuiltinTypeSpec.Type.ULong: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U8); + break; + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new IntLiteral(opt_ec.BuiltinTypes, 0, expr.Location)).Resolve(opt_ec); + break; } break; case BuiltinTypeSpec.Type.UInt: @@ -618,6 +770,14 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCastDuplex (expr, target_type, OpCodes.Conv_R_Un, OpCodes.Conv_R4); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); + case BuiltinTypeSpec.Type.Int: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I4); + break; + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new UIntLiteral(opt_ec.BuiltinTypes, 0, expr.Location)).Resolve(opt_ec); + break; } break; case BuiltinTypeSpec.Type.Long: @@ -631,6 +791,22 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_R4); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); + case BuiltinTypeSpec.Type.Int: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I4); + break; + case BuiltinTypeSpec.Type.UInt: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U4); + break; + case BuiltinTypeSpec.Type.ULong: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U8); + break; + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new LongLiteral(opt_ec.BuiltinTypes, 0L, expr.Location)).Resolve (opt_ec); + break; } break; case BuiltinTypeSpec.Type.ULong: @@ -644,6 +820,22 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type return expr == null ? EmptyExpression.Null : new OpcodeCastDuplex (expr, target_type, OpCodes.Conv_R_Un, OpCodes.Conv_R4); case BuiltinTypeSpec.Type.Decimal: return expr == null ? EmptyExpression.Null : new OperatorCast (expr, target_type); + case BuiltinTypeSpec.Type.Int: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I4); + break; + case BuiltinTypeSpec.Type.UInt: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U4); + break; + case BuiltinTypeSpec.Type.Long: + if (isPlayScript && !upconvert_only) + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I8); + break; + case BuiltinTypeSpec.Type.Bool: + if (isPlayScript) + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new ULongLiteral(opt_ec.BuiltinTypes, 0L, expr.Location)).Resolve(opt_ec); + break; } break; case BuiltinTypeSpec.Type.Char: @@ -654,7 +846,7 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type case BuiltinTypeSpec.Type.UShort: case BuiltinTypeSpec.Type.Int: case BuiltinTypeSpec.Type.UInt: - return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type); + return expr == null ? EmptyExpression.Null : EmptyCast.Create (expr, target_type, opt_ec); case BuiltinTypeSpec.Type.ULong: return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U8); case BuiltinTypeSpec.Type.Long: @@ -669,22 +861,49 @@ static Expression ImplicitNumericConversion (Expression expr, TypeSpec expr_type break; case BuiltinTypeSpec.Type.Float: // - // float to double + // From float to double // if (target_type.BuiltinType == BuiltinTypeSpec.Type.Double) return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_R8); + // + // PlayScript only - from float to int, uint, bool + // + if (isPlayScript && !upconvert_only) { + switch (target_type.BuiltinType) { + case BuiltinTypeSpec.Type.Int: + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I4); + case BuiltinTypeSpec.Type.UInt: + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U4); + case BuiltinTypeSpec.Type.Bool: + return expr == null ? EmptyExpression.Null : new Binary(Binary.Operator.Inequality, expr, new FloatLiteral(opt_ec.BuiltinTypes, 0.0f, expr.Location)).Resolve(opt_ec); + } + } + break; + case BuiltinTypeSpec.Type.Double: + // + // PlayScript only - from double to int, uint, float, bool + // + if (isPlayScript && !upconvert_only) { + switch (target_type.BuiltinType) { + case BuiltinTypeSpec.Type.Int: + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_I4); + case BuiltinTypeSpec.Type.UInt: + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_U4); + case BuiltinTypeSpec.Type.Float: + return expr == null ? EmptyExpression.Null : new OpcodeCast (expr, target_type, OpCodes.Conv_R4); + case BuiltinTypeSpec.Type.Bool: + return expr == null ? EmptyExpression.Null : new Binary (Binary.Operator.Inequality, expr, new DoubleLiteral (opt_ec.BuiltinTypes, 0.0, expr.Location)).Resolve (opt_ec); + } + } break; } return null; } - - // - // Full version of implicit conversion - // - public static bool ImplicitConversionExists (ResolveContext ec, Expression expr, TypeSpec target_type) + + public static bool ImplicitConversionExists (ResolveContext ec, Expression expr, TypeSpec target_type, bool upconvert_only = false) { - if (ImplicitStandardConversionExists (ec, expr, target_type)) + if (ImplicitStandardConversionExists (ec, expr, target_type, upconvert_only)) return true; if (expr.Type == InternalType.AnonymousMethod) { @@ -694,7 +913,7 @@ public static bool ImplicitConversionExists (ResolveContext ec, Expression expr, AnonymousMethodExpression ame = (AnonymousMethodExpression) expr; return ame.ImplicitStandardConversionExists (ec, target_type); } - + // Conversion from __arglist to System.ArgIterator if (expr.Type == InternalType.Arglist) return target_type == ec.Module.PredefinedTypes.ArgIterator.TypeSpec; @@ -703,9 +922,17 @@ public static bool ImplicitConversionExists (ResolveContext ec, Expression expr, UserConversionRestriction.ImplicitOnly | UserConversionRestriction.ProbingOnly, Location.Null) != null; } - public static bool ImplicitStandardConversionExists (ResolveContext rc, Expression expr, TypeSpec target_type) + public static bool ImplicitStandardConversionExists (ResolveContext rc, Expression expr, TypeSpec target_type, bool upconvert_only = false) { if (expr.eclass == ExprClass.MethodGroup) { + // PlayScript can implicitly cast unique methods/lambdas to dynamic/delegate types. + if (rc.IsPlayScript && !target_type.IsDelegate && + (target_type.IsDynamic || target_type == rc.BuiltinTypes.Delegate)) { + MethodGroupExpr mg = expr as MethodGroupExpr; + if (mg != null && mg.Candidates.Count == 1) { + return true; + } + } if (target_type.IsDelegate && rc.Module.Compiler.Settings.Version != LanguageVersion.ISO_1) { MethodGroupExpr mg = expr as MethodGroupExpr; if (mg != null) @@ -715,13 +942,13 @@ public static bool ImplicitStandardConversionExists (ResolveContext rc, Expressi return false; } - return ImplicitStandardConversionExists (expr, target_type); + return ImplicitStandardConversionExists (expr, target_type, rc, upconvert_only); } // // Implicit standard conversion (only core conversions are used here) // - public static bool ImplicitStandardConversionExists (Expression expr, TypeSpec target_type) + public static bool ImplicitStandardConversionExists (Expression expr, TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only = false) { // // Identity conversions @@ -741,10 +968,13 @@ public static bool ImplicitStandardConversionExists (Expression expr, TypeSpec t if (target_type.IsNullableType) return ImplicitNulableConversion (null, expr, target_type) != null; - if (ImplicitNumericConversion (null, expr_type, target_type) != null) + if (ImplicitNumericConversion (null, expr_type, target_type, opt_ec, upconvert_only) != null) return true; - if (ImplicitReferenceConversionExists (expr_type, target_type, false)) + if (ImplicitPlayScriptConversionExists (expr_type, target_type, opt_ec, upconvert_only)) + return true; + + if (ImplicitReferenceConversionExists (expr_type, target_type, false, opt_ec, upconvert_only)) return true; if (ImplicitBoxingConversion (null, expr_type, target_type) != null) @@ -851,7 +1081,7 @@ public static bool ImplicitStandardConversionExists (Expression expr, TypeSpec t /// Finds "most encompassed type" according to the spec (13.4.2) /// amongst the methods in the MethodGroupExpr /// - public static TypeSpec FindMostEncompassedType (IList types) + public static TypeSpec FindMostEncompassedType (IList types, ResolveContext opt_ec) { TypeSpec best = null; EmptyExpression expr; @@ -863,7 +1093,7 @@ public static TypeSpec FindMostEncompassedType (IList types) } expr = new EmptyExpression (t); - if (ImplicitStandardConversionExists (expr, best)) + if (ImplicitStandardConversionExists (expr, best, opt_ec)) best = t; } @@ -871,7 +1101,7 @@ public static TypeSpec FindMostEncompassedType (IList types) foreach (TypeSpec t in types) { if (best == t) continue; - if (!ImplicitStandardConversionExists (expr, t)) { + if (!ImplicitStandardConversionExists (expr, t, opt_ec)) { best = null; break; } @@ -884,7 +1114,7 @@ public static TypeSpec FindMostEncompassedType (IList types) // Finds the most encompassing type (type into which all other // types can convert to) amongst the types in the given set // - static TypeSpec FindMostEncompassingType (IList types) + static TypeSpec FindMostEncompassingType (IList types, ResolveContext opt_ec) { if (types.Count == 0) return null; @@ -900,7 +1130,7 @@ static TypeSpec FindMostEncompassingType (IList types) continue; var expr = new EmptyExpression (types[ii]); - if (!ImplicitStandardConversionExists (expr, types [i])) { + if (!ImplicitStandardConversionExists (expr, types [i], opt_ec)) { ii = 0; break; } @@ -960,7 +1190,7 @@ static TypeSpec FindMostSpecificSource (ResolveContext rc, List list if (source.eclass == ExprClass.MethodGroup) return InternalType.FakeInternalType; - return FindMostEncompassedType (candidate_set); + return FindMostEncompassedType (candidate_set, rc); } } @@ -968,16 +1198,16 @@ static TypeSpec FindMostSpecificSource (ResolveContext rc, List list // Final case // if (apply_explicit_conv_rules) - return FindMostEncompassingType (src_types_set); + return FindMostEncompassingType (src_types_set, rc); else - return FindMostEncompassedType (src_types_set); + return FindMostEncompassedType (src_types_set, rc); } /// /// Finds the most specific target Tx according to section 13.4.4 /// static public TypeSpec FindMostSpecificTarget (IList list, - TypeSpec target, bool apply_explicit_conv_rules) + TypeSpec target, bool apply_explicit_conv_rules, ResolveContext opt_ec) { List tgt_types_set = null; @@ -1007,21 +1237,21 @@ static public TypeSpec FindMostSpecificTarget (IList list, foreach (TypeSpec ret_type in tgt_types_set) { var expr = new EmptyExpression (ret_type); - if (ImplicitStandardConversionExists (expr, target)) + if (ImplicitStandardConversionExists (expr, target, opt_ec)) candidate_set.Add (ret_type); } if (candidate_set.Count != 0) - return FindMostEncompassingType (candidate_set); + return FindMostEncompassingType (candidate_set, opt_ec); } // // Okay, final case ! // if (apply_explicit_conv_rules) - return FindMostEncompassedType (tgt_types_set); + return FindMostEncompassedType (tgt_types_set, opt_ec); else - return FindMostEncompassingType (tgt_types_set); + return FindMostEncompassingType (tgt_types_set, opt_ec); } /// @@ -1062,11 +1292,11 @@ static void FindApplicableUserDefinedConversionOperators (ResolveContext rc, ILi continue; var t = op.Parameters.Types[0]; - if (source.Type != t && !ImplicitStandardConversionExists (rc, source, t)) { + if (source.Type != t && !ImplicitStandardConversionExists (rc, source, t, false)) { if ((restr & UserConversionRestriction.ImplicitOnly) != 0) continue; - if (!ImplicitStandardConversionExists (new EmptyExpression (t), source.Type)) + if (!ImplicitStandardConversionExists (new EmptyExpression (t), source.Type, rc, false)) continue; } @@ -1082,14 +1312,14 @@ static void FindApplicableUserDefinedConversionOperators (ResolveContext rc, ILi if (t.IsNullableType) t = Nullable.NullableInfo.GetUnderlyingType (t); - if (!ImplicitStandardConversionExists (new EmptyExpression (t), target)) { + if (!ImplicitStandardConversionExists (new EmptyExpression (t), target, rc)) { if ((restr & UserConversionRestriction.ImplicitOnly) != 0) continue; if (texpr == null) texpr = new EmptyExpression (target); - if (!ImplicitStandardConversionExists (texpr, t)) + if (!ImplicitStandardConversionExists (texpr, t, rc)) continue; } } @@ -1190,7 +1420,7 @@ public static Expression UserDefinedConversion (ResolveContext rc, Expression so if (s_x == null) return null; - t_x = FindMostSpecificTarget (candidates, target, !implicitOnly); + t_x = FindMostSpecificTarget (candidates, target, !implicitOnly, rc); if (t_x == null) return null; @@ -1217,6 +1447,7 @@ public static Expression UserDefinedConversion (ResolveContext rc, Expression so ambig_arg = candidate; } */ + rc.Report.Error (457, loc, "Ambiguous user defined operators `{0}' and `{1}' when converting from `{2}' to `{3}'", ambig_arg.GetSignatureForError (), most_specific_operator.GetSignatureForError (), @@ -1308,14 +1539,14 @@ public static Expression UserDefinedConversion (ResolveContext rc, Expression so /// in a context that expects a `target_type'. /// static public Expression ImplicitConversion (ResolveContext ec, Expression expr, - TypeSpec target_type, Location loc) + TypeSpec target_type, Location loc, bool upconvert_only = false) { Expression e; if (target_type == null) throw new Exception ("Target type is null"); - e = ImplicitConversionStandard (ec, expr, target_type, loc); + e = ImplicitConversionStandard (ec, expr, target_type, loc, false, upconvert_only); if (e != null) return e; @@ -1340,13 +1571,51 @@ static public Expression ImplicitConversion (ResolveContext ec, Expression expr, static public Expression ImplicitConversionStandard (ResolveContext ec, Expression expr, TypeSpec target_type, Location loc) { - return ImplicitConversionStandard (ec, expr, target_type, loc, false); + return ImplicitConversionStandard (ec, expr, target_type, loc, false, false); } - static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr, TypeSpec target_type, Location loc, bool explicit_cast) + static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr, TypeSpec target_type, Location loc, bool explicit_cast, bool upconvert_only) { if (expr.eclass == ExprClass.MethodGroup){ if (!target_type.IsDelegate){ + if (ec.IsPlayScript && + (target_type.IsDynamic || target_type == ec.BuiltinTypes.Delegate)) { + MethodGroupExpr mg = expr as MethodGroupExpr; + if (mg != null) { + if (mg.Candidates.Count != 1) { + ec.Report.Error (7021, loc, "Ambiguous overloaded methods `{0}' when assigning to Function or Object type", mg.Name); + return null; + } + var ms = (MethodSpec)mg.Candidates[0]; + var del_type = Delegate.CreateDelegateTypeFromMethodSpec(ec, ms, loc); + + // If return is "Delegate", we create a var args anonymous method which calls the target method.. + if (del_type == ec.BuiltinTypes.Delegate) { + var objArrayType = new ComposedCast ( + new TypeExpression(ec.BuiltinTypes.Object, loc), + ComposedTypeSpecifier.CreateArrayDimension (1, loc)); + var parameters = new ParametersCompiled(new Parameter[] { + new ParamsParameter(objArrayType, "args", null, loc) }, false); + var dynCall = new AnonymousMethodExpression(expr.Location, parameters, new TypeExpression(ms.ReturnType, loc)); + var block = new ParametersBlock (ec.CurrentBlock, parameters, expr.Location); + dynCall.Block = block; + var args = new Arguments (3); + args.Add (new Argument(new TypeOf(new TypeExpression(ms.DeclaringType, loc), loc))); + args.Add (new Argument(new StringLiteral(ec.BuiltinTypes, ms.Name, loc))); + args.Add (new Argument(new SimpleName("args", loc))); + var call = new Invocation (new MemberAccess(new MemberAccess(new SimpleName("PlayScript", loc), "Support", loc), "VarArgCall", loc), args); + if (ms.ReturnType == ec.BuiltinTypes.Void) { + block.AddStatement (new StatementExpression(call)); + } else { + block.AddStatement (new Return(call, loc)); + } + return dynCall.Resolve (ec); + } else { + // Otherwise cast to the specific delegate type + return new ImplicitDelegateCreation (del_type, mg, loc).Resolve (ec); + } + } + } return null; } @@ -1369,12 +1638,43 @@ static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr return null; } + // Auto convert types to type objects.. + if (ec.IsPlayScript && expr is FullNamedExpression && + (target_type.BuiltinType == BuiltinTypeSpec.Type.Type || + target_type.BuiltinType == BuiltinTypeSpec.Type.Object || + target_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic)) { + FullNamedExpression type_expr = (FullNamedExpression)expr; + if (expr_type != null) { + if (expr_type.MemberDefinition.Namespace == PsConsts.PsRootNamespace) { + switch (expr_type.Name) { + case "String": + type_expr = new TypeExpression (ec.BuiltinTypes.String, type_expr.Location); + break; + case "Number": + type_expr = new TypeExpression (ec.BuiltinTypes.Double, type_expr.Location); + break; + case "Boolean": + type_expr = new TypeExpression (ec.BuiltinTypes.Bool, type_expr.Location); + break; + } + } else if (expr_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + type_expr = new TypeExpression (ec.Module.PredefinedTypes.AsExpandoObject.Resolve(), type_expr.Location); + } + } + return new TypeOf (type_expr, expr.Location).Resolve (ec); + } + if (expr_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + + e = ImplicitPlayScriptConversion (expr, target_type, ec, upconvert_only); + if (e != null) + return e; + switch (target_type.Kind) { case MemberKind.ArrayType: case MemberKind.Class: if (target_type.BuiltinType == BuiltinTypeSpec.Type.Object) - return EmptyCast.Create (expr, target_type); + return EmptyCast.Create (expr, target_type, ec); goto case MemberKind.Struct; case MemberKind.Struct: @@ -1390,6 +1690,8 @@ static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr return null; } + + if (target_type.IsNullableType) return ImplicitNulableConversion (ec, expr, target_type); @@ -1399,7 +1701,7 @@ static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr Constant c = expr as Constant; if (c != null) { try { - c = c.ConvertImplicitly (target_type); + c = c.ConvertImplicitly (target_type, ec, upconvert_only); } catch { throw new InternalErrorException ("Conversion error", loc); } @@ -1407,11 +1709,15 @@ static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr return c; } - e = ImplicitNumericConversion (expr, expr_type, target_type); + e = ImplicitNumericConversion (expr, expr_type, target_type, ec, upconvert_only); + if (e != null) + return e; + + e = ImplicitPlayScriptConversion (expr, target_type, ec, upconvert_only); if (e != null) return e; - e = ImplicitReferenceConversion (expr, target_type, explicit_cast); + e = ImplicitReferenceConversion (expr, target_type, explicit_cast, ec, upconvert_only); if (e != null) return e; @@ -1444,9 +1750,7 @@ static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr return expr; if (target_pc.Element.Kind == MemberKind.Void) - return EmptyCast.Create (expr, target_type); - - //return null; + return EmptyCast.Create (expr, target_type, ec); } if (expr_type == InternalType.NullLiteral) @@ -1455,6 +1759,11 @@ static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr if (expr_type == InternalType.AnonymousMethod){ AnonymousMethodExpression ame = (AnonymousMethodExpression) expr; + if (ec.IsPlayScript && + (target_type.IsDynamic || target_type == ec.BuiltinTypes.Delegate)) { + var del_type = Delegate.CreateDelegateType (ec, ame.AsParameters, ame.AsReturnType.ResolveAsType(ec), loc); + return new Cast(new TypeExpression(del_type, loc), expr, loc).Resolve(ec); + } Expression am = ame.Compatible (ec, target_type); if (am != null) return am.Resolve (ec); @@ -1470,13 +1779,7 @@ static Expression ImplicitConversionStandard (ResolveContext ec, Expression expr // dynamic erasure conversion on value types // if (expr_type.IsStruct && TypeSpecComparer.IsEqual (expr_type, target_type)) - return expr_type == target_type ? expr : EmptyCast.Create (expr, target_type); - - var interpolated_string = expr as InterpolatedString; - if (interpolated_string != null) { - if (target_type == ec.Module.PredefinedTypes.IFormattable.TypeSpec || target_type == ec.Module.PredefinedTypes.FormattableString.TypeSpec) - return interpolated_string.ConvertTo (ec, target_type); - } + return expr_type == target_type ? expr : EmptyCast.Create (expr, target_type, ec); return null; } @@ -1532,6 +1835,41 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio // switch (expr.Type.BuiltinType) { + case BuiltinTypeSpec.Type.Bool: + // + // From bool to sbyte, byte, short, + // ushort, int, uint, long, ulong, + // char, float or decimal + // + if (rc.IsPlayScript) { + switch (target_type.BuiltinType) { + case BuiltinTypeSpec.Type.SByte: + return new ConvCast(new Conditional(expr, new IntLiteral(rc.BuiltinTypes, 1, expr.Location), new IntLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc), target_type, ConvCast.Mode.I4_I1); + case BuiltinTypeSpec.Type.Byte: + return new ConvCast(new Conditional(expr, new UIntLiteral(rc.BuiltinTypes, 1, expr.Location), new UIntLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc), target_type, ConvCast.Mode.U4_U1); + case BuiltinTypeSpec.Type.Short: + return new ConvCast(new Conditional(expr, new IntLiteral(rc.BuiltinTypes, 1, expr.Location), new IntLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc), target_type, ConvCast.Mode.I4_I2); + case BuiltinTypeSpec.Type.UShort: + return new ConvCast(new Conditional(expr, new UIntLiteral(rc.BuiltinTypes, 1, expr.Location), new UIntLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc), target_type, ConvCast.Mode.U4_U2); + case BuiltinTypeSpec.Type.Int: + return new Conditional(expr, new IntLiteral(rc.BuiltinTypes, 1, expr.Location), new IntLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc); + case BuiltinTypeSpec.Type.UInt: + return new Conditional(expr, new UIntLiteral(rc.BuiltinTypes, 1, expr.Location), new UIntLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc); + case BuiltinTypeSpec.Type.Long: + return new Conditional(expr, new LongLiteral(rc.BuiltinTypes, 1, expr.Location), new LongLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc); + case BuiltinTypeSpec.Type.ULong: + return new Conditional(expr, new ULongLiteral(rc.BuiltinTypes, 1, expr.Location), new ULongLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc); + case BuiltinTypeSpec.Type.Char: + return new Conditional(expr, new CharLiteral(rc.BuiltinTypes, '1', expr.Location), new CharLiteral(rc.BuiltinTypes, '0', expr.Location), expr.Location).Resolve (rc); + case BuiltinTypeSpec.Type.Float: + return new Conditional(expr, new FloatLiteral(rc.BuiltinTypes, 1f, expr.Location), new FloatLiteral(rc.BuiltinTypes, 0f, expr.Location), expr.Location).Resolve (rc); + case BuiltinTypeSpec.Type.Double: + return new Conditional(expr, new DoubleLiteral(rc.BuiltinTypes, 1, expr.Location), new DoubleLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc); + case BuiltinTypeSpec.Type.Decimal: + return new Conditional(expr, new DecimalLiteral(rc.BuiltinTypes, 1, expr.Location), new DecimalLiteral(rc.BuiltinTypes, 0, expr.Location), expr.Location).Resolve (rc); + } + } + break; case BuiltinTypeSpec.Type.SByte: // // From sbyte to byte, ushort, uint, ulong, char, uintptr @@ -1551,6 +1889,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio // One of the built-in conversions that belonged in the class library case BuiltinTypeSpec.Type.UIntPtr: return new OperatorCast (new ConvCast (expr, rc.BuiltinTypes.ULong, ConvCast.Mode.I1_U8), target_type, target_type, true); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new IntLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.Byte: @@ -1562,6 +1906,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio return new ConvCast (expr, target_type, ConvCast.Mode.U1_I1); case BuiltinTypeSpec.Type.Char: return new ConvCast (expr, target_type, ConvCast.Mode.U1_CH); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new UIntLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.Short: @@ -1585,6 +1935,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio // One of the built-in conversions that belonged in the class library case BuiltinTypeSpec.Type.UIntPtr: return new OperatorCast (new ConvCast (expr, rc.BuiltinTypes.ULong, ConvCast.Mode.I2_U8), target_type, target_type, true); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new IntLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.UShort: @@ -1600,6 +1956,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio return new ConvCast (expr, target_type, ConvCast.Mode.U2_I2); case BuiltinTypeSpec.Type.Char: return new ConvCast (expr, target_type, ConvCast.Mode.U2_CH); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new UIntLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.Int: @@ -1625,6 +1987,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio // One of the built-in conversions that belonged in the class library case BuiltinTypeSpec.Type.UIntPtr: return new OperatorCast (new ConvCast (expr, rc.BuiltinTypes.ULong, ConvCast.Mode.I2_U8), target_type, target_type, true); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new IntLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.UInt: @@ -1644,6 +2012,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio return new ConvCast (expr, target_type, ConvCast.Mode.U4_I4); case BuiltinTypeSpec.Type.Char: return new ConvCast (expr, target_type, ConvCast.Mode.U4_CH); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new UIntLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.Long: @@ -1667,6 +2041,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio return new ConvCast (expr, target_type, ConvCast.Mode.I8_U8); case BuiltinTypeSpec.Type.Char: return new ConvCast (expr, target_type, ConvCast.Mode.I8_CH); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new LongLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.ULong: @@ -1693,7 +2073,13 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio // One of the built-in conversions that belonged in the class library case BuiltinTypeSpec.Type.IntPtr: - return new OperatorCast (EmptyCast.Create (expr, rc.BuiltinTypes.Long), target_type, true); + return new OperatorCast (EmptyCast.Create (expr, rc.BuiltinTypes.Long, rc), target_type, true); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new ULongLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.Char: @@ -1707,6 +2093,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio return new ConvCast (expr, target_type, ConvCast.Mode.CH_U1); case BuiltinTypeSpec.Type.Short: return new ConvCast (expr, target_type, ConvCast.Mode.CH_I2); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new CharLiteral(rc.BuiltinTypes, '\x0', expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.Float: @@ -1736,6 +2128,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio return new ConvCast (expr, target_type, ConvCast.Mode.R4_CH); case BuiltinTypeSpec.Type.Decimal: return new OperatorCast (expr, target_type, true); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new FloatLiteral(rc.BuiltinTypes, 0f, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.Double: @@ -1767,6 +2165,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio return new ConvCast (expr, target_type, ConvCast.Mode.R8_R4); case BuiltinTypeSpec.Type.Decimal: return new OperatorCast (expr, target_type, true); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new DoubleLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; case BuiltinTypeSpec.Type.UIntPtr: @@ -1781,18 +2185,18 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio case BuiltinTypeSpec.Type.Short: return new ConvCast (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.UInt, true), target_type, ConvCast.Mode.U4_I2); case BuiltinTypeSpec.Type.Int: - return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.UInt, true), target_type); + return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.UInt, true), target_type, rc); case BuiltinTypeSpec.Type.UInt: return new OperatorCast (expr, expr.Type, target_type, true); case BuiltinTypeSpec.Type.Long: - return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.ULong, true), target_type); + return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.ULong, true), target_type, rc); } break; case BuiltinTypeSpec.Type.IntPtr: if (target_type.BuiltinType == BuiltinTypeSpec.Type.UInt) - return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.Int, true), target_type); + return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.Int, true), target_type, rc); if (target_type.BuiltinType == BuiltinTypeSpec.Type.ULong) - return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.Long, true), target_type); + return EmptyCast.Create (new OperatorCast (expr, expr.Type, rc.BuiltinTypes.Long, true), target_type, rc); break; case BuiltinTypeSpec.Type.Decimal: @@ -1812,6 +2216,12 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio case BuiltinTypeSpec.Type.Float: case BuiltinTypeSpec.Type.Double: return new OperatorCast (expr, expr.Type, target_type, true); + + // PlayScript explicit casts.. + case BuiltinTypeSpec.Type.Bool: + if (rc.IsPlayScript) + return new Binary(Binary.Operator.Inequality, expr, new DecimalLiteral(rc.BuiltinTypes, 0, expr.Location)).Resolve (rc); + break; } break; @@ -1824,9 +2234,9 @@ public static Expression ExplicitNumericConversion (ResolveContext rc, Expressio /// Returns whether an explicit reference conversion can be performed /// from source_type to target_type /// - public static bool ExplicitReferenceConversionExists (TypeSpec source_type, TypeSpec target_type) + public static bool ExplicitReferenceConversionExists (TypeSpec source_type, TypeSpec target_type, ResolveContext opt_ec) { - Expression e = ExplicitReferenceConversion (null, source_type, target_type); + Expression e = ExplicitReferenceConversion (null, source_type, target_type, opt_ec); if (e == null) return false; @@ -1839,7 +2249,7 @@ public static bool ExplicitReferenceConversionExists (TypeSpec source_type, Type /// /// Implements Explicit Reference conversions /// - static Expression ExplicitReferenceConversion (Expression source, TypeSpec source_type, TypeSpec target_type) + static Expression ExplicitReferenceConversion (Expression source, TypeSpec source_type, TypeSpec target_type, ResolveContext opt_ec) { // // From object to a generic parameter @@ -1952,7 +2362,7 @@ static Expression ExplicitReferenceConversion (Expression source, TypeSpec sourc if (!TypeSpec.IsReferenceType (target_element)) return null; - if (ExplicitReferenceConversionExists (source_type, target_element)) + if (ExplicitReferenceConversionExists (source_type, target_element, opt_ec)) return source == null ? EmptyExpression.Null : new ClassCast (source, target_type); return null; @@ -2002,10 +2412,10 @@ static Expression ExplicitReferenceConversion (Expression source, TypeSpec sourc // //If TP is covariant, an implicit or explicit identity or reference conversion is required // - if (ImplicitReferenceConversionExists (targs_src[i], targs_dst[i])) + if (ImplicitReferenceConversionExists (targs_src[i], targs_dst[i], opt_ec, false)) continue; - if (ExplicitReferenceConversionExists (targs_src[i], targs_dst[i])) + if (ExplicitReferenceConversionExists (targs_src[i], targs_dst[i], opt_ec)) continue; } else if (tparams[i].Variance == Variance.Contravariant) { @@ -2040,18 +2450,18 @@ static public Expression ExplicitConversionCore (ResolveContext ec, Expression e TypeSpec expr_type = expr.Type; // Explicit conversion includes implicit conversion and it used for enum underlying types too - Expression ne = ImplicitConversionStandard (ec, expr, target_type, loc, true); + Expression ne = ImplicitConversionStandard (ec, expr, target_type, loc, true, false); if (ne != null) return ne; if (expr_type.IsEnum) { TypeSpec real_target = target_type.IsEnum ? EnumSpec.GetUnderlyingType (target_type) : target_type; - Expression underlying = EmptyCast.Create (expr, EnumSpec.GetUnderlyingType (expr_type)); + Expression underlying = EmptyCast.Create (expr, EnumSpec.GetUnderlyingType (expr_type), ec); if (underlying.Type == real_target) ne = underlying; if (ne == null) - ne = ImplicitNumericConversion (underlying, real_target); + ne = ImplicitNumericConversion (underlying, real_target, ec, false); if (ne == null) ne = ExplicitNumericConversion (ec, underlying, real_target); @@ -2062,7 +2472,7 @@ static public Expression ExplicitConversionCore (ResolveContext ec, Expression e if (ne == null && (real_target.BuiltinType == BuiltinTypeSpec.Type.IntPtr || real_target.BuiltinType == BuiltinTypeSpec.Type.UIntPtr)) ne = ExplicitUserConversion (ec, underlying, real_target, loc); - return ne != null ? EmptyCast.Create (ne, target_type) : null; + return ne != null ? EmptyCast.Create (ne, target_type, ec) : null; } if (target_type.IsEnum) { @@ -2075,7 +2485,7 @@ static public Expression ExplicitConversionCore (ResolveContext ec, Expression e TypeSpec real_target = target_type.IsEnum ? EnumSpec.GetUnderlyingType (target_type) : target_type; if (expr_type == real_target) - return EmptyCast.Create (expr, target_type); + return EmptyCast.Create (expr, target_type, ec); Constant c = expr as Constant; if (c != null) { @@ -2083,13 +2493,13 @@ static public Expression ExplicitConversionCore (ResolveContext ec, Expression e if (c != null) return c; } else { - ne = ImplicitNumericConversion (expr, real_target); + ne = ImplicitNumericConversion (expr, real_target, ec, false); if (ne != null) - return EmptyCast.Create (ne, target_type); + return EmptyCast.Create (ne, target_type, ec); ne = ExplicitNumericConversion (ec, expr, real_target); if (ne != null) - return EmptyCast.Create (ne, target_type); + return EmptyCast.Create (ne, target_type, ec); // // LAMESPEC: IntPtr and UIntPtr conversion to any Enum is allowed @@ -2112,13 +2522,13 @@ static public Expression ExplicitConversionCore (ResolveContext ec, Expression e // null literal explicitly // if (expr_type != InternalType.NullLiteral) { - ne = ExplicitReferenceConversion (expr, expr_type, target_type); + ne = ExplicitReferenceConversion (expr, expr_type, target_type, ec); if (ne != null) return ne; } if (ec.IsUnsafe){ - ne = ExplicitUnsafe (expr, target_type); + ne = ExplicitUnsafe (expr, target_type, ec); if (ne != null) return ne; } @@ -2126,13 +2536,13 @@ static public Expression ExplicitConversionCore (ResolveContext ec, Expression e return null; } - public static Expression ExplicitUnsafe (Expression expr, TypeSpec target_type) + public static Expression ExplicitUnsafe (Expression expr, TypeSpec target_type, ResolveContext rc) { TypeSpec expr_type = expr.Type; if (target_type.IsPointer){ if (expr_type.IsPointer) - return EmptyCast.Create (expr, target_type); + return EmptyCast.Create (expr, target_type, rc); switch (expr_type.BuiltinType) { case BuiltinTypeSpec.Type.SByte: @@ -2194,12 +2604,12 @@ static public Expression ExplicitConversionStandard (ResolveContext ec, Expressi if (ne != null) return ne; - ne = ExplicitReferenceConversion (expr, expr.Type, target_type); + ne = ExplicitReferenceConversion (expr, expr.Type, target_type, ec); if (ne != null) return ne; if (ec.IsUnsafe && expr.Type.IsPointer && target_type.IsPointer && ((PointerContainer)expr.Type).Element.Kind == MemberKind.Void) - return EmptyCast.Create (expr, target_type); + return EmptyCast.Create (expr, target_type, ec); expr.Error_ValueCannotBeConverted (ec, target_type, true); return null; @@ -2257,7 +2667,7 @@ static public Expression ExplicitConversion (ResolveContext ec, Expression expr, e = Nullable.Unwrap.Create (expr, false); e = ExplicitConversionCore (ec, e, target_type, loc); if (e != null) - return EmptyCast.Create (e, target_type); + return EmptyCast.Create (e, target_type, ec); } e = ExplicitUserConversion (ec, expr, target_type, loc); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-parser.cs similarity index 53% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-parser.cs index 46fd7b77c..c4e6b04fe 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-parser.cs @@ -20,7 +20,7 @@ using System; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// The C# Parser @@ -144,14 +144,6 @@ enum ParameterModifierType // LocationsBag lbag; List> mod_locations; - Location parameterModifierLocation, savedLocation, savedEventAssignLocation; - Location savedAttrParenOpenLocation, savedAttrParenCloseLocation, savedOperatorLocation; - Stack> locationListStack = new Stack> (); // used for type parameters - Stack opt_intoStack = new Stack (); - - bool HadAttributeParens; - List attributeArgumentCommas = new List (); - List parameterListCommas = new List (); Stack location_stack; #line default @@ -213,11 +205,9 @@ Set to null to suppress debugging messages. //t "using_directives : using_directive", //t "using_directives : using_directives using_directive", //t "using_directive : using_namespace", -//t "using_namespace : USING opt_static namespace_or_type_expr SEMICOLON", -//t "using_namespace : USING opt_static IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON", +//t "using_namespace : USING namespace_or_type_expr SEMICOLON", +//t "using_namespace : USING IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON", //t "using_namespace : USING error", -//t "opt_static :", -//t "opt_static : STATIC", //t "$$2 :", //t "$$3 :", //t "namespace_declaration : opt_attributes NAMESPACE namespace_name $$2 OPEN_BRACE $$3 opt_extern_alias_directives opt_using_directives opt_namespace_or_type_declarations CLOSE_BRACE opt_semicolon_error", @@ -641,7 +631,6 @@ Set to null to suppress debugging messages. //t "primary_expression : pointer_member_access", //t "primary_expression : anonymous_method_expression", //t "primary_expression : undocumented_expressions", -//t "primary_expression : interpolated_string", //t "type_name_expression : simple_name_expr", //t "type_name_expression : IDENTIFIER GENERATE_COMPLETION", //t "type_name_expression : member_access", @@ -650,16 +639,6 @@ Set to null to suppress debugging messages. //t "literal : NULL", //t "boolean_literal : TRUE", //t "boolean_literal : FALSE", -//t "interpolated_string : INTERPOLATED_STRING interpolations INTERPOLATED_STRING_END", -//t "interpolated_string : INTERPOLATED_STRING_END", -//t "interpolations : interpolation", -//t "interpolations : interpolations INTERPOLATED_STRING interpolation", -//t "interpolation : expression", -//t "interpolation : expression COMMA expression", -//t "$$68 :", -//t "interpolation : expression COLON $$68 LITERAL", -//t "$$69 :", -//t "interpolation : expression COMMA expression COLON $$69 LITERAL", //t "open_parens_any : OPEN_PARENS", //t "open_parens_any : OPEN_PARENS_CAST", //t "close_parens : CLOSE_PARENS", @@ -742,8 +721,8 @@ Set to null to suppress debugging messages. //t "array_creation_expression : NEW rank_specifier array_initializer", //t "array_creation_expression : NEW new_expr_type OPEN_BRACKET CLOSE_BRACKET OPEN_BRACKET_EXPR error CLOSE_BRACKET", //t "array_creation_expression : NEW new_expr_type error", -//t "$$70 :", -//t "new_expr_type : $$70 simple_type", +//t "$$68 :", +//t "new_expr_type : $$68 simple_type", //t "anonymous_type_expression : NEW OPEN_BRACE anonymous_type_parameters_opt_comma CLOSE_BRACE", //t "anonymous_type_expression : NEW OPEN_BRACE GENERATE_COMPLETION", //t "anonymous_type_parameters_opt_comma : anonymous_type_parameters_opt", @@ -784,14 +763,14 @@ Set to null to suppress debugging messages. //t "unchecked_expression : UNCHECKED open_parens_any expression CLOSE_PARENS", //t "unchecked_expression : UNCHECKED error", //t "pointer_member_access : primary_expression OP_PTR IDENTIFIER opt_type_argument_list", -//t "$$71 :", -//t "anonymous_method_expression : DELEGATE opt_anonymous_method_signature $$71 block", -//t "$$72 :", -//t "anonymous_method_expression : ASYNC DELEGATE opt_anonymous_method_signature $$72 block", +//t "$$69 :", +//t "anonymous_method_expression : DELEGATE opt_anonymous_method_signature $$69 block", +//t "$$70 :", +//t "anonymous_method_expression : ASYNC DELEGATE opt_anonymous_method_signature $$70 block", //t "opt_anonymous_method_signature :", //t "opt_anonymous_method_signature : anonymous_method_signature", -//t "$$73 :", -//t "anonymous_method_signature : OPEN_PARENS $$73 opt_formal_parameter_list CLOSE_PARENS", +//t "$$71 :", +//t "anonymous_method_signature : OPEN_PARENS $$71 opt_formal_parameter_list CLOSE_PARENS", //t "default_value_expression : DEFAULT open_parens_any type CLOSE_PARENS", //t "unary_expression : primary_expression", //t "unary_expression : BANG prefixed_unary_expression", @@ -917,24 +896,24 @@ Set to null to suppress debugging messages. //t "lambda_parameter : AWAIT", //t "opt_lambda_parameter_list :", //t "opt_lambda_parameter_list : lambda_parameter_list", -//t "$$74 :", -//t "lambda_expression_body : $$74 expression", +//t "$$72 :", +//t "lambda_expression_body : $$72 expression", //t "lambda_expression_body : block", //t "lambda_expression_body : error", //t "expression_or_error : expression", //t "expression_or_error : error", +//t "$$73 :", +//t "lambda_expression : IDENTIFIER ARROW $$73 lambda_expression_body", +//t "$$74 :", +//t "lambda_expression : AWAIT ARROW $$74 lambda_expression_body", //t "$$75 :", -//t "lambda_expression : IDENTIFIER ARROW $$75 lambda_expression_body", +//t "lambda_expression : ASYNC identifier_inside_body ARROW $$75 lambda_expression_body", //t "$$76 :", -//t "lambda_expression : AWAIT ARROW $$76 lambda_expression_body", //t "$$77 :", -//t "lambda_expression : ASYNC identifier_inside_body ARROW $$77 lambda_expression_body", +//t "lambda_expression : OPEN_PARENS_LAMBDA $$76 opt_lambda_parameter_list CLOSE_PARENS ARROW $$77 lambda_expression_body", //t "$$78 :", //t "$$79 :", -//t "lambda_expression : OPEN_PARENS_LAMBDA $$78 opt_lambda_parameter_list CLOSE_PARENS ARROW $$79 lambda_expression_body", -//t "$$80 :", -//t "$$81 :", -//t "lambda_expression : ASYNC OPEN_PARENS_LAMBDA $$80 opt_lambda_parameter_list CLOSE_PARENS ARROW $$81 lambda_expression_body", +//t "lambda_expression : ASYNC OPEN_PARENS_LAMBDA $$78 opt_lambda_parameter_list CLOSE_PARENS ARROW $$79 lambda_expression_body", //t "expression : assignment_expression", //t "expression : non_assignment_expression", //t "non_assignment_expression : conditional_expression", @@ -953,13 +932,13 @@ Set to null to suppress debugging messages. //t "opt_primary_parameters_with_class_base : class_base", //t "opt_primary_parameters_with_class_base : primary_parameters", //t "opt_primary_parameters_with_class_base : primary_parameters class_base", +//t "$$80 :", +//t "opt_primary_parameters_with_class_base : primary_parameters class_base OPEN_PARENS $$80 opt_argument_list CLOSE_PARENS", +//t "$$81 :", //t "$$82 :", -//t "opt_primary_parameters_with_class_base : primary_parameters class_base OPEN_PARENS $$82 opt_argument_list CLOSE_PARENS", //t "$$83 :", //t "$$84 :", -//t "$$85 :", -//t "$$86 :", -//t "class_declaration : opt_attributes opt_modifiers opt_partial CLASS $$83 type_declaration_name $$84 opt_primary_parameters_with_class_base opt_type_parameter_constraints_clauses $$85 OPEN_BRACE opt_class_member_declarations CLOSE_BRACE $$86 opt_semicolon", +//t "class_declaration : opt_attributes opt_modifiers opt_partial CLASS $$81 type_declaration_name $$82 opt_primary_parameters_with_class_base opt_type_parameter_constraints_clauses $$83 OPEN_BRACE opt_class_member_declarations CLOSE_BRACE $$84 opt_semicolon", //t "opt_partial :", //t "opt_partial : PARTIAL", //t "opt_modifiers :", @@ -1001,15 +980,12 @@ Set to null to suppress debugging messages. //t "opt_type_parameter_variance : type_parameter_variance", //t "type_parameter_variance : OUT", //t "type_parameter_variance : IN", -//t "$$87 :", -//t "block : OPEN_BRACE $$87 opt_statement_list block_end", +//t "$$85 :", +//t "block : OPEN_BRACE $$85 opt_statement_list block_end", //t "block_end : CLOSE_BRACE", //t "block_end : COMPLETE_COMPLETION", -//t "$$88 :", -//t "block_prepared : OPEN_BRACE $$88 opt_statement_list CLOSE_BRACE", -//t "block_prepared : CLOSE_BRACE", -//t "$$89 :", -//t "block_prepared_strict : OPEN_BRACE $$89 opt_statement_list CLOSE_BRACE", +//t "$$86 :", +//t "block_prepared : OPEN_BRACE $$86 opt_statement_list CLOSE_BRACE", //t "opt_statement_list :", //t "opt_statement_list : statement_list", //t "statement_list : statement", @@ -1017,7 +993,6 @@ Set to null to suppress debugging messages. //t "statement : block_variable_declaration", //t "statement : valid_declaration_statement", //t "statement : labeled_statement", -//t "statement : IDENTIFIER error", //t "statement : error", //t "interactive_statement_list : interactive_statement", //t "interactive_statement_list : interactive_statement_list interactive_statement", @@ -1055,8 +1030,8 @@ Set to null to suppress debugging messages. //t "embedded_statement : labeled_statement", //t "embedded_statement : error", //t "empty_statement : SEMICOLON", -//t "$$90 :", -//t "labeled_statement : identifier_inside_body COLON $$90 statement", +//t "$$87 :", +//t "labeled_statement : identifier_inside_body COLON $$87 statement", //t "variable_type : variable_type_simple", //t "variable_type : variable_type_simple rank_specifiers", //t "variable_type_simple : type_name_expression opt_nullable", @@ -1068,12 +1043,10 @@ Set to null to suppress debugging messages. //t "pointer_star : STAR", //t "identifier_inside_body : IDENTIFIER", //t "identifier_inside_body : AWAIT", -//t "$$91 :", -//t "block_variable_declaration : variable_type identifier_inside_body $$91 opt_local_variable_initializer opt_variable_declarators semicolon_or_handle_error_close_brace", -//t "$$92 :", -//t "block_variable_declaration : CONST variable_type identifier_inside_body $$92 const_variable_initializer opt_const_declarators SEMICOLON", -//t "semicolon_or_handle_error_close_brace : SEMICOLON", -//t "semicolon_or_handle_error_close_brace : CLOSE_BRACE", +//t "$$88 :", +//t "block_variable_declaration : variable_type identifier_inside_body $$88 opt_local_variable_initializer opt_variable_declarators SEMICOLON", +//t "$$89 :", +//t "block_variable_declaration : CONST variable_type identifier_inside_body $$89 const_variable_initializer opt_const_declarators SEMICOLON", //t "opt_local_variable_initializer :", //t "opt_local_variable_initializer : ASSIGN block_variable_initializer", //t "opt_local_variable_initializer : error", @@ -1108,8 +1081,8 @@ Set to null to suppress debugging messages. //t "if_statement : IF open_parens_any boolean_expression CLOSE_PARENS embedded_statement", //t "if_statement : IF open_parens_any boolean_expression CLOSE_PARENS embedded_statement ELSE embedded_statement", //t "if_statement : IF open_parens_any boolean_expression error", -//t "$$93 :", -//t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$93 opt_switch_sections CLOSE_BRACE", +//t "$$90 :", +//t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$90 opt_switch_sections CLOSE_BRACE", //t "switch_statement : SWITCH open_parens_any expression error", //t "opt_switch_sections :", //t "opt_switch_sections : switch_sections", @@ -1131,20 +1104,22 @@ Set to null to suppress debugging messages. //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression CLOSE_PARENS SEMICOLON", //t "do_statement : DO embedded_statement error", //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression error", -//t "$$94 :", -//t "for_statement : FOR open_parens_any $$94 for_statement_cont", -//t "$$95 :", -//t "for_statement_cont : opt_for_initializer SEMICOLON $$95 for_statement_condition", -//t "for_statement_cont : opt_for_initializer CLOSE_PARENS", -//t "$$96 :", -//t "for_statement_condition : opt_for_condition SEMICOLON $$96 for_statement_end", -//t "for_statement_condition : boolean_expression CLOSE_PARENS", -//t "for_statement_end : opt_for_iterator CLOSE_PARENS embedded_statement", -//t "for_statement_end : error", +//t "$$91 :", +//t "for_statement : FOR open_parens_any $$91 for_statement_cont", +//t "$$92 :", +//t "for_statement_cont : opt_for_initializer SEMICOLON $$92 for_condition_and_iterator_part embedded_statement", +//t "for_statement_cont : error", +//t "$$93 :", +//t "for_condition_and_iterator_part : opt_for_condition SEMICOLON $$93 for_iterator_part", +//t "for_condition_and_iterator_part : opt_for_condition close_parens_close_brace", +//t "for_iterator_part : opt_for_iterator CLOSE_PARENS", +//t "for_iterator_part : opt_for_iterator CLOSE_BRACE", +//t "close_parens_close_brace : CLOSE_PARENS", +//t "close_parens_close_brace : CLOSE_BRACE", //t "opt_for_initializer :", //t "opt_for_initializer : for_initializer", -//t "$$97 :", -//t "for_initializer : variable_type identifier_inside_body $$97 opt_local_variable_initializer opt_variable_declarators", +//t "$$94 :", +//t "for_initializer : variable_type identifier_inside_body $$94 opt_local_variable_initializer opt_variable_declarators", //t "for_initializer : statement_expression_list", //t "opt_for_condition :", //t "opt_for_condition : boolean_expression", @@ -1155,10 +1130,8 @@ Set to null to suppress debugging messages. //t "statement_expression_list : statement_expression_list COMMA statement_expression", //t "foreach_statement : FOREACH open_parens_any type error", //t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", -//t "$$98 :", -//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS $$98 embedded_statement", -//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", -//t "foreach_statement : FOREACH open_parens_any type error", +//t "$$95 :", +//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS $$95 embedded_statement", //t "jump_statement : break_statement", //t "jump_statement : continue_statement", //t "jump_statement : goto_statement", @@ -1191,26 +1164,24 @@ Set to null to suppress debugging messages. //t "opt_identifier :", //t "opt_identifier : identifier_inside_body", //t "catch_clause : CATCH opt_catch_filter block", -//t "$$99 :", -//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS $$99 opt_catch_filter_or_error", +//t "$$96 :", +//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS $$96 opt_catch_filter block_prepared", //t "catch_clause : CATCH open_parens_any error", -//t "opt_catch_filter_or_error : opt_catch_filter block_prepared", -//t "opt_catch_filter_or_error : error", +//t "catch_clause : CATCH open_parens_any type opt_identifier CLOSE_PARENS error", //t "opt_catch_filter :", -//t "$$100 :", -//t "opt_catch_filter : WHEN $$100 open_parens_any expression CLOSE_PARENS", +//t "opt_catch_filter : IF open_parens_any expression CLOSE_PARENS", //t "checked_statement : CHECKED block", //t "unchecked_statement : UNCHECKED block", -//t "$$101 :", -//t "unsafe_statement : UNSAFE $$101 block", +//t "$$97 :", +//t "unsafe_statement : UNSAFE $$97 block", //t "lock_statement : LOCK open_parens_any expression CLOSE_PARENS embedded_statement", //t "lock_statement : LOCK open_parens_any expression error", -//t "$$102 :", -//t "$$103 :", -//t "fixed_statement : FIXED open_parens_any variable_type identifier_inside_body $$102 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$103 embedded_statement", -//t "$$104 :", -//t "$$105 :", -//t "using_statement : USING open_parens_any variable_type identifier_inside_body $$104 using_initialization CLOSE_PARENS $$105 embedded_statement", +//t "$$98 :", +//t "$$99 :", +//t "fixed_statement : FIXED open_parens_any variable_type identifier_inside_body $$98 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$99 embedded_statement", +//t "$$100 :", +//t "$$101 :", +//t "using_statement : USING open_parens_any variable_type identifier_inside_body $$100 using_initialization CLOSE_PARENS $$101 embedded_statement", //t "using_statement : USING open_parens_any expression CLOSE_PARENS embedded_statement", //t "using_statement : USING open_parens_any expression error", //t "using_initialization : using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators", @@ -1225,20 +1196,20 @@ Set to null to suppress debugging messages. //t "first_from_clause : FROM_FIRST type identifier_inside_body IN expression", //t "nested_from_clause : FROM identifier_inside_body IN expression", //t "nested_from_clause : FROM type identifier_inside_body IN expression", -//t "$$106 :", -//t "from_clause : FROM identifier_inside_body IN $$106 expression_or_error", -//t "$$107 :", -//t "from_clause : FROM type identifier_inside_body IN $$107 expression_or_error", +//t "$$102 :", +//t "from_clause : FROM identifier_inside_body IN $$102 expression_or_error", +//t "$$103 :", +//t "from_clause : FROM type identifier_inside_body IN $$103 expression_or_error", //t "query_body : query_body_clauses select_or_group_clause opt_query_continuation", //t "query_body : select_or_group_clause opt_query_continuation", //t "query_body : query_body_clauses COMPLETE_COMPLETION", //t "query_body : query_body_clauses error", //t "query_body : error", -//t "$$108 :", -//t "select_or_group_clause : SELECT $$108 expression_or_error", -//t "$$109 :", -//t "$$110 :", -//t "select_or_group_clause : GROUP $$109 expression_or_error $$110 by_expression", +//t "$$104 :", +//t "select_or_group_clause : SELECT $$104 expression_or_error", +//t "$$105 :", +//t "$$106 :", +//t "select_or_group_clause : GROUP $$105 expression_or_error $$106 by_expression", //t "by_expression : BY expression_or_error", //t "by_expression : error", //t "query_body_clauses : query_body_clause", @@ -1248,28 +1219,28 @@ Set to null to suppress debugging messages. //t "query_body_clause : where_clause", //t "query_body_clause : join_clause", //t "query_body_clause : orderby_clause", +//t "$$107 :", +//t "let_clause : LET identifier_inside_body ASSIGN $$107 expression_or_error", +//t "$$108 :", +//t "where_clause : WHERE $$108 expression_or_error", +//t "$$109 :", +//t "$$110 :", //t "$$111 :", -//t "let_clause : LET identifier_inside_body ASSIGN $$111 expression_or_error", +//t "join_clause : JOIN identifier_inside_body IN $$109 expression_or_error ON $$110 expression_or_error EQUALS $$111 expression_or_error opt_join_into", //t "$$112 :", -//t "where_clause : WHERE $$112 expression_or_error", //t "$$113 :", //t "$$114 :", -//t "$$115 :", -//t "join_clause : JOIN identifier_inside_body IN $$113 expression_or_error ON $$114 expression_or_error EQUALS $$115 expression_or_error opt_join_into", -//t "$$116 :", -//t "$$117 :", -//t "$$118 :", -//t "join_clause : JOIN type identifier_inside_body IN $$116 expression_or_error ON $$117 expression_or_error EQUALS $$118 expression_or_error opt_join_into", +//t "join_clause : JOIN type identifier_inside_body IN $$112 expression_or_error ON $$113 expression_or_error EQUALS $$114 expression_or_error opt_join_into", //t "opt_join_into :", //t "opt_join_into : INTO identifier_inside_body", -//t "$$119 :", -//t "orderby_clause : ORDERBY $$119 orderings", +//t "$$115 :", +//t "orderby_clause : ORDERBY $$115 orderings", //t "orderings : order_by", -//t "$$120 :", -//t "orderings : order_by COMMA $$120 orderings_then_by", +//t "$$116 :", +//t "orderings : order_by COMMA $$116 orderings_then_by", //t "orderings_then_by : then_by", -//t "$$121 :", -//t "orderings_then_by : orderings_then_by COMMA $$121 then_by", +//t "$$117 :", +//t "orderings_then_by : orderings_then_by COMMA $$117 then_by", //t "order_by : expression", //t "order_by : expression ASCENDING", //t "order_by : expression DESCENDING", @@ -1277,12 +1248,12 @@ Set to null to suppress debugging messages. //t "then_by : expression ASCENDING", //t "then_by : expression DESCENDING", //t "opt_query_continuation :", -//t "$$122 :", -//t "opt_query_continuation : INTO identifier_inside_body $$122 query_body", +//t "$$118 :", +//t "opt_query_continuation : INTO identifier_inside_body $$118 query_body", //t "interactive_parsing : EVAL_STATEMENT_PARSER EOF", //t "interactive_parsing : EVAL_USING_DECLARATIONS_UNIT_PARSER using_directives opt_COMPLETE_COMPLETION", -//t "$$123 :", -//t "interactive_parsing : EVAL_STATEMENT_PARSER $$123 interactive_statement_list opt_COMPLETE_COMPLETION", +//t "$$119 :", +//t "interactive_parsing : EVAL_STATEMENT_PARSER $$119 interactive_statement_list opt_COMPLETE_COMPLETION", //t "interactive_parsing : EVAL_COMPILATION_UNIT_PARSER interactive_compilation_unit", //t "interactive_compilation_unit : opt_extern_alias_directives opt_using_directives", //t "interactive_compilation_unit : opt_extern_alias_directives opt_using_directives namespace_or_type_declarations", @@ -1296,16 +1267,16 @@ Set to null to suppress debugging messages. //t "doc_cref : VOID opt_doc_method_sig", //t "doc_cref : builtin_types DOT IDENTIFIER opt_doc_method_sig", //t "doc_cref : doc_type_declaration_name DOT THIS", -//t "$$124 :", -//t "doc_cref : doc_type_declaration_name DOT THIS OPEN_BRACKET $$124 opt_doc_parameters CLOSE_BRACKET", +//t "$$120 :", +//t "doc_cref : doc_type_declaration_name DOT THIS OPEN_BRACKET $$120 opt_doc_parameters CLOSE_BRACKET", //t "doc_cref : EXPLICIT OPERATOR type opt_doc_method_sig", //t "doc_cref : IMPLICIT OPERATOR type opt_doc_method_sig", //t "doc_cref : OPERATOR overloadable_operator opt_doc_method_sig", //t "doc_type_declaration_name : type_declaration_name", //t "doc_type_declaration_name : doc_type_declaration_name DOT type_declaration_name", //t "opt_doc_method_sig :", -//t "$$125 :", -//t "opt_doc_method_sig : OPEN_PARENS $$125 opt_doc_parameters CLOSE_PARENS", +//t "$$121 :", +//t "opt_doc_method_sig : OPEN_PARENS $$121 opt_doc_parameters CLOSE_PARENS", //t "opt_doc_parameters :", //t "opt_doc_parameters : doc_parameters", //t "doc_parameters : doc_parameter", @@ -1350,8 +1321,7 @@ Set to null to suppress debugging messages. "FROM_FIRST","JOIN","ON","EQUALS","SELECT","GROUP","BY","LET", "ORDERBY","ASCENDING","DESCENDING","INTO","INTERR_NULLABLE", "EXTERN_ALIAS","REFVALUE","REFTYPE","MAKEREF","ASYNC","AWAIT", - "INTERR_OPERATOR","WHEN","INTERPOLATED_STRING", - "INTERPOLATED_STRING_END","GET","SET","LAST_KEYWORD","OPEN_BRACE", + "INTERR_OPERATOR","GET","SET","LAST_KEYWORD","OPEN_BRACE", "CLOSE_BRACE","OPEN_BRACKET","CLOSE_BRACKET","OPEN_PARENS", "CLOSE_PARENS","DOT","COMMA","COLON","SEMICOLON","TILDE","PLUS", "MINUS","BANG","ASSIGN","OP_LT","OP_GT","BITWISE_AND","BITWISE_OR", @@ -1556,20 +1526,20 @@ internal Object yyparse (yyParser.yyInput yyLex) yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: -#line 392 "cs-parser.jay" +#line 381 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 2: -#line 393 "cs-parser.jay" +#line 382 "cs-parser.jay" { Lexer.CompleteOnEOF = false; } break; case 6: case_6(); break; case 7: -#line 412 "cs-parser.jay" +#line 401 "cs-parser.jay" { module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace); } @@ -1581,7 +1551,7 @@ internal Object yyparse (yyParser.yyInput yyLex) case_13(); break; case 14: -#line 457 "cs-parser.jay" +#line 446 "cs-parser.jay" { Error_SyntaxError (yyToken); } @@ -1598,17 +1568,23 @@ internal Object yyparse (yyParser.yyInput yyLex) case 20: case_20(); break; +case 21: + case_21(); + break; +case 22: + case_22(); + break; case 23: case_23(); break; case 24: case_24(); break; -case 25: - case_25(); +case 27: + case_27(); break; -case 26: - case_26(); +case 28: + case_28(); break; case 29: case_29(); @@ -1616,23 +1592,23 @@ internal Object yyparse (yyParser.yyInput yyLex) case 30: case_30(); break; -case 31: - case_31(); +case 43: + case_43(); break; -case 32: - case_32(); +case 44: +#line 631 "cs-parser.jay" + { + current_namespace.DeclarationFound = true; + } break; case 45: case_45(); break; -case 46: -#line 660 "cs-parser.jay" - { - current_namespace.DeclarationFound = true; - } +case 53: + case_53(); break; -case 47: - case_47(); +case 54: + case_54(); break; case 55: case_55(); @@ -1659,47 +1635,50 @@ internal Object yyparse (yyParser.yyInput yyLex) case_62(); break; case 63: - case_63(); +#line 757 "cs-parser.jay" + { yyVal = "event"; } break; case 64: - case_64(); +#line 758 "cs-parser.jay" + { yyVal = "return"; } break; case 65: -#line 787 "cs-parser.jay" - { yyVal = "event"; PushLocation (GetLocation (yyVals[0+yyTop])); } +#line 765 "cs-parser.jay" + { + yyVal = new List (4) { (Attribute) yyVals[0+yyTop] }; + } break; case 66: -#line 788 "cs-parser.jay" - { yyVal = "return"; PushLocation (GetLocation (yyVals[0+yyTop])); } + case_66(); break; case 67: -#line 795 "cs-parser.jay" +#line 782 "cs-parser.jay" { - yyVal = new List (4) { (Attribute) yyVals[0+yyTop] }; + ++lexer.parsing_block; } break; case 68: case_68(); break; -case 69: -#line 812 "cs-parser.jay" +case 70: +#line 801 "cs-parser.jay" + { yyVal = null; } + break; +case 71: +#line 805 "cs-parser.jay" { - ++lexer.parsing_block; + yyVal = yyVals[-1+yyTop]; } break; -case 70: - case_70(); - break; case 72: -#line 840 "cs-parser.jay" - { yyVal = null; HadAttributeParens = false; } +#line 810 "cs-parser.jay" + { yyVal = null; } break; case 73: case_73(); break; case 74: -#line 852 "cs-parser.jay" - { yyVal = null; } + case_74(); break; case 75: case_75(); @@ -1708,67 +1687,67 @@ internal Object yyparse (yyParser.yyInput yyLex) case_76(); break; case 77: - case_77(); - break; -case 78: - case_78(); - break; -case 79: -#line 896 "cs-parser.jay" +#line 852 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; -case 81: - case_81(); +case 79: + case_79(); break; -case 82: -#line 909 "cs-parser.jay" +case 80: +#line 865 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 83: - case_83(); +case 81: + case_81(); break; -case 84: - case_84(); +case 82: + case_82(); break; -case 86: -#line 940 "cs-parser.jay" +case 84: +#line 896 "cs-parser.jay" { yyVal = null; } break; -case 87: -#line 944 "cs-parser.jay" +case 85: +#line 900 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; -case 88: -#line 948 "cs-parser.jay" +case 86: +#line 904 "cs-parser.jay" { yyVal = Argument.AType.Out; } break; -case 91: - case_91(); +case 89: + case_89(); + break; +case 90: + case_90(); break; -case 92: - case_92(); +case 104: + case_104(); + break; +case 105: + case_105(); break; case 106: case_106(); break; case 107: - case_107(); +#line 981 "cs-parser.jay" + { + } break; case 108: case_108(); break; case 109: -#line 1025 "cs-parser.jay" - { - } + case_109(); break; case 110: case_110(); @@ -1780,52 +1759,52 @@ internal Object yyparse (yyParser.yyInput yyLex) case_112(); break; case 113: - case_113(); +#line 1031 "cs-parser.jay" + { + Error_SyntaxError (yyToken); + } break; case 114: case_114(); break; case 115: -#line 1075 "cs-parser.jay" - { - Error_SyntaxError (yyToken); - } + case_115(); break; case 116: case_116(); break; -case 117: - case_117(); - break; -case 118: - case_118(); +case 119: +#line 1080 "cs-parser.jay" + { + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } break; -case 121: -#line 1124 "cs-parser.jay" +case 120: +#line 1084 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; +case 121: + case_121(); + break; case 122: -#line 1128 "cs-parser.jay" +#line 1100 "cs-parser.jay" { - current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + ++lexer.parsing_block; } break; case 123: case_123(); break; case 124: -#line 1144 "cs-parser.jay" - { - ++lexer.parsing_block; - } + case_124(); break; -case 125: - case_125(); +case 127: + case_127(); break; -case 126: - case_126(); +case 128: + case_128(); break; case 129: case_129(); @@ -1834,132 +1813,132 @@ internal Object yyparse (yyParser.yyInput yyLex) case_130(); break; case 131: - case_131(); - break; -case 132: - case_132(); - break; -case 133: -#line 1223 "cs-parser.jay" +#line 1178 "cs-parser.jay" { report.Error (1641, GetLocation (yyVals[-1+yyTop]), "A fixed size buffer field must have the array size specifier after the field name"); } break; -case 135: - case_135(); +case 133: + case_133(); break; -case 136: - case_136(); +case 134: + case_134(); break; -case 139: -#line 1253 "cs-parser.jay" +case 137: +#line 1208 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 140: -#line 1257 "cs-parser.jay" +case 138: +#line 1212 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 141: - case_141(); +case 139: + case_139(); break; -case 142: -#line 1270 "cs-parser.jay" +case 140: +#line 1225 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 143: - case_143(); +case 141: + case_141(); break; -case 146: -#line 1289 "cs-parser.jay" +case 144: +#line 1244 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 147: -#line 1293 "cs-parser.jay" +case 145: +#line 1248 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 148: - case_148(); +case 146: + case_146(); break; -case 149: -#line 1309 "cs-parser.jay" +case 147: +#line 1264 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 150: - case_150(); +case 148: + case_148(); + break; +case 149: + case_149(); + break; +case 152: + case_152(); break; -case 151: - case_151(); +case 153: + case_153(); break; case 154: case_154(); break; case 155: - case_155(); +#line 1331 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.All; + } break; case 156: case_156(); break; case 157: -#line 1377 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.All; - } + case_157(); break; case 158: - case_158(); +#line 1371 "cs-parser.jay" + { + lexer.parsing_generic_declaration = true; + } break; case 159: case_159(); break; case 160: -#line 1416 "cs-parser.jay" +#line 1381 "cs-parser.jay" { - lexer.parsing_generic_declaration = true; + lexer.ConstraintsParsing = true; } break; case 161: case_161(); break; case 162: -#line 1426 "cs-parser.jay" - { - lexer.ConstraintsParsing = true; - } + case_162(); break; case 163: case_163(); break; -case 164: - case_164(); +case 167: +#line 1459 "cs-parser.jay" + { yyVal = null; } break; -case 165: - case_165(); +case 168: + case_168(); break; case 169: -#line 1504 "cs-parser.jay" - { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } + case_169(); break; case 170: - case_170(); - break; -case 171: - case_171(); +#line 1483 "cs-parser.jay" + { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 172: -#line 1528 "cs-parser.jay" - { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } + case_172(); + break; +case 173: + case_173(); break; case 174: case_174(); @@ -1977,23 +1956,23 @@ internal Object yyparse (yyParser.yyInput yyLex) case_178(); break; case 179: - case_179(); - break; -case 180: - case_180(); - break; -case 181: -#line 1600 "cs-parser.jay" +#line 1541 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; -case 182: -#line 1604 "cs-parser.jay" +case 180: +#line 1545 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); } break; +case 181: + case_181(); + break; +case 182: + case_182(); + break; case 183: case_183(); break; @@ -2010,30 +1989,30 @@ internal Object yyparse (yyParser.yyInput yyLex) case_187(); break; case 188: - case_188(); - break; -case 189: - case_189(); - break; -case 190: -#line 1685 "cs-parser.jay" +#line 1623 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 191: - case_191(); +case 189: + case_189(); break; -case 192: -#line 1726 "cs-parser.jay" +case 190: +#line 1664 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; -case 194: -#line 1734 "cs-parser.jay" +case 192: +#line 1672 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; +case 193: + case_193(); + break; +case 194: + case_194(); + break; case 195: case_195(); break; @@ -2056,16 +2035,16 @@ internal Object yyparse (yyParser.yyInput yyLex) case_201(); break; case 202: - case_202(); +#line 1762 "cs-parser.jay" + { + Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); + } break; case 203: case_203(); break; case 204: -#line 1828 "cs-parser.jay" - { - Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); - } + case_204(); break; case 205: case_205(); @@ -2077,49 +2056,49 @@ internal Object yyparse (yyParser.yyInput yyLex) case_207(); break; case 208: - case_208(); +#line 1812 "cs-parser.jay" + { + current_property = null; + } break; case 209: case_209(); break; case 210: -#line 1878 "cs-parser.jay" - { - current_property = null; - } - break; -case 211: - case_211(); + case_210(); break; case 212: case_212(); break; -case 214: - case_214(); - break; -case 215: - case_215(); +case 213: + case_213(); break; -case 218: -#line 1940 "cs-parser.jay" +case 216: +#line 1874 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; -case 219: - case_219(); +case 217: + case_217(); break; -case 220: - case_220(); +case 218: + case_218(); break; -case 221: -#line 1986 "cs-parser.jay" +case 219: +#line 1920 "cs-parser.jay" { lbag.AppendToMember (current_property, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } break; -case 222: - case_222(); +case 220: + case_220(); + break; +case 225: + case_225(); + break; +case 226: + case_226(); break; case 227: case_227(); @@ -2130,22 +2109,22 @@ internal Object yyparse (yyParser.yyInput yyLex) case 229: case_229(); break; -case 230: - case_230(); - break; case 231: case_231(); break; +case 232: + case_232(); + break; case 233: - case_233(); +#line 2057 "cs-parser.jay" + { + } break; case 234: case_234(); break; case 235: -#line 2127 "cs-parser.jay" - { - } + case_235(); break; case 236: case_236(); @@ -2154,163 +2133,166 @@ internal Object yyparse (yyParser.yyInput yyLex) case_237(); break; case 238: - case_238(); - break; -case 239: - case_239(); - break; -case 240: -#line 2167 "cs-parser.jay" +#line 2097 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; -case 243: - case_243(); +case 241: + case_241(); break; -case 244: - case_244(); +case 242: + case_242(); break; -case 245: -#line 2192 "cs-parser.jay" +case 243: +#line 2122 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; -case 246: -#line 2196 "cs-parser.jay" +case 244: +#line 2126 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; -case 251: -#line 2204 "cs-parser.jay" +case 249: +#line 2134 "cs-parser.jay" { report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; -case 252: -#line 2208 "cs-parser.jay" +case 250: +#line 2138 "cs-parser.jay" { report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; -case 253: -#line 2212 "cs-parser.jay" +case 251: +#line 2142 "cs-parser.jay" { report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; -case 254: -#line 2218 "cs-parser.jay" +case 252: +#line 2148 "cs-parser.jay" { } break; +case 253: + case_253(); + break; case 255: case_255(); break; +case 256: + case_256(); + break; case 257: case_257(); break; -case 258: - case_258(); - break; case 259: - case_259(); +#line 2239 "cs-parser.jay" + { yyVal = Operator.OpType.LogicalNot; } + break; +case 260: +#line 2240 "cs-parser.jay" + { yyVal = Operator.OpType.OnesComplement; } break; case 261: -#line 2312 "cs-parser.jay" - { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2241 "cs-parser.jay" + { yyVal = Operator.OpType.Increment; } break; case 262: -#line 2313 "cs-parser.jay" - { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2242 "cs-parser.jay" + { yyVal = Operator.OpType.Decrement; } break; case 263: -#line 2314 "cs-parser.jay" - { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2243 "cs-parser.jay" + { yyVal = Operator.OpType.True; } break; case 264: -#line 2315 "cs-parser.jay" - { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2244 "cs-parser.jay" + { yyVal = Operator.OpType.False; } break; case 265: -#line 2316 "cs-parser.jay" - { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2246 "cs-parser.jay" + { yyVal = Operator.OpType.Addition; } break; case 266: -#line 2317 "cs-parser.jay" - { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2247 "cs-parser.jay" + { yyVal = Operator.OpType.Subtraction; } break; case 267: -#line 2319 "cs-parser.jay" - { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2249 "cs-parser.jay" + { yyVal = Operator.OpType.Multiply; } break; case 268: -#line 2320 "cs-parser.jay" - { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2250 "cs-parser.jay" + { yyVal = Operator.OpType.Division; } break; case 269: -#line 2322 "cs-parser.jay" - { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2251 "cs-parser.jay" + { yyVal = Operator.OpType.Modulus; } break; case 270: -#line 2323 "cs-parser.jay" - { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2252 "cs-parser.jay" + { yyVal = Operator.OpType.BitwiseAnd; } break; case 271: -#line 2324 "cs-parser.jay" - { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2253 "cs-parser.jay" + { yyVal = Operator.OpType.BitwiseOr; } break; case 272: -#line 2325 "cs-parser.jay" - { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2254 "cs-parser.jay" + { yyVal = Operator.OpType.ExclusiveOr; } break; case 273: -#line 2326 "cs-parser.jay" - { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2255 "cs-parser.jay" + { yyVal = Operator.OpType.LeftShift; } break; case 274: -#line 2327 "cs-parser.jay" - { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2256 "cs-parser.jay" + { yyVal = Operator.OpType.RightShift; } break; case 275: -#line 2328 "cs-parser.jay" - { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2257 "cs-parser.jay" + { yyVal = Operator.OpType.Equality; } break; case 276: -#line 2329 "cs-parser.jay" - { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2258 "cs-parser.jay" + { yyVal = Operator.OpType.Inequality; } break; case 277: -#line 2330 "cs-parser.jay" - { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2259 "cs-parser.jay" + { yyVal = Operator.OpType.GreaterThan; } break; case 278: -#line 2331 "cs-parser.jay" - { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2260 "cs-parser.jay" + { yyVal = Operator.OpType.LessThan; } break; case 279: -#line 2332 "cs-parser.jay" - { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2261 "cs-parser.jay" + { yyVal = Operator.OpType.GreaterThanOrEqual; } break; case 280: -#line 2333 "cs-parser.jay" - { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2262 "cs-parser.jay" + { yyVal = Operator.OpType.LessThanOrEqual; } break; case 281: -#line 2334 "cs-parser.jay" - { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } + case_281(); break; case 282: -#line 2335 "cs-parser.jay" - { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2276 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.DefaultValue; + } break; case 283: case_283(); break; case 284: -#line 2349 "cs-parser.jay" +#line 2299 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } @@ -2319,10 +2301,7 @@ internal Object yyparse (yyParser.yyInput yyLex) case_285(); break; case 286: -#line 2372 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.DefaultValue; - } + case_286(); break; case 287: case_287(); @@ -2339,18 +2318,21 @@ internal Object yyparse (yyParser.yyInput yyLex) case 291: case_291(); break; -case 292: - case_292(); - break; case 293: - case_293(); - break; -case 295: -#line 2496 "cs-parser.jay" +#line 2423 "cs-parser.jay" { current_block = null; yyVal = null; } break; +case 296: +#line 2435 "cs-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 297: + case_297(); + break; case 298: -#line 2508 "cs-parser.jay" +#line 2445 "cs-parser.jay" { ++lexer.parsing_block; } @@ -2359,10 +2341,7 @@ internal Object yyparse (yyParser.yyInput yyLex) case_299(); break; case 300: -#line 2518 "cs-parser.jay" - { - ++lexer.parsing_block; - } + case_300(); break; case 301: case_301(); @@ -2391,54 +2370,54 @@ internal Object yyparse (yyParser.yyInput yyLex) case 309: case_309(); break; -case 310: - case_310(); - break; case 311: - case_311(); - break; -case 313: -#line 2645 "cs-parser.jay" +#line 2568 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 314: - case_314(); +case 312: + case_312(); break; -case 317: -#line 2663 "cs-parser.jay" +case 315: +#line 2585 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 318: -#line 2667 "cs-parser.jay" +case 316: +#line 2589 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 319: - case_319(); +case 317: + case_317(); break; -case 320: -#line 2680 "cs-parser.jay" +case 318: +#line 2602 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 321: - case_321(); +case 319: + case_319(); break; -case 322: - case_322(); +case 320: + case_320(); break; -case 323: -#line 2705 "cs-parser.jay" +case 321: +#line 2627 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; +case 324: + case_324(); + break; +case 325: + case_325(); + break; case 326: case_326(); break; @@ -2457,12 +2436,12 @@ internal Object yyparse (yyParser.yyInput yyLex) case 331: case_331(); break; -case 332: - case_332(); - break; case 333: case_333(); break; +case 334: + case_334(); + break; case 335: case_335(); break; @@ -2475,24 +2454,27 @@ internal Object yyparse (yyParser.yyInput yyLex) case 338: case_338(); break; -case 339: - case_339(); - break; case 340: - case_340(); - break; -case 342: - case_342(); +#line 2790 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; -case 343: - case_343(); +case 341: + case_341(); break; -case 346: -#line 2893 "cs-parser.jay" +case 344: +#line 2804 "cs-parser.jay" { - lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); + lbag.AddLocation (yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; +case 346: + case_346(); + break; +case 347: + case_347(); + break; case 348: case_348(); break; @@ -2502,51 +2484,51 @@ internal Object yyparse (yyParser.yyInput yyLex) case 350: case_350(); break; -case 351: - case_351(); - break; case 352: - case_352(); - break; -case 354: -#line 2967 "cs-parser.jay" +#line 2878 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; -case 355: - case_355(); +case 353: + case_353(); break; -case 356: -#line 2986 "cs-parser.jay" +case 354: +#line 2897 "cs-parser.jay" { lexer.ConstraintsParsing = false; } break; +case 355: + case_355(); + break; case 357: case_357(); break; case 359: case_359(); break; -case 361: - case_361(); +case 360: + case_360(); break; case 362: case_362(); break; +case 363: + case_363(); + break; case 364: case_364(); break; case 365: case_365(); break; -case 366: - case_366(); - break; case 367: case_367(); break; +case 368: + case_368(); + break; case 369: case_369(); break; @@ -2554,23 +2536,23 @@ internal Object yyparse (yyParser.yyInput yyLex) case_370(); break; case 371: - case_371(); +#line 3016 "cs-parser.jay" + { + lexer.parsing_generic_declaration = true; + } break; case 372: case_372(); break; case 373: -#line 3111 "cs-parser.jay" - { - lexer.parsing_generic_declaration = true; - } - break; -case 374: - case_374(); + case_373(); break; case 375: case_375(); break; +case 376: + case_376(); + break; case 377: case_377(); break; @@ -2583,12 +2565,12 @@ internal Object yyparse (yyParser.yyInput yyLex) case 380: case_380(); break; -case 381: - case_381(); - break; case 382: case_382(); break; +case 383: + case_383(); + break; case 384: case_384(); break; @@ -2598,197 +2580,191 @@ internal Object yyparse (yyParser.yyInput yyLex) case 386: case_386(); break; -case 387: - case_387(); - break; case 388: - case_388(); - break; -case 390: -#line 3236 "cs-parser.jay" +#line 3134 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; -case 391: -#line 3243 "cs-parser.jay" +case 389: +#line 3141 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; -case 397: - case_397(); +case 395: + case_395(); break; -case 399: -#line 3273 "cs-parser.jay" +case 397: +#line 3171 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 400: - case_400(); +case 398: + case_398(); break; -case 401: -#line 3292 "cs-parser.jay" +case 399: +#line 3190 "cs-parser.jay" { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 403: - case_403(); +case 401: + case_401(); break; -case 404: - case_404(); +case 402: + case_402(); break; -case 405: -#line 3313 "cs-parser.jay" +case 403: +#line 3211 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 406: -#line 3317 "cs-parser.jay" +case 404: +#line 3215 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; +case 405: + case_405(); + break; +case 406: + case_406(); + break; case 407: case_407(); break; case 408: - case_408(); - break; -case 409: - case_409(); - break; -case 410: -#line 3351 "cs-parser.jay" +#line 3248 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; -case 411: -#line 3352 "cs-parser.jay" +case 409: +#line 3249 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; -case 412: -#line 3353 "cs-parser.jay" +case 410: +#line 3250 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; -case 413: -#line 3354 "cs-parser.jay" +case 411: +#line 3251 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; -case 414: -#line 3355 "cs-parser.jay" +case 412: +#line 3252 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; -case 415: -#line 3356 "cs-parser.jay" +case 413: +#line 3253 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; -case 417: -#line 3361 "cs-parser.jay" +case 415: +#line 3258 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; -case 418: -#line 3362 "cs-parser.jay" +case 416: +#line 3259 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; -case 419: -#line 3363 "cs-parser.jay" +case 417: +#line 3260 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; -case 420: -#line 3364 "cs-parser.jay" +case 418: +#line 3261 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; -case 421: -#line 3365 "cs-parser.jay" +case 419: +#line 3262 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; -case 422: -#line 3366 "cs-parser.jay" +case 420: +#line 3263 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; -case 423: -#line 3367 "cs-parser.jay" +case 421: +#line 3264 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; -case 424: -#line 3368 "cs-parser.jay" +case 422: +#line 3265 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; -case 425: -#line 3369 "cs-parser.jay" +case 423: +#line 3266 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; -case 448: - case_448(); +case 445: + case_445(); break; -case 452: -#line 3413 "cs-parser.jay" +case 449: +#line 3309 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; -case 453: -#line 3417 "cs-parser.jay" +case 450: +#line 3313 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; -case 454: -#line 3418 "cs-parser.jay" +case 451: +#line 3314 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; -case 455: -#line 3425 "cs-parser.jay" - { - yyVal = new InterpolatedString ((StringLiteral) yyVals[-2+yyTop], (List) yyVals[-1+yyTop], (StringLiteral) yyVals[0+yyTop]); - } - break; case 456: -#line 3429 "cs-parser.jay" - { - yyVal = new InterpolatedString ((StringLiteral) yyVals[0+yyTop], null, null); - } + case_456(); break; case 457: - case_457(); +#line 3347 "cs-parser.jay" + { + yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 458: case_458(); break; case 459: -#line 3452 "cs-parser.jay" - { - yyVal = new InterpolatedStringInsert ((Expression) yyVals[0+yyTop]); - } + case_459(); break; case 460: case_460(); break; case 461: -#line 3462 "cs-parser.jay" - { - lexer.parsing_interpolation_format = true; - } + case_461(); break; case 462: case_462(); break; case 463: -#line 3474 "cs-parser.jay" - { - lexer.parsing_interpolation_format = true; - } + case_463(); break; case 464: case_464(); break; +case 465: + case_465(); + break; +case 466: +#line 3408 "cs-parser.jay" + { + yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); + } + break; +case 467: + case_467(); + break; +case 468: +#line 3416 "cs-parser.jay" + { + yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); + } + break; case 469: case_469(); break; case 470: -#line 3516 "cs-parser.jay" - { - yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); - } + case_470(); break; case 471: case_471(); @@ -2797,10 +2773,8 @@ internal Object yyparse (yyParser.yyInput yyLex) case_472(); break; case 473: - case_473(); - break; -case 474: - case_474(); +#line 3446 "cs-parser.jay" + { yyVal = null; } break; case 475: case_475(); @@ -2809,25 +2783,23 @@ internal Object yyparse (yyParser.yyInput yyLex) case_476(); break; case 477: - case_477(); +#line 3468 "cs-parser.jay" + { yyVal = null; } break; case 478: - case_478(); +#line 3472 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 479: -#line 3577 "cs-parser.jay" - { - yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); - } + case_479(); break; case 480: case_480(); break; case 481: -#line 3585 "cs-parser.jay" - { - yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); - } + case_481(); break; case 482: case_482(); @@ -2836,33 +2808,26 @@ internal Object yyparse (yyParser.yyInput yyLex) case_483(); break; case 484: - case_484(); +#line 3510 "cs-parser.jay" + { + yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); + } break; case 485: case_485(); break; case 486: -#line 3615 "cs-parser.jay" - { yyVal = null; } + case_486(); + break; +case 487: + case_487(); break; case 488: case_488(); break; -case 489: - case_489(); - break; -case 490: -#line 3637 "cs-parser.jay" - { yyVal = null; } - break; case 491: -#line 3641 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } - break; -case 492: - case_492(); +#line 3549 "cs-parser.jay" + { yyVal = null; } break; case 493: case_493(); @@ -2877,26 +2842,31 @@ internal Object yyparse (yyParser.yyInput yyLex) case_496(); break; case 497: -#line 3680 "cs-parser.jay" - { - yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); - } + case_497(); break; case 498: - case_498(); - break; -case 499: - case_499(); +#line 3601 "cs-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop]); + } break; -case 500: - case_500(); +case 502: + case_502(); break; -case 501: - case_501(); +case 503: +#line 3619 "cs-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); + } break; case 504: -#line 3720 "cs-parser.jay" - { yyVal = null; } + case_504(); + break; +case 505: +#line 3628 "cs-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); + } break; case 506: case_506(); @@ -2913,50 +2883,59 @@ internal Object yyparse (yyParser.yyInput yyLex) case 510: case_510(); break; -case 511: -#line 3774 "cs-parser.jay" - { - yyVal = new Argument ((Expression) yyVals[0+yyTop]); - } +case 512: + case_512(); + break; +case 513: + case_513(); + break; +case 514: + case_514(); break; case 515: case_515(); break; case 516: -#line 3792 "cs-parser.jay" - { - yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); - } + case_516(); break; case 517: case_517(); break; case 518: -#line 3801 "cs-parser.jay" - { - yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); - } + case_518(); break; case 519: case_519(); break; case 520: - case_520(); - break; -case 521: - case_521(); +#line 3753 "cs-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop]); + } break; case 522: - case_522(); +#line 3761 "cs-parser.jay" + { + yyVal = new This (GetLocation (yyVals[0+yyTop])); + } break; case 523: case_523(); break; +case 524: + case_524(); + break; case 525: - case_525(); +#line 3781 "cs-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + } break; case 526: - case_526(); +#line 3788 "cs-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + } break; case 527: case_527(); @@ -2977,40 +2956,29 @@ internal Object yyparse (yyParser.yyInput yyLex) case_532(); break; case 533: -#line 3928 "cs-parser.jay" + case_533(); + break; +case 534: +#line 3855 "cs-parser.jay" { - yyVal = new Argument ((Expression) yyVals[0+yyTop]); + ++lexer.parsing_type; } break; case 535: -#line 3936 "cs-parser.jay" - { - yyVal = new This (GetLocation (yyVals[0+yyTop])); - } + case_535(); break; case 536: case_536(); break; case 537: - case_537(); - break; -case 538: -#line 3956 "cs-parser.jay" - { - yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); - } - break; -case 539: -#line 3963 "cs-parser.jay" +#line 3877 "cs-parser.jay" { - yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + yyVal = new EmptyCompletion (); } break; case 540: - case_540(); - break; -case 541: - case_541(); +#line 3886 "cs-parser.jay" + { yyVal = null; } break; case 542: case_542(); @@ -3019,19 +2987,22 @@ internal Object yyparse (yyParser.yyInput yyLex) case_543(); break; case 544: - case_544(); +#line 3906 "cs-parser.jay" + { + yyVal = new EmptyCompletion (); + } break; case 545: - case_545(); +#line 3910 "cs-parser.jay" + { + yyVal = yyVals[-1+yyTop]; + } break; case 546: case_546(); break; case 547: -#line 4030 "cs-parser.jay" - { - ++lexer.parsing_type; - } + case_547(); break; case 548: case_548(); @@ -3039,36 +3010,38 @@ internal Object yyparse (yyParser.yyInput yyLex) case 549: case_549(); break; -case 550: -#line 4052 "cs-parser.jay" - { - yyVal = new EmptyCompletion (); - } - break; case 553: -#line 4061 "cs-parser.jay" - { yyVal = null; } + case_553(); + break; +case 554: + case_554(); break; case 555: case_555(); break; case 556: - case_556(); +#line 3970 "cs-parser.jay" + { + yyVal = 2; + } break; case 557: -#line 4083 "cs-parser.jay" +#line 3974 "cs-parser.jay" { - yyVal = new EmptyCompletion (); + yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; case 558: -#line 4087 "cs-parser.jay" +#line 3981 "cs-parser.jay" { - yyVal = yyVals[-1+yyTop]; + yyVal = null; } break; case 559: - case_559(); +#line 3985 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 560: case_560(); @@ -3079,6 +3052,12 @@ internal Object yyparse (yyParser.yyInput yyLex) case 562: case_562(); break; +case 563: + case_563(); + break; +case 564: + case_564(); + break; case 566: case_566(); break; @@ -3089,28 +3068,16 @@ internal Object yyparse (yyParser.yyInput yyLex) case_568(); break; case 569: -#line 4147 "cs-parser.jay" - { - yyVal = 2; - } + case_569(); break; case 570: -#line 4151 "cs-parser.jay" - { - yyVal = ((int) yyVals[-1+yyTop]) + 1; - } + case_570(); break; case 571: -#line 4158 "cs-parser.jay" - { - yyVal = null; - } + case_571(); break; case 572: -#line 4162 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_572(); break; case 573: case_573(); @@ -3122,22 +3089,40 @@ internal Object yyparse (yyParser.yyInput yyLex) case_575(); break; case 576: - case_576(); +#line 4117 "cs-parser.jay" + { + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); + } break; case 577: - case_577(); +#line 4121 "cs-parser.jay" + { + yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); + } + break; +case 578: +#line 4125 "cs-parser.jay" + { + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); + } break; case 579: - case_579(); +#line 4129 "cs-parser.jay" + { + yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); + } break; case 580: - case_580(); - break; -case 581: - case_581(); +#line 4136 "cs-parser.jay" + { + yyVal = ParametersCompiled.Undefined; + } break; case 582: - case_582(); +#line 4144 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } break; case 583: case_583(); @@ -3145,64 +3130,70 @@ internal Object yyparse (yyParser.yyInput yyLex) case 584: case_584(); break; -case 585: - case_585(); - break; case 586: - case_586(); +#line 4168 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 587: - case_587(); +#line 4172 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 588: case_588(); break; case 589: -#line 4295 "cs-parser.jay" - { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); - } + case_589(); break; case 590: case_590(); break; case 591: -#line 4308 "cs-parser.jay" - { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); - } + case_591(); break; case 592: case_592(); break; case 593: -#line 4325 "cs-parser.jay" - { - yyVal = ParametersCompiled.Undefined; - } + case_593(); break; case 595: -#line 4333 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; +#line 4236 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 596: - case_596(); +#line 4240 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 597: - case_597(); +#line 4244 "cs-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 598: +#line 4248 "cs-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 599: -#line 4359 "cs-parser.jay" +#line 4252 "cs-parser.jay" { - yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 600: -#line 4363 "cs-parser.jay" +#line 4256 "cs-parser.jay" { - yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 601: @@ -3224,43 +3215,22 @@ internal Object yyparse (yyParser.yyInput yyLex) case_606(); break; case 608: -#line 4427 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_608(); break; case 609: -#line 4431 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_609(); break; case 610: -#line 4435 "cs-parser.jay" - { - yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_610(); break; case 611: -#line 4439 "cs-parser.jay" - { - yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_611(); break; case 612: -#line 4443 "cs-parser.jay" - { - yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_612(); break; case 613: -#line 4447 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } - break; -case 614: - case_614(); + case_613(); break; case 615: case_615(); @@ -3275,7 +3245,13 @@ internal Object yyparse (yyParser.yyInput yyLex) case_618(); break; case 619: - case_619(); +#line 4364 "cs-parser.jay" + { + yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 620: + case_620(); break; case 621: case_621(); @@ -3292,77 +3268,74 @@ internal Object yyparse (yyParser.yyInput yyLex) case 625: case_625(); break; -case 626: - case_626(); - break; case 628: - case_628(); +#line 4420 "cs-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 629: - case_629(); - break; -case 630: - case_630(); - break; -case 631: - case_631(); - break; -case 632: -#line 4555 "cs-parser.jay" +#line 4424 "cs-parser.jay" { - yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 633: - case_633(); - break; -case 634: - case_634(); +case 632: + case_632(); break; -case 635: - case_635(); +case 633: +#line 4435 "cs-parser.jay" + { + yyVal = new WildcardPattern (GetLocation (yyVals[0+yyTop])); + } break; case 636: - case_636(); +#line 4444 "cs-parser.jay" + { + yyVal = new RecursivePattern ((ATypeNameExpression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 637: - case_637(); +#line 4451 "cs-parser.jay" + { + yyVal = new PropertyPattern ((ATypeNameExpression) yyVals[-3+yyTop], (List) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 638: case_638(); break; -case 641: -#line 4611 "cs-parser.jay" - { - yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } +case 639: + case_639(); + break; +case 640: + case_640(); break; case 642: -#line 4615 "cs-parser.jay" + case_642(); + break; +case 643: +#line 4493 "cs-parser.jay" { - yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Arguments (0); } break; case 645: case_645(); break; case 646: -#line 4626 "cs-parser.jay" - { - yyVal = new WildcardPattern (GetLocation (yyVals[0+yyTop])); - } + case_646(); break; -case 649: -#line 4635 "cs-parser.jay" +case 647: +#line 4519 "cs-parser.jay" { - yyVal = new RecursivePattern ((ATypeNameExpression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; +case 648: + case_648(); + break; case 650: -#line 4642 "cs-parser.jay" - { - yyVal = new PropertyPattern ((ATypeNameExpression) yyVals[-3+yyTop], (List) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); - } + case_650(); break; case 651: case_651(); @@ -3377,10 +3350,10 @@ internal Object yyparse (yyParser.yyInput yyLex) case_655(); break; case 656: -#line 4684 "cs-parser.jay" - { - yyVal = new Arguments (0); - } + case_656(); + break; +case 657: + case_657(); break; case 658: case_658(); @@ -3389,16 +3362,13 @@ internal Object yyparse (yyParser.yyInput yyLex) case_659(); break; case 660: -#line 4710 "cs-parser.jay" - { - yyVal = new Argument ((Expression) yyVals[0+yyTop]); - } + case_660(); break; case 661: case_661(); break; -case 663: - case_663(); +case 662: + case_662(); break; case 664: case_664(); @@ -3409,8 +3379,8 @@ internal Object yyparse (yyParser.yyInput yyLex) case 666: case_666(); break; -case 668: - case_668(); +case 667: + case_667(); break; case 669: case_669(); @@ -3418,23 +3388,17 @@ internal Object yyparse (yyParser.yyInput yyLex) case 670: case_670(); break; -case 671: - case_671(); - break; case 672: case_672(); break; case 673: case_673(); break; -case 674: - case_674(); - break; case 675: case_675(); break; -case 677: - case_677(); +case 676: + case_676(); break; case 678: case_678(); @@ -3442,42 +3406,54 @@ internal Object yyparse (yyParser.yyInput yyLex) case 679: case_679(); break; -case 680: - case_680(); +case 681: + case_681(); break; case 682: case_682(); break; -case 683: - case_683(); - break; -case 685: - case_685(); +case 684: + case_684(); break; case 686: case_686(); break; +case 687: + case_687(); + break; case 688: case_688(); break; case 689: case_689(); break; +case 690: + case_690(); + break; case 691: case_691(); break; case 692: case_692(); break; +case 693: + case_693(); + break; case 694: case_694(); break; case 695: case_695(); break; +case 696: + case_696(); + break; case 697: case_697(); break; +case 698: + case_698(); + break; case 699: case_699(); break; @@ -3503,26 +3479,24 @@ internal Object yyparse (yyParser.yyInput yyLex) case_706(); break; case 707: - case_707(); +#line 4862 "cs-parser.jay" + { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 708: case_708(); break; case 709: - case_709(); +#line 4872 "cs-parser.jay" + { + start_block (Location.Null); + } break; case 710: case_710(); break; -case 711: - case_711(); - break; case 712: case_712(); break; -case 713: - case_713(); - break; case 714: case_714(); break; @@ -3542,122 +3516,128 @@ internal Object yyparse (yyParser.yyInput yyLex) case_719(); break; case 720: -#line 5055 "cs-parser.jay" - { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } + case_720(); break; case 721: - case_721(); - break; -case 722: -#line 5066 "cs-parser.jay" +#line 4939 "cs-parser.jay" { - start_block (Location.Null); + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; +case 722: + case_722(); + break; case 723: case_723(); break; +case 724: +#line 4953 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; case 725: case_725(); break; -case 727: - case_727(); - break; -case 728: - case_728(); - break; -case 729: - case_729(); - break; -case 730: - case_730(); - break; -case 731: - case_731(); +case 726: + case_726(); break; case 732: - case_732(); +#line 4978 "cs-parser.jay" + { + yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); + } break; case 733: case_733(); break; case 734: -#line 5133 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } + case_734(); break; case 735: case_735(); break; -case 736: - case_736(); - break; case 737: -#line 5147 "cs-parser.jay" +#line 5007 "cs-parser.jay" { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; case 738: - case_738(); +#line 5014 "cs-parser.jay" + { + yyVal = null; + } break; -case 739: - case_739(); +case 740: + case_740(); break; -case 745: -#line 5172 "cs-parser.jay" +case 741: +#line 5035 "cs-parser.jay" { - yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); + yyVal = null; + } + break; +case 742: +#line 5039 "cs-parser.jay" + { + yyVal = null; + } + break; +case 743: +#line 5043 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 744: +#line 5047 "cs-parser.jay" + { + yyVal = yyVals[-1+yyTop]; } break; +case 745: + case_745(); + break; case 746: case_746(); break; case 747: - case_747(); +#line 5072 "cs-parser.jay" + { + } break; case 748: case_748(); break; +case 749: + case_749(); + break; case 750: -#line 5201 "cs-parser.jay" - { - yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); - } + case_750(); break; case 751: -#line 5208 "cs-parser.jay" - { - yyVal = null; - } + case_751(); + break; +case 752: +#line 5124 "cs-parser.jay" + { yyVal = null; } break; case 753: - case_753(); +#line 5126 "cs-parser.jay" + { yyVal = yyVals[0+yyTop]; } break; case 754: -#line 5229 "cs-parser.jay" - { - yyVal = null; - } + case_754(); break; case 755: -#line 5233 "cs-parser.jay" - { - yyVal = null; - } - break; -case 756: -#line 5237 "cs-parser.jay" +#line 5139 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + lexer.parsing_modifiers = false; } break; case 757: -#line 5241 "cs-parser.jay" - { - yyVal = yyVals[-1+yyTop]; - } + case_757(); break; case 758: case_758(); @@ -3666,9 +3646,7 @@ internal Object yyparse (yyParser.yyInput yyLex) case_759(); break; case 760: -#line 5266 "cs-parser.jay" - { - } + case_760(); break; case 761: case_761(); @@ -3683,21 +3661,19 @@ internal Object yyparse (yyParser.yyInput yyLex) case_764(); break; case 765: -#line 5318 "cs-parser.jay" - { yyVal = null; } + case_765(); break; case 766: -#line 5320 "cs-parser.jay" - { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } + case_766(); break; case 767: case_767(); break; case 768: -#line 5333 "cs-parser.jay" - { - lexer.parsing_modifiers = false; - } + case_768(); + break; +case 769: + case_769(); break; case 770: case_770(); @@ -3708,23 +3684,20 @@ internal Object yyparse (yyParser.yyInput yyLex) case 772: case_772(); break; -case 773: - case_773(); - break; -case 774: - case_774(); - break; case 775: - case_775(); - break; +#line 5254 "cs-parser.jay" + { + current_type.SetBaseTypes ((List) yyVals[0+yyTop]); + } + break; case 776: case_776(); break; -case 777: - case_777(); - break; case 778: - case_778(); +#line 5268 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 779: case_779(); @@ -3747,26 +3720,50 @@ internal Object yyparse (yyParser.yyInput yyLex) case 785: case_785(); break; +case 786: + case_786(); + break; +case 787: +#line 5360 "cs-parser.jay" + { + yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); + } + break; case 788: - case_788(); +#line 5364 "cs-parser.jay" + { + yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); + } break; case 789: - case_789(); +#line 5371 "cs-parser.jay" + { + yyVal = null; + } + break; +case 790: + case_790(); break; case 791: -#line 5463 "cs-parser.jay" +#line 5385 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + yyVal = new VarianceDecl (Variance.Covariant, GetLocation (yyVals[0+yyTop])); } break; case 792: - case_792(); +#line 5389 "cs-parser.jay" + { + yyVal = new VarianceDecl (Variance.Contravariant, GetLocation (yyVals[0+yyTop])); + } break; case 793: case_793(); break; case 794: - case_794(); +#line 5414 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 795: case_795(); @@ -3780,94 +3777,70 @@ internal Object yyparse (yyParser.yyInput yyLex) case 798: case_798(); break; -case 799: - case_799(); - break; -case 800: -#line 5556 "cs-parser.jay" - { - yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); - } - break; -case 801: -#line 5560 "cs-parser.jay" +case 803: +#line 5458 "cs-parser.jay" { - yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); + current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 802: -#line 5567 "cs-parser.jay" +case 804: +#line 5462 "cs-parser.jay" { - yyVal = null; + current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 803: - case_803(); - break; -case 804: - case_804(); - break; -case 805: - case_805(); - break; case 806: case_806(); break; -case 807: -#line 5612 "cs-parser.jay" +case 809: +#line 5486 "cs-parser.jay" { - yyVal = yyVals[0+yyTop]; + current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 808: - case_808(); - break; -case 809: - case_809(); - break; case 810: - case_810(); +#line 5490 "cs-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } break; -case 811: - case_811(); +case 839: + case_839(); break; -case 812: - case_812(); +case 840: + case_840(); break; -case 813: - case_813(); +case 841: + case_841(); break; -case 814: - case_814(); +case 842: + case_842(); break; -case 819: -#line 5674 "cs-parser.jay" - { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); - } +case 843: + case_843(); break; -case 820: -#line 5678 "cs-parser.jay" - { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); - } +case 846: + case_846(); + break; +case 847: + case_847(); break; -case 822: - case_822(); +case 848: + case_848(); break; -case 823: - case_823(); +case 852: + case_852(); break; -case 826: -#line 5712 "cs-parser.jay" +case 853: +#line 5631 "cs-parser.jay" { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); + yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } break; -case 827: -#line 5716 "cs-parser.jay" +case 855: +#line 5639 "cs-parser.jay" { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); + yyVal = Error_AwaitAsIdentifier (yyVals[0+yyTop]); } break; case 856: @@ -3882,47 +3855,38 @@ internal Object yyparse (yyParser.yyInput yyLex) case 859: case_859(); break; -case 860: - case_860(); +case 861: + case_861(); break; -case 863: - case_863(); +case 862: + case_862(); break; -case 864: - case_864(); - break; -case 865: - case_865(); +case 866: + case_866(); break; case 869: case_869(); break; case 870: -#line 5857 "cs-parser.jay" + case_870(); + break; +case 871: +#line 5739 "cs-parser.jay" { - yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); + report.Error (145, lexer.Location, "A const field requires a value to be provided"); } break; case 872: -#line 5865 "cs-parser.jay" +#line 5743 "cs-parser.jay" { - yyVal = Error_AwaitAsIdentifier (yyVals[0+yyTop]); + current_variable.Initializer = (Expression) yyVals[0+yyTop]; } break; -case 873: - case_873(); - break; -case 874: - case_874(); - break; -case 875: - case_875(); +case 877: + case_877(); break; -case 876: - case_876(); - break; -case 878: - case_878(); +case 879: + case_879(); break; case 880: case_880(); @@ -3930,50 +3894,71 @@ internal Object yyparse (yyParser.yyInput yyLex) case 881: case_881(); break; +case 882: +#line 5788 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } + break; +case 883: + case_883(); + break; +case 884: +#line 5798 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } + break; case 885: - case_885(); +#line 5799 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } + break; +case 886: + case_886(); + break; +case 887: + case_887(); break; case 888: case_888(); break; -case 889: - case_889(); +case 891: + case_891(); + break; +case 892: + case_892(); break; -case 890: -#line 5979 "cs-parser.jay" +case 893: + case_893(); + break; +case 894: +#line 5871 "cs-parser.jay" { - report.Error (145, lexer.Location, "A const field requires a value to be provided"); + start_block (GetLocation (yyVals[0+yyTop])); } break; -case 891: - case_891(); +case 895: + case_895(); break; case 896: case_896(); break; -case 898: - case_898(); - break; -case 899: - case_899(); - break; -case 900: - case_900(); +case 897: +#line 5891 "cs-parser.jay" + { + report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + } break; case 901: -#line 6029 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } - break; -case 902: - case_902(); +#line 5901 "cs-parser.jay" + { + Error_SyntaxError (yyToken); + } break; case 903: -#line 6039 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } + case_903(); break; case 904: -#line 6040 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } +#line 5918 "cs-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } break; case 905: case_905(); @@ -3982,22 +3967,16 @@ internal Object yyparse (yyParser.yyInput yyLex) case_906(); break; case 907: - case_907(); - break; -case 910: - case_910(); - break; -case 911: - case_911(); +#line 5947 "cs-parser.jay" + { + yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); + } break; case 912: case_912(); break; case 913: -#line 6112 "cs-parser.jay" - { - start_block (GetLocation (yyVals[0+yyTop])); - } + case_913(); break; case 914: case_914(); @@ -4006,24 +3985,33 @@ internal Object yyparse (yyParser.yyInput yyLex) case_915(); break; case 916: -#line 6132 "cs-parser.jay" + case_916(); + break; +case 917: + case_917(); + break; +case 918: +#line 6007 "cs-parser.jay" { - report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + yyVal = yyVals[0+yyTop]; } break; +case 919: + case_919(); + break; case 920: -#line 6142 "cs-parser.jay" - { - Error_SyntaxError (yyToken); - } + case_920(); + break; +case 921: + case_921(); break; case 922: case_922(); break; case 923: -#line 6159 "cs-parser.jay" +#line 6048 "cs-parser.jay" { - current_block.AddStatement ((Statement) yyVals[0+yyTop]); + yyVal = new Tuple (GetLocation (yyVals[-2+yyTop]), (Location) yyVals[0+yyTop]); } break; case 924: @@ -4033,10 +4021,15 @@ internal Object yyparse (yyParser.yyInput yyLex) case_925(); break; case 926: -#line 6188 "cs-parser.jay" - { - yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); - } + case_926(); + break; +case 928: +#line 6076 "cs-parser.jay" + { lexer.putback ('}'); } + break; +case 929: +#line 6080 "cs-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } break; case 931: case_931(); @@ -4044,32 +4037,13 @@ internal Object yyparse (yyParser.yyInput yyLex) case 932: case_932(); break; -case 933: - case_933(); - break; case 934: - case_934(); - break; -case 935: - case_935(); +#line 6104 "cs-parser.jay" + { yyVal = null; } break; case 936: - case_936(); - break; -case 937: -#line 6249 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } - break; -case 938: - case_938(); - break; -case 939: -#line 6264 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } +#line 6109 "cs-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } break; case 940: case_940(); @@ -4078,10 +4052,7 @@ internal Object yyparse (yyParser.yyInput yyLex) case_941(); break; case 942: -#line 6285 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_942(); break; case 943: case_943(); @@ -4089,26 +4060,23 @@ internal Object yyparse (yyParser.yyInput yyLex) case 944: case_944(); break; -case 945: - case_945(); +case 951: + case_951(); break; -case 946: -#line 6319 "cs-parser.jay" - { yyVal = new EmptyStatement (lexer.Location); } +case 952: + case_952(); break; -case 948: - case_948(); +case 953: + case_953(); break; -case 949: - case_949(); +case 954: + case_954(); break; -case 951: -#line 6343 "cs-parser.jay" - { yyVal = null; } +case 955: + case_955(); break; -case 953: -#line 6348 "cs-parser.jay" - { yyVal = new EmptyStatement (lexer.Location); } +case 956: + case_956(); break; case 957: case_957(); @@ -4131,6 +4099,21 @@ internal Object yyparse (yyParser.yyInput yyLex) case 963: case_963(); break; +case 964: + case_964(); + break; +case 965: + case_965(); + break; +case 968: +#line 6333 "cs-parser.jay" + { + yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); + } + break; +case 969: + case_969(); + break; case 970: case_970(); break; @@ -4143,12 +4126,6 @@ internal Object yyparse (yyParser.yyInput yyLex) case 973: case_973(); break; -case 974: - case_974(); - break; -case 975: - case_975(); - break; case 976: case_976(); break; @@ -4164,24 +4141,33 @@ internal Object yyparse (yyParser.yyInput yyLex) case 980: case_980(); break; -case 981: - case_981(); - break; case 982: case_982(); break; case 983: - case_983(); +#line 6453 "cs-parser.jay" + { + yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 984: - case_984(); +#line 6460 "cs-parser.jay" + { + yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; -case 987: -#line 6594 "cs-parser.jay" +case 985: + case_985(); + break; +case 986: +#line 6470 "cs-parser.jay" { - yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); + yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } break; +case 987: + case_987(); + break; case 988: case_988(); break; @@ -4197,74 +4183,68 @@ internal Object yyparse (yyParser.yyInput yyLex) case 992: case_992(); break; +case 993: + case_993(); + break; +case 994: + case_994(); + break; case 995: case_995(); break; case 996: case_996(); break; -case 997: - case_997(); - break; case 998: case_998(); break; case 999: -#line 6685 "cs-parser.jay" +#line 6574 "cs-parser.jay" { - yyVal = yyVals[-1+yyTop]; + Error_MissingInitializer (lexer.Location); } break; case 1000: case_1000(); break; case 1001: -#line 6697 "cs-parser.jay" - { - lexer.parsing_catch_when = false; - } + case_1001(); break; case 1002: -#line 6701 "cs-parser.jay" - { - lexer.parsing_catch_when = false; - } + case_1002(); break; case 1003: case_1003(); break; case 1004: -#line 6716 "cs-parser.jay" - { - yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_1004(); break; case 1005: -#line 6723 "cs-parser.jay" - { - yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_1005(); break; case 1006: case_1006(); break; case 1007: -#line 6733 "cs-parser.jay" - { - yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); - } + case_1007(); break; case 1008: case_1008(); break; case 1009: - case_1009(); +#line 6678 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 1010: case_1010(); break; case 1011: - case_1011(); +#line 6694 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 1012: case_1012(); @@ -4275,23 +4255,23 @@ internal Object yyparse (yyParser.yyInput yyLex) case 1014: case_1014(); break; -case 1015: - case_1015(); - break; case 1016: case_1016(); break; case 1017: case_1017(); break; +case 1018: +#line 6758 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; case 1019: case_1019(); break; case 1020: -#line 6838 "cs-parser.jay" - { - Error_MissingInitializer (lexer.Location); - } + case_1020(); break; case 1021: case_1021(); @@ -4300,50 +4280,38 @@ internal Object yyparse (yyParser.yyInput yyLex) case_1022(); break; case 1023: - case_1023(); +#line 6797 "cs-parser.jay" + { + yyVal = new object[] { yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]) }; + } break; case 1024: case_1024(); break; -case 1025: - case_1025(); - break; case 1026: case_1026(); break; -case 1027: - case_1027(); - break; -case 1028: - case_1028(); - break; -case 1029: - case_1029(); - break; -case 1030: -#line 6943 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } - break; -case 1031: - case_1031(); - break; case 1032: -#line 6958 "cs-parser.jay" +#line 6826 "cs-parser.jay" { - current_block = new Linq.QueryBlock (current_block, lexer.Location); + current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 1033: case_1033(); break; case 1034: - case_1034(); +#line 6845 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 1035: case_1035(); break; +case 1036: + case_1036(); + break; case 1037: case_1037(); break; @@ -4351,10 +4319,7 @@ internal Object yyparse (yyParser.yyInput yyLex) case_1038(); break; case 1039: -#line 7022 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_1039(); break; case 1040: case_1040(); @@ -4368,38 +4333,50 @@ internal Object yyparse (yyParser.yyInput yyLex) case 1043: case_1043(); break; -case 1044: -#line 7061 "cs-parser.jay" +case 1045: +#line 6990 "cs-parser.jay" { - yyVal = new object[] { yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]) }; + yyVal = yyVals[0+yyTop]; } break; -case 1045: - case_1045(); +case 1046: +#line 6997 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 1047: case_1047(); break; +case 1049: + case_1049(); + break; +case 1050: + case_1050(); + break; +case 1052: + case_1052(); + break; case 1053: -#line 7090 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_1053(); break; case 1054: - case_1054(); - break; -case 1055: -#line 7109 "cs-parser.jay" +#line 7043 "cs-parser.jay" { - current_block = new Linq.QueryBlock (current_block, lexer.Location); + yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; +case 1055: + case_1055(); + break; case 1056: case_1056(); break; case 1057: - case_1057(); +#line 7060 "cs-parser.jay" + { + yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } break; case 1058: case_1058(); @@ -4407,46 +4384,28 @@ internal Object yyparse (yyParser.yyInput yyLex) case 1059: case_1059(); break; -case 1060: - case_1060(); - break; case 1061: case_1061(); break; case 1062: case_1062(); break; -case 1063: - case_1063(); - break; -case 1064: - case_1064(); +case 1065: + case_1065(); break; case 1066: case_1066(); break; -case 1067: - case_1067(); - break; -case 1068: - case_1068(); - break; -case 1070: - case_1070(); - break; -case 1071: - case_1071(); - break; -case 1073: - case_1073(); - break; case 1074: - case_1074(); +#line 7185 "cs-parser.jay" + { + module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; + } break; case 1075: -#line 7310 "cs-parser.jay" +#line 7192 "cs-parser.jay" { - yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; } break; case 1076: @@ -4456,106 +4415,64 @@ internal Object yyparse (yyParser.yyInput yyLex) case_1077(); break; case 1078: -#line 7327 "cs-parser.jay" - { - yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); - } + case_1078(); break; case 1079: - case_1079(); - break; -case 1080: - case_1080(); - break; -case 1082: - case_1082(); - break; -case 1083: - case_1083(); - break; -case 1086: - case_1086(); - break; -case 1087: - case_1087(); - break; -case 1095: -#line 7452 "cs-parser.jay" - { - module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; - } - break; -case 1096: -#line 7459 "cs-parser.jay" - { - module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; - } - break; -case 1097: - case_1097(); - break; -case 1098: - case_1098(); - break; -case 1099: - case_1099(); - break; -case 1100: -#line 7482 "cs-parser.jay" +#line 7215 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); } break; -case 1101: -#line 7486 "cs-parser.jay" +case 1080: +#line 7219 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 1102: - case_1102(); +case 1081: + case_1081(); break; -case 1103: - case_1103(); +case 1082: + case_1082(); break; -case 1104: - case_1104(); +case 1083: + case_1083(); break; -case 1105: - case_1105(); +case 1084: + case_1084(); break; -case 1107: -#line 7522 "cs-parser.jay" +case 1086: +#line 7255 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; -case 1109: -#line 7530 "cs-parser.jay" +case 1088: +#line 7263 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 1110: -#line 7534 "cs-parser.jay" +case 1089: +#line 7267 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; -case 1111: -#line 7541 "cs-parser.jay" +case 1090: +#line 7274 "cs-parser.jay" { yyVal = new List (0); } break; -case 1113: - case_1113(); +case 1092: + case_1092(); break; -case 1114: - case_1114(); +case 1093: + case_1093(); break; -case 1115: - case_1115(); +case 1094: + case_1094(); break; #line default } @@ -4593,7 +4510,7 @@ internal Object yyparse (yyParser.yyInput yyLex) All more than 3 lines long rules are wrapped into a method */ void case_6() -#line 400 "cs-parser.jay" +#line 389 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { Attributes attrs = (Attributes) yyVals[0+yyTop]; @@ -4605,7 +4522,7 @@ void case_6() } void case_8() -#line 414 "cs-parser.jay" +#line 403 "cs-parser.jay" { if (yyToken == Token.EXTERN_ALIAS) report.Error (439, lexer.Location, "An extern alias declaration must precede all other elements"); @@ -4614,7 +4531,7 @@ void case_8() } void case_13() -#line 434 "cs-parser.jay" +#line 423 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -4637,32 +4554,23 @@ void case_13() } void case_17() -#line 467 "cs-parser.jay" +#line 456 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_18() -#line 475 "cs-parser.jay" +#line 464 "cs-parser.jay" { - UsingClause uc; - if (yyVals[-2+yyTop] != null) { - if (lang_version <= LanguageVersion.V_5) - FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "using static"); - - uc = new UsingType ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); - lbag.AddLocation (uc, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); - } else { - uc = new UsingNamespace ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); - lbag.AddLocation (uc, GetLocation (yyVals[0+yyTop])); - } - - current_namespace.AddUsing (uc); + var un = new UsingNamespace ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + current_namespace.AddUsing (un); + + lbag.AddLocation (un, GetLocation (yyVals[0+yyTop])); } void case_19() -#line 491 "cs-parser.jay" +#line 471 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { @@ -4670,25 +4578,21 @@ void case_19() "An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead"); } - if (yyVals[-4+yyTop] != null) { - report.Error (8085, GetLocation (yyVals[-4+yyTop]), "A `using static' directive cannot be used to declare an alias"); - } - - var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); current_namespace.AddUsing (un); lbag.AddLocation (un, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_20() -#line 508 "cs-parser.jay" +#line 484 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_23() -#line 526 "cs-parser.jay" +void case_21() +#line 497 "cs-parser.jay" { Attributes attrs = (Attributes) yyVals[-2+yyTop]; var name = (MemberName) yyVals[0+yyTop]; @@ -4717,15 +4621,15 @@ void case_23() current_container = current_namespace = ns; } -void case_24() -#line 554 "cs-parser.jay" +void case_22() +#line 525 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_25() -#line 559 "cs-parser.jay" +void case_23() +#line 530 "cs-parser.jay" { if (yyVals[0+yyTop] != null) lbag.AddLocation (current_container, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); @@ -4735,8 +4639,8 @@ void case_25() current_container = current_namespace = current_namespace.Parent; } -void case_26() -#line 568 "cs-parser.jay" +void case_24() +#line 539 "cs-parser.jay" { report.Error (1514, lexer.Location, "Unexpected symbol `{0}', expecting `.' or `{{'", GetSymbolName (yyToken)); @@ -4746,37 +4650,37 @@ void case_26() current_namespace.AddTypeContainer (ns); } -void case_29() -#line 582 "cs-parser.jay" +void case_27() +#line 553 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_30() -#line 590 "cs-parser.jay" +void case_28() +#line 561 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName (lt.Value, lt.Location); } -void case_31() -#line 595 "cs-parser.jay" +void case_29() +#line 566 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_32() -#line 601 "cs-parser.jay" +void case_30() +#line 572 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new MemberName ("", lexer.Location); } -void case_45() -#line 639 "cs-parser.jay" +void case_43() +#line 610 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { TypeContainer ds = (TypeContainer)yyVals[0+yyTop]; @@ -4796,23 +4700,23 @@ void case_45() current_namespace.DeclarationFound = true; } -void case_47() -#line 661 "cs-parser.jay" +void case_45() +#line 632 "cs-parser.jay" { current_namespace.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; report.Error (1518, lexer.Location, "Attributes must be attached to class, delegate, enum, interface or struct"); lexer.putback ('}'); } -void case_55() -#line 694 "cs-parser.jay" +void case_53() +#line 665 "cs-parser.jay" { var sect = (List) yyVals[0+yyTop]; yyVal = new Attributes (sect); } -void case_56() -#line 699 "cs-parser.jay" +void case_54() +#line 670 "cs-parser.jay" { Attributes attrs = yyVals[-1+yyTop] as Attributes; var sect = (List) yyVals[0+yyTop]; @@ -4823,22 +4727,22 @@ void case_56() yyVal = attrs; } -void case_57() -#line 712 "cs-parser.jay" +void case_55() +#line 683 "cs-parser.jay" { PushLocation (GetLocation (yyVals[0+yyTop])); lexer.parsing_attribute_section = true; } -void case_58() -#line 717 "cs-parser.jay" +void case_56() +#line 688 "cs-parser.jay" { lexer.parsing_attribute_section = false; yyVal = yyVals[0+yyTop]; } -void case_59() -#line 725 "cs-parser.jay" +void case_57() +#line 696 "cs-parser.jay" { current_attr_target = (string) yyVals[-1+yyTop]; if (current_attr_target == "assembly" || current_attr_target == "module") { @@ -4846,31 +4750,31 @@ void case_59() } } -void case_60() -#line 732 "cs-parser.jay" +void case_58() +#line 703 "cs-parser.jay" { /* when attribute target is invalid*/ if (current_attr_target == string.Empty) yyVal = new List (0); else yyVal = yyVals[-2+yyTop]; - lbag.InsertLocation (yyVal, 0, GetLocation (yyVals[-4+yyTop])); - lbag.InsertLocation (yyVal, 0, PopLocation ()); + lbag.InsertLocation (yyVal, 0, PopLocation ()); if (yyVals[-1+yyTop] != null) { - lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } else { - lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[0+yyTop])); } current_attr_target = null; lexer.parsing_attribute_section = false; } -void case_61() -#line 751 "cs-parser.jay" +void case_59() +#line 721 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; + lbag.InsertLocation (yyVal, 0, PopLocation ()); if (yyVals[-1+yyTop] != null) { lbag.AddLocation (yyVal, GetLocation(yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); @@ -4879,8 +4783,8 @@ void case_61() } } -void case_62() -#line 761 "cs-parser.jay" +void case_60() +#line 732 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -4892,8 +4796,8 @@ void case_62() }; } -void case_63() -#line 772 "cs-parser.jay" +void case_61() +#line 743 "cs-parser.jay" { if (CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation (yyVals[0+yyTop])).Length > 0) Error_SyntaxError (yyToken); @@ -4901,28 +4805,27 @@ void case_63() yyVal = null; } -void case_64() -#line 782 "cs-parser.jay" +void case_62() +#line 753 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = CheckAttributeTarget (yyToken, lt.Value, lt.Location); - PushLocation (GetLocation (yyVals[0+yyTop])); } -void case_68() -#line 797 "cs-parser.jay" +void case_66() +#line 767 "cs-parser.jay" { var attrs = (List) yyVals[-2+yyTop]; if (attrs != null) { attrs.Add ((Attribute) yyVals[0+yyTop]); - lbag.AddLocation (attrs, GetLocation (yyVals[-1+yyTop])); + lbag.AppendTo (attrs, GetLocation (yyVals[-1+yyTop])); } yyVal = attrs; } -void case_70() -#line 814 "cs-parser.jay" +void case_68() +#line 784 "cs-parser.jay" { --lexer.parsing_block; @@ -4930,46 +4833,28 @@ void case_70() if (tne.HasTypeArguments) { report.Error (404, tne.Location, "Attributes cannot be generic"); } - Arguments [] arguments = (Arguments []) yyVals[0+yyTop]; yyVal = new Attribute (current_attr_target, tne, (Arguments[]) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), lexer.IsEscapedIdentifier (tne)); - if (arguments != null) { - attributeArgumentCommas.Insert (0, savedAttrParenOpenLocation); - attributeArgumentCommas.Add (savedAttrParenCloseLocation); - lbag.AddLocation (yyVal, attributeArgumentCommas); - attributeArgumentCommas.Clear (); - } else if (HadAttributeParens) { - lbag.AddLocation (yyVal, savedAttrParenOpenLocation, savedAttrParenCloseLocation); - } } void case_73() -#line 842 "cs-parser.jay" -{ - savedAttrParenOpenLocation = GetLocation (yyVals[-2+yyTop]); - savedAttrParenCloseLocation = GetLocation (yyVals[0+yyTop]); - yyVal = yyVals[-1+yyTop]; - HadAttributeParens = true; - } - -void case_75() -#line 854 "cs-parser.jay" +#line 812 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); yyVal = new Arguments [] { a, null }; } -void case_76() -#line 860 "cs-parser.jay" +void case_74() +#line 818 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); yyVal = new Arguments [] { null, a }; } -void case_77() -#line 866 "cs-parser.jay" +void case_75() +#line 824 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] != null) { @@ -4982,11 +4867,10 @@ void case_77() Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); args.Add ((Argument) yyVals[0+yyTop]); - attributeArgumentCommas.Add (GetLocation (yyVals[-1+yyTop])); } -void case_78() -#line 881 "cs-parser.jay" +void case_76() +#line 838 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] == null) { @@ -4994,18 +4878,17 @@ void case_78() } ((Arguments) o [1]).Add ((Argument) yyVals[0+yyTop]); - attributeArgumentCommas.Add (GetLocation (yyVals[-1+yyTop])); } -void case_81() -#line 899 "cs-parser.jay" +void case_79() +#line 855 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_83() -#line 911 "cs-parser.jay" +void case_81() +#line 867 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -5013,8 +4896,8 @@ void case_83() lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); } -void case_84() -#line 921 "cs-parser.jay" +void case_82() +#line 877 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "named argument"); @@ -5027,22 +4910,22 @@ void case_84() lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); } -void case_91() -#line 958 "cs-parser.jay" +void case_89() +#line 914 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_92() -#line 963 "cs-parser.jay" +void case_90() +#line 919 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_106() -#line 984 "cs-parser.jay" +void case_104() +#line 940 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", GetSymbolName (yyToken)); @@ -5050,8 +4933,8 @@ void case_106() lexer.parsing_generic_declaration = false; } -void case_107() -#line 994 "cs-parser.jay" +void case_105() +#line 950 "cs-parser.jay" { current_local_parameters = current_type.PrimaryConstructorParameters; if (current_local_parameters == null) { @@ -5063,8 +4946,8 @@ void case_107() start_block (GetLocation (yyVals[0+yyTop])); } -void case_108() -#line 1005 "cs-parser.jay" +void case_106() +#line 961 "cs-parser.jay" { current_local_parameters = null; var t = current_type as ClassOrStruct; @@ -5078,17 +4961,16 @@ void case_108() } } -void case_110() -#line 1027 "cs-parser.jay" +void case_108() +#line 983 "cs-parser.jay" { lexer.ConstraintsParsing = true; valid_param_mod = ParameterModifierType.PrimaryConstructor; push_current_container (new Struct (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); - lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); } -void case_111() -#line 1036 "cs-parser.jay" +void case_109() +#line 991 "cs-parser.jay" { valid_param_mod = 0; lexer.ConstraintsParsing = false; @@ -5102,27 +4984,28 @@ void case_111() if (doc_support) current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-6+yyTop])); lexer.parsing_modifiers = true; } -void case_112() -#line 1053 "cs-parser.jay" +void case_110() +#line 1009 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_113() -#line 1058 "cs-parser.jay" +void case_111() +#line 1014 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_114() -#line 1064 "cs-parser.jay" +void case_112() +#line 1020 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -5132,8 +5015,8 @@ void case_114() yyVal = pop_current_class (); } -void case_116() -#line 1082 "cs-parser.jay" +void case_114() +#line 1038 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var mod = (Modifiers) yyVals[-3+yyTop]; @@ -5147,8 +5030,8 @@ void case_116() yyVal = current_field; } -void case_117() -#line 1095 "cs-parser.jay" +void case_115() +#line 1051 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -5156,43 +5039,42 @@ void case_117() } current_field.Initializer = (ConstInitializer) yyVals[-2+yyTop]; - lbag.AddMember (current_field, GetModifierLocations (), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); current_field = null; } -void case_118() -#line 1108 "cs-parser.jay" +void case_116() +#line 1064 "cs-parser.jay" { Error_SyntaxError (yyToken); current_type.AddMember (new Const (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], MemberName.Null, (Attributes) yyVals[-4+yyTop])); } -void case_123() -#line 1133 "cs-parser.jay" +void case_121() +#line 1089 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_125() -#line 1146 "cs-parser.jay" +void case_123() +#line 1102 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); - lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_126() -#line 1152 "cs-parser.jay" +void case_124() +#line 1107 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); yyVal = null; } -void case_129() -#line 1167 "cs-parser.jay" +void case_127() +#line 1122 "cs-parser.jay" { lexer.parsing_generic_declaration = false; @@ -5206,21 +5088,21 @@ void case_129() yyVal = current_field; } -void case_130() -#line 1182 "cs-parser.jay" +void case_128() +#line 1137 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } - lbag.AddMember (current_field, GetModifierLocations (), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[0+yyTop])); yyVal = current_field; current_field = null; } -void case_131() -#line 1195 "cs-parser.jay" +void case_129() +#line 1150 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "fixed size buffers"); @@ -5232,8 +5114,8 @@ void case_131() current_type.AddField (current_field); } -void case_132() -#line 1206 "cs-parser.jay" +void case_130() +#line 1161 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -5241,21 +5123,21 @@ void case_132() } current_field.Initializer = (ConstInitializer) yyVals[-2+yyTop]; - lbag.AddMember (current_field, GetModifierLocations (), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[0+yyTop])); yyVal = current_field; current_field = null; } -void case_135() -#line 1229 "cs-parser.jay" +void case_133() +#line 1184 "cs-parser.jay" { ++lexer.parsing_block; current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; start_block (GetLocation (yyVals[0+yyTop])); } -void case_136() -#line 1235 "cs-parser.jay" +void case_134() +#line 1190 "cs-parser.jay" { --lexer.parsing_block; current_field.Initializer = (Expression) yyVals[0+yyTop]; @@ -5264,16 +5146,16 @@ void case_136() current_local_parameters = null; } -void case_141() -#line 1262 "cs-parser.jay" +void case_139() +#line 1217 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_143() -#line 1272 "cs-parser.jay" +void case_141() +#line 1227 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -5281,39 +5163,39 @@ void case_143() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_148() -#line 1298 "cs-parser.jay" +void case_146() +#line 1253 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_150() -#line 1311 "cs-parser.jay" +void case_148() +#line 1266 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_151() -#line 1317 "cs-parser.jay" +void case_149() +#line 1272 "cs-parser.jay" { report.Error (443, lexer.Location, "Value or constant expected"); yyVal = null; } -void case_154() -#line 1327 "cs-parser.jay" +void case_152() +#line 1282 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); yyVal = null; } -void case_155() -#line 1336 "cs-parser.jay" +void case_153() +#line 1291 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.NotAllowed; @@ -5321,15 +5203,14 @@ void case_155() /* Was added earlier in the case of body being eof for full ast*/ } -void case_156() -#line 1343 "cs-parser.jay" +void case_154() +#line 1298 "cs-parser.jay" { Method method = (Method) yyVals[-2+yyTop]; method.Block = (ToplevelBlock) yyVals[0+yyTop]; async_block = false; if (method.Block == null) { - lbag.AppendToMember (method, savedLocation); /* semicolon*/ method.ParameterInfo.CheckParameters (method); if ((method.ModFlags & Modifiers.ASYNC) != 0) { @@ -5349,8 +5230,8 @@ void case_156() Lexer.doc_state = XmlCommentState.Allowed; } -void case_158() -#line 1379 "cs-parser.jay" +void case_156() +#line 1333 "cs-parser.jay" { valid_param_mod = 0; MemberName name = (MemberName) yyVals[-4+yyTop]; @@ -5366,14 +5247,15 @@ void case_158() if (doc_support) method.DocComment = Lexer.consume_doc_comment (); - lbag.AddMember (method, GetModifierLocations (), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (method, mod_locations, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = method; lexer.ConstraintsParsing = true; } -void case_159() -#line 1400 "cs-parser.jay" +void case_157() +#line 1355 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -5385,15 +5267,15 @@ void case_159() yyVal = yyVals[-1+yyTop]; } -void case_161() -#line 1419 "cs-parser.jay" +void case_159() +#line 1374 "cs-parser.jay" { lexer.parsing_generic_declaration = false; valid_param_mod = ParameterModifierType.All; } -void case_163() -#line 1428 "cs-parser.jay" +void case_161() +#line 1383 "cs-parser.jay" { lexer.ConstraintsParsing = false; valid_param_mod = 0; @@ -5418,12 +5300,12 @@ void case_163() method.DocComment = Lexer.consume_doc_comment (); StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[-9+yyTop])); - lbag.AddMember (method, GetModifierLocations (), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); + lbag.AddMember (method, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); yyVal = method; } -void case_164() -#line 1459 "cs-parser.jay" +void case_162() +#line 1414 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-3+yyTop]; report.Error (1585, name.Location, @@ -5442,8 +5324,8 @@ void case_164() yyVal = method; } -void case_165() -#line 1480 "cs-parser.jay" +void case_163() +#line 1435 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.Undefined; @@ -5460,8 +5342,8 @@ void case_165() yyVal = method; } -void case_170() -#line 1509 "cs-parser.jay" +void case_168() +#line 1464 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) { FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "expression bodied members"); @@ -5471,8 +5353,8 @@ void case_170() start_block (GetLocation (yyVals[0+yyTop])); } -void case_171() -#line 1518 "cs-parser.jay" +void case_169() +#line 1473 "cs-parser.jay" { lexer.parsing_block = 0; current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); @@ -5481,104 +5363,90 @@ void case_171() yyVal = b; } -void case_174() -#line 1534 "cs-parser.jay" +void case_172() +#line 1489 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_175() -#line 1540 "cs-parser.jay" +void case_173() +#line 1494 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add ((Parameter) yyVals[0+yyTop]); - parameterListCommas.Add (GetLocation (yyVals[-1+yyTop])); - + yyVal = new ParametersCompiled (pars_list.ToArray ()); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_176() -#line 1549 "cs-parser.jay" +void case_174() +#line 1501 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[0+yyTop]))); - parameterListCommas.Add (GetLocation (yyVals[-1+yyTop])); - yyVal = new ParametersCompiled (pars_list.ToArray (), true); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_177() -#line 1558 "cs-parser.jay" +void case_175() +#line 1507 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[-2+yyTop] } ); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_178() -#line 1566 "cs-parser.jay" +void case_176() +#line 1514 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); var pars_list = (List) yyVals[-4+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[-2+yyTop]))); - parameterListCommas.Add (GetLocation (yyVals[-3+yyTop])); - parameterListCommas.Add (GetLocation (yyVals[-1+yyTop])); - + yyVal = new ParametersCompiled (pars_list.ToArray (), true); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_179() -#line 1579 "cs-parser.jay" +void case_177() +#line 1524 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[-2+yyTop])) }, true); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_180() -#line 1586 "cs-parser.jay" +void case_178() +#line 1530 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); var pars_list = (List) yyVals[-4+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[-2+yyTop]))); - parameterListCommas.Add (GetLocation (yyVals[-3+yyTop])); - parameterListCommas.Add (GetLocation (yyVals[-1+yyTop])); yyVal = new ParametersCompiled (pars_list.ToArray (), true); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_183() -#line 1606 "cs-parser.jay" +void case_181() +#line 1547 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = ParametersCompiled.EmptyReadOnlyParameters; } -void case_184() -#line 1614 "cs-parser.jay" +void case_182() +#line 1555 "cs-parser.jay" { parameters_bucket.Clear (); Parameter p = (Parameter) yyVals[0+yyTop]; parameters_bucket.Add (p); - parameterListCommas.Clear (); + default_parameter_used = p.HasDefaultValue; yyVal = parameters_bucket; } -void case_185() -#line 1623 "cs-parser.jay" +void case_183() +#line 1564 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter) yyVals[0+yyTop]; @@ -5591,48 +5459,45 @@ void case_185() default_parameter_used |= p.HasDefaultValue; pars.Add (p); - parameterListCommas.Add (GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (p, GetLocation (yyVals[-1+yyTop])); } yyVal = yyVals[-2+yyTop]; } -void case_186() -#line 1647 "cs-parser.jay" +void case_184() +#line 1588 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], lt.Location); - lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_187() -#line 1656 "cs-parser.jay" +void case_185() +#line 1596 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name"); yyVal = new Parameter ((FullNamedExpression) yyVals[-3+yyTop], lt.Value, (Parameter.Modifier) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop], lt.Location); - lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_188() -#line 1663 "cs-parser.jay" +void case_186() +#line 1602 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); yyVal = new Parameter (null, null, Parameter.Modifier.NONE, (Attributes) yyVals[-1+yyTop], l); } -void case_189() -#line 1672 "cs-parser.jay" +void case_187() +#line 1611 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], null, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], l); - lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_191() -#line 1687 "cs-parser.jay" +void case_189() +#line 1625 "cs-parser.jay" { --lexer.parsing_block; if (lang_version <= LanguageVersion.V_3) { @@ -5664,14 +5529,14 @@ void case_191() var lt = (LocatedToken) yyVals[-3+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-4+yyTop], lt.Value, mod, (Attributes) yyVals[-6+yyTop], lt.Location); - lbag.AddLocation (yyVal, parameterModifierLocation, GetLocation (yyVals[-2+yyTop])); /* parameterModifierLocation should be ignored when mod == NONE*/ + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); if (yyVals[0+yyTop] != null) ((Parameter) yyVal).DefaultValue = new DefaultParameterValueExpression ((Expression) yyVals[0+yyTop]); } -void case_195() -#line 1736 "cs-parser.jay" +void case_193() +#line 1674 "cs-parser.jay" { Parameter.Modifier p2 = (Parameter.Modifier)yyVals[0+yyTop]; Parameter.Modifier mod = (Parameter.Modifier)yyVals[-1+yyTop] | p2; @@ -5693,72 +5558,69 @@ void case_195() yyVal = mod; } -void case_196() -#line 1760 "cs-parser.jay" +void case_194() +#line 1698 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Ref) == 0) Error_ParameterModifierNotValid ("ref", GetLocation (yyVals[0+yyTop])); - parameterModifierLocation = GetLocation (yyVals[0+yyTop]); + yyVal = Parameter.Modifier.REF; } -void case_197() -#line 1767 "cs-parser.jay" +void case_195() +#line 1705 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Out) == 0) Error_ParameterModifierNotValid ("out", GetLocation (yyVals[0+yyTop])); - parameterModifierLocation = GetLocation (yyVals[0+yyTop]); + yyVal = Parameter.Modifier.OUT; } -void case_198() -#line 1774 "cs-parser.jay" +void case_196() +#line 1712 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.This) == 0) Error_ParameterModifierNotValid ("this", GetLocation (yyVals[0+yyTop])); if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "extension methods"); - parameterModifierLocation = GetLocation (yyVals[0+yyTop]); + yyVal = Parameter.Modifier.This; } -void case_199() -#line 1787 "cs-parser.jay" +void case_197() +#line 1725 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Attributes) yyVals[-3+yyTop], lt.Location); - lbag.AddLocation (yyVal, savedLocation); } -void case_200() -#line 1793 "cs-parser.jay" +void case_198() +#line 1730 "cs-parser.jay" { report.Error (1751, GetLocation (yyVals[-4+yyTop]), "Cannot specify a default value for a parameter array"); var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-3+yyTop], lt.Value, (Attributes) yyVals[-5+yyTop], lt.Location); - lbag.AddLocation (yyVal, savedLocation); } -void case_201() -#line 1801 "cs-parser.jay" +void case_199() +#line 1737 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], null, (Attributes) yyVals[-3+yyTop], Location.Null); } -void case_202() -#line 1810 "cs-parser.jay" +void case_200() +#line 1746 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Params) == 0) report.Error (1670, (GetLocation (yyVals[0+yyTop])), "The `params' modifier is not allowed in current context"); - savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_203() -#line 1816 "cs-parser.jay" +void case_201() +#line 1751 "cs-parser.jay" { Parameter.Modifier mod = (Parameter.Modifier)yyVals[0+yyTop]; if ((mod & Parameter.Modifier.This) != 0) { @@ -5766,26 +5628,25 @@ void case_203() } else { report.Error (1611, GetLocation (yyVals[-1+yyTop]), "The params parameter cannot be declared as ref or out"); } - savedLocation = GetLocation (yyVals[-1+yyTop]); } -void case_205() -#line 1833 "cs-parser.jay" +void case_203() +#line 1767 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Arglist) == 0) report.Error (1669, GetLocation (yyVals[0+yyTop]), "__arglist is not valid in this context"); } -void case_206() -#line 1844 "cs-parser.jay" +void case_204() +#line 1778 "cs-parser.jay" { lexer.parsing_generic_declaration = false; if (doc_support) tmpComment = Lexer.consume_doc_comment (); } -void case_207() -#line 1850 "cs-parser.jay" +void case_205() +#line 1784 "cs-parser.jay" { var type = (FullNamedExpression) yyVals[-3+yyTop]; current_property = new Property (current_type, type, (Modifiers) yyVals[-4+yyTop], @@ -5795,13 +5656,13 @@ void case_207() report.Error (547, GetLocation (yyVals[-3+yyTop]), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); current_type.AddMember (current_property); - lbag.AddMember (current_property, GetModifierLocations (), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[0+yyTop])); lexer.PropertyParsing = true; } -void case_208() -#line 1864 "cs-parser.jay" +void case_206() +#line 1798 "cs-parser.jay" { lexer.PropertyParsing = false; @@ -5809,15 +5670,15 @@ void case_208() current_property.DocComment = ConsumeStoredComment (); } -void case_209() -#line 1871 "cs-parser.jay" +void case_207() +#line 1805 "cs-parser.jay" { lbag.AppendToMember (current_property, GetLocation (yyVals[0+yyTop])); lexer.parsing_modifiers = true; } -void case_211() -#line 1883 "cs-parser.jay" +void case_209() +#line 1817 "cs-parser.jay" { lexer.parsing_generic_declaration = false; if (doc_support) @@ -5825,8 +5686,8 @@ void case_211() current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; } -void case_212() -#line 1890 "cs-parser.jay" +void case_210() +#line 1824 "cs-parser.jay" { var type = (FullNamedExpression) yyVals[-3+yyTop]; var property = new Property (current_type, type, (Modifiers) yyVals[-4+yyTop], @@ -5848,16 +5709,16 @@ void case_212() current_local_parameters = null; } -void case_214() -#line 1915 "cs-parser.jay" +void case_212() +#line 1849 "cs-parser.jay" { ++lexer.parsing_block; current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; start_block (GetLocation (yyVals[0+yyTop])); } -void case_215() -#line 1921 "cs-parser.jay" +void case_213() +#line 1855 "cs-parser.jay" { --lexer.parsing_block; ((Property)current_property).Initializer = (Expression) yyVals[-1+yyTop]; @@ -5866,8 +5727,8 @@ void case_215() current_local_parameters = null; } -void case_219() -#line 1942 "cs-parser.jay" +void case_217() +#line 1876 "cs-parser.jay" { valid_param_mod = 0; var type = (FullNamedExpression) yyVals[-5+yyTop]; @@ -5876,7 +5737,7 @@ void case_219() current_property = indexer; current_type.AddIndexer (indexer); - lbag.AddMember (current_property, GetModifierLocations (), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); if (type.Type != null && type.Type.Kind == MemberKind.Void) report.Error (620, GetLocation (yyVals[-5+yyTop]), "`{0}': indexer return type cannot be `void'", indexer.GetSignatureForError ()); @@ -5894,8 +5755,8 @@ void case_219() current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop]; } -void case_220() -#line 1968 "cs-parser.jay" +void case_218() +#line 1902 "cs-parser.jay" { lexer.PropertyParsing = false; current_local_parameters = null; @@ -5909,15 +5770,15 @@ void case_220() current_property = null; } -void case_222() -#line 1988 "cs-parser.jay" +void case_220() +#line 1922 "cs-parser.jay" { current_property.Get = new Indexer.GetIndexerMethod (current_property, Modifiers.COMPILER_GENERATED, current_local_parameters, null, current_property.Location); current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; } -void case_227() -#line 2000 "cs-parser.jay" +void case_225() +#line 1934 "cs-parser.jay" { if (yyToken == Token.CLOSE_BRACE) { report.Error (548, lexer.Location, "`{0}': property or indexer must have at least one accessor", current_property.GetSignatureForError ()); @@ -5929,8 +5790,8 @@ void case_227() } } -void case_228() -#line 2014 "cs-parser.jay" +void case_226() +#line 1948 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5949,11 +5810,12 @@ void case_228() } current_local_parameters = current_property.Get.ParameterInfo; + lbag.AddMember (current_property.Get, mod_locations); lexer.PropertyParsing = false; } -void case_229() -#line 2035 "cs-parser.jay" +void case_227() +#line 1970 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5961,10 +5823,7 @@ void case_229() if (current_container.Kind == MemberKind.Interface) { report.Error (531, current_property.Get.Block.StartLocation, "`{0}': interface members cannot have a definition", current_property.Get.GetSignatureForError ()); - } - lbag.AddMember (current_property.Get, GetModifierLocations ()); - } else { - lbag.AddMember (current_property.Get, GetModifierLocations (), savedLocation); + } } current_local_parameters = null; @@ -5975,8 +5834,8 @@ void case_229() Lexer.doc_state = XmlCommentState.NotAllowed; } -void case_230() -#line 2059 "cs-parser.jay" +void case_228() +#line 1991 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -6000,11 +5859,12 @@ void case_230() } current_local_parameters = current_property.Set.ParameterInfo; + lbag.AddMember (current_property.Set, mod_locations); lexer.PropertyParsing = false; } -void case_231() -#line 2085 "cs-parser.jay" +void case_229() +#line 2018 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Set.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -6013,9 +5873,6 @@ void case_231() report.Error (531, current_property.Set.Block.StartLocation, "`{0}': interface members cannot have a definition", current_property.Set.GetSignatureForError ()); } - lbag.AddMember (current_property.Set, GetModifierLocations ()); - } else { - lbag.AddMember (current_property.Set, GetModifierLocations (), savedLocation); } current_local_parameters = null; @@ -6026,30 +5883,30 @@ void case_231() Lexer.doc_state = XmlCommentState.NotAllowed; } -void case_233() -#line 2110 "cs-parser.jay" +void case_231() +#line 2040 "cs-parser.jay" { - savedLocation = GetLocation (yyVals[0+yyTop]); + /* TODO: lbag*/ yyVal = null; } -void case_234() -#line 2115 "cs-parser.jay" +void case_232() +#line 2045 "cs-parser.jay" { Error_SyntaxError (1043, yyToken, "Invalid accessor body"); yyVal = null; } -void case_236() -#line 2129 "cs-parser.jay" +void case_234() +#line 2059 "cs-parser.jay" { lexer.ConstraintsParsing = true; push_current_container (new Interface (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); - lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-2+yyTop])); } -void case_237() -#line 2136 "cs-parser.jay" +void case_235() +#line 2066 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -6064,16 +5921,16 @@ void case_237() lexer.parsing_modifiers = true; } -void case_238() -#line 2150 "cs-parser.jay" +void case_236() +#line 2080 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_239() -#line 2156 "cs-parser.jay" +void case_237() +#line 2086 "cs-parser.jay" { if (yyVals[0+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -6083,22 +5940,22 @@ void case_239() yyVal = pop_current_class (); } -void case_243() -#line 2177 "cs-parser.jay" +void case_241() +#line 2107 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_244() -#line 2182 "cs-parser.jay" +void case_242() +#line 2112 "cs-parser.jay" { lexer.parsing_modifiers = true; lexer.parsing_block = 0; } -void case_255() -#line 2220 "cs-parser.jay" +void case_253() +#line 2150 "cs-parser.jay" { OperatorDeclaration decl = (OperatorDeclaration) yyVals[-2+yyTop]; if (decl != null) { @@ -6118,32 +5975,29 @@ void case_255() /* Note again, checking is done in semantic analysis*/ current_type.AddOperator (op); - lbag.AddMember (op, GetModifierLocations (), lbag.GetLocations (decl)); - if (yyVals[0+yyTop] == null) { /* Semicolon*/ - lbag.AddLocation (op, savedLocation); - } + lbag.AddMember (op, mod_locations, lbag.GetLocations (decl)); } current_local_parameters = null; } -void case_257() -#line 2252 "cs-parser.jay" +void case_255() +#line 2179 "cs-parser.jay" { report.Error (590, GetLocation (yyVals[0+yyTop]), "User-defined operators cannot return void"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_258() -#line 2260 "cs-parser.jay" +void case_256() +#line 2187 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; if ((Operator.OpType) yyVals[-1+yyTop] == Operator.OpType.Is) valid_param_mod |= ParameterModifierType.Out; } -void case_259() -#line 2266 "cs-parser.jay" +void case_257() +#line 2193 "cs-parser.jay" { valid_param_mod = 0; @@ -6183,20 +6037,20 @@ void case_259() } yyVal = new OperatorDeclaration (op, (FullNamedExpression) yyVals[-6+yyTop], loc); - lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), savedOperatorLocation, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_283() -#line 2337 "cs-parser.jay" +void case_281() +#line 2264 "cs-parser.jay" { if (lang_version != LanguageVersion.Experimental) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "is user operator"); - savedOperatorLocation = GetLocation (yyVals[0+yyTop]); + yyVal = Operator.OpType.Is; } -void case_285() -#line 2351 "cs-parser.jay" +void case_283() +#line 2278 "cs-parser.jay" { valid_param_mod = 0; @@ -6216,8 +6070,8 @@ void case_285() lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_287() -#line 2374 "cs-parser.jay" +void case_285() +#line 2301 "cs-parser.jay" { valid_param_mod = 0; @@ -6237,24 +6091,24 @@ void case_287() lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_288() -#line 2393 "cs-parser.jay" +void case_286() +#line 2320 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; yyVal = new OperatorDeclaration (Operator.OpType.Implicit, null, GetLocation (yyVals[-1+yyTop])); } -void case_289() -#line 2399 "cs-parser.jay" +void case_287() +#line 2326 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; yyVal = new OperatorDeclaration (Operator.OpType.Explicit, null, GetLocation (yyVals[-1+yyTop])); } -void case_290() -#line 2409 "cs-parser.jay" +void case_288() +#line 2336 "cs-parser.jay" { Constructor c = (Constructor) yyVals[-1+yyTop]; c.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -6267,8 +6121,8 @@ void case_290() Lexer.doc_state = XmlCommentState.Allowed; } -void case_291() -#line 2426 "cs-parser.jay" +void case_289() +#line 2353 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -6278,8 +6132,8 @@ void case_291() valid_param_mod = ParameterModifierType.All; } -void case_292() -#line 2435 "cs-parser.jay" +void case_290() +#line 2362 "cs-parser.jay" { valid_param_mod = 0; current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop]; @@ -6313,7 +6167,7 @@ void case_292() } current_type.AddConstructor (c); - lbag.AddMember (c, GetModifierLocations (), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (c, mod_locations, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); yyVal = c; /**/ @@ -6323,8 +6177,8 @@ void case_292() start_block (lexer.Location); } -void case_293() -#line 2478 "cs-parser.jay" +void case_291() +#line 2405 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { var c = (Constructor) yyVals[-1+yyTop]; @@ -6340,39 +6194,39 @@ void case_293() yyVal = yyVals[-1+yyTop]; } -void case_299() -#line 2510 "cs-parser.jay" +void case_297() +#line 2437 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorBaseInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_301() -#line 2520 "cs-parser.jay" +void case_299() +#line 2447 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorThisInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_302() -#line 2526 "cs-parser.jay" +void case_300() +#line 2453 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ConstructorThisInitializer (null, GetLocation (yyVals[0+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_303() -#line 2532 "cs-parser.jay" +void case_301() +#line 2459 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_304() -#line 2540 "cs-parser.jay" +void case_302() +#line 2467 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -6382,8 +6236,8 @@ void case_304() current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; } -void case_305() -#line 2549 "cs-parser.jay" +void case_303() +#line 2476 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; if (lt.Value != current_container.MemberName.Name){ @@ -6394,19 +6248,18 @@ void case_305() Destructor d = new Destructor (current_type, (Modifiers) yyVals[-6+yyTop], ParametersCompiled.EmptyReadOnlyParameters, (Attributes) yyVals[-7+yyTop], lt.Location); - d.Identifier = lt.Value; if (doc_support) d.DocComment = ConsumeStoredComment (); d.Block = (ToplevelBlock) yyVals[0+yyTop]; current_type.AddMember (d); - lbag.AddMember (d, GetModifierLocations (), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[-1+yyTop])); + lbag.AddMember (d, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[-1+yyTop])); current_local_parameters = null; } -void case_306() -#line 2575 "cs-parser.jay" +void case_304() +#line 2501 "cs-parser.jay" { current_event_field = new EventField (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], (MemberName) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop]); current_type.AddMember (current_event_field); @@ -6419,33 +6272,30 @@ void case_306() yyVal = current_event_field; } -void case_307() -#line 2589 "cs-parser.jay" +void case_305() +#line 2515 "cs-parser.jay" { if (doc_support) { current_event_field.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } - if (current_event_field.Initializer != null) { - lbag.AddMember (current_event_field, GetModifierLocations (), GetLocation (yyVals[-6+yyTop]), savedEventAssignLocation, GetLocation (yyVals[0+yyTop])); - } else { - lbag.AddMember (current_event_field, GetModifierLocations (), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); - } + + lbag.AddMember (current_event_field, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); current_event_field = null; } -void case_308() -#line 2605 "cs-parser.jay" +void case_306() +#line 2528 "cs-parser.jay" { current_event = new EventProperty (current_type, (FullNamedExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-4+yyTop], (MemberName) yyVals[-1+yyTop], (Attributes) yyVals[-5+yyTop]); current_type.AddMember (current_event); - lbag.AddMember (current_event, GetModifierLocations (), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (current_event, mod_locations, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); lexer.EventParsing = true; } -void case_309() -#line 2613 "cs-parser.jay" +void case_307() +#line 2536 "cs-parser.jay" { if (current_container.Kind == MemberKind.Interface) report.Error (69, GetLocation (yyVals[-2+yyTop]), "Event in interface cannot have add or remove accessors"); @@ -6453,8 +6303,8 @@ void case_309() lexer.EventParsing = false; } -void case_310() -#line 2620 "cs-parser.jay" +void case_308() +#line 2543 "cs-parser.jay" { if (doc_support) { current_event.DocComment = Lexer.consume_doc_comment (); @@ -6466,32 +6316,31 @@ void case_310() current_local_parameters = null; } -void case_311() -#line 2633 "cs-parser.jay" +void case_309() +#line 2556 "cs-parser.jay" { Error_SyntaxError (yyToken); current_type.AddMember (new EventField (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], MemberName.Null, (Attributes) yyVals[-4+yyTop])); } -void case_314() -#line 2647 "cs-parser.jay" +void case_312() +#line 2570 "cs-parser.jay" { --lexer.parsing_block; - savedEventAssignLocation = GetLocation (yyVals[-2+yyTop]); current_event_field.Initializer = (Expression) yyVals[0+yyTop]; } -void case_319() -#line 2672 "cs-parser.jay" +void case_317() +#line 2594 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_321() -#line 2682 "cs-parser.jay" +void case_319() +#line 2604 "cs-parser.jay" { --lexer.parsing_block; var lt = (LocatedToken) yyVals[-3+yyTop]; @@ -6499,8 +6348,8 @@ void case_321() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_322() -#line 2691 "cs-parser.jay" +void case_320() +#line 2613 "cs-parser.jay" { if (current_container.Kind == MemberKind.Interface) { report.Error (68, lexer.Location, "`{0}': event in interface cannot have an initializer", @@ -6513,29 +6362,29 @@ void case_322() } } -void case_326() -#line 2712 "cs-parser.jay" +void case_324() +#line 2634 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } -void case_327() -#line 2717 "cs-parser.jay" +void case_325() +#line 2639 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } -void case_328() -#line 2722 "cs-parser.jay" +void case_326() +#line 2644 "cs-parser.jay" { report.Error (1055, GetLocation (yyVals[0+yyTop]), "An add or remove accessor expected"); yyVal = null; } -void case_329() -#line 2730 "cs-parser.jay" +void case_327() +#line 2652 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -6544,12 +6393,12 @@ void case_329() current_event.Add = new EventProperty.AddDelegateMethod (current_event, (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); current_local_parameters = current_event.Add.ParameterInfo; - lbag.AddMember (current_event.Add, GetModifierLocations ()); + lbag.AddMember (current_event.Add, mod_locations); lexer.EventParsing = false; } -void case_330() -#line 2742 "cs-parser.jay" +void case_328() +#line 2664 "cs-parser.jay" { lexer.EventParsing = true; @@ -6563,8 +6412,8 @@ void case_330() current_local_parameters = null; } -void case_331() -#line 2758 "cs-parser.jay" +void case_329() +#line 2680 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -6573,12 +6422,12 @@ void case_331() current_event.Remove = new EventProperty.RemoveDelegateMethod (current_event, (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); current_local_parameters = current_event.Remove.ParameterInfo; - lbag.AddMember (current_event.Remove, GetModifierLocations ()); + lbag.AddMember (current_event.Remove, mod_locations); lexer.EventParsing = false; } -void case_332() -#line 2770 "cs-parser.jay" +void case_330() +#line 2692 "cs-parser.jay" { lexer.EventParsing = true; @@ -6592,23 +6441,23 @@ void case_332() current_local_parameters = null; } -void case_333() -#line 2786 "cs-parser.jay" +void case_331() +#line 2708 "cs-parser.jay" { report.Error (73, lexer.Location, "An add or remove accessor must have a body"); yyVal = null; } -void case_335() -#line 2795 "cs-parser.jay" +void case_333() +#line 2717 "cs-parser.jay" { current_type.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; report.Error (1519, GetLocation (yyVals[-1+yyTop]), "An attribute is missing member declaration"); lexer.putback ('}'); } -void case_336() -#line 2806 "cs-parser.jay" +void case_334() +#line 2728 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `}' in class, struct, or interface member declaration"); @@ -6618,19 +6467,18 @@ void case_336() FullNamedExpression type = (FullNamedExpression) yyVals[-1+yyTop]; current_field = new Field (current_type, type, (Modifiers) yyVals[-2+yyTop], MemberName.Null, (Attributes) yyVals[-3+yyTop]); current_type.AddField (current_field); - lbag.AddMember (current_field, GetModifierLocations ()); yyVal = current_field; } -void case_337() -#line 2826 "cs-parser.jay" +void case_335() +#line 2746 "cs-parser.jay" { if (doc_support) enumTypeComment = Lexer.consume_doc_comment (); } -void case_338() -#line 2831 "cs-parser.jay" +void case_336() +#line 2751 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; @@ -6641,15 +6489,10 @@ void case_338() } push_current_container (new Enum (current_container, (FullNamedExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-5+yyTop], name, (Attributes) yyVals[-6+yyTop]), null); - if (yyVals[-2+yyTop] != null) { - lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-4+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); - } else { - lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[0+yyTop])); - } } -void case_339() -#line 2848 "cs-parser.jay" +void case_337() +#line 2763 "cs-parser.jay" { lexer.parsing_modifiers = true; @@ -6658,13 +6501,9 @@ void case_339() Lexer.doc_state = XmlCommentState.Allowed; } -void case_340() -#line 2856 "cs-parser.jay" +void case_338() +#line 2771 "cs-parser.jay" { - lbag.AppendToMember (current_container, GetLocation (yyVals[-1+yyTop])); - if (yyVals[0+yyTop] != null) { - lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); - } if (doc_support) current_container.DocComment = enumTypeComment; @@ -6673,32 +6512,26 @@ void case_340() /* if (doc_support)*/ /* em.DocComment = ev.DocComment;*/ + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop])); yyVal = pop_current_class (); } -void case_342() -#line 2876 "cs-parser.jay" -{ - savedLocation = GetLocation (yyVals[-1+yyTop]); - yyVal = yyVals[0+yyTop]; - } - -void case_343() -#line 2881 "cs-parser.jay" +void case_341() +#line 2792 "cs-parser.jay" { Error_TypeExpected (GetLocation (yyVals[-1+yyTop])); yyVal = null; } -void case_348() -#line 2899 "cs-parser.jay" +void case_346() +#line 2810 "cs-parser.jay" { - lbag.AppendToMember (current_container, GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVals[-2+yyTop], GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } -void case_349() -#line 2907 "cs-parser.jay" +void case_347() +#line 2818 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-1+yyTop]); @@ -6712,8 +6545,8 @@ void case_349() yyVal = em; } -void case_350() -#line 2920 "cs-parser.jay" +void case_348() +#line 2831 "cs-parser.jay" { ++lexer.parsing_block; if (doc_support) { @@ -6722,8 +6555,8 @@ void case_350() } } -void case_351() -#line 2928 "cs-parser.jay" +void case_349() +#line 2839 "cs-parser.jay" { --lexer.parsing_block; @@ -6738,8 +6571,8 @@ void case_351() yyVal = em; } -void case_352() -#line 2942 "cs-parser.jay" +void case_350() +#line 2853 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6755,8 +6588,8 @@ void case_352() yyVal = em; } -void case_355() -#line 2969 "cs-parser.jay" +void case_353() +#line 2880 "cs-parser.jay" { valid_param_mod = 0; @@ -6772,8 +6605,8 @@ void case_355() lexer.ConstraintsParsing = true; } -void case_357() -#line 2988 "cs-parser.jay" +void case_355() +#line 2899 "cs-parser.jay" { if (doc_support) { current_delegate.DocComment = Lexer.consume_doc_comment (); @@ -6782,15 +6615,15 @@ void case_357() if (yyVals[-2+yyTop] != null) current_delegate.SetConstraints ((List) yyVals[-2+yyTop]); - lbag.AddMember (current_delegate, GetModifierLocations (), GetLocation (yyVals[-10+yyTop]), GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddMember (current_delegate, mod_locations, GetLocation (yyVals[-10+yyTop]), GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[0+yyTop])); yyVal = current_delegate; current_delegate = null; } -void case_359() -#line 3007 "cs-parser.jay" +void case_357() +#line 2918 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types"); @@ -6798,18 +6631,18 @@ void case_359() yyVal = ComposedTypeSpecifier.CreateNullable (GetLocation (yyVals[0+yyTop])); } -void case_361() -#line 3018 "cs-parser.jay" +void case_359() +#line 2929 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location); - lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_362() -#line 3026 "cs-parser.jay" +void case_360() +#line 2937 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; @@ -6818,84 +6651,78 @@ void case_362() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_364() -#line 3038 "cs-parser.jay" +void case_362() +#line 2949 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_365() -#line 3044 "cs-parser.jay" +void case_363() +#line 2955 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_366() -#line 3053 "cs-parser.jay" +void case_364() +#line 2964 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } -void case_367() -#line 3058 "cs-parser.jay" +void case_365() +#line 2969 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (int) yyVals[0+yyTop], lt.Location); } -void case_369() -#line 3070 "cs-parser.jay" +void case_367() +#line 2981 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) - FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); - var list = locationListStack.Pop (); - list.Add (GetLocation (yyVals[-2+yyTop])); - list.Add (GetLocation (yyVals[0+yyTop])); - lbag.AddLocation (yyVals[-1+yyTop], list); - - yyVal = yyVals[-1+yyTop];; + FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); + + yyVal = yyVals[-1+yyTop]; } -void case_370() -#line 3081 "cs-parser.jay" +void case_368() +#line 2988 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = new TypeArguments (); } -void case_371() -#line 3089 "cs-parser.jay" +void case_369() +#line 2996 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = type_args; - locationListStack.Push (new List ()); } -void case_372() -#line 3096 "cs-parser.jay" +void case_370() +#line 3002 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = type_args; - locationListStack.Peek ().Add (GetLocation (yyVals[-1+yyTop])); } -void case_374() -#line 3113 "cs-parser.jay" +void case_372() +#line 3018 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName (lt.Value, (TypeParameters)yyVals[0+yyTop], lt.Location); } -void case_375() -#line 3122 "cs-parser.jay" +void case_373() +#line 3027 "cs-parser.jay" { MemberName mn = (MemberName)yyVals[0+yyTop]; if (mn.TypeParameters != null) @@ -6903,97 +6730,90 @@ void case_375() mn.GetSignatureForError ())); } -void case_377() -#line 3133 "cs-parser.jay" +void case_375() +#line 3038 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName (lt.Value, (TypeParameters) yyVals[0+yyTop], (ATypeNameExpression) yyVals[-2+yyTop], lt.Location); } -void case_378() -#line 3142 "cs-parser.jay" +void case_376() +#line 3047 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); } -void case_379() -#line 3147 "cs-parser.jay" +void case_377() +#line 3052 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, null, (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } -void case_380() -#line 3155 "cs-parser.jay" +void case_378() +#line 3060 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_381() -#line 3161 "cs-parser.jay" +void case_379() +#line 3066 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-3+yyTop]; var lt2 = (LocatedToken) yyVals[-2+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[-1+yyTop], lt1.Location); - lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[0+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_382() -#line 3169 "cs-parser.jay" +void case_380() +#line 3074 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberAccess ((ATypeNameExpression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_384() -#line 3179 "cs-parser.jay" +void case_382() +#line 3084 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); yyVal = yyVals[-1+yyTop]; - var list = locationListStack.Pop (); - list.Add (GetLocation (yyVals[-2+yyTop])); - list.Add (GetLocation (yyVals[-1+yyTop])); - lbag.AddLocation (yyVals[-1+yyTop], list); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_385() -#line 3193 "cs-parser.jay" +void case_383() +#line 3095 "cs-parser.jay" { var tparams = new TypeParameters (); tparams.Add ((TypeParameter)yyVals[0+yyTop]); yyVal = tparams; - locationListStack.Push (new List ()); } -void case_386() -#line 3200 "cs-parser.jay" +void case_384() +#line 3101 "cs-parser.jay" { var tparams = (TypeParameters) yyVals[-2+yyTop]; tparams.Add ((TypeParameter)yyVals[0+yyTop]); yyVal = tparams; - locationListStack.Peek ().Add (GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVals[0+yyTop], GetLocation (yyVals[0+yyTop])); } -void case_387() -#line 3210 "cs-parser.jay" +void case_385() +#line 3111 "cs-parser.jay" { var lt = (LocatedToken)yyVals[0+yyTop]; - var variance = (VarianceDecl) yyVals[-1+yyTop]; - yyVal = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)yyVals[-2+yyTop], variance); - if (variance != null) - lbag.AddLocation (yyVal, savedLocation); + yyVal = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)yyVals[-2+yyTop], (VarianceDecl) yyVals[-1+yyTop]); } -void case_388() -#line 3218 "cs-parser.jay" +void case_386() +#line 3116 "cs-parser.jay" { if (GetTokenName (yyToken) == "type") report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); @@ -7003,15 +6823,15 @@ void case_388() yyVal = new TypeParameter (MemberName.Null, null, null); } -void case_397() -#line 3262 "cs-parser.jay" +void case_395() +#line 3160 "cs-parser.jay" { report.Error (1536, GetLocation (yyVals[0+yyTop]), "Invalid parameter type `void'"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_400() -#line 3278 "cs-parser.jay" +void case_398() +#line 3176 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); @@ -7024,39 +6844,38 @@ void case_400() } } -void case_403() -#line 3298 "cs-parser.jay" +void case_401() +#line 3196 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_404() -#line 3306 "cs-parser.jay" +void case_402() +#line 3204 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_407() -#line 3322 "cs-parser.jay" +void case_405() +#line 3220 "cs-parser.jay" { var types = new List (2); types.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = types; } -void case_408() -#line 3328 "cs-parser.jay" +void case_406() +#line 3226 "cs-parser.jay" { var types = (List) yyVals[-2+yyTop]; types.Add ((FullNamedExpression) yyVals[0+yyTop]); - lbag.AddLocation (types, GetLocation (yyVals[-1+yyTop])); yyVal = types; } -void case_409() -#line 3338 "cs-parser.jay" +void case_407() +#line 3235 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) { report.Error (1521, GetLocation (yyVals[0+yyTop]), "Invalid base type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -7064,84 +6883,38 @@ void case_409() yyVal = yyVals[0+yyTop]; } -void case_448() -#line 3403 "cs-parser.jay" +void case_445() +#line 3299 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); } -void case_457() -#line 3434 "cs-parser.jay" -{ - var list = new List (); - list.Add ((InterpolatedStringInsert) yyVals[0+yyTop]); - yyVal = list; - } - -void case_458() -#line 3440 "cs-parser.jay" -{ - var list = (List) yyVals[-2+yyTop]; - list.Add ((StringLiteral) yyVals[-1+yyTop]); - list.Add ((InterpolatedStringInsert) yyVals[0+yyTop]); - yyVal = list; - } - -void case_460() -#line 3454 "cs-parser.jay" -{ - yyVal = new InterpolatedStringInsert ((Expression) yyVals[-2+yyTop]) { - Alignment = (Expression)yyVals[0+yyTop] - }; - } - -void case_462() -#line 3464 "cs-parser.jay" -{ - lexer.parsing_interpolation_format = false; - - yyVal = new InterpolatedStringInsert ((Expression) yyVals[-3+yyTop]) { - Format = (string)yyVals[0+yyTop] - }; - } - -void case_464() -#line 3476 "cs-parser.jay" -{ - lexer.parsing_interpolation_format = false; - - yyVal = new InterpolatedStringInsert ((Expression) yyVals[-5+yyTop]) { - Alignment = (Expression)yyVals[-3+yyTop], - Format = (string) yyVals[0+yyTop] - }; - } - -void case_469() -#line 3509 "cs-parser.jay" +void case_456() +#line 3340 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_471() -#line 3521 "cs-parser.jay" +void case_458() +#line 3352 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_472() -#line 3527 "cs-parser.jay" +void case_459() +#line 3358 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_473() -#line 3533 "cs-parser.jay" +void case_460() +#line 3364 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "null propagating operator"); @@ -7151,42 +6924,42 @@ void case_473() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_474() -#line 3542 "cs-parser.jay" +void case_461() +#line 3373 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_475() -#line 3548 "cs-parser.jay" +void case_462() +#line 3379 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_476() -#line 3554 "cs-parser.jay" +void case_463() +#line 3385 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new SimpleName ("await", ((LocatedToken) yyVals[-3+yyTop]).Location), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_477() -#line 3560 "cs-parser.jay" +void case_464() +#line 3391 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location); - lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_478() -#line 3568 "cs-parser.jay" +void case_465() +#line 3399 "cs-parser.jay" { var lt1 = (LocatedToken) yyVals[-2+yyTop]; var lt2 = (LocatedToken) yyVals[-1+yyTop]; @@ -7195,29 +6968,29 @@ void case_478() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_480() -#line 3578 "cs-parser.jay" +void case_467() +#line 3409 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_482() -#line 3586 "cs-parser.jay" +void case_469() +#line 3417 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_483() -#line 3594 "cs-parser.jay" +void case_470() +#line 3425 "cs-parser.jay" { yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_484() -#line 3599 "cs-parser.jay" +void case_471() +#line 3430 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7225,8 +6998,8 @@ void case_484() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_485() -#line 3606 "cs-parser.jay" +void case_472() +#line 3437 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7234,8 +7007,8 @@ void case_485() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_488() -#line 3621 "cs-parser.jay" +void case_475() +#line 3452 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = new CollectionOrObjectInitializers (GetLocation (yyVals[-2+yyTop])); @@ -7245,55 +7018,54 @@ void case_488() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_489() -#line 3630 "cs-parser.jay" +void case_476() +#line 3461 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_492() -#line 3646 "cs-parser.jay" +void case_479() +#line 3477 "cs-parser.jay" { var a = new List (); a.Add ((Expression) yyVals[0+yyTop]); yyVal = a; } -void case_493() -#line 3652 "cs-parser.jay" +void case_480() +#line 3483 "cs-parser.jay" { var a = (List)yyVals[-2+yyTop]; a.Add ((Expression) yyVals[0+yyTop]); - lbag.AddLocation (a, GetLocation (yyVals[-1+yyTop])); yyVal = a; } -void case_494() -#line 3658 "cs-parser.jay" +void case_481() +#line 3488 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } -void case_495() -#line 3666 "cs-parser.jay" +void case_482() +#line 3496 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_496() -#line 3672 "cs-parser.jay" +void case_483() +#line 3502 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[-2+yyTop]); yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_498() -#line 3681 "cs-parser.jay" +void case_485() +#line 3511 "cs-parser.jay" { CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName; if (csn == null) @@ -7302,20 +7074,19 @@ void case_498() yyVal = new CompletionElementInitializer (csn.Prefix, csn.Location); } -void case_499() -#line 3689 "cs-parser.jay" +void case_486() +#line 3519 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = new CollectionElementInitializer (GetLocation (yyVals[-2+yyTop])); - else { + else yyVal = new CollectionElementInitializer ((List)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); - lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); - } + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_500() -#line 3699 "cs-parser.jay" +void case_487() +#line 3528 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) FeatureIsNotAvailable (GetLocation (yyVals[-4+yyTop]), "dictionary initializer"); @@ -7324,36 +7095,35 @@ void case_500() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_501() -#line 3707 "cs-parser.jay" +void case_488() +#line 3536 "cs-parser.jay" { report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); yyVal = new CollectionElementInitializer (GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_506() -#line 3726 "cs-parser.jay" +void case_493() +#line 3555 "cs-parser.jay" { Arguments list = new Arguments (4); list.Add ((Argument) yyVals[0+yyTop]); yyVal = list; } -void case_507() -#line 3732 "cs-parser.jay" +void case_494() +#line 3561 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; if (list [list.Count - 1] is NamedArgument) Error_NamedArgumentExpected ((NamedArgument) list [list.Count - 1]); list.Add ((Argument) yyVals[0+yyTop]); - lbag.AddLocation (list, GetLocation (yyVals[-1+yyTop])); yyVal = list; } -void case_508() -#line 3742 "cs-parser.jay" +void case_495() +#line 3570 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; NamedArgument a = (NamedArgument) yyVals[0+yyTop]; @@ -7365,12 +7135,11 @@ void case_508() } list.Add (a); - lbag.AddLocation (list, GetLocation (yyVals[-1+yyTop])); yyVal = list; } -void case_509() -#line 3757 "cs-parser.jay" +void case_496() +#line 3584 "cs-parser.jay" { if (lexer.putback_char == -1) lexer.putback (')'); /* TODO: Wrong but what can I do*/ @@ -7378,50 +7147,50 @@ void case_509() yyVal = yyVals[-2+yyTop]; } -void case_510() -#line 3764 "cs-parser.jay" +void case_497() +#line 3591 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } -void case_515() -#line 3785 "cs-parser.jay" +void case_502() +#line 3612 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_517() -#line 3794 "cs-parser.jay" +void case_504() +#line 3621 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_519() -#line 3803 "cs-parser.jay" +void case_506() +#line 3630 "cs-parser.jay" { yyVal = new Argument (new Arglist ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_520() -#line 3808 "cs-parser.jay" +void case_507() +#line 3635 "cs-parser.jay" { yyVal = new Argument (new Arglist (GetLocation (yyVals[-2+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_521() -#line 3816 "cs-parser.jay" +void case_508() +#line 3643 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_522() -#line 3833 "cs-parser.jay" +void case_509() +#line 3660 "cs-parser.jay" { if (lang_version != LanguageVersion.Experimental) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "declaration expression"); @@ -7432,8 +7201,8 @@ void case_522() yyVal = new DeclarationExpression ((FullNamedExpression) yyVals[-1+yyTop], lv); } -void case_523() -#line 3843 "cs-parser.jay" +void case_510() +#line 3670 "cs-parser.jay" { if (lang_version != LanguageVersion.Experimental) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "declaration expression"); @@ -7446,15 +7215,15 @@ void case_523() }; } -void case_525() -#line 3862 "cs-parser.jay" +void case_512() +#line 3689 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_526() -#line 3867 "cs-parser.jay" +void case_513() +#line 3694 "cs-parser.jay" { if (lang_version < LanguageVersion.V_6) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "null propagating operator"); @@ -7466,73 +7235,71 @@ void case_526() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_527() -#line 3878 "cs-parser.jay" +void case_514() +#line 3705 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_528() -#line 3883 "cs-parser.jay" +void case_515() +#line 3710 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_529() -#line 3891 "cs-parser.jay" +void case_516() +#line 3718 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_530() -#line 3897 "cs-parser.jay" +void case_517() +#line 3724 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); - lbag.AddLocation (list, GetLocation (yyVals[-1+yyTop])); yyVal = list; } -void case_531() -#line 3907 "cs-parser.jay" +void case_518() +#line 3733 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); yyVal = args; } -void case_532() -#line 3913 "cs-parser.jay" +void case_519() +#line 3739 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); args.Add ((Argument) yyVals[0+yyTop]); - lbag.AddLocation (args, GetLocation (yyVals[-1+yyTop])); yyVal = args; } -void case_536() -#line 3941 "cs-parser.jay" +void case_523() +#line 3766 "cs-parser.jay" { yyVal = new ElementAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_537() -#line 3946 "cs-parser.jay" +void case_524() +#line 3771 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); } -void case_540() -#line 3968 "cs-parser.jay" +void case_527() +#line 3793 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (lang_version <= LanguageVersion.ISO_2) @@ -7546,8 +7313,8 @@ void case_540() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_541() -#line 3981 "cs-parser.jay" +void case_528() +#line 3806 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); @@ -7555,8 +7322,8 @@ void case_541() yyVal = new NewInitialize ((FullNamedExpression) yyVals[-1+yyTop], null, (CollectionOrObjectInitializers) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_542() -#line 3993 "cs-parser.jay" +void case_529() +#line 3818 "cs-parser.jay" { yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (List) yyVals[-3+yyTop], new ComposedTypeSpecifier (((List) yyVals[-3+yyTop]).Count, GetLocation (yyVals[-4+yyTop])) { @@ -7565,8 +7332,8 @@ void case_542() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_543() -#line 4001 "cs-parser.jay" +void case_530() +#line 3826 "cs-parser.jay" { if (yyVals[0+yyTop] == null) report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); @@ -7574,8 +7341,8 @@ void case_543() yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-2+yyTop], (ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); } -void case_544() -#line 4008 "cs-parser.jay" +void case_531() +#line 3833 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays"); @@ -7583,30 +7350,30 @@ void case_544() yyVal = new ImplicitlyTypedArrayCreation ((ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_545() -#line 4015 "cs-parser.jay" +void case_532() +#line 3840 "cs-parser.jay" { report.Error (178, GetLocation (yyVals[-1+yyTop]), "Invalid rank specifier, expecting `,' or `]'"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], null, GetLocation (yyVals[-6+yyTop])); } -void case_546() -#line 4020 "cs-parser.jay" +void case_533() +#line 3845 "cs-parser.jay" { Error_SyntaxError (yyToken); /* It can be any of new expression, create the most common one*/ yyVal = new New ((FullNamedExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_548() -#line 4032 "cs-parser.jay" +void case_535() +#line 3857 "cs-parser.jay" { --lexer.parsing_type; yyVal = yyVals[0+yyTop]; } -void case_549() -#line 4040 "cs-parser.jay" +void case_536() +#line 3865 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); @@ -7617,78 +7384,76 @@ void case_549() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_555() -#line 4067 "cs-parser.jay" +void case_542() +#line 3892 "cs-parser.jay" { var a = new List (4); a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); yyVal = a; } -void case_556() -#line 4073 "cs-parser.jay" +void case_543() +#line 3898 "cs-parser.jay" { var a = (List) yyVals[-2+yyTop]; a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); - lbag.AddLocation (a, GetLocation (yyVals[-1+yyTop])); - yyVal = a; } -void case_559() -#line 4092 "cs-parser.jay" +void case_546() +#line 3915 "cs-parser.jay" { var lt = (LocatedToken)yyVals[-2+yyTop]; yyVal = new AnonymousTypeParameter ((Expression)yyVals[0+yyTop], lt.Value, lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_560() -#line 4098 "cs-parser.jay" +void case_547() +#line 3921 "cs-parser.jay" { var lt = (LocatedToken)yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), lt.Value, lt.Location); } -void case_561() -#line 4104 "cs-parser.jay" +void case_548() +#line 3927 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } -void case_562() -#line 4109 "cs-parser.jay" +void case_549() +#line 3932 "cs-parser.jay" { report.Error (746, lexer.Location, "Invalid anonymous type member declarator. Anonymous type members must be a member assignment, simple name or member access expression"); yyVal = null; } -void case_566() -#line 4124 "cs-parser.jay" +void case_553() +#line 3947 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_567() -#line 4132 "cs-parser.jay" +void case_554() +#line 3955 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_568() -#line 4137 "cs-parser.jay" +void case_555() +#line 3960 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_573() -#line 4167 "cs-parser.jay" +void case_560() +#line 3990 "cs-parser.jay" { var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); ai.VariableDeclaration = current_variable; @@ -7696,8 +7461,8 @@ void case_573() yyVal = ai; } -void case_574() -#line 4174 "cs-parser.jay" +void case_561() +#line 3997 "cs-parser.jay" { var ai = new ArrayInitializer ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); ai.VariableDeclaration = current_variable; @@ -7709,39 +7474,38 @@ void case_574() yyVal = ai; } -void case_575() -#line 4188 "cs-parser.jay" +void case_562() +#line 4011 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_576() -#line 4194 "cs-parser.jay" +void case_563() +#line 4017 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); - lbag.AddLocation (list, GetLocation (yyVals[-1+yyTop])); yyVal = list; } -void case_577() -#line 4204 "cs-parser.jay" +void case_564() +#line 4026 "cs-parser.jay" { yyVal = new TypeOf ((FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_579() -#line 4213 "cs-parser.jay" +void case_566() +#line 4035 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } -void case_580() -#line 4221 "cs-parser.jay" +void case_567() +#line 4043 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); @@ -7749,25 +7513,25 @@ void case_580() yyVal = yyVals[0+yyTop]; } -void case_581() -#line 4231 "cs-parser.jay" +void case_568() +#line 4053 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) FeatureIsNotAvailable (lt.Location, "namespace alias qualifier"); - savedLocation = GetLocation (yyVals[0+yyTop]); + yyVal = lt; } -void case_582() -#line 4242 "cs-parser.jay" +void case_569() +#line 4064 "cs-parser.jay" { yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_583() -#line 4247 "cs-parser.jay" +void case_570() +#line 4069 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7775,77 +7539,52 @@ void case_583() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_584() -#line 4257 "cs-parser.jay" +void case_571() +#line 4079 "cs-parser.jay" { yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_585() -#line 4262 "cs-parser.jay" +void case_572() +#line 4084 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new CheckedExpr (null, GetLocation (yyVals[-1+yyTop])); } -void case_586() -#line 4271 "cs-parser.jay" +void case_573() +#line 4093 "cs-parser.jay" { yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_587() -#line 4276 "cs-parser.jay" +void case_574() +#line 4098 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnCheckedExpr (null, GetLocation (yyVals[-1+yyTop])); } -void case_588() -#line 4285 "cs-parser.jay" +void case_575() +#line 4107 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new Indirection ((Expression) yyVals[-3+yyTop], GetLocation (yyVals[-2+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } -void case_590() -#line 4297 "cs-parser.jay" -{ - yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); - if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { - lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), PopLocation (), PopLocation ()); - } else { - lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop])); - } - } - -void case_592() -#line 4310 "cs-parser.jay" -{ - yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); - - if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { - lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), PopLocation (), PopLocation ()); - } else { - lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop])); - } - } - -void case_596() -#line 4335 "cs-parser.jay" +void case_583() +#line 4146 "cs-parser.jay" { valid_param_mod = 0; yyVal = yyVals[-1+yyTop]; - PushLocation (GetLocation (yyVals[-1+yyTop])); - PushLocation (GetLocation (yyVals[-3+yyTop])); } -void case_597() -#line 4345 "cs-parser.jay" +void case_584() +#line 4154 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); @@ -7854,15 +7593,15 @@ void case_597() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_601() -#line 4365 "cs-parser.jay" +void case_588() +#line 4174 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_602() -#line 4370 "cs-parser.jay" +void case_589() +#line 4179 "cs-parser.jay" { if (!async_block) { if (current_anonymous_method is LambdaExpression) { @@ -7885,24 +7624,24 @@ void case_602() yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_603() -#line 4392 "cs-parser.jay" +void case_590() +#line 4201 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.LogicalNot, null, GetLocation (yyVals[-1+yyTop])); } -void case_604() -#line 4398 "cs-parser.jay" +void case_591() +#line 4207 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.OnesComplement, null, GetLocation (yyVals[-1+yyTop])); } -void case_605() -#line 4404 "cs-parser.jay" +void case_592() +#line 4213 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7910,85 +7649,85 @@ void case_605() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_606() -#line 4411 "cs-parser.jay" +void case_593() +#line 4220 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Await (null, GetLocation (yyVals[-1+yyTop])); } -void case_614() -#line 4449 "cs-parser.jay" +void case_601() +#line 4258 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.UnaryPlus, null, GetLocation (yyVals[-1+yyTop])); } -void case_615() -#line 4455 "cs-parser.jay" +void case_602() +#line 4264 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.UnaryNegation, null, GetLocation (yyVals[-1+yyTop])); } -void case_616() -#line 4461 "cs-parser.jay" +void case_603() +#line 4270 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, null, GetLocation (yyVals[-1+yyTop])); } -void case_617() -#line 4467 "cs-parser.jay" +void case_604() +#line 4276 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, null, GetLocation (yyVals[-1+yyTop])); } -void case_618() -#line 4473 "cs-parser.jay" +void case_605() +#line 4282 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Indirection (null, GetLocation (yyVals[-1+yyTop])); } -void case_619() -#line 4479 "cs-parser.jay" +void case_606() +#line 4288 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Unary (Unary.Operator.AddressOf, null, GetLocation (yyVals[-1+yyTop])); } -void case_621() -#line 4489 "cs-parser.jay" +void case_608() +#line 4298 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_622() -#line 4494 "cs-parser.jay" +void case_609() +#line 4303 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_623() -#line 4499 "cs-parser.jay" +void case_610() +#line 4308 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_624() -#line 4504 "cs-parser.jay" +void case_611() +#line 4313 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7996,8 +7735,8 @@ void case_624() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_625() -#line 4511 "cs-parser.jay" +void case_612() +#line 4320 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8005,8 +7744,8 @@ void case_625() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_626() -#line 4518 "cs-parser.jay" +void case_613() +#line 4327 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8014,22 +7753,22 @@ void case_626() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_628() -#line 4529 "cs-parser.jay" +void case_615() +#line 4338 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_629() -#line 4534 "cs-parser.jay" +void case_616() +#line 4343 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_630() -#line 4539 "cs-parser.jay" +void case_617() +#line 4348 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8037,8 +7776,8 @@ void case_630() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_631() -#line 4546 "cs-parser.jay" +void case_618() +#line 4355 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8046,8 +7785,8 @@ void case_631() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_633() -#line 4557 "cs-parser.jay" +void case_620() +#line 4366 "cs-parser.jay" { var is_expr = new Is ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); if (yyVals[0+yyTop] != null) { @@ -8062,8 +7801,8 @@ void case_633() yyVal = is_expr; } -void case_634() -#line 4571 "cs-parser.jay" +void case_621() +#line 4380 "cs-parser.jay" { var is_expr = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); if (lang_version != LanguageVersion.Experimental) @@ -8072,68 +7811,68 @@ void case_634() yyVal = is_expr; } -void case_635() -#line 4579 "cs-parser.jay" +void case_622() +#line 4388 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new As ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_636() -#line 4585 "cs-parser.jay" +void case_623() +#line 4394 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Is ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_637() -#line 4591 "cs-parser.jay" +void case_624() +#line 4400 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new Is (new SimpleName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_638() -#line 4596 "cs-parser.jay" +void case_625() +#line 4405 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new As (new SimpleName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_645() -#line 4619 "cs-parser.jay" +void case_632() +#line 4428 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_651() -#line 4647 "cs-parser.jay" +void case_638() +#line 4456 "cs-parser.jay" { var list = new List (); list.Add ((PropertyPatternMember) yyVals[0+yyTop]); yyVal = list; } -void case_652() -#line 4653 "cs-parser.jay" +void case_639() +#line 4462 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((PropertyPatternMember) yyVals[0+yyTop]); yyVal = list; } -void case_653() -#line 4662 "cs-parser.jay" +void case_640() +#line 4471 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new PropertyPatternMember (lt.Value, (Expression) yyVals[0+yyTop], lt.Location); } -void case_655() -#line 4671 "cs-parser.jay" +void case_642() +#line 4480 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { var lt = (LocatedToken) yyVals[0+yyTop]; @@ -8142,16 +7881,16 @@ void case_655() } } -void case_658() -#line 4690 "cs-parser.jay" +void case_645() +#line 4499 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); yyVal = args; } -void case_659() -#line 4696 "cs-parser.jay" +void case_646() +#line 4505 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) @@ -8161,29 +7900,29 @@ void case_659() yyVal = args; } -void case_661() -#line 4712 "cs-parser.jay" +void case_648() +#line 4521 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new NamedArgument (lt.Value, lt.Location, (Expression) yyVals[0+yyTop]); } -void case_663() -#line 4721 "cs-parser.jay" +void case_650() +#line 4530 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_664() -#line 4726 "cs-parser.jay" +void case_651() +#line 4535 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_665() -#line 4731 "cs-parser.jay" +void case_652() +#line 4540 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8191,8 +7930,8 @@ void case_665() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_666() -#line 4738 "cs-parser.jay" +void case_653() +#line 4547 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8200,36 +7939,36 @@ void case_666() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_668() -#line 4749 "cs-parser.jay" +void case_655() +#line 4558 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_669() -#line 4754 "cs-parser.jay" +void case_656() +#line 4563 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_670() -#line 4759 "cs-parser.jay" +void case_657() +#line 4568 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_671() -#line 4764 "cs-parser.jay" +void case_658() +#line 4573 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_672() -#line 4769 "cs-parser.jay" +void case_659() +#line 4578 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8237,8 +7976,8 @@ void case_672() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_673() -#line 4776 "cs-parser.jay" +void case_660() +#line 4585 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8246,8 +7985,8 @@ void case_673() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_674() -#line 4783 "cs-parser.jay" +void case_661() +#line 4592 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8255,8 +7994,8 @@ void case_674() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_675() -#line 4790 "cs-parser.jay" +void case_662() +#line 4599 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8264,22 +8003,22 @@ void case_675() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_677() -#line 4801 "cs-parser.jay" +void case_664() +#line 4610 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_678() -#line 4806 "cs-parser.jay" +void case_665() +#line 4615 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_679() -#line 4811 "cs-parser.jay" +void case_666() +#line 4620 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8287,8 +8026,8 @@ void case_679() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_680() -#line 4818 "cs-parser.jay" +void case_667() +#line 4627 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8296,15 +8035,15 @@ void case_680() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_682() -#line 4829 "cs-parser.jay" +void case_669() +#line 4638 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_683() -#line 4834 "cs-parser.jay" +void case_670() +#line 4643 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8312,15 +8051,15 @@ void case_683() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_685() -#line 4845 "cs-parser.jay" +void case_672() +#line 4654 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_686() -#line 4850 "cs-parser.jay" +void case_673() +#line 4659 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8328,15 +8067,15 @@ void case_686() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_688() -#line 4861 "cs-parser.jay" +void case_675() +#line 4670 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_689() -#line 4866 "cs-parser.jay" +void case_676() +#line 4675 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8344,15 +8083,15 @@ void case_689() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_691() -#line 4877 "cs-parser.jay" +void case_678() +#line 4686 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_692() -#line 4882 "cs-parser.jay" +void case_679() +#line 4691 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8360,15 +8099,15 @@ void case_692() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_694() -#line 4893 "cs-parser.jay" +void case_681() +#line 4702 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_695() -#line 4898 "cs-parser.jay" +void case_682() +#line 4707 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8376,8 +8115,8 @@ void case_695() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_697() -#line 4909 "cs-parser.jay" +void case_684() +#line 4718 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); @@ -8386,23 +8125,23 @@ void case_697() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_699() -#line 4921 "cs-parser.jay" +void case_686() +#line 4730 "cs-parser.jay" { yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_700() -#line 4926 "cs-parser.jay" +void case_687() +#line 4735 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-3+yyTop]), (Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_701() -#line 4932 "cs-parser.jay" +void case_688() +#line 4741 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8410,8 +8149,8 @@ void case_701() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_702() -#line 4939 "cs-parser.jay" +void case_689() +#line 4748 "cs-parser.jay" { Error_SyntaxError (Token.CLOSE_BRACE); @@ -8420,94 +8159,94 @@ void case_702() lexer.putback ('}'); } -void case_703() -#line 4950 "cs-parser.jay" +void case_690() +#line 4759 "cs-parser.jay" { yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_704() -#line 4955 "cs-parser.jay" +void case_691() +#line 4764 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_705() -#line 4960 "cs-parser.jay" +void case_692() +#line 4769 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_706() -#line 4965 "cs-parser.jay" +void case_693() +#line 4774 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_707() -#line 4970 "cs-parser.jay" +void case_694() +#line 4779 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_708() -#line 4975 "cs-parser.jay" +void case_695() +#line 4784 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_709() -#line 4980 "cs-parser.jay" +void case_696() +#line 4789 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_710() -#line 4985 "cs-parser.jay" +void case_697() +#line 4794 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_711() -#line 4990 "cs-parser.jay" +void case_698() +#line 4799 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_712() -#line 4995 "cs-parser.jay" +void case_699() +#line 4804 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_713() -#line 5000 "cs-parser.jay" +void case_700() +#line 4809 "cs-parser.jay" { yyVal = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_714() -#line 5008 "cs-parser.jay" +void case_701() +#line 4817 "cs-parser.jay" { var pars = new List (4); pars.Add ((Parameter) yyVals[0+yyTop]); - parameterListCommas.Clear (); + yyVal = pars; } -void case_715() -#line 5015 "cs-parser.jay" +void case_702() +#line 4824 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; @@ -8516,51 +8255,48 @@ void case_715() } pars.Add (p); - parameterListCommas.Add (GetLocation (yyVals[-1+yyTop])); - yyVal = pars; } -void case_716() -#line 5031 "cs-parser.jay" +void case_703() +#line 4838 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], null, lt.Location); } -void case_717() -#line 5037 "cs-parser.jay" +void case_704() +#line 4844 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, Parameter.Modifier.NONE, null, lt.Location); } -void case_718() -#line 5043 "cs-parser.jay" +void case_705() +#line 4850 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } -void case_719() -#line 5048 "cs-parser.jay" +void case_706() +#line 4855 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[0+yyTop]); yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } -void case_721() -#line 5056 "cs-parser.jay" +void case_708() +#line 4863 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); - lbag.AddLocation (yyVal, parameterListCommas); } -void case_723() -#line 5068 "cs-parser.jay" +void case_710() +#line 4874 "cs-parser.jay" { Block b = end_block (Location.Null); b.IsCompilerGenerated = true; @@ -8568,8 +8304,8 @@ void case_723() yyVal = b; } -void case_725() -#line 5076 "cs-parser.jay" +void case_712() +#line 4882 "cs-parser.jay" { /* Handles only cases like foo = x.FirstOrDefault (l => );*/ /* where we must restore current_variable*/ @@ -8580,109 +8316,109 @@ void case_725() yyVal = null; } -void case_727() -#line 5090 "cs-parser.jay" +void case_714() +#line 4896 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_728() -#line 5098 "cs-parser.jay" +void case_715() +#line 4904 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), false, lt.Location); } -void case_729() -#line 5104 "cs-parser.jay" +void case_716() +#line 4910 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_730() -#line 5109 "cs-parser.jay" +void case_717() +#line 4915 "cs-parser.jay" { var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[-1+yyTop]); Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), false, lt.Location); } -void case_731() -#line 5115 "cs-parser.jay" +void case_718() +#line 4921 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_732() -#line 5120 "cs-parser.jay" +void case_719() +#line 4926 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new ParametersCompiled (p), true, lt.Location); } -void case_733() -#line 5126 "cs-parser.jay" +void case_720() +#line 4932 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_735() -#line 5135 "cs-parser.jay" +void case_722() +#line 4941 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop])); } -void case_736() -#line 5140 "cs-parser.jay" +void case_723() +#line 4946 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_738() -#line 5149 "cs-parser.jay" +void case_725() +#line 4955 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop])); } -void case_739() -#line 5154 "cs-parser.jay" +void case_726() +#line 4960 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_746() -#line 5177 "cs-parser.jay" +void case_733() +#line 4983 "cs-parser.jay" { yyVal = new RefValueExpr ((Expression) yyVals[-3+yyTop], (FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_747() -#line 5182 "cs-parser.jay" +void case_734() +#line 4988 "cs-parser.jay" { yyVal = new RefTypeExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_748() -#line 5187 "cs-parser.jay" +void case_735() +#line 4993 "cs-parser.jay" { yyVal = new MakeRefExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_753() -#line 5214 "cs-parser.jay" +void case_740() +#line 5020 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; @@ -8693,15 +8429,15 @@ void case_753() FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "primary constructor"); } -void case_758() -#line 5243 "cs-parser.jay" +void case_745() +#line 5049 "cs-parser.jay" { ++lexer.parsing_block; current_type.PrimaryConstructorBaseArgumentsStart = GetLocation (yyVals[0+yyTop]); } -void case_759() -#line 5248 "cs-parser.jay" +void case_746() +#line 5054 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); current_type.PrimaryConstructorBaseArguments = (Arguments) yyVals[-1+yyTop]; @@ -8710,8 +8446,8 @@ void case_759() yyVal = yyVals[-5+yyTop]; } -void case_761() -#line 5268 "cs-parser.jay" +void case_748() +#line 5074 "cs-parser.jay" { lexer.ConstraintsParsing = true; @@ -8721,12 +8457,11 @@ void case_761() } push_current_container (c, yyVals[-3+yyTop]); - lbag.AddMember (current_container, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); valid_param_mod = ParameterModifierType.PrimaryConstructor; } -void case_762() -#line 5282 "cs-parser.jay" +void case_749() +#line 5087 "cs-parser.jay" { valid_param_mod = 0; lexer.ConstraintsParsing = false; @@ -8736,6 +8471,7 @@ void case_762() if (yyVals[0+yyTop] != null) current_container.SetConstraints ((List) yyVals[0+yyTop]); + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-5+yyTop])); if (doc_support) { current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); @@ -8745,16 +8481,16 @@ void case_762() lexer.parsing_modifiers = true; } -void case_763() -#line 5300 "cs-parser.jay" +void case_750() +#line 5106 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_764() -#line 5306 "cs-parser.jay" +void case_751() +#line 5112 "cs-parser.jay" { if (yyVals[0+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -8764,16 +8500,16 @@ void case_764() yyVal = pop_current_class (); } -void case_767() -#line 5325 "cs-parser.jay" +void case_754() +#line 5131 "cs-parser.jay" { mod_locations = null; yyVal = ModifierNone; lexer.parsing_modifiers = false; } -void case_770() -#line 5339 "cs-parser.jay" +void case_757() +#line 5145 "cs-parser.jay" { var m1 = (Modifiers) yyVals[-1+yyTop]; var m2 = (Modifiers) yyVals[0+yyTop]; @@ -8790,8 +8526,8 @@ void case_770() yyVal = m1 | m2; } -void case_771() -#line 5358 "cs-parser.jay" +void case_758() +#line 5164 "cs-parser.jay" { yyVal = Modifiers.NEW; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -8800,92 +8536,92 @@ void case_771() report.Error (1530, GetLocation (yyVals[0+yyTop]), "Keyword `new' is not allowed on namespace elements"); } -void case_772() -#line 5366 "cs-parser.jay" +void case_759() +#line 5172 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_773() -#line 5371 "cs-parser.jay" +void case_760() +#line 5177 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_774() -#line 5376 "cs-parser.jay" +void case_761() +#line 5182 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_775() -#line 5381 "cs-parser.jay" +void case_762() +#line 5187 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_776() -#line 5386 "cs-parser.jay" +void case_763() +#line 5192 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_777() -#line 5391 "cs-parser.jay" +void case_764() +#line 5197 "cs-parser.jay" { yyVal = Modifiers.SEALED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_778() -#line 5396 "cs-parser.jay" +void case_765() +#line 5202 "cs-parser.jay" { yyVal = Modifiers.STATIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_779() -#line 5401 "cs-parser.jay" +void case_766() +#line 5207 "cs-parser.jay" { yyVal = Modifiers.READONLY; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_780() -#line 5406 "cs-parser.jay" +void case_767() +#line 5212 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_781() -#line 5411 "cs-parser.jay" +void case_768() +#line 5217 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_782() -#line 5416 "cs-parser.jay" +void case_769() +#line 5222 "cs-parser.jay" { yyVal = Modifiers.EXTERN; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_783() -#line 5421 "cs-parser.jay" +void case_770() +#line 5227 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_784() -#line 5426 "cs-parser.jay" +void case_771() +#line 5232 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -8893,38 +8629,31 @@ void case_784() Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_785() -#line 5433 "cs-parser.jay" +void case_772() +#line 5239 "cs-parser.jay" { yyVal = Modifiers.ASYNC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_788() -#line 5446 "cs-parser.jay" -{ - current_type.SetBaseTypes ((List) yyVals[0+yyTop]); - lbag.AppendToMember (current_type, GetLocation (yyVals[-1+yyTop])); - } - -void case_789() -#line 5451 "cs-parser.jay" +void case_776() +#line 5256 "cs-parser.jay" { Error_SyntaxError (yyToken); current_type.SetBaseTypes ((List) yyVals[-1+yyTop]); } -void case_792() -#line 5468 "cs-parser.jay" +void case_779() +#line 5273 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((Constraints) yyVals[0+yyTop]); yyVal = constraints; } -void case_793() -#line 5474 "cs-parser.jay" +void case_780() +#line 5279 "cs-parser.jay" { var constraints = (List) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; @@ -8941,16 +8670,16 @@ void case_793() yyVal = constraints; } -void case_794() -#line 5493 "cs-parser.jay" +void case_781() +#line 5298 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_795() -#line 5499 "cs-parser.jay" +void case_782() +#line 5304 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8958,16 +8687,16 @@ void case_795() yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), null, GetLocation (yyVals[-2+yyTop])); } -void case_796() -#line 5509 "cs-parser.jay" +void case_783() +#line 5314 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = constraints; } -void case_797() -#line 5515 "cs-parser.jay" +void case_784() +#line 5320 "cs-parser.jay" { var constraints = (List) yyVals[-2+yyTop]; var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; @@ -8988,12 +8717,11 @@ void case_797() } constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); - lbag.AddLocation (constraints, GetLocation (yyVals[-1+yyTop])); yyVal = constraints; } -void case_798() -#line 5542 "cs-parser.jay" +void case_785() +#line 5346 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) report.Error (706, GetLocation (yyVals[0+yyTop]), "Invalid constraint type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -9001,15 +8729,15 @@ void case_798() yyVal = yyVals[0+yyTop]; } -void case_799() -#line 5549 "cs-parser.jay" +void case_786() +#line 5353 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_803() -#line 5569 "cs-parser.jay" +void case_790() +#line 5373 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (lexer.Location, "generic type variance"); @@ -9017,124 +8745,78 @@ void case_803() yyVal = yyVals[0+yyTop]; } -void case_804() -#line 5579 "cs-parser.jay" -{ - yyVal = new VarianceDecl (Variance.Covariant, GetLocation (yyVals[0+yyTop])); - savedLocation = GetLocation (yyVals[0+yyTop]); - } - -void case_805() -#line 5584 "cs-parser.jay" -{ - yyVal = new VarianceDecl (Variance.Contravariant, GetLocation (yyVals[0+yyTop])); - savedLocation = GetLocation (yyVals[0+yyTop]); - } - -void case_806() -#line 5605 "cs-parser.jay" +void case_793() +#line 5407 "cs-parser.jay" { ++lexer.parsing_block; start_block (GetLocation (yyVals[0+yyTop])); } -void case_808() -#line 5617 "cs-parser.jay" +void case_795() +#line 5419 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_809() -#line 5622 "cs-parser.jay" +void case_796() +#line 5424 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (lexer.Location); } -void case_810() -#line 5631 "cs-parser.jay" -{ - ++lexer.parsing_block; - current_block.StartLocation = GetLocation (yyVals[0+yyTop]); - } - -void case_811() -#line 5636 "cs-parser.jay" -{ - --lexer.parsing_block; - yyVal = end_block (GetLocation (yyVals[0+yyTop])); - } - -void case_812() -#line 5640 "cs-parser.jay" -{ - report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol '}', expected '{'"); - lexer.putback ('}'); - yyVal = end_block (GetLocation (yyVals[0+yyTop])); - } - -void case_813() -#line 5649 "cs-parser.jay" +void case_797() +#line 5433 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } -void case_814() -#line 5654 "cs-parser.jay" +void case_798() +#line 5438 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_822() -#line 5682 "cs-parser.jay" -{ - Error_SyntaxError (yyToken); - var lt =(LocatedToken) yyVals[-1+yyTop]; - var sn = new SimpleName (lt.Value, lt.Location); - current_block.AddStatement(new StatementErrorExpression (sn)); - yyVal = null; - } - -void case_823() -#line 5691 "cs-parser.jay" +void case_806() +#line 5465 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_856() -#line 5755 "cs-parser.jay" +void case_839() +#line 5529 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_857() -#line 5760 "cs-parser.jay" +void case_840() +#line 5534 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_858() -#line 5765 "cs-parser.jay" +void case_841() +#line 5539 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_859() -#line 5773 "cs-parser.jay" +void case_842() +#line 5547 "cs-parser.jay" { /* Uses lexer.Location because semicolon location is not kept in quick mode*/ yyVal = new EmptyStatement (lexer.Location); } -void case_860() -#line 5781 "cs-parser.jay" +void case_843() +#line 5555 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); @@ -9143,8 +8825,8 @@ void case_860() current_block.AddStatement (labeled); } -void case_863() -#line 5794 "cs-parser.jay" +void case_846() +#line 5568 "cs-parser.jay" { if (yyVals[-1+yyTop] is VarExpr) yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); @@ -9152,8 +8834,8 @@ void case_863() yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_864() -#line 5810 "cs-parser.jay" +void case_847() +#line 5584 "cs-parser.jay" { /* Ok, the above "primary_expression" is there to get rid of*/ /* both reduce/reduce and shift/reduces in the grammar, it should*/ @@ -9180,22 +8862,22 @@ void case_864() } } -void case_865() -#line 5836 "cs-parser.jay" +void case_848() +#line 5610 "cs-parser.jay" { var expr = (ATypeNameExpression) yyVals[-1+yyTop]; yyVal = new ComposedCast (expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_869() -#line 5847 "cs-parser.jay" +void case_852() +#line 5621 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_873() -#line 5870 "cs-parser.jay" +void case_856() +#line 5644 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -9203,8 +8885,8 @@ void case_873() current_variable = new BlockVariable ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_874() -#line 5877 "cs-parser.jay" +void case_857() +#line 5651 "cs-parser.jay" { yyVal = current_variable; current_variable = null; @@ -9214,8 +8896,8 @@ void case_874() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_875() -#line 5886 "cs-parser.jay" +void case_858() +#line 5660 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -9223,37 +8905,24 @@ void case_875() current_variable = new BlockConstant ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_876() -#line 5893 "cs-parser.jay" +void case_859() +#line 5667 "cs-parser.jay" { - if (current_variable.Initializer != null) { - lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); - } else { - lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); - } - yyVal = current_variable;; + yyVal = current_variable; current_variable = null; + lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_878() -#line 5906 "cs-parser.jay" -{ - /* Redundant, but wont regress*/ - report.Error (1525, lexer.Location, "Unexpected symbol }"); - lexer.putback ('}'); - yyVal = yyVals[0+yyTop]; - } - -void case_880() -#line 5917 "cs-parser.jay" +void case_861() +#line 5677 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; PushLocation (GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_881() -#line 5923 "cs-parser.jay" +void case_862() +#line 5683 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -9263,8 +8932,8 @@ void case_881() } } -void case_885() -#line 5941 "cs-parser.jay" +void case_866() +#line 5701 "cs-parser.jay" { foreach (var d in current_variable.Declarators) { if (d.Initializer == null) @@ -9272,8 +8941,8 @@ void case_885() } } -void case_888() -#line 5956 "cs-parser.jay" +void case_869() +#line 5716 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -9283,8 +8952,8 @@ void case_888() lbag.AddLocation (d, GetLocation (yyVals[-1+yyTop])); } -void case_889() -#line 5965 "cs-parser.jay" +void case_870() +#line 5725 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -9294,15 +8963,8 @@ void case_889() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_891() -#line 5981 "cs-parser.jay" -{ - savedLocation = GetLocation (yyVals[-1+yyTop]); - current_variable.Initializer = (Expression) yyVals[0+yyTop]; - } - -void case_896() -#line 5999 "cs-parser.jay" +void case_877() +#line 5758 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -9312,37 +8974,37 @@ void case_896() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_898() -#line 6012 "cs-parser.jay" +void case_879() +#line 5771 "cs-parser.jay" { yyVal = new StackAlloc ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_899() -#line 6017 "cs-parser.jay" +void case_880() +#line 5776 "cs-parser.jay" { report.Error (1575, GetLocation (yyVals[-1+yyTop]), "A stackalloc expression requires [] after type"); yyVal = new StackAlloc ((Expression) yyVals[0+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_900() -#line 6025 "cs-parser.jay" +void case_881() +#line 5784 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_902() -#line 6031 "cs-parser.jay" +void case_883() +#line 5790 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; report.Error (1002, GetLocation (yyVals[0+yyTop]), "; expected"); lexer.putback ('}'); } -void case_905() -#line 6049 "cs-parser.jay" +void case_886() +#line 5808 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { @@ -9353,22 +9015,22 @@ void case_905() } } -void case_906() -#line 6062 "cs-parser.jay" +void case_887() +#line 5821 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; yyVal = new StatementExpression (new OptionalAssign (expr, lexer.Location)); } -void case_907() -#line 6067 "cs-parser.jay" +void case_888() +#line 5826 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_910() -#line 6081 "cs-parser.jay" +void case_891() +#line 5840 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9377,8 +9039,8 @@ void case_910() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_911() -#line 6090 "cs-parser.jay" +void case_892() +#line 5849 "cs-parser.jay" { yyVal = new If ((BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); @@ -9389,8 +9051,8 @@ void case_911() Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_912() -#line 6100 "cs-parser.jay" +void case_893() +#line 5859 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9398,16 +9060,16 @@ void case_912() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_914() -#line 6114 "cs-parser.jay" +void case_895() +#line 5873 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, GetLocation (yyVals[-7+yyTop])); end_block (GetLocation (yyVals[0+yyTop])); - lbag.AddStatement (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop])); } -void case_915() -#line 6120 "cs-parser.jay" +void case_896() +#line 5879 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9415,30 +9077,30 @@ void case_915() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_922() -#line 6151 "cs-parser.jay" +void case_903() +#line 5910 "cs-parser.jay" { var label = (SwitchLabel) yyVals[0+yyTop]; label.SectionStart = true; current_block.AddStatement (label); } -void case_924() -#line 6164 "cs-parser.jay" +void case_905() +#line 5923 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_925() -#line 6169 "cs-parser.jay" +void case_906() +#line 5928 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_931() -#line 6200 "cs-parser.jay" +void case_912() +#line 5959 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9447,8 +9109,8 @@ void case_931() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_932() -#line 6208 "cs-parser.jay" +void case_913() +#line 5967 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9456,22 +9118,22 @@ void case_932() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_933() -#line 6218 "cs-parser.jay" +void case_914() +#line 5977 "cs-parser.jay" { yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_934() -#line 6223 "cs-parser.jay" +void case_915() +#line 5982 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), Location.Null); } -void case_935() -#line 6228 "cs-parser.jay" +void case_916() +#line 5987 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9479,79 +9141,82 @@ void case_935() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_936() -#line 6238 "cs-parser.jay" +void case_917() +#line 5997 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); current_block.IsCompilerGenerated = true; For f = new For (GetLocation (yyVals[-1+yyTop])); current_block.AddStatement (f); - lbag.AddStatement (f, current_block.StartLocation); yyVal = f; } -void case_938() -#line 6255 "cs-parser.jay" +void case_919() +#line 6013 "cs-parser.jay" { - For f = (For) yyVals[-2+yyTop]; - f.Initializer = (Statement) yyVals[-1+yyTop]; - lbag.AddLocation (f, GetLocation (yyVals[0+yyTop])); - yyVal = f; + ((For) yyVals[-2+yyTop]).Initializer = (Statement) yyVals[-1+yyTop]; + + /* Pass the "For" object to the iterator_part4*/ + oob_stack.Push (yyVals[-2+yyTop]); } -void case_940() -#line 6265 "cs-parser.jay" +void case_920() +#line 6021 "cs-parser.jay" { - report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); - For f = (For) yyVals[-2+yyTop]; - f.Initializer = (Statement) yyVals[-1+yyTop]; - lbag.AddLocation (f, GetLocation (yyVals[0+yyTop])); - yyVal = end_block (GetLocation (yyVals[0+yyTop])); - } + var locations = (Tuple) yyVals[-1+yyTop]; + oob_stack.Pop (); + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + For f = ((For) yyVals[-5+yyTop]); + f.Statement = (Statement) yyVals[0+yyTop]; + lbag.AddStatement (f, current_block.StartLocation, GetLocation (yyVals[-3+yyTop]), GetLocation (locations.Item1), GetLocation (locations.Item2)); -void case_941() -#line 6276 "cs-parser.jay" + yyVal = end_block (GetLocation (yyVals[-3+yyTop])); + } + +void case_921() +#line 6034 "cs-parser.jay" { - For f = (For) yyVals[-2+yyTop]; - f.Condition = (BooleanExpression) yyVals[-1+yyTop]; - lbag.AddLocation (f, GetLocation (yyVals[0+yyTop])); - yyVal = f; + Error_SyntaxError (yyToken); + yyVal = end_block (current_block.StartLocation); } -void case_943() -#line 6287 "cs-parser.jay" +void case_922() +#line 6042 "cs-parser.jay" { - report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); - For f = (For) yyVals[-2+yyTop]; + For f = (For) oob_stack.Peek (); f.Condition = (BooleanExpression) yyVals[-1+yyTop]; - lbag.AddLocation (f, GetLocation (yyVals[0+yyTop])); - yyVal = end_block (GetLocation (yyVals[0+yyTop])); - } + } -void case_944() -#line 6299 "cs-parser.jay" +void case_924() +#line 6052 "cs-parser.jay" { - For f = (For) yyVals[-3+yyTop]; - f.Iterator = (Statement) yyVals[-2+yyTop]; - - if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) - Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); - - f.Statement = (Statement) yyVals[0+yyTop]; - lbag.AddLocation (f, GetLocation (yyVals[-1+yyTop])); + report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol `}'"); + For f = (For) oob_stack.Peek (); + f.Condition = (BooleanExpression) yyVals[-1+yyTop]; + yyVal = new Tuple (GetLocation (yyVals[0+yyTop]), GetLocation (yyVals[0+yyTop])); + } - yyVal = end_block (GetLocation (yyVals[-1+yyTop])); +void case_925() +#line 6061 "cs-parser.jay" +{ + For f = (For) oob_stack.Peek (); + f.Iterator = (Statement) yyVals[-1+yyTop]; + yyVal = GetLocation (yyVals[0+yyTop]); } -void case_945() -#line 6312 "cs-parser.jay" +void case_926() +#line 6066 "cs-parser.jay" { - Error_SyntaxError (yyToken); - yyVal = end_block (current_block.StartLocation); + report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol expected ')'"); + For f = (For) oob_stack.Peek (); + f.Iterator = (Statement) yyVals[-1+yyTop]; + yyVal = GetLocation (yyVals[0+yyTop]); } -void case_948() -#line 6325 "cs-parser.jay" +void case_931() +#line 6086 "cs-parser.jay" { var lt = (LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -9559,8 +9224,8 @@ void case_948() current_variable = new BlockVariable ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_949() -#line 6332 "cs-parser.jay" +void case_932() +#line 6093 "cs-parser.jay" { yyVal = current_variable; if (yyVals[-1+yyTop] != null) @@ -9569,8 +9234,8 @@ void case_949() current_variable = null; } -void case_957() -#line 6359 "cs-parser.jay" +void case_940() +#line 6120 "cs-parser.jay" { var sl = yyVals[-2+yyTop] as StatementList; if (sl == null) { @@ -9578,15 +9243,14 @@ void case_957() lbag.AddStatement (sl, GetLocation (yyVals[-1+yyTop])); } else { sl.Add ((Statement) yyVals[0+yyTop]); - lbag.AddLocation (sl, GetLocation (yyVals[-1+yyTop])); - + lbag.AppendTo (sl, GetLocation (yyVals[-1+yyTop])); } yyVal = sl; } -void case_958() -#line 6376 "cs-parser.jay" +void case_941() +#line 6136 "cs-parser.jay" { report.Error (230, GetLocation (yyVals[-3+yyTop]), "Type and identifier are both required in a foreach statement"); @@ -9600,8 +9264,8 @@ void case_958() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_959() -#line 6389 "cs-parser.jay" +void case_942() +#line 6149 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9619,8 +9283,8 @@ void case_959() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_960() -#line 6406 "cs-parser.jay" +void case_943() +#line 6166 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -9631,8 +9295,8 @@ void case_960() yyVal = li; } -void case_961() -#line 6416 "cs-parser.jay" +void case_944() +#line 6176 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9644,118 +9308,93 @@ void case_961() yyVal = f; } -void case_962() -#line 6427 "cs-parser.jay" -{ - start_block (GetLocation (yyVals[-3+yyTop])); - current_block.IsCompilerGenerated = true; - var lt = yyVals[-1+yyTop] as LocatedToken; - var li = lt != null ? new LocalVariable (current_block, lt.Value, LocalVariable.Flags.ForeachVariable | LocalVariable.Flags.Used, lt.Location) : null; - - Foreach f = new Foreach ((Expression) yyVals[-2+yyTop], li, null, null, null, GetLocation (yyVals[-4+yyTop])); - current_block.AddStatement (f); - - lbag.AddStatement (f, GetLocation (yyVals[-3+yyTop])); - yyVal = end_block (GetLocation (yyVals[0+yyTop])); - } - -void case_963() -#line 6440 "cs-parser.jay" -{ - Foreach f = new Foreach ((Expression) yyVals[-1+yyTop], null, null, null, null, GetLocation (yyVals[-3+yyTop])); - current_block.AddStatement (f); - - lbag.AddStatement (f, GetLocation (yyVals[-2+yyTop])); - yyVal = f; - } - -void case_970() -#line 6460 "cs-parser.jay" +void case_951() +#line 6199 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_971() -#line 6468 "cs-parser.jay" +void case_952() +#line 6207 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_972() -#line 6473 "cs-parser.jay" +void case_953() +#line 6212 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); } -void case_973() -#line 6481 "cs-parser.jay" +void case_954() +#line 6220 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_974() -#line 6487 "cs-parser.jay" +void case_955() +#line 6226 "cs-parser.jay" { yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_975() -#line 6492 "cs-parser.jay" +void case_956() +#line 6231 "cs-parser.jay" { yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_976() -#line 6500 "cs-parser.jay" +void case_957() +#line 6239 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_977() -#line 6505 "cs-parser.jay" +void case_958() +#line 6244 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_978() -#line 6510 "cs-parser.jay" +void case_959() +#line 6249 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Return (null, GetLocation (yyVals[-1+yyTop])); } -void case_979() -#line 6518 "cs-parser.jay" +void case_960() +#line 6257 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_980() -#line 6523 "cs-parser.jay" +void case_961() +#line 6262 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_981() -#line 6528 "cs-parser.jay" +void case_962() +#line 6267 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Throw (null, GetLocation (yyVals[-1+yyTop])); } -void case_982() -#line 6536 "cs-parser.jay" +void case_963() +#line 6275 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -9772,8 +9411,8 @@ void case_982() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_983() -#line 6552 "cs-parser.jay" +void case_964() +#line 6291 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9792,8 +9431,8 @@ void case_983() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_984() -#line 6570 "cs-parser.jay" +void case_965() +#line 6309 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -9808,29 +9447,29 @@ void case_984() lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_988() -#line 6596 "cs-parser.jay" +void case_969() +#line 6335 "cs-parser.jay" { yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_989() -#line 6601 "cs-parser.jay" +void case_970() +#line 6340 "cs-parser.jay" { - yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop]), true), (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List) yyVals[-2+yyTop], Location.Null, true), (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_990() -#line 6606 "cs-parser.jay" +void case_971() +#line 6345 "cs-parser.jay" { Error_SyntaxError (1524, yyToken); yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); } -void case_991() -#line 6614 "cs-parser.jay" +void case_972() +#line 6353 "cs-parser.jay" { var l = new List (2); @@ -9838,8 +9477,8 @@ void case_991() yyVal = l; } -void case_992() -#line 6621 "cs-parser.jay" +void case_973() +#line 6360 "cs-parser.jay" { var l = (List) yyVals[-1+yyTop]; @@ -9853,16 +9492,16 @@ void case_992() yyVal = l; } -void case_995() -#line 6642 "cs-parser.jay" +void case_976() +#line 6381 "cs-parser.jay" { var c = new Catch ((ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); c.Filter = (CatchFilterExpression) yyVals[-1+yyTop]; yyVal = c; } -void case_996() -#line 6648 "cs-parser.jay" +void case_977() +#line 6387 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch ((ExplicitBlock) current_block, GetLocation (yyVals[-4+yyTop])); @@ -9873,21 +9512,20 @@ void case_996() c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); current_block.AddLocalName (c.Variable); } - + lbag.AddLocation (c, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); yyVal = c; - lexer.parsing_catch_when = true; } -void case_997() -#line 6664 "cs-parser.jay" +void case_978() +#line 6402 "cs-parser.jay" { - ((Catch) yyVals[-1+yyTop]).Filter = (CatchFilterExpression) yyVals[0+yyTop]; - yyVal = yyVals[-1+yyTop]; + ((Catch) yyVals[-2+yyTop]).Filter = (CatchFilterExpression) yyVals[-1+yyTop]; + yyVal = yyVals[-2+yyTop]; } -void case_998() -#line 6669 "cs-parser.jay" +void case_979() +#line 6407 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -9899,33 +9537,45 @@ void case_998() yyVal = new Catch (null, GetLocation (yyVals[-2+yyTop])); } -void case_1000() -#line 6687 "cs-parser.jay" +void case_980() +#line 6418 "cs-parser.jay" { - end_block (Location.Null); Error_SyntaxError (yyToken); - yyVal = null; + + /* Required otherwise missing block could not be detected because*/ + /* start_block is run early*/ + var c = new Catch (null, GetLocation (yyVals[-5+yyTop])); + c.TypeExpression = (FullNamedExpression) yyVals[-3+yyTop]; + + if (yyVals[-2+yyTop] != null) { + var lt = (LocatedToken) yyVals[-2+yyTop]; + c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); + } + + lbag.AddLocation (c, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop])); + + yyVal = c; } -void case_1003() -#line 6703 "cs-parser.jay" +void case_982() +#line 6440 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_5) - FeatureIsNotAvailable (GetLocation (yyVals[-4+yyTop]), "exception filter"); + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "exception filter"); - yyVal = new CatchFilterExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); - lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = new CatchFilterExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_1006() -#line 6728 "cs-parser.jay" +void case_985() +#line 6465 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_1008() -#line 6738 "cs-parser.jay" +void case_987() +#line 6475 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9934,8 +9584,8 @@ void case_1008() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_1009() -#line 6746 "cs-parser.jay" +void case_988() +#line 6483 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -9943,8 +9593,8 @@ void case_1009() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_1010() -#line 6756 "cs-parser.jay" +void case_989() +#line 6493 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -9955,15 +9605,15 @@ void case_1010() current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_1011() -#line 6766 "cs-parser.jay" +void case_990() +#line 6503 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_1012() -#line 6771 "cs-parser.jay" +void case_991() +#line 6508 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -9974,8 +9624,8 @@ void case_1012() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_1013() -#line 6784 "cs-parser.jay" +void case_992() +#line 6521 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -9986,27 +9636,26 @@ void case_1013() current_variable = new Using.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_1014() -#line 6794 "cs-parser.jay" +void case_993() +#line 6531 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_1015() -#line 6799 "cs-parser.jay" +void case_994() +#line 6536 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); Using u = new Using ((Using.VariableDeclaration) yyVals[-1+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-8+yyTop])); - lbag.AddStatement (u, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-2+yyTop])); current_block.AddStatement (u); yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_1016() -#line 6809 "cs-parser.jay" +void case_995() +#line 6545 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -10015,8 +9664,8 @@ void case_1016() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_1017() -#line 6817 "cs-parser.jay" +void case_996() +#line 6553 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -10024,23 +9673,22 @@ void case_1017() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_1019() -#line 6828 "cs-parser.jay" +void case_998() +#line 6564 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); } -void case_1021() -#line 6840 "cs-parser.jay" +void case_1000() +#line 6576 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; - lbag.AddLocation (current_variable, GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_1022() -#line 6852 "cs-parser.jay" +void case_1001() +#line 6587 "cs-parser.jay" { lexer.query_parsing = false; @@ -10053,8 +9701,8 @@ void case_1022() current_block = current_block.Parent; } -void case_1023() -#line 6864 "cs-parser.jay" +void case_1002() +#line 6599 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -10065,8 +9713,8 @@ void case_1023() current_block = current_block.Parent; } -void case_1024() -#line 6875 "cs-parser.jay" +void case_1003() +#line 6610 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -10075,16 +9723,16 @@ void case_1024() current_block = current_block.Parent; } -void case_1025() -#line 6882 "cs-parser.jay" +void case_1004() +#line 6617 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } -void case_1026() -#line 6891 "cs-parser.jay" +void case_1005() +#line 6626 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -10095,8 +9743,8 @@ void case_1026() yyVal = new Linq.QueryExpression (clause); } -void case_1027() -#line 6901 "cs-parser.jay" +void case_1006() +#line 6636 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -10109,8 +9757,8 @@ void case_1027() yyVal = new Linq.QueryExpression (clause); } -void case_1028() -#line 6916 "cs-parser.jay" +void case_1007() +#line 6651 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -10121,8 +9769,8 @@ void case_1028() yyVal = new Linq.QueryExpression (clause); } -void case_1029() -#line 6926 "cs-parser.jay" +void case_1008() +#line 6661 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -10135,8 +9783,8 @@ void case_1029() yyVal = new Linq.QueryExpression (clause); } -void case_1031() -#line 6945 "cs-parser.jay" +void case_1010() +#line 6680 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -10144,12 +9792,13 @@ void case_1031() current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_1033() -#line 6960 "cs-parser.jay" +void case_1012() +#line 6696 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -10166,8 +9815,8 @@ void case_1033() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_1034() -#line 6979 "cs-parser.jay" +void case_1013() +#line 6715 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -10183,8 +9832,8 @@ void case_1034() yyVal = head; } -void case_1035() -#line 6994 "cs-parser.jay" +void case_1014() +#line 6730 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[0+yyTop]; @@ -10197,22 +9846,22 @@ void case_1035() yyVal = head; } -void case_1037() -#line 7007 "cs-parser.jay" +void case_1016() +#line 6743 "cs-parser.jay" { report.Error (742, GetLocation (yyVals[0+yyTop]), "Unexpected symbol `{0}'. A query body must end with select or group clause", GetSymbolName (yyToken)); yyVal = yyVals[-1+yyTop]; } -void case_1038() -#line 7012 "cs-parser.jay" +void case_1017() +#line 6748 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_1040() -#line 7024 "cs-parser.jay" +void case_1019() +#line 6760 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -10220,8 +9869,8 @@ void case_1040() current_block = current_block.Parent; } -void case_1041() -#line 7031 "cs-parser.jay" +void case_1020() +#line 6767 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -10230,8 +9879,8 @@ void case_1041() linq_clause_blocks.Push ((Linq.QueryBlock)current_block); } -void case_1042() -#line 7039 "cs-parser.jay" +void case_1021() +#line 6775 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10239,8 +9888,8 @@ void case_1042() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1043() -#line 7046 "cs-parser.jay" +void case_1022() +#line 6782 "cs-parser.jay" { var obj = (object[]) yyVals[0+yyTop]; @@ -10251,22 +9900,22 @@ void case_1043() current_block = current_block.Parent; } -void case_1045() -#line 7063 "cs-parser.jay" +void case_1024() +#line 6799 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new object[2] { null, Location.Null }; } -void case_1047() -#line 7072 "cs-parser.jay" +void case_1026() +#line 6808 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_1054() -#line 7092 "cs-parser.jay" +void case_1033() +#line 6828 "cs-parser.jay" { var lt = (LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -10279,8 +9928,8 @@ void case_1054() ((Linq.QueryBlock)current_block).AddRangeVariable (sn); } -void case_1056() -#line 7111 "cs-parser.jay" +void case_1035() +#line 6847 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -10288,8 +9937,8 @@ void case_1056() current_block = current_block.Parent; } -void case_1057() -#line 7121 "cs-parser.jay" +void case_1036() +#line 6857 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -10298,8 +9947,8 @@ void case_1057() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1058() -#line 7129 "cs-parser.jay" +void case_1037() +#line 6865 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10308,8 +9957,8 @@ void case_1058() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1059() -#line 7137 "cs-parser.jay" +void case_1038() +#line 6873 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10318,8 +9967,8 @@ void case_1059() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1060() -#line 7145 "cs-parser.jay" +void case_1039() +#line 6881 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10351,15 +10000,15 @@ void case_1060() into = new Linq.RangeVariable (lt.Value, lt.Location); yyVal = new Linq.GroupJoin (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, into, GetLocation (yyVals[-11+yyTop])); - lbag.AddLocation (yyVal, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), opt_intoStack.Pop ()); + lbag.AddLocation (yyVal, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } current_block = block.Parent; ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_1061() -#line 7183 "cs-parser.jay" +void case_1040() +#line 6919 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -10368,8 +10017,8 @@ void case_1061() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1062() -#line 7191 "cs-parser.jay" +void case_1041() +#line 6927 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10378,8 +10027,8 @@ void case_1062() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1063() -#line 7199 "cs-parser.jay" +void case_1042() +#line 6935 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10388,8 +10037,8 @@ void case_1063() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1064() -#line 7207 "cs-parser.jay" +void case_1043() +#line 6943 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -10425,29 +10074,14 @@ void case_1064() yyVal = new Linq.GroupJoin (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, into, GetLocation (yyVals[-12+yyTop])) { IdentifierType = (FullNamedExpression)yyVals[-11+yyTop] }; - lbag.AddLocation (yyVal, GetLocation (yyVals[-10+yyTop]), GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-4+yyTop]), opt_intoStack.Pop ()); } current_block = block.Parent; ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_1066() -#line 7253 "cs-parser.jay" -{ - opt_intoStack.Push (GetLocation (yyVals[-1+yyTop])); - yyVal = yyVals[0+yyTop]; - } - -void case_1067() -#line 7261 "cs-parser.jay" -{ - current_block = new Linq.QueryBlock (current_block, lexer.Location); - lbag.AddLocation (current_block, GetLocation (yyVals[0+yyTop])); - } - -void case_1068() -#line 7266 "cs-parser.jay" +void case_1047() +#line 6999 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10455,8 +10089,8 @@ void case_1068() yyVal = yyVals[0+yyTop]; } -void case_1070() -#line 7277 "cs-parser.jay" +void case_1049() +#line 7010 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10464,15 +10098,15 @@ void case_1070() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_1071() -#line 7284 "cs-parser.jay" +void case_1050() +#line 7017 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_1073() -#line 7293 "cs-parser.jay" +void case_1052() +#line 7026 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -10480,43 +10114,43 @@ void case_1073() current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location); } -void case_1074() -#line 7300 "cs-parser.jay" +void case_1053() +#line 7033 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_1076() -#line 7312 "cs-parser.jay" +void case_1055() +#line 7045 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1077() -#line 7317 "cs-parser.jay" +void case_1056() +#line 7050 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1079() -#line 7329 "cs-parser.jay" +void case_1058() +#line 7062 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1080() -#line 7334 "cs-parser.jay" +void case_1059() +#line 7067 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_1082() -#line 7344 "cs-parser.jay" +void case_1061() +#line 7077 "cs-parser.jay" { /* query continuation block is not linked with query block but with block*/ /* before. This means each query can use same range variable names for*/ @@ -10533,8 +10167,8 @@ void case_1082() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_1083() -#line 7360 "cs-parser.jay" +void case_1062() +#line 7093 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (LocatedToken) yyVals[-2+yyTop]; @@ -10544,8 +10178,8 @@ void case_1083() }; } -void case_1086() -#line 7387 "cs-parser.jay" +void case_1065() +#line 7120 "cs-parser.jay" { current_container = current_type = new Class (current_container, new MemberName (""), Modifiers.PUBLIC, null); @@ -10574,8 +10208,8 @@ void case_1086() start_block (lexer.Location); } -void case_1087() -#line 7415 "cs-parser.jay" +void case_1066() +#line 7148 "cs-parser.jay" { --lexer.parsing_block; var method = (InteractiveMethod) oob_stack.Pop (); @@ -10589,24 +10223,24 @@ void case_1087() current_local_parameters = null; } -void case_1097() -#line 7461 "cs-parser.jay" +void case_1076() +#line 7194 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; yyVal = null; } -void case_1098() -#line 7467 "cs-parser.jay" +void case_1077() +#line 7200 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])); module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; yyVal = null; } -void case_1099() -#line 7473 "cs-parser.jay" +void case_1078() +#line 7206 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -10614,15 +10248,15 @@ void case_1099() yyVal = new MemberName (lt.Value); } -void case_1102() -#line 7488 "cs-parser.jay" +void case_1081() +#line 7221 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], MemberCache.IndexerNameAlias, Location.Null); } -void case_1103() -#line 7493 "cs-parser.jay" +void case_1082() +#line 7226 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -10631,8 +10265,8 @@ void case_1103() yyVal = null; } -void case_1104() -#line 7501 "cs-parser.jay" +void case_1083() +#line 7234 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -10641,8 +10275,8 @@ void case_1104() yyVal = null; } -void case_1105() -#line 7509 "cs-parser.jay" +void case_1084() +#line 7242 "cs-parser.jay" { var p = (List)yyVals[0+yyTop]; module.DocumentationBuilder.ParsedParameters = p; @@ -10650,24 +10284,24 @@ void case_1105() yyVal = null; } -void case_1113() -#line 7547 "cs-parser.jay" +void case_1092() +#line 7280 "cs-parser.jay" { var parameters = new List (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_1114() -#line 7553 "cs-parser.jay" +void case_1093() +#line 7286 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_1115() -#line 7562 "cs-parser.jay" +void case_1094() +#line 7295 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -10679,3829 +10313,3761 @@ void case_1115() static readonly short [] yyLhs = { -1, 0, 4, 0, 0, 1, 1, 1, 1, 2, 2, 11, 11, 12, 12, 13, 13, 14, 15, 15, 15, - 16, 16, 20, 21, 18, 18, 23, 23, 23, 19, - 19, 19, 24, 24, 25, 25, 7, 7, 6, 6, - 22, 22, 8, 8, 26, 26, 26, 27, 27, 27, - 27, 27, 9, 9, 10, 10, 35, 33, 38, 34, - 34, 34, 34, 36, 36, 36, 37, 37, 42, 39, - 40, 41, 41, 43, 43, 43, 43, 43, 44, 44, - 44, 48, 45, 47, 51, 50, 50, 50, 53, 53, - 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 69, 64, 74, 76, - 79, 80, 81, 29, 29, 84, 56, 56, 85, 85, - 86, 86, 87, 89, 83, 83, 88, 88, 94, 57, - 98, 57, 57, 93, 101, 93, 95, 95, 102, 102, - 103, 104, 103, 99, 99, 105, 105, 106, 107, 97, - 97, 100, 100, 100, 110, 58, 113, 114, 108, 115, - 116, 117, 108, 108, 108, 109, 109, 119, 119, 122, - 120, 112, 112, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 124, 124, 127, 127, 127, 127, 130, - 127, 128, 128, 131, 131, 132, 132, 132, 125, 125, - 125, 133, 133, 133, 126, 135, 137, 138, 140, 59, - 141, 59, 139, 143, 139, 142, 142, 145, 147, 61, - 146, 146, 136, 136, 136, 136, 136, 151, 148, 152, - 149, 150, 150, 150, 153, 154, 155, 157, 30, 30, - 156, 156, 158, 158, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 161, 62, 162, 162, 165, 160, 160, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 167, 166, 168, 166, 166, 166, 63, - 171, 173, 169, 170, 170, 172, 172, 177, 175, 178, - 175, 175, 175, 179, 65, 181, 60, 184, 185, 60, - 60, 180, 187, 180, 182, 182, 188, 188, 189, 190, - 189, 191, 186, 183, 183, 183, 183, 183, 195, 192, - 196, 193, 194, 194, 66, 67, 198, 200, 201, 31, - 197, 197, 197, 199, 199, 199, 202, 202, 203, 204, - 203, 203, 203, 205, 206, 207, 32, 208, 208, 17, - 17, 17, 209, 209, 209, 213, 213, 211, 211, 211, - 214, 214, 216, 73, 134, 111, 111, 144, 144, 217, - 217, 217, 215, 215, 218, 218, 219, 219, 221, 221, - 92, 82, 82, 96, 96, 129, 129, 163, 163, 223, - 223, 223, 222, 226, 226, 226, 228, 228, 229, 227, - 227, 227, 227, 227, 227, 227, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 232, 232, 232, 233, - 233, 233, 254, 254, 252, 252, 255, 255, 256, 256, - 257, 256, 258, 256, 259, 259, 260, 260, 235, 235, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 237, 237, 237, 262, 262, 263, 263, 264, - 264, 266, 266, 266, 267, 267, 267, 267, 267, 267, - 267, 268, 268, 176, 176, 261, 261, 261, 261, 261, - 273, 273, 272, 272, 274, 274, 274, 274, 274, 274, - 276, 276, 276, 275, 238, 238, 238, 238, 271, 271, - 278, 278, 279, 279, 239, 240, 240, 241, 242, 243, - 243, 234, 234, 234, 234, 234, 284, 280, 244, 244, - 285, 285, 286, 286, 287, 287, 287, 287, 288, 288, - 288, 288, 281, 281, 224, 224, 283, 283, 289, 289, - 282, 282, 91, 91, 290, 290, 245, 291, 291, 212, - 210, 246, 246, 247, 247, 248, 248, 249, 293, 250, - 294, 250, 292, 292, 296, 295, 236, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, - 299, 299, 299, 299, 299, 299, 300, 300, 300, 300, - 300, 300, 300, 300, 300, 300, 300, 300, 301, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 304, 305, - 307, 307, 308, 309, 309, 306, 306, 310, 310, 311, - 311, 312, 312, 312, 312, 312, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 314, 314, 314, 314, 314, - 315, 315, 315, 316, 316, 316, 317, 317, 317, 318, - 318, 318, 319, 319, 319, 320, 320, 321, 321, 321, - 321, 321, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 323, 323, 324, 324, 324, 324, 325, - 325, 327, 326, 326, 326, 52, 52, 329, 328, 330, - 328, 331, 328, 332, 333, 328, 334, 335, 328, 46, - 46, 269, 269, 269, 269, 251, 251, 251, 90, 337, - 75, 75, 338, 339, 339, 339, 339, 341, 339, 342, - 343, 344, 345, 28, 72, 72, 71, 71, 118, 118, - 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 77, 77, 340, 340, 78, - 78, 347, 347, 348, 348, 349, 349, 350, 350, 350, - 350, 220, 220, 351, 351, 352, 121, 70, 70, 353, - 174, 174, 355, 354, 68, 68, 356, 356, 357, 357, - 357, 357, 357, 361, 361, 362, 362, 362, 359, 359, - 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, - 359, 363, 363, 363, 363, 363, 363, 363, 363, 363, - 363, 363, 363, 363, 377, 377, 377, 377, 364, 378, - 360, 277, 277, 379, 379, 379, 379, 225, 225, 380, - 49, 49, 382, 358, 386, 358, 384, 384, 381, 381, - 381, 383, 383, 390, 390, 389, 389, 391, 391, 385, - 385, 387, 387, 392, 392, 393, 388, 388, 388, 365, - 365, 365, 376, 376, 394, 395, 395, 366, 366, 396, - 396, 396, 399, 397, 397, 398, 398, 400, 400, 400, - 401, 402, 402, 403, 403, 403, 367, 367, 367, 367, - 404, 404, 405, 405, 405, 409, 406, 412, 408, 408, - 415, 411, 411, 414, 414, 410, 410, 418, 417, 417, - 413, 413, 416, 416, 420, 419, 419, 407, 407, 421, - 407, 407, 407, 368, 368, 368, 368, 368, 368, 422, - 423, 423, 424, 424, 424, 425, 425, 425, 426, 426, - 426, 427, 427, 427, 428, 428, 369, 369, 369, 369, - 429, 429, 302, 302, 430, 433, 430, 430, 432, 432, - 431, 434, 431, 370, 371, 435, 374, 372, 372, 437, - 438, 375, 440, 441, 373, 373, 373, 439, 439, 436, - 436, 336, 336, 336, 336, 442, 442, 444, 444, 446, - 445, 447, 445, 443, 443, 443, 443, 443, 451, 449, - 452, 454, 449, 453, 453, 448, 448, 455, 455, 455, - 455, 455, 460, 456, 461, 457, 462, 463, 464, 458, - 466, 467, 468, 458, 465, 465, 470, 459, 469, 473, - 469, 472, 475, 472, 471, 471, 471, 474, 474, 474, - 450, 476, 450, 3, 3, 477, 3, 3, 478, 478, - 270, 270, 265, 265, 5, 479, 479, 479, 479, 479, - 483, 479, 479, 479, 479, 480, 480, 481, 484, 481, - 482, 482, 485, 485, 486, + 19, 20, 17, 17, 22, 22, 22, 18, 18, 18, + 23, 23, 24, 24, 7, 7, 6, 6, 21, 21, + 8, 8, 25, 25, 25, 26, 26, 26, 26, 26, + 9, 9, 10, 10, 34, 32, 37, 33, 33, 33, + 33, 35, 35, 35, 36, 36, 41, 38, 39, 40, + 40, 42, 42, 42, 42, 42, 43, 43, 43, 47, + 44, 46, 50, 49, 49, 49, 52, 52, 53, 53, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 68, 63, 73, 75, 78, 79, + 80, 28, 28, 83, 55, 55, 84, 84, 85, 85, + 86, 88, 82, 82, 87, 87, 93, 56, 97, 56, + 56, 92, 100, 92, 94, 94, 101, 101, 102, 103, + 102, 98, 98, 104, 104, 105, 106, 96, 96, 99, + 99, 99, 109, 57, 112, 113, 107, 114, 115, 116, + 107, 107, 107, 108, 108, 118, 118, 121, 119, 111, + 111, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 123, 123, 126, 126, 126, 126, 129, 126, 127, + 127, 130, 130, 131, 131, 131, 124, 124, 124, 132, + 132, 132, 125, 134, 136, 137, 139, 58, 140, 58, + 138, 142, 138, 141, 141, 144, 146, 60, 145, 145, + 135, 135, 135, 135, 135, 150, 147, 151, 148, 149, + 149, 149, 152, 153, 154, 156, 29, 29, 155, 155, + 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, + 158, 160, 61, 161, 161, 164, 159, 159, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 166, 165, 167, 165, 165, 165, 62, 170, 172, + 168, 169, 169, 171, 171, 176, 174, 177, 174, 174, + 174, 178, 64, 180, 59, 183, 184, 59, 59, 179, + 186, 179, 181, 181, 187, 187, 188, 189, 188, 190, + 185, 182, 182, 182, 182, 182, 194, 191, 195, 192, + 193, 193, 65, 66, 197, 199, 200, 30, 196, 196, + 196, 198, 198, 198, 201, 201, 202, 203, 202, 202, + 202, 204, 205, 206, 31, 207, 207, 16, 16, 16, + 208, 208, 208, 212, 212, 210, 210, 210, 213, 213, + 215, 72, 133, 110, 110, 143, 143, 216, 216, 216, + 214, 214, 217, 217, 218, 218, 220, 220, 91, 81, + 81, 95, 95, 128, 128, 162, 162, 222, 222, 222, + 221, 225, 225, 225, 227, 227, 228, 226, 226, 226, + 226, 226, 226, 226, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 231, 231, 231, 232, 232, 232, 252, + 252, 253, 253, 254, 254, 234, 234, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 236, + 236, 236, 256, 256, 257, 257, 258, 258, 260, 260, + 260, 261, 261, 261, 261, 261, 261, 261, 262, 262, + 175, 175, 255, 255, 255, 255, 255, 267, 267, 266, + 266, 268, 268, 268, 268, 268, 268, 270, 270, 270, + 269, 237, 237, 237, 237, 265, 265, 272, 272, 273, + 273, 238, 239, 239, 240, 241, 242, 242, 233, 233, + 233, 233, 233, 278, 274, 243, 243, 279, 279, 280, + 280, 281, 281, 281, 281, 282, 282, 282, 282, 275, + 275, 223, 223, 277, 277, 283, 283, 276, 276, 90, + 90, 284, 284, 244, 285, 285, 211, 209, 245, 245, + 246, 246, 247, 247, 248, 287, 249, 288, 249, 286, + 286, 290, 289, 235, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 293, 293, 293, 293, + 293, 293, 293, 294, 294, 294, 294, 294, 294, 294, + 294, 294, 294, 294, 294, 295, 297, 297, 297, 297, + 297, 297, 297, 297, 297, 298, 299, 301, 301, 302, + 303, 303, 300, 300, 304, 304, 305, 305, 306, 306, + 306, 306, 306, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 308, 308, 308, 308, 308, 309, 309, 309, + 310, 310, 310, 311, 311, 311, 312, 312, 312, 313, + 313, 313, 314, 314, 315, 315, 315, 315, 315, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 317, 317, 318, 318, 318, 318, 319, 319, 321, 320, + 320, 320, 51, 51, 323, 322, 324, 322, 325, 322, + 326, 327, 322, 328, 329, 322, 45, 45, 263, 263, + 263, 263, 250, 250, 250, 89, 331, 74, 74, 332, + 333, 333, 333, 333, 335, 333, 336, 337, 338, 339, + 27, 71, 71, 70, 70, 117, 117, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 76, 76, 334, 334, 77, 77, 341, 341, + 342, 342, 343, 343, 344, 344, 344, 344, 219, 219, + 345, 345, 346, 120, 69, 69, 347, 173, 67, 67, + 348, 348, 349, 349, 349, 349, 353, 353, 354, 354, + 354, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 355, 355, 355, 355, 355, 355, + 355, 355, 355, 355, 355, 355, 355, 369, 369, 369, + 369, 356, 370, 352, 271, 271, 371, 371, 371, 371, + 224, 224, 372, 48, 48, 374, 350, 377, 350, 373, + 373, 373, 375, 375, 381, 381, 380, 380, 382, 382, + 376, 376, 378, 378, 383, 383, 384, 379, 379, 379, + 357, 357, 357, 368, 368, 385, 386, 386, 358, 358, + 387, 387, 387, 390, 388, 388, 389, 389, 391, 391, + 391, 392, 393, 393, 394, 394, 394, 359, 359, 359, + 359, 395, 395, 396, 396, 396, 400, 397, 403, 399, + 399, 406, 402, 402, 405, 405, 407, 407, 401, 401, + 410, 409, 409, 404, 404, 408, 408, 412, 411, 411, + 398, 398, 413, 398, 360, 360, 360, 360, 360, 360, + 414, 415, 415, 416, 416, 416, 417, 417, 417, 418, + 418, 418, 419, 419, 419, 420, 420, 361, 361, 361, + 361, 421, 421, 296, 296, 422, 424, 422, 422, 422, + 423, 423, 362, 363, 425, 366, 364, 364, 427, 428, + 367, 430, 431, 365, 365, 365, 429, 429, 426, 426, + 330, 330, 330, 330, 432, 432, 434, 434, 436, 435, + 437, 435, 433, 433, 433, 433, 433, 441, 439, 442, + 444, 439, 443, 443, 438, 438, 445, 445, 445, 445, + 445, 450, 446, 451, 447, 452, 453, 454, 448, 456, + 457, 458, 448, 455, 455, 460, 449, 459, 463, 459, + 462, 465, 462, 461, 461, 461, 464, 464, 464, 440, + 466, 440, 3, 3, 467, 3, 3, 468, 468, 264, + 264, 259, 259, 5, 469, 469, 469, 469, 469, 473, + 469, 469, 469, 469, 470, 470, 471, 474, 471, 472, + 472, 475, 475, 476, }; static readonly short [] yyLen = { 2, 2, 0, 3, 1, 2, 4, 3, 1, 0, 1, - 1, 2, 4, 2, 1, 2, 1, 4, 6, 2, - 0, 1, 0, 0, 11, 3, 0, 1, 1, 1, - 3, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 1, 2, 1, 1, 2, 1, 1, 1, - 1, 1, 0, 1, 1, 2, 0, 3, 0, 6, - 3, 2, 1, 1, 1, 1, 1, 3, 0, 3, - 1, 0, 3, 0, 1, 1, 3, 3, 1, 1, - 1, 0, 4, 4, 1, 0, 1, 1, 0, 1, + 1, 2, 4, 2, 1, 2, 1, 3, 5, 2, + 0, 0, 11, 3, 0, 1, 1, 1, 3, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, + 0, 1, 1, 2, 0, 3, 0, 6, 3, 2, + 1, 1, 1, 1, 1, 3, 0, 3, 1, 0, + 3, 0, 1, 1, 3, 3, 1, 1, 1, 0, + 4, 4, 1, 0, 1, 1, 0, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 0, 0, 0, 0, + 0, 17, 5, 0, 9, 5, 0, 1, 1, 2, + 3, 0, 3, 1, 1, 1, 0, 8, 0, 9, + 6, 0, 0, 3, 0, 1, 1, 2, 2, 0, + 5, 0, 1, 1, 2, 3, 0, 4, 2, 1, + 1, 1, 0, 3, 0, 0, 10, 0, 0, 0, + 12, 8, 5, 1, 1, 1, 1, 0, 4, 0, + 1, 1, 3, 3, 3, 5, 3, 5, 1, 1, + 1, 1, 3, 4, 6, 2, 4, 0, 7, 0, + 1, 1, 2, 1, 1, 1, 4, 6, 4, 1, + 2, 2, 1, 0, 0, 0, 0, 12, 0, 6, + 0, 0, 4, 1, 1, 0, 0, 10, 3, 1, + 1, 2, 1, 2, 1, 0, 5, 0, 5, 1, + 1, 1, 0, 0, 0, 0, 15, 5, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 0, 0, - 0, 0, 0, 17, 5, 0, 9, 5, 0, 1, - 1, 2, 3, 0, 3, 1, 1, 1, 0, 8, - 0, 9, 6, 0, 0, 3, 0, 1, 1, 2, - 2, 0, 5, 0, 1, 1, 2, 3, 0, 4, - 2, 1, 1, 1, 0, 3, 0, 0, 10, 0, - 0, 0, 12, 8, 5, 1, 1, 1, 1, 0, - 4, 0, 1, 1, 3, 3, 3, 5, 3, 5, - 1, 1, 1, 1, 3, 4, 6, 2, 4, 0, - 7, 0, 1, 1, 2, 1, 1, 1, 4, 6, - 4, 1, 2, 2, 1, 0, 0, 0, 0, 12, - 0, 6, 0, 0, 4, 1, 1, 0, 0, 10, - 3, 1, 1, 2, 1, 2, 1, 0, 5, 0, - 5, 1, 1, 1, 0, 0, 0, 0, 15, 5, - 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 5, 1, 1, 0, 7, 1, + 1, 0, 5, 1, 1, 0, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 7, 0, 7, 2, 2, 2, - 0, 0, 9, 1, 1, 0, 1, 0, 6, 0, - 6, 2, 1, 0, 8, 0, 9, 0, 0, 10, - 5, 0, 0, 3, 0, 1, 1, 2, 2, 0, - 5, 0, 2, 2, 2, 1, 1, 1, 0, 5, - 0, 5, 1, 1, 2, 4, 0, 0, 0, 12, - 0, 2, 2, 0, 1, 2, 1, 3, 2, 0, - 5, 3, 1, 0, 0, 0, 13, 0, 1, 1, - 3, 3, 1, 4, 4, 2, 2, 0, 3, 2, - 1, 3, 0, 3, 1, 1, 3, 1, 2, 3, - 4, 4, 0, 3, 1, 3, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 2, 1, 1, 2, 2, 2, 1, 3, 1, 1, + 1, 0, 7, 0, 7, 2, 2, 2, 0, 0, + 9, 1, 1, 0, 1, 0, 6, 0, 6, 2, + 1, 0, 8, 0, 9, 0, 0, 10, 5, 0, + 0, 3, 0, 1, 1, 2, 2, 0, 5, 0, + 2, 2, 2, 1, 1, 1, 0, 5, 0, 5, + 1, 1, 2, 4, 0, 0, 0, 12, 0, 2, + 2, 0, 1, 2, 1, 3, 2, 0, 5, 3, + 1, 0, 0, 0, 13, 0, 1, 1, 3, 3, + 1, 4, 4, 2, 2, 0, 3, 2, 1, 3, + 0, 3, 1, 1, 3, 1, 2, 3, 4, 4, + 0, 3, 1, 3, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, + 1, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 3, 1, 1, 3, 1, 3, - 0, 4, 0, 6, 1, 1, 1, 1, 3, 3, - 4, 4, 5, 4, 4, 4, 3, 3, 3, 4, - 3, 4, 4, 4, 3, 0, 1, 3, 4, 0, - 1, 1, 3, 2, 3, 3, 1, 2, 3, 5, - 2, 1, 1, 0, 1, 1, 3, 3, 3, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 4, 3, - 3, 2, 4, 1, 4, 5, 4, 3, 1, 3, - 1, 3, 1, 1, 1, 4, 3, 2, 2, 6, - 3, 7, 4, 3, 7, 3, 0, 2, 4, 3, - 1, 2, 0, 1, 1, 3, 1, 2, 3, 1, - 1, 1, 0, 1, 1, 2, 2, 3, 1, 2, - 0, 1, 2, 4, 1, 3, 4, 1, 1, 1, - 2, 4, 4, 4, 2, 4, 2, 4, 0, 4, - 0, 5, 0, 1, 0, 4, 4, 1, 2, 2, - 4, 2, 2, 2, 4, 2, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, - 3, 3, 4, 3, 3, 3, 3, 3, 1, 1, - 2, 2, 1, 1, 4, 1, 1, 1, 4, 4, - 1, 3, 3, 1, 2, 0, 1, 1, 3, 1, - 3, 1, 3, 3, 3, 3, 1, 3, 3, 3, - 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 3, 4, 4, 5, + 4, 4, 4, 3, 3, 3, 4, 3, 4, 4, + 4, 3, 0, 1, 3, 4, 0, 1, 1, 3, + 2, 3, 3, 1, 2, 3, 5, 2, 1, 1, + 0, 1, 1, 3, 3, 3, 2, 1, 1, 1, + 1, 2, 2, 2, 2, 4, 3, 3, 2, 4, + 1, 4, 5, 4, 3, 1, 3, 1, 3, 1, + 1, 1, 4, 3, 2, 2, 6, 3, 7, 4, + 3, 7, 3, 0, 2, 4, 3, 1, 2, 0, + 1, 1, 3, 1, 2, 3, 1, 1, 1, 0, + 1, 1, 2, 2, 3, 1, 2, 0, 1, 2, + 4, 1, 3, 4, 1, 1, 1, 2, 4, 4, + 4, 2, 4, 2, 4, 0, 4, 0, 5, 0, + 1, 0, 4, 4, 1, 2, 2, 4, 2, 2, + 2, 4, 2, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, + 3, 3, 3, 1, 3, 3, 3, 3, 3, 4, + 3, 3, 3, 3, 3, 1, 1, 2, 2, 1, + 1, 4, 1, 1, 1, 4, 4, 1, 3, 3, + 1, 2, 0, 1, 1, 3, 1, 3, 1, 3, + 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, - 3, 3, 1, 3, 3, 1, 3, 1, 5, 4, - 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 1, 3, 3, 2, 1, 1, 0, - 1, 0, 2, 1, 1, 1, 1, 0, 4, 0, - 4, 0, 5, 0, 0, 7, 0, 0, 8, 1, - 1, 1, 1, 1, 1, 6, 4, 4, 1, 1, - 0, 1, 3, 0, 1, 1, 2, 0, 6, 0, - 0, 0, 0, 15, 0, 1, 0, 1, 1, 2, + 3, 3, 1, 3, 1, 5, 4, 5, 5, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 1, 3, 3, 2, 1, 1, 0, 1, 0, 2, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 5, + 0, 0, 7, 0, 0, 8, 1, 1, 1, 1, + 1, 1, 6, 4, 4, 1, 1, 0, 1, 3, + 0, 1, 1, 2, 0, 6, 0, 0, 0, 0, + 15, 0, 1, 0, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 2, 3, 0, 1, 1, 2, + 4, 3, 1, 3, 1, 3, 1, 1, 0, 1, + 1, 1, 0, 4, 1, 1, 0, 4, 0, 1, + 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 2, 3, 0, - 1, 1, 2, 4, 3, 1, 3, 1, 3, 1, - 1, 0, 1, 1, 1, 0, 4, 1, 1, 0, - 4, 1, 0, 4, 0, 1, 1, 2, 1, 1, - 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 1, 2, 2, 2, 1, 1, 1, 2, 1, - 1, 1, 0, 6, 0, 7, 1, 1, 0, 2, - 1, 0, 1, 0, 1, 1, 2, 2, 4, 0, - 2, 0, 1, 1, 2, 4, 1, 5, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, - 7, 4, 0, 8, 4, 0, 1, 1, 2, 1, - 2, 1, 2, 3, 3, 1, 1, 1, 1, 1, - 5, 4, 7, 3, 6, 0, 4, 0, 4, 2, - 0, 4, 2, 3, 1, 0, 1, 0, 5, 1, - 0, 1, 0, 1, 1, 1, 3, 4, 5, 0, - 9, 5, 4, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 3, 4, 3, 3, 3, 2, 3, 3, - 2, 4, 4, 3, 0, 1, 3, 4, 5, 3, - 1, 2, 0, 1, 3, 0, 7, 3, 2, 1, - 0, 0, 5, 2, 2, 0, 3, 5, 4, 0, - 0, 10, 0, 0, 9, 5, 4, 2, 1, 0, - 2, 2, 2, 2, 2, 4, 5, 4, 5, 0, - 5, 0, 6, 3, 2, 2, 2, 1, 0, 3, - 0, 0, 5, 2, 1, 1, 2, 1, 1, 1, - 1, 1, 0, 5, 0, 3, 0, 0, 0, 12, - 0, 0, 0, 13, 0, 2, 0, 3, 1, 0, - 4, 1, 0, 4, 1, 2, 2, 1, 2, 2, - 0, 0, 4, 2, 3, 0, 4, 2, 2, 3, - 0, 1, 1, 1, 2, 2, 2, 2, 4, 3, - 0, 7, 4, 4, 3, 1, 3, 0, 0, 4, - 0, 1, 1, 3, 2, + 1, 1, 0, 4, 1, 2, 2, 2, 1, 1, + 1, 2, 1, 1, 1, 0, 6, 0, 7, 0, + 2, 1, 0, 1, 0, 1, 1, 2, 2, 4, + 0, 2, 0, 1, 1, 2, 4, 1, 5, 2, + 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, + 5, 7, 4, 0, 8, 4, 0, 1, 1, 2, + 1, 2, 1, 2, 3, 3, 1, 1, 1, 1, + 1, 5, 4, 7, 3, 6, 0, 4, 0, 5, + 1, 0, 4, 2, 2, 2, 1, 1, 0, 1, + 0, 5, 1, 0, 1, 0, 1, 1, 1, 3, + 4, 5, 0, 9, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 3, 4, 3, 3, 3, 2, 3, + 3, 2, 4, 4, 3, 0, 1, 3, 4, 5, + 3, 1, 2, 0, 1, 3, 0, 8, 3, 6, + 0, 4, 2, 2, 0, 3, 5, 4, 0, 0, + 10, 0, 0, 9, 5, 4, 2, 1, 0, 2, + 2, 2, 2, 2, 4, 5, 4, 5, 0, 5, + 0, 6, 3, 2, 2, 2, 1, 0, 3, 0, + 0, 5, 2, 1, 1, 2, 1, 1, 1, 1, + 1, 0, 5, 0, 3, 0, 0, 0, 12, 0, + 0, 0, 13, 0, 2, 0, 3, 1, 0, 4, + 1, 0, 4, 1, 2, 2, 1, 2, 2, 0, + 0, 4, 2, 3, 0, 4, 2, 2, 3, 0, + 1, 1, 1, 2, 2, 2, 2, 4, 3, 0, + 7, 4, 4, 3, 1, 3, 0, 0, 4, 0, + 1, 1, 3, 2, }; static readonly short [] yyDefRed = { 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 4, - 0, 0, 11, 14, 0, 1084, 0, 0, 1088, 0, - 0, 15, 17, 412, 418, 425, 413, 415, 0, 414, - 0, 421, 423, 410, 0, 417, 419, 411, 422, 424, - 420, 0, 373, 1106, 0, 416, 1095, 0, 10, 1, - 0, 0, 0, 12, 0, 907, 0, 0, 0, 0, - 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, - 0, 0, 452, 0, 0, 0, 535, 0, 453, 0, - 0, 0, 1006, 0, 0, 0, 745, 0, 0, 0, - 0, 0, 0, 0, 0, 456, 806, 0, 859, 0, - 0, 0, 0, 0, 0, 0, 0, 451, 0, 734, - 0, 906, 0, 842, 0, 447, 867, 866, 0, 0, - 0, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 449, 450, 741, 0, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 742, 740, - 743, 744, 826, 828, 0, 824, 827, 843, 845, 846, - 847, 848, 849, 850, 851, 852, 853, 854, 844, 0, - 0, 908, 909, 927, 928, 929, 930, 964, 965, 966, - 967, 968, 969, 0, 0, 0, 20, 22, 0, 1092, - 16, 1085, 0, 0, 266, 283, 265, 262, 267, 268, - 261, 280, 279, 272, 273, 269, 271, 270, 274, 263, - 264, 275, 276, 282, 281, 277, 278, 0, 1109, 1098, - 0, 0, 1097, 0, 1096, 3, 57, 0, 0, 0, - 46, 43, 45, 48, 49, 50, 51, 52, 55, 13, - 0, 0, 0, 970, 585, 465, 466, 1004, 0, 0, - 0, 0, 0, 0, 0, 0, 972, 971, 0, 595, - 589, 594, 858, 905, 829, 856, 855, 857, 830, 831, - 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, - 0, 0, 0, 936, 0, 0, 0, 872, 871, 0, - 0, 0, 0, 0, 0, 0, 0, 978, 0, 0, - 0, 0, 426, 0, 0, 0, 981, 0, 0, 0, - 0, 587, 1005, 0, 0, 0, 870, 406, 0, 0, - 0, 0, 0, 0, 392, 360, 0, 363, 393, 0, - 402, 0, 0, 0, 0, 0, 0, 0, 737, 0, - 606, 0, 0, 730, 0, 0, 602, 0, 0, 457, - 0, 0, 604, 600, 614, 608, 615, 609, 603, 599, - 619, 613, 618, 612, 616, 610, 617, 611, 728, 581, - 0, 580, 448, 366, 367, 0, 0, 0, 0, 0, - 860, 0, 359, 0, 404, 405, 0, 0, 538, 539, - 0, 0, 0, 864, 865, 873, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1087, - 825, 863, 0, 903, 904, 1038, 1055, 0, 0, 1039, - 1041, 0, 1067, 1024, 1022, 1048, 0, 0, 1046, 1049, - 1050, 1051, 1052, 1025, 1023, 0, 0, 0, 0, 0, - 0, 1105, 0, 0, 374, 0, 0, 1107, 0, 0, - 44, 776, 782, 774, 0, 771, 781, 775, 773, 772, - 779, 777, 778, 784, 780, 783, 785, 0, 0, 769, - 47, 56, 537, 0, 533, 534, 0, 0, 531, 0, - 875, 0, 0, 0, 934, 0, 902, 900, 901, 0, - 0, 0, 749, 0, 975, 973, 750, 0, 0, 562, - 0, 0, 550, 557, 0, 0, 0, 551, 0, 0, - 567, 569, 0, 546, 0, 0, 0, 0, 0, 541, - 0, 544, 548, 395, 394, 977, 976, 0, 0, 980, - 979, 990, 0, 0, 0, 991, 579, 0, 389, 578, - 0, 0, 1007, 0, 0, 869, 0, 0, 400, 401, - 0, 0, 0, 399, 0, 0, 0, 620, 0, 0, - 591, 0, 732, 638, 637, 0, 0, 0, 461, 0, - 455, 823, 0, 0, 0, 817, 819, 820, 821, 469, - 470, 0, 370, 371, 0, 197, 196, 198, 0, 719, - 0, 0, 0, 396, 0, 714, 0, 0, 984, 0, - 0, 0, 477, 478, 0, 481, 0, 0, 0, 0, - 479, 0, 0, 528, 0, 485, 0, 0, 0, 0, - 511, 514, 0, 0, 506, 513, 512, 0, 703, 704, - 705, 706, 707, 708, 709, 710, 711, 713, 712, 624, - 621, 626, 623, 625, 622, 635, 632, 636, 0, 0, - 646, 0, 0, 0, 0, 0, 639, 0, 634, 647, - 648, 630, 0, 631, 0, 665, 0, 0, 666, 0, - 672, 0, 673, 0, 674, 0, 675, 0, 679, 0, - 680, 0, 683, 0, 686, 0, 689, 0, 692, 0, - 695, 0, 697, 0, 566, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1037, 1036, 0, 1047, 0, 1035, - 0, 18, 1103, 1104, 0, 0, 194, 0, 0, 1113, - 388, 0, 0, 0, 385, 1099, 1101, 63, 65, 66, - 0, 0, 58, 0, 0, 67, 69, 32, 30, 0, - 0, 0, 766, 0, 770, 475, 0, 536, 0, 584, - 0, 597, 183, 205, 0, 0, 0, 173, 0, 0, - 0, 184, 590, 0, 1010, 0, 956, 937, 0, 947, - 0, 958, 0, 974, 912, 0, 1009, 0, 0, 549, - 0, 558, 568, 570, 0, 0, 0, 0, 497, 0, - 0, 492, 0, 0, 727, 726, 529, 0, 572, 543, - 0, 0, 154, 573, 152, 153, 575, 0, 583, 582, - 915, 0, 1002, 0, 0, 988, 0, 992, 577, 586, - 1017, 0, 1013, 932, 0, 0, 1028, 0, 361, 362, - 1026, 0, 0, 747, 748, 0, 0, 0, 725, 724, - 731, 0, 476, 0, 0, 458, 822, 808, 809, 807, - 818, 729, 0, 369, 717, 0, 0, 0, 605, 601, - 983, 982, 861, 482, 474, 0, 0, 480, 471, 472, - 588, 527, 525, 0, 524, 517, 518, 0, 515, 516, - 0, 510, 467, 468, 483, 484, 0, 881, 0, 0, - 641, 642, 0, 0, 0, 994, 633, 700, 0, 1056, - 1030, 0, 1057, 0, 1040, 1042, 1053, 0, 1068, 0, - 1034, 1082, 0, 1115, 195, 1110, 0, 805, 804, 0, - 803, 0, 384, 0, 62, 59, 0, 0, 0, 0, - 0, 0, 391, 0, 760, 0, 0, 88, 87, 0, - 532, 0, 0, 0, 0, 0, 188, 596, 0, 0, - 0, 0, 0, 948, 940, 938, 0, 959, 0, 0, - 1008, 559, 556, 0, 501, 0, 0, 0, 1093, 1094, - 488, 494, 0, 498, 0, 0, 0, 0, 0, 0, - 913, 0, 998, 0, 995, 989, 1016, 0, 931, 364, - 365, 1029, 1027, 0, 592, 0, 733, 723, 463, 462, - 372, 716, 715, 735, 473, 526, 0, 0, 520, 0, - 509, 508, 507, 0, 897, 880, 0, 0, 0, 886, - 0, 0, 0, 651, 0, 0, 654, 0, 660, 0, - 658, 701, 702, 699, 0, 1032, 0, 1061, 0, 0, - 1076, 1077, 1070, 0, 19, 1114, 387, 386, 0, 0, - 68, 61, 0, 70, 31, 24, 0, 0, 337, 0, - 240, 0, 115, 0, 84, 85, 891, 127, 128, 0, - 0, 0, 894, 203, 204, 0, 0, 0, 0, 176, - 185, 177, 179, 935, 0, 0, 0, 0, 0, 957, - 0, 0, 502, 503, 496, 499, 495, 0, 489, 493, - 0, 564, 0, 530, 540, 487, 576, 574, 0, 0, - 0, 1019, 0, 0, 746, 738, 0, 0, 521, 0, - 519, 0, 0, 878, 877, 874, 887, 645, 0, 650, - 0, 0, 655, 649, 0, 1031, 0, 0, 0, 1045, - 0, 1043, 1054, 0, 1083, 1102, 0, 81, 0, 0, - 75, 76, 79, 80, 0, 354, 343, 342, 0, 761, - 236, 110, 0, 876, 895, 189, 0, 201, 0, 0, - 0, 933, 1021, 0, 0, 0, 0, 939, 0, 960, - 911, 0, 545, 542, 920, 0, 926, 0, 0, 918, - 0, 922, 0, 996, 1018, 1014, 0, 464, 736, 523, - 0, 0, 653, 652, 661, 659, 1033, 1058, 0, 1044, - 0, 0, 1072, 0, 82, 73, 0, 0, 0, 338, - 0, 0, 0, 0, 0, 190, 0, 180, 178, 1011, - 949, 943, 941, 0, 500, 0, 914, 919, 0, 923, - 1003, 0, 0, 739, 0, 889, 0, 1062, 1079, 1080, - 1073, 60, 0, 77, 78, 0, 0, 0, 0, 0, - 0, 0, 755, 0, 787, 0, 752, 896, 187, 0, - 200, 0, 0, 961, 925, 924, 1000, 0, 997, 1015, - 898, 0, 0, 0, 83, 0, 0, 355, 0, 0, - 353, 339, 0, 347, 0, 409, 0, 407, 0, 0, - 762, 0, 792, 237, 0, 191, 1012, 945, 942, 0, - 0, 954, 810, 812, 999, 1059, 0, 1074, 0, 0, - 0, 335, 0, 0, 753, 789, 0, 758, 0, 0, - 793, 0, 111, 0, 0, 0, 1063, 29, 28, 25, - 356, 352, 0, 0, 348, 408, 0, 795, 0, 0, - 0, 0, 944, 0, 0, 0, 0, 0, 34, 340, - 0, 800, 0, 801, 798, 0, 796, 106, 107, 0, - 103, 0, 0, 91, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 104, 105, 155, 0, 0, 253, - 245, 246, 247, 248, 249, 250, 251, 252, 0, 0, - 243, 112, 811, 0, 1060, 0, 357, 351, 759, 0, - 0, 0, 0, 763, 92, 0, 295, 290, 294, 0, - 238, 244, 0, 1066, 1064, 799, 797, 0, 0, 0, - 0, 0, 0, 0, 0, 304, 0, 0, 254, 0, - 0, 260, 0, 170, 169, 156, 166, 167, 168, 0, - 0, 0, 108, 0, 0, 289, 0, 0, 288, 0, - 160, 0, 0, 378, 336, 0, 376, 0, 0, 0, - 0, 0, 0, 0, 0, 764, 0, 239, 113, 118, - 116, 311, 0, 375, 0, 0, 0, 0, 131, 0, - 0, 0, 0, 0, 0, 165, 157, 0, 0, 0, - 218, 0, 379, 0, 255, 0, 0, 0, 0, 308, - 0, 286, 133, 0, 284, 0, 0, 0, 135, 0, - 380, 0, 0, 207, 212, 0, 0, 0, 377, 258, - 171, 114, 126, 124, 0, 0, 313, 0, 0, 0, - 0, 0, 161, 0, 292, 0, 0, 0, 0, 139, - 0, 0, 0, 0, 381, 382, 0, 0, 0, 0, - 0, 121, 328, 0, 309, 0, 0, 322, 0, 0, - 0, 317, 0, 151, 0, 0, 0, 0, 146, 0, - 0, 305, 0, 136, 0, 130, 140, 158, 164, 227, - 0, 208, 0, 0, 219, 0, 125, 0, 117, 122, - 0, 0, 0, 324, 0, 325, 314, 0, 0, 307, - 318, 287, 0, 0, 132, 147, 285, 0, 303, 0, - 293, 297, 142, 0, 0, 0, 224, 226, 0, 259, - 123, 329, 331, 310, 0, 0, 323, 320, 150, 148, - 162, 302, 0, 0, 0, 159, 228, 230, 209, 0, - 222, 220, 0, 0, 322, 0, 298, 300, 143, 0, - 0, 0, 0, 333, 334, 330, 332, 321, 163, 0, - 0, 234, 233, 232, 229, 231, 214, 210, 221, 0, - 0, 0, 299, 301, 216, 217, 0, 215, + 0, 0, 11, 14, 0, 1063, 0, 0, 1067, 0, + 0, 15, 17, 410, 416, 423, 411, 413, 0, 412, + 0, 419, 421, 408, 0, 415, 417, 409, 420, 422, + 418, 0, 371, 1085, 0, 414, 1074, 0, 10, 1, + 0, 0, 0, 12, 0, 888, 0, 0, 0, 0, + 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, + 0, 0, 449, 0, 0, 0, 522, 0, 450, 0, + 0, 0, 985, 0, 0, 0, 732, 0, 0, 0, + 0, 0, 0, 0, 793, 0, 842, 0, 0, 0, + 0, 0, 0, 0, 0, 448, 0, 721, 0, 887, + 0, 825, 0, 444, 850, 849, 0, 0, 0, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 446, 447, + 728, 0, 594, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 729, 727, 730, 731, 809, + 811, 0, 807, 810, 826, 828, 829, 830, 831, 832, + 833, 834, 835, 836, 837, 827, 0, 0, 889, 890, + 908, 909, 910, 911, 945, 946, 947, 948, 949, 950, + 0, 0, 0, 20, 0, 0, 358, 0, 361, 1071, + 16, 1064, 0, 0, 264, 281, 263, 260, 265, 266, + 259, 278, 277, 270, 271, 267, 269, 268, 272, 261, + 262, 273, 274, 280, 279, 275, 276, 0, 1088, 1077, + 0, 0, 1076, 0, 1075, 3, 55, 0, 0, 0, + 44, 41, 43, 46, 47, 48, 49, 50, 53, 13, + 0, 0, 0, 951, 572, 452, 453, 983, 0, 0, + 0, 0, 0, 0, 0, 0, 953, 952, 0, 582, + 576, 581, 841, 886, 812, 839, 838, 840, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 0, 0, 0, 917, 0, 0, 0, 855, 854, 0, + 0, 0, 0, 0, 0, 0, 0, 959, 0, 0, + 0, 0, 424, 0, 0, 0, 962, 0, 0, 0, + 0, 574, 984, 0, 0, 0, 853, 404, 0, 0, + 0, 0, 0, 0, 390, 391, 0, 400, 0, 0, + 0, 0, 0, 0, 0, 724, 0, 593, 0, 0, + 717, 0, 0, 589, 0, 0, 591, 587, 601, 595, + 602, 596, 590, 586, 606, 600, 605, 599, 603, 597, + 604, 598, 715, 568, 0, 567, 445, 364, 365, 0, + 0, 0, 0, 0, 843, 0, 357, 0, 402, 403, + 0, 0, 525, 526, 0, 0, 0, 847, 848, 856, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1066, 808, 846, 0, 884, 885, 1017, + 1034, 0, 0, 1018, 1020, 0, 1046, 1003, 1001, 1027, + 0, 0, 1025, 1028, 1029, 1030, 1031, 1004, 1002, 0, + 0, 0, 0, 18, 0, 0, 0, 1084, 0, 0, + 372, 0, 0, 1086, 0, 0, 42, 763, 769, 761, + 0, 758, 768, 762, 760, 759, 766, 764, 765, 771, + 767, 770, 772, 0, 0, 756, 45, 54, 524, 0, + 520, 521, 0, 0, 518, 0, 858, 0, 0, 0, + 915, 0, 883, 881, 882, 0, 0, 0, 736, 0, + 956, 954, 737, 0, 0, 549, 0, 0, 537, 544, + 0, 0, 0, 538, 0, 0, 554, 556, 0, 533, + 0, 0, 0, 0, 0, 528, 0, 531, 535, 393, + 392, 958, 957, 0, 0, 961, 960, 971, 0, 0, + 0, 972, 566, 0, 387, 565, 0, 0, 986, 0, + 0, 852, 0, 398, 399, 0, 0, 397, 0, 0, + 0, 607, 0, 0, 578, 0, 719, 625, 624, 0, + 0, 806, 0, 0, 801, 803, 804, 805, 456, 457, + 0, 368, 369, 0, 195, 194, 196, 0, 706, 0, + 0, 0, 394, 0, 701, 0, 0, 965, 0, 0, + 0, 464, 465, 0, 468, 0, 0, 0, 0, 466, + 0, 0, 515, 0, 472, 0, 0, 0, 0, 498, + 501, 0, 0, 493, 500, 499, 0, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 700, 699, 611, 608, + 613, 610, 612, 609, 622, 619, 623, 0, 0, 633, + 0, 0, 0, 0, 0, 626, 0, 621, 634, 635, + 617, 0, 618, 0, 652, 0, 0, 653, 0, 659, + 0, 660, 0, 661, 0, 662, 0, 666, 0, 667, + 0, 670, 0, 673, 0, 676, 0, 679, 0, 682, + 0, 684, 0, 553, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1016, 1015, 0, 1026, 0, 1014, 0, + 0, 359, 360, 1082, 1083, 0, 0, 192, 0, 0, + 1092, 386, 0, 0, 0, 383, 1078, 1080, 61, 63, + 64, 0, 0, 56, 0, 0, 65, 67, 30, 28, + 0, 0, 0, 753, 0, 757, 462, 0, 523, 0, + 571, 0, 584, 181, 203, 0, 0, 0, 171, 0, + 0, 0, 182, 577, 0, 989, 921, 0, 939, 918, + 0, 930, 0, 941, 0, 955, 893, 0, 988, 0, + 0, 536, 0, 545, 555, 557, 0, 0, 0, 0, + 484, 0, 0, 479, 0, 0, 714, 713, 516, 0, + 559, 530, 0, 0, 152, 560, 150, 151, 562, 0, + 570, 569, 896, 0, 0, 0, 0, 969, 0, 973, + 564, 573, 996, 0, 992, 913, 0, 1007, 0, 1005, + 0, 0, 734, 735, 0, 0, 0, 712, 711, 718, + 0, 463, 795, 796, 794, 802, 716, 0, 367, 704, + 0, 0, 0, 592, 588, 964, 963, 844, 469, 461, + 0, 0, 467, 458, 459, 575, 514, 512, 0, 511, + 504, 505, 0, 502, 503, 0, 497, 454, 455, 470, + 471, 0, 862, 0, 0, 628, 629, 0, 0, 0, + 975, 620, 687, 0, 1035, 1009, 0, 1036, 0, 1019, + 1021, 1032, 0, 1047, 0, 1013, 1061, 19, 362, 363, + 1094, 193, 1089, 0, 792, 791, 0, 790, 0, 382, + 0, 60, 57, 0, 0, 0, 0, 0, 0, 389, + 0, 747, 0, 0, 86, 85, 0, 519, 0, 0, + 0, 0, 0, 186, 583, 0, 0, 0, 0, 0, + 931, 919, 0, 942, 0, 0, 987, 546, 543, 0, + 488, 0, 0, 0, 1072, 1073, 475, 481, 0, 485, + 0, 0, 0, 0, 0, 0, 894, 0, 979, 0, + 976, 970, 995, 0, 912, 1008, 1006, 0, 579, 0, + 720, 710, 370, 703, 702, 722, 460, 513, 0, 0, + 507, 0, 496, 495, 494, 0, 878, 861, 0, 0, + 0, 867, 0, 0, 0, 638, 0, 0, 641, 0, + 647, 0, 645, 688, 689, 686, 0, 1011, 0, 1040, + 0, 0, 1055, 1056, 1049, 0, 1093, 385, 384, 0, + 0, 66, 59, 0, 68, 29, 22, 0, 0, 335, + 0, 238, 0, 113, 0, 82, 83, 872, 125, 126, + 0, 0, 0, 875, 201, 202, 0, 0, 0, 0, + 174, 183, 175, 177, 916, 0, 0, 0, 0, 0, + 940, 0, 0, 489, 490, 483, 486, 482, 0, 476, + 480, 0, 551, 0, 517, 527, 474, 563, 561, 0, + 0, 0, 998, 0, 0, 733, 725, 0, 508, 0, + 506, 0, 0, 857, 868, 632, 0, 637, 0, 0, + 642, 636, 0, 1010, 0, 0, 0, 1024, 0, 1022, + 1033, 0, 1062, 1081, 0, 79, 0, 0, 73, 74, + 77, 78, 0, 352, 341, 340, 0, 748, 234, 108, + 0, 859, 876, 187, 0, 199, 0, 0, 0, 914, + 1000, 0, 0, 0, 935, 0, 0, 943, 892, 0, + 532, 529, 901, 0, 907, 0, 0, 899, 0, 903, + 982, 0, 997, 993, 0, 723, 510, 0, 0, 640, + 639, 648, 646, 1012, 1037, 0, 1023, 0, 0, 1051, + 0, 80, 71, 0, 0, 0, 336, 0, 0, 0, + 0, 0, 188, 0, 178, 176, 990, 932, 920, 928, + 927, 922, 924, 0, 487, 0, 895, 900, 0, 904, + 980, 0, 0, 726, 0, 870, 0, 1041, 1058, 1059, + 1052, 58, 0, 75, 76, 0, 0, 0, 0, 0, + 0, 0, 742, 0, 774, 0, 739, 877, 185, 0, + 198, 0, 0, 944, 906, 905, 0, 994, 879, 0, + 0, 0, 81, 0, 0, 353, 0, 0, 351, 337, + 0, 345, 0, 407, 0, 405, 0, 0, 749, 0, + 779, 235, 0, 189, 991, 923, 0, 0, 937, 797, + 978, 1038, 0, 1053, 0, 0, 0, 333, 0, 0, + 740, 776, 0, 745, 0, 0, 780, 0, 109, 926, + 925, 0, 0, 1042, 27, 26, 23, 354, 350, 0, + 0, 346, 406, 0, 782, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 338, 0, 787, 0, 788, + 785, 0, 783, 104, 105, 0, 101, 0, 0, 89, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 102, 103, 153, 0, 0, 251, 243, 244, 245, 246, + 247, 248, 249, 250, 0, 0, 241, 110, 798, 0, + 1039, 0, 355, 349, 746, 0, 0, 0, 0, 750, + 90, 0, 293, 288, 292, 0, 236, 242, 0, 1045, + 1043, 786, 784, 0, 0, 0, 0, 0, 0, 0, + 0, 302, 0, 0, 252, 0, 0, 258, 0, 168, + 167, 154, 164, 165, 166, 0, 0, 0, 106, 0, + 0, 287, 0, 0, 286, 0, 158, 0, 0, 376, + 334, 0, 374, 0, 0, 0, 0, 0, 0, 0, + 0, 751, 0, 237, 111, 116, 114, 309, 0, 373, + 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, + 0, 163, 155, 0, 0, 0, 216, 0, 377, 0, + 253, 0, 0, 0, 0, 306, 0, 284, 131, 0, + 282, 0, 0, 0, 133, 0, 378, 0, 0, 205, + 210, 0, 0, 0, 375, 256, 169, 112, 124, 122, + 0, 0, 311, 0, 0, 0, 0, 0, 159, 0, + 290, 0, 0, 0, 0, 137, 0, 0, 0, 0, + 379, 380, 0, 0, 0, 0, 0, 119, 326, 0, + 307, 0, 0, 320, 0, 0, 0, 315, 0, 149, + 0, 0, 0, 0, 144, 0, 0, 303, 0, 134, + 0, 128, 138, 156, 162, 225, 0, 206, 0, 0, + 217, 0, 123, 0, 115, 120, 0, 0, 0, 322, + 0, 323, 312, 0, 0, 305, 316, 285, 0, 0, + 130, 145, 283, 0, 301, 0, 291, 295, 140, 0, + 0, 0, 222, 224, 0, 257, 121, 327, 329, 308, + 0, 0, 321, 318, 148, 146, 160, 300, 0, 0, + 0, 157, 226, 228, 207, 0, 220, 218, 0, 0, + 320, 0, 296, 298, 141, 0, 0, 0, 0, 331, + 332, 328, 330, 319, 161, 0, 0, 232, 231, 230, + 227, 229, 212, 208, 219, 0, 0, 0, 297, 299, + 214, 215, 0, 213, }; protected static readonly short [] yyDgoto = { 7, - 8, 50, 9, 51, 10, 11, 52, 238, 785, 786, - 12, 13, 53, 22, 23, 199, 332, 241, 770, 961, - 1185, 1317, 1370, 1694, 958, 242, 243, 244, 245, 246, - 247, 248, 249, 763, 479, 764, 765, 1080, 766, 767, - 1084, 959, 1180, 1181, 1182, 274, 652, 1283, 113, 970, - 1095, 827, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, - 1410, 1411, 1412, 1413, 1414, 1415, 1416, 604, 1442, 880, - 498, 774, 1497, 1094, 1296, 1253, 1294, 1331, 1382, 1453, - 1538, 1326, 1565, 1539, 1590, 1591, 1592, 1097, 1588, 1098, - 836, 962, 1550, 1524, 1578, 553, 1571, 1544, 1607, 1045, - 1576, 1579, 1580, 1675, 1608, 1609, 1605, 1417, 1476, 1446, - 1498, 787, 1552, 1654, 1521, 1611, 1686, 499, 1477, 1478, - 275, 1507, 788, 789, 790, 791, 792, 745, 622, 1300, - 746, 747, 976, 1500, 1529, 1622, 1583, 1656, 1708, 1692, - 1530, 1717, 1712, 1501, 1556, 1682, 1659, 1623, 1624, 1705, - 1690, 1691, 1092, 1252, 1362, 1429, 1481, 1430, 1431, 1469, - 1504, 1470, 335, 228, 1587, 1472, 1572, 1569, 1418, 1448, - 1493, 1651, 1613, 1345, 1652, 653, 1700, 1701, 1492, 1568, - 1541, 1600, 1595, 1566, 1632, 1637, 1598, 1601, 1602, 1685, - 1638, 1596, 1597, 1696, 1683, 1684, 1089, 1189, 1322, 1288, - 1353, 1323, 1324, 1373, 1249, 1350, 1387, 395, 336, 115, - 384, 385, 116, 615, 475, 231, 1516, 754, 755, 950, - 963, 117, 340, 442, 328, 341, 312, 1327, 1328, 46, - 120, 313, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 359, 360, 875, 1147, 259, 915, - 832, 1135, 1124, 820, 1001, 821, 822, 1125, 144, 202, - 828, 655, 656, 657, 906, 907, 145, 508, 509, 305, - 1133, 830, 443, 307, 537, 538, 539, 540, 543, 838, - 571, 271, 514, 866, 272, 513, 146, 147, 148, 149, - 1056, 927, 1057, 690, 691, 1058, 1053, 1054, 1059, 1060, - 1061, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 625, 626, 627, 871, 872, 161, 612, 596, - 868, 386, 1148, 592, 1227, 162, 528, 1291, 1292, 1295, - 1377, 1090, 1251, 1360, 1473, 500, 1332, 1333, 1396, 1397, - 951, 361, 1365, 0, 0, 605, 606, 276, 277, 278, - 165, 166, 167, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 179, 291, 632, 180, 329, - 920, 658, 1048, 1156, 973, 781, 1101, 1046, 1049, 1205, - 1050, 1102, 1103, 292, 181, 182, 183, 1218, 1139, 1219, - 1220, 1221, 1222, 184, 185, 186, 187, 798, 521, 799, - 1208, 1119, 1209, 1339, 1303, 1340, 800, 1118, 801, 1342, - 1264, 188, 189, 190, 191, 192, 193, 314, 565, 566, - 845, 1309, 1272, 1012, 325, 1117, 983, 1302, 1144, 1018, - 1273, 194, 455, 195, 456, 1065, 1167, 457, 458, 740, - 731, 732, 1172, 1069, 459, 460, 461, 462, 463, 1070, - 726, 1067, 1277, 1366, 1435, 1169, 1313, 1386, 939, 734, - 940, 1242, 1174, 1243, 1314, 1074, 17, 19, 47, 48, - 230, 748, 954, 473, 749, 750, + 8, 50, 9, 51, 10, 11, 52, 238, 776, 777, + 12, 13, 53, 22, 23, 332, 241, 761, 948, 1163, + 1295, 1347, 1670, 945, 242, 243, 244, 245, 246, 247, + 248, 249, 754, 475, 755, 756, 1061, 757, 758, 1065, + 946, 1158, 1159, 1160, 274, 641, 1263, 111, 957, 1076, + 819, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, + 1387, 1388, 1389, 1390, 1391, 1392, 593, 1418, 865, 494, + 765, 1473, 1075, 1276, 1230, 1274, 1309, 1359, 1429, 1514, + 1304, 1541, 1515, 1566, 1567, 1568, 1078, 1564, 1079, 828, + 949, 1526, 1500, 1554, 549, 1547, 1520, 1583, 1027, 1552, + 1555, 1556, 1651, 1584, 1585, 1581, 1393, 1452, 1422, 1474, + 778, 1528, 1630, 1497, 1587, 1662, 495, 1453, 1454, 275, + 1483, 779, 780, 781, 782, 783, 736, 611, 1280, 737, + 738, 963, 1476, 1505, 1598, 1559, 1632, 1684, 1668, 1506, + 1693, 1688, 1477, 1532, 1658, 1635, 1599, 1600, 1681, 1666, + 1667, 1073, 1229, 1338, 1405, 1457, 1406, 1407, 1445, 1480, + 1446, 335, 228, 1563, 1448, 1548, 1545, 1394, 1424, 1469, + 1627, 1589, 1321, 1628, 642, 1676, 1677, 1468, 1544, 1517, + 1576, 1571, 1542, 1608, 1613, 1574, 1577, 1578, 1661, 1614, + 1572, 1573, 1672, 1659, 1660, 1070, 1167, 1300, 1268, 1329, + 1301, 1302, 1350, 1226, 1326, 1363, 389, 197, 113, 378, + 379, 114, 604, 471, 231, 1492, 745, 746, 937, 950, + 115, 337, 436, 328, 338, 312, 1305, 1306, 46, 118, + 313, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 259, 900, 824, 1116, 1105, 812, 987, 813, + 814, 1106, 141, 202, 820, 644, 645, 646, 891, 892, + 142, 504, 505, 305, 1114, 822, 437, 307, 533, 534, + 535, 536, 539, 830, 567, 271, 510, 855, 272, 509, + 143, 144, 145, 146, 1038, 912, 1039, 679, 680, 1040, + 1035, 1036, 1041, 1042, 1043, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 614, 615, 616, 860, + 861, 158, 601, 590, 857, 380, 1128, 586, 1205, 159, + 524, 1271, 1272, 1275, 1354, 1071, 1228, 1336, 1449, 496, + 1310, 1311, 1372, 1373, 938, 355, 1342, 594, 595, 276, + 277, 278, 162, 163, 164, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 176, 291, 621, + 177, 329, 905, 647, 1030, 960, 772, 1082, 1028, 1031, + 1183, 1032, 1083, 1084, 292, 178, 179, 180, 1196, 1120, + 1197, 1198, 1199, 1200, 181, 182, 183, 184, 790, 517, + 791, 1186, 1100, 1187, 1316, 1283, 1243, 1317, 792, 1099, + 793, 1319, 1244, 185, 186, 187, 188, 189, 190, 314, + 561, 562, 837, 1252, 325, 1098, 970, 1282, 1125, 1004, + 1253, 191, 449, 192, 450, 1047, 1145, 451, 452, 729, + 720, 721, 1150, 1051, 453, 454, 455, 456, 457, 1052, + 715, 1049, 1257, 1343, 1411, 1147, 1291, 1362, 924, 723, + 925, 1219, 1152, 1220, 1292, 1056, 17, 19, 47, 48, + 230, 739, 941, 469, 740, 741, }; - protected static readonly short [] yySindex = { 226, - 0, -164, 156, -25, 193,19811, 0, 172, 0, 0, - 193, -25, 0, 0, 174, 0, 8919, 193, 0, -158, - 69, 0, 0, 0, 0, 0, 0, 0, 380, 0, - 390, 0, 0, 0,12330, 0, 0, 0, 0, 0, - 0, 331, 0, 0, 634, 0, 0, 665, 0, 0, - 172, 433, 193, 0, 339, 0, 378, 441, -171,19227, - -151, 336, 565, 9080, 0, 336, 336, 336, 67, 336, - 336, 855, 0,11110, 336, 336, 0,11271, 0, 598, - 336, -161, 0, 336, 597, 336, 0, 9580, 9580, 629, - 336, 336, 70,11434,18112, 0, 0,18112, 0,12646, -12781,12916,13051,13186,13321,13456,13591, 0, 276, 0, -10346, 0, 52, 0, -38, 0, 0, 0, 486, 868, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -38, 0, 1172, 890, 116, 392, - 643, 723, 636, 675, 692, 688, 114, 712, 0, 0, - 0, 0, 0, 0, 4190, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 762, - -272, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 396, 465, 433, 0, 0, 724, 0, - 0, 0,10346,10346, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 331, 0, 0, - 736, 743, 0, -232, 0, 0, 0, 433,13222, 847, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 914, -38,18252, 0, 0, 0, 0, 0,18112, -144, - -142, 901, 809, -274, 868, -38, 0, 0,10346, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 133, 330,19227, 0,10346,18112, 811, 0, 0, 887, -18112,18112, 7036, 653, 299, 877,10346, 0,11434, 276, - 1031, 917, 0, 925,10346,18112, 0, 1062, 945, 603, - 1181, 0, 0,18112, 598,17552, 0, 0, 597,18112, - 452, 575, 1038, -38, 0, 0, 920, 0, 0, 762, - 0, 31, 1051, -38,18112,18112,18112, 565, 0, 1015, - 0,10346,10346, 0,12511, -38, 0, 878, 896, 0, - 9241, 104, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1587, 0, 0, 0, 0,19691, 452, 976, 993,18112, - 0, -9, 0, 202, 0, 0, 150, 255, 0, 0, - 946,11569, 9563, 0, 0, 0,18112,18112,18112,18112, -18112,18112,18112,18112,18112,18112,18112,13726,13861,13996, - 1795,16291,14131,14266,14401,14536,14671,14806,14941,15076, -15211,15346,15481,15616,15751,15886,16021,18672,18112, 0, - 0, 0, 762, 0, 0, 0, 0, 9580, 9580, 0, - 0, -38, 0, 0, 0, 0, 564, 1021, 0, 0, - 0, 0, 0, 0, 0, 433, 847, 548, 473, 331, - 331, 0, 682, -149, 0, 331, 1016, 0, -167,13222, - 0, 0, 0, 0, -152, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 348,13357, 0, - 0, 0, 0, 999, 0, 0, 1003, 706, 0, 1026, - 0, 1036, 241, 598, 0, 336, 0, 0, 0, -38, -17552, -147, 0, 1040, 0, 0, 0, -168, 94, 0, - 809, -274, 0, 0, 1043, 0, 1047, 0, 1045, 992, - 0, 0, 734, 0, 9843, 739,11730, 877,17412, 0, -10007, 0, 0, 0, 0, 0, 0, 99, 107, 0, - 0, 0, 347, 598, 713, 0, 0, 597, 0, 0, - 1053, 1056, 0, 108, -38, 0, 119, 1011, 0, 0, -18112, 1141, -9, 0,18112, 1144, 1061, 0, 1064, 1066, - 0,19691, 0, 0, 0, 98, 999,18112, 0,18112, - 0, 0, -197, 138, 9241, 0, 0, 0, 0, 0, - 0, 98, 0, 0, 155, 0, 0, 0, 597, 0, - 452, -38,10966, 0, 1067, 0, 1071,16156, 0, 1194, - 1073, 9241, 0, 0, 1027, 0, 999, -38,18252, 1029, - 0, -9, 999, 0, 127, 0,17692,17692, 1087, 1210, - 0, 0, 139, 76, 0, 0, 0, -172, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,18800,18800, - 0,10346, 646, 0, 0, 0, 0, -38, 0, 0, - 0, 0, 890, 0, 890, 0,12376, 116, 0, 116, - 0, 392, 0, 392, 0, 392, 0, 392, 0, 643, - 0, 643, 0, 723, 0, 636, 0, 675, 0, 692, - 0, 688, 0, -200, 0,11730, 1173, -38, 1174, -38, -11730,11730, 1085,18112, 0, 0, 1021, 0, -38, 0, - 1049, 0, 0, 0,10966, 682, 0, 1096, 1097, 0, - 0, 574, 433, 201, 0, 0, 0, 0, 0, 0, - -117, 1100, 0, 1099, 1101, 0, 0, 0, 0, 1105, -11127, 1065, 0, 240, 0, 0, 614, 0,18252, 0, - 1098, 0, 0, 0, 726, 39, 1108, 0, 1110, 1111, - 1113, 0, 0,18112, 0, -38, 0, 0, 751, 0, - 1114, 0, 560, 0, 0, 9080, 0, 9080,10490, 0, -16510, 0, 0, 0,10653,10788, 401,11730, 0, 154, - 81, 0, 1063, 1059, 0, 0, 0, 814, 0, 0, - 1122, 1124, 0, 0, 0, 0, 0, 1127, 0, 0, - 0, 1129, 0, 2102, 598, 0, 598, 0, 0, 0, - 0, 9080, 0, 0, 9080, -9, 0,18112, 0, 0, - 0,18112,10346, 0, 0, 598, 1131, 98, 0, 0, - 0,18112, 0, 1130, 1092, 0, 0, 0, 0, 0, - 0, 0,10346, 0, 0, -38,19691, 1165, 0, 0, - 0, 0, 0, 0, 0, 999, 820, 0, 0, 0, - 0, 0, 0,17692, 0, 0, 0, -38, 0, 0, -17272, 0, 0, 0, 0, 0,10168, 0,10329, 1136, - 0, 0, 1140, -38,18928, 0, 0, 0,10949, 0, - 0, 1223, 0, 1226, 0, 0, 0, 959, 0, 1143, - 0, 0, 856, 0, 0, 0, 682, 0, 0, 1104, - 0, -149, 0, 682, 0, 0, 1049, 1148, 1154, 1109, - 1162, 1065, 0, 1155, 0, 1279, 1281, 0, 0,11730, - 0,17832, 1160, 726,10966,10346, 0, 0, 91, 1284, - 1285, 131, 1157, 0, 0, 0,18112, 0,18112, 1263, - 0, 0, 0,17972, 0, 552,17972, 830, 0, 0, - 0, 0, 9703, 0, 1288, 762,11730, 1175,10490, 1176, - 0, 336, 0, -38, 0, 0, 0, -170, 0, 0, - 0, 0, 0, 1169, 0, 1208, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1177, 1178, 0, 899, - 0, 0, 0,10346, 0, 0, -38, 539, 1136, 0, -18800, 1260, 680, 0, 449, -38, 0, 1184, 0, 1187, - 0, 0, 0, 0,11730, 0,11730, 0, -165,11730, - 0, 0, 0, 314, 0, 0, 0, 0, 1188, 1049, - 0, 0,11891, 0, 0, 0, 1191, 4772, 0, 1065, - 0, 1065, 0, 1065, 0, 0, 0, 0, 0, -38, - 1192, 1160, 0, 0, 0, -129, -132, 1189, 1190, 0, - 0, 0, 0, 0, 1193,10490, 1136, -172,18112, 0, - 1199, 9080, 0, 0, 0, 0, 0, 1206, 0, 0, - 1218, 0, 877, 0, 0, 0, 0, 0, -185,18112, - 1217, 0, 1136, 1219, 0, 0, 1179, 98, 0,18112, - 0, 1167, 1213, 0, 0, 0, 0, 0,19037, 0, - -38,19037, 0, 0,18928, 0,11730, 1252,11730, 0, -11730, 0, 0,18112, 0, 0, 1101, 0, 561, 910, - 0, 0, 0, 0, -25, 0, 0, 0, 1231, 0, - 0, 0, 1221, 0, 0, 0, 623, 0, 1222, 1352, - 1353, 0, 0, 1136, 1234, 1136, 1235, 0, 1232, 0, - 0,17972, 0, 0, 0,18112, 0, 1243, -188, 0, - 8756, 0, 1240, 0, 0, 0, 98, 0, 0, 0, -18112,10329, 0, 0, 0, 0, 0, 0, 1271, 0, - 1025, 1241, 0, 1246, 0, 0,11891, 193, 241, 0, - 789, 1247, 1250,17832, 1248, 0,18112, 0, 0, 0, - 0, 0, 0, 9080, 0, -174, 0, 0, 9241, 0, - 0, 102, 9080, 0, 1254, 0,11730, 0, 0, 0, - 0, 0,18112, 0, 0, 433, 1253, 433, 241,10346, - 1247, 1291, 0, 1291, 0, 1247, 0, 0, 0,18112, - 0, 9080,12052, 0, 0, 0, 0, 919, 0, 0, - 0, 1283,11730,18112, 0, 433, 1262, 0, 1214, 1019, - 0, 0, 1257, 0, 1261, 0, 83, 0, 1264, 1216, - 0, 1291, 0, 0, 1291, 0, 0, 0, 0, 1266, - 1114, 0, 0, 0, 0, 0, 1292, 0, -133, 1291, - 1388, 0, 1273, 433, 0, 0,10346, 0, 58, 1275, - 0, 1276, 0, 9080, 9241,11730, 0, 0, 0, 0, - 0, 0, 1265, 1268, 0, 0,17412, 0,19879, 149, - 433, 1278, 0, 1280, 1295,11730, 1282,18112, 0, 0, - 1287, 0, 1286, 0, 0, 1289, 0, 0, 0,13357, - 0, 1293, 149, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -239,13357, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1296, 433, - 0, 0, 0, -38, 0, 1295, 0, 0, 0, 1294, -19879, 9241,19470, 0, 0, 591, 0, 0, 0,19538, - 0, 0, 149, 0, 0, 0, 0, 138,10346,10346, - 268,10346, 482, 597, 1322, 0, 452,17193, 0, 1355, - 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1943, - 1268, 1297, 0, -130, -128, 0,10346, -111, 0,10346, - 0, 1242, 1300, 0, 0, -276, 0, -181, 4941, 0, - 1298, 1255, 3, 591,12330, 0,18112, 0, 0, 0, - 0, 0, -276, 0, 1301, 1256, 1304, 1302, 0, 1310, - 1267, 1311, 241, 1303, 1299, 0, 0, 1312, 1319, 1349, - 0, 999, 0, 975, 0, 1318, 1314, 1268, -145, 0, - 1313, 0, 0, 1323, 0, 1324, 1321, 1326, 0, 1325, - 0, 241, 241, 0, 0, 241, 1327, 1328, 0, 0, - 0, 0, 0, 0, 1336, 89, 0, 1339, 241, 1462, - 1343, 241, 0, 345, 0,10490, 1305, 1344, 1325, 0, - 1347, 1354, 112, 1357, 0, 0, 241,17832, 1306, 1356, - 1336, 0, 0,13357, 0, 433, 433, 0, 1307, 1358, - 1339, 0, 1363, 0,18112, 1329, 1360, 1343, 0, 1365, - 241, 0, 64, 0, 1348, 0, 0, 0, 0, 0, -13357, 0, 112, 112, 0, 1367, 0, -145, 0, 0, - -153, 1362,13357, 0,13357, 0, 0,10490, 1359, 0, - 0, 0, 1371, 1323, 0, 0, 0, 1376, 0, 282, - 0, 0, 0, 1291, 1028, 1375, 0, 0, 360, 0, - 0, 0, 0, 0, 1417, 1490, 0, 0, 0, 0, - 0, 0, 1381, 1382,10490, 0, 0, 0, 0, 112, - 0, 0, 359, 359, 0, 1291, 0, 0, 0, 97, - 97, 1373, 1391, 0, 0, 0, 0, 0, 0,17412, -17412, 0, 0, 0, 0, 0, 0, 0, 0, 1384, - 1389,17832, 0, 0, 0, 0, 1390, 0, + protected static readonly short [] yySindex = { -138, + 0, -188, -130, -211, 16,19272, 0, 154, 0, 0, + 16, -211, 0, 0, 32, 0, 8669, 16, 0, -178, + -261, 0, 0, 0, 0, 0, 0, 0, 265, 0, + 309, 0, 0, 0,12017, 0, 0, 0, 0, 0, + 0, 134, 0, 0, 813, 0, 0, 862, 0, 0, + 154, 364, 16, 0, 319, 0, -266, 346, -159,18762, + 25, 196, 373, 8827, 0, 196, 196, 196, 95, 196, + 196, 798, 0,10976, 196, 196, 0,11134, 0, 415, + 196, -97, 0, 196, 433, 196, 0,19355,19355, 430, + 196, 196, 46,11294, 0,17679, 0,12324,12456,12588, +12720,12852,12984,13116,13248, 0, 285, 0, 9911, 0, + 201, 0, 135, 0, 0, 0, 545, 348, 81, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 0, 1437, 854, 166, 39, 655, 491, 457, + 469, 619, 625, -274, 702, 0, 0, 0, 0, 0, + 0, 4272, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 686, -11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -147, 809, 364, 0, 458, 390, 0, 695, 0, 0, + 0, 0, 9911, 9911, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, + 721, 726, 0, -242, 0, 0, 0, 364,16161, 705, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 864, 135,17816, 0, 0, 0, 0, 0,17679, -126, + -115, 880, 819, 479, 348, 135, 0, 0, 9911, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -176, -276,18762, 0, 9911,17679, 853, 0, 0, 868, +17679,17679, 7196, 715, -194, 831, 9911, 0,11294, 285, + 1004, 904, 0, 888, 9911,17679, 0, 1026, 911, -135, + 4684, 0, 0,17679, 415,17131, 0, 0, 433,17679, + 514, 560, 939, 135, 0, 0, 686, 0, 81, 1015, + 135,17679,17679,17679, 373, 0, 970, 0, 9911, 9911, + 0,12192, 135, 0, 8985, -251, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4844, 0, 0, 0, 0,19111, + 514, 951, 950,17679, 0, 462, 0, 218, 0, 0, + 202, 270, 0, 0, 925,11426, 9301, 0, 0, 0, +17679,17679,17679,17679,17679,17679,17679,17679,17679,17679, +17679,13380,13512,13644, 5004,15888,13776,13908,14040,14172, +14304,14436,14568,14700,14832,14964,15096,15228,15360,15492, +15624,18227,17679, 0, 0, 0, 686, 0, 0, 0, + 0,19355,19355, 0, 0, 135, 0, 0, 0, 0, + 1154, 975, 0, 0, 0, 0, 0, 0, 0, 364, + 705, 938, 948, 0, 462, 134, 134, 0, 706, 186, + 0, 134, 1007, 0, -143,16161, 0, 0, 0, 0, + -137, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 363,19841, 0, 0, 0, 0, 963, + 0, 0, 1005, 751, 0, 1011, 0, 1013, 181, 415, + 0, 196, 0, 0, 0, 135,10210, -142, 0, 1003, + 0, 0, 0, 87, 119, 0, 819, 479, 0, 0, + 1006, 0, 1018, 0, 1014, 960, 0, 0, 815, 0, + 9575, 826,11584, 831,16994, 0, 9736, 0, 0, 0, + 0, 0, 0, 145, 158, 0, 0, 0, 52, 415, + 369, 0, 0, 433, 0, 0, 1019, 1021, 0, 159, + 135, 0, 165, 0, 0,17679, 1097, 0,17679, 1102, + 1022, 0, 1027, 1028, 0,19111, 0, 0, 0, 175, + 963, 0, -262, 8985, 0, 0, 0, 0, 0, 0, + 175, 0, 0, 212, 0, 0, 0, 433, 0, 514, + 135,10069, 0, 1024, 0, 1029,15756, 0, 1148, 1031, + 8985, 0, 0, 976, 0, 963, 135,17816, 980, 0, + 462, 963, 0, 169, 0,17268,17268, 1034, 1157, 0, + 0, 72, -89, 0, 0, 0, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,18352,18352, 0, + 9911, 578, 0, 0, 0, 0, 135, 0, 0, 0, + 0, 854, 0, 854, 0,12060, 166, 0, 166, 0, + 39, 0, 39, 0, 39, 0, 39, 0, 655, 0, + 655, 0, 491, 0, 457, 0, 469, 0, 619, 0, + 625, 0, 117, 0,11584, 1124, 135, 1126, 135,11584, +11584, 1043,17679, 0, 0, 975, 0, 135, 0, 575, + 462, 0, 0, 0, 0,10069, 706, 0, 1054, 1053, + 0, 0, 651, 364, 353, 0, 0, 0, 0, 0, + 0, -101, 1055, 0, 1058, 1056, 0, 0, 0, 0, + 1062,10227, 1020, 0, 516, 0, 0, 295, 0,17816, + 0, 1048, 0, 0, 0, 700, 187, 1064, 0, 1063, + 1065, 1067, 0, 0,17679, 0, 0, 135, 0, 0, + 1066, 0, 1069, 0, -144, 0, 0, 8827, 0, 8827, +10368, 0,16094, 0, 0, 0,10528,10660, 231,11584, + 0, 142, 105, 0, 1016, 1023, 0, 0, 0, 833, + 0, 0, 1072, 1073, 0, 0, 0, 0, 0, 1076, + 0, 0, 0, 1084, 196, 5162, 415, 0, 415, 0, + 0, 0, 0, 8827, 0, 0, 8827, 0,17679, 0, +17679, 9911, 0, 0, 415, 1081, 175, 0, 0, 0, +17679, 0, 0, 0, 0, 0, 0, 9911, 0, 0, + 135,19111, 1113, 0, 0, 0, 0, 0, 0, 0, + 963, 840, 0, 0, 0, 0, 0, 0,17268, 0, + 0, 0, 135, 0, 0,16857, 0, 0, 0, 0, + 0, 9894, 0,10052, 1082, 0, 0, 1086, 135,18477, + 0, 0, 0,10818, 0, 0, 1167, 0, 1168, 0, + 0, 0, 744, 0, 1090, 0, 0, 0, 0, 0, + 0, 0, 0, 706, 0, 0, 1049, 0, 186, 0, + 706, 0, 0, 938, 1098, 1101, 1057, 1106, 1020, 0, + 1103, 0, 1222, 1225, 0, 0,11584, 0,17405, 1109, + 700,10069, 9911, 0, 0, 540, 1230, 1231, 180, 1107, + 0, 0,17679, 0,17679, 1208, 0, 0, 0,17542, + 0, -243,17542, 849, 0, 0, 0, 0, 9438, 0, + 1234, 686,11584, 1123,10368, 1127, 0,17679, 0, 135, + 0, 0, 0, 94, 0, 0, 0, 1129, 0, 1156, + 0, 0, 0, 0, 0, 0, 0, 0, 1132, 1136, + 0, 879, 0, 0, 0, 9911, 0, 0, 135, 1134, + 1082, 0,18352, 1216, 688, 0, 389, 135, 0, 1146, + 0, 1145, 0, 0, 0, 0,11584, 0,11584, 0, + -169,11584, 0, 0, 0, 665, 0, 0, 0, 1153, + 938, 0, 0,11742, 0, 0, 0, 1155, 5324, 0, + 1020, 0, 1020, 0, 1020, 0, 0, 0, 0, 0, + 135, 1152, 1109, 0, 0, 0, -119, -125, 1162, 1166, + 0, 0, 0, 0, 0, 1171,10368, 1082, 93,17679, + 0, 1172, 8827, 0, 0, 0, 0, 0, 1169, 0, + 0, 1159, 0, 831, 0, 0, 0, 0, 0, -191, + 1181, 1182, 0, 1082, 1183, 0, 0, 175, 0,17679, + 0, 1120, 1177, 0, 0, 0,18583, 0, 135,18583, + 0, 0,18477, 0,11584, 1214,11584, 0,11584, 0, + 0,17679, 0, 0, 1056, 0, 384, 891, 0, 0, + 0, 0, -211, 0, 0, 0, 1194, 0, 0, 0, + 1184, 0, 0, 0, 603, 0, 1186, 1316, 1319, 0, + 0, 1082, 1203, 1082, 0, 8827, 752, 0, 0,17542, + 0, 0, 0,17679, 0, 1211, -151, 0, 8509, 0, + 0, 1326, 0, 0, 175, 0, 0,17679,10052, 0, + 0, 0, 0, 0, 0, 1236, 0, 851, 1212, 0, + 1215, 0, 0,11742, 16, 181, 0, 850, 1213, 1218, +17405, 1228, 0,17679, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8827, 0, 125, 0, 0, 8985, 0, + 0, 1300, 8827, 0, 1229, 0,11584, 0, 0, 0, + 0, 0,17679, 0, 0, 364, 1235, 364, 181, 9911, + 1213, 1264, 0, 1264, 0, 1213, 0, 0, 0,17679, + 0, 8827,17679, 0, 0, 0, 1239, 0, 0, 1262, +11584,17679, 0, 364, 1244, 0, 1196, 843, 0, 0, + 1241, 0, 1245, 0, 113, 0, 1248, 1207, 0, 1264, + 0, 0, 1264, 0, 0, 0, 754, 1069, 0, 0, + 0, 0, 1274, 0, 80, 1264, 1373, 0, 1261, 364, + 0, 0, 9911, 0, 127, 1263, 0, 1265, 0, 0, + 0, 8985,11584, 0, 0, 0, 0, 0, 0, 1250, + 1258, 0, 0,16994, 0,19317, 171, 364, 1268, 1269, + 1281,11584, 1266,17679, 0, 0, 1267, 0, 1270, 0, + 0, 1271, 0, 0, 0,19841, 0, 1272, 171, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 672,19841, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1276, 364, 0, 0, 0, 135, + 0, 1281, 0, 0, 0, 1279,19317, 8985,18934, 0, + 0, 518, 0, 0, 0,18966, 0, 0, 171, 0, + 0, 0, 0, -262, 9911, 9911, 387, 9911, 438, 433, + 1302, 0, 514, 2067, 0, 1342, 0, 0, 1258, 0, + 0, 0, 0, 0, 0, 1697, 1258, 1284, 0, -123, + -94, 0, 9911, -91, 0, 9911, 0, 1243, 1282, 0, + 0, 370, 0, -183, 4361, 0, 1278, 1246, -233, 518, +12017, 0,17679, 0, 0, 0, 0, 0, 370, 0, + 1287, 1247, 1286, 1292, 0, 1291, 1251, 1301, 181, 1298, + 1290, 0, 0, 1309, 1317, 1344, 0, 963, 0, 857, + 0, 1320, 1311, 1258, 97, 0, 1307, 0, 0, 1323, + 0, 1324, 1322, 1328, 0, 1327, 0, 181, 181, 0, + 0, 181, 1325, 1329, 0, 0, 0, 0, 0, 0, + 1331, 188, 0, 1332, 181, 1448, 1333, 181, 0, 691, + 0,10368, 1294, 1334, 1327, 0, 1336, 1341, 199, 1345, + 0, 0, 181,17405, 1296, 1343, 1331, 0, 0,19841, + 0, 364, 364, 0, 1303, 1347, 1332, 0, 1346, 0, +17679, 1308, 1352, 1333, 0, 1365, 181, 0, 144, 0, + 1359, 0, 0, 0, 0, 0,19841, 0, 199, 199, + 0, 1369, 0, 97, 0, 0, 102, 1374,19841, 0, +19841, 0, 0,10368, 1362, 0, 0, 0, 1376, 1323, + 0, 0, 0, 1378, 0, 257, 0, 0, 0, 1264, + 872, 1380, 0, 0, 495, 0, 0, 0, 0, 0, + 1442, 1489, 0, 0, 0, 0, 0, 0, 1387, 1388, +10368, 0, 0, 0, 0, 199, 0, 0, 701, 701, + 0, 1264, 0, 0, 0, -181, -181, 1379, 1394, 0, + 0, 0, 0, 0, 0,16994,16994, 0, 0, 0, + 0, 0, 0, 0, 0, 1391, 1392,17405, 0, 0, + 0, 0, 1389, 0, }; - protected static readonly short [] yyRindex = { 1465, - 0, 0, 9402, 1465, 0, 0, 0, 1764, 0, 0, - 3907, 2165, 0, 0, 0, 0, 0, 3907, 0, 1346, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1769, 0, 0, 1769, 0, 0, 1769, 0, 0, - 1764, 1666, 2625, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1400, 0, 0, 0, 0, 0, 0, 0, - 0,11747, 0, 1393, 0, 0, 0, 1393, 0, 0, - 0, 0, 0, 0, 3589, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5812, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6345, 5749, - 4348, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6453, 6633, 7038, 7317, - 7813, 8029, 8173, 8317, 8461, 5037, 5363, 3547, 0, 0, - 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 6525, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2233, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1769, 0, 0, - 182, 0, 0, 0, 0, 0, 0, 3954, 355, 4001, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4608, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1406, 0, 0, 0, 0, 0, 0, 4771, - 1399, 0, 0, 0, 0, 0, 0, 1399, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3031, 0, - 601, 3181, 0, 0, 0, 0, 0, 0, 0, 3331, - 0, 3181, 0, 0, 0, 0, 0, 1400, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, - 301, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1405, 3439, 0, 0, 1393, - 0, 4608, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2296, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4570, 0, 0, - 0, 0, 0, 0, 0, 4048, 4111, 875, 0, 1769, - 1769, 0,10024, -204, 0, 1769, 1783, 0, 0, 317, + protected static readonly short [] yyRindex = { 355, + 0, 0, 9143, 355, 0, 0, 0, 1767, 0, 0, + 3887, 1497, 0, 0, 0, 0, 0, 3887, 0, 0, + 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 516,19151, 0, - 0, 0, 0, 4608, 0, 0, 0, 0, 0, 0, - 0, 0,19578, 0, 0, 0, 0, 0, 0, 0, - 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 335, 951, 0, 0, 272, 1077, 0, 0, 1412, 716, - 0, 0, 0, 0, 303, 0, 0, 5260, 1413, 0, + 0, 1768, 0, 0, 1768, 0, 0, 1768, 0, 0, + 1767, 3958, 2288, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1402, 0, 0, 0, 0, 0, 0, 0, + 0,10835, 0, 1395, 0, 0, 0, 1395, 0, 0, + 0, 0, 0, 0, 3555, 0, 0, 0, 0, 0, + 0, 0, 0, 307, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5803, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6517, 5897, 6113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1419, 0, 2470, 0, 0, -263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2881, 0, 0, 0, 0, 0, 0, 0, - 0, 1405, 0, 0, 0,18392, 4608, 0, 0, 0, - 0, 0, 8592, 0, 304, 0, 0, 0, 0, 0, - 0,18392, 0, 0, 0, 0, 0, 0, 225, 0, - 799, 0, 0, 0, 1415, 0, 0, 0, 0, 1399, - 0, 0, 0, 0, 4445, 0, 4608, 0, 0, 4281, - 0, 4608, 5423, 0, 0, 0, 0, 0, -189, 0, - 0, 0, 0, 190, 0, 0, 0, 684, 0, 0, + 0, 0, 0, 6622, 6799, 4451, 7283, 1541, 7766, 1784, + 7973, 8111, 8249, 8387, 946, 0, 0, 0, 0, 0, + 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4001, 0, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5909, 6018, 6127, 6236, 0, 6705, 0, 0, - 0, 0, 6813, 0, 6885, 0, 0, 7144, 0, 7216, - 0, 7389, 0, 7490, 0, 7562, 0, 7663, 0, 7885, - 0, 7957, 0, 8101, 0, 8245, 0, 8389, 0, 8533, - 0, 5200, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4570, 0, 0, 0, - 0, 0, 0, 0, 0,11908, 0, 0, 924, 0, - 0, 1370,16676, 0, 0, 0, 0, 0, 0, 0, - 770, -238, 0, 0, 1421, 0, 0, 0, 0, 1876, - 0, 0, 0, 0, 0, 0,12213, 0, 0, 0, - 921, 0, 0, 0,12069,19731, 0, 0, 932, 935, - 936, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 851, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1424, 0, 0, 0, 0, 0, 7722, 0, 0, 0, - 324, 0, -7, 4934, 0, 0, 0, 0, 0, 0, - 0, 1423, 0, 0, 0, 0, 0, 1430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2881, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,18392, 0, 0, - 0, 0, 0, 1034, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1768, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 4064, 459, 4107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, - 0, 0, 0, 0, 1428, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -169, 0, 592, - 0, 0, 0, 0, 0, 0,12069, 0, 0, 0, - 0, -204, 0,10185, 0, 0, 1434, 0, 864, 0, - 0, 0, 0, 1422, 0, 1387, 1392, 0, 0, 0, - 0, 0, 1073,19855, 0, 0, 0, 0,19771, 0, - 0, 0, 941, 0, 0, 0, 0, 0, 0, 2751, + 0, 0, 0, 4683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5097, 0, 5586, 1438, 0, - 0, 0, 0, 1436, 0, 0, 0, 941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 698, 0, - 0, 0, 0, 0, 2949, 642, 0, 0, 0, 1437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1404, 0, 0, 0, 0, 0, 0, 4843, + 1398, 0, 0, 0, 0, 0, 0, 1398, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3004, 0, + 416, 3135, 0, 0, 0, 0, 3282, 0, 3135, 0, + 0, 0, 0, 0, 1402, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1403, + 3407, 0, 0, 1395, 0, 4683, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1439, 0, 0, 0, 0, 0, 964, 967, 0, - 0, 0, 0, 0, 0, 0, 1440, 793, 1441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 5260, 0, 0, 0, 0, 0, 1446, 0, - 0, 0, 1440, 0, 0, 0, 0,18392, 0, 0, - 0, 683, 715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1421, 0,16511, 0, - 0, 0, 0, 0,19927, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 807, 0, 873, 0, - 0, 0, 0, 1444, 0, 870, 1442, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1452, 0, - 0, 0, 0, 0, 0, 0,18392, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2383, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3513, 0, 0, 0, 0, 0, 0, 0, 4150, + 4193, 0, 0, 0, 2850, 1768, 1768, 0, 9318, 76, + 0, 1768, 1777, 0, 0, 252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 528,18694, 0, 0, 0, 0, 4683, + 0, 0, 0, 0, 0, 0, 0, 0,19034, 0, + 0, 0, 0, 0, 0, 0, 1406, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 1164, 0, 0, + 344, 912, 0, 0, 1410, 704, 0, 0, 0, 0, + 279, 0, 0, 5323, 1411, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1412, 0, + 2553, 0, 0, 435, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1403, 0, 0, 0,17953, + 4683, 0, 0, 281, 0, 0, 0, 0, 0, 0, +17953, 0, 0, 0, 0, 0, 0, -41, 0, 550, + 0, 0, 0, 1413, 0, 0, 0, 0, 1398, 0, + 0, 0, 0, 4523, 0, 4683, 0, 0, 4362, 0, + 4683, 5483, 0, 0, 0, 0, 0, -190, 0, 0, + 0, 0, 272, 0, 0, 0, 893, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6054, 6202, 6307, 6412, 0, 6871, 0, 0, 0, + 0, 6976, 0, 7048, 0, 0, 5982, 0, 7198, 0, + 7352, 0, 7421, 0, 7490, 0, 7559, 0, 7628, 0, + 7697, 0, 7835, 0, 7904, 0, 8042, 0, 8180, 0, + 8318, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3513, 0, 0, 0, 0, + 2850, 0, 0, 0, 0, 0,10993, 0, 0, 898, + 0, 0, 1366,16297, 0, 0, 0, 0, 0, 0, + 0, 808, 450, 0, 0, 1416, 0, 0, 0, 0, + 1964, 0, 0, 0, 0, 0, 0,11900, 0, 0, + 0, 902, 0, 0, 0,11601,19182, 0, 0, 918, + 941, 945, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1414, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1419, 0, 0, 0, 0, 0, 2074, 0, + 0, 0, 302, 0, 77, 5003, 0, 0, 0, 0, + 0, 0, 0, 1417, 0, 0, 0, 0, 0, 1420, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,17953, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4683, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1415, 0, 0, 0, 0, 1422, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -127, 0, 1221, 0, 0, 0, 0, 0, + 0, 0, 0,11601, 0, 0, 0, 0, 76, 0, + 9753, 0, 0, 1429, 0, 852, 0, 0, 0, 0, + 1433, 0, 1383, 1384, 0, 0, 0, 0, 0, 1428, +11759, 0, 0, 0, 0,19227, 0, 0, 0, 965, + 0, 0, 0, 0, 0, 2723, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5163, 0, 5643, 1441, 0, 0, 0, 0, 1438, + 0, 0, 0, 965, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -165, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1435, 0, 0, 0, 0, 0, 1304, 774, 0, 0, + 0, 1440, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -127, 733, 0, 0, 0, 0, 0,19974,19578, 0, - 361, 521, -219, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -194, 0, - 0, 1033, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,20021, 0, 169,19578, 0, - 530, 1454, 0, 1454, 0, 521, 0, 0, 0, 0, - 0, 0, 1450, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,20068, 0, 0, 0,16949, - 0, 0, 1456, 0, 0, 0, 610, 0, 579, 0, - 0, 596, 0, 0, 1454, 0, 0, 0, 0, 0, - 1458, 0, 0, 0, 0, 0, 0, 0, 3860, 1455, - -247, 0, 0, 319, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1460, 0, 0, 0, 0, 0, - 0, 0, 0, 3758, 0, 0, 1413, 0, 0,16785, -17031, 0, 0, 0, 790, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 583, 0, 0, 0,19334, - 0, 0,16867, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,19402, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,17113, - 0, 0, 0, 0, 0, 790, 0, 0, 0, 0, - 0, 301, 516, 0, 0, 0, 0, 0, 0, 516, - 0, 0,16785, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5584, 526, 0,17155, 0, 0, 0, - 5746, 0, 3758, 0, 0, 0, 0, 0, 0, 0, - 3758, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 381, 0, 454, 0, 651, + 0, 0, 0, 966, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 825, 0, 725, 0, 0, 0, 0, 0, - 0, 0,19578, 966, 0, 0, 0, 0, 0, 0, - 0, 1453, 0, 508, 0, 0, 0, 3758, 0, 0, - 979, 0, 0, 0, 0, 0, 0, 0, 0, 1459, - 0,19578,19578, 0, 0,19618, 0, 0, 0, 0, - 0, 0, 0, 0, 1461,13087, 0, 1464,19578,18532, - 1469,19578, 0, 0, 0, 0, 0, 0, 1470, 0, - 0, 0,20144, 0, 0, 0,19578, 0, 0, 0, - 1471, 0, 0, 113, 0,12817,12952, 0, 0, 0, - 1475, 0, 0, 0, 0, 0, 0, 1476, 0, 0, -19578, 0, -237, 0, 985, 0, 0, 0, 0, 0, - 1039, 0,19073,20106, 0, 0, 0, 0, 0, 0, - 0, 0, 1525, 0, 1579, 0, 0, 0, 994, 0, + 0, 0, 1439, 0, 0, 0, 0, 0, 977, 978, + 0, 0, 0, 0, 0, 0, 0, 1444, 893, 794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 604, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5323, 0, 0, 0, 0, 0, 1446, + 0, 0, 0, 1444, 0, 0, 0,17953, 0, 0, + 0, 761, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,20144, - 0, 0,12547,12682, 0, 604, 0, 0, 0, 0, - 0,16421, 0, 0, 0, 0, 0, 0, 0, 1413, - 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1416, 0,16142, 0, 0, 0, + 0, 0,19418, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 801, 0, 823, 0, 0, 0, + 0, 1449, 0, 1415, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1452, 0, 0, 0, + 0, 65, 0, 0,17953, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 240, 1252, 0, + 0, 0, 0, 0,19461,19034, 0, 554, 565, 498, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -199, 0, + 0, 1412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,19605, 0, 141,19034, 0, + 622, 1456, 0, 1456, 0, 565, 0, 0, 0, 0, + 0, 0, 856, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,19648, 0, 0, 0,16571, 0, 0, + 1457, 0, 0, 0, -224, 0, 632, 0, 0, 585, + 0, 0, 1456, 0, 0, 0, 0, 859, 0, 0, + 0, 0, 0, 0, 3816, 1450, 679, 0, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1459, 0, 0, 0, 0, 0, 0, 0, 0, + 3721, 0, 0, 1411, 0, 0,16403,16655, 0, 0, + 1275, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 487, 0, 0, 0,18866, 0, 0,16487, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5807, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,16739, 0, 0, 0, 0, + 0, 1275, 0, 0, 0, 0, 0, 219, 528, 0, + 0, 0, 0, 0, 0, 528, 0, 0,16403, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5481, + 535, 0,16781, 0, 0, 0, 5641, 0, 3721, 0, + 0, 0, 0, 0, 0, 0, 3721, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 600, 0, 571, 0, 660, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, + 733, 0, 0, 0, 0, 0, 0, 0,19034, 983, + 0, 0, 0, 0, 0, 0, 0, 1451, 0, 612, + 0, 0, 0, 3721, 0, 0, 987, 0, 0, 0, + 0, 0, 0, 0, 0, 1454, 0,19034,19034, 0, + 0,19066, 0, 0, 0, 0, 0, 0, 0, 0, + 1461,15919, 0, 1473,19034,18090, 1474,19034, 0, 0, + 0, 0, 0, 0, 1475, 0, 0, 0,19801, 0, + 0, 0,19034, 0, 0, 0, 1476, 0, 0, 343, + 0,19731,19771, 0, 0, 0, 1477, 0, 0, 0, + 0, 0, 0, 1478, 0, 0,19034, 0, 719, 0, + 988, 0, 0, 0, 0, 0, 883, 0,18508,19691, + 0, 0, 0, 0, 0, 0, 0, 0, 1514, 0, + 1571, 0, 0, 0, 991, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,19801, 0, 0,19505,19535, + 0, 611, 0, 0, 0, 0, 0,16015, 0, 0, + 0, 0, 0, 0, 0, 1411, 1411, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, }; protected static readonly short [] yyGindex = { 0, - 0, 1794, 0, 0, 0, -3, -14, -182, -47, -27, - 0, 1846, 1854, 590, 0, 0, -183, 0, 0, 0, - 0, 0, 0,-1278, -800, -227, -557, 0, 0, 0, - 0, 0, -230, 0, 0, 0, 780, 0, 906, 0, - 0, 0, 0, 618, 624, -17, -231, 0, -46, 0, - 0, -559, 417, 0, 470, -628, -599, -598, -596, -592, - -588, -573, -515, 0, 0, -837, 0, -942, 0, 416, --1297, 0, 38, 0, 0, 0, 581,-1234, 0, 0, - 0, 346, 250, 0, 0, 0, 288,-1214, 0, -287, - -303, -445, 0, 0, 0, -999, 236, 0, 0, -538, - 0, 0, 302, 0, 0, 275, 0, 0, 382, 0, - -564, -907, 0, 0, 0, 0, 0, -435, 310,-1457, - -10, 0, 0, 0, 909, 911, 915, 1115, -560, 0, - 0, -336, 927, 400, 0,-1254, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, - 0, 0, 0, 0, 0, 0, 0, 0, 463, 0, - 0, 0, -292, 393, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 477, 0, -541, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 214, 0, 0, 305, 0, - 0, 307, 311, 224, 0, 0, 0, 0, 0, 0, - 0, 0, 556, 0, 0, 0, 0, -86, 0, 872, - -316, -340, 1516, 0, 377, 0, -433, 0, 960, 0, - 1593, 65, -301, -278, -55, 259, 1009, 0, 562, 0, - -41, 942, -390, 0, 0, -386, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -381, 0, 0, 0, 0, - 0, 0, -269, 0, 0, 1320, 0, 0, 374, 0, - -366, 0, -279, 0, 0, 0, 922, -939, -315, -134, - 569, 0, 1005, 0, 1308, -600, -43, -348, 1147, 0, - 0, 795, 1857, 0, 0, 0, 0, 1119, 0, 0, - 0, 1583, 0, 0, 0, 0, 0, 1606, 987, 988, - 1510, -388, 1511, 0, 0, 0, 0, 774, 117, 0, - 771, 844, 984, 1506, 1507, 1505, 1508, 1509, 0, 1504, - 0, 0, 0, 1058, 1361, -579, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -306, 695, 0, -890, - 0, 0, 0, 0, 0, -487, 0, 617, 0, 513, - 0, 0, 0, 0, 0, 737, -577, -15, -346, 1, - 0, 1790, 0, 62, 0, 100, 101, 140, 147, 151, - 157, 175, 176, 179, 184, 0, -755, 0, 0, 0, - 839, 0, 753, 0, 0, 0, 0, 738, -987, 823, - -943, 0, 867, -500, 0, 0, 0, 0, 0, 0, - 752, 0, 758, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, - 0, 0, 0, 0, 0, 0, 0, -39, 0, 1409, - 708, 0, 0, 0, 0, 963, 0, 0, 0, 0, - 0, 0, -175, 0, 0, 0, 0, 0, 1529, 1245, - 0, 0, 0, 0, 1531, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, - 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, - 20, 1037, 0, 0, 0, 1046, + 0, 1805, 0, 0, 0, 2, -15, -182, -50, -47, + 0, 1845, 1853, 822, 0, -6, 0, 0, 0, 0, + 0, 0,-1031, -787, -222,-1268, 0, 0, 0, 0, + 0, -228, 0, 0, 0, 799, 0, 919, 0, 0, + 0, 0, 637, 640, -17, -223, 0, 7, 0, 0, + -486, 436, 0, 489, -685, -628, -619, -610, -583, -578, + -544, -539, 0, 0,-1158, 0, -913, 0, 439,-1292, + 0, 34, 0, 0, 0, 593,-1232, 0, 0, 0, + 47, 266, 0, 0, 0, 305,-1190, 0, -283, -305, + -514, 0, 0, 0, -991, 255, 0, 0, -532, 0, + 0, 321, 0, 0, 294, 0, 0, 399, 0, -615, +-1051, 0, 0, 0, 0, 0, -423, 331,-1424, -10, + 0, 0, 0, 916, 920, 933, 1108, -556, 0, 0, + -330, 922, 440, 0,-1475, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, + 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, + 0, -275, 423, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 511, 0, -537, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 245, 0, 0, 330, 0, 0, + 335, 337, 253, 0, 0, 0, 0, 0, 0, 0, + 0, 581, 0, 0, 0, 0, -87, 0, -3, -377, + -323, 649, 0, 405, 0, -394, 0, 982, 0, 1601, + 727, -297, -277, -65, 734, 1100, 0, 590, 0, -40, + 1407, -393, 0, 0, -391, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -383, 0, 0, 0, 0, 0, + -269, 0, 1664, 0, -361, 0, -278, 0, 0, 0, + 956, -932, -304, -133, 544, 0, 1032, 0, 1293, -592, + 38, -348, 1158, 0, 0, 821, 1865, 0, 0, 0, + 0, 1135, 0, 0, 0, 1594, 0, 0, 0, 0, + 0, 1996, 917, 953, 1530, -568, 1532, 0, 0, 0, + 0, 810, -36, 0, 807, 834, 949, 1524, 1525, 1527, + 1529, 1523, 0, 1528, 0, 0, 0, 1085, 1375, -564, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -311, 732, 0, -629, 0, 0, 0, 0, 0, -473, + 0, 653, 0, 548, 0, 0, 0, 767, -563, 1, + -351, 4, 0, 1808, 0, 42, 0, 54, 99, 136, + 140, 167, 173, 176, 177, 178, 190, 0, -745, 0, + 0, 0, 874, 0, 783, 0, 0, 0, 765, -131, + 855, -984, 0, 892, -491, 0, 0, 0, 0, 0, + 0, 780, 0, 777, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 697, 0, 0, 0, 0, 0, 0, 0, 0, -39, + 0, 1423, 736, 0, 0, 981, 0, 0, 0, 0, + 0, 0, -168, 0, 0, 0, 0, 0, 1535, 1277, + 0, 0, 0, 0, 1539, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 579, 0, 0, 0, 0, 0, + 0, 0, 0, 703, 0, 0, 0, 0, 0, 0, + 19, 1051, 0, 0, 0, 1059, }; - protected static readonly short [] yyTable = { 112, - 18, 163, 552, 196, 239, 555, 114, 831, 524, 502, - 481, 775, 837, 466, 608, 469, 266, 164, 265, 465, - 797, 506, 300, 577, 240, 550, 548, 881, 569, 587, - 440, 684, 882, 536, 404, 685, 654, 1010, 319, 1298, - 686, 333, 343, 44, 1152, 1091, 350, 910, 258, 623, - 990, 634, 991, 645, 893, 928, 311, 1127, 877, 1334, - 318, 584, 886, 396, 233, 405, 745, 235, 392, 320, - 1215, 323, 1555, 921, 1526, 633, 522, 358, 168, 1216, - 362, 1305, 1216, 918, 255, 1142, 1075, 805, 758, 53, - 1170, 14, 477, 624, 322, 1390, 1017, 197, 406, 1019, - 1363, 53, 1443, 768, 267, 1157, 751, 444, 802, 1662, - 1563, 255, 390, 322, 759, 1371, 169, 170, 380, 751, - 380, 1450, 1368, 1198, 349, 1510, 1196, 1512, 1078, 1204, - 349, 1343, 1344, 296, 296, 71, 71, 350, 955, 71, - 1447, 381, 296, 381, 1518, 379, 760, 112, 239, 163, - 382, 751, 339, 339, 114, 1204, 171, 383, 390, 751, - 445, 1663, 198, 172, 725, 164, 930, 173, 467, 1075, - 506, 935, 936, 174, 1075, 339, 1075, 921, 929, 1075, - 1075, 383, 1075, 1075, 944, 1171, 745, 776, 745, 43, - 480, 175, 176, 1527, 1506, 177, 522, 380, 522, 97, - 178, 1681, 1508, 256, 1306, 504, 507, 806, 1075, 97, - 467, 1078, 919, 256, 1116, 298, 1078, 53, 1078, 511, - 381, 1078, 1078, 237, 1078, 1078, 168, 382, 268, 823, - 256, 921, 256, 298, 383, 505, 502, 1217, 481, 1564, - 1217, 510, 860, 745, 829, 579, 1369, 472, 1091, 520, - 1078, 265, 257, 522, 761, 623, 535, 15, 608, 1562, - 1157, 265, 257, 1075, 169, 170, 859, 339, 339, 769, - 992, 478, 1265, 576, 299, 118, 580, 380, 523, 257, - 873, 257, 575, 527, 529, 608, 396, 582, 1027, 1199, - 897, 1511, 299, 1513, 977, 762, 1631, 586, 559, 624, - 381, 900, 1091, 1037, 171, 1078, 572, 382, 574, 597, - 1519, 172, 527, 1378, 573, 173, 6, 389, 118, 1649, - 895, 174, 118, 1655, 298, 899, 901, 1533, 589, 590, - 624, 916, 2, 339, 296, 1665, 1002, 1666, 1356, 175, - 176, 1287, 297, 177, 1593, 607, 348, 637, 178, 807, - 631, 642, 1702, 869, 839, 507, 507, 1307, 872, 339, - 1293, 609, 841, 851, 1091, 390, 1211, 1620, 1657, 1658, - 1091, 554, 630, 1627, 854, 767, 1244, 421, 687, 339, - 265, 1325, 902, 299, 505, 651, 1114, 393, 515, 659, - 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, - 1329, 727, 729, 20, 1398, 733, 872, 506, 381, 945, - 1096, 237, 16, 422, 1106, 382, 339, 339, 239, 1676, - 327, 724, 1384, 118, 1534, 1693, 752, 767, 49, 298, - 391, 1108, 298, 334, 344, 269, 1379, 383, 467, 293, - 294, 295, 1650, 301, 302, 339, 753, 1134, 315, 316, - 1321, 1699, 624, 917, 321, 324, 388, 326, 1003, 330, - 1357, 237, 1488, 237, 346, 347, 843, 97, 97, 808, - 1137, 872, 516, 795, 840, 803, 1703, 796, 569, 610, - 397, 1, 842, 852, 237, 339, 1120, 982, 299, 743, - 744, 299, 349, 403, 855, 756, 783, 423, 424, 1458, - 903, 200, 507, 793, 779, 1166, 1115, 1168, 1304, 878, - 1173, 965, 339, 339, 913, 1021, 1321, 1310, 437, 1399, - 383, 237, 502, 1486, 383, 999, 638, 20, 853, 826, - 438, 651, 883, 835, 684, 966, 611, 1672, 685, 1020, - 344, 536, 504, 686, 1040, 1673, 1337, 506, 470, 471, - 623, 118, 383, 846, 544, 502, 383, 943, 383, 383, - 383, 383, 967, 857, 298, 505, 383, 861, 1229, 446, - 879, 914, 1487, 6, 884, 885, 639, 1203, 952, 1035, - 874, 784, 358, 2, 118, 870, 1000, 397, 767, 607, - 53, 896, 507, 767, 624, 55, 404, 767, 397, 504, - 397, 870, 397, 908, 908, 609, 1674, 1237, 1383, 1239, - 201, 1240, 767, 237, 512, 1548, 607, 298, 379, 118, - 953, 505, 505, 635, 771, 1141, 767, 405, 772, 905, - 905, 767, 609, 636, 324, 767, 373, 1104, 403, 767, - 522, 926, 201, 560, 1581, 1582, 397, 1274, 1584, 560, - 767, 446, 447, 3, 4, 5, 6, 448, 767, 449, - 558, 1603, 450, 451, 1610, 452, 453, 1163, 1099, 545, - 380, 546, 815, 256, 490, 816, 640, 767, 549, 1626, - 118, 932, 624, 934, 203, 1042, 641, 823, 1004, 773, - 346, 881, 942, 381, 204, 491, 767, 594, 595, 754, - 382, 517, 1474, 1648, 560, 229, 872, 383, 826, 518, - 256, 843, 872, 826, 826, 97, 938, 1312, 250, 872, - 446, 256, 257, 373, 1475, 547, 614, 1132, 1136, 97, - 1680, 754, 507, 815, 447, 490, 816, 1489, 1389, 448, - 53, 449, 555, 379, 450, 451, 339, 452, 453, 984, - 251, 373, 1421, 1347, 252, 373, 491, 368, 129, 257, - 129, 505, 519, 383, 535, 129, 677, 872, 684, 265, - 257, 684, 685, 762, 684, 685, 527, 686, 685, 118, - 686, 1422, 1423, 686, 1424, 997, 1490, 765, 1425, 425, - 426, 835, 1426, 728, 730, 380, 375, 766, 826, 373, - 826, 1421, 797, 447, 253, 237, 1385, 1427, 448, 964, - 449, 765, 1207, 450, 451, 988, 452, 453, 381, 735, - 254, 766, 1401, 1420, 375, 382, 1436, 1162, 454, 829, - 1422, 1423, 383, 1424, 1015, 1391, 1016, 1425, 765, 1032, - 1022, 1426, 393, 380, 1023, 1401, 380, 1069, 766, 578, - 383, 1184, 742, 989, 1028, 1025, 1427, 870, 562, 786, - 908, 1038, 394, 118, 507, 1428, 381, 948, 756, 381, - 507, 563, 1420, 382, 608, 327, 382, 1052, 383, 949, - 383, 687, 383, 265, 368, 383, 362, 383, 564, 794, - 118, 786, 383, 651, 871, 1401, 762, 464, 1175, 651, - 756, 835, 447, 379, 752, 118, 118, 448, 339, 449, - 1154, 1064, 450, 451, 1428, 452, 453, 757, 1155, 968, - 1514, 794, 608, 1126, 753, 794, 969, 339, 1266, 1007, - 1069, 393, 741, 1474, 1528, 1069, 844, 1069, 791, 270, - 1069, 1069, 380, 1069, 1069, 1245, 790, 339, 788, 757, - 1099, 578, 826, 794, 523, 380, 1546, 368, 121, 337, - 337, 97, 794, 368, 327, 381, 791, 926, 97, 1301, - 1475, 1121, 382, 368, 790, 791, 1123, 368, 381, 1123, - 788, 563, 337, 790, 788, 382, 327, 616, 1071, 826, - 368, 835, 383, 211, 617, 1255, 736, 1468, 847, 1087, - 1153, 121, 393, 345, 1480, 121, 618, 1256, 229, 926, - 232, 775, 1336, 993, 45, 1184, 924, 993, 608, 993, - 925, 206, 368, 433, 1069, 119, 541, 923, 427, 428, - 542, 616, 1499, 974, 1503, 327, 507, 1614, 617, 229, - 339, 234, 429, 430, 1499, 1065, 1503, 826, 882, 826, - 618, 1160, 826, 1193, 899, 879, 882, 1161, 899, 1197, - 899, 879, 899, 879, 118, 1183, 118, 434, 119, 883, - 337, 1071, 119, 883, 337, 337, 1071, 883, 1071, 778, - 435, 1071, 1071, 779, 1071, 1071, 888, 555, 481, 502, - 888, 436, 888, 555, 888, 608, 342, 342, 835, 1667, - 1438, 527, 306, 1316, 306, 439, 121, 813, 554, 306, - 118, 814, 824, 118, 1052, 687, 542, 265, 687, 342, - 265, 687, 1223, 265, 431, 432, 985, 1190, 1065, 1191, - 986, 1192, 1230, 1065, 304, 1065, 1689, 870, 1065, 1065, - 337, 1065, 1065, 368, 368, 468, 368, 368, 64, 826, - 1471, 826, 339, 826, 474, 368, 1241, 1471, 1710, 1711, - 555, 368, 118, 1289, 476, 1071, 337, 1290, 879, 503, - 879, 368, 879, 119, 718, 368, 718, 348, 337, 1525, - 186, 1248, 186, 118, 186, 356, 337, 1006, 368, 1014, - 525, 1007, 337, 1036, 1123, 373, 1525, 779, 523, 373, - 507, 368, 373, 1128, 373, 607, 946, 1007, 1024, 373, - 946, 342, 342, 1275, 835, 1557, 870, 1558, 501, 237, - 368, 609, 1065, 337, 337, 303, 950, 304, 1031, 1183, - 950, 397, 578, 1286, 121, 1075, 523, 72, 239, 523, - 1319, 72, 256, 373, 398, 882, 199, 551, 199, 882, - 199, 368, 337, 607, 368, 598, 599, 337, 467, 826, - 1320, 600, 601, 399, 400, 1315, 526, 121, 239, 609, - 702, 704, 706, 708, 1151, 1233, 917, 342, 1235, 418, - 419, 420, 523, 401, 1099, 1246, 556, 1247, 467, 1343, - 1344, 257, 337, 394, 402, 826, 1241, 1112, 890, 1112, - 890, 119, 121, 342, 557, 174, 1319, 174, 181, 182, - 181, 182, 1071, 1072, 368, 342, 1020, 560, 1020, 337, - 337, 1107, 871, 342, 561, 368, 1320, 368, 871, 342, - 507, 581, 1400, 1419, 119, 871, 74, 205, 74, 205, - 175, 583, 175, 134, 585, 134, 368, 368, 826, 607, - 337, 628, 1320, 753, 339, 1400, 312, 593, 312, 651, - 342, 342, 141, 683, 141, 609, 368, 643, 826, 119, - 523, 319, 629, 319, 368, 1320, 739, 368, 1279, 1280, - 118, 777, 1419, 871, 996, 1140, 998, 1454, 757, 342, - 1352, 237, 381, 474, 342, 1677, 1678, 459, 459, 460, - 460, 780, 753, 1001, 1001, 1400, 767, 767, 1716, 693, - 695, 782, 698, 700, 710, 712, 381, 118, 810, 804, - 118, 339, 811, 118, 812, 1320, 607, 809, 849, 342, - 119, 850, 856, 1188, 858, 1479, 567, 862, 863, 864, - 449, 865, 609, 339, 887, 24, 888, 25, 561, 891, - 26, 449, 892, 449, 561, 27, 342, 342, 894, 28, - 898, 911, 121, 337, 39, 912, 931, 933, 30, 937, - 387, 946, 449, 449, 947, 32, 578, 956, 957, 118, - 33, 960, 972, 978, 34, 1005, 43, 979, 980, 1537, - 981, 987, 449, 1479, 337, 200, 36, 1008, 37, 1011, - 449, 917, 38, 449, 1009, 339, 1026, 1034, 1029, 561, - 39, 40, 1030, 1047, 41, 1051, 1066, 568, 1594, 1068, - 1073, 1082, 118, 339, 339, 1077, 554, 118, 1083, 119, - 1085, 118, 1086, 1088, 1091, 1621, 1093, 1100, 753, 1112, - 1113, 1116, 1122, 1131, 1145, 545, 121, 1138, 1633, 1635, - 1146, 339, 1149, 337, 339, 753, 407, 1159, 835, 1164, - 118, 1176, 1150, 1479, 1165, 1186, 1200, 1201, 753, 753, - 523, 1194, 1202, 121, 1210, 1621, 1621, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 1643, 121, 121, - 1212, 1213, 1224, 1231, 1226, 753, 753, 1232, 1238, 1228, - 342, 1250, 387, 338, 338, 1254, 1257, 1258, 1259, 1260, - 1262, 1263, 337, 119, 1267, 1271, 337, 1278, 1281, 1282, - 835, 1299, 118, 118, 1289, 1290, 338, 1311, 1318, 1330, - 1346, 342, 1621, 1349, 1354, 1351, 1355, 1359, 1358, 1367, - 119, 1364, 337, 1372, 1374, 1380, 1381, 1389, 1432, 1388, - 1434, 1433, 753, 507, 507, 119, 119, 835, 1491, 1505, - 1440, 1437, 1439, 1522, 1444, 5, 1441, 1451, 1509, 1456, - 1531, 1540, 1695, 1695, 1523, 1551, 1532, 1534, 1542, 1704, - 1704, 1543, 651, 651, 1545, 1547, 1553, 1549, 1513, 1554, - 342, 1474, 1560, 1561, 1715, 1570, 1574, 1567, 1573, 357, - 118, 1575, 1577, 1585, 1586, 364, 366, 368, 370, 372, - 374, 376, 378, 1589, 338, 337, 1599, 1604, 338, 338, - 1606, 39, 1618, 1616, 1395, 39, 1615, 1628, 1639, 1619, - 1625, 1663, 1653, 1664, 337, 1629, 39, 1640, 1642, 1645, - 1647, 39, 1660, 1668, 1669, 39, 1679, 121, 39, 121, - 1644, 1671, 1662, 342, 337, 1687, 1688, 1707, 337, 1713, - 39, 39, 1709, 9, 1714, 39, 39, 21, 1108, 1718, - 593, 39, 985, 39, 39, 39, 39, 553, 986, 342, - 720, 39, 1100, 554, 338, 39, 1395, 39, 504, 1001, - 721, 802, 341, 121, 35, 552, 121, 39, 505, 39, - 39, 35, 39, 656, 1484, 1485, 39, 36, 235, 36, - 338, 993, 657, 109, 119, 884, 119, 916, 893, 885, - 951, 952, 338, 917, 790, 953, 39, 345, 337, 368, - 338, 815, 1517, 955, 790, 1520, 338, 39, 137, 767, - 119, 767, 613, 315, 236, 121, 337, 337, 144, 138, - 120, 24, 342, 25, 316, 145, 26, 54, 21, 1177, - 119, 27, 1081, 119, 1284, 28, 683, 338, 338, 1482, - 1285, 342, 1445, 1483, 30, 26, 1335, 1661, 1630, 1670, - 1617, 32, 1646, 1612, 1515, 1535, 33, 1109, 1706, 1110, - 34, 342, 1452, 1111, 1449, 342, 338, 1536, 1698, 975, - 1105, 338, 36, 1636, 37, 1641, 1634, 1697, 38, 1375, - 1559, 1078, 119, 570, 357, 337, 39, 40, 1376, 876, - 41, 1043, 5, 85, 1130, 971, 53, 1214, 306, 993, - 591, 688, 689, 119, 1234, 1236, 338, 53, 714, 718, - 716, 723, 53, 720, 1033, 722, 53, 1297, 1361, 53, - 588, 337, 867, 1457, 441, 909, 1206, 1269, 1261, 337, - 357, 53, 53, 338, 338, 1225, 53, 53, 1195, 1276, - 1268, 1341, 53, 848, 53, 53, 53, 53, 1270, 1308, - 1143, 941, 53, 342, 342, 737, 53, 738, 53, 1455, - 1079, 1348, 1076, 0, 338, 0, 0, 0, 53, 0, - 0, 53, 0, 53, 0, 0, 0, 53, 387, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 671, 673, 675, 0, 53, 588, 588, - 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, - 588, 588, 588, 588, 0, 0, 0, 0, 0, 0, - 676, 0, 342, 0, 0, 0, 0, 0, 0, 24, - 0, 25, 0, 121, 26, 0, 0, 0, 0, 27, - 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 342, 0, 34, 0, - 683, 0, 0, 683, 0, 0, 683, 338, 0, 0, - 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, - 0, 0, 0, 0, 39, 40, 0, 0, 41, 0, - 119, 85, 26, 0, 0, 0, 26, 0, 338, 0, - 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, - 588, 0, 26, 0, 0, 0, 26, 0, 0, 26, - 0, 337, 121, 0, 40, 0, 0, 119, 0, 0, - 119, 26, 26, 119, 0, 0, 26, 26, 0, 0, - 0, 0, 26, 0, 26, 26, 26, 26, 0, 0, - 0, 0, 26, 0, 0, 0, 26, 338, 26, 0, - 0, 0, 0, 482, 0, 121, 0, 0, 26, 0, - 121, 26, 0, 26, 121, 0, 387, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 483, 0, 337, 119, - 0, 0, 1089, 890, 0, 0, 0, 26, 0, 484, - 0, 0, 0, 121, 486, 0, 23, 26, 26, 487, - 337, 488, 489, 490, 491, 0, 338, 0, 0, 492, - 338, 0, 0, 493, 0, 0, 0, 1494, 0, 0, - 0, 0, 119, 0, 0, 494, 0, 119, 495, 0, - 496, 119, 0, 0, 921, 922, 338, 0, 0, 0, - 0, 0, 0, 0, 0, 565, 0, 0, 342, 0, - 0, 0, 357, 0, 497, 121, 121, 0, 0, 0, - 119, 0, 337, 0, 337, 0, 0, 0, 0, 0, - 0, 337, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 337, 0, 337, 0, 0, 0, 0, 0, 1502, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1502, 0, 0, 0, 0, 1502, 1013, 337, 338, - 0, 337, 0, 0, 1496, 342, 24, 0, 25, 0, - 1502, 26, 119, 119, 0, 0, 27, 0, 338, 0, - 28, 0, 0, 121, 0, 0, 0, 342, 0, 30, - 0, 0, 1502, 0, 0, 0, 32, 0, 338, 0, - 0, 33, 338, 0, 0, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 357, 40, 0, 38, 0, 40, 0, 0, 0, 0, - 0, 39, 40, 0, 0, 41, 40, 0, 85, 0, - 0, 40, 0, 0, 0, 40, 0, 0, 40, 342, - 119, 342, 0, 0, 0, 0, 0, 0, 342, 0, - 40, 40, 0, 0, 0, 40, 40, 342, 342, 987, - 342, 40, 338, 40, 40, 40, 40, 0, 0, 0, - 0, 40, 0, 0, 0, 40, 0, 40, 0, 1089, - 338, 338, 0, 53, 0, 342, 0, 40, 342, 40, - 40, 0, 40, 0, 53, 0, 40, 0, 0, 53, - 0, 0, 0, 53, 0, 0, 53, 0, 0, 0, - 0, 0, 0, 387, 0, 0, 40, 0, 53, 53, - 0, 0, 0, 53, 53, 0, 40, 40, 0, 53, - 0, 53, 53, 53, 53, 0, 0, 0, 0, 53, - 0, 565, 0, 53, 0, 53, 565, 565, 0, 338, - 0, 0, 0, 0, 0, 53, 0, 0, 53, 0, - 53, 0, 0, 0, 53, 0, 0, 0, 0, 565, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 565, 565, 53, 338, 0, 565, 0, 0, - 565, 0, 565, 338, 565, 565, 565, 565, 588, 0, - 0, 0, 565, 0, 0, 0, 565, 0, 0, 0, - 565, 0, 0, 0, 38, 0, 0, 0, 565, 0, - 0, 565, 0, 565, 565, 0, 0, 0, 565, 565, - 0, 565, 565, 565, 565, 565, 565, 565, 565, 565, - 565, 565, 0, 0, 0, 0, 1158, 565, 565, 565, - 0, 565, 565, 0, 0, 0, 565, 565, 0, 565, - 565, 565, 565, 565, 565, 565, 0, 565, 565, 0, - 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, - 0, 565, 565, 565, 565, 565, 565, 565, 565, 565, - 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, - 565, 565, 565, 0, 0, 565, 0, 565, 0, 565, - 0, 0, 565, 0, 0, 987, 987, 0, 565, 0, - 0, 0, 0, 987, 987, 987, 987, 987, 0, 987, - 987, 0, 987, 987, 987, 987, 987, 987, 987, 987, - 910, 0, 0, 0, 987, 0, 987, 987, 987, 987, - 987, 987, 0, 0, 987, 0, 0, 0, 987, 987, - 0, 987, 987, 987, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 987, 0, 987, 0, 987, 987, 0, - 0, 987, 0, 987, 987, 987, 987, 987, 987, 987, - 987, 987, 987, 987, 987, 338, 987, 0, 0, 987, - 987, 0, 0, 987, 987, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 987, 987, - 987, 987, 987, 0, 0, 987, 987, 0, 0, 0, - 987, 987, 0, 0, 987, 0, 0, 0, 0, 987, - 987, 987, 987, 987, 0, 0, 0, 987, 0, 987, - 0, 0, 0, 0, 0, 987, 987, 0, 0, 0, - 0, 0, 338, 0, 0, 0, 0, 0, 0, 0, - 368, 38, 0, 0, 0, 38, 0, 0, 0, 0, - 987, 987, 987, 987, 338, 987, 38, 0, 0, 0, - 0, 38, 987, 0, 0, 38, 0, 0, 38, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 38, 38, 0, 0, 0, 38, 38, 0, 0, 0, - 0, 38, 0, 38, 38, 38, 38, 0, 0, 0, - 0, 38, 0, 0, 0, 38, 0, 38, 0, 0, - 0, 0, 0, 0, 0, 0, 338, 38, 338, 0, - 38, 0, 38, 0, 0, 338, 38, 0, 0, 0, - 0, 0, 0, 0, 338, 338, 0, 338, 0, 0, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 38, 38, 0, 0, - 0, 0, 338, 0, 0, 338, 910, 910, 0, 0, - 0, 0, 0, 0, 910, 910, 910, 910, 910, 0, - 910, 910, 0, 910, 910, 910, 910, 910, 910, 910, - 868, 0, 0, 0, 0, 910, 0, 910, 910, 910, - 910, 910, 910, 0, 0, 910, 0, 0, 0, 910, - 910, 0, 910, 910, 910, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 910, 0, 910, 0, 910, 910, - 0, 0, 910, 0, 910, 910, 910, 910, 910, 910, - 910, 910, 910, 910, 910, 910, 0, 910, 0, 0, - 910, 910, 0, 0, 910, 910, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 910, - 910, 910, 910, 910, 0, 0, 910, 910, 0, 0, - 0, 910, 910, 0, 0, 910, 0, 0, 0, 0, - 910, 910, 910, 910, 910, 0, 368, 0, 910, 0, - 910, 368, 368, 0, 0, 0, 910, 910, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, - 0, 910, 910, 910, 910, 0, 910, 368, 368, 0, - 358, 0, 368, 910, 0, 368, 0, 368, 0, 368, - 368, 368, 368, 0, 0, 0, 0, 368, 0, 0, - 0, 368, 0, 0, 0, 368, 0, 0, 0, 0, - 0, 0, 0, 368, 0, 0, 368, 0, 368, 368, - 0, 0, 0, 368, 368, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 0, 0, - 0, 0, 368, 368, 0, 0, 368, 368, 0, 0, - 0, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 0, 368, 368, 0, 0, 368, 368, 368, 368, - 368, 0, 0, 368, 368, 0, 0, 0, 368, 368, - 368, 368, 368, 368, 368, 368, 868, 0, 0, 0, - 0, 868, 868, 0, 0, 0, 0, 368, 0, 0, - 368, 0, 368, 0, 368, 368, 0, 368, 0, 0, - 0, 368, 368, 368, 868, 0, 0, 0, 0, 368, - 0, 368, 0, 368, 368, 368, 368, 868, 868, 0, - 398, 0, 868, 0, 0, 868, 0, 868, 368, 868, - 868, 868, 868, 0, 368, 368, 0, 868, 0, 0, - 0, 868, 0, 0, 0, 868, 0, 0, 0, 0, - 0, 0, 0, 868, 368, 0, 868, 0, 868, 868, - 368, 0, 368, 868, 868, 368, 868, 868, 868, 868, - 868, 868, 868, 868, 868, 868, 868, 0, 0, 0, - 0, 0, 868, 868, 0, 0, 868, 868, 0, 0, - 0, 868, 868, 868, 868, 868, 868, 0, 868, 868, - 868, 0, 868, 868, 0, 0, 868, 868, 868, 868, - 0, 0, 0, 868, 868, 0, 0, 0, 868, 868, - 868, 868, 868, 868, 868, 868, 358, 0, 368, 0, - 0, 358, 358, 0, 0, 0, 0, 868, 0, 0, - 868, 0, 868, 0, 868, 0, 0, 868, 0, 0, - 0, 0, 0, 868, 358, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 358, 358, 0, - 0, 0, 358, 0, 0, 358, 0, 358, 0, 358, - 358, 358, 358, 0, 0, 0, 0, 358, 0, 0, - 0, 358, 0, 0, 0, 358, 0, 0, 0, 0, - 0, 0, 0, 358, 0, 0, 358, 0, 358, 358, - 0, 0, 0, 358, 358, 0, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 0, 0, 0, - 0, 0, 358, 358, 0, 0, 358, 358, 0, 0, - 0, 358, 358, 358, 358, 358, 358, 0, 358, 358, - 358, 0, 358, 358, 0, 0, 358, 358, 358, 358, - 0, 0, 0, 358, 358, 0, 0, 0, 358, 358, - 358, 358, 358, 358, 358, 358, 398, 0, 403, 0, - 0, 398, 398, 0, 0, 0, 0, 358, 0, 0, - 358, 0, 358, 0, 358, 0, 0, 358, 0, 0, - 0, 0, 0, 358, 398, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 398, 398, 0, - 0, 0, 398, 0, 0, 398, 0, 398, 0, 398, - 398, 398, 398, 0, 0, 0, 0, 398, 0, 0, - 0, 398, 0, 0, 0, 398, 0, 0, 0, 0, - 0, 0, 0, 398, 0, 0, 398, 0, 398, 398, - 0, 0, 0, 398, 398, 0, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 0, 0, 0, - 0, 0, 398, 398, 368, 0, 398, 398, 0, 0, - 368, 398, 398, 0, 398, 398, 398, 0, 398, 398, - 398, 0, 398, 398, 0, 0, 398, 398, 398, 398, - 0, 0, 0, 398, 398, 0, 0, 0, 398, 398, - 398, 398, 398, 398, 398, 398, 368, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, - 398, 0, 398, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, - 0, 368, 368, 0, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 0, 0, 0, 0, - 0, 368, 698, 0, 368, 368, 0, 0, 0, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, - 368, 368, 0, 0, 368, 368, 368, 368, 368, 0, - 0, 368, 368, 0, 0, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 403, 0, 0, 0, 0, 0, - 403, 0, 0, 0, 0, 368, 0, 0, 368, 27, - 368, 0, 368, 0, 0, 368, 0, 0, 0, 0, - 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 698, 403, 0, 0, 0, - 698, 0, 698, 698, 698, 698, 698, 698, 698, 698, - 698, 698, 698, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 698, 698, 0, 0, 0, 0, 698, 0, - 698, 0, 698, 0, 698, 698, 698, 403, 0, 0, - 0, 403, 403, 0, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 0, 0, 0, 0, 0, - 0, 403, 0, 53, 403, 403, 0, 0, 0, 403, - 403, 403, 403, 403, 403, 0, 403, 403, 403, 0, - 403, 403, 0, 0, 403, 403, 403, 403, 0, 698, - 0, 403, 403, 0, 0, 0, 403, 403, 403, 403, - 403, 403, 403, 403, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 403, 0, 0, 403, 0, - 403, 0, 403, 33, 33, 403, 0, 0, 33, 0, - 0, 403, 33, 0, 33, 0, 0, 33, 0, 33, - 33, 0, 33, 0, 33, 0, 33, 0, 33, 33, - 33, 33, 0, 0, 33, 33, 0, 1090, 0, 0, - 33, 0, 33, 33, 33, 0, 0, 33, 33, 33, - 0, 33, 0, 0, 33, 0, 33, 33, 33, 33, - 0, 0, 0, 33, 33, 33, 0, 0, 33, 33, - 33, 0, 0, 0, 0, 0, 0, 33, 33, 0, - 33, 33, 0, 33, 33, 33, 0, 0, 0, 33, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 27, 0, 0, 33, - 27, 0, 0, 0, 0, 0, 0, 0, 33, 33, - 33, 27, 0, 0, 0, 0, 27, 0, 33, 0, - 27, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 27, 0, 0, 0, - 27, 27, 0, 37, 0, 0, 27, 37, 27, 27, - 27, 27, 0, 0, 0, 0, 27, 0, 37, 33, - 27, 0, 27, 37, 0, 0, 0, 37, 0, 0, - 37, 0, 27, 0, 0, 27, 0, 27, 0, 0, - 0, 27, 37, 37, 0, 0, 0, 37, 37, 0, - 53, 0, 0, 37, 53, 37, 37, 37, 37, 0, - 0, 27, 0, 37, 0, 53, 0, 37, 0, 37, - 53, 27, 27, 0, 53, 0, 0, 53, 0, 37, - 0, 0, 37, 0, 37, 0, 0, 0, 37, 53, - 53, 0, 0, 0, 53, 53, 0, 7, 0, 0, - 53, 54, 53, 53, 53, 53, 0, 0, 37, 0, - 53, 0, 54, 0, 53, 0, 53, 54, 0, 37, - 0, 54, 0, 0, 54, 0, 53, 0, 0, 53, - 0, 53, 0, 0, 0, 53, 54, 54, 0, 0, - 0, 54, 54, 0, 1090, 0, 0, 54, 53, 54, - 54, 54, 54, 0, 0, 53, 0, 54, 0, 53, - 0, 54, 0, 54, 53, 0, 0, 0, 53, 0, - 0, 53, 0, 54, 0, 0, 54, 0, 54, 0, - 0, 0, 54, 53, 53, 0, 0, 0, 53, 53, - 0, 0, 0, 0, 53, 0, 53, 53, 53, 53, - 0, 0, 54, 0, 53, 0, 0, 54, 53, 0, - 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 54, 53, 0, 53, 0, 54, 0, 53, - 0, 54, 0, 0, 54, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 54, 0, 53, - 0, 54, 54, 0, 0, 0, 0, 54, 0, 54, - 54, 54, 54, 0, 0, 0, 0, 54, 0, 0, - 0, 54, 0, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 56, 54, 0, 54, 0, - 0, 0, 54, 57, 24, 58, 25, 0, 0, 26, - 59, 0, 60, 61, 27, 62, 63, 64, 28, 0, - 0, 0, 54, 0, 65, 0, 66, 30, 67, 68, - 69, 70, 0, 0, 32, 0, 0, 0, 71, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 76, 77, 78, 79, 80, 81, 39, - 40, 82, 83, 41, 84, 0, 85, 0, 0, 86, - 87, 0, 0, 88, 89, 0, 871, 0, 0, 0, - 0, 0, 871, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, - 97, 0, 0, 0, 98, 0, 0, 0, 0, 99, - 100, 101, 102, 103, 0, 0, 0, 104, 871, 105, - 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 426, 0, 0, 0, 0, 0, 426, - 108, 109, 110, 111, 0, 0, 0, 0, 0, 871, - 0, 0, 200, 0, 871, 0, 871, 871, 871, 871, - 871, 871, 871, 871, 871, 871, 871, 871, 0, 0, - 0, 0, 0, 871, 871, 426, 871, 871, 0, 0, - 0, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 0, 871, 871, 0, 871, 871, 871, 871, 871, - 871, 871, 871, 871, 871, 0, 871, 871, 871, 871, - 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 871, 871, 871, 871, 871, 871, 871, 871, 0, - 871, 0, 871, 0, 871, 871, 871, 871, 0, 0, - 358, 426, 0, 871, 0, 0, 0, 0, 0, 426, - 358, 0, 426, 426, 426, 426, 0, 426, 0, 426, - 426, 0, 426, 426, 426, 426, 426, 0, 426, 426, - 426, 426, 871, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 0, 0, 0, 0, 358, - 0, 426, 0, 0, 426, 0, 0, 0, 0, 0, - 426, 0, 0, 871, 0, 0, 0, 0, 871, 0, - 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 871, 0, 0, 0, 0, 0, 871, 871, 0, - 871, 871, 0, 0, 0, 871, 871, 871, 871, 871, - 871, 871, 871, 871, 871, 1081, 871, 871, 0, 871, - 871, 871, 871, 871, 871, 871, 871, 871, 871, 0, - 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 871, 871, 368, 0, 0, 871, 0, 871, 368, - 0, 871, 0, 0, 0, 0, 0, 871, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + protected static readonly short [] yyTable = { 110, + 548, 239, 193, 597, 240, 18, 112, 823, 622, 551, + 460, 498, 520, 196, 829, 477, 198, 160, 573, 265, + 161, 766, 673, 459, 674, 789, 546, 544, 434, 502, + 866, 398, 675, 532, 1132, 643, 867, 581, 319, 44, + 1278, 1312, 996, 1070, 895, 565, 1135, 634, 258, 612, + 1108, 390, 976, 399, 977, 871, 311, 878, 165, 578, + 318, 540, 623, 233, 1193, 732, 235, 14, 902, 320, + 166, 323, 1502, 20, 1678, 300, 1194, 194, 356, 511, + 1339, 1531, 473, 1419, 198, 198, 1148, 732, 1377, 1396, + 509, 1509, 513, 1348, 333, 340, 255, 266, 1003, 347, + 514, 1005, 1426, 251, 613, 198, 863, 252, 440, 1299, + 1377, 974, 749, 794, 775, 167, 1194, 1, 759, 386, + 558, 599, 767, 1633, 1634, 1107, 16, 431, 1054, 255, + 1176, 993, 1486, 559, 334, 341, 1174, 1396, 750, 432, + 322, 733, 239, 775, 110, 461, 2, 775, 400, 975, + 560, 112, 168, 515, 942, 382, 169, 253, 322, 714, + 1377, 1488, 160, 512, 1494, 161, 901, 864, 200, 902, + 751, 1299, 502, 541, 1267, 542, 43, 256, 600, 931, + 1669, 1149, 732, 170, 732, 1510, 95, 476, 1503, 171, + 461, 441, 172, 173, 174, 1679, 442, 1135, 443, 198, + 198, 444, 445, 165, 446, 447, 175, 509, 95, 509, + 1657, 1054, 256, 862, 395, 166, 1054, 1303, 1054, 2, + 298, 1054, 1054, 902, 1054, 1054, 257, 381, 915, 543, + 15, 1195, 498, 920, 921, 501, 815, 477, 821, 732, + 195, 506, 597, 298, 574, 256, 468, 1054, 880, 466, + 467, 6, 265, 884, 886, 612, 256, 1245, 500, 503, + 167, 257, 265, 572, 509, 198, 575, 474, 978, 597, + 95, 1195, 507, 390, 256, 752, 299, 1607, 519, 882, + 267, 760, 448, 523, 525, 902, 3, 4, 5, 6, + 374, 198, 1011, 1177, 257, 1487, 1019, 168, 555, 299, + 1070, 169, 1054, 198, 1631, 257, 568, 885, 570, 531, + 613, 198, 523, 375, 569, 508, 1641, 198, 1642, 1366, + 376, 395, 345, 257, 1489, 583, 584, 1495, 170, 395, + 516, 395, 1070, 395, 171, 1345, 613, 172, 173, 174, + 577, 518, 797, 835, 620, 198, 198, 580, 903, 1123, + 20, 175, 1539, 929, 37, 596, 977, 1189, 598, 591, + 988, 554, 296, 571, 1638, 438, 619, 1221, 1332, 51, + 297, 198, 913, 1603, 799, 265, 198, 395, 501, 640, + 1285, 51, 1355, 648, 649, 650, 651, 652, 653, 654, + 655, 656, 657, 658, 626, 588, 589, 1652, 631, 1625, + 831, 268, 503, 503, 502, 1087, 932, 930, 298, 239, + 49, 198, 461, 833, 843, 713, 1639, 1482, 439, 743, + 846, 603, 744, 256, 887, 1484, 1374, 415, 1360, 1675, + 858, 1122, 977, 419, 420, 1095, 774, 387, 198, 198, + 1239, 742, 964, 1569, 898, 1070, 1464, 1524, 716, 718, + 55, 1070, 722, 676, 1596, 730, 1346, 298, 198, 798, + 613, 666, 1118, 416, 299, 346, 383, 327, 753, 1141, + 1077, 198, 257, 969, 904, 1097, 1557, 1558, 1540, 989, + 1560, 1101, 1538, 381, 734, 735, 565, 1333, 717, 719, + 747, 800, 914, 1579, 51, 1057, 1586, 298, 1284, 784, + 1286, 899, 1356, 1017, 1434, 229, 1115, 1288, 6, 342, + 985, 1602, 1648, 299, 384, 498, 673, 832, 674, 1626, + 1649, 775, 786, 754, 795, 818, 675, 640, 754, 827, + 834, 844, 754, 532, 1022, 1624, 1315, 847, 1375, 888, + 237, 612, 95, 770, 417, 418, 502, 754, 498, 838, + 237, 503, 1096, 299, 788, 237, 237, 237, 848, 51, + 1144, 850, 1146, 1206, 1181, 1151, 381, 256, 237, 203, + 381, 986, 855, 373, 754, 627, 385, 845, 1057, 859, + 298, 1650, 198, 1057, 398, 1057, 868, 799, 1057, 1057, + 859, 1057, 1057, 754, 596, 381, 613, 598, 1273, 381, + 955, 381, 381, 381, 381, 754, 399, 956, 198, 381, + 501, 37, 983, 204, 1057, 37, 257, 870, 890, 890, + 855, 596, 374, 491, 598, 628, 37, 373, 869, 344, + 1085, 37, 298, 881, 503, 37, 624, 559, 37, 762, + 1254, 1307, 1462, 763, 492, 375, 625, 477, 799, 800, + 37, 37, 376, 1080, 839, 37, 37, 754, 1214, 377, + 1216, 37, 1217, 37, 37, 37, 37, 198, 199, 1057, + 478, 37, 1397, 893, 893, 37, 374, 37, 1024, 51, + 491, 990, 855, 911, 815, 866, 613, 37, 629, 37, + 37, 1463, 37, 1465, 855, 250, 37, 818, 630, 375, + 855, 492, 818, 818, 764, 923, 376, 855, 477, 854, + 800, 391, 547, 377, 1113, 1117, 37, 908, 547, 256, + 1397, 392, 254, 917, 37, 919, 373, 939, 551, 1398, + 754, 478, 198, 237, 927, 754, 199, 199, 1399, 754, + 393, 394, 1466, 673, 270, 674, 673, 1400, 674, 673, + 116, 674, 501, 675, 754, 855, 675, 199, 198, 675, + 395, 374, 265, 463, 1140, 1222, 464, 523, 257, 940, + 1290, 396, 366, 547, 1401, 374, 503, 1398, 366, 1402, + 374, 754, 95, 827, 375, 366, 1399, 952, 1185, 366, + 818, 789, 818, 116, 971, 1400, 951, 116, 375, 752, + 754, 342, 366, 375, 1323, 376, 753, 388, 821, 531, + 376, 953, 377, 1403, 336, 336, 1367, 377, 1404, 327, + 69, 69, 1401, 752, 69, 781, 1001, 1402, 1002, 781, + 753, 1006, 198, 1007, 366, 336, 738, 1450, 954, 462, + 1162, 427, 201, 1012, 1009, 1490, 859, 597, 198, 374, + 752, 199, 199, 388, 781, 371, 1361, 753, 428, 1504, + 1450, 1403, 1656, 781, 198, 738, 1404, 381, 198, 265, + 374, 356, 375, 738, 201, 1412, 375, 1014, 640, 376, + 1089, 1522, 1000, 376, 640, 95, 827, 1153, 743, 425, + 426, 744, 741, 375, 1451, 116, 1046, 597, 1008, 1020, + 376, 387, 503, 773, 1444, 374, 366, 377, 503, 237, + 1246, 1456, 366, 373, 1013, 1034, 387, 199, 388, 366, + 440, 741, 705, 366, 705, 1080, 893, 778, 375, 336, + 336, 327, 773, 463, 387, 376, 366, 753, 373, 818, + 198, 519, 371, 199, 935, 909, 327, 676, 463, 910, + 1281, 928, 778, 777, 381, 199, 936, 1102, 198, 198, + 743, 778, 1104, 199, 327, 1104, 1182, 371, 366, 199, + 744, 371, 1232, 366, 127, 818, 127, 827, 777, 381, + 1121, 127, 1068, 381, 1233, 366, 381, 777, 381, 743, + 597, 366, 1182, 381, 366, 336, 1314, 199, 199, 744, + 1162, 766, 209, 441, 429, 605, 911, 961, 442, 1088, + 443, 605, 606, 444, 445, 371, 446, 447, 606, 1590, + 1475, 336, 198, 199, 607, 430, 116, 204, 199, 818, + 607, 818, 1475, 550, 818, 1133, 371, 421, 422, 1320, + 371, 336, 366, 371, 911, 371, 1161, 347, 1423, 1479, + 371, 423, 424, 347, 753, 304, 1138, 198, 95, 116, + 348, 1479, 1139, 199, 440, 198, 597, 1451, 95, 498, + 503, 477, 542, 497, 237, 336, 336, 1365, 542, 827, + 1414, 1643, 523, 1294, 371, 537, 294, 1171, 116, 538, + 199, 199, 433, 1175, 1501, 294, 265, 1053, 1054, 265, + 1210, 336, 265, 1212, 1168, 45, 1169, 304, 1170, 304, + 199, 1501, 1207, 465, 304, 1166, 117, 859, 1665, 499, + 1240, 769, 1340, 199, 1241, 770, 1341, 818, 1242, 818, + 1533, 818, 1534, 880, 1218, 880, 470, 880, 1686, 1687, + 551, 336, 974, 1447, 472, 1034, 974, 441, 974, 116, + 1447, 869, 442, 869, 443, 869, 345, 444, 445, 117, + 446, 447, 934, 117, 1225, 303, 934, 304, 336, 336, + 934, 184, 1104, 184, 676, 184, 519, 676, 366, 366, + 676, 366, 366, 62, 229, 805, 232, 339, 339, 806, + 1255, 827, 353, 197, 859, 197, 816, 197, 547, 596, + 538, 685, 598, 992, 1259, 1260, 1161, 993, 339, 1266, + 1018, 1328, 237, 519, 770, 239, 519, 1297, 461, 1109, + 1298, 1269, 70, 993, 936, 1270, 70, 938, 936, 521, + 503, 938, 576, 229, 199, 234, 1653, 1654, 458, 818, + 412, 413, 414, 239, 522, 1293, 461, 754, 754, 596, + 116, 1131, 598, 902, 691, 693, 695, 697, 1080, 552, + 199, 117, 519, 1223, 553, 1224, 198, 860, 1091, 860, + 1091, 375, 470, 818, 1218, 446, 871, 388, 871, 1297, + 548, 556, 1298, 446, 685, 446, 548, 557, 172, 685, + 172, 685, 685, 685, 685, 685, 685, 685, 685, 685, + 685, 685, 339, 339, 446, 446, 1376, 1395, 579, 1298, + 744, 179, 587, 179, 685, 180, 685, 180, 685, 199, + 685, 685, 685, 617, 446, 818, 618, 116, 1376, 198, + 728, 1298, 446, 682, 684, 446, 640, 999, 72, 999, + 72, 548, 596, 632, 818, 598, 519, 203, 173, 203, + 173, 982, 198, 984, 116, 1395, 381, 132, 744, 132, + 503, 310, 139, 310, 139, 317, 731, 317, 339, 116, + 116, 687, 689, 699, 701, 685, 748, 375, 1376, 796, + 768, 1298, 1692, 771, 199, 773, 802, 801, 803, 804, + 849, 841, 117, 842, 339, 851, 852, 336, 872, 853, + 854, 873, 1371, 876, 879, 896, 339, 877, 883, 724, + 199, 1455, 897, 198, 339, 198, 1430, 916, 596, 918, + 339, 598, 198, 119, 922, 117, 933, 934, 463, 959, + 944, 198, 198, 943, 198, 947, 965, 966, 43, 967, + 1478, 968, 972, 973, 994, 200, 991, 902, 339, 339, + 995, 997, 1478, 1010, 117, 1016, 1029, 1478, 1033, 198, + 1048, 1050, 198, 1371, 1055, 1513, 119, 1058, 1063, 1455, + 119, 1478, 1064, 1067, 339, 1066, 1048, 1072, 1069, 339, + 1074, 1460, 1461, 1081, 199, 1093, 1094, 1103, 1097, 1112, + 541, 1570, 441, 1478, 744, 1119, 38, 442, 1127, 443, + 199, 1126, 444, 445, 1129, 446, 447, 1050, 1597, 1493, + 1134, 744, 1496, 1137, 339, 117, 199, 1130, 1142, 1143, + 199, 1609, 1611, 1154, 744, 744, 1164, 366, 1172, 1191, + 1044, 116, 854, 116, 827, 366, 1178, 366, 854, 1455, + 1179, 339, 339, 1208, 1188, 854, 519, 1180, 1597, 1597, + 1190, 744, 744, 1201, 1202, 1204, 366, 366, 1209, 1048, + 1215, 1227, 336, 1619, 1048, 1231, 1048, 1234, 119, 1048, + 1048, 1235, 1048, 1048, 1236, 1237, 366, 116, 336, 1247, + 116, 1251, 1258, 725, 366, 1262, 1261, 366, 1270, 1269, + 1050, 835, 199, 854, 336, 1050, 827, 1050, 1279, 1289, + 1050, 1050, 1308, 1050, 1050, 1597, 1320, 1296, 744, 1322, + 199, 199, 1325, 1044, 1327, 1330, 117, 1331, 1044, 1334, + 1044, 1344, 116, 1044, 1044, 1335, 1044, 1044, 1349, 1351, + 1357, 1364, 1358, 827, 1365, 1408, 1410, 1409, 1467, 1415, + 1420, 1416, 1413, 116, 1427, 1417, 1481, 1507, 1671, 1671, + 1048, 1432, 1485, 1499, 1516, 1680, 1680, 1518, 640, 640, + 366, 1498, 1521, 1527, 1508, 1510, 366, 366, 1519, 1489, + 1691, 366, 1523, 366, 199, 366, 366, 366, 366, 1525, + 1529, 1050, 503, 503, 1530, 339, 1450, 1537, 1543, 336, + 366, 1536, 1546, 117, 1550, 1549, 366, 366, 1561, 119, + 1551, 1553, 1562, 1580, 1044, 1565, 1575, 1582, 1594, 199, + 1592, 339, 1591, 1595, 1604, 1601, 366, 199, 1618, 1605, + 117, 1615, 366, 1616, 366, 269, 1620, 366, 1621, 293, + 294, 295, 119, 301, 302, 117, 117, 1623, 315, 316, + 1629, 1636, 1640, 1644, 321, 324, 1645, 326, 1655, 330, + 1647, 1638, 550, 38, 343, 344, 1639, 38, 1663, 1664, + 1683, 119, 1685, 1689, 1690, 1694, 9, 1087, 38, 580, + 339, 966, 540, 38, 967, 707, 1079, 38, 541, 981, + 38, 397, 929, 491, 789, 708, 33, 539, 33, 492, + 933, 863, 38, 38, 643, 336, 663, 38, 38, 34, + 339, 233, 107, 38, 873, 38, 38, 38, 38, 34, + 974, 864, 644, 38, 897, 874, 865, 38, 401, 38, + 898, 866, 672, 777, 366, 343, 777, 799, 754, 38, + 135, 38, 38, 754, 38, 339, 116, 117, 38, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 313, + 142, 136, 118, 314, 143, 236, 54, 21, 38, 1155, + 1264, 339, 1062, 1265, 1458, 38, 38, 1421, 1313, 1637, + 116, 1606, 1459, 116, 1646, 1593, 116, 1622, 1511, 663, + 1588, 1090, 1086, 962, 663, 1091, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 117, 1092, 117, + 1491, 1682, 1428, 1512, 1425, 1674, 1617, 1612, 1610, 663, + 1352, 663, 1673, 663, 1535, 663, 663, 663, 199, 116, + 1059, 566, 1353, 119, 324, 663, 663, 958, 397, 894, + 663, 663, 116, 1025, 1192, 339, 306, 979, 585, 663, + 663, 663, 663, 117, 1111, 677, 117, 678, 1211, 1213, + 703, 339, 705, 711, 663, 707, 1015, 478, 709, 712, + 856, 1277, 1337, 24, 1433, 1249, 1238, 339, 545, 435, + 663, 339, 1184, 1256, 1173, 1250, 1248, 116, 1203, 1318, + 479, 199, 116, 840, 1124, 726, 116, 1287, 117, 727, + 1431, 1060, 1057, 480, 1324, 0, 336, 0, 482, 0, + 119, 0, 926, 483, 199, 484, 485, 486, 487, 117, + 0, 0, 0, 488, 0, 116, 0, 489, 0, 0, + 0, 1470, 0, 0, 0, 0, 0, 119, 0, 490, + 0, 0, 491, 0, 492, 0, 0, 0, 0, 671, + 0, 0, 119, 119, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 493, 336, + 0, 339, 339, 0, 0, 199, 0, 199, 0, 0, + 0, 0, 0, 0, 199, 116, 0, 0, 0, 0, + 0, 0, 336, 199, 199, 0, 199, 0, 0, 354, + 0, 0, 0, 358, 360, 362, 364, 366, 368, 370, + 372, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 199, 0, 0, 199, 1472, 0, 0, 0, 0, + 0, 0, 671, 0, 0, 339, 0, 671, 0, 671, + 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, + 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, + 0, 116, 671, 0, 671, 0, 671, 0, 671, 671, + 671, 336, 336, 0, 550, 0, 0, 0, 339, 671, + 0, 0, 0, 671, 671, 785, 0, 0, 0, 0, + 0, 0, 0, 0, 671, 671, 0, 0, 0, 336, + 0, 0, 336, 0, 0, 0, 0, 671, 0, 0, + 0, 0, 117, 0, 119, 0, 119, 0, 0, 0, + 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, + 24, 0, 836, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 117, 0, 0, 117, + 24, 0, 117, 0, 24, 0, 0, 24, 0, 0, + 119, 0, 0, 119, 0, 0, 0, 0, 0, 24, + 24, 0, 0, 0, 24, 24, 0, 0, 0, 0, + 24, 0, 24, 24, 24, 24, 0, 0, 0, 0, + 24, 0, 0, 0, 24, 117, 24, 36, 0, 0, + 0, 0, 0, 0, 0, 119, 24, 0, 117, 24, + 0, 24, 0, 0, 354, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, + 0, 0, 0, 0, 0, 24, 0, 478, 0, 366, + 0, 21, 24, 24, 0, 366, 0, 582, 0, 0, + 0, 0, 0, 117, 0, 0, 0, 354, 117, 0, + 479, 0, 117, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 480, 0, 0, 0, 0, 482, 339, + 0, 366, 0, 483, 0, 484, 485, 486, 487, 0, + 0, 117, 552, 488, 0, 0, 0, 489, 0, 0, + 0, 1470, 0, 0, 0, 0, 0, 0, 0, 490, + 0, 0, 491, 0, 492, 0, 0, 660, 662, 664, + 0, 0, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 582, 493, 0, + 0, 0, 339, 0, 0, 1471, 0, 366, 0, 0, + 0, 117, 366, 0, 0, 366, 0, 366, 366, 0, + 0, 0, 366, 366, 0, 339, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 0, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1472, 366, 366, 0, 0, + 0, 0, 0, 0, 366, 0, 0, 366, 998, 0, + 0, 0, 0, 366, 0, 0, 0, 0, 0, 119, + 0, 0, 0, 0, 0, 0, 339, 117, 339, 0, + 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, + 0, 0, 0, 0, 339, 339, 582, 339, 0, 0, + 0, 0, 0, 672, 36, 0, 672, 0, 36, 672, + 0, 0, 968, 0, 0, 0, 0, 0, 0, 36, + 0, 0, 339, 0, 36, 339, 0, 0, 36, 0, + 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 36, 0, 0, 0, 36, 36, + 0, 0, 119, 0, 36, 0, 36, 36, 36, 36, + 0, 0, 0, 0, 36, 119, 0, 0, 36, 0, + 36, 0, 875, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 36, 0, 36, 0, 0, 0, 36, + 0, 0, 0, 0, 0, 0, 0, 0, 552, 0, + 0, 0, 0, 552, 552, 0, 0, 0, 0, 36, + 119, 0, 0, 0, 0, 119, 36, 36, 0, 119, + 0, 0, 0, 906, 907, 0, 552, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 552, + 552, 354, 0, 0, 552, 0, 0, 552, 119, 552, + 0, 552, 552, 552, 552, 0, 0, 0, 0, 552, + 0, 0, 0, 552, 0, 0, 0, 552, 0, 0, + 0, 0, 0, 0, 0, 552, 0, 0, 552, 0, + 552, 552, 891, 0, 0, 552, 552, 0, 552, 552, + 552, 552, 552, 552, 552, 552, 552, 552, 552, 0, + 0, 0, 0, 0, 552, 552, 552, 0, 119, 0, + 552, 552, 0, 552, 552, 552, 552, 552, 552, 552, + 0, 552, 552, 0, 552, 552, 552, 552, 552, 552, + 552, 552, 552, 552, 0, 552, 552, 552, 552, 552, + 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, + 552, 552, 552, 552, 552, 552, 552, 0, 0, 552, + 0, 552, 354, 552, 0, 0, 552, 0, 968, 968, + 0, 0, 552, 0, 0, 0, 968, 968, 968, 968, + 968, 0, 968, 968, 119, 968, 968, 968, 968, 968, + 968, 968, 968, 0, 0, 0, 0, 968, 0, 968, + 968, 968, 968, 968, 968, 0, 0, 968, 0, 366, + 0, 968, 968, 0, 968, 968, 968, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 968, 0, 968, 0, + 968, 968, 0, 0, 968, 0, 968, 968, 968, 968, + 968, 968, 968, 968, 968, 968, 968, 968, 0, 968, + 0, 0, 968, 968, 0, 0, 968, 968, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 968, 968, 968, 968, 968, 0, 0, 0, 0, + 968, 968, 0, 0, 968, 0, 0, 0, 0, 968, + 968, 968, 968, 968, 0, 0, 0, 968, 0, 968, + 0, 0, 0, 0, 0, 968, 968, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 968, 968, 968, 968, 0, 968, 0, 0, 891, 891, + 0, 0, 968, 0, 582, 0, 891, 891, 891, 891, + 891, 0, 891, 891, 0, 891, 891, 891, 891, 891, + 891, 891, 0, 851, 0, 0, 0, 891, 0, 891, + 891, 891, 891, 891, 891, 0, 0, 891, 0, 0, + 0, 891, 891, 0, 891, 891, 891, 0, 1136, 0, + 0, 0, 0, 0, 0, 0, 891, 0, 891, 0, + 891, 891, 0, 0, 891, 0, 891, 891, 891, 891, + 891, 891, 891, 891, 891, 891, 891, 891, 0, 891, + 0, 0, 891, 891, 0, 0, 891, 891, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 891, 891, 891, 891, 891, 0, 0, 0, 0, + 891, 891, 0, 0, 891, 0, 0, 0, 0, 891, + 891, 891, 891, 891, 0, 366, 0, 891, 0, 891, + 366, 366, 0, 0, 0, 891, 891, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 366, 356, 0, 0, 0, 0, 0, + 891, 891, 891, 891, 0, 891, 366, 366, 0, 0, + 0, 366, 891, 0, 366, 0, 366, 0, 366, 366, + 366, 366, 0, 0, 0, 0, 366, 0, 0, 0, + 366, 0, 0, 0, 366, 0, 0, 0, 0, 0, + 0, 0, 366, 0, 0, 366, 0, 366, 366, 0, + 0, 0, 366, 366, 0, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 0, 0, 0, + 0, 366, 366, 0, 0, 0, 0, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 0, 366, 366, + 0, 0, 366, 366, 366, 366, 366, 0, 0, 366, + 366, 0, 0, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 0, 0, 0, 0, 0, 0, 0, 851, + 0, 0, 0, 366, 851, 851, 366, 0, 366, 0, + 366, 0, 0, 366, 0, 0, 0, 0, 0, 366, + 0, 396, 0, 0, 0, 0, 0, 851, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 851, 851, 0, 0, 0, 851, 0, 0, 851, 0, + 851, 0, 851, 851, 851, 851, 0, 0, 0, 0, + 851, 0, 0, 0, 851, 0, 0, 0, 851, 0, + 0, 0, 0, 0, 0, 0, 851, 0, 0, 851, + 0, 851, 851, 0, 0, 0, 851, 851, 0, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 0, 0, 0, 0, 0, 851, 851, 0, 0, 0, + 0, 851, 851, 851, 851, 851, 851, 0, 851, 851, + 851, 0, 851, 851, 0, 0, 851, 851, 851, 851, + 356, 0, 0, 851, 851, 356, 356, 0, 851, 851, + 851, 851, 851, 851, 851, 851, 366, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 851, 356, 0, + 851, 0, 851, 0, 851, 0, 0, 851, 0, 0, + 0, 356, 356, 851, 0, 0, 356, 0, 0, 356, + 0, 356, 0, 356, 356, 356, 356, 0, 0, 0, + 0, 356, 0, 0, 0, 356, 0, 0, 0, 356, + 0, 0, 0, 0, 0, 0, 0, 356, 0, 0, + 356, 0, 356, 356, 0, 0, 0, 356, 356, 0, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 0, 0, 0, 0, 0, 356, 356, 0, 0, + 0, 0, 356, 356, 356, 356, 356, 356, 0, 356, + 356, 356, 0, 356, 356, 0, 0, 356, 356, 356, + 356, 0, 0, 0, 356, 356, 0, 0, 0, 356, + 356, 356, 356, 356, 356, 356, 356, 396, 0, 0, + 0, 0, 396, 396, 0, 0, 0, 0, 356, 0, + 0, 356, 0, 356, 401, 356, 0, 0, 356, 0, + 0, 0, 0, 0, 356, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 396, 396, + 0, 0, 0, 396, 0, 0, 396, 0, 396, 0, + 396, 396, 396, 396, 0, 0, 0, 0, 396, 0, + 0, 0, 396, 0, 0, 0, 396, 0, 0, 0, + 0, 0, 0, 0, 396, 0, 0, 396, 0, 396, + 396, 0, 0, 0, 396, 396, 0, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, 0, 0, + 0, 0, 0, 396, 396, 0, 0, 0, 0, 396, + 396, 0, 396, 396, 396, 0, 396, 396, 396, 0, + 396, 396, 366, 0, 396, 396, 396, 396, 366, 0, + 0, 396, 396, 0, 0, 0, 396, 396, 396, 396, + 396, 396, 396, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 396, 0, 0, 396, 0, + 396, 0, 0, 0, 366, 0, 0, 0, 0, 0, + 0, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 368, 0, 0, 1081, 0, - 0, 0, 0, 1081, 0, 1081, 1081, 1081, 1081, 1081, - 1081, 1081, 1081, 1081, 1081, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1081, 1081, 0, 0, 0, - 0, 1081, 0, 1081, 0, 1081, 368, 1081, 1081, 1081, - 0, 368, 0, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 0, 0, 0, 0, 0, - 368, 368, 0, 368, 368, 0, 0, 0, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 0, 368, - 368, 0, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 1081, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 0, 368, 1187, 0, 368, - 0, 368, 368, 0, 368, 0, 24, 0, 25, 0, - 368, 26, 0, 0, 0, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 366, 0, 0, 0, 366, + 366, 0, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 0, 0, 0, 0, 1060, 366, + 0, 0, 0, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 0, 366, 366, 0, 0, 366, + 366, 366, 366, 366, 0, 0, 366, 366, 0, 0, + 0, 366, 366, 366, 366, 366, 366, 366, 366, 0, + 401, 0, 0, 0, 0, 25, 401, 0, 0, 0, + 366, 0, 0, 366, 0, 366, 0, 366, 0, 0, + 366, 0, 0, 0, 0, 0, 366, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1060, 401, 0, 0, 0, 1060, 0, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1060, 0, 1060, 0, 1060, 35, 1060, 1060, 1060, + 0, 0, 0, 401, 0, 0, 0, 401, 401, 0, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 0, 0, 0, 0, 0, 0, 401, 0, 0, + 0, 0, 401, 401, 401, 401, 401, 401, 0, 401, + 401, 401, 0, 401, 401, 0, 0, 401, 401, 401, + 401, 0, 1060, 0, 401, 401, 0, 0, 0, 401, + 401, 401, 401, 401, 401, 401, 401, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 401, 0, + 0, 401, 0, 401, 0, 401, 31, 31, 401, 0, + 0, 31, 0, 0, 401, 31, 0, 31, 0, 0, + 31, 0, 31, 31, 0, 31, 0, 31, 0, 31, + 1068, 31, 31, 31, 31, 0, 0, 31, 31, 0, + 0, 0, 0, 31, 0, 31, 31, 31, 0, 0, + 31, 31, 31, 0, 31, 0, 0, 31, 0, 31, + 31, 31, 31, 0, 0, 0, 31, 31, 31, 0, + 0, 31, 31, 31, 0, 0, 0, 0, 0, 0, + 31, 31, 0, 31, 31, 0, 31, 31, 31, 0, + 0, 0, 31, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 25, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 31, 0, 0, 0, 0, 25, 31, 31, + 31, 0, 25, 0, 0, 0, 25, 0, 31, 25, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 25, 25, 0, 0, 0, 25, 25, 0, 0, + 0, 0, 25, 0, 25, 25, 25, 25, 0, 0, + 0, 0, 25, 0, 0, 0, 25, 0, 25, 31, + 0, 0, 0, 35, 0, 0, 0, 35, 25, 1069, + 0, 25, 0, 25, 0, 0, 0, 25, 35, 0, + 0, 0, 0, 35, 0, 0, 0, 35, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 0, 35, 35, 25, 25, 0, 35, 35, 0, + 0, 0, 52, 35, 0, 35, 35, 35, 35, 0, + 0, 0, 0, 35, 0, 0, 0, 35, 0, 35, + 0, 0, 0, 0, 5, 0, 0, 0, 51, 35, + 0, 0, 35, 0, 35, 0, 0, 0, 35, 51, + 0, 0, 0, 0, 51, 0, 0, 0, 51, 0, + 0, 51, 0, 0, 0, 0, 0, 0, 35, 0, + 0, 0, 0, 51, 51, 0, 35, 1068, 51, 51, + 0, 51, 0, 0, 51, 0, 51, 51, 51, 51, + 0, 0, 51, 0, 51, 0, 0, 51, 51, 0, + 51, 51, 0, 0, 51, 0, 0, 0, 0, 0, + 51, 0, 0, 51, 0, 51, 51, 51, 0, 51, + 0, 51, 51, 0, 0, 0, 0, 51, 0, 51, + 51, 51, 51, 0, 0, 0, 0, 51, 0, 51, + 51, 51, 0, 51, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 51, 0, 51, 51, 0, 51, 0, + 51, 0, 51, 0, 51, 0, 0, 51, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, + 51, 0, 51, 7, 51, 51, 0, 52, 0, 0, + 51, 0, 51, 51, 51, 51, 0, 0, 52, 0, + 51, 0, 0, 52, 51, 0, 51, 52, 0, 0, + 52, 0, 0, 0, 0, 0, 51, 0, 0, 51, + 0, 51, 52, 52, 0, 51, 1069, 52, 52, 0, + 51, 0, 0, 52, 0, 52, 52, 52, 52, 0, + 0, 51, 0, 52, 0, 51, 51, 52, 0, 52, + 51, 0, 0, 51, 0, 0, 0, 0, 0, 52, + 0, 0, 52, 0, 52, 51, 51, 0, 52, 52, + 51, 51, 0, 52, 0, 0, 51, 0, 51, 51, + 51, 51, 0, 0, 52, 0, 51, 0, 52, 52, + 51, 0, 51, 52, 0, 0, 52, 0, 0, 0, + 0, 0, 51, 0, 0, 51, 0, 51, 52, 52, + 0, 51, 0, 52, 52, 0, 0, 0, 0, 52, + 0, 52, 52, 52, 52, 0, 0, 0, 0, 52, + 0, 51, 0, 52, 0, 52, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 0, 56, 52, 0, + 52, 0, 0, 0, 52, 57, 24, 58, 25, 0, + 0, 26, 59, 0, 60, 61, 27, 62, 63, 64, + 28, 0, 0, 0, 52, 0, 65, 0, 66, 30, + 67, 68, 69, 70, 0, 0, 32, 0, 0, 0, + 71, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 74, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 76, 77, 78, 79, 80, + 81, 39, 40, 82, 83, 41, 84, 0, 85, 0, + 0, 86, 87, 0, 0, 88, 89, 854, 0, 0, + 0, 478, 0, 854, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 93, 94, 0, 0, 0, 0, 95, + 0, 0, 0, 96, 479, 0, 0, 0, 97, 98, + 99, 100, 101, 0, 0, 0, 102, 480, 103, 854, + 0, 0, 482, 0, 104, 105, 0, 483, 0, 484, + 485, 486, 487, 0, 0, 0, 0, 488, 0, 0, + 0, 489, 0, 0, 0, 0, 0, 0, 0, 106, + 107, 108, 109, 490, 0, 0, 491, 0, 492, 0, + 854, 200, 0, 0, 0, 854, 649, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 854, 854, 0, + 0, 0, 493, 0, 854, 854, 0, 0, 0, 854, + 854, 854, 854, 854, 854, 854, 854, 854, 854, 0, + 854, 854, 0, 854, 854, 854, 854, 854, 854, 854, + 854, 854, 854, 0, 854, 854, 854, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 0, 854, 1489, + 854, 0, 854, 854, 854, 854, 0, 0, 0, 649, + 0, 854, 0, 0, 649, 0, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 649, + 854, 649, 0, 649, 0, 649, 649, 649, 0, 0, + 0, 0, 0, 649, 649, 649, 649, 0, 0, 0, + 649, 649, 0, 0, 0, 649, 649, 649, 649, 649, + 649, 649, 649, 0, 0, 0, 0, 0, 0, 0, + 0, 854, 0, 0, 649, 0, 854, 0, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, + 649, 0, 0, 0, 0, 854, 854, 0, 0, 0, + 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, + 0, 854, 854, 0, 854, 854, 854, 854, 854, 854, + 854, 854, 854, 854, 0, 854, 854, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 854, 366, 563, + 0, 854, 0, 854, 366, 0, 854, 0, 24, 0, + 25, 0, 854, 26, 0, 0, 0, 0, 27, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 366, 0, 0, 33, 0, 0, 0, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, + 564, 366, 0, 0, 0, 0, 366, 0, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 0, 0, 0, 0, 0, 366, 366, 0, 0, 0, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 0, 366, 366, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 0, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 0, 366, 602, + 0, 366, 381, 366, 366, 0, 366, 0, 24, 0, + 25, 0, 366, 26, 0, 0, 0, 0, 27, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 366, 0, 0, 33, 0, 0, 0, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, + 85, 366, 0, 0, 0, 0, 366, 0, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 0, 0, 0, 0, 0, 366, 366, 0, 0, 0, + 0, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 0, 366, 366, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 0, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 0, 554, 665, + 0, 366, 381, 366, 554, 0, 366, 0, 24, 0, + 25, 0, 366, 26, 0, 0, 0, 0, 27, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 554, 0, 0, 33, 0, 0, 0, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, + 85, 554, 0, 0, 0, 0, 554, 0, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 0, + 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 0, 554, 554, 0, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 0, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 999, 550, 0, + 0, 0, 381, 554, 550, 0, 24, 0, 25, 0, + 0, 26, 554, 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 368, 0, - 0, 33, 0, 0, 0, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 550, 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, - 0, 39, 40, 0, 0, 41, 0, 0, 85, 368, - 0, 0, 0, 0, 368, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 0, 0, - 0, 0, 0, 368, 368, 0, 368, 368, 0, 0, - 0, 0, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 0, 368, 368, 0, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 0, 567, - 0, 0, 368, 387, 368, 567, 0, 368, 0, 0, - 0, 482, 0, 368, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 483, 0, 0, 0, 0, 0, - 0, 567, 0, 0, 0, 0, 0, 484, 0, 0, - 0, 0, 486, 0, 0, 0, 0, 487, 0, 488, - 489, 490, 491, 0, 0, 0, 0, 492, 0, 0, - 0, 493, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 567, 494, 0, 0, 495, 567, 496, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 0, 0, 693, 0, 0, 0, 0, 567, 0, 567, - 567, 0, 497, 0, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, 0, 567, 567, 0, 567, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 0, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 567, 0, 563, 0, 0, 0, 0, 567, 563, 0, - 0, 0, 1513, 0, 0, 0, 567, 0, 0, 0, - 0, 0, 0, 0, 0, 693, 0, 0, 0, 0, - 693, 0, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 693, 0, 563, 0, 0, 0, 0, 0, - 0, 0, 693, 693, 0, 0, 0, 0, 693, 0, - 693, 0, 693, 0, 693, 693, 693, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 693, 0, 0, 0, 0, 563, 0, 0, 0, 0, - 563, 693, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 563, 563, 693, 0, 694, 0, 0, 0, 0, - 563, 0, 563, 563, 0, 0, 0, 563, 563, 693, - 563, 563, 563, 563, 563, 563, 563, 0, 563, 563, - 0, 563, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 0, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, - 563, 563, 563, 563, 0, 571, 0, 0, 0, 0, - 563, 571, 0, 563, 0, 0, 0, 0, 0, 563, - 0, 0, 0, 0, 0, 0, 0, 0, 694, 0, - 0, 0, 0, 694, 0, 694, 694, 694, 694, 694, - 694, 694, 694, 694, 694, 694, 0, 571, 0, 0, - 0, 0, 0, 0, 0, 694, 694, 0, 0, 0, - 0, 694, 0, 694, 0, 694, 0, 694, 694, 694, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 694, 0, 0, 0, 0, 571, 0, - 0, 0, 0, 571, 694, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 694, 0, 696, 0, - 0, 0, 0, 571, 0, 571, 571, 0, 0, 0, - 0, 571, 694, 571, 571, 571, 571, 571, 571, 571, - 0, 571, 571, 0, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 0, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 0, 368, 0, - 0, 0, 0, 571, 368, 0, 571, 0, 0, 0, - 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, - 0, 696, 0, 0, 0, 0, 696, 0, 696, 696, - 696, 696, 696, 696, 696, 696, 696, 696, 696, 0, - 368, 0, 0, 0, 0, 0, 0, 0, 696, 696, - 0, 0, 0, 0, 696, 0, 696, 0, 696, 0, - 696, 696, 696, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 696, 0, 0, 0, - 0, 368, 0, 0, 0, 0, 368, 0, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, - 0, 0, 0, 0, 0, 0, 368, 0, 368, 368, - 0, 0, 0, 0, 368, 696, 368, 368, 368, 368, - 368, 368, 368, 0, 368, 368, 0, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 0, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 0, 486, 0, 0, 390, 0, 368, 486, 0, 368, - 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 390, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 390, 0, 0, 486, 0, 390, 0, 0, 257, 0, - 390, 0, 390, 390, 390, 390, 0, 0, 0, 0, - 390, 0, 0, 0, 390, 0, 0, 0, 390, 0, - 0, 0, 0, 0, 0, 0, 390, 0, 0, 390, - 0, 390, 0, 0, 486, 0, 0, 0, 0, 486, - 0, 486, 486, 486, 486, 486, 486, 486, 486, 486, - 486, 486, 0, 0, 0, 390, 0, 0, 0, 486, - 0, 486, 486, 0, 0, 390, 0, 486, 0, 486, - 486, 486, 486, 486, 486, 486, 0, 486, 486, 0, - 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, - 0, 486, 486, 486, 486, 486, 486, 486, 486, 486, - 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, - 486, 486, 486, 0, 598, 390, 389, 0, 0, 486, - 598, 0, 486, 0, 0, 0, 0, 0, 486, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 389, 0, 0, 0, 598, 389, 0, 0, - 256, 0, 389, 0, 389, 389, 389, 389, 0, 0, - 0, 0, 389, 0, 0, 0, 389, 368, 0, 0, - 389, 0, 0, 368, 0, 0, 0, 871, 389, 0, - 0, 389, 0, 389, 0, 0, 0, 598, 0, 0, - 0, 0, 598, 0, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 0, 0, 389, 0, 368, - 0, 0, 0, 0, 598, 598, 0, 389, 0, 0, - 598, 0, 598, 0, 598, 871, 598, 598, 598, 0, - 598, 598, 0, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 0, 0, 0, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 358, 598, 0, 389, 368, 0, - 358, 0, 0, 0, 368, 368, 0, 0, 0, 0, - 0, 598, 0, 368, 368, 368, 368, 368, 368, 368, - 871, 368, 0, 368, 368, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 358, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, - 0, 0, 0, 368, 0, 368, 0, 0, 368, 0, - 0, 0, 0, 0, 368, 0, 0, 358, 0, 0, - 0, 0, 358, 0, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 0, 0, 0, 0, 0, - 0, 358, 426, 640, 358, 358, 0, 0, 0, 640, - 358, 358, 358, 0, 358, 426, 358, 358, 358, 0, - 358, 358, 0, 0, 358, 358, 358, 358, 0, 0, - 0, 358, 358, 0, 426, 426, 358, 358, 358, 358, - 358, 358, 358, 358, 0, 640, 0, 0, 0, 0, - 0, 0, 0, 0, 426, 358, 0, 0, 0, 0, - 358, 0, 426, 0, 0, 426, 0, 0, 0, 0, - 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 640, 0, 0, 0, - 0, 640, 0, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 0, 0, 0, 0, 0, 0, - 0, 427, 644, 640, 640, 0, 0, 0, 644, 640, - 0, 640, 427, 640, 427, 640, 640, 640, 0, 640, - 640, 0, 0, 640, 640, 640, 640, 0, 0, 0, - 640, 640, 0, 427, 427, 640, 640, 640, 640, 640, - 640, 640, 640, 0, 644, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 640, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 427, 0, 0, 0, 0, 0, - 640, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, - 644, 0, 644, 644, 644, 644, 644, 644, 644, 644, - 644, 644, 644, 0, 0, 0, 0, 0, 0, 0, - 430, 643, 644, 644, 0, 0, 0, 643, 644, 0, - 644, 430, 644, 430, 644, 644, 644, 0, 644, 644, - 0, 0, 644, 644, 644, 644, 0, 0, 0, 644, - 644, 0, 430, 430, 644, 644, 644, 644, 644, 644, - 644, 644, 0, 643, 0, 0, 0, 0, 0, 0, - 0, 0, 430, 644, 0, 0, 0, 0, 0, 0, - 430, 0, 0, 430, 0, 0, 0, 0, 0, 644, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 643, 0, 0, 0, 0, 643, - 0, 643, 643, 643, 643, 643, 643, 643, 643, 643, - 643, 643, 0, 0, 0, 0, 0, 0, 0, 440, - 358, 643, 643, 0, 0, 0, 358, 643, 0, 643, - 440, 643, 440, 643, 643, 643, 0, 643, 643, 0, - 0, 643, 643, 643, 643, 0, 0, 0, 643, 643, - 0, 440, 440, 643, 643, 643, 643, 643, 643, 643, - 643, 0, 358, 0, 0, 0, 0, 0, 0, 0, - 0, 440, 643, 0, 0, 0, 0, 0, 0, 440, - 0, 0, 440, 0, 0, 0, 0, 0, 643, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 358, 0, 0, 0, 0, 358, 0, - 358, 358, 358, 358, 358, 358, 358, 358, 358, 358, - 358, 0, 0, 0, 0, 0, 0, 358, 620, 0, - 358, 358, 0, 0, 620, 0, 358, 358, 358, 0, - 358, 0, 358, 358, 358, 0, 358, 358, 0, 0, - 358, 358, 358, 358, 0, 0, 0, 358, 358, 0, - 0, 0, 358, 358, 358, 358, 358, 358, 358, 358, - 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 0, 0, 0, 0, 358, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 358, 0, 0, - 862, 0, 0, 0, 0, 0, 862, 0, 0, 0, - 0, 620, 0, 0, 0, 0, 620, 0, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, 620, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 620, 620, - 0, 0, 862, 0, 620, 0, 620, 0, 620, 0, - 620, 620, 620, 0, 620, 620, 0, 0, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 0, 0, 0, - 620, 620, 620, 620, 620, 620, 620, 620, 0, 0, - 0, 0, 0, 862, 0, 0, 0, 0, 862, 620, - 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, - 862, 0, 0, 0, 0, 620, 0, 862, 627, 0, - 862, 862, 0, 0, 627, 0, 862, 0, 862, 0, - 862, 0, 862, 862, 862, 0, 862, 862, 0, 0, - 862, 862, 862, 862, 0, 0, 0, 862, 862, 0, - 0, 0, 862, 862, 862, 862, 862, 862, 862, 862, - 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 862, 0, 0, 0, 0, 862, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 862, 0, 0, - 993, 0, 0, 0, 0, 0, 993, 0, 0, 0, - 0, 627, 0, 0, 0, 0, 627, 0, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, 627, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 627, 627, - 0, 0, 993, 0, 627, 0, 627, 0, 627, 0, - 627, 627, 627, 0, 627, 627, 0, 0, 627, 627, - 627, 627, 0, 0, 0, 627, 627, 0, 0, 0, + 0, 39, 40, 0, 0, 41, 0, 0, 85, 0, + 0, 550, 0, 0, 0, 0, 550, 0, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 0, + 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, + 550, 550, 0, 550, 550, 550, 550, 550, 550, 550, + 0, 550, 550, 0, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 0, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 0, 558, 1165, + 381, 0, 0, 550, 558, 0, 550, 0, 24, 0, + 25, 0, 550, 26, 0, 0, 0, 0, 27, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 558, 0, 0, 33, 0, 0, 0, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 0, 0, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 39, 40, 0, 0, 41, 0, 0, + 85, 558, 0, 0, 0, 0, 558, 0, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 0, + 0, 0, 0, 0, 0, 0, 558, 0, 0, 0, + 0, 558, 0, 558, 558, 558, 558, 558, 558, 558, + 0, 558, 558, 0, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 0, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 0, 366, 0, + 0, 388, 381, 558, 366, 0, 558, 0, 0, 0, + 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, + 366, 0, 388, 0, 0, 255, 0, 388, 0, 388, + 388, 388, 388, 0, 0, 0, 0, 388, 0, 0, + 0, 388, 0, 0, 0, 388, 0, 0, 0, 0, + 0, 0, 0, 388, 0, 0, 388, 0, 388, 0, + 0, 366, 0, 0, 0, 0, 366, 0, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 0, + 0, 0, 388, 0, 0, 0, 366, 0, 0, 388, + 0, 366, 0, 366, 366, 366, 366, 366, 366, 366, + 0, 366, 366, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 0, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 0, 473, 388, + 0, 387, 0, 366, 473, 0, 366, 0, 0, 0, + 0, 0, 366, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 387, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 387, 0, 0, + 473, 0, 387, 0, 0, 254, 0, 387, 0, 387, + 387, 387, 387, 0, 0, 0, 0, 387, 0, 0, + 0, 387, 0, 0, 0, 387, 0, 0, 0, 0, + 0, 0, 0, 387, 0, 0, 387, 0, 387, 0, + 0, 473, 0, 0, 0, 0, 473, 0, 473, 473, + 473, 473, 473, 473, 473, 473, 473, 473, 473, 0, + 0, 0, 387, 0, 0, 0, 473, 0, 0, 387, + 0, 473, 0, 473, 473, 473, 473, 473, 473, 473, + 0, 473, 473, 0, 473, 473, 473, 473, 473, 473, + 473, 473, 473, 473, 0, 473, 473, 473, 473, 473, + 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, + 473, 473, 473, 473, 473, 473, 473, 0, 366, 387, + 0, 0, 0, 473, 366, 0, 473, 0, 854, 0, + 0, 754, 473, 754, 0, 0, 754, 0, 754, 754, + 0, 754, 0, 754, 0, 754, 0, 754, 754, 754, + 0, 0, 0, 754, 754, 0, 0, 0, 0, 754, + 366, 754, 754, 0, 0, 0, 754, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 854, 0, 0, 0, + 0, 0, 754, 0, 754, 0, 0, 0, 754, 754, + 0, 0, 0, 0, 0, 0, 754, 754, 0, 0, + 754, 0, 0, 754, 0, 0, 0, 0, 754, 0, + 0, 0, 585, 0, 0, 0, 0, 0, 585, 366, + 0, 0, 0, 0, 0, 366, 366, 0, 0, 0, + 0, 366, 366, 366, 366, 366, 366, 366, 854, 366, + 0, 366, 366, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 585, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 0, 0, 0, + 0, 366, 0, 366, 0, 754, 366, 0, 0, 0, + 0, 0, 366, 0, 0, 585, 0, 650, 0, 0, + 585, 0, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 585, 0, 585, 0, 585, + 0, 585, 585, 585, 0, 585, 585, 0, 585, 585, + 585, 585, 585, 585, 585, 585, 585, 585, 0, 0, + 0, 585, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 585, 585, 585, 585, 585, 585, 356, + 585, 0, 0, 0, 0, 356, 0, 0, 0, 0, + 650, 0, 0, 0, 0, 650, 585, 650, 650, 650, + 650, 650, 650, 650, 650, 650, 650, 650, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 650, 356, 650, 0, 650, 0, 650, 650, 650, 0, + 0, 0, 0, 0, 650, 650, 650, 650, 424, 0, + 0, 650, 650, 0, 424, 0, 650, 650, 650, 650, + 650, 650, 650, 650, 0, 0, 0, 0, 0, 0, + 0, 0, 356, 0, 0, 650, 0, 356, 0, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 424, 650, 0, 0, 0, 0, 356, 424, 0, 0, + 0, 0, 356, 356, 356, 0, 356, 424, 356, 356, + 356, 0, 356, 356, 0, 0, 356, 356, 356, 356, + 0, 0, 0, 356, 356, 0, 424, 424, 356, 356, + 356, 356, 356, 356, 356, 356, 0, 627, 0, 0, + 0, 0, 0, 627, 0, 0, 424, 356, 0, 0, + 0, 0, 356, 0, 424, 356, 424, 424, 0, 0, + 0, 424, 356, 356, 424, 424, 424, 424, 0, 424, + 0, 424, 424, 0, 424, 424, 424, 424, 424, 627, + 424, 424, 424, 424, 0, 424, 424, 424, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 0, 0, 0, + 0, 356, 0, 424, 0, 0, 424, 0, 0, 0, + 627, 0, 424, 0, 0, 627, 0, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 0, 0, - 0, 0, 0, 993, 0, 0, 0, 0, 993, 627, - 993, 993, 993, 993, 993, 993, 993, 993, 993, 993, - 993, 0, 0, 0, 0, 627, 0, 0, 628, 0, - 993, 993, 0, 0, 628, 0, 993, 0, 993, 0, - 993, 0, 993, 993, 993, 0, 993, 993, 0, 0, - 993, 993, 993, 993, 0, 0, 0, 993, 993, 0, - 0, 0, 993, 993, 993, 993, 993, 993, 993, 993, - 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 993, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 993, 0, 0, - 629, 0, 0, 0, 0, 0, 629, 0, 0, 0, - 0, 628, 0, 0, 0, 0, 628, 0, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, 628, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 628, 628, - 0, 0, 629, 0, 628, 0, 628, 0, 628, 0, - 628, 628, 628, 0, 628, 628, 0, 0, 628, 628, - 628, 628, 0, 0, 0, 628, 628, 0, 0, 0, - 628, 628, 628, 628, 628, 628, 628, 628, 0, 0, - 0, 0, 0, 629, 0, 0, 0, 0, 629, 628, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, - 629, 0, 0, 0, 0, 628, 0, 0, 0, 0, - 629, 629, 0, 0, 0, 0, 629, 0, 629, 0, - 629, 0, 629, 629, 629, 0, 629, 629, 0, 0, - 629, 629, 629, 629, 0, 0, 0, 629, 629, 0, - 0, 0, 629, 629, 629, 629, 629, 629, 629, 629, - 0, 530, 0, 662, 0, 0, 0, 0, 0, 57, - 24, 629, 25, 0, 0, 26, 260, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 0, 629, 0, 0, + 0, 0, 631, 0, 0, 425, 0, 0, 631, 0, + 627, 0, 627, 425, 627, 425, 627, 627, 627, 0, + 627, 627, 0, 0, 627, 627, 627, 627, 0, 0, + 0, 627, 627, 0, 425, 425, 627, 627, 627, 627, + 627, 627, 627, 627, 631, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 425, 627, 0, 0, 0, 0, + 0, 0, 425, 0, 0, 425, 0, 0, 0, 0, + 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 631, 0, 0, 0, 0, + 631, 0, 631, 631, 631, 631, 631, 631, 631, 631, + 631, 631, 631, 0, 0, 0, 0, 630, 0, 0, + 428, 0, 0, 630, 0, 631, 0, 631, 428, 631, + 428, 631, 631, 631, 0, 631, 631, 0, 0, 631, + 631, 631, 631, 0, 0, 0, 631, 631, 0, 428, + 428, 631, 631, 631, 631, 631, 631, 631, 631, 630, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 428, + 631, 0, 0, 0, 0, 0, 0, 428, 0, 0, + 428, 0, 0, 0, 0, 0, 631, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 630, 0, 0, 0, 0, 630, 0, 630, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 630, 0, 0, + 0, 0, 356, 0, 0, 438, 0, 0, 356, 0, + 630, 0, 630, 438, 630, 438, 630, 630, 630, 0, + 630, 630, 0, 0, 630, 630, 630, 630, 0, 0, + 0, 630, 630, 0, 438, 438, 630, 630, 630, 630, + 630, 630, 630, 630, 356, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 438, 630, 0, 0, 0, 0, + 0, 0, 438, 0, 0, 438, 0, 0, 0, 0, + 0, 630, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, + 356, 0, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 0, 0, 0, 0, 607, 0, 356, + 0, 0, 0, 607, 0, 356, 356, 356, 0, 356, + 0, 356, 356, 356, 0, 356, 356, 0, 0, 356, + 356, 356, 356, 0, 0, 0, 356, 356, 0, 0, + 0, 356, 356, 356, 356, 356, 356, 356, 356, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 356, 0, 0, 0, 0, 356, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 356, 0, 0, 845, + 0, 0, 0, 0, 0, 845, 0, 0, 0, 0, + 607, 0, 0, 0, 0, 607, 0, 607, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 607, 845, 607, 0, 607, 0, 607, 607, 607, 0, + 607, 607, 0, 0, 607, 607, 607, 607, 607, 607, + 607, 607, 607, 0, 0, 0, 607, 607, 607, 607, + 607, 607, 607, 607, 0, 0, 0, 0, 0, 0, + 0, 0, 845, 0, 0, 607, 0, 845, 0, 845, + 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, + 0, 607, 0, 0, 614, 0, 845, 0, 0, 0, + 614, 0, 845, 0, 845, 0, 845, 0, 845, 845, + 845, 0, 845, 845, 0, 0, 845, 845, 845, 845, + 0, 0, 0, 845, 845, 0, 0, 0, 845, 845, + 845, 845, 845, 845, 845, 845, 614, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 845, 0, 0, + 0, 0, 845, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 845, 0, 0, 974, 0, 0, 0, + 0, 0, 974, 0, 0, 0, 0, 614, 0, 0, + 0, 0, 614, 0, 614, 614, 614, 614, 614, 614, + 614, 614, 614, 614, 614, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 614, 974, 614, + 0, 614, 0, 614, 614, 614, 0, 614, 614, 0, + 0, 614, 614, 614, 614, 0, 0, 0, 614, 614, + 0, 0, 0, 614, 614, 614, 614, 614, 614, 614, + 614, 0, 0, 0, 0, 0, 0, 0, 0, 974, + 0, 0, 614, 0, 974, 0, 974, 974, 974, 974, + 974, 974, 974, 974, 974, 974, 974, 0, 614, 0, + 0, 615, 0, 0, 0, 0, 0, 615, 0, 974, + 0, 974, 0, 974, 0, 974, 974, 974, 0, 974, + 974, 0, 0, 974, 974, 974, 974, 0, 0, 0, + 974, 974, 0, 0, 0, 974, 974, 974, 974, 974, + 974, 974, 974, 615, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 974, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 974, 0, 0, 616, 0, 0, 0, 0, 0, 616, + 0, 0, 0, 0, 615, 0, 0, 0, 0, 615, + 0, 615, 615, 615, 615, 615, 615, 615, 615, 615, + 615, 615, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 615, 616, 615, 0, 615, 0, + 615, 615, 615, 0, 615, 615, 0, 0, 615, 615, + 615, 615, 0, 0, 0, 615, 615, 0, 0, 0, + 615, 615, 615, 615, 615, 615, 615, 615, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 615, + 0, 616, 0, 616, 616, 616, 616, 616, 616, 616, + 616, 616, 616, 616, 0, 615, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 616, 0, + 616, 0, 616, 616, 616, 0, 616, 616, 0, 0, + 616, 616, 616, 616, 0, 0, 0, 616, 616, 0, + 0, 0, 616, 616, 616, 616, 616, 616, 616, 616, + 0, 526, 0, 651, 0, 0, 0, 0, 0, 57, + 24, 616, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 616, 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, - 0, 0, 0, 0, 0, 0, 662, 0, 0, 0, - 0, 662, 0, 662, 662, 662, 662, 662, 662, 662, - 662, 662, 662, 662, 90, 91, 92, 262, 531, 663, - 0, 95, 96, 662, 662, 0, 0, 0, 0, 662, - 98, 662, 0, 662, 0, 662, 662, 662, 0, 0, - 0, 0, 0, 662, 662, 662, 662, 0, 0, 0, - 662, 662, 0, 0, 0, 662, 662, 662, 662, 662, - 662, 662, 662, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 662, 0, 108, 532, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 533, 534, 0, - 662, 664, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 663, 0, 0, 0, 0, 663, 0, 663, - 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, - 663, 0, 0, 0, 0, 663, 0, 663, 0, 663, - 0, 663, 663, 663, 0, 0, 0, 0, 0, 663, - 663, 663, 663, 0, 0, 0, 663, 663, 0, 0, - 0, 663, 663, 663, 663, 663, 663, 663, 663, 0, - 0, 0, 0, 0, 664, 0, 0, 0, 0, 664, - 663, 664, 664, 664, 664, 664, 664, 664, 664, 664, - 664, 664, 667, 0, 0, 0, 663, 0, 0, 0, - 0, 664, 664, 0, 0, 0, 0, 664, 0, 664, - 0, 664, 0, 664, 664, 664, 0, 0, 0, 0, - 0, 664, 664, 664, 664, 0, 0, 0, 664, 664, - 0, 0, 0, 664, 664, 664, 664, 664, 664, 664, - 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 668, 0, 0, 0, 664, 0, - 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, - 667, 0, 667, 667, 667, 667, 667, 667, 667, 667, - 667, 667, 667, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 667, 667, 0, 0, 0, 0, 667, 0, - 667, 0, 667, 0, 667, 667, 667, 0, 0, 0, - 0, 0, 667, 667, 667, 667, 0, 0, 0, 667, - 667, 0, 0, 0, 0, 0, 667, 667, 667, 667, - 667, 667, 0, 0, 0, 0, 0, 668, 0, 0, - 0, 0, 668, 667, 668, 668, 668, 668, 668, 668, - 668, 668, 668, 668, 668, 669, 0, 0, 0, 667, - 0, 0, 0, 0, 668, 668, 0, 0, 0, 0, - 668, 0, 668, 0, 668, 0, 668, 668, 668, 0, - 0, 0, 0, 0, 668, 668, 668, 668, 0, 0, - 0, 668, 668, 0, 0, 0, 0, 0, 668, 668, - 668, 668, 668, 668, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, - 0, 668, 0, 0, 0, 0, 0, 0, 669, 0, - 0, 0, 0, 669, 0, 669, 669, 669, 669, 669, - 669, 669, 669, 669, 669, 669, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 651, 0, 654, 0, + 0, 651, 0, 651, 651, 651, 651, 651, 651, 651, + 651, 651, 651, 651, 90, 91, 92, 262, 527, 0, + 0, 0, 0, 0, 0, 0, 651, 96, 651, 0, + 651, 0, 651, 651, 651, 0, 0, 0, 0, 0, + 651, 651, 651, 651, 0, 0, 0, 651, 651, 0, + 0, 0, 651, 651, 651, 651, 651, 651, 651, 651, + 0, 0, 0, 0, 0, 0, 0, 655, 0, 0, + 0, 651, 0, 106, 528, 0, 0, 0, 0, 0, + 0, 654, 0, 0, 529, 530, 654, 651, 654, 654, + 654, 654, 654, 654, 654, 654, 654, 654, 654, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 654, 0, 654, 0, 654, 0, 654, 654, 654, + 0, 0, 0, 0, 0, 654, 654, 654, 654, 0, + 0, 0, 654, 654, 0, 0, 656, 0, 0, 654, + 654, 654, 654, 654, 654, 0, 0, 0, 0, 0, + 655, 0, 0, 0, 0, 655, 654, 655, 655, 655, + 655, 655, 655, 655, 655, 655, 655, 655, 0, 0, + 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, + 655, 0, 655, 0, 655, 0, 655, 655, 655, 0, + 0, 0, 0, 0, 655, 655, 655, 655, 0, 0, + 0, 655, 655, 0, 0, 657, 0, 0, 655, 655, + 655, 655, 655, 655, 0, 0, 0, 0, 0, 656, + 0, 0, 0, 0, 656, 655, 656, 656, 656, 656, + 656, 656, 656, 656, 656, 656, 656, 0, 0, 0, + 0, 655, 0, 0, 0, 0, 0, 0, 0, 656, + 0, 656, 0, 656, 0, 656, 656, 656, 0, 0, + 0, 0, 0, 656, 656, 656, 656, 0, 0, 0, + 656, 656, 0, 0, 658, 0, 0, 656, 656, 656, + 656, 656, 656, 0, 0, 0, 0, 0, 657, 0, + 0, 0, 0, 657, 656, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 0, 0, 0, 0, + 656, 0, 0, 0, 0, 0, 0, 0, 657, 0, + 657, 0, 657, 0, 657, 657, 657, 0, 0, 0, + 0, 0, 657, 657, 657, 657, 0, 0, 0, 657, + 657, 0, 0, 664, 0, 0, 657, 657, 657, 657, + 657, 657, 0, 0, 0, 0, 0, 658, 0, 0, + 0, 0, 658, 657, 658, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 0, 0, 0, 0, 657, + 0, 0, 0, 0, 0, 0, 0, 658, 0, 658, + 0, 658, 0, 658, 658, 658, 0, 0, 0, 0, + 0, 658, 658, 658, 658, 0, 0, 0, 658, 658, + 0, 0, 665, 0, 0, 658, 658, 658, 658, 658, + 658, 0, 0, 0, 0, 0, 664, 0, 0, 0, + 0, 664, 658, 664, 664, 664, 664, 664, 664, 664, + 664, 664, 664, 664, 0, 0, 0, 0, 658, 0, + 0, 0, 0, 0, 0, 0, 664, 0, 664, 0, + 664, 0, 664, 664, 664, 0, 0, 0, 0, 0, + 0, 0, 664, 664, 0, 0, 0, 664, 664, 0, + 0, 668, 0, 0, 0, 0, 664, 664, 664, 664, + 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, + 665, 664, 665, 665, 665, 665, 665, 665, 665, 665, + 665, 665, 665, 0, 0, 0, 0, 664, 0, 0, + 0, 0, 0, 0, 0, 665, 0, 665, 0, 665, + 0, 665, 665, 665, 0, 0, 0, 0, 0, 0, + 0, 665, 665, 0, 0, 0, 665, 665, 0, 0, + 669, 0, 0, 0, 0, 665, 665, 665, 665, 0, + 0, 0, 0, 0, 668, 0, 0, 0, 0, 668, + 665, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 668, 0, 668, 0, 668, 0, + 668, 668, 668, 0, 0, 0, 0, 0, 0, 0, + 668, 668, 0, 0, 0, 668, 668, 0, 0, 672, + 0, 0, 0, 0, 0, 0, 668, 668, 0, 0, + 0, 0, 0, 669, 0, 0, 0, 0, 669, 668, + 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, + 669, 0, 0, 0, 0, 668, 0, 0, 0, 0, + 0, 0, 0, 669, 0, 669, 0, 669, 0, 669, + 669, 669, 0, 0, 0, 0, 0, 0, 0, 669, + 669, 0, 0, 0, 669, 669, 0, 0, 674, 0, 0, 0, 0, 0, 0, 669, 669, 0, 0, 0, - 0, 669, 0, 669, 0, 669, 0, 669, 669, 669, - 0, 0, 0, 0, 0, 669, 669, 669, 669, 0, - 0, 0, 669, 669, 0, 0, 0, 0, 0, 669, - 669, 669, 669, 669, 669, 0, 0, 0, 0, 0, - 670, 0, 0, 0, 0, 670, 669, 670, 670, 670, - 670, 670, 670, 670, 670, 670, 670, 670, 671, 0, - 0, 0, 669, 0, 0, 0, 0, 670, 670, 0, - 0, 0, 0, 670, 0, 670, 0, 670, 0, 670, - 670, 670, 0, 0, 0, 0, 0, 670, 670, 670, - 670, 0, 0, 0, 670, 670, 0, 0, 0, 0, - 0, 670, 670, 670, 670, 670, 670, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 670, 0, - 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, - 0, 671, 0, 0, 0, 0, 671, 0, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 368, - 0, 0, 0, 0, 0, 0, 0, 0, 671, 671, - 0, 0, 0, 0, 671, 0, 671, 0, 671, 0, - 671, 671, 671, 0, 0, 0, 0, 0, 671, 671, - 671, 671, 0, 0, 0, 671, 671, 0, 0, 0, - 0, 0, 671, 671, 671, 671, 671, 671, 676, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 671, - 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, - 0, 0, 0, 368, 0, 671, 368, 0, 368, 368, - 0, 0, 0, 368, 368, 0, 0, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 0, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 368, 368, 0, - 677, 0, 0, 0, 0, 368, 0, 0, 368, 0, - 0, 676, 0, 0, 368, 0, 676, 0, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, 676, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 676, 676, - 0, 0, 0, 0, 676, 0, 676, 0, 676, 0, - 676, 676, 676, 0, 0, 0, 0, 0, 0, 0, - 676, 676, 0, 0, 0, 676, 676, 0, 0, 0, - 0, 0, 678, 0, 676, 676, 676, 676, 0, 0, - 0, 0, 0, 677, 0, 0, 0, 0, 677, 676, - 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, - 677, 0, 0, 0, 0, 676, 0, 0, 0, 0, - 677, 677, 0, 0, 0, 0, 677, 0, 677, 0, - 677, 0, 677, 677, 677, 0, 0, 0, 0, 0, - 0, 0, 677, 677, 0, 0, 0, 677, 677, 0, - 0, 0, 0, 0, 681, 0, 677, 677, 677, 677, - 0, 0, 0, 0, 0, 678, 0, 0, 0, 0, - 678, 677, 678, 678, 678, 678, 678, 678, 678, 678, - 678, 678, 678, 0, 0, 0, 0, 677, 0, 0, - 0, 0, 678, 678, 0, 0, 0, 0, 678, 0, + 0, 0, 672, 0, 0, 0, 0, 672, 669, 672, + 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, + 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 672, 0, 672, 0, 672, 0, 672, 672, + 672, 0, 0, 0, 0, 0, 0, 0, 0, 672, + 0, 0, 0, 672, 672, 0, 0, 675, 0, 0, + 0, 0, 0, 0, 672, 672, 0, 0, 0, 0, + 0, 674, 0, 0, 0, 0, 674, 672, 674, 674, + 674, 674, 674, 674, 674, 674, 674, 674, 674, 0, + 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, + 0, 674, 0, 674, 0, 674, 0, 674, 674, 674, + 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, + 0, 0, 0, 674, 0, 0, 677, 0, 0, 0, + 0, 0, 0, 674, 674, 0, 0, 0, 0, 0, + 675, 0, 0, 0, 0, 675, 674, 675, 675, 675, + 675, 675, 675, 675, 675, 675, 675, 675, 0, 0, + 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, + 675, 0, 675, 0, 675, 0, 675, 675, 675, 0, + 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, + 0, 0, 675, 0, 0, 678, 0, 0, 0, 0, + 0, 0, 675, 675, 0, 0, 0, 0, 0, 677, + 0, 0, 0, 0, 677, 675, 677, 677, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 0, 0, 0, + 0, 675, 0, 0, 0, 0, 0, 0, 0, 677, + 0, 677, 0, 677, 0, 677, 677, 677, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 677, 0, 0, 680, 0, 0, 0, 0, 0, + 0, 677, 677, 0, 0, 0, 0, 0, 678, 0, + 0, 0, 0, 678, 677, 678, 678, 678, 678, 678, + 678, 678, 678, 678, 678, 678, 0, 0, 0, 0, + 677, 0, 0, 0, 0, 0, 0, 0, 678, 0, 678, 0, 678, 0, 678, 678, 678, 0, 0, 0, - 0, 0, 0, 0, 678, 678, 0, 0, 0, 678, - 678, 0, 0, 0, 0, 0, 682, 0, 678, 678, - 678, 678, 0, 0, 0, 0, 0, 681, 0, 0, - 0, 0, 681, 678, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 0, 0, 0, 0, 678, - 0, 0, 0, 0, 681, 681, 0, 0, 0, 0, - 681, 0, 681, 0, 681, 0, 681, 681, 681, 0, - 0, 0, 0, 0, 0, 0, 681, 681, 0, 0, - 0, 681, 681, 0, 0, 0, 0, 0, 684, 0, - 0, 0, 681, 681, 0, 0, 0, 0, 0, 682, - 0, 0, 0, 0, 682, 681, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 0, 0, 0, - 0, 681, 0, 0, 0, 0, 682, 682, 0, 0, - 0, 0, 682, 0, 682, 0, 682, 0, 682, 682, - 682, 0, 0, 0, 0, 0, 0, 0, 682, 682, - 0, 0, 0, 682, 682, 0, 0, 0, 0, 0, - 685, 0, 0, 0, 682, 682, 0, 0, 0, 0, - 0, 684, 0, 0, 0, 0, 684, 682, 684, 684, - 684, 684, 684, 684, 684, 684, 684, 684, 684, 0, - 0, 0, 0, 682, 0, 0, 0, 0, 684, 684, - 0, 0, 0, 0, 684, 0, 684, 0, 684, 0, - 684, 684, 684, 0, 0, 0, 0, 0, 0, 0, - 0, 684, 0, 0, 0, 684, 684, 0, 0, 0, - 0, 0, 687, 0, 0, 0, 684, 684, 0, 0, - 0, 0, 0, 685, 0, 0, 0, 0, 685, 684, - 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, - 685, 0, 0, 0, 0, 684, 0, 0, 0, 0, - 685, 685, 0, 0, 0, 0, 685, 0, 685, 0, - 685, 0, 685, 685, 685, 0, 0, 0, 0, 0, - 0, 0, 0, 685, 0, 0, 0, 685, 685, 0, - 0, 0, 0, 0, 688, 0, 0, 0, 685, 685, - 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, - 687, 685, 687, 687, 687, 687, 687, 687, 687, 687, - 687, 687, 687, 0, 0, 0, 0, 685, 0, 0, - 0, 0, 687, 687, 0, 0, 0, 0, 687, 0, - 687, 0, 687, 0, 687, 687, 687, 0, 0, 0, - 0, 0, 0, 0, 0, 687, 0, 0, 0, 0, - 687, 0, 0, 0, 0, 0, 690, 0, 0, 0, - 687, 687, 0, 0, 0, 0, 0, 688, 0, 0, - 0, 0, 688, 687, 688, 688, 688, 688, 688, 688, - 688, 688, 688, 688, 688, 0, 0, 0, 0, 687, - 0, 0, 0, 0, 688, 688, 0, 0, 0, 0, - 688, 0, 688, 0, 688, 0, 688, 688, 688, 0, - 0, 0, 0, 0, 0, 0, 0, 688, 0, 0, - 0, 0, 688, 0, 0, 0, 0, 0, 691, 0, - 0, 0, 688, 688, 0, 0, 0, 0, 0, 690, - 0, 0, 0, 0, 690, 688, 690, 690, 690, 690, - 690, 690, 690, 690, 690, 690, 690, 0, 0, 0, - 0, 688, 0, 0, 0, 0, 690, 690, 0, 0, - 0, 0, 690, 0, 690, 0, 690, 0, 690, 690, - 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 368, 690, 0, 0, 871, 0, 0, - 0, 0, 0, 0, 690, 690, 0, 0, 0, 0, - 0, 691, 0, 0, 0, 0, 691, 690, 691, 691, - 691, 691, 691, 691, 691, 691, 691, 691, 691, 368, - 0, 0, 0, 690, 0, 0, 0, 0, 691, 691, - 0, 0, 0, 0, 691, 871, 691, 0, 691, 0, - 691, 691, 691, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 691, 691, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 368, 691, - 0, 0, 0, 0, 368, 368, 0, 0, 0, 0, - 0, 0, 0, 368, 368, 691, 368, 0, 368, 0, - 871, 368, 0, 368, 368, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 0, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 0, - 0, 602, 0, 368, 0, 368, 0, 0, 368, 57, - 24, 58, 25, 1216, 368, 26, 59, 0, 60, 61, - 27, 62, 63, 64, 28, 0, 0, 0, 0, 0, - 65, 0, 66, 30, 67, 68, 69, 70, 0, 0, - 32, 0, 0, 0, 71, 33, 0, 72, 73, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, - 0, 36, 0, 37, 75, 0, 0, 38, 0, 76, - 77, 78, 79, 80, 81, 39, 40, 82, 83, 41, - 84, 0, 85, 0, 0, 86, 87, 0, 0, 88, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, - 0, 95, 96, 0, 0, 0, 97, 0, 0, 0, - 98, 0, 0, 0, 0, 99, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 0, 0, 0, 0, - 0, 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 0, 108, 603, 110, 111, - 0, 1217, 57, 24, 58, 25, 0, 0, 26, 59, + 678, 0, 0, 681, 0, 0, 0, 0, 0, 0, + 678, 678, 0, 0, 0, 0, 0, 680, 0, 0, + 0, 0, 680, 678, 680, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 0, 0, 0, 0, 678, + 0, 0, 0, 0, 0, 0, 0, 680, 0, 680, + 0, 680, 0, 680, 680, 680, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 683, 0, 0, 0, 0, 0, 0, 0, + 680, 0, 0, 0, 0, 0, 681, 0, 0, 0, + 0, 681, 680, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 0, 0, 0, 0, 680, 0, + 0, 0, 0, 0, 0, 0, 681, 0, 681, 0, + 681, 0, 681, 681, 681, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, + 0, 0, 0, 0, 0, 683, 0, 0, 0, 0, + 683, 681, 683, 683, 683, 683, 683, 683, 683, 683, + 683, 683, 683, 0, 0, 0, 0, 681, 0, 0, + 0, 0, 0, 0, 0, 683, 0, 683, 0, 683, + 0, 683, 683, 683, 592, 0, 0, 0, 0, 0, + 0, 0, 57, 24, 58, 25, 1194, 683, 26, 59, 0, 60, 61, 27, 62, 63, 64, 28, 0, 0, 0, 0, 0, 65, 0, 66, 30, 67, 68, 69, 70, 0, 0, 32, 0, 0, 0, 71, 33, 0, - 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 72, 73, 34, 0, 0, 0, 683, 0, 0, 0, 0, 0, 74, 0, 36, 0, 37, 75, 0, 0, 38, 0, 76, 77, 78, 79, 80, 81, 39, 40, 82, 83, 41, 84, 0, 85, 0, 0, 86, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, - 93, 94, 0, 0, 95, 96, 0, 0, 0, 97, - 0, 0, 0, 98, 0, 0, 0, 0, 99, 100, - 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, - 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 273, 0, 0, 0, 108, - 109, 110, 111, 57, 24, 58, 25, 0, 0, 26, - 59, 0, 60, 61, 27, 62, 63, 64, 28, 0, - 0, 0, 0, 0, 65, 0, 66, 30, 67, 68, - 69, 70, 0, 0, 32, 0, 0, 0, 71, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 74, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 76, 77, 78, 79, 80, 81, 39, - 40, 82, 83, 41, 84, 0, 85, 0, 0, 86, - 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 0, 0, 95, 96, 0, 0, 0, - 97, 0, 0, 0, 98, 0, 0, 0, 0, 99, - 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, - 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, - 108, 109, 110, 111, 57, 24, 58, 25, 0, 0, - 26, 59, 0, 60, 61, 27, 62, 63, 64, 28, - 0, 0, 0, 0, 0, 65, 0, 66, 30, 67, - 68, 69, 70, 0, 0, 32, 0, 0, 0, 71, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 74, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 76, 77, 78, 79, 80, 81, - 39, 40, 82, 83, 41, 84, 0, 85, 0, 0, - 86, 87, 0, 0, 88, 89, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, - 0, 97, 0, 0, 0, 98, 0, 0, 0, 0, - 99, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 0, 0, 0, 0, 0, 106, 107, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1086, 0, 0, - 0, 108, 603, 110, 111, 1086, 1086, 1086, 1086, 0, - 0, 1086, 1086, 0, 1086, 1086, 1086, 1086, 1086, 1086, - 1086, 0, 0, 0, 0, 0, 1086, 0, 1086, 1086, - 1086, 1086, 1086, 1086, 0, 0, 1086, 0, 0, 0, - 1086, 1086, 0, 1086, 1086, 1086, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1086, 0, 1086, 0, 1086, - 1086, 0, 0, 1086, 0, 1086, 1086, 1086, 1086, 1086, - 1086, 1086, 1086, 1086, 1086, 1086, 1086, 0, 1086, 0, - 0, 1086, 1086, 0, 0, 1086, 1086, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1086, 1086, 1086, 1086, 1086, 0, 0, 1086, 1086, 0, - 0, 0, 1086, 0, 0, 0, 1086, 0, 0, 0, - 0, 1086, 1086, 1086, 1086, 1086, 0, 0, 0, 1086, - 0, 1086, 0, 0, 0, 0, 0, 1086, 1086, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, - 0, 0, 1086, 1086, 1086, 1086, 57, 24, 0, 25, - 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, - 0, 28, 0, 0, 24, 0, 25, 65, 0, 26, - 30, 0, 0, 0, 27, 0, 0, 32, 28, 0, - 0, 0, 33, 0, 72, 73, 34, 30, 647, 0, - 0, 0, 0, 0, 32, 648, 0, 0, 36, 33, - 37, 75, 0, 34, 38, 0, 0, 77, 0, 79, - 0, 81, 39, 40, 261, 36, 41, 37, 0, 0, - 0, 38, 0, 649, 0, 0, 88, 89, 0, 39, - 40, 0, 0, 41, 0, 0, 85, 0, 0, 0, - 0, 90, 91, 92, 93, 94, 0, 0, 95, 96, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, - 650, 0, 298, 100, 101, 102, 103, 0, 0, 0, - 104, 0, 105, 0, 0, 0, 0, 0, 106, 107, - 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, - 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, - 0, 28, 0, 108, 109, 110, 111, 65, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 0, 331, 33, 0, 72, 73, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, - 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, - 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 91, 92, 93, 815, 0, 0, 95, 96, - 0, 0, 0, 816, 1129, 0, 0, 98, 0, 0, - 0, 0, 0, 100, 101, 102, 103, 0, 0, 0, - 104, 0, 105, 0, 0, 0, 0, 0, 106, 107, - 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, - 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, - 0, 28, 0, 108, 817, 110, 111, 65, 0, 818, - 30, 0, 0, 0, 819, 0, 0, 32, 0, 0, - 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, - 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, - 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 91, 92, 93, 815, 0, 0, 95, 96, - 0, 0, 0, 816, 0, 0, 0, 98, 0, 0, - 0, 0, 0, 100, 101, 102, 103, 0, 0, 0, - 104, 0, 105, 0, 0, 0, 0, 0, 106, 107, + 93, 94, 0, 0, 0, 0, 95, 0, 0, 0, + 96, 0, 0, 0, 0, 97, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, + 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 833, 108, 817, 110, 111, 0, 0, 818, - 57, 24, 0, 25, 819, 0, 26, 260, 0, 0, - 0, 27, 62, 63, 0, 28, 0, 0, 192, 0, - 192, 65, 0, 192, 30, 0, 0, 0, 192, 0, - 0, 32, 192, 0, 0, 0, 33, 0, 72, 73, - 34, 192, 0, 0, 0, 0, 0, 0, 192, 0, - 0, 0, 36, 192, 37, 75, 0, 192, 38, 0, - 0, 77, 0, 79, 0, 81, 39, 40, 261, 192, - 41, 192, 0, 0, 0, 192, 0, 87, 0, 0, - 88, 89, 0, 192, 192, 0, 0, 192, 0, 0, - 192, 0, 0, 0, 0, 90, 91, 92, 93, 309, - 0, 0, 95, 96, 0, 0, 0, 551, 834, 0, - 0, 98, 0, 0, 0, 0, 0, 100, 101, 102, - 103, 0, 0, 0, 104, 0, 105, 0, 0, 1111, - 0, 0, 106, 107, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1041, 0, 0, 0, 108, 310, 110, - 111, 57, 24, 0, 25, 0, 0, 26, 260, 0, - 0, 0, 27, 62, 63, 192, 28, 0, 0, 192, - 0, 192, 65, 0, 192, 30, 0, 0, 0, 192, - 0, 0, 32, 192, 0, 0, 0, 33, 0, 72, - 73, 34, 192, 647, 0, 0, 0, 0, 0, 192, - 648, 0, 0, 36, 192, 37, 75, 0, 192, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, - 192, 41, 192, 0, 0, 0, 192, 0, 649, 0, - 0, 88, 89, 0, 192, 192, 0, 0, 192, 0, - 0, 192, 0, 0, 0, 0, 90, 91, 92, 93, - 94, 0, 0, 95, 96, 0, 0, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 0, 0, 100, 101, - 102, 103, 0, 0, 0, 104, 0, 105, 1111, 0, - 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 833, 0, 0, 0, 108, 109, - 110, 111, 57, 24, 0, 25, 0, 0, 26, 260, - 0, 0, 0, 27, 62, 63, 192, 28, 0, 0, - 24, 0, 25, 65, 0, 26, 30, 0, 0, 0, - 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, - 72, 73, 34, 30, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 36, 33, 37, 75, 1044, 34, - 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, - 261, 36, 41, 37, 0, 0, 0, 38, 0, 87, - 0, 0, 88, 89, 0, 39, 40, 0, 0, 41, - 0, 0, 85, 0, 0, 0, 0, 90, 91, 92, - 93, 309, 0, 0, 95, 96, 0, 0, 0, 551, - 0, 0, 0, 98, 0, 0, 0, 0, 0, 100, - 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, - 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 833, 0, 0, 0, 108, - 310, 110, 111, 57, 24, 0, 25, 0, 0, 26, - 260, 0, 0, 0, 27, 62, 63, 387, 28, 0, - 0, 0, 0, 0, 65, 0, 0, 30, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, - 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 309, 0, 0, 95, 96, 0, 0, 0, - 551, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, - 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, - 108, 310, 110, 111, 352, 0, 57, 24, 0, 25, - 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, - 0, 28, 0, 0, 0, 0, 0, 65, 0, 0, - 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, - 353, 0, 33, 0, 72, 73, 34, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, - 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 91, 92, 262, 355, 0, 0, 95, 96, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 356, - 0, 0, 0, 100, 101, 102, 103, 994, 0, 0, - 104, 0, 105, 825, 0, 0, 0, 0, 106, 107, + 0, 0, 0, 0, 56, 0, 106, 107, 108, 109, + 0, 1195, 57, 24, 58, 25, 0, 0, 26, 59, + 0, 60, 61, 27, 62, 63, 64, 28, 0, 0, + 0, 0, 0, 65, 0, 66, 30, 67, 68, 69, + 70, 0, 0, 32, 0, 0, 0, 71, 33, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 74, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 76, 77, 78, 79, 80, 81, 39, 40, + 82, 83, 41, 84, 0, 85, 0, 0, 86, 87, + 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 93, 94, 0, 0, 0, 0, 95, 0, 0, 0, + 96, 0, 0, 0, 0, 97, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, + 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 0, 0, 106, 107, 108, 109, + 57, 24, 58, 25, 0, 0, 26, 59, 0, 60, + 61, 27, 62, 63, 64, 28, 0, 0, 0, 0, + 0, 65, 0, 66, 30, 67, 68, 69, 70, 0, + 0, 32, 0, 0, 0, 71, 33, 0, 72, 73, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 74, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 76, 77, 78, 79, 80, 81, 39, 40, 82, 83, + 41, 84, 0, 85, 0, 0, 86, 87, 0, 0, + 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 91, 92, 93, 94, + 0, 0, 0, 0, 95, 0, 0, 0, 96, 0, + 0, 0, 0, 97, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, + 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 592, 0, 0, 0, 106, 107, 108, 109, 57, 24, + 58, 25, 0, 0, 26, 59, 0, 60, 61, 27, + 62, 63, 64, 28, 0, 0, 0, 0, 0, 65, + 0, 66, 30, 67, 68, 69, 70, 0, 0, 32, + 0, 0, 0, 71, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 76, 77, + 78, 79, 80, 81, 39, 40, 82, 83, 41, 84, + 0, 85, 0, 0, 86, 87, 0, 0, 88, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 93, 94, 0, 0, + 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, + 0, 97, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1065, 0, + 0, 0, 106, 107, 108, 109, 1065, 1065, 1065, 1065, + 0, 0, 1065, 1065, 0, 1065, 1065, 1065, 1065, 1065, + 1065, 1065, 0, 0, 0, 0, 0, 1065, 0, 1065, + 1065, 1065, 1065, 1065, 1065, 0, 0, 1065, 0, 0, + 0, 1065, 1065, 0, 1065, 1065, 1065, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1065, 0, 1065, 0, + 1065, 1065, 0, 0, 1065, 0, 1065, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 0, 1065, + 0, 0, 1065, 1065, 0, 0, 1065, 1065, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1065, 1065, 1065, 1065, 1065, 0, 0, 0, 0, + 1065, 0, 0, 0, 1065, 0, 0, 0, 0, 1065, + 1065, 1065, 1065, 1065, 0, 0, 0, 1065, 0, 1065, + 0, 0, 0, 0, 0, 1065, 1065, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 635, 0, 0, 0, + 1065, 1065, 1065, 1065, 57, 24, 0, 25, 0, 0, + 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, + 0, 0, 190, 0, 190, 65, 0, 190, 30, 0, + 0, 0, 190, 0, 0, 32, 190, 0, 0, 0, + 33, 0, 72, 73, 34, 190, 636, 0, 0, 0, + 0, 0, 190, 637, 0, 0, 36, 190, 37, 75, + 0, 190, 38, 0, 0, 77, 0, 79, 0, 81, + 39, 40, 261, 190, 41, 190, 0, 0, 0, 190, + 0, 638, 0, 0, 88, 89, 0, 190, 190, 0, + 0, 190, 0, 0, 190, 0, 0, 0, 0, 90, + 91, 92, 93, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 639, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, + 1090, 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 108, 264, 30, 111, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 0, 0, 27, 62, 63, 0, 28, 0, 106, 107, + 108, 109, 65, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 190, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, 93, - 309, 0, 0, 95, 96, 0, 0, 0, 0, 995, - 0, 0, 98, 0, 0, 0, 0, 0, 100, 101, - 102, 103, 0, 0, 0, 104, 0, 105, 0, 0, - 0, 0, 0, 106, 107, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1062, 0, 0, 0, 108, 310, - 110, 111, 57, 24, 0, 25, 0, 0, 26, 260, - 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, - 24, 0, 25, 65, 0, 26, 30, 0, 0, 0, - 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, - 72, 73, 34, 30, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 36, 33, 37, 75, 0, 34, - 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, - 261, 36, 41, 37, 0, 0, 0, 38, 0, 87, - 0, 0, 88, 89, 0, 39, 40, 0, 0, 41, - 0, 0, 619, 0, 0, 0, 0, 90, 91, 92, - 93, 309, 0, 0, 95, 96, 0, 0, 0, 0, - 1063, 0, 0, 98, 0, 0, 0, 0, 0, 100, - 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, - 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 308, 0, 0, 0, 108, - 310, 110, 111, 57, 24, 0, 25, 0, 0, 26, - 260, 0, 0, 0, 27, 62, 63, 387, 28, 0, + 807, 0, 0, 0, 0, 808, 1110, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 0, 0, 57, 24, + 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 106, 809, 108, 109, 65, + 0, 810, 30, 0, 0, 0, 811, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 90, 91, 92, 93, 807, 0, 0, + 0, 0, 808, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 825, 106, 809, 108, 109, 0, 0, 810, 57, + 24, 0, 25, 811, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 0, 190, 0, 190, + 65, 0, 190, 30, 0, 0, 0, 190, 0, 0, + 32, 190, 0, 0, 0, 33, 0, 72, 73, 34, + 190, 0, 0, 0, 0, 0, 0, 190, 0, 0, + 0, 36, 190, 37, 75, 0, 190, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 190, 41, + 190, 0, 0, 0, 190, 0, 87, 0, 0, 88, + 89, 0, 190, 190, 0, 0, 190, 0, 0, 190, + 0, 0, 0, 0, 90, 91, 92, 93, 309, 0, + 0, 0, 0, 547, 826, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 1090, 0, 0, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1023, + 0, 0, 0, 106, 310, 108, 109, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 190, 28, 0, 0, 24, 0, 25, 65, 0, + 26, 30, 0, 0, 0, 27, 0, 0, 32, 28, + 0, 0, 0, 33, 0, 72, 73, 34, 30, 636, + 0, 0, 0, 0, 0, 32, 637, 0, 0, 36, + 33, 37, 75, 0, 34, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 36, 41, 37, 0, + 0, 0, 38, 0, 638, 0, 0, 88, 89, 0, + 39, 40, 0, 0, 41, 0, 0, 85, 0, 0, + 0, 0, 90, 91, 92, 93, 94, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 825, 0, 0, + 0, 106, 107, 108, 109, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 381, + 28, 0, 0, 24, 0, 25, 65, 0, 26, 30, + 0, 0, 0, 27, 0, 0, 32, 28, 0, 0, + 0, 33, 0, 72, 73, 34, 30, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 36, 33, 37, + 75, 1026, 34, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 36, 41, 37, 0, 0, 0, + 38, 0, 87, 0, 0, 88, 89, 0, 39, 40, + 0, 0, 41, 0, 0, 608, 0, 0, 0, 0, + 90, 91, 92, 93, 309, 0, 0, 0, 0, 547, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 787, 0, 0, 0, 106, + 310, 108, 109, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 381, 28, 0, 0, 24, 0, 25, 65, 0, 26, 30, 0, 0, 0, 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, 72, 73, 34, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 36, 33, 37, 75, 0, 34, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 261, 36, 41, 37, 0, 0, 0, 38, 0, + 40, 261, 36, 41, 37, 0, 85, 0, 38, 0, 87, 0, 0, 88, 89, 0, 39, 40, 0, 0, - 41, 0, 0, 568, 0, 0, 0, 0, 90, 91, - 92, 93, 309, 0, 0, 95, 96, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, - 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, - 108, 310, 110, 111, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 387, 28, - 0, 0, 0, 0, 0, 65, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, - 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 93, 309, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 0, 0, 0, 0, 0, 106, 107, 0, 0, + 41, 0, 0, 564, 0, 0, 0, 0, 90, 91, + 92, 93, 309, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, + 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 825, 0, 0, 0, 106, 310, 108, + 109, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 381, 28, 0, 0, 0, + 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 0, 0, 0, 0, 87, 0, + 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 93, + 309, 0, 0, 0, 0, 547, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, - 0, 108, 310, 110, 111, 352, 0, 57, 24, 0, + 0, 0, 0, 348, 0, 106, 310, 108, 109, 349, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 350, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, + 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 352, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 353, 0, 0, 0, 98, 99, 100, 101, 980, + 0, 0, 102, 0, 103, 817, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 264, 30, 109, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, + 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 93, 309, 0, 0, 0, 0, 0, 981, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, + 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1044, 0, 0, 0, 106, 310, 108, + 109, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 534, + 0, 534, 65, 0, 534, 30, 0, 0, 0, 534, + 0, 0, 32, 534, 0, 0, 0, 33, 0, 72, + 73, 34, 534, 0, 0, 0, 0, 0, 0, 534, + 0, 0, 0, 36, 534, 37, 75, 0, 534, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 534, 41, 534, 0, 0, 0, 534, 0, 87, 0, + 0, 88, 89, 0, 534, 534, 0, 0, 534, 0, + 0, 534, 0, 0, 0, 0, 90, 91, 92, 93, + 309, 0, 0, 0, 0, 0, 1045, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 308, 0, 0, 0, 106, 310, 108, 109, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 534, 28, 0, 0, 191, 0, 191, + 65, 0, 191, 30, 0, 0, 0, 191, 0, 0, + 32, 191, 0, 0, 0, 33, 0, 72, 73, 34, + 191, 0, 0, 0, 0, 0, 0, 191, 0, 0, + 0, 36, 191, 37, 75, 0, 191, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 191, 41, + 191, 0, 0, 0, 191, 0, 87, 0, 0, 88, + 89, 0, 191, 191, 0, 0, 191, 0, 0, 191, + 0, 0, 0, 0, 90, 91, 92, 93, 309, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, + 0, 0, 0, 106, 310, 108, 109, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, - 63, 0, 28, 0, 0, 0, 0, 0, 65, 0, + 63, 191, 28, 0, 0, 0, 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, - 0, 353, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, - 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 262, 355, 0, 0, 95, - 96, 0, 0, 0, 0, 0, 0, 0, 98, 0, - 356, 0, 0, 0, 100, 101, 102, 103, 0, 0, - 0, 104, 0, 105, 644, 0, 0, 0, 0, 106, - 107, 0, 57, 24, 0, 25, 0, 0, 26, 260, - 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, - 0, 0, 0, 65, 108, 264, 30, 111, 0, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, - 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, - 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, - 261, 0, 41, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, - 93, 94, 0, 0, 95, 96, 0, 0, 0, 0, - 0, 0, 0, 98, 0, 0, 0, 0, 0, 100, - 101, 102, 103, 0, 0, 0, 104, 0, 105, 0, - 0, 0, 0, 0, 106, 107, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 825, 0, 0, 0, 108, - 109, 110, 111, 57, 24, 0, 25, 0, 0, 26, - 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 547, 0, 547, 65, 0, 547, 30, 0, 0, - 0, 547, 0, 0, 32, 547, 0, 0, 0, 33, - 0, 72, 73, 34, 547, 0, 0, 0, 0, 0, - 0, 547, 0, 0, 0, 36, 547, 37, 75, 0, - 547, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 261, 547, 41, 547, 0, 0, 0, 547, 0, - 87, 0, 0, 88, 89, 0, 547, 547, 0, 0, - 547, 0, 0, 547, 0, 0, 0, 0, 90, 91, - 92, 93, 309, 0, 0, 95, 96, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, - 0, 0, 0, 0, 0, 106, 107, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1178, 0, 0, 0, - 108, 310, 110, 111, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 547, 28, - 0, 0, 193, 0, 193, 65, 0, 193, 30, 0, - 0, 0, 193, 0, 0, 32, 193, 0, 0, 0, - 33, 0, 72, 73, 34, 193, 0, 0, 0, 0, - 0, 0, 193, 0, 0, 0, 36, 193, 37, 75, - 0, 193, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 193, 41, 193, 0, 0, 0, 193, - 0, 87, 0, 0, 88, 89, 0, 193, 193, 0, - 0, 193, 0, 0, 193, 0, 0, 0, 0, 90, - 91, 92, 93, 94, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 0, 0, 0, 0, 0, 106, 107, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1338, 0, 0, - 0, 108, 1179, 110, 111, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 193, - 28, 0, 0, 192, 0, 192, 65, 0, 192, 30, - 0, 0, 0, 192, 0, 0, 32, 192, 0, 0, - 0, 33, 0, 72, 73, 34, 192, 0, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 36, 192, 37, - 75, 0, 192, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 192, 41, 192, 0, 0, 0, - 192, 0, 87, 0, 0, 88, 89, 0, 192, 192, - 0, 0, 192, 0, 0, 192, 0, 0, 0, 0, - 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, - 0, 0, 108, 310, 110, 111, 86, 86, 0, 86, - 0, 0, 86, 86, 0, 0, 0, 86, 86, 86, - 192, 86, 0, 0, 0, 0, 0, 86, 0, 0, - 86, 0, 0, 0, 0, 0, 0, 86, 0, 0, - 0, 0, 86, 0, 86, 86, 86, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, - 86, 86, 0, 0, 86, 0, 0, 86, 0, 86, - 0, 86, 86, 86, 86, 0, 86, 0, 0, 0, - 0, 0, 0, 86, 0, 0, 86, 86, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 86, 86, 86, 86, 86, 0, 0, 86, 86, - 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, - 0, 0, 0, 86, 86, 86, 86, 0, 0, 0, - 86, 0, 86, 0, 0, 0, 0, 0, 86, 86, - 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, - 0, 351, 0, 86, 86, 86, 86, 352, 0, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 207, 0, 0, 0, - 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 353, 0, 33, 0, 72, 73, 34, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, - 208, 209, 210, 211, 0, 212, 213, 214, 215, 216, - 217, 218, 219, 0, 0, 220, 221, 222, 223, 224, - 225, 226, 227, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 356, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 351, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 33, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 33, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 33, 41, 0, 0, 0, 33, 0, - 0, 0, 0, 33, 0, 33, 33, 33, 33, 0, - 0, 33, 0, 33, 0, 0, 0, 33, 0, 90, - 91, 92, 262, 355, 0, 0, 95, 96, 0, 33, - 0, 0, 33, 0, 33, 98, 0, 356, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 363, 0, 0, 0, 0, 106, 107, 33, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 33, 33, - 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, - 32, 0, 33, 0, 33, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 33, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 33, 41, - 0, 0, 0, 33, 0, 0, 0, 0, 33, 0, - 33, 33, 33, 33, 0, 0, 0, 0, 33, 0, - 0, 0, 33, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 33, 0, 0, 33, 0, 33, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 365, 0, 0, 0, - 0, 106, 107, 33, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 33, 33, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 53, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 53, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 53, 41, 0, 0, 0, 53, 0, - 0, 0, 0, 53, 0, 53, 53, 53, 53, 0, - 0, 53, 0, 53, 0, 0, 0, 53, 0, 90, - 91, 92, 262, 355, 0, 0, 95, 96, 0, 53, - 0, 0, 53, 0, 53, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 367, 0, 0, 0, 0, 106, 107, 53, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 326, 0, - 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, - 32, 0, 53, 0, 53, 33, 0, 72, 73, 34, + 0, 0, 90, 91, 92, 93, 309, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 53, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 53, 41, - 0, 0, 0, 53, 0, 0, 0, 0, 53, 0, - 53, 53, 53, 53, 0, 0, 0, 0, 53, 0, - 0, 0, 53, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 53, 0, 0, 53, 0, 53, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 369, 0, 0, 0, - 0, 106, 107, 53, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 327, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 53, 0, 53, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 53, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 53, 41, 0, 0, 0, 53, 0, - 0, 0, 0, 53, 0, 53, 53, 53, 53, 0, - 0, 53, 0, 53, 0, 0, 0, 53, 0, 90, - 91, 92, 262, 355, 0, 0, 95, 96, 0, 53, - 0, 0, 53, 0, 53, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 371, 0, 0, 0, 0, 106, 107, 53, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, - 32, 0, 482, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, + 0, 106, 310, 108, 109, 349, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 350, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 483, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 484, 41, - 0, 0, 485, 486, 0, 0, 0, 0, 487, 0, - 488, 489, 490, 491, 0, 0, 0, 0, 492, 0, - 0, 0, 493, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 494, 0, 0, 495, 0, 496, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 373, 0, 0, 0, - 0, 106, 107, 497, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 482, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 483, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 484, 41, 0, 0, 0, 486, 0, - 0, 0, 0, 487, 0, 488, 489, 490, 491, 0, - 0, 0, 0, 492, 0, 0, 0, 493, 0, 90, - 91, 92, 262, 355, 0, 0, 95, 96, 0, 494, - 0, 0, 495, 0, 496, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 375, 0, 0, 0, 0, 106, 107, 497, 57, + 0, 0, 90, 91, 92, 262, 352, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 353, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 633, 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 65, 106, 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 817, + 0, 0, 0, 106, 107, 108, 109, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 190, 0, 190, 65, 0, + 190, 30, 0, 0, 0, 190, 0, 0, 32, 190, + 0, 0, 0, 33, 0, 72, 73, 34, 190, 0, + 0, 0, 0, 0, 0, 190, 0, 0, 0, 36, + 190, 37, 75, 0, 190, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 190, 41, 190, 0, + 0, 0, 190, 0, 87, 0, 0, 88, 89, 0, + 190, 190, 0, 0, 190, 0, 0, 190, 0, 0, + 0, 0, 90, 91, 92, 93, 309, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1156, 0, 0, + 0, 106, 310, 108, 109, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 190, + 28, 0, 0, 200, 0, 200, 65, 0, 200, 30, + 0, 0, 0, 200, 0, 0, 32, 200, 0, 0, + 0, 33, 0, 72, 73, 34, 200, 0, 0, 0, + 0, 0, 0, 200, 0, 0, 0, 36, 200, 37, + 75, 0, 200, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 200, 41, 200, 0, 0, 0, + 200, 0, 87, 0, 0, 88, 89, 0, 200, 200, + 0, 0, 200, 0, 0, 200, 0, 0, 0, 0, + 90, 91, 92, 93, 94, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 0, 0, 106, + 1157, 108, 109, 84, 84, 0, 84, 0, 0, 84, + 84, 0, 0, 0, 84, 84, 84, 200, 84, 0, + 0, 0, 0, 0, 84, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 84, 0, 0, 0, 0, 84, + 0, 84, 84, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 84, 84, 0, + 0, 84, 0, 0, 84, 0, 84, 0, 84, 84, + 84, 84, 0, 84, 0, 0, 0, 0, 0, 0, + 84, 0, 0, 84, 84, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, + 84, 84, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 84, 0, 0, 0, 0, 0, 84, 84, 84, + 84, 0, 0, 0, 84, 0, 84, 0, 0, 0, + 0, 0, 84, 84, 0, 0, 0, 0, 0, 0, + 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 348, 0, 84, 84, 84, + 84, 349, 0, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 207, 65, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 350, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 208, 209, 210, 211, 0, 212, + 213, 214, 215, 216, 217, 218, 219, 0, 0, 220, + 221, 222, 223, 224, 225, 226, 227, 0, 90, 91, + 92, 262, 352, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 353, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 348, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 264, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 377, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 352, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 353, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 357, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 355, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 670, 0, 0, 0, 0, 106, 107, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 352, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 359, 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 65, 106, 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 672, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 352, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 361, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 264, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 355, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 674, 0, 0, 0, 0, 106, 107, 0, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 352, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 363, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 264, 30, 109, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 262, 352, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 365, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 264, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 692, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 352, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 367, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 355, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 694, 0, 0, 0, 0, 106, 107, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 352, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 369, 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 65, 106, 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 696, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 352, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 371, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 264, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 699, 0, 0, 0, 0, 106, 107, 0, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 352, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 659, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 264, 30, 109, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 262, 352, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 661, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 264, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 701, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 352, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 663, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 703, 0, 0, 0, 0, 106, 107, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 352, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 681, 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 65, 106, 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 705, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 352, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 683, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 264, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 707, 0, 0, 0, 0, 106, 107, 0, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 352, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 685, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 264, 30, 109, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 262, 686, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 688, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 264, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 709, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 686, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 690, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 711, 0, 0, 0, 0, 106, 107, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 686, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 692, 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 65, 106, 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 713, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 686, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 694, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 264, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 715, 0, 0, 0, 0, 106, 107, 0, 57, - 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, - 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 686, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 696, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 264, 30, 109, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, - 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 262, 686, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 698, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 264, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 717, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 686, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 700, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 719, 0, 0, 0, 0, 106, 107, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 686, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 702, 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 65, 106, 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 697, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 721, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, - 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, - 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, - 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 686, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 704, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 264, 30, 109, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 697, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 100, 101, 102, 103, 0, 0, 0, 104, 0, - 105, 889, 0, 0, 0, 0, 106, 107, 0, 57, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 686, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 706, 0, 0, 0, 0, + 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, + 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, + 0, 0, 0, 0, 65, 106, 264, 30, 109, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, + 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, + 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, + 92, 262, 686, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 103, 708, 0, 0, + 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, + 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 106, 264, 30, + 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 686, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 710, + 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 0, 0, 65, 106, + 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 686, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 874, 0, 0, 0, 0, 104, 105, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, 0, - 65, 108, 264, 30, 111, 0, 0, 0, 0, 0, + 65, 106, 264, 30, 109, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 262, 355, 0, - 0, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 98, 0, 0, 0, 0, 0, 100, 101, 102, 103, - 0, 0, 0, 104, 0, 105, 678, 0, 0, 0, - 0, 106, 107, 0, 57, 24, 0, 25, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 262, 352, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 667, 0, 0, 0, 0, 104, 105, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, + 0, 0, 65, 106, 264, 30, 109, 0, 0, 51, + 0, 51, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 51, 81, 39, 40, 261, + 51, 41, 0, 0, 85, 51, 0, 51, 51, 51, + 51, 0, 0, 51, 0, 51, 0, 0, 0, 51, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, + 263, 51, 0, 0, 51, 0, 51, 0, 0, 96, + 0, 0, 0, 0, 0, 0, 668, 669, 0, 0, + 211, 0, 0, 0, 670, 211, 0, 0, 0, 211, + 51, 211, 0, 0, 211, 0, 211, 211, 0, 211, + 0, 211, 0, 211, 0, 211, 211, 211, 211, 0, + 0, 211, 211, 0, 0, 106, 264, 211, 671, 211, + 211, 211, 0, 0, 211, 0, 211, 0, 211, 0, + 0, 211, 0, 211, 211, 211, 211, 0, 0, 0, + 211, 211, 211, 0, 0, 211, 211, 211, 0, 0, + 0, 0, 0, 0, 211, 211, 0, 211, 211, 526, + 211, 211, 211, 0, 0, 0, 211, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 0, 0, 211, 0, 65, 0, + 0, 30, 211, 211, 211, 0, 0, 0, 32, 0, + 0, 0, 211, 33, 0, 72, 73, 34, 0, 0, + 0, 0, 0, 366, 0, 0, 0, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 478, 81, 39, 40, 261, 0, 41, 0, 0, + 0, 0, 0, 211, 0, 0, 0, 0, 0, 366, + 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 262, 527, 480, 0, 0, + 0, 481, 482, 0, 0, 96, 0, 483, 0, 484, + 485, 486, 487, 0, 0, 0, 0, 488, 0, 0, + 0, 489, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 490, 0, 0, 491, 0, 492, 0, + 0, 0, 0, 0, 0, 366, 0, 0, 0, 0, + 0, 106, 528, 366, 366, 366, 366, 854, 0, 0, + 366, 366, 493, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 0, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, + 366, 366, 366, 366, 366, 366, 0, 52, 0, 52, + 0, 52, 366, 52, 0, 366, 52, 0, 52, 52, + 0, 52, 0, 52, 0, 52, 0, 52, 52, 52, + 52, 0, 0, 52, 52, 0, 0, 0, 0, 52, + 52, 52, 52, 52, 0, 0, 52, 0, 52, 0, + 52, 0, 52, 52, 0, 52, 52, 52, 52, 0, + 0, 52, 52, 52, 52, 0, 0, 52, 52, 52, + 0, 0, 0, 0, 0, 0, 52, 52, 0, 52, + 52, 0, 52, 52, 52, 0, 0, 0, 52, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, + 0, 52, 52, 51, 0, 0, 0, 51, 0, 51, + 0, 0, 51, 0, 51, 51, 0, 51, 0, 51, + 0, 51, 0, 51, 51, 51, 51, 0, 0, 51, + 51, 0, 0, 0, 0, 51, 0, 51, 51, 51, + 0, 0, 51, 0, 51, 0, 51, 0, 0, 51, + 0, 51, 51, 51, 51, 52, 0, 0, 51, 51, + 51, 0, 0, 51, 51, 51, 0, 0, 0, 0, + 0, 0, 51, 51, 0, 51, 51, 0, 51, 51, + 51, 0, 0, 0, 51, 0, 0, 51, 0, 0, + 0, 51, 0, 51, 0, 0, 51, 0, 51, 51, + 0, 51, 0, 51, 51, 51, 0, 51, 51, 51, + 51, 87, 0, 51, 51, 0, 0, 0, 0, 51, + 51, 51, 51, 51, 0, 0, 51, 0, 51, 0, + 51, 0, 0, 51, 0, 51, 51, 51, 51, 0, + 0, 0, 51, 51, 51, 0, 0, 51, 51, 51, + 0, 0, 0, 0, 0, 0, 51, 51, 0, 51, + 51, 51, 51, 51, 51, 0, 0, 0, 51, 0, + 0, 52, 0, 0, 0, 52, 0, 52, 0, 0, + 52, 0, 52, 52, 0, 52, 0, 52, 51, 52, + 0, 52, 52, 52, 52, 88, 0, 52, 52, 0, + 0, 0, 0, 52, 51, 52, 52, 52, 0, 0, + 52, 0, 52, 0, 52, 0, 0, 52, 0, 52, + 52, 52, 52, 0, 0, 0, 52, 52, 52, 0, + 0, 52, 52, 52, 0, 0, 0, 0, 0, 0, + 52, 52, 0, 52, 52, 51, 52, 52, 52, 0, + 0, 0, 52, 0, 0, 51, 0, 0, 0, 51, + 0, 51, 0, 0, 51, 0, 51, 51, 0, 51, + 0, 51, 52, 51, 0, 51, 51, 51, 51, 0, + 0, 51, 51, 0, 0, 0, 0, 51, 52, 51, + 51, 51, 0, 0, 51, 0, 51, 0, 51, 0, + 0, 51, 0, 51, 51, 51, 51, 0, 0, 0, + 51, 51, 51, 0, 0, 51, 51, 51, 0, 0, + 0, 0, 0, 0, 51, 51, 0, 51, 51, 52, + 51, 51, 51, 0, 0, 0, 51, 0, 0, 51, + 0, 0, 0, 51, 0, 51, 0, 0, 51, 0, + 51, 51, 0, 51, 0, 51, 51, 51, 0, 51, + 51, 51, 51, 239, 0, 51, 51, 0, 0, 0, + 0, 51, 0, 51, 51, 51, 0, 0, 51, 0, + 51, 366, 51, 0, 0, 51, 0, 51, 51, 51, + 51, 0, 0, 0, 51, 51, 51, 0, 0, 51, + 51, 51, 0, 0, 366, 0, 0, 0, 51, 51, + 0, 51, 51, 51, 51, 51, 51, 366, 0, 0, + 51, 0, 366, 0, 0, 366, 0, 366, 0, 366, + 366, 366, 366, 0, 0, 0, 0, 366, 0, 0, + 51, 366, 0, 0, 0, 366, 0, 240, 0, 0, + 0, 0, 0, 366, 0, 0, 366, 0, 366, 0, + 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 366, 0, 0, + 0, 65, 366, 0, 30, 0, 0, 0, 0, 366, + 366, 32, 289, 0, 366, 0, 33, 51, 72, 73, + 34, 0, 636, 0, 0, 0, 0, 366, 0, 637, + 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, + 41, 0, 0, 0, 0, 0, 0, 638, 0, 366, + 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 91, 92, 93, 94, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 1021, + 0, 639, 0, 0, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, + 105, 0, 0, 0, 0, 0, 0, 57, 24, 0, + 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, + 63, 0, 28, 0, 106, 107, 108, 109, 65, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 72, 73, 34, 0, 636, + 0, 0, 0, 0, 0, 0, 637, 0, 0, 36, + 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, + 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, + 0, 0, 0, 0, 638, 0, 0, 88, 89, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 92, 93, 94, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 639, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 0, 0, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, - 0, 0, 0, 0, 0, 65, 108, 264, 30, 111, + 0, 106, 107, 108, 109, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 85, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 91, 92, 262, 263, 0, 0, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 0, 679, 680, 0, 0, 213, 0, 0, 0, - 681, 213, 0, 0, 0, 213, 0, 213, 0, 0, - 213, 0, 213, 213, 0, 213, 0, 213, 0, 213, - 0, 213, 213, 213, 213, 0, 0, 213, 213, 0, - 0, 108, 264, 213, 682, 213, 213, 213, 0, 0, - 213, 0, 213, 0, 213, 0, 0, 213, 0, 213, - 213, 213, 213, 0, 0, 0, 213, 213, 213, 0, - 0, 213, 213, 213, 0, 0, 0, 0, 0, 0, - 213, 213, 0, 213, 213, 0, 213, 213, 213, 0, - 0, 0, 213, 0, 0, 530, 0, 0, 0, 0, - 0, 0, 368, 57, 24, 0, 25, 0, 0, 26, - 260, 0, 213, 0, 27, 62, 63, 0, 28, 0, - 0, 213, 213, 213, 65, 0, 0, 30, 0, 0, - 0, 213, 0, 0, 32, 0, 0, 0, 368, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 261, 213, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 262, 531, 0, 368, 95, 96, 0, 0, 0, - 0, 0, 0, 0, 98, 368, 368, 368, 368, 871, - 0, 0, 368, 368, 0, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 0, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 368, 368, 368, 368, 0, 0, - 108, 532, 0, 0, 368, 0, 54, 368, 54, 0, - 54, 0, 54, 0, 0, 54, 0, 54, 54, 0, - 54, 0, 54, 0, 54, 0, 54, 54, 54, 54, - 0, 0, 54, 54, 0, 0, 0, 0, 54, 54, - 54, 54, 54, 0, 0, 54, 0, 54, 0, 54, - 0, 54, 54, 0, 54, 54, 54, 54, 0, 0, - 54, 54, 54, 54, 0, 0, 54, 54, 54, 0, - 0, 0, 0, 0, 0, 54, 54, 0, 54, 54, - 0, 54, 54, 54, 0, 0, 0, 54, 0, 0, + 91, 92, 93, 309, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, + 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, + 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, + 0, 0, 27, 62, 63, 0, 28, 0, 106, 310, + 108, 109, 65, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 72, + 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, + 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, + 0, 41, 0, 0, 85, 0, 0, 0, 87, 0, + 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 91, 92, 93, + 309, 0, 0, 0, 0, 0, 0, 0, 0, 889, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, + 104, 105, 0, 0, 0, 0, 0, 0, 57, 24, + 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, + 62, 63, 0, 28, 0, 106, 310, 108, 109, 65, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 54, 54, 53, 0, 0, 0, 53, - 0, 53, 0, 0, 53, 0, 53, 53, 0, 53, - 0, 53, 0, 53, 0, 53, 53, 53, 53, 0, - 0, 53, 53, 0, 0, 0, 0, 53, 0, 53, - 53, 53, 0, 0, 53, 0, 53, 0, 53, 0, - 0, 53, 0, 53, 53, 53, 53, 54, 0, 0, - 53, 53, 53, 0, 0, 53, 53, 53, 0, 0, - 0, 0, 0, 0, 53, 53, 0, 53, 53, 0, - 53, 53, 53, 0, 0, 0, 53, 53, 0, 0, - 0, 53, 0, 53, 0, 0, 53, 0, 53, 53, - 0, 53, 0, 53, 0, 53, 53, 53, 53, 53, - 53, 0, 0, 53, 53, 0, 89, 0, 0, 53, - 0, 53, 53, 53, 0, 53, 53, 0, 53, 0, - 53, 0, 0, 53, 0, 53, 53, 53, 53, 0, - 0, 0, 53, 53, 53, 0, 0, 53, 53, 53, - 0, 0, 0, 0, 0, 0, 53, 53, 0, 53, - 53, 0, 53, 53, 53, 0, 53, 0, 53, 54, - 0, 0, 0, 54, 0, 54, 0, 0, 54, 0, - 54, 54, 0, 54, 0, 54, 0, 54, 53, 54, - 54, 54, 54, 0, 0, 54, 54, 0, 90, 0, - 0, 54, 0, 54, 54, 54, 0, 53, 54, 0, - 54, 0, 54, 0, 0, 54, 0, 54, 54, 54, - 54, 0, 0, 0, 54, 54, 54, 0, 0, 54, - 54, 54, 0, 0, 0, 0, 0, 0, 54, 54, - 0, 54, 54, 0, 54, 54, 54, 0, 53, 0, - 54, 53, 0, 0, 0, 53, 0, 53, 0, 0, - 53, 0, 53, 53, 0, 53, 0, 53, 0, 53, - 54, 53, 53, 53, 53, 0, 0, 53, 53, 0, - 0, 0, 0, 53, 0, 53, 53, 53, 0, 54, - 53, 0, 53, 0, 53, 0, 0, 53, 0, 53, - 53, 53, 53, 0, 0, 0, 53, 53, 53, 0, - 0, 53, 53, 53, 0, 0, 0, 0, 0, 0, - 53, 53, 0, 53, 53, 0, 53, 53, 53, 0, - 54, 0, 53, 53, 0, 0, 0, 53, 0, 53, - 0, 0, 53, 0, 53, 53, 0, 53, 0, 53, - 0, 53, 53, 53, 53, 53, 53, 0, 0, 53, - 53, 0, 241, 0, 0, 53, 0, 53, 53, 53, - 0, 0, 53, 0, 53, 368, 53, 0, 0, 53, - 0, 53, 53, 53, 53, 0, 0, 0, 53, 53, - 53, 0, 0, 53, 53, 53, 0, 0, 368, 0, - 0, 0, 53, 53, 0, 53, 53, 0, 53, 53, - 53, 368, 53, 482, 53, 0, 368, 0, 0, 368, - 0, 368, 0, 368, 368, 368, 368, 0, 0, 0, - 0, 368, 0, 0, 53, 368, 483, 0, 0, 368, - 0, 0, 0, 0, 242, 0, 0, 368, 0, 484, - 368, 0, 368, 0, 486, 0, 0, 0, 0, 487, - 0, 488, 489, 490, 491, 0, 0, 0, 0, 492, - 0, 368, 0, 493, 0, 0, 368, 1494, 0, 0, - 0, 0, 0, 0, 0, 494, 368, 368, 495, 291, - 496, 368, 0, 0, 53, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 368, 0, 27, 62, 63, 0, - 28, 0, 0, 0, 497, 0, 65, 0, 0, 30, - 0, 0, 0, 0, 1495, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 368, 647, 0, 0, - 0, 0, 0, 0, 648, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, - 0, 0, 649, 0, 1496, 88, 89, 0, 0, 0, + 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, + 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 98, 1039, 0, 650, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, + 0, 0, 0, 90, 91, 92, 93, 309, 0, 0, + 0, 0, 547, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 108, 109, 110, 111, 65, 0, 0, 30, + 28, 0, 106, 310, 108, 109, 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 647, 0, 0, - 0, 0, 0, 0, 648, 0, 0, 36, 0, 37, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, - 0, 0, 649, 0, 0, 88, 89, 0, 0, 0, + 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 650, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 108, 109, 110, 111, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 90, 91, 92, 93, 309, 0, 0, 0, 0, 541, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, + 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 57, 24, 0, 25, 0, 0, 26, 260, + 0, 0, 0, 27, 62, 63, 0, 28, 0, 106, + 310, 108, 109, 65, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, + 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, + 38, 0, 0, 77, 0, 79, 0, 81, 39, 40, + 261, 0, 41, 0, 0, 0, 0, 0, 0, 87, + 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, + 93, 309, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, + 0, 104, 105, 0, 0, 0, 0, 0, 0, 57, + 24, 0, 25, 0, 0, 26, 260, 0, 0, 0, + 27, 62, 63, 0, 28, 0, 106, 310, 108, 109, + 65, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 72, 73, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, + 77, 0, 79, 0, 81, 39, 40, 261, 0, 41, + 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 709, 709, 0, 709, + 0, 0, 709, 709, 0, 0, 0, 709, 709, 709, + 0, 709, 0, 106, 107, 108, 109, 709, 0, 0, + 709, 0, 0, 0, 0, 0, 0, 709, 0, 0, + 0, 0, 709, 0, 709, 709, 709, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 709, 0, + 709, 709, 0, 0, 709, 0, 0, 709, 0, 709, + 0, 709, 709, 709, 709, 0, 709, 0, 0, 0, + 0, 0, 0, 709, 0, 0, 709, 709, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 709, 709, 709, 709, 709, 0, 0, 0, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, + 709, 709, 709, 709, 0, 0, 0, 709, 0, 709, + 0, 0, 0, 0, 0, 709, 709, 0, 0, 0, + 0, 0, 0, 147, 147, 0, 147, 0, 0, 147, + 147, 0, 0, 0, 147, 147, 147, 0, 147, 0, + 709, 709, 709, 709, 147, 0, 0, 147, 0, 0, + 0, 0, 0, 0, 147, 0, 0, 0, 0, 147, + 0, 147, 147, 147, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 147, 0, 147, 147, 0, + 0, 147, 0, 0, 147, 0, 147, 0, 147, 147, + 147, 147, 0, 147, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 147, 147, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 147, 147, + 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, + 0, 147, 0, 0, 0, 0, 0, 147, 147, 147, + 147, 0, 0, 0, 147, 0, 147, 0, 0, 0, + 0, 0, 147, 147, 0, 0, 0, 0, 0, 0, + 57, 24, 0, 25, 0, 0, 26, 260, 0, 0, + 0, 27, 62, 63, 0, 28, 0, 147, 147, 147, + 147, 65, 0, 0, 30, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, + 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 90, 91, 92, 262, 686, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, + 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 103, 0, 57, 24, 0, 25, 104, + 105, 26, 260, 0, 0, 0, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 0, 0, 30, + 0, 0, 0, 0, 106, 264, 32, 109, 0, 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 85, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 85, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 904, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, - 0, 0, 551, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, - 0, 0, 545, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 309, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 108, 310, 110, 111, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 0, 0, 0, 0, 106, 107, 0, - 0, 0, 0, 0, 0, 722, 722, 0, 722, 0, - 0, 722, 722, 0, 0, 0, 722, 722, 722, 0, - 722, 0, 108, 109, 110, 111, 722, 0, 0, 722, - 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, - 0, 722, 0, 722, 722, 722, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 722, 0, 722, - 722, 0, 0, 722, 0, 0, 722, 0, 722, 0, - 722, 722, 722, 722, 0, 722, 0, 0, 0, 0, - 0, 0, 722, 0, 0, 722, 722, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 722, 722, 722, 722, 722, 0, 0, 722, 722, 0, - 0, 0, 0, 0, 0, 0, 722, 0, 0, 0, - 0, 0, 722, 722, 722, 722, 0, 0, 0, 722, - 0, 722, 0, 0, 0, 0, 0, 722, 722, 0, - 0, 0, 0, 0, 0, 149, 149, 0, 149, 0, - 0, 149, 149, 0, 0, 0, 149, 149, 149, 0, - 149, 0, 722, 722, 722, 722, 149, 0, 0, 149, - 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, - 0, 149, 0, 149, 149, 149, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 149, 0, 149, - 149, 0, 0, 149, 0, 0, 149, 0, 149, 0, - 149, 149, 149, 149, 0, 149, 0, 0, 0, 0, - 0, 0, 149, 0, 0, 149, 149, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 149, 149, 149, 149, 149, 0, 0, 149, 149, 0, - 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, - 0, 0, 149, 149, 149, 149, 0, 0, 0, 149, - 0, 149, 0, 0, 0, 0, 0, 149, 149, 0, - 0, 0, 0, 0, 0, 57, 24, 0, 25, 0, - 0, 26, 260, 0, 0, 0, 27, 62, 63, 0, - 28, 0, 149, 149, 149, 149, 65, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, - 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, - 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, - 81, 39, 40, 261, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 262, 697, 0, 0, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 100, 101, 102, 103, 0, 0, 0, 104, - 0, 105, 0, 57, 24, 0, 25, 106, 107, 26, - 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, - 0, 0, 0, 0, 65, 0, 0, 30, 0, 0, - 0, 0, 108, 264, 32, 111, 0, 0, 0, 33, - 0, 72, 73, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 75, 0, - 0, 38, 0, 0, 77, 0, 79, 0, 81, 39, - 40, 261, 0, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 262, 355, 0, 0, 95, 96, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 100, 101, 102, 103, 0, 0, 0, 104, 0, 105, - 0, 57, 24, 0, 25, 106, 107, 26, 260, 0, - 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, - 0, 0, 65, 0, 0, 30, 0, 0, 0, 0, - 108, 264, 32, 111, 0, 0, 0, 33, 0, 72, - 73, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 0, 37, 75, 0, 0, 38, - 0, 0, 77, 0, 79, 0, 81, 39, 40, 261, - 0, 41, 0, 0, 85, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, - 263, 0, 0, 95, 96, 0, 0, 0, 0, 0, - 57, 24, 98, 25, 0, 0, 26, 260, 0, 679, - 680, 27, 62, 63, 0, 28, 0, 681, 0, 0, - 0, 65, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 32, 0, 53, 0, 0, 33, 0, 72, 73, - 34, 0, 0, 0, 0, 0, 0, 0, 108, 1055, - 0, 682, 36, 0, 37, 75, 53, 0, 38, 0, - 0, 77, 0, 79, 0, 81, 39, 40, 261, 53, - 41, 0, 0, 85, 53, 0, 0, 0, 0, 53, - 0, 53, 53, 53, 53, 0, 0, 0, 0, 53, - 0, 0, 0, 53, 0, 90, 91, 92, 262, 263, - 0, 0, 95, 96, 0, 53, 0, 0, 53, 0, - 53, 98, 0, 768, 0, 768, 0, 768, 679, 680, - 768, 0, 768, 768, 0, 768, 681, 768, 0, 768, - 0, 768, 768, 768, 53, 0, 0, 768, 768, 0, - 53, 53, 0, 768, 223, 768, 768, 0, 0, 0, - 768, 0, 0, 0, 768, 0, 0, 108, 264, 0, - 682, 0, 0, 0, 0, 768, 768, 0, 768, 0, - 0, 0, 768, 768, 0, 0, 0, 0, 0, 0, - 768, 768, 0, 0, 768, 0, 0, 768, 0, 0, - 57, 24, 768, 25, 0, 0, 26, 260, 0, 0, + 90, 91, 92, 262, 352, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 103, 0, + 57, 24, 0, 25, 104, 105, 26, 260, 0, 0, 0, 27, 62, 63, 0, 28, 0, 0, 0, 0, - 0, 65, 0, 0, 30, 0, 0, 0, 768, 768, - 0, 32, 0, 0, 0, 0, 33, 0, 72, 73, - 34, 768, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 37, 75, 0, 0, 38, 0, - 0, 77, 0, 79, 0, 81, 39, 40, 261, 0, - 41, 0, 0, 85, 0, 0, 0, 0, 0, 0, - 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 0, 0, 30, 0, 0, 0, 51, 106, + 264, 32, 109, 0, 0, 0, 33, 0, 72, 73, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 51, 36, 0, 37, 75, 0, 0, 38, 0, + 0, 77, 0, 79, 51, 81, 39, 40, 261, 51, + 41, 0, 0, 85, 51, 0, 51, 51, 51, 51, + 0, 0, 0, 0, 51, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 90, 91, 92, 262, 263, - 0, 0, 95, 96, 0, 0, 0, 0, 767, 0, - 767, 98, 0, 767, 0, 767, 767, 0, 767, 0, - 767, 0, 767, 0, 767, 767, 767, 0, 0, 0, - 767, 767, 0, 0, 0, 0, 767, 0, 767, 767, - 0, 0, 0, 767, 0, 0, 0, 767, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 108, 264, 767, - 0, 767, 0, 0, 0, 767, 767, 0, 0, 0, - 0, 0, 0, 767, 767, 0, 767, 767, 767, 0, - 767, 767, 0, 767, 767, 767, 767, 0, 767, 0, - 767, 0, 767, 767, 767, 0, 0, 0, 767, 767, - 0, 0, 0, 0, 767, 0, 767, 767, 0, 0, - 0, 767, 0, 0, 0, 767, 0, 0, 0, 0, - 0, 0, 0, 0, 767, 0, 0, 767, 0, 767, - 0, 0, 0, 767, 767, 0, 0, 0, 0, 0, - 0, 767, 767, 0, 24, 767, 25, 0, 767, 26, - 0, 0, 1459, 767, 27, 0, 771, 0, 28, 0, - 772, 1460, 1461, 0, 0, 767, 1462, 30, 0, 0, - 0, 0, 1463, 0, 32, 0, 0, 0, 0, 33, - 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, - 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, - 40, 0, 24, 41, 25, 0, 1464, 26, 0, 0, - 1459, 1465, 27, 0, 771, 0, 28, 0, 772, 1460, - 1461, 0, 0, 767, 1462, 30, 0, 0, 0, 0, - 1463, 0, 32, 0, 0, 0, 0, 33, 0, 0, - 0, 34, 53, 0, 53, 0, 0, 53, 0, 0, - 1466, 0, 53, 36, 0, 37, 53, 0, 0, 38, - 0, 0, 0, 0, 0, 53, 0, 39, 40, 0, - 0, 41, 53, 0, 1464, 0, 0, 53, 0, 1465, - 0, 53, 53, 53, 53, 53, 0, 53, 0, 0, - 53, 1467, 53, 53, 0, 53, 53, 0, 0, 53, - 0, 0, 53, 0, 0, 53, 0, 53, 53, 0, - 0, 53, 53, 0, 53, 0, 0, 53, 0, 0, - 0, 53, 0, 53, 0, 53, 0, 0, 0, 0, - 53, 0, 0, 53, 0, 53, 0, 0, 0, 53, - 0, 0, 53, 0, 0, 0, 0, 53, 53, 0, - 0, 53, 0, 172, 53, 24, 0, 25, 0, 1467, - 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 33, 172, 0, 0, 34, 54, 616, 54, 0, 53, - 54, 0, 0, 617, 0, 54, 36, 0, 37, 54, - 0, 0, 38, 0, 0, 618, 0, 0, 54, 0, - 39, 40, 0, 0, 41, 54, 0, 619, 0, 0, - 54, 0, 0, 0, 54, 53, 54, 53, 54, 53, - 53, 0, 0, 54, 0, 53, 54, 0, 54, 53, - 0, 0, 54, 620, 0, 54, 0, 0, 53, 0, - 54, 54, 0, 0, 54, 53, 0, 54, 0, 0, - 53, 0, 0, 0, 53, 24, 53, 25, 53, 0, - 26, 0, 0, 53, 0, 27, 53, 0, 53, 28, - 0, 0, 53, 29, 0, 53, 0, 0, 30, 0, - 53, 53, 0, 31, 53, 32, 0, 53, 0, 0, - 33, 0, 621, 0, 34, 35, 0, 0, 0, 202, - 0, 202, 0, 0, 202, 0, 36, 0, 37, 202, - 0, 0, 38, 202, 0, 0, 0, 0, 0, 0, - 39, 40, 202, 24, 41, 25, 0, 42, 26, 202, - 1392, 0, 54, 27, 202, 0, 0, 28, 202, 0, - 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 202, 0, 202, 32, 0, 0, 202, 0, 33, 0, - 1393, 0, 34, 0, 202, 202, 0, 39, 202, 0, - 0, 202, 53, 0, 36, 0, 37, 0, 39, 0, - 38, 1394, 0, 39, 0, 0, 0, 39, 39, 40, - 39, 0, 41, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 39, 39, 0, 0, 0, 39, 39, 0, - 0, 0, 43, 39, 37, 39, 39, 39, 39, 0, - 0, 0, 0, 39, 0, 37, 0, 39, 0, 39, - 37, 0, 0, 0, 37, 0, 0, 37, 0, 39, - 0, 39, 39, 0, 39, 0, 0, 0, 39, 37, - 37, 0, 0, 0, 37, 37, 202, 0, 0, 0, - 37, 53, 37, 37, 37, 37, 0, 0, 39, 0, - 37, 0, 53, 0, 37, 0, 37, 53, 39, 39, - 387, 53, 0, 0, 53, 0, 37, 0, 0, 37, - 0, 37, 0, 0, 0, 37, 53, 53, 0, 0, - 0, 53, 53, 0, 0, 0, 0, 53, 53, 53, - 53, 53, 53, 0, 0, 37, 0, 53, 0, 53, - 0, 53, 0, 53, 53, 37, 37, 0, 53, 0, - 0, 53, 0, 53, 0, 0, 53, 0, 53, 0, - 0, 0, 53, 53, 53, 0, 53, 0, 53, 53, - 0, 0, 0, 0, 53, 0, 53, 53, 53, 53, - 0, 0, 53, 0, 53, 0, 0, 0, 53, 53, - 53, 0, 41, 0, 0, 0, 0, 0, 0, 0, - 53, 0, 53, 53, 53, 53, 0, 53, 0, 53, - 0, 0, 53, 0, 53, 53, 53, 53, 0, 0, - 0, 0, 53, 0, 0, 0, 53, 53, 0, 53, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 42, - 53, 53, 0, 53, 0, 53, 0, 0, 0, 0, - 53, 0, 53, 53, 53, 53, 0, 0, 0, 0, - 53, 0, 0, 0, 53, 0, 0, 53, 0, 0, - 0, 0, 0, 53, 53, 0, 53, 225, 0, 53, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 51, 0, 51, 57, 24, 96, 25, + 0, 0, 26, 260, 0, 668, 669, 27, 62, 63, + 0, 28, 0, 670, 0, 0, 0, 65, 0, 51, + 30, 0, 51, 51, 0, 0, 221, 32, 0, 0, + 0, 0, 33, 0, 72, 73, 34, 0, 0, 0, + 0, 0, 0, 0, 106, 1037, 0, 671, 36, 0, + 37, 75, 0, 0, 38, 0, 0, 77, 0, 79, + 0, 81, 39, 40, 261, 0, 41, 0, 0, 85, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 91, 92, 262, 263, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 0, 755, 0, 755, 0, + 755, 668, 669, 755, 0, 755, 755, 0, 755, 670, + 755, 0, 755, 0, 755, 755, 755, 0, 0, 0, + 755, 755, 0, 0, 0, 0, 755, 0, 755, 755, + 0, 0, 0, 755, 0, 0, 0, 755, 0, 0, + 106, 264, 0, 671, 0, 0, 0, 0, 755, 755, + 0, 755, 0, 0, 0, 755, 755, 0, 0, 0, + 0, 0, 0, 755, 755, 57, 24, 755, 25, 0, + 755, 26, 260, 0, 0, 755, 27, 62, 63, 0, + 28, 0, 0, 0, 0, 0, 65, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 755, 755, + 0, 33, 0, 72, 73, 34, 0, 0, 0, 0, + 0, 755, 0, 0, 0, 0, 0, 36, 0, 37, + 75, 0, 0, 38, 0, 0, 77, 0, 79, 0, + 81, 39, 40, 261, 0, 41, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, - 0, 53, 53, + 0, 0, 755, 0, 0, 0, 0, 0, 0, 0, + 90, 91, 92, 262, 263, 0, 0, 0, 0, 0, + 754, 0, 754, 96, 0, 754, 0, 754, 754, 0, + 754, 0, 754, 0, 754, 0, 754, 754, 754, 0, + 0, 0, 754, 754, 0, 0, 0, 0, 754, 0, + 754, 754, 0, 0, 0, 754, 0, 0, 0, 754, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, + 264, 754, 0, 754, 0, 0, 0, 754, 754, 0, + 0, 0, 0, 0, 0, 754, 754, 0, 24, 754, + 25, 0, 754, 26, 0, 0, 1435, 754, 27, 0, + 762, 0, 28, 0, 763, 1436, 1437, 0, 0, 0, + 1438, 30, 0, 0, 0, 0, 1439, 0, 32, 0, + 24, 0, 25, 33, 0, 26, 0, 34, 1435, 0, + 27, 0, 762, 754, 28, 0, 763, 1436, 1437, 36, + 0, 37, 1438, 30, 0, 38, 0, 0, 1439, 0, + 32, 0, 0, 39, 40, 33, 0, 41, 0, 34, + 1440, 0, 0, 0, 0, 1441, 0, 0, 0, 0, + 0, 36, 0, 37, 754, 0, 0, 38, 0, 0, + 0, 0, 0, 0, 0, 39, 40, 0, 51, 41, + 51, 0, 1440, 51, 0, 0, 0, 1441, 51, 0, + 0, 1442, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 51, 0, 0, 0, 0, 0, 0, 51, 0, + 51, 0, 51, 51, 0, 51, 0, 51, 0, 51, + 51, 51, 0, 0, 51, 0, 51, 0, 0, 51, + 0, 51, 1443, 51, 0, 51, 0, 0, 51, 0, + 51, 0, 0, 51, 51, 51, 0, 51, 0, 51, + 51, 51, 0, 51, 0, 24, 0, 25, 51, 0, + 26, 51, 0, 51, 1443, 27, 0, 51, 0, 28, + 51, 0, 0, 0, 0, 51, 51, 0, 30, 51, + 0, 0, 51, 0, 0, 32, 170, 0, 0, 0, + 33, 0, 0, 0, 34, 0, 605, 0, 0, 0, + 0, 0, 0, 606, 0, 0, 36, 0, 37, 0, + 0, 0, 38, 0, 0, 607, 170, 0, 0, 0, + 39, 40, 0, 0, 41, 0, 52, 608, 52, 0, + 0, 52, 51, 0, 0, 0, 52, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 0, 0, 0, 52, + 0, 0, 0, 609, 0, 0, 52, 0, 0, 0, + 0, 52, 0, 0, 51, 52, 0, 52, 0, 52, + 0, 51, 0, 51, 52, 0, 51, 52, 0, 52, + 0, 51, 0, 52, 0, 51, 52, 0, 0, 0, + 0, 52, 52, 0, 51, 52, 0, 0, 52, 0, + 0, 51, 0, 0, 0, 0, 51, 0, 0, 610, + 51, 0, 51, 0, 51, 0, 24, 0, 25, 51, + 0, 26, 51, 0, 51, 0, 27, 0, 51, 0, + 28, 51, 0, 0, 29, 0, 51, 51, 0, 30, + 51, 0, 0, 51, 31, 0, 32, 0, 0, 0, + 0, 33, 0, 0, 0, 34, 35, 0, 0, 0, + 0, 24, 0, 25, 0, 0, 26, 36, 1368, 37, + 0, 27, 0, 38, 0, 28, 0, 0, 0, 0, + 52, 39, 40, 0, 30, 41, 0, 0, 42, 0, + 0, 32, 0, 0, 0, 0, 33, 0, 1369, 24, + 34, 25, 0, 0, 26, 0, 0, 0, 0, 27, + 0, 0, 36, 28, 37, 0, 0, 0, 38, 1370, + 0, 0, 30, 0, 0, 51, 39, 40, 0, 32, + 41, 0, 0, 85, 33, 0, 0, 0, 34, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 37, 0, 0, 0, 38, 0, 37, 0, + 0, 0, 0, 0, 39, 40, 0, 0, 41, 37, + 43, 85, 0, 0, 37, 0, 0, 0, 37, 0, + 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 37, 37, 0, 0, 298, 37, 37, + 0, 35, 0, 0, 37, 0, 37, 37, 37, 37, + 0, 0, 35, 0, 37, 381, 0, 35, 37, 0, + 37, 35, 0, 0, 35, 0, 0, 0, 0, 0, + 37, 0, 37, 37, 0, 37, 35, 35, 0, 37, + 0, 35, 35, 0, 0, 31, 0, 35, 0, 35, + 35, 35, 35, 331, 0, 0, 0, 35, 0, 37, + 0, 35, 0, 35, 0, 0, 37, 37, 31, 0, + 0, 0, 0, 35, 0, 31, 35, 31, 35, 0, + 0, 31, 35, 0, 0, 0, 31, 0, 0, 0, + 0, 31, 0, 31, 31, 31, 31, 0, 31, 31, + 0, 31, 35, 0, 0, 31, 0, 0, 0, 35, + 35, 31, 0, 0, 0, 0, 31, 31, 0, 0, + 31, 31, 31, 31, 31, 31, 31, 0, 0, 0, + 0, 31, 0, 0, 0, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 51, 31, 31, 0, 0, + 31, 0, 31, 31, 31, 0, 51, 0, 0, 0, + 0, 51, 0, 0, 0, 51, 0, 0, 51, 0, + 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, + 51, 51, 0, 31, 31, 51, 51, 0, 51, 0, + 0, 51, 0, 51, 51, 51, 51, 0, 0, 51, + 0, 51, 0, 0, 51, 51, 0, 51, 51, 0, + 0, 51, 0, 0, 0, 0, 0, 51, 0, 0, + 51, 0, 51, 51, 51, 0, 51, 0, 51, 51, + 0, 51, 0, 0, 51, 0, 51, 51, 51, 51, + 0, 0, 0, 0, 51, 0, 51, 0, 51, 0, + 51, 0, 0, 39, 51, 0, 0, 0, 0, 0, + 51, 0, 0, 51, 0, 51, 0, 51, 0, 51, + 0, 51, 51, 0, 0, 0, 0, 51, 0, 51, + 51, 51, 51, 0, 0, 0, 0, 51, 0, 51, + 0, 51, 0, 0, 51, 0, 40, 0, 0, 0, + 0, 0, 0, 51, 0, 0, 51, 51, 51, 0, + 0, 51, 51, 51, 0, 0, 0, 51, 0, 51, + 51, 51, 51, 0, 0, 51, 0, 51, 0, 0, + 0, 51, 51, 0, 51, 51, 51, 0, 0, 223, + 0, 51, 0, 51, 0, 0, 51, 51, 51, 0, + 0, 0, 51, 0, 0, 0, 0, 51, 0, 51, + 51, 51, 51, 0, 51, 0, 0, 51, 0, 0, + 0, 51, 51, 0, 0, 0, 0, 51, 0, 324, + 0, 478, 51, 51, 0, 0, 51, 51, 51, 51, + 51, 51, 51, 0, 0, 0, 0, 51, 0, 0, + 0, 51, 0, 0, 479, 0, 0, 0, 0, 0, + 0, 0, 51, 51, 0, 0, 51, 480, 51, 325, + 0, 0, 482, 0, 0, 0, 0, 483, 0, 484, + 485, 486, 487, 0, 0, 0, 0, 488, 0, 0, + 0, 489, 51, 0, 0, 51, 51, 0, 0, 0, + 0, 0, 0, 490, 0, 0, 491, 0, 492, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 493, }; protected static readonly short [] yyCheck = { 17, - 4, 17, 306, 18, 52, 307, 17, 549, 296, 240, - 238, 499, 551, 196, 361, 199, 60, 17, 60, 195, - 521, 253, 69, 330, 52, 305, 305, 605, 321, 345, - 165, 422, 612, 303, 121, 422, 403, 838, 78, 1254, - 422, 88, 89, 6, 1044, 0, 93, 648, 59, 386, - 806, 392, 808, 402, 632, 256, 74, 997, 256, 1294, - 78, 340, 623, 119, 45, 121, 256, 48, 115, 80, - 256, 82, 1530, 268, 256, 392, 256, 95, 17, 268, - 98, 256, 268, 256, 256, 256, 256, 256, 256, 294, - 256, 256, 325, 386, 256, 1374, 852, 256, 145, 855, - 1335, 306, 1400, 256, 256, 1049, 256, 380, 256, 263, - 256, 256, 376, 256, 282, 1350, 17, 17, 395, 339, - 395, 1419, 256, 256, 372, 256, 256, 256, 256, 1117, - 378, 371, 372, 371, 372, 374, 375, 385, 256, 378, - 380, 418, 380, 418, 256, 343, 314, 165, 196, 165, - 425, 371, 88, 89, 165, 1143, 17, 432, 422, 379, - 433, 315, 321, 17, 443, 165, 726, 17, 196, 339, - 402, 731, 732, 17, 344, 111, 346, 372, 379, 349, - 350, 0, 352, 353, 745, 351, 376, 504, 378, 422, - 238, 17, 17, 375, 1473, 17, 376, 395, 378, 371, - 17, 1659, 1481, 375, 379, 252, 253, 376, 378, 371, - 238, 339, 385, 375, 385, 363, 344, 422, 346, 266, - 418, 349, 350, 373, 352, 353, 165, 425, 380, 545, - 375, 426, 375, 363, 432, 253, 467, 426, 466, 385, - 426, 259, 583, 433, 548, 332, 380, 228, 256, 293, - 378, 293, 424, 433, 422, 592, 303, 422, 605, 1538, - 1204, 303, 424, 433, 165, 165, 583, 203, 204, 422, - 809, 234, 1212, 329, 422, 17, 332, 395, 296, 424, - 597, 424, 326, 301, 302, 632, 342, 334, 868, 422, - 639, 422, 422, 422, 256, 479, 1594, 344, 316, 592, - 418, 642, 257, 904, 165, 433, 324, 425, 326, 356, - 422, 165, 330, 256, 325, 165, 0, 266, 60, 256, - 637, 165, 64, 1621, 363, 642, 643, 325, 346, 347, - 623, 256, 358, 269, 268, 1633, 256, 1635, 256, 165, - 165, 1249, 276, 165, 256, 361, 277, 394, 165, 256, - 390, 398, 256, 256, 256, 402, 403, 256, 266, 295, - 1251, 361, 256, 256, 372, 314, 1122, 256, 1623, 1624, - 378, 307, 390, 1588, 256, 263, 1177, 262, 422, 315, - 422, 1289, 256, 422, 402, 403, 256, 357, 256, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 1291, 448, 449, 335, 256, 452, 314, 639, 418, 746, - 970, 373, 257, 298, 975, 425, 352, 353, 466, 1654, - 390, 439, 1365, 165, 422, 1680, 474, 315, 257, 363, - 379, 341, 363, 88, 89, 62, 379, 256, 466, 66, - 67, 68, 379, 70, 71, 381, 474, 1007, 75, 76, - 1288, 1686, 745, 378, 81, 82, 111, 84, 378, 86, - 378, 373, 1462, 373, 91, 92, 365, 371, 371, 376, - 1009, 379, 340, 520, 376, 522, 380, 521, 771, 376, - 256, 256, 376, 376, 373, 421, 987, 794, 422, 470, - 471, 422, 423, 120, 376, 476, 256, 382, 383, 1442, - 374, 433, 549, 514, 378, 1065, 376, 1067, 1264, 372, - 1070, 272, 448, 449, 376, 856, 1354, 1273, 405, 371, - 339, 373, 753, 256, 343, 372, 377, 335, 575, 547, - 417, 549, 378, 551, 925, 296, 433, 256, 925, 856, - 372, 811, 376, 925, 911, 264, 1302, 779, 203, 204, - 887, 293, 371, 564, 256, 786, 375, 741, 377, 378, - 379, 380, 323, 581, 363, 376, 385, 585, 1148, 256, - 433, 433, 305, 257, 420, 622, 427, 1116, 378, 896, - 598, 341, 600, 358, 326, 596, 433, 363, 272, 605, - 422, 638, 639, 277, 887, 422, 683, 281, 374, 433, - 376, 612, 378, 647, 648, 605, 325, 1167, 1364, 1169, - 21, 1171, 296, 373, 269, 1523, 632, 363, 343, 361, - 420, 639, 433, 422, 277, 1014, 272, 683, 281, 647, - 648, 277, 632, 432, 261, 281, 256, 974, 265, 323, - 295, 688, 53, 372, 1552, 1553, 422, 1227, 1556, 378, - 296, 256, 339, 428, 429, 430, 431, 344, 342, 346, - 315, 1569, 349, 350, 1572, 352, 353, 1056, 972, 371, - 395, 373, 372, 375, 372, 372, 422, 323, 305, 1587, - 422, 728, 975, 730, 305, 917, 432, 1003, 823, 342, - 372, 1269, 739, 418, 305, 372, 342, 352, 353, 339, - 425, 372, 343, 1611, 433, 375, 372, 432, 726, 380, - 375, 365, 378, 731, 732, 371, 734, 1277, 380, 385, - 256, 375, 424, 343, 380, 427, 381, 1006, 1008, 371, - 371, 371, 779, 433, 339, 433, 433, 256, 380, 344, - 422, 346, 1044, 343, 349, 350, 682, 352, 353, 796, - 373, 371, 1381, 1313, 377, 375, 433, 377, 378, 424, - 380, 779, 433, 256, 811, 385, 421, 433, 1159, 811, - 424, 1162, 1159, 957, 1165, 1162, 794, 1159, 1165, 521, - 1162, 1381, 1381, 1165, 1381, 385, 305, 272, 1381, 398, - 399, 809, 1381, 448, 449, 395, 343, 272, 816, 419, - 818, 1430, 1303, 339, 427, 373, 1366, 1381, 344, 772, - 346, 296, 1119, 349, 350, 256, 352, 353, 418, 256, - 380, 296, 1380, 1381, 371, 425, 1386, 379, 433, 1133, - 1430, 1430, 432, 1430, 845, 1377, 847, 1430, 323, 886, - 858, 1430, 357, 395, 862, 1403, 395, 256, 323, 377, - 343, 1083, 380, 294, 872, 866, 1430, 868, 256, 339, - 904, 908, 377, 605, 911, 1381, 418, 294, 339, 418, - 917, 269, 1430, 425, 1221, 390, 425, 924, 371, 306, - 432, 925, 375, 925, 377, 378, 904, 380, 286, 516, - 632, 371, 385, 911, 294, 1453, 1080, 433, 1074, 917, - 371, 919, 339, 343, 952, 647, 648, 344, 844, 346, - 372, 929, 349, 350, 1430, 352, 353, 339, 380, 306, - 1485, 339, 1269, 372, 952, 343, 313, 863, 1216, 378, - 339, 357, 385, 343, 1499, 344, 563, 346, 343, 375, - 349, 350, 395, 352, 353, 385, 343, 883, 339, 371, - 1254, 377, 970, 371, 972, 395, 1521, 357, 17, 88, - 89, 371, 380, 363, 390, 418, 371, 1014, 371, 1257, - 380, 989, 425, 373, 371, 380, 994, 377, 418, 997, - 371, 269, 111, 380, 375, 425, 390, 306, 256, 1007, - 390, 1009, 432, 343, 313, 373, 433, 1443, 286, 962, - 1047, 60, 357, 375, 1450, 64, 325, 385, 375, 1056, - 377, 1499, 1300, 372, 6, 1247, 371, 376, 1365, 378, - 375, 371, 422, 388, 433, 17, 374, 682, 386, 387, - 378, 306, 1468, 308, 1468, 390, 1083, 1576, 313, 375, - 976, 377, 400, 401, 1480, 256, 1480, 1065, 372, 1067, - 325, 372, 1070, 1100, 372, 372, 380, 378, 376, 1106, - 378, 378, 380, 380, 806, 1083, 808, 393, 60, 372, - 199, 339, 64, 376, 203, 204, 344, 380, 346, 374, - 389, 349, 350, 378, 352, 353, 372, 372, 1316, 1320, - 376, 404, 378, 378, 380, 1442, 88, 89, 1116, 1638, - 1388, 1119, 378, 1286, 380, 394, 165, 374, 1044, 385, - 852, 378, 374, 855, 1161, 1159, 378, 1159, 1162, 111, - 1162, 1165, 1140, 1165, 402, 403, 376, 1090, 339, 1092, - 380, 1094, 1150, 344, 373, 346, 1675, 1148, 349, 350, - 269, 352, 353, 374, 375, 422, 377, 378, 379, 1167, - 1443, 1169, 1088, 1171, 419, 357, 1174, 1450, 1700, 1701, - 1462, 363, 904, 375, 422, 433, 295, 379, 376, 256, - 378, 373, 380, 165, 376, 377, 378, 277, 307, 1496, - 374, 1185, 376, 925, 378, 377, 315, 374, 390, 844, - 380, 378, 321, 374, 1212, 371, 1513, 378, 1216, 375, - 1247, 377, 378, 374, 380, 1221, 376, 378, 863, 385, - 380, 203, 204, 1231, 1232, 1532, 1227, 1534, 372, 373, - 422, 1221, 433, 352, 353, 371, 376, 373, 883, 1247, - 380, 364, 377, 1248, 293, 380, 1254, 374, 1286, 1257, - 1288, 378, 375, 419, 377, 376, 374, 371, 376, 380, - 378, 377, 381, 1269, 380, 378, 379, 386, 1286, 1277, - 1288, 366, 367, 396, 397, 1283, 380, 326, 1316, 1269, - 427, 428, 429, 430, 376, 1159, 378, 269, 1162, 390, - 391, 392, 1300, 416, 1588, 376, 256, 378, 1316, 371, - 372, 424, 421, 377, 427, 1313, 1314, 374, 378, 376, - 380, 293, 361, 295, 380, 374, 1354, 376, 374, 374, - 376, 376, 354, 355, 364, 307, 376, 256, 378, 448, - 449, 976, 372, 315, 380, 375, 1354, 377, 378, 321, - 1377, 294, 1380, 1381, 326, 385, 376, 374, 378, 376, - 374, 422, 376, 378, 294, 380, 396, 397, 1366, 1365, - 479, 376, 1380, 1381, 1290, 1403, 378, 343, 380, 1377, - 352, 353, 378, 422, 380, 1365, 416, 422, 1386, 361, - 1388, 378, 380, 380, 424, 1403, 356, 427, 354, 355, - 1122, 379, 1430, 433, 816, 1012, 818, 1434, 373, 381, - 372, 373, 418, 419, 386, 368, 369, 366, 367, 366, - 367, 376, 1430, 371, 372, 1453, 368, 369, 1712, 423, - 424, 376, 425, 426, 431, 432, 418, 1159, 372, 380, - 1162, 1357, 378, 1165, 433, 1453, 1442, 385, 376, 421, - 422, 376, 422, 1088, 294, 1446, 256, 294, 378, 376, - 364, 376, 1442, 1379, 378, 265, 376, 267, 372, 256, - 270, 375, 380, 377, 378, 275, 448, 449, 432, 279, - 432, 375, 521, 592, 0, 256, 294, 294, 288, 385, - 422, 376, 396, 397, 378, 295, 377, 379, 378, 1221, - 300, 377, 385, 376, 304, 427, 422, 378, 378, 1507, - 378, 378, 416, 1504, 623, 433, 316, 376, 318, 371, - 424, 378, 322, 427, 378, 1441, 376, 343, 379, 433, - 330, 331, 421, 378, 334, 376, 294, 337, 1566, 294, - 378, 374, 1264, 1459, 1460, 422, 1462, 1269, 375, 521, - 422, 1273, 371, 379, 256, 1583, 256, 378, 1566, 256, - 256, 385, 280, 256, 376, 371, 605, 372, 1596, 1597, - 343, 1487, 376, 682, 1490, 1583, 385, 298, 1576, 376, - 1302, 374, 385, 1574, 378, 375, 378, 378, 1596, 1597, - 1588, 380, 380, 632, 376, 1623, 1624, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 1605, 647, 648, - 385, 374, 376, 427, 376, 1623, 1624, 385, 347, 421, - 592, 371, 422, 88, 89, 385, 385, 256, 256, 376, - 376, 380, 741, 605, 372, 376, 745, 347, 378, 374, - 1638, 374, 1364, 1365, 375, 379, 111, 374, 376, 339, - 348, 623, 1680, 372, 378, 422, 376, 422, 375, 348, - 632, 376, 771, 256, 372, 371, 371, 380, 371, 385, - 356, 372, 1680, 1700, 1701, 647, 648, 1675, 337, 305, - 375, 380, 376, 422, 372, 0, 378, 372, 372, 376, - 373, 371, 1683, 1684, 375, 377, 422, 422, 375, 1690, - 1691, 380, 1700, 1701, 375, 375, 375, 385, 422, 371, - 682, 343, 375, 380, 1712, 373, 376, 385, 375, 94, - 1442, 376, 378, 377, 377, 100, 101, 102, 103, 104, - 105, 106, 107, 378, 199, 844, 378, 256, 203, 204, - 378, 257, 376, 380, 1379, 261, 422, 422, 422, 376, - 374, 315, 385, 372, 863, 380, 272, 380, 376, 380, - 376, 277, 376, 385, 374, 281, 372, 806, 284, 808, - 422, 376, 263, 745, 883, 375, 375, 385, 887, 376, - 296, 297, 372, 0, 376, 301, 302, 422, 0, 380, - 371, 307, 380, 309, 310, 311, 312, 372, 380, 771, - 376, 317, 0, 372, 269, 321, 1441, 323, 376, 371, - 376, 422, 371, 852, 374, 372, 855, 333, 376, 335, - 336, 372, 338, 376, 1459, 1460, 342, 374, 422, 372, - 295, 376, 376, 422, 806, 376, 808, 372, 380, 376, - 380, 380, 307, 372, 371, 376, 362, 372, 957, 377, - 315, 372, 1487, 376, 380, 1490, 321, 373, 380, 315, - 380, 263, 256, 380, 51, 904, 975, 976, 380, 380, - 380, 265, 844, 267, 380, 380, 270, 12, 5, 1080, - 852, 275, 957, 855, 1247, 279, 925, 352, 353, 1453, - 1247, 863, 1403, 1458, 288, 0, 1296, 1628, 1591, 1644, - 1579, 295, 1608, 1574, 1485, 1504, 300, 979, 1691, 979, - 304, 883, 1430, 979, 1418, 887, 381, 1505, 1685, 785, - 974, 386, 316, 1597, 318, 1601, 1596, 1684, 322, 1354, - 1534, 952, 904, 321, 309, 1044, 330, 331, 1357, 600, - 334, 917, 257, 337, 1003, 779, 261, 1133, 72, 811, - 348, 422, 422, 925, 1161, 1165, 421, 272, 433, 435, - 434, 438, 277, 436, 887, 437, 281, 1253, 1332, 284, - 345, 1080, 592, 1441, 165, 648, 1118, 1221, 1206, 1088, - 355, 296, 297, 448, 449, 1143, 301, 302, 1102, 1232, - 1219, 1303, 307, 565, 309, 310, 311, 312, 1221, 1272, - 1018, 737, 317, 975, 976, 457, 321, 457, 323, 1436, - 954, 1314, 947, -1, 479, -1, -1, -1, 333, -1, - -1, 336, -1, 338, -1, -1, -1, 342, 422, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 418, 419, 420, -1, 362, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, -1, -1, -1, -1, -1, -1, - 256, -1, 1044, -1, -1, -1, -1, -1, -1, 265, - -1, 267, -1, 1122, 270, -1, -1, -1, -1, 275, - -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, - -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, - -1, -1, -1, -1, 300, -1, 1088, -1, 304, -1, - 1159, -1, -1, 1162, -1, -1, 1165, 592, -1, -1, - 316, -1, 318, -1, -1, -1, 322, -1, -1, -1, - -1, -1, -1, -1, 330, 331, -1, -1, 334, -1, - 1122, 337, 257, -1, -1, -1, 261, -1, 623, -1, - -1, -1, -1, -1, -1, -1, -1, 272, -1, -1, - 545, -1, 277, -1, -1, -1, 281, -1, -1, 284, - -1, 1290, 1221, -1, 0, -1, -1, 1159, -1, -1, - 1162, 296, 297, 1165, -1, -1, 301, 302, -1, -1, - -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, -1, -1, 321, 682, 323, -1, - -1, -1, -1, 261, -1, 1264, -1, -1, 333, -1, - 1269, 336, -1, 338, 1273, -1, 422, 342, -1, -1, - -1, -1, -1, -1, -1, -1, 284, -1, 1357, 1221, - -1, -1, 0, 628, -1, -1, -1, 362, -1, 297, - -1, -1, -1, 1302, 302, -1, 371, 372, 373, 307, - 1379, 309, 310, 311, 312, -1, 741, -1, -1, 317, - 745, -1, -1, 321, -1, -1, -1, 325, -1, -1, - -1, -1, 1264, -1, -1, 333, -1, 1269, 336, -1, - 338, 1273, -1, -1, 679, 680, 771, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, 1290, -1, - -1, -1, 697, -1, 362, 1364, 1365, -1, -1, -1, - 1302, -1, 1441, -1, 1443, -1, -1, -1, -1, -1, - -1, 1450, -1, -1, -1, -1, -1, -1, -1, -1, - 1459, 1460, -1, 1462, -1, -1, -1, -1, -1, 1468, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1480, -1, -1, -1, -1, 1485, 256, 1487, 844, - -1, 1490, -1, -1, 422, 1357, 265, -1, 267, -1, - 1499, 270, 1364, 1365, -1, -1, 275, -1, 863, -1, - 279, -1, -1, 1442, -1, -1, -1, 1379, -1, 288, - -1, -1, 1521, -1, -1, -1, 295, -1, 883, -1, - -1, 300, 887, -1, -1, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 815, 257, -1, 322, -1, 261, -1, -1, -1, -1, - -1, 330, 331, -1, -1, 334, 272, -1, 337, -1, - -1, 277, -1, -1, -1, 281, -1, -1, 284, 1441, - 1442, 1443, -1, -1, -1, -1, -1, -1, 1450, -1, - 296, 297, -1, -1, -1, 301, 302, 1459, 1460, 0, - 1462, 307, 957, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, -1, 321, -1, 323, -1, 257, - 975, 976, -1, 261, -1, 1487, -1, 333, 1490, 335, - 336, -1, 338, -1, 272, -1, 342, -1, -1, 277, - -1, -1, -1, 281, -1, -1, 284, -1, -1, -1, - -1, -1, -1, 422, -1, -1, 362, -1, 296, 297, - -1, -1, -1, 301, 302, -1, 372, 373, -1, 307, + 306, 52, 18, 355, 52, 4, 17, 545, 386, 307, + 193, 240, 296, 20, 547, 238, 20, 17, 330, 60, + 17, 495, 416, 192, 416, 517, 305, 305, 162, 253, + 594, 119, 416, 303, 1026, 397, 601, 342, 78, 6, + 1231, 1274, 830, 0, 637, 321, 1031, 396, 59, 380, + 983, 117, 798, 119, 800, 612, 74, 621, 17, 337, + 78, 256, 386, 45, 256, 256, 48, 256, 268, 80, + 17, 82, 256, 335, 256, 69, 268, 256, 96, 256, + 1313, 1506, 325, 1376, 88, 89, 256, 465, 1357, 1358, + 256, 325, 369, 1326, 88, 89, 256, 60, 844, 93, + 377, 847, 1395, 370, 380, 109, 369, 374, 256, 1268, + 1379, 256, 256, 256, 339, 17, 268, 256, 256, 113, + 256, 373, 500, 1599, 1600, 369, 257, 402, 256, 256, + 256, 375, 256, 269, 88, 89, 256, 1406, 282, 414, + 256, 465, 193, 368, 162, 193, 358, 372, 142, 294, + 286, 162, 17, 430, 256, 109, 17, 424, 256, 437, + 1429, 256, 162, 340, 256, 162, 256, 430, 430, 369, + 314, 1330, 396, 368, 1226, 370, 419, 372, 430, 736, + 1656, 351, 373, 17, 375, 419, 368, 238, 372, 17, + 238, 339, 17, 17, 17, 377, 344, 1182, 346, 203, + 204, 349, 350, 162, 352, 353, 17, 373, 368, 375, + 1635, 339, 372, 591, 256, 162, 344, 1269, 346, 358, + 363, 349, 350, 423, 352, 353, 421, 0, 715, 424, + 419, 423, 461, 720, 721, 253, 541, 460, 544, 430, + 419, 259, 594, 363, 332, 372, 228, 375, 626, 203, + 204, 0, 293, 631, 632, 586, 372, 1190, 252, 253, + 162, 421, 303, 329, 430, 269, 332, 234, 801, 621, + 368, 423, 266, 339, 372, 419, 419, 1570, 296, 628, + 256, 419, 430, 301, 302, 375, 425, 426, 427, 428, + 392, 295, 857, 419, 421, 419, 889, 162, 316, 419, + 257, 162, 430, 307, 1597, 421, 324, 631, 326, 303, + 586, 315, 330, 415, 325, 269, 1609, 321, 1611, 1351, + 422, 363, 277, 421, 419, 343, 344, 419, 162, 371, + 293, 373, 256, 375, 162, 256, 612, 162, 162, 162, + 334, 295, 256, 292, 384, 349, 350, 341, 256, 256, + 335, 162, 256, 731, 0, 355, 292, 1103, 355, 353, + 256, 315, 268, 326, 263, 377, 384, 1155, 256, 294, + 276, 375, 256, 1564, 256, 416, 380, 419, 396, 397, + 256, 306, 256, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 388, 349, 350, 1630, 392, 256, + 256, 377, 396, 397, 628, 962, 737, 731, 363, 460, + 257, 415, 460, 256, 256, 433, 315, 1449, 430, 470, + 256, 375, 470, 372, 256, 1457, 256, 262, 1342, 1662, + 256, 1000, 368, 395, 396, 256, 256, 357, 442, 443, + 1186, 256, 256, 256, 373, 369, 1438, 1499, 442, 443, + 419, 375, 446, 416, 256, 462, 377, 363, 462, 373, + 736, 415, 995, 298, 419, 420, 266, 387, 475, 1038, + 957, 475, 421, 785, 382, 382, 1528, 1529, 382, 375, + 1532, 973, 1514, 256, 466, 467, 762, 375, 442, 443, + 472, 373, 376, 1545, 419, 256, 1548, 363, 1244, 510, + 376, 430, 376, 881, 1418, 372, 993, 1253, 257, 369, + 369, 1563, 256, 419, 314, 744, 910, 373, 910, 376, + 264, 341, 516, 272, 518, 543, 910, 545, 277, 547, + 373, 373, 281, 803, 896, 1587, 1282, 373, 368, 371, + 370, 872, 368, 375, 379, 380, 770, 296, 777, 560, + 370, 545, 373, 419, 517, 370, 370, 370, 576, 419, + 1047, 579, 1049, 1128, 1097, 1052, 339, 372, 370, 305, + 343, 430, 266, 343, 323, 374, 376, 571, 339, 590, + 363, 325, 586, 344, 672, 346, 375, 369, 349, 350, + 601, 352, 353, 342, 594, 368, 872, 594, 1228, 372, + 306, 374, 375, 376, 377, 263, 672, 313, 612, 382, + 628, 257, 382, 305, 375, 261, 421, 611, 636, 637, + 314, 621, 392, 373, 621, 424, 272, 343, 417, 369, + 961, 277, 363, 627, 628, 281, 419, 269, 284, 277, + 1205, 1271, 256, 281, 373, 415, 429, 369, 430, 369, + 296, 297, 422, 959, 286, 301, 302, 315, 1145, 429, + 1147, 307, 1149, 309, 310, 311, 312, 671, 20, 430, + 369, 317, 1358, 636, 637, 321, 392, 323, 902, 419, + 430, 815, 376, 677, 989, 1249, 962, 333, 419, 335, + 336, 305, 338, 256, 369, 377, 342, 715, 429, 415, + 375, 430, 720, 721, 342, 723, 422, 382, 430, 294, + 430, 364, 369, 429, 992, 994, 362, 671, 375, 372, + 1406, 374, 377, 717, 370, 719, 343, 375, 1026, 1358, + 272, 430, 736, 370, 728, 277, 88, 89, 1358, 281, + 393, 394, 305, 1137, 372, 1137, 1140, 1358, 1140, 1143, + 17, 1143, 770, 1137, 296, 430, 1140, 109, 762, 1143, + 413, 392, 803, 374, 376, 382, 377, 785, 421, 417, + 1257, 424, 357, 430, 1358, 392, 770, 1406, 363, 1358, + 392, 323, 368, 801, 415, 370, 1406, 272, 1100, 374, + 808, 1283, 810, 60, 788, 1406, 763, 64, 415, 272, + 342, 372, 387, 415, 1291, 422, 272, 373, 1114, 803, + 422, 296, 429, 1358, 88, 89, 1354, 429, 1358, 387, + 371, 372, 1406, 296, 375, 339, 837, 1406, 839, 343, + 296, 849, 836, 851, 419, 109, 339, 343, 323, 382, + 1064, 385, 21, 861, 855, 1461, 857, 1199, 852, 392, + 323, 203, 204, 419, 368, 256, 1343, 323, 390, 1475, + 343, 1406, 368, 377, 868, 368, 1406, 256, 872, 910, + 392, 889, 415, 376, 53, 1362, 415, 871, 896, 422, + 341, 1497, 836, 422, 902, 368, 904, 1056, 939, 399, + 400, 939, 339, 415, 377, 162, 914, 1249, 852, 893, + 422, 357, 896, 339, 1419, 392, 357, 429, 902, 370, + 1194, 1426, 363, 343, 868, 909, 357, 269, 374, 370, + 256, 368, 373, 374, 375, 1231, 889, 343, 415, 203, + 204, 387, 368, 374, 357, 422, 387, 944, 368, 957, + 944, 959, 343, 295, 294, 368, 387, 910, 374, 372, + 1234, 377, 368, 343, 343, 307, 306, 975, 962, 963, + 339, 377, 980, 315, 387, 983, 1098, 368, 419, 321, + 339, 372, 370, 374, 375, 993, 377, 995, 368, 368, + 998, 382, 949, 372, 382, 374, 375, 377, 377, 368, + 1342, 374, 1124, 382, 377, 269, 1280, 349, 350, 368, + 1224, 1475, 343, 339, 386, 306, 1000, 308, 344, 963, + 346, 306, 313, 349, 350, 416, 352, 353, 313, 1552, + 1444, 295, 1026, 375, 325, 401, 293, 368, 380, 1047, + 325, 1049, 1456, 307, 1052, 1029, 368, 383, 384, 368, + 372, 315, 374, 375, 1038, 377, 1064, 369, 377, 1444, + 382, 397, 398, 375, 1061, 370, 369, 1061, 368, 326, + 382, 1456, 375, 415, 256, 1069, 1418, 377, 368, 1298, + 1064, 1294, 369, 369, 370, 349, 350, 377, 375, 1097, + 1364, 1614, 1100, 1266, 416, 371, 368, 1081, 355, 375, + 442, 443, 391, 1087, 1472, 377, 1137, 354, 355, 1140, + 1137, 375, 1143, 1140, 1071, 6, 1073, 375, 1075, 377, + 462, 1489, 1130, 419, 382, 1069, 17, 1128, 1651, 256, + 369, 371, 369, 475, 373, 375, 373, 1145, 377, 1147, + 1508, 1149, 1510, 373, 1152, 375, 416, 377, 1676, 1677, + 1438, 415, 369, 1419, 419, 1139, 373, 339, 375, 416, + 1426, 373, 344, 375, 346, 377, 277, 349, 350, 60, + 352, 353, 369, 64, 1163, 368, 373, 370, 442, 443, + 377, 371, 1190, 373, 1137, 375, 1194, 1140, 371, 372, + 1143, 374, 375, 376, 372, 371, 374, 88, 89, 375, + 1208, 1209, 374, 371, 1205, 373, 371, 375, 368, 1199, + 375, 256, 1199, 371, 354, 355, 1224, 375, 109, 1225, + 371, 369, 370, 1231, 375, 1266, 1234, 1268, 1266, 371, + 1268, 372, 371, 375, 369, 376, 375, 369, 373, 377, + 1224, 373, 294, 372, 586, 374, 365, 366, 430, 1257, + 387, 388, 389, 1294, 377, 1263, 1294, 365, 366, 1249, + 517, 373, 1249, 375, 421, 422, 423, 424, 1564, 256, + 612, 162, 1280, 373, 377, 375, 1270, 375, 371, 377, + 373, 415, 416, 1291, 1292, 364, 375, 374, 377, 1330, + 369, 256, 1330, 372, 339, 374, 375, 377, 371, 344, + 373, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 203, 204, 393, 394, 1357, 1358, 294, 1357, + 1358, 371, 343, 373, 369, 371, 371, 373, 373, 671, + 375, 376, 377, 373, 413, 1343, 377, 594, 1379, 1333, + 356, 1379, 421, 417, 418, 424, 1354, 373, 373, 375, + 375, 430, 1342, 419, 1362, 1342, 1364, 371, 371, 373, + 373, 808, 1356, 810, 621, 1406, 419, 375, 1406, 377, + 1354, 375, 375, 377, 377, 375, 419, 377, 269, 636, + 637, 419, 420, 425, 426, 430, 370, 415, 1429, 377, + 376, 1429, 1688, 373, 736, 373, 369, 382, 375, 430, + 294, 373, 293, 373, 295, 294, 375, 671, 375, 373, + 373, 373, 1356, 256, 429, 372, 307, 377, 429, 256, + 762, 1422, 256, 1417, 315, 1419, 1410, 294, 1418, 294, + 321, 1418, 1426, 17, 382, 326, 373, 375, 374, 382, + 375, 1435, 1436, 376, 1438, 374, 373, 375, 419, 375, + 1444, 375, 377, 375, 373, 430, 424, 375, 349, 350, + 375, 368, 1456, 373, 355, 343, 375, 1461, 373, 1463, + 294, 294, 1466, 1417, 375, 1483, 60, 419, 371, 1480, + 64, 1475, 372, 368, 375, 419, 256, 256, 376, 380, + 256, 1435, 1436, 375, 836, 256, 256, 280, 382, 256, + 368, 1542, 339, 1497, 1542, 369, 0, 344, 343, 346, + 852, 373, 349, 350, 373, 352, 353, 256, 1559, 1463, + 377, 1559, 1466, 298, 415, 416, 868, 382, 373, 375, + 872, 1572, 1573, 371, 1572, 1573, 372, 364, 377, 371, + 256, 798, 369, 800, 1552, 372, 375, 374, 375, 1550, + 375, 442, 443, 424, 373, 382, 1564, 377, 1599, 1600, + 382, 1599, 1600, 373, 373, 373, 393, 394, 382, 339, + 347, 368, 836, 1581, 344, 382, 346, 382, 162, 349, + 350, 256, 352, 353, 256, 373, 413, 844, 852, 369, + 847, 256, 347, 430, 421, 371, 375, 424, 376, 372, + 339, 292, 944, 430, 868, 344, 1614, 346, 371, 371, + 349, 350, 339, 352, 353, 1656, 368, 373, 1656, 348, + 962, 963, 369, 339, 419, 375, 517, 373, 344, 372, + 346, 348, 889, 349, 350, 419, 352, 353, 256, 369, + 368, 382, 368, 1651, 377, 368, 356, 369, 337, 373, + 369, 372, 377, 910, 369, 375, 305, 370, 1659, 1660, + 430, 373, 369, 372, 368, 1666, 1667, 372, 1676, 1677, + 357, 419, 372, 374, 419, 419, 363, 364, 377, 419, + 1688, 368, 372, 370, 1026, 372, 373, 374, 375, 382, + 372, 430, 1676, 1677, 368, 586, 343, 377, 382, 963, + 387, 372, 370, 594, 373, 372, 393, 394, 374, 293, + 373, 375, 374, 256, 430, 375, 375, 375, 373, 1061, + 377, 612, 419, 373, 419, 371, 413, 1069, 373, 377, + 621, 419, 419, 377, 421, 62, 419, 424, 377, 66, + 67, 68, 326, 70, 71, 636, 637, 373, 75, 76, + 382, 373, 369, 382, 81, 82, 371, 84, 369, 86, + 373, 263, 1026, 257, 91, 92, 315, 261, 372, 372, + 382, 355, 369, 373, 373, 377, 0, 0, 272, 368, + 671, 377, 369, 277, 377, 373, 0, 281, 369, 368, + 284, 118, 377, 373, 419, 373, 371, 369, 369, 373, + 377, 377, 296, 297, 373, 1069, 256, 301, 302, 371, + 368, 419, 419, 307, 377, 309, 310, 311, 312, 369, + 373, 377, 373, 317, 369, 377, 373, 321, 382, 323, + 369, 373, 416, 368, 374, 369, 377, 369, 315, 333, + 377, 335, 336, 263, 338, 736, 1103, 377, 342, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 377, + 377, 377, 377, 377, 377, 51, 12, 5, 362, 1061, + 1224, 762, 944, 1224, 1429, 369, 370, 1379, 1276, 1604, + 1137, 1567, 1434, 1140, 1620, 1555, 1143, 1584, 1480, 339, + 1550, 966, 961, 776, 344, 966, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 798, 966, 800, + 1461, 1667, 1406, 1481, 1394, 1661, 1577, 1573, 1572, 369, + 1330, 371, 1660, 373, 1510, 375, 376, 377, 1270, 1186, + 939, 321, 1333, 517, 261, 385, 386, 770, 265, 637, + 390, 391, 1199, 902, 1114, 836, 72, 803, 345, 399, + 400, 401, 402, 844, 989, 416, 847, 416, 1139, 1143, + 427, 852, 428, 431, 414, 429, 872, 261, 430, 432, + 586, 1230, 1310, 0, 1417, 1199, 1184, 868, 305, 162, + 430, 872, 1099, 1209, 1083, 1199, 1197, 1244, 1124, 1283, + 284, 1333, 1249, 561, 1004, 451, 1253, 1252, 889, 451, + 1412, 941, 934, 297, 1292, -1, 1270, -1, 302, -1, + 594, -1, 726, 307, 1356, 309, 310, 311, 312, 910, + -1, -1, -1, 317, -1, 1282, -1, 321, -1, -1, + -1, 325, -1, -1, -1, -1, -1, 621, -1, 333, + -1, -1, 336, -1, 338, -1, -1, -1, -1, 256, + -1, -1, 636, 637, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 362, 1333, + -1, 962, 963, -1, -1, 1417, -1, 1419, -1, -1, + -1, -1, -1, -1, 1426, 1342, -1, -1, -1, -1, + -1, -1, 1356, 1435, 1436, -1, 1438, -1, -1, 94, + -1, -1, -1, 98, 99, 100, 101, 102, 103, 104, + 105, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1463, -1, -1, 1466, 419, -1, -1, -1, -1, + -1, -1, 339, -1, -1, 1026, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, 1417, -1, -1, -1, -1, -1, -1, + -1, 1418, 369, -1, 371, -1, 373, -1, 375, 376, + 377, 1435, 1436, -1, 1438, -1, -1, -1, 1069, 386, + -1, -1, -1, 390, 391, 512, -1, -1, -1, -1, + -1, -1, -1, -1, 401, 402, -1, -1, -1, 1463, + -1, -1, 1466, -1, -1, -1, -1, 414, -1, -1, + -1, -1, 1103, -1, 798, -1, 800, -1, -1, -1, + -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, + 257, -1, 559, -1, 261, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 272, 1137, -1, -1, 1140, + 277, -1, 1143, -1, 281, -1, -1, 284, -1, -1, + 844, -1, -1, 847, -1, -1, -1, -1, -1, 296, + 297, -1, -1, -1, 301, 302, -1, -1, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, 1186, 323, 0, -1, -1, + -1, -1, -1, -1, -1, 889, 333, -1, 1199, 336, + -1, 338, -1, -1, 309, 342, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 910, -1, -1, -1, + -1, -1, -1, -1, -1, 362, -1, 261, -1, 256, + -1, 368, 369, 370, -1, 262, -1, 342, -1, -1, + -1, -1, -1, 1244, -1, -1, -1, 352, 1249, -1, + 284, -1, 1253, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 297, -1, -1, -1, -1, 302, 1270, + -1, 298, -1, 307, -1, 309, 310, 311, 312, -1, + -1, 1282, 0, 317, -1, -1, -1, 321, -1, -1, + -1, 325, -1, -1, -1, -1, -1, -1, -1, 333, + -1, -1, 336, -1, 338, -1, -1, 412, 413, 414, + -1, -1, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 362, -1, + -1, -1, 1333, -1, -1, 369, -1, 364, -1, -1, + -1, 1342, 369, -1, -1, 372, -1, 374, 375, -1, + -1, -1, 379, 380, -1, 1356, 383, 384, 385, 386, + 387, 388, 389, 390, 391, -1, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 419, 413, 414, -1, -1, + -1, -1, -1, -1, 421, -1, -1, 424, 835, -1, + -1, -1, -1, 430, -1, -1, -1, -1, -1, 1103, + -1, -1, -1, -1, -1, -1, 1417, 1418, 1419, -1, + -1, -1, -1, -1, -1, 1426, -1, -1, -1, -1, + -1, -1, -1, -1, 1435, 1436, 541, 1438, -1, -1, + -1, -1, -1, 1137, 257, -1, 1140, -1, 261, 1143, + -1, -1, 0, -1, -1, -1, -1, -1, -1, 272, + -1, -1, 1463, -1, 277, 1466, -1, -1, 281, -1, + -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 296, 297, -1, -1, -1, 301, 302, + -1, -1, 1186, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, 1199, -1, -1, 321, -1, + 323, -1, 617, -1, -1, -1, -1, -1, -1, -1, + 333, -1, -1, 336, -1, 338, -1, -1, -1, 342, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + -1, -1, -1, 261, 262, -1, -1, -1, -1, 362, + 1244, -1, -1, -1, -1, 1249, 369, 370, -1, 1253, + -1, -1, -1, 668, 669, -1, 284, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 297, + 298, 686, -1, -1, 302, -1, -1, 305, 1282, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, 256, -1, 321, -1, 323, 261, 262, -1, 1044, + -1, -1, -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, - 338, -1, -1, -1, 342, -1, -1, -1, -1, 284, + 338, 339, 0, -1, -1, 343, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, 362, 363, 364, -1, 1342, -1, + 368, 369, -1, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, -1, 417, + -1, 419, 807, 421, -1, -1, 424, -1, 256, 257, + -1, -1, 430, -1, -1, -1, 264, 265, 266, 267, + 268, -1, 270, 271, 1418, 273, 274, 275, 276, 277, + 278, 279, 280, -1, -1, -1, -1, 285, -1, 287, + 288, 289, 290, 291, 292, -1, -1, 295, -1, 0, + -1, 299, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, + 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, + -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 297, 298, 362, 1080, -1, 302, -1, -1, - 305, -1, 307, 1088, 309, 310, 311, 312, 1003, -1, - -1, -1, 317, -1, -1, -1, 321, -1, -1, -1, - 325, -1, -1, -1, 0, -1, -1, -1, 333, -1, - -1, 336, -1, 338, 339, -1, -1, -1, 343, 344, - -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, 1051, 362, 363, 364, - -1, 366, 367, -1, -1, -1, 371, 372, -1, 374, - 375, 376, 377, 378, 379, 380, -1, 382, 383, -1, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, -1, -1, 420, -1, 422, -1, 424, - -1, -1, 427, -1, -1, 256, 257, -1, 433, -1, - -1, -1, -1, 264, 265, 266, 267, 268, -1, 270, - 271, -1, 273, 274, 275, 276, 277, 278, 279, 280, - 0, -1, -1, -1, 285, -1, 287, 288, 289, 290, - 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, - -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 1290, 337, -1, -1, 340, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, - 371, 372, -1, -1, 375, -1, -1, -1, -1, 380, - 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, - -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, - -1, -1, 1357, -1, -1, -1, -1, -1, -1, -1, - 0, 257, -1, -1, -1, 261, -1, -1, -1, -1, - 421, 422, 423, 424, 1379, 426, 272, -1, -1, -1, - -1, 277, 433, -1, -1, 281, -1, -1, 284, -1, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + 368, 369, -1, -1, 372, -1, -1, -1, -1, 377, + 378, 379, 380, 381, -1, -1, -1, 385, -1, 387, + -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 296, 297, -1, -1, -1, 301, 302, -1, -1, -1, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, -1, 321, -1, 323, -1, -1, - -1, -1, -1, -1, -1, -1, 1441, 333, 1443, -1, - 336, -1, 338, -1, -1, 1450, 342, -1, -1, -1, - -1, -1, -1, -1, 1459, 1460, -1, 1462, -1, -1, - -1, -1, -1, -1, -1, -1, 362, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 372, 373, -1, -1, - -1, -1, 1487, -1, -1, 1490, 256, 257, -1, -1, - -1, -1, -1, -1, 264, 265, 266, 267, 268, -1, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - 0, -1, -1, -1, -1, 285, -1, 287, 288, 289, - 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, - -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, - 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, 371, 372, -1, -1, 375, -1, -1, -1, -1, - 380, 381, 382, 383, 384, -1, 256, -1, 388, -1, - 390, 261, 262, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, - -1, 421, 422, 423, 424, -1, 426, 297, 298, -1, - 0, -1, 302, 433, -1, 305, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, - -1, -1, -1, 343, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, -1, -1, - -1, -1, 362, 363, -1, -1, 366, 367, -1, -1, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, - 390, -1, -1, 393, 394, -1, -1, -1, 398, 399, - 400, 401, 402, 403, 404, 405, 256, -1, -1, -1, - -1, 261, 262, -1, -1, -1, -1, 417, -1, -1, - 420, -1, 422, -1, 424, 357, -1, 427, -1, -1, - -1, 363, 364, 433, 284, -1, -1, -1, -1, 371, - -1, 373, -1, 375, 376, 377, 378, 297, 298, -1, - 0, -1, 302, -1, -1, 305, -1, 307, 390, 309, - 310, 311, 312, -1, 396, 397, -1, 317, -1, -1, - -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, - -1, -1, -1, 333, 416, -1, 336, -1, 338, 339, - 422, -1, 424, 343, 344, 427, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, 362, 363, -1, -1, 366, 367, -1, -1, - -1, 371, 372, 373, 374, 375, 376, -1, 378, 379, - 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, - -1, -1, -1, 393, 394, -1, -1, -1, 398, 399, - 400, 401, 402, 403, 404, 405, 256, -1, 0, -1, - -1, 261, 262, -1, -1, -1, -1, 417, -1, -1, - 420, -1, 422, -1, 424, -1, -1, 427, -1, -1, - -1, -1, -1, 433, 284, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 297, 298, -1, - -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, - -1, -1, -1, 343, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, 362, 363, -1, -1, 366, 367, -1, -1, - -1, 371, 372, 373, 374, 375, 376, -1, 378, 379, - 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, - -1, -1, -1, 393, 394, -1, -1, -1, 398, 399, - 400, 401, 402, 403, 404, 405, 256, -1, 0, -1, - -1, 261, 262, -1, -1, -1, -1, 417, -1, -1, - 420, -1, 422, -1, 424, -1, -1, 427, -1, -1, - -1, -1, -1, 433, 284, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 297, 298, -1, - -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, - -1, -1, -1, 343, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, -1, 362, 363, 256, -1, 366, 367, -1, -1, - 262, 371, 372, -1, 374, 375, 376, -1, 378, 379, - 380, -1, 382, 383, -1, -1, 386, 387, 388, 389, - -1, -1, -1, 393, 394, -1, -1, -1, 398, 399, - 400, 401, 402, 403, 404, 405, 298, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 417, -1, -1, - 420, -1, 422, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, 433, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, - -1, 343, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, -1, -1, -1, -1, - -1, 363, 256, -1, 366, 367, -1, -1, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, -1, - 382, 383, -1, -1, 386, 387, 388, 389, 390, -1, - -1, 393, 394, -1, -1, -1, 398, 399, 400, 401, - 402, 403, 404, 405, 256, -1, -1, -1, -1, -1, - 262, -1, -1, -1, -1, 417, -1, -1, 420, 0, - 422, -1, 424, -1, -1, 427, -1, -1, -1, -1, - -1, 433, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 339, 298, -1, -1, -1, - 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, 0, -1, -1, -1, - -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, - 374, -1, 376, -1, 378, 379, 380, 339, -1, -1, - -1, 343, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, - -1, 363, -1, 0, 366, 367, -1, -1, -1, 371, - 372, 373, 374, 375, 376, -1, 378, 379, 380, -1, - 382, 383, -1, -1, 386, 387, 388, 389, -1, 433, - -1, 393, 394, -1, -1, -1, 398, 399, 400, 401, - 402, 403, 404, 405, -1, -1, -1, -1, -1, -1, - 0, -1, -1, -1, -1, 417, -1, -1, 420, -1, - 422, -1, 424, 256, 257, 427, -1, -1, 261, -1, - -1, 433, 265, -1, 267, -1, -1, 270, -1, 272, - 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, - 283, 284, -1, -1, 287, 288, -1, 0, -1, -1, - 293, -1, 295, 296, 297, -1, -1, 300, 301, 302, - -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, - 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, - 333, 334, -1, 336, 337, 338, -1, -1, -1, 342, + 418, 419, 420, 421, -1, 423, -1, -1, 256, 257, + -1, -1, 430, -1, 989, -1, 264, 265, 266, 267, + 268, -1, 270, 271, -1, 273, 274, 275, 276, 277, + 278, 279, -1, 0, -1, -1, -1, 285, -1, 287, + 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, + -1, 299, 300, -1, 302, 303, 304, -1, 1033, -1, + -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, + 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, + -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 0, -1, -1, -1, -1, -1, 257, -1, -1, 362, - 261, -1, -1, -1, -1, -1, -1, -1, 371, 372, - 373, 272, -1, -1, -1, -1, 277, -1, 381, -1, - 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 296, 297, -1, -1, -1, - 301, 302, -1, 257, -1, -1, 307, 261, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, 272, 422, - 321, -1, 323, 277, -1, -1, -1, 281, -1, -1, - 284, -1, 333, -1, -1, 336, -1, 338, -1, -1, - -1, 342, 296, 297, -1, -1, -1, 301, 302, -1, - 257, -1, -1, 307, 261, 309, 310, 311, 312, -1, - -1, 362, -1, 317, -1, 272, -1, 321, -1, 323, - 277, 372, 373, -1, 281, -1, -1, 284, -1, 333, - -1, -1, 336, -1, 338, -1, -1, -1, 342, 296, - 297, -1, -1, -1, 301, 302, -1, 257, -1, -1, - 307, 261, 309, 310, 311, 312, -1, -1, 362, -1, - 317, -1, 272, -1, 321, -1, 323, 277, -1, 373, - -1, 281, -1, -1, 284, -1, 333, -1, -1, 336, - -1, 338, -1, -1, -1, 342, 296, 297, -1, -1, - -1, 301, 302, -1, 257, -1, -1, 307, 261, 309, - 310, 311, 312, -1, -1, 362, -1, 317, -1, 272, - -1, 321, -1, 323, 277, -1, -1, -1, 281, -1, - -1, 284, -1, 333, -1, -1, 336, -1, 338, -1, - -1, -1, 342, 296, 297, -1, -1, -1, 301, 302, - -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 362, -1, 317, -1, -1, 257, 321, -1, - 323, 261, -1, -1, -1, -1, -1, -1, -1, -1, - 333, -1, 272, 336, -1, 338, -1, 277, -1, 342, - -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 296, 297, -1, 362, - -1, 301, 302, -1, -1, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, 323, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 333, -1, 256, 336, -1, 338, -1, - -1, -1, 342, 264, 265, 266, 267, -1, -1, 270, - 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, - -1, -1, 362, -1, 285, -1, 287, 288, 289, 290, - 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, - -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, - 341, -1, -1, 344, 345, -1, 256, -1, -1, -1, - -1, -1, 262, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, - 371, -1, -1, -1, 375, -1, -1, -1, -1, 380, - 381, 382, 383, 384, -1, -1, -1, 388, 298, 390, - -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + 368, 369, -1, -1, 372, -1, -1, -1, -1, 377, + 378, 379, 380, 381, -1, 256, -1, 385, -1, 387, + 261, 262, -1, -1, -1, 393, 394, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 284, 0, -1, -1, -1, -1, -1, + 418, 419, 420, 421, -1, 423, 297, 298, -1, -1, + -1, 302, 430, -1, 305, -1, 307, -1, 309, 310, + 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, + 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, + -1, -1, 333, -1, -1, 336, -1, 338, 339, -1, + -1, -1, 343, 344, -1, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, -1, -1, -1, + -1, 362, 363, -1, -1, -1, -1, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, -1, 379, 380, + -1, -1, 383, 384, 385, 386, 387, -1, -1, 390, + 391, -1, -1, -1, 395, 396, 397, 398, 399, 400, + 401, 402, -1, -1, -1, -1, -1, -1, -1, 256, + -1, -1, -1, 414, 261, 262, 417, -1, 419, -1, + 421, -1, -1, 424, -1, -1, -1, -1, -1, 430, + -1, 0, -1, -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, -1, -1, 262, - 421, 422, 423, 424, -1, -1, -1, -1, -1, 339, - -1, -1, 433, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, -1, -1, - -1, -1, -1, 363, 364, 298, 366, 367, -1, -1, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, -1, 382, 383, -1, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, -1, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, -1, - 256, -1, 422, -1, 424, 425, 262, 427, -1, -1, - 363, 364, -1, 433, -1, -1, -1, -1, -1, 372, - 373, -1, 375, 376, 377, 378, -1, 380, -1, 382, - 383, -1, 385, 386, 387, 388, 389, -1, 391, 392, - 393, 394, 298, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, -1, -1, -1, -1, 422, - -1, 424, -1, -1, 427, -1, -1, -1, -1, -1, - 433, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 297, 298, -1, -1, -1, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 339, -1, -1, -1, 343, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, -1, -1, 362, 363, -1, -1, -1, + -1, 368, 369, 370, 371, 372, 373, -1, 375, 376, + 377, -1, 379, 380, -1, -1, 383, 384, 385, 386, + 256, -1, -1, 390, 391, 261, 262, -1, 395, 396, + 397, 398, 399, 400, 401, 402, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 414, 284, -1, + 417, -1, 419, -1, 421, -1, -1, 424, -1, -1, + -1, 297, 298, 430, -1, -1, 302, -1, -1, 305, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, -1, -1, 321, -1, -1, -1, 325, + -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, + 336, -1, 338, 339, -1, -1, -1, 343, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, -1, -1, -1, -1, -1, 363, 364, -1, - 366, 367, -1, -1, -1, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 256, 382, 383, -1, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, -1, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 256, -1, -1, 422, -1, 424, 262, - -1, 427, -1, -1, -1, -1, -1, 433, -1, -1, + 356, -1, -1, -1, -1, -1, 362, 363, -1, -1, + -1, -1, 368, 369, 370, 371, 372, 373, -1, 375, + 376, 377, -1, 379, 380, -1, -1, 383, 384, 385, + 386, -1, -1, -1, 390, 391, -1, -1, -1, 395, + 396, 397, 398, 399, 400, 401, 402, 256, -1, -1, + -1, -1, 261, 262, -1, -1, -1, -1, 414, -1, + -1, 417, -1, 419, 0, 421, -1, -1, 424, -1, + -1, -1, -1, -1, 430, 284, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 297, 298, + -1, -1, -1, 302, -1, -1, 305, -1, 307, -1, + 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, + -1, -1, 321, -1, -1, -1, 325, -1, -1, -1, + -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, + 339, -1, -1, -1, 343, 344, -1, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, -1, -1, 362, 363, -1, -1, -1, -1, 368, + 369, -1, 371, 372, 373, -1, 375, 376, 377, -1, + 379, 380, 256, -1, 383, 384, 385, 386, 262, -1, + -1, 390, 391, -1, -1, -1, 395, 396, 397, 398, + 399, 400, 401, 402, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 414, -1, -1, 417, -1, + 419, -1, -1, -1, 298, -1, -1, -1, -1, -1, + -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 339, -1, -1, -1, 343, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, -1, -1, -1, -1, 256, 363, + -1, -1, -1, -1, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, -1, 379, 380, -1, -1, 383, + 384, 385, 386, 387, -1, -1, 390, 391, -1, -1, + -1, 395, 396, 397, 398, 399, 400, 401, 402, -1, + 256, -1, -1, -1, -1, 0, 262, -1, -1, -1, + 414, -1, -1, 417, -1, 419, -1, 421, -1, -1, + 424, -1, -1, -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 298, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 366, 367, -1, -1, -1, - -1, 372, -1, 374, -1, 376, 339, 378, 379, 380, - -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, -1, -1, -1, -1, -1, - 363, 364, -1, 366, 367, -1, -1, -1, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, -1, 382, - 383, -1, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 433, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, -1, 256, 256, -1, 422, - -1, 424, 262, -1, 427, -1, 265, -1, 267, -1, - 433, 270, -1, -1, -1, -1, 275, -1, -1, -1, + -1, 339, 298, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 369, -1, 371, -1, 373, 0, 375, 376, 377, + -1, -1, -1, 339, -1, -1, -1, 343, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, -1, -1, 363, -1, -1, + -1, -1, 368, 369, 370, 371, 372, 373, -1, 375, + 376, 377, -1, 379, 380, -1, -1, 383, 384, 385, + 386, -1, 430, -1, 390, 391, -1, -1, -1, 395, + 396, 397, 398, 399, 400, 401, 402, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 414, -1, + -1, 417, -1, 419, -1, 421, 256, 257, 424, -1, + -1, 261, -1, -1, 430, 265, -1, 267, -1, -1, + 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, + 0, 281, 282, 283, 284, -1, -1, 287, 288, -1, + -1, -1, -1, 293, -1, 295, 296, 297, -1, -1, + 300, 301, 302, -1, 304, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, + -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, + 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, + -1, -1, 342, 0, -1, -1, -1, -1, -1, -1, + -1, -1, 257, -1, -1, -1, 261, -1, -1, -1, + -1, -1, 362, -1, -1, -1, -1, 272, 368, 369, + 370, -1, 277, -1, -1, -1, 281, -1, 378, 284, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, 296, 297, -1, -1, -1, 301, 302, -1, -1, + -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, -1, 317, -1, -1, -1, 321, -1, 323, 419, + -1, -1, -1, 257, -1, -1, -1, 261, 333, 0, + -1, 336, -1, 338, -1, -1, -1, 342, 272, -1, + -1, -1, -1, 277, -1, -1, -1, 281, -1, -1, + 284, -1, -1, -1, -1, -1, -1, 362, -1, -1, + -1, -1, 296, 297, 369, 370, -1, 301, 302, -1, + -1, -1, 0, 307, -1, 309, 310, 311, 312, -1, + -1, -1, -1, 317, -1, -1, -1, 321, -1, 323, + -1, -1, -1, -1, 257, -1, -1, -1, 261, 333, + -1, -1, 336, -1, 338, -1, -1, -1, 342, 272, + -1, -1, -1, -1, 277, -1, -1, -1, 281, -1, + -1, 284, -1, -1, -1, -1, -1, -1, 362, -1, + -1, -1, -1, 296, 297, -1, 370, 257, 301, 302, + -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, 272, -1, 317, -1, -1, 277, 321, -1, + 323, 281, -1, -1, 284, -1, -1, -1, -1, -1, + 333, -1, -1, 336, -1, 338, 296, 297, -1, 342, + -1, 301, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, 362, + 257, 321, -1, 323, 261, -1, -1, -1, -1, -1, + -1, -1, -1, 333, -1, 272, 336, -1, 338, -1, + 277, -1, 342, -1, 281, -1, -1, 284, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 296, + 297, -1, 362, 257, 301, 302, -1, 261, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, 272, -1, + 317, -1, -1, 277, 321, -1, 323, 281, -1, -1, + 284, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 296, 297, -1, 342, 257, 301, 302, -1, + 261, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, 272, -1, 317, -1, 362, 277, 321, -1, 323, + 281, -1, -1, 284, -1, -1, -1, -1, -1, 333, + -1, -1, 336, -1, 338, 296, 297, -1, 342, 257, + 301, 302, -1, 261, -1, -1, 307, -1, 309, 310, + 311, 312, -1, -1, 272, -1, 317, -1, 362, 277, + 321, -1, 323, 281, -1, -1, 284, -1, -1, -1, + -1, -1, 333, -1, -1, 336, -1, 338, 296, 297, + -1, 342, -1, 301, 302, -1, -1, -1, -1, 307, + -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, + -1, 362, -1, 321, -1, 323, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 333, -1, 256, 336, -1, + 338, -1, -1, -1, 342, 264, 265, 266, 267, -1, + -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, + 279, -1, -1, -1, 362, -1, 285, -1, 287, 288, + 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, + 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, + 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, + -1, 340, 341, -1, -1, 344, 345, 256, -1, -1, + -1, 261, -1, 262, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, + -1, -1, -1, 372, 284, -1, -1, -1, 377, 378, + 379, 380, 381, -1, -1, -1, 385, 297, 387, 298, + -1, -1, 302, -1, 393, 394, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, -1, -1, -1, -1, 418, + 419, 420, 421, 333, -1, -1, 336, -1, 338, -1, + 339, 430, -1, -1, -1, 344, 256, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, -1, + -1, -1, 362, -1, 363, 364, -1, -1, -1, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, -1, + 379, 380, -1, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, -1, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, -1, 256, 419, + 419, -1, 421, 422, 262, 424, -1, -1, -1, 339, + -1, 430, -1, -1, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 369, + 298, 371, -1, 373, -1, 375, 376, 377, -1, -1, + -1, -1, -1, 383, 384, 385, 386, -1, -1, -1, + 390, 391, -1, -1, -1, 395, 396, 397, 398, 399, + 400, 401, 402, -1, -1, -1, -1, -1, -1, -1, + -1, 339, -1, -1, 414, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 430, -1, -1, -1, -1, 363, 364, -1, -1, -1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 256, 256, + -1, 419, -1, 421, 262, -1, 424, -1, 265, -1, + 267, -1, 430, 270, -1, -1, -1, -1, 275, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + 298, -1, -1, 300, -1, -1, -1, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, -1, -1, -1, 322, -1, -1, -1, -1, + -1, -1, -1, 330, 331, -1, -1, 334, -1, -1, + 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + -1, -1, -1, -1, -1, 363, 364, -1, -1, -1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, 256, 256, + -1, 419, 419, 421, 262, -1, 424, -1, 265, -1, + 267, -1, 430, 270, -1, -1, -1, -1, 275, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + 298, -1, -1, 300, -1, -1, -1, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, -1, -1, -1, 322, -1, -1, -1, -1, + -1, -1, -1, 330, 331, -1, -1, 334, -1, -1, + 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + -1, -1, -1, -1, -1, 363, 364, -1, -1, -1, + -1, 369, 370, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, 256, 256, + -1, 419, 419, 421, 262, -1, 424, -1, 265, -1, + 267, -1, 430, 270, -1, -1, -1, -1, 275, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + 298, -1, -1, 300, -1, -1, -1, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, -1, -1, -1, 322, -1, -1, -1, -1, + -1, -1, -1, 330, 331, -1, -1, 334, -1, -1, + 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, 364, -1, -1, -1, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 256, 256, -1, + -1, -1, 419, 421, 262, -1, 265, -1, 267, -1, + -1, 270, 430, -1, -1, -1, 275, -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, 298, -1, - -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + 298, 300, -1, -1, -1, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, - -1, 330, 331, -1, -1, 334, -1, -1, 337, 339, - -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, -1, -1, - -1, -1, -1, 363, 364, -1, 366, 367, -1, -1, - -1, -1, 372, 373, 374, 375, 376, 377, 378, 379, - 380, -1, 382, 383, -1, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, -1, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, -1, 256, - -1, -1, 422, 422, 424, 262, -1, 427, -1, -1, - -1, 261, -1, 433, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, + -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, 364, -1, -1, -1, + 368, 369, -1, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, 256, 256, + 419, -1, -1, 421, 262, -1, 424, -1, 265, -1, + 267, -1, 430, 270, -1, -1, -1, -1, 275, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + 298, -1, -1, 300, -1, -1, -1, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, -1, -1, -1, 322, -1, -1, -1, -1, + -1, -1, -1, 330, 331, -1, -1, 334, -1, -1, + 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, 364, -1, -1, -1, + -1, 369, -1, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, 256, -1, + -1, 261, 419, 421, 262, -1, 424, -1, -1, -1, + -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, - -1, 298, -1, -1, -1, -1, -1, 297, -1, -1, - -1, -1, 302, -1, -1, -1, -1, 307, -1, 309, + -1, -1, -1, -1, -1, -1, -1, 297, -1, -1, + 298, -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, - -1, 321, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 339, 333, -1, -1, 336, 344, 338, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, 256, -1, -1, -1, -1, 364, -1, 366, - 367, -1, 362, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, -1, 382, 383, -1, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, -1, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, -1, 256, -1, -1, -1, -1, 424, 262, -1, - -1, -1, 422, -1, -1, -1, 433, -1, -1, -1, - -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, - 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, 298, -1, -1, -1, -1, -1, - -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, - 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 394, -1, -1, -1, -1, 339, -1, -1, -1, -1, - 344, 405, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 417, -1, 256, -1, -1, -1, -1, - 364, -1, 366, 367, -1, -1, -1, 371, 372, 433, - 374, 375, 376, 377, 378, 379, 380, -1, 382, 383, - -1, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, -1, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, -1, 256, -1, -1, -1, -1, - 424, 262, -1, 427, -1, -1, -1, -1, -1, 433, - -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, 298, -1, -1, - -1, -1, -1, -1, -1, 366, 367, -1, -1, -1, - -1, 372, -1, 374, -1, 376, -1, 378, 379, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 394, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, 405, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 417, -1, 256, -1, - -1, -1, -1, 364, -1, 366, 367, -1, -1, -1, - -1, 372, 433, 374, 375, 376, 377, 378, 379, 380, - -1, 382, 383, -1, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, -1, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, -1, 256, -1, - -1, -1, -1, 424, 262, -1, 427, -1, -1, -1, - -1, -1, 433, -1, -1, -1, -1, -1, -1, -1, + -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - 298, -1, -1, -1, -1, -1, -1, -1, 366, 367, - -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, - 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 394, -1, -1, -1, + -1, -1, 362, -1, -1, -1, 364, -1, -1, 369, + -1, 369, -1, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, 256, 419, + -1, 261, -1, 421, 262, -1, 424, -1, -1, -1, + -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 297, -1, -1, + 298, -1, 302, -1, -1, 305, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, -1, -1, -1, 364, -1, 366, 367, - -1, -1, -1, -1, 372, 433, 374, 375, 376, 377, - 378, 379, 380, -1, 382, 383, -1, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, -1, 396, 397, + -1, -1, 362, -1, -1, -1, 364, -1, -1, 369, + -1, 369, -1, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, 256, 419, + -1, -1, -1, 421, 262, -1, 424, -1, 266, -1, + -1, 265, 430, 267, -1, -1, 270, -1, 272, 273, + -1, 275, -1, 277, -1, 279, -1, 281, 282, 283, + -1, -1, -1, 287, 288, -1, -1, -1, -1, 293, + 298, 295, 296, -1, -1, -1, 300, -1, -1, -1, + 304, -1, -1, -1, -1, -1, 314, -1, -1, -1, + -1, -1, 316, -1, 318, -1, -1, -1, 322, 323, + -1, -1, -1, -1, -1, -1, 330, 331, -1, -1, + 334, -1, -1, 337, -1, -1, -1, -1, 342, -1, + -1, -1, 256, -1, -1, -1, -1, -1, 262, 357, + -1, -1, -1, -1, -1, 363, 364, -1, -1, -1, + -1, 369, 370, 371, 372, 373, 374, 375, 376, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 298, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - -1, 256, -1, -1, 261, -1, 424, 262, -1, 427, - -1, -1, -1, -1, -1, 433, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 284, -1, -1, + 408, 409, 410, 411, 412, 413, 414, -1, -1, -1, + -1, 419, -1, 421, -1, 419, 424, -1, -1, -1, + -1, -1, 430, -1, -1, 339, -1, 256, -1, -1, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 369, -1, 371, -1, 373, + -1, 375, 376, 377, -1, 379, 380, -1, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, -1, -1, + -1, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 256, + 414, -1, -1, -1, -1, 262, -1, -1, -1, -1, + 339, -1, -1, -1, -1, 344, 430, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 297, -1, -1, 298, -1, 302, -1, -1, 305, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, - -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, - -1, 338, -1, -1, 339, -1, -1, -1, -1, 344, - -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, 362, -1, -1, -1, 364, - -1, 366, 367, -1, -1, 372, -1, 372, -1, 374, - 375, 376, 377, 378, 379, 380, -1, 382, 383, -1, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, -1, 256, 422, 261, -1, -1, 424, - 262, -1, 427, -1, -1, -1, -1, -1, 433, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 284, + 369, 298, 371, -1, 373, -1, 375, 376, 377, -1, + -1, -1, -1, -1, 383, 384, 385, 386, 256, -1, + -1, 390, 391, -1, 262, -1, 395, 396, 397, 398, + 399, 400, 401, 402, -1, -1, -1, -1, -1, -1, + -1, -1, 339, -1, -1, 414, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 298, 430, -1, -1, -1, -1, 363, 364, -1, -1, + -1, -1, 369, 370, 371, -1, 373, 374, 375, 376, + 377, -1, 379, 380, -1, -1, 383, 384, 385, 386, + -1, -1, -1, 390, 391, -1, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, -1, 256, -1, -1, + -1, -1, -1, 262, -1, -1, 413, 414, -1, -1, + -1, -1, 419, -1, 421, 363, 364, 424, -1, -1, + -1, 369, 370, 430, 372, 373, 374, 375, -1, 377, + -1, 379, 380, -1, 382, 383, 384, 385, 386, 298, + 388, 389, 390, 391, -1, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, -1, -1, -1, + -1, 419, -1, 421, -1, -1, 424, -1, -1, -1, + 339, -1, 430, -1, -1, 344, -1, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, -1, 256, -1, -1, 364, -1, -1, 262, -1, + 369, -1, 371, 372, 373, 374, 375, 376, 377, -1, + 379, 380, -1, -1, 383, 384, 385, 386, -1, -1, + -1, 390, 391, -1, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 298, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 413, 414, -1, -1, -1, -1, + -1, -1, 421, -1, -1, 424, -1, -1, -1, -1, + -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 256, -1, -1, + 364, -1, -1, 262, -1, 369, -1, 371, 372, 373, + 374, 375, 376, 377, -1, 379, 380, -1, -1, 383, + 384, 385, 386, -1, -1, -1, 390, 391, -1, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 298, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 413, + 414, -1, -1, -1, -1, -1, -1, 421, -1, -1, + 424, -1, -1, -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 297, -1, -1, -1, 298, 302, -1, -1, - 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, -1, -1, 321, 256, -1, -1, - 325, -1, -1, 262, -1, -1, -1, 266, 333, -1, - -1, 336, -1, 338, -1, -1, -1, 339, -1, -1, - -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, 362, -1, 298, - -1, -1, -1, -1, 366, 367, -1, 372, -1, -1, - 372, -1, 374, -1, 376, 314, 378, 379, 380, -1, - 382, 383, -1, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, -1, -1, -1, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 256, 417, -1, 422, 357, -1, - 262, -1, -1, -1, 363, 364, -1, -1, -1, -1, - -1, 433, -1, 372, 373, 374, 375, 376, 377, 378, - 379, 380, -1, 382, 383, -1, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 298, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, -1, - -1, -1, -1, 422, -1, 424, -1, -1, 427, -1, - -1, -1, -1, -1, 433, -1, -1, 339, -1, -1, - -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, - -1, 363, 364, 256, 366, 367, -1, -1, -1, 262, - 372, 373, 374, -1, 376, 377, 378, 379, 380, -1, - 382, 383, -1, -1, 386, 387, 388, 389, -1, -1, - -1, 393, 394, -1, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, -1, 298, -1, -1, -1, -1, - -1, -1, -1, -1, 416, 417, -1, -1, -1, -1, - 422, -1, 424, -1, -1, 427, -1, -1, -1, -1, - -1, 433, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, - -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, - -1, 364, 256, 366, 367, -1, -1, -1, 262, 372, - -1, 374, 375, 376, 377, 378, 379, 380, -1, 382, - 383, -1, -1, 386, 387, 388, 389, -1, -1, -1, - 393, 394, -1, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, -1, 298, -1, -1, -1, -1, -1, - -1, -1, -1, 416, 417, -1, -1, -1, -1, -1, - -1, 424, -1, -1, 427, -1, -1, -1, -1, -1, - 433, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, -1, 256, -1, -1, 364, -1, -1, 262, -1, + 369, -1, 371, 372, 373, 374, 375, 376, 377, -1, + 379, 380, -1, -1, 383, 384, 385, 386, -1, -1, + -1, 390, 391, -1, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 298, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 413, 414, -1, -1, -1, -1, + -1, -1, 421, -1, -1, 424, -1, -1, -1, -1, + -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, - 364, 256, 366, 367, -1, -1, -1, 262, 372, -1, - 374, 375, 376, 377, 378, 379, 380, -1, 382, 383, - -1, -1, 386, 387, 388, 389, -1, -1, -1, 393, - 394, -1, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, -1, 298, -1, -1, -1, -1, -1, -1, - -1, -1, 416, 417, -1, -1, -1, -1, -1, -1, - 424, -1, -1, 427, -1, -1, -1, -1, -1, 433, + 354, 355, 356, -1, -1, -1, -1, 256, -1, 363, + -1, -1, -1, 262, -1, 369, 370, 371, -1, 373, + -1, 375, 376, 377, -1, 379, 380, -1, -1, 383, + 384, 385, 386, -1, -1, -1, 390, 391, -1, -1, + -1, 395, 396, 397, 398, 399, 400, 401, 402, 298, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 414, -1, -1, -1, -1, 419, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 430, -1, -1, 256, + -1, -1, -1, -1, -1, 262, -1, -1, -1, -1, + 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 369, 298, 371, -1, 373, -1, 375, 376, 377, -1, + 379, 380, -1, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, -1, -1, -1, 395, 396, 397, 398, + 399, 400, 401, 402, -1, -1, -1, -1, -1, -1, + -1, -1, 339, -1, -1, 414, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, 430, -1, -1, 256, -1, 363, -1, -1, -1, + 262, -1, 369, -1, 371, -1, 373, -1, 375, 376, + 377, -1, 379, 380, -1, -1, 383, 384, 385, 386, + -1, -1, -1, 390, 391, -1, -1, -1, 395, 396, + 397, 398, 399, 400, 401, 402, 298, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 414, -1, -1, + -1, -1, 419, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 430, -1, -1, 256, -1, -1, -1, + -1, -1, 262, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 369, 298, 371, + -1, 373, -1, 375, 376, 377, -1, 379, 380, -1, + -1, 383, 384, 385, 386, -1, -1, -1, 390, 391, + -1, -1, -1, 395, 396, 397, 398, 399, 400, 401, + 402, -1, -1, -1, -1, -1, -1, -1, -1, 339, + -1, -1, 414, -1, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, 430, -1, + -1, 256, -1, -1, -1, -1, -1, 262, -1, 369, + -1, 371, -1, 373, -1, 375, 376, 377, -1, 379, + 380, -1, -1, 383, 384, 385, 386, -1, -1, -1, + 390, 391, -1, -1, -1, 395, 396, 397, 398, 399, + 400, 401, 402, 298, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 414, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 430, -1, -1, 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, -1, -1, -1, 364, - 256, 366, 367, -1, -1, -1, 262, 372, -1, 374, - 375, 376, 377, 378, 379, 380, -1, 382, 383, -1, - -1, 386, 387, 388, 389, -1, -1, -1, 393, 394, - -1, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, -1, 298, -1, -1, -1, -1, -1, -1, -1, - -1, 416, 417, -1, -1, -1, -1, -1, -1, 424, - -1, -1, 427, -1, -1, -1, -1, -1, 433, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, -1, -1, 363, 256, -1, - 366, 367, -1, -1, 262, -1, 372, 373, 374, -1, - 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, - 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, - -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, - 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 417, -1, -1, -1, -1, 422, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 433, -1, -1, - 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, - -1, -1, 298, -1, 372, -1, 374, -1, 376, -1, - 378, 379, 380, -1, 382, 383, -1, -1, 386, 387, - 388, 389, 390, 391, 392, 393, 394, -1, -1, -1, - 398, 399, 400, 401, 402, 403, 404, 405, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 433, -1, 363, 256, -1, - 366, 367, -1, -1, 262, -1, 372, -1, 374, -1, - 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, - 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, - -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, - 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 417, -1, -1, -1, -1, 422, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 433, -1, -1, - 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, - -1, -1, 298, -1, 372, -1, 374, -1, 376, -1, - 378, 379, 380, -1, 382, 383, -1, -1, 386, 387, - 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, - 398, 399, 400, 401, 402, 403, 404, 405, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 433, -1, -1, 256, -1, - 366, 367, -1, -1, 262, -1, 372, -1, 374, -1, - 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, - 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, - -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, - 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 417, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 433, -1, -1, - 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, - -1, -1, 298, -1, 372, -1, 374, -1, 376, -1, - 378, 379, 380, -1, 382, 383, -1, -1, 386, 387, - 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, - 398, 399, 400, 401, 402, 403, 404, 405, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 433, -1, -1, -1, -1, - 366, 367, -1, -1, -1, -1, 372, -1, 374, -1, - 376, -1, 378, 379, 380, -1, 382, 383, -1, -1, - 386, 387, 388, 389, -1, -1, -1, 393, 394, -1, - -1, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 355, 356, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 369, 298, 371, -1, 373, -1, + 375, 376, 377, -1, 379, 380, -1, -1, 383, 384, + 385, 386, -1, -1, -1, 390, 391, -1, -1, -1, + 395, 396, 397, 398, 399, 400, 401, 402, -1, -1, + -1, -1, -1, -1, -1, -1, 339, -1, -1, 414, + -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, -1, 430, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 369, -1, 371, -1, + 373, -1, 375, 376, 377, -1, 379, 380, -1, -1, + 383, 384, 385, 386, -1, -1, -1, 390, 391, -1, + -1, -1, 395, 396, 397, 398, 399, 400, 401, 402, -1, 256, -1, 256, -1, -1, -1, -1, -1, 264, - 265, 417, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, 433, -1, -1, + 265, 414, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, 430, -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 339, -1, 256, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 359, 360, 361, 362, 363, 256, - -1, 366, 367, 366, 367, -1, -1, -1, -1, 372, - 375, 374, -1, 376, -1, 378, 379, 380, -1, -1, - -1, -1, -1, 386, 387, 388, 389, -1, -1, -1, - 393, 394, -1, -1, -1, 398, 399, 400, 401, 402, - 403, 404, 405, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 417, -1, 421, 422, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 432, 433, -1, - 433, 256, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 366, - 367, -1, -1, -1, -1, 372, -1, 374, -1, 376, - -1, 378, 379, 380, -1, -1, -1, -1, -1, 386, - 387, 388, 389, -1, -1, -1, 393, 394, -1, -1, - -1, 398, 399, 400, 401, 402, 403, 404, 405, -1, - -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, - 417, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 256, -1, -1, -1, 433, -1, -1, -1, - -1, 366, 367, -1, -1, -1, -1, 372, -1, 374, - -1, 376, -1, 378, 379, 380, -1, -1, -1, -1, - -1, 386, 387, 388, 389, -1, -1, -1, 393, 394, - -1, -1, -1, 398, 399, 400, 401, 402, 403, 404, - 405, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 417, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 433, -1, - -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, - 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, - 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, - -1, -1, 386, 387, 388, 389, -1, -1, -1, 393, - 394, -1, -1, -1, -1, -1, 400, 401, 402, 403, - 404, 405, -1, -1, -1, -1, -1, 339, -1, -1, - -1, -1, 344, 417, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 256, -1, -1, -1, 433, - -1, -1, -1, -1, 366, 367, -1, -1, -1, -1, - 372, -1, 374, -1, 376, -1, 378, 379, 380, -1, - -1, -1, -1, -1, 386, 387, 388, 389, -1, -1, - -1, 393, 394, -1, -1, -1, -1, -1, 400, 401, - 402, 403, 404, 405, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 417, -1, -1, -1, -1, + 353, 354, 355, 356, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, 369, 372, 371, -1, + 373, -1, 375, 376, 377, -1, -1, -1, -1, -1, + 383, 384, 385, 386, -1, -1, -1, 390, 391, -1, + -1, -1, 395, 396, 397, 398, 399, 400, 401, 402, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, - -1, 433, -1, -1, -1, -1, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 366, 367, -1, -1, -1, - -1, 372, -1, 374, -1, 376, -1, 378, 379, 380, - -1, -1, -1, -1, -1, 386, 387, 388, 389, -1, - -1, -1, 393, 394, -1, -1, -1, -1, -1, 400, - 401, 402, 403, 404, 405, -1, -1, -1, -1, -1, - 339, -1, -1, -1, -1, 344, 417, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 256, -1, - -1, -1, 433, -1, -1, -1, -1, 366, 367, -1, - -1, -1, -1, 372, -1, 374, -1, 376, -1, 378, - 379, 380, -1, -1, -1, -1, -1, 386, 387, 388, - 389, -1, -1, -1, 393, 394, -1, -1, -1, -1, - -1, 400, 401, 402, 403, 404, 405, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, 417, -1, - -1, -1, -1, 262, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 433, -1, -1, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 298, - -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, - -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, - 378, 379, 380, -1, -1, -1, -1, -1, 386, 387, - 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, - -1, -1, 400, 401, 402, 403, 404, 405, 256, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 417, - -1, -1, -1, -1, -1, 364, -1, -1, -1, -1, - -1, -1, -1, 372, -1, 433, 375, -1, 377, 378, - -1, -1, -1, 382, 383, -1, -1, 386, 387, 388, - 389, 390, 391, 392, 393, 394, -1, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 416, 417, -1, - 256, -1, -1, -1, -1, 424, -1, -1, 427, -1, - -1, 339, -1, -1, 433, -1, 344, -1, 346, 347, + -1, 414, -1, 418, 419, -1, -1, -1, -1, -1, + -1, 339, -1, -1, 429, 430, 344, 430, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 366, 367, - -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, - 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, - 388, 389, -1, -1, -1, 393, 394, -1, -1, -1, - -1, -1, 256, -1, 402, 403, 404, 405, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 433, -1, -1, -1, -1, - 366, 367, -1, -1, -1, -1, 372, -1, 374, -1, - 376, -1, 378, 379, 380, -1, -1, -1, -1, -1, - -1, -1, 388, 389, -1, -1, -1, 393, 394, -1, - -1, -1, -1, -1, 256, -1, 402, 403, 404, 405, - -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, - 344, 417, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, -1, 433, -1, -1, - -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, - 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, - -1, -1, -1, -1, 388, 389, -1, -1, -1, 393, - 394, -1, -1, -1, -1, -1, 256, -1, 402, 403, - 404, 405, -1, -1, -1, -1, -1, 339, -1, -1, - -1, -1, 344, 417, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, -1, 433, - -1, -1, -1, -1, 366, 367, -1, -1, -1, -1, - 372, -1, 374, -1, 376, -1, 378, 379, 380, -1, - -1, -1, -1, -1, -1, -1, 388, 389, -1, -1, - -1, 393, 394, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 404, 405, -1, -1, -1, -1, -1, 339, - -1, -1, -1, -1, 344, 417, 346, 347, 348, 349, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 369, -1, 371, -1, 373, -1, 375, 376, 377, + -1, -1, -1, -1, -1, 383, 384, 385, 386, -1, + -1, -1, 390, 391, -1, -1, 256, -1, -1, 397, + 398, 399, 400, 401, 402, -1, -1, -1, -1, -1, + 339, -1, -1, -1, -1, 344, 414, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, + 369, -1, 371, -1, 373, -1, 375, 376, 377, -1, + -1, -1, -1, -1, 383, 384, 385, 386, -1, -1, + -1, 390, 391, -1, -1, 256, -1, -1, 397, 398, + 399, 400, 401, 402, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 414, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, 433, -1, -1, -1, -1, 366, 367, -1, -1, - -1, -1, 372, -1, 374, -1, 376, -1, 378, 379, - 380, -1, -1, -1, -1, -1, -1, -1, 388, 389, - -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, - 256, -1, -1, -1, 404, 405, -1, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, 417, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, 433, -1, -1, -1, -1, 366, 367, - -1, -1, -1, -1, 372, -1, 374, -1, 376, -1, - 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, - -1, 389, -1, -1, -1, 393, 394, -1, -1, -1, - -1, -1, 256, -1, -1, -1, 404, 405, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, 417, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 433, -1, -1, -1, -1, - 366, 367, -1, -1, -1, -1, 372, -1, 374, -1, - 376, -1, 378, 379, 380, -1, -1, -1, -1, -1, - -1, -1, -1, 389, -1, -1, -1, 393, 394, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 404, 405, + -1, 430, -1, -1, -1, -1, -1, -1, -1, 369, + -1, 371, -1, 373, -1, 375, 376, 377, -1, -1, + -1, -1, -1, 383, 384, 385, 386, -1, -1, -1, + 390, 391, -1, -1, 256, -1, -1, 397, 398, 399, + 400, 401, 402, -1, -1, -1, -1, -1, 339, -1, + -1, -1, -1, 344, 414, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, + 430, -1, -1, -1, -1, -1, -1, -1, 369, -1, + 371, -1, 373, -1, 375, 376, 377, -1, -1, -1, + -1, -1, 383, 384, 385, 386, -1, -1, -1, 390, + 391, -1, -1, 256, -1, -1, 397, 398, 399, 400, + 401, 402, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 414, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 430, + -1, -1, -1, -1, -1, -1, -1, 369, -1, 371, + -1, 373, -1, 375, 376, 377, -1, -1, -1, -1, + -1, 383, 384, 385, 386, -1, -1, -1, 390, 391, + -1, -1, 256, -1, -1, 397, 398, 399, 400, 401, + 402, -1, -1, -1, -1, -1, 339, -1, -1, -1, + -1, 344, 414, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, -1, -1, -1, -1, 430, -1, + -1, -1, -1, -1, -1, -1, 369, -1, 371, -1, + 373, -1, 375, 376, 377, -1, -1, -1, -1, -1, + -1, -1, 385, 386, -1, -1, -1, 390, 391, -1, + -1, 256, -1, -1, -1, -1, 399, 400, 401, 402, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, - 344, 417, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, -1, 433, -1, -1, - -1, -1, 366, 367, -1, -1, -1, -1, 372, -1, - 374, -1, 376, -1, 378, 379, 380, -1, -1, -1, - -1, -1, -1, -1, -1, 389, -1, -1, -1, -1, - 394, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 404, 405, -1, -1, -1, -1, -1, 339, -1, -1, - -1, -1, 344, 417, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, -1, 433, - -1, -1, -1, -1, 366, 367, -1, -1, -1, -1, - 372, -1, 374, -1, 376, -1, 378, 379, 380, -1, - -1, -1, -1, -1, -1, -1, -1, 389, -1, -1, - -1, -1, 394, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 404, 405, -1, -1, -1, -1, -1, 339, - -1, -1, -1, -1, 344, 417, 346, 347, 348, 349, + 344, 414, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 430, -1, -1, + -1, -1, -1, -1, -1, 369, -1, 371, -1, 373, + -1, 375, 376, 377, -1, -1, -1, -1, -1, -1, + -1, 385, 386, -1, -1, -1, 390, 391, -1, -1, + 256, -1, -1, -1, -1, 399, 400, 401, 402, -1, + -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, + 414, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, -1, -1, -1, -1, 430, -1, -1, -1, + -1, -1, -1, -1, 369, -1, 371, -1, 373, -1, + 375, 376, 377, -1, -1, -1, -1, -1, -1, -1, + 385, 386, -1, -1, -1, 390, 391, -1, -1, 256, + -1, -1, -1, -1, -1, -1, 401, 402, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 414, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, 430, -1, -1, -1, -1, + -1, -1, -1, 369, -1, 371, -1, 373, -1, 375, + 376, 377, -1, -1, -1, -1, -1, -1, -1, 385, + 386, -1, -1, -1, 390, 391, -1, -1, 256, -1, + -1, -1, -1, -1, -1, 401, 402, -1, -1, -1, + -1, -1, 339, -1, -1, -1, -1, 344, 414, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, -1, 430, -1, -1, -1, -1, -1, + -1, -1, 369, -1, 371, -1, 373, -1, 375, 376, + 377, -1, -1, -1, -1, -1, -1, -1, -1, 386, + -1, -1, -1, 390, 391, -1, -1, 256, -1, -1, + -1, -1, -1, -1, 401, 402, -1, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 414, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 430, -1, -1, -1, -1, -1, -1, + -1, 369, -1, 371, -1, 373, -1, 375, 376, 377, + -1, -1, -1, -1, -1, -1, -1, -1, 386, -1, + -1, -1, -1, 391, -1, -1, 256, -1, -1, -1, + -1, -1, -1, 401, 402, -1, -1, -1, -1, -1, + 339, -1, -1, -1, -1, 344, 414, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, -1, 430, -1, -1, -1, -1, -1, -1, -1, + 369, -1, 371, -1, 373, -1, 375, 376, 377, -1, + -1, -1, -1, -1, -1, -1, -1, 386, -1, -1, + -1, -1, 391, -1, -1, 256, -1, -1, -1, -1, + -1, -1, 401, 402, -1, -1, -1, -1, -1, 339, + -1, -1, -1, -1, 344, 414, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - -1, 433, -1, -1, -1, -1, 366, 367, -1, -1, - -1, -1, 372, -1, 374, -1, 376, -1, 378, 379, - 380, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 262, 394, -1, -1, 266, -1, -1, - -1, -1, -1, -1, 404, 405, -1, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, 417, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 298, - -1, -1, -1, 433, -1, -1, -1, -1, 366, 367, - -1, -1, -1, -1, 372, 314, 374, -1, 376, -1, - 378, 379, 380, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 394, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 404, 405, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 357, 417, - -1, -1, -1, -1, 363, 364, -1, -1, -1, -1, - -1, -1, -1, 372, 373, 433, 375, -1, 377, -1, - 379, 380, -1, 382, 383, -1, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, -1, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, -1, - -1, 256, -1, 422, -1, 424, -1, -1, 427, 264, - 265, 266, 267, 268, 433, 270, 271, -1, 273, 274, - 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, - 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, - 295, -1, -1, -1, 299, 300, -1, 302, 303, 304, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, - -1, 316, -1, 318, 319, -1, -1, 322, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, -1, 337, -1, -1, 340, 341, -1, -1, 344, - 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, 371, -1, -1, -1, - 375, -1, -1, -1, -1, 380, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, -1, -1, -1, -1, - -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, + -1, 430, -1, -1, -1, -1, -1, -1, -1, 369, + -1, 371, -1, 373, -1, 375, 376, 377, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, 421, 422, 423, 424, - -1, 426, 264, 265, 266, 267, -1, -1, 270, 271, + -1, 391, -1, -1, 256, -1, -1, -1, -1, -1, + -1, 401, 402, -1, -1, -1, -1, -1, 339, -1, + -1, -1, -1, 344, 414, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, + 430, -1, -1, -1, -1, -1, -1, -1, 369, -1, + 371, -1, 373, -1, 375, 376, 377, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 391, -1, -1, 256, -1, -1, -1, -1, -1, -1, + 401, 402, -1, -1, -1, -1, -1, 339, -1, -1, + -1, -1, 344, 414, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, -1, 430, + -1, -1, -1, -1, -1, -1, -1, 369, -1, 371, + -1, 373, -1, 375, 376, 377, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 391, + -1, -1, 256, -1, -1, -1, -1, -1, -1, -1, + 402, -1, -1, -1, -1, -1, 339, -1, -1, -1, + -1, 344, 414, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, -1, -1, -1, -1, 430, -1, + -1, -1, -1, -1, -1, -1, 369, -1, 371, -1, + 373, -1, 375, 376, 377, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 391, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 402, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 414, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 430, -1, -1, + -1, -1, -1, -1, -1, 369, -1, 371, -1, 373, + -1, 375, 376, 377, 256, -1, -1, -1, -1, -1, + -1, -1, 264, 265, 266, 267, 268, 391, 270, 271, + -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, + -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, + 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, + 302, 303, 304, -1, -1, -1, 430, -1, -1, -1, + -1, -1, 314, -1, 316, -1, 318, 319, -1, -1, + 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, + -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, -1, 368, -1, -1, -1, + 372, -1, -1, -1, -1, 377, 378, 379, 380, 381, + -1, -1, -1, 385, -1, 387, -1, -1, -1, -1, + -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, -1, 418, 419, 420, 421, + -1, 423, 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, @@ -14511,507 +14077,378 @@ void case_1115() 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, 366, 367, -1, -1, -1, 371, - -1, -1, -1, 375, -1, -1, -1, -1, 380, 381, - 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, - -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, + 362, 363, -1, -1, -1, -1, 368, -1, -1, -1, + 372, -1, -1, -1, -1, 377, 378, 379, 380, 381, + -1, -1, -1, 385, -1, 387, -1, -1, -1, -1, + -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, - 422, 423, 424, 264, 265, 266, 267, -1, -1, 270, - 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, - -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, - 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 314, -1, 316, -1, 318, 319, -1, - -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, - 371, -1, -1, -1, 375, -1, -1, -1, -1, 380, - 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, - -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, + -1, -1, 256, -1, -1, -1, 418, 419, 420, 421, + 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, + 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, + -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, + -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, + 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, -1, 368, -1, -1, -1, 372, -1, + -1, -1, -1, 377, 378, 379, 380, 381, -1, -1, + -1, 385, -1, 387, -1, -1, -1, -1, -1, 393, + 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 421, 422, 423, 424, 264, 265, 266, 267, -1, -1, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, - 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, - -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, - 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, 371, -1, -1, -1, 375, -1, -1, -1, -1, - 380, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, + 256, -1, -1, -1, 418, 419, 420, 421, 264, 265, + 266, 267, -1, -1, 270, 271, -1, 273, 274, 275, + 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, + -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, + -1, -1, -1, 299, 300, -1, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 314, -1, + 316, -1, 318, 319, -1, -1, 322, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, - -1, 421, 422, 423, 424, 264, 265, 266, 267, -1, - -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, - 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, - 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, - 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, - 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, - -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, 371, -1, -1, -1, 375, -1, -1, -1, - -1, 380, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, 368, -1, -1, -1, 372, -1, -1, -1, + -1, 377, 378, 379, 380, 381, -1, -1, -1, 385, + -1, 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 421, 422, 423, 424, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, - 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, - -1, -1, 300, -1, 302, 303, 304, 288, 306, -1, - -1, -1, -1, -1, 295, 313, -1, -1, 316, 300, - 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, - -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, - 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, - -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, - 378, -1, 363, 381, 382, 383, 384, -1, -1, -1, - 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, - -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - -1, 279, -1, 421, 422, 423, 424, 285, -1, -1, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, 422, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, - -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, - -1, -1, -1, 371, 372, -1, -1, 375, -1, -1, - -1, -1, -1, 381, 382, 383, 384, -1, -1, -1, - 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, - -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - -1, 279, -1, 421, 422, 423, 424, 285, -1, 427, - 288, -1, -1, -1, 432, -1, -1, 295, -1, -1, - -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, - -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, - -1, -1, -1, 371, -1, -1, -1, 375, -1, -1, - -1, -1, -1, 381, 382, 383, 384, -1, -1, -1, - 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, + -1, -1, 418, 419, 420, 421, 264, 265, 266, 267, + -1, -1, 270, 271, -1, 273, 274, 275, 276, 277, + 278, 279, -1, -1, -1, -1, -1, 285, -1, 287, + 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, + -1, 299, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, + 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, + -1, -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + 368, -1, -1, -1, 372, -1, -1, -1, -1, 377, + 378, 379, 380, 381, -1, -1, -1, 385, -1, 387, + -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 256, 421, 422, 423, 424, -1, -1, 427, - 264, 265, -1, 267, 432, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, -1, 265, -1, - 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, - -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, - 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, - -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, - 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, - 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, - 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, 366, 367, -1, -1, -1, 371, 372, -1, - -1, 375, -1, -1, -1, -1, -1, 381, 382, 383, - 384, -1, -1, -1, 388, -1, 390, -1, -1, 376, - -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 256, -1, -1, -1, 421, 422, 423, - 424, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, 422, 279, -1, -1, 265, - -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, - -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, - 303, 304, 288, 306, -1, -1, -1, -1, -1, 295, - 313, -1, -1, 316, 300, 318, 319, -1, 304, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, - -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, - -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, 366, 367, -1, -1, -1, -1, -1, - -1, -1, 375, -1, -1, -1, -1, -1, 381, 382, - 383, 384, -1, -1, -1, 388, -1, 390, 374, -1, - -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 421, 422, - 423, 424, 264, 265, -1, 267, -1, -1, 270, 271, - -1, -1, -1, 275, 276, 277, 422, 279, -1, -1, - 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, - 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, - 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, - 295, -1, -1, -1, 316, 300, 318, 319, 320, 304, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, - -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, - -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, 366, 367, -1, -1, -1, 371, - -1, -1, -1, 375, -1, -1, -1, -1, -1, 381, - 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, - -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, - 422, 423, 424, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, 422, 279, -1, - -1, -1, -1, -1, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, - 371, -1, -1, -1, 375, -1, -1, -1, -1, -1, - 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, - -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, - 421, 422, 423, 424, 262, -1, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - -1, 279, -1, -1, -1, -1, -1, 285, -1, -1, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - 298, -1, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, - -1, -1, -1, -1, -1, 343, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, - -1, -1, -1, -1, -1, -1, -1, 375, -1, 377, - -1, -1, -1, 381, 382, 383, 384, 385, -1, -1, - 388, -1, 390, 256, -1, -1, -1, -1, 396, 397, + -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 418, 419, 420, 421, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, + -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, + 300, -1, 302, 303, 304, 288, 306, -1, -1, -1, + -1, -1, 295, 313, -1, -1, 316, 300, 318, 319, + -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, + -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, + -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, -1, 372, -1, -1, 375, -1, -1, 378, 379, + 380, 381, -1, -1, -1, 385, -1, 387, -1, -1, + 373, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, 421, 422, 288, 424, -1, -1, -1, - -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + -1, -1, 275, 276, 277, -1, 279, -1, 418, 419, + 420, 421, 285, -1, -1, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, 419, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, 366, 367, -1, -1, -1, -1, 372, - -1, -1, 375, -1, -1, -1, -1, -1, 381, 382, - 383, 384, -1, -1, -1, 388, -1, 390, -1, -1, - -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, + 363, -1, -1, -1, -1, 368, 369, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, + 393, 394, -1, -1, -1, -1, -1, -1, 264, 265, + -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, + 276, 277, -1, 279, -1, 418, 419, 420, 421, 285, + -1, 424, 288, -1, -1, -1, 429, -1, -1, 295, + -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 421, 422, - 423, 424, 264, 265, -1, 267, -1, -1, 270, 271, - -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, - 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, - 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, - 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, - 295, -1, -1, -1, 316, 300, 318, 319, -1, 304, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, - -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, - -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, 366, 367, -1, -1, -1, -1, - 372, -1, -1, 375, -1, -1, -1, -1, -1, 381, - 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, - -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, + 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, + -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, + -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, - 422, 423, 424, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, 422, 279, -1, - -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, - -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, - -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, - -1, 295, -1, -1, -1, 316, 300, 318, 319, -1, - 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, - 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, - 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, - -1, -1, -1, -1, 375, -1, -1, -1, -1, -1, - 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, - -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, 368, -1, -1, -1, 372, -1, -1, -1, + -1, -1, 378, 379, 380, 381, -1, -1, -1, 385, + -1, 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 421, 422, 423, 424, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, 422, 279, - -1, -1, -1, -1, -1, 285, -1, -1, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, - -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 256, 418, 419, 420, 421, -1, -1, 424, 264, + 265, -1, 267, 429, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, 265, -1, 267, + 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, + 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, + 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, + 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, 368, 369, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, 371, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, - -1, 421, 422, 423, 424, 262, -1, 264, 265, -1, + -1, -1, -1, 418, 419, 420, 421, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, -1, -1, -1, -1, 285, -1, - -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, - -1, 298, -1, 300, -1, 302, 303, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, - -1, -1, -1, -1, -1, -1, 343, -1, -1, -1, + 277, 419, 279, -1, -1, 265, -1, 267, 285, -1, + 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, + -1, -1, -1, 300, -1, 302, 303, 304, 288, 306, + -1, -1, -1, -1, -1, 295, 313, -1, -1, 316, + 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, + -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, + 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, 366, - 367, -1, -1, -1, -1, -1, -1, -1, 375, -1, - 377, -1, -1, -1, 381, 382, 383, 384, -1, -1, - -1, 388, -1, 390, 256, -1, -1, -1, -1, 396, - 397, -1, 264, 265, -1, 267, -1, -1, 270, 271, - -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, - -1, -1, -1, 285, 421, 422, 288, 424, -1, -1, - -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, - -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, 366, 367, -1, -1, -1, -1, - -1, -1, -1, 375, -1, -1, -1, -1, -1, 381, - 382, 383, 384, -1, -1, -1, 388, -1, 390, -1, - -1, -1, -1, -1, 396, 397, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 418, 419, 420, 421, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, 419, + 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, + -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, + -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, + -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, + 319, 320, 304, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, + 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, + -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, + -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 256, -1, -1, -1, 421, - 422, 423, 424, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, -1, 256, -1, -1, -1, 418, + 419, 420, 421, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, 419, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, + 331, 332, 316, 334, 318, -1, 337, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, - -1, -1, -1, -1, 375, -1, -1, -1, -1, -1, - 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, - -1, -1, -1, -1, -1, 396, 397, -1, -1, -1, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, + -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, - 421, 422, 423, 424, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, 422, 279, - -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, - -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, - 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, -1, 316, 300, 318, 319, - -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, - -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, - -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, -1, -1, -1, -1, -1, 396, 397, -1, -1, + -1, -1, -1, 256, -1, -1, -1, 418, 419, 420, + 421, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, 419, 279, -1, -1, -1, + -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, + -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, 368, -1, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, + 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, - -1, 421, 422, 423, 424, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, 422, - 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, - -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, - -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, - -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, - 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, - 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, - -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, 256, -1, 418, 419, 420, 421, 262, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, 298, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, + 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, + -1, 374, -1, -1, -1, 378, 379, 380, 381, 382, + -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, + 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, 369, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, + -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, - -1, -1, 421, 422, 423, 424, 264, 265, -1, 267, - -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, - 422, 279, -1, -1, -1, -1, -1, 285, -1, -1, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, - 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, - -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, - -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, + -1, -1, -1, 256, -1, -1, -1, 418, 419, 420, + 421, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, 265, + -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, + -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, + 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, + -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, + -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, 369, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, + 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, 366, 367, - -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, - -1, -1, -1, 381, 382, 383, 384, -1, -1, -1, - 388, -1, 390, -1, -1, -1, -1, -1, 396, 397, - -1, -1, -1, -1, 285, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 298, -1, -1, - -1, 256, -1, 421, 422, 423, 424, 262, -1, 264, + -1, 256, -1, -1, -1, 418, 419, 420, 421, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, 327, -1, -1, -1, - 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, - 295, -1, -1, 298, -1, 300, -1, 302, 303, 304, + 275, 276, 277, 419, 279, -1, -1, 265, -1, 267, + 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, + 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, + 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, + 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - 381, 382, 383, 384, -1, 386, 387, 388, 389, 390, - 391, 392, 393, -1, -1, 396, 397, 398, 399, 400, - 401, 402, 403, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, 377, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, 261, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, 315, -1, 317, -1, -1, -1, 321, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, - -1, -1, 336, -1, 338, 375, -1, 377, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, - 265, -1, 267, -1, -1, 270, 271, -1, 372, 373, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, 261, -1, 263, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, + -1, -1, -1, 418, 419, 420, 421, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, 419, 279, -1, -1, -1, -1, -1, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 297, 334, - -1, -1, -1, 302, -1, -1, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, -1, 321, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, 333, -1, -1, 336, -1, 338, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, 362, 264, 265, -1, 267, -1, -1, - 270, 271, -1, 372, 373, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, 261, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, 315, -1, 317, -1, -1, -1, 321, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, - -1, -1, 336, -1, 338, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, - 265, -1, 267, -1, -1, 270, 271, -1, 372, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, 261, -1, 263, 300, -1, 302, 303, 304, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 297, 334, - -1, -1, -1, 302, -1, -1, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, -1, 321, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, 333, -1, -1, 336, -1, 338, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, 362, 264, 265, -1, 267, -1, -1, - 270, 271, -1, 372, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, 261, -1, 263, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, 315, -1, 317, -1, -1, -1, 321, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, - -1, -1, 336, -1, 338, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, 261, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, + -1, 418, 419, 420, 421, 262, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, 298, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, 284, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 297, 334, - -1, -1, 301, 302, -1, -1, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, - -1, -1, 321, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, 333, -1, -1, 336, -1, 338, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, 362, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, 261, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - 284, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, 297, 334, -1, -1, -1, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, -1, -1, 317, -1, -1, -1, 321, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, 333, - -1, -1, 336, -1, 338, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, 362, 264, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, 374, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, + -1, -1, -1, 418, 419, 420, 421, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, 265, -1, 267, 285, -1, + 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, + -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, + -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, + 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, + -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, + 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, 418, 419, 420, 421, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, 419, + 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, + -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, + -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, + -1, -1, -1, 295, -1, -1, -1, 316, 300, 318, + 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, + 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, + -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, + -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, 256, -1, -1, -1, 418, + 419, 420, 421, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, 419, 279, -1, + -1, -1, -1, -1, 285, -1, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, + -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, + -1, 285, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 298, 256, -1, 418, 419, 420, + 421, 262, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, 327, 285, -1, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, 298, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, 378, 379, 380, 381, -1, 383, + 384, 385, 386, 387, 388, 389, 390, -1, -1, 393, + 394, 395, 396, 397, 398, 399, 400, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, 374, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, + -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, + 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, 374, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, + -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, + 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -15019,53 +14456,65 @@ void case_1115() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, + 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, + -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, + 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, + -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, + 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -15073,53 +14522,65 @@ void case_1115() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, + 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, + -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, + 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, + -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, + 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -15127,53 +14588,65 @@ void case_1115() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, + 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, + -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, + 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, + -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, + 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -15181,53 +14654,65 @@ void case_1115() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, - 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, + 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, + -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, + -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, + 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, + -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, + 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, 388, -1, - 390, 256, -1, -1, -1, -1, 396, 397, -1, 264, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, - 285, 421, 422, 288, 424, -1, -1, -1, -1, -1, + 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, @@ -15235,236 +14720,243 @@ void case_1115() -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, 366, 367, -1, -1, -1, -1, -1, -1, -1, - 375, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, 388, -1, 390, 256, -1, -1, -1, - -1, 396, 397, -1, 264, 265, -1, 267, -1, -1, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, - -1, -1, -1, -1, -1, 285, 421, 422, 288, 424, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, - -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, - 330, 331, 332, -1, 334, -1, -1, 337, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, 418, 419, 288, 421, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, 366, 367, -1, -1, - -1, -1, -1, -1, -1, 375, -1, -1, -1, -1, - -1, -1, 382, 383, -1, -1, 256, -1, -1, -1, - 390, 261, -1, -1, -1, 265, -1, 267, -1, -1, - 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, - -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, - -1, 421, 422, 293, 424, 295, 296, 297, -1, -1, - 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, - -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, - -1, -1, 342, -1, -1, 256, -1, -1, -1, -1, - -1, -1, 262, 264, 265, -1, 267, -1, -1, 270, - 271, -1, 362, -1, 275, 276, 277, -1, 279, -1, - -1, 371, 372, 373, 285, -1, -1, 288, -1, -1, - -1, 381, -1, -1, 295, -1, -1, -1, 298, 300, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, 256, -1, -1, -1, -1, + 393, 394, -1, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, 285, 418, 419, 288, 421, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, 422, 334, -1, -1, -1, -1, -1, -1, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, 364, 366, 367, -1, -1, -1, - -1, -1, -1, -1, 375, 375, 376, 377, 378, 379, - -1, -1, 382, 383, -1, -1, 386, 387, 388, 389, - 390, 391, 392, 393, 394, -1, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, -1, -1, - 421, 422, -1, -1, 424, -1, 261, 427, 263, -1, - 265, -1, 267, -1, -1, 270, -1, 272, 273, -1, - 275, -1, 277, -1, 279, -1, 281, 282, 283, 284, - -1, -1, 287, 288, -1, -1, -1, -1, 293, 294, - 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, - -1, 306, 307, -1, 309, 310, 311, 312, -1, -1, - 315, 316, 317, 318, -1, -1, 321, 322, 323, -1, - -1, -1, -1, -1, -1, 330, 331, -1, 333, 334, - -1, 336, 337, 338, -1, -1, -1, 342, -1, -1, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, 256, -1, -1, + -1, -1, 393, 394, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, 418, 419, 288, + 421, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 362, -1, -1, - -1, -1, -1, 368, 369, 261, -1, -1, -1, 265, - -1, 267, -1, -1, 270, -1, 272, 273, -1, 275, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, 256, + -1, -1, -1, -1, 393, 394, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, -1, -1, 285, 418, + 419, 288, 421, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, -1, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, 256, -1, -1, -1, -1, 393, 394, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, -1, -1, -1, -1, + 285, 418, 419, 288, 421, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, 256, -1, -1, -1, -1, 393, 394, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, + -1, -1, 285, 418, 419, 288, 421, -1, -1, 261, + -1, 263, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 284, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, 297, 329, 330, 331, 332, + 302, 334, -1, -1, 337, 307, -1, 309, 310, 311, + 312, -1, -1, 315, -1, 317, -1, -1, -1, 321, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, 333, -1, -1, 336, -1, 338, -1, -1, 372, + -1, -1, -1, -1, -1, -1, 379, 380, -1, -1, + 256, -1, -1, -1, 387, 261, -1, -1, -1, 265, + 362, 267, -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, 282, 283, 284, -1, - -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, + -1, 287, 288, -1, -1, 418, 419, 293, 421, 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, - -1, 307, -1, 309, 310, 311, 312, 422, -1, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, - -1, -1, -1, -1, 330, 331, -1, 333, 334, -1, - 336, 337, 338, -1, -1, -1, 342, 261, -1, -1, + -1, -1, -1, -1, 330, 331, -1, 333, 334, 256, + 336, 337, 338, -1, -1, -1, 342, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, -1, -1, 362, -1, 285, -1, + -1, 288, 368, 369, 370, -1, -1, -1, 295, -1, + -1, -1, 378, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, 262, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, 261, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, 419, -1, -1, -1, -1, -1, 298, + -1, -1, -1, -1, 284, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, 297, -1, -1, + -1, 301, 302, -1, -1, 372, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, -1, + -1, -1, -1, -1, -1, 364, -1, -1, -1, -1, + -1, 418, 419, 372, 373, 374, 375, 376, -1, -1, + 379, 380, 362, -1, 383, 384, 385, 386, 387, 388, + 389, 390, 391, -1, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, -1, 261, -1, 263, + -1, 265, 421, 267, -1, 424, 270, -1, 272, 273, + -1, 275, -1, 277, -1, 279, -1, 281, 282, 283, + 284, -1, -1, 287, 288, -1, -1, -1, -1, 293, + 294, 295, 296, 297, -1, -1, 300, -1, 302, -1, + 304, -1, 306, 307, -1, 309, 310, 311, 312, -1, + -1, 315, 316, 317, 318, -1, -1, 321, 322, 323, + -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, + 334, -1, 336, 337, 338, -1, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 362, -1, + -1, 365, 366, 261, -1, -1, -1, 265, -1, 267, + -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, + -1, 279, -1, 281, 282, 283, 284, -1, -1, 287, + 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, + -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, + -1, 309, 310, 311, 312, 419, -1, -1, 316, 317, + 318, -1, -1, 321, 322, 323, -1, -1, -1, -1, + -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, + 338, -1, -1, -1, 342, -1, -1, 261, -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, 272, 273, - -1, 275, -1, 277, -1, 279, 362, 281, 282, 283, - 284, -1, -1, 287, 288, -1, 372, -1, -1, 293, - -1, 295, 296, 297, -1, 381, 300, -1, 302, -1, + -1, 275, -1, 277, 362, 279, -1, 281, 282, 283, + 284, 369, -1, 287, 288, -1, -1, -1, -1, 293, + 378, 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, 333, - 334, -1, 336, 337, 338, -1, 422, -1, 342, 261, - -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, - 272, 273, -1, 275, -1, 277, -1, 279, 362, 281, - 282, 283, 284, -1, -1, 287, 288, -1, 372, -1, - -1, 293, -1, 295, 296, 297, -1, 381, 300, -1, - 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, - 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, - -1, 333, 334, -1, 336, 337, 338, -1, 422, -1, - 342, 261, -1, -1, -1, 265, -1, 267, -1, -1, - 270, -1, 272, 273, -1, 275, -1, 277, -1, 279, - 362, 281, 282, 283, 284, -1, -1, 287, 288, -1, - -1, -1, -1, 293, -1, 295, 296, 297, -1, 381, + 334, 419, 336, 337, 338, -1, -1, -1, 342, -1, + -1, 261, -1, -1, -1, 265, -1, 267, -1, -1, + 270, -1, 272, 273, -1, 275, -1, 277, 362, 279, + -1, 281, 282, 283, 284, 369, -1, 287, 288, -1, + -1, -1, -1, 293, 378, 295, 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, 333, 334, -1, 336, 337, 338, -1, - 422, -1, 342, 261, -1, -1, -1, 265, -1, 267, - -1, -1, 270, -1, 272, 273, -1, 275, -1, 277, - -1, 279, 362, 281, 282, 283, 284, -1, -1, 287, - 288, -1, 372, -1, -1, 293, -1, 295, 296, 297, - -1, -1, 300, -1, 302, 261, 304, -1, -1, 307, - -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, - 318, -1, -1, 321, 322, 323, -1, -1, 284, -1, - -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, - 338, 297, 422, 261, 342, -1, 302, -1, -1, 305, + 330, 331, -1, 333, 334, 419, 336, 337, 338, -1, + -1, -1, 342, -1, -1, 261, -1, -1, -1, 265, + -1, 267, -1, -1, 270, -1, 272, 273, -1, 275, + -1, 277, 362, 279, -1, 281, 282, 283, 284, -1, + -1, 287, 288, -1, -1, -1, -1, 293, 378, 295, + 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, 362, 321, 284, -1, -1, 325, - -1, -1, -1, -1, 372, -1, -1, 333, -1, 297, - 336, -1, 338, -1, 302, -1, -1, -1, -1, 307, - -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, 357, -1, 321, -1, -1, 362, 325, -1, -1, - -1, -1, -1, -1, -1, 333, 372, 373, 336, 375, - 338, 377, -1, -1, 422, 264, 265, -1, 267, -1, - -1, 270, 271, -1, 390, -1, 275, 276, 277, -1, - 279, -1, -1, -1, 362, -1, 285, -1, -1, 288, - -1, -1, -1, -1, 372, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, 422, 306, -1, -1, - -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, 422, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, 376, -1, 378, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, 306, -1, -1, - -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, 378, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, 337, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, 337, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, 371, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, 371, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + 316, 317, 318, -1, -1, 321, 322, 323, -1, -1, + -1, -1, -1, -1, 330, 331, -1, 333, 334, 419, + 336, 337, 338, -1, -1, -1, 342, -1, -1, 261, + -1, -1, -1, 265, -1, 267, -1, -1, 270, -1, + 272, 273, -1, 275, -1, 277, 362, 279, -1, 281, + 282, 283, 284, 369, -1, 287, 288, -1, -1, -1, + -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, + 302, 261, 304, -1, -1, 307, -1, 309, 310, 311, + 312, -1, -1, -1, 316, 317, 318, -1, -1, 321, + 322, 323, -1, -1, 284, -1, -1, -1, 330, 331, + -1, 333, 334, 419, 336, 337, 338, 297, -1, -1, + 342, -1, 302, -1, -1, 305, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + 362, 321, -1, -1, -1, 325, -1, 369, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, -1, + 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, 357, -1, -1, + -1, 285, 362, -1, 288, -1, -1, -1, -1, 369, + 370, 295, 372, -1, 374, -1, 300, 419, 302, 303, + 304, -1, 306, -1, -1, -1, -1, 387, -1, 313, + -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, + -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, + 334, -1, -1, -1, -1, -1, -1, 341, -1, 419, + 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, -1, 372, 373, + -1, 375, -1, -1, 378, 379, 380, 381, -1, -1, + -1, 385, -1, 387, -1, -1, -1, -1, -1, 393, + 394, -1, -1, -1, -1, -1, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, 418, 419, 420, 421, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, 302, 303, 304, -1, 306, + -1, -1, -1, -1, -1, -1, 313, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, 372, -1, -1, 375, -1, + -1, 378, 379, 380, 381, -1, -1, -1, 385, -1, + 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, + -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, + 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, 418, 419, 420, 421, 285, -1, -1, 288, -1, + -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, + 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, + -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, + 330, 331, 332, -1, 334, -1, -1, 337, -1, -1, + -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, -1, 372, -1, -1, -1, -1, -1, 378, 379, + 380, 381, -1, -1, -1, 385, -1, 387, -1, -1, + -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, + -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, + -1, -1, 275, 276, 277, -1, 279, -1, 418, 419, + 420, 421, 285, -1, -1, 288, -1, -1, -1, -1, + -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, + 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, + -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, + -1, 334, -1, -1, 337, -1, -1, -1, 341, -1, + -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, 372, + -1, -1, -1, -1, -1, 378, 379, 380, 381, -1, + -1, -1, 385, -1, 387, -1, -1, -1, -1, -1, + 393, 394, -1, -1, -1, -1, -1, -1, 264, 265, + -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, + 276, 277, -1, 279, -1, 418, 419, 420, 421, 285, + -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, + -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, + 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, + -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, + -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, 368, -1, -1, -1, 372, -1, -1, -1, + -1, -1, 378, 379, 380, 381, -1, -1, -1, 385, + -1, 387, -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, + 279, -1, 418, 419, 420, 421, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, @@ -15472,172 +14964,240 @@ void case_1115() 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, -1, -1, -1, -1, 396, 397, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 421, 422, 423, 424, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, + -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, + -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, + -1, -1, -1, 275, 276, 277, -1, 279, -1, 418, + 419, 420, 421, 285, -1, -1, 288, -1, -1, -1, + -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, + 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, + 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, + 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, + -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, + 372, -1, -1, -1, -1, -1, 378, 379, 380, 381, + -1, -1, -1, 385, -1, 387, -1, -1, -1, -1, + -1, 393, 394, -1, -1, -1, -1, -1, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, 418, 419, 420, 421, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, -1, 372, -1, -1, + -1, -1, -1, 378, 379, 380, 381, -1, -1, -1, + 385, -1, 387, -1, -1, -1, -1, -1, 393, 394, + -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + -1, 279, -1, 418, 419, 420, 421, 285, -1, -1, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, + -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, 366, 367, -1, - -1, -1, -1, -1, -1, -1, 375, -1, -1, -1, - -1, -1, 381, 382, 383, 384, -1, -1, -1, 388, - -1, 390, -1, 264, 265, -1, 267, 396, 397, 270, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, -1, -1, 372, -1, -1, -1, -1, -1, + 378, 379, 380, 381, -1, -1, -1, 385, -1, 387, + -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, + -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - -1, -1, -1, -1, 285, -1, -1, 288, -1, -1, - -1, -1, 421, 422, 295, 424, -1, -1, -1, 300, + 418, 419, 420, 421, 285, -1, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, 366, 367, -1, -1, -1, - -1, -1, -1, -1, 375, -1, -1, -1, -1, -1, - 381, 382, 383, 384, -1, -1, -1, 388, -1, 390, - -1, 264, 265, -1, 267, 396, 397, 270, 271, -1, - -1, -1, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, - 421, 422, 295, 424, -1, -1, -1, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, 337, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, 366, 367, -1, -1, -1, -1, -1, - 264, 265, 375, 267, -1, -1, 270, 271, -1, 382, - 383, 275, 276, 277, -1, 279, -1, 390, -1, -1, - -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, - -1, 295, -1, 261, -1, -1, 300, -1, 302, 303, - 304, -1, -1, -1, -1, -1, -1, -1, 421, 422, - -1, 424, 316, -1, 318, 319, 284, -1, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, 297, - 334, -1, -1, 337, 302, -1, -1, -1, -1, 307, - -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, -1, -1, 321, -1, 359, 360, 361, 362, 363, - -1, -1, 366, 367, -1, 333, -1, -1, 336, -1, - 338, 375, -1, 263, -1, 265, -1, 267, 382, 383, - 270, -1, 272, 273, -1, 275, 390, 277, -1, 279, - -1, 281, 282, 283, 362, -1, -1, 287, 288, -1, - 368, 369, -1, 293, 372, 295, 296, -1, -1, -1, - 300, -1, -1, -1, 304, -1, -1, 421, 422, -1, - 424, -1, -1, -1, -1, 315, 316, -1, 318, -1, - -1, -1, 322, 323, -1, -1, -1, -1, -1, -1, - 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, - 264, 265, 342, 267, -1, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, - -1, 285, -1, -1, 288, -1, -1, -1, 368, 369, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, 378, 379, 380, + 381, -1, -1, -1, 385, -1, 387, -1, -1, -1, + -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, + 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, 418, 419, 420, + 421, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, - 304, 381, -1, -1, -1, -1, -1, -1, -1, -1, + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, 337, -1, -1, -1, -1, -1, -1, - -1, -1, 422, -1, -1, -1, -1, -1, -1, -1, + 334, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, -1, 372, -1, + -1, -1, -1, -1, 378, 379, 380, 381, -1, -1, + -1, 385, -1, 387, -1, 264, 265, -1, 267, 393, + 394, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, -1, -1, 288, + -1, -1, -1, -1, 418, 419, 295, 421, -1, -1, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, 378, + 379, 380, 381, -1, -1, -1, 385, -1, 387, -1, + 264, 265, -1, 267, 393, 394, 270, 271, -1, -1, + -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, + -1, 285, -1, -1, 288, -1, -1, -1, 261, 418, + 419, 295, 421, -1, -1, -1, 300, -1, 302, 303, + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 284, 316, -1, 318, 319, -1, -1, 322, -1, + -1, 325, -1, 327, 297, 329, 330, 331, 332, 302, + 334, -1, -1, 337, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, 366, 367, -1, -1, -1, -1, 265, -1, - 267, 375, -1, 270, -1, 272, 273, -1, 275, -1, + 333, -1, -1, 336, -1, 338, 264, 265, 372, 267, + -1, -1, 270, 271, -1, 379, 380, 275, 276, 277, + -1, 279, -1, 387, -1, -1, -1, 285, -1, 362, + 288, -1, 365, 366, -1, -1, 369, 295, -1, -1, + -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, 418, 419, -1, 421, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, -1, 334, -1, -1, 337, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, -1, -1, 372, -1, 263, -1, 265, -1, + 267, 379, 380, 270, -1, 272, 273, -1, 275, 387, 277, -1, 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, 296, -1, -1, -1, 300, -1, -1, -1, 304, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 421, 422, 316, + 418, 419, -1, 421, -1, -1, -1, -1, 315, 316, -1, 318, -1, -1, -1, 322, 323, -1, -1, -1, - -1, -1, -1, 330, 331, -1, 265, 334, 267, -1, - 337, 270, -1, 272, 273, 342, 275, -1, 277, -1, - 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, - -1, -1, -1, -1, 293, -1, 295, 296, -1, -1, - -1, 300, -1, -1, -1, 304, -1, -1, -1, -1, - -1, -1, -1, -1, 381, -1, -1, 316, -1, 318, - -1, -1, -1, 322, 323, -1, -1, -1, -1, -1, - -1, 330, 331, -1, 265, 334, 267, -1, 337, 270, - -1, -1, 273, 342, 275, -1, 277, -1, 279, -1, - 281, 282, 283, -1, -1, 422, 287, 288, -1, -1, - -1, -1, 293, -1, 295, -1, -1, -1, -1, 300, - -1, -1, -1, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, -1, -1, - -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, - 331, -1, 265, 334, 267, -1, 337, 270, -1, -1, - 273, 342, 275, -1, 277, -1, 279, -1, 281, 282, - 283, -1, -1, 422, 287, 288, -1, -1, -1, -1, - 293, -1, 295, -1, -1, -1, -1, 300, -1, -1, - -1, 304, 265, -1, 267, -1, -1, 270, -1, -1, - 381, -1, 275, 316, -1, 318, 279, -1, -1, 322, - -1, -1, -1, -1, -1, 288, -1, 330, 331, -1, - -1, 334, 295, -1, 337, -1, -1, 300, -1, 342, - -1, 304, 265, 306, 267, 308, -1, 270, -1, -1, - 313, 422, 275, 316, -1, 318, 279, -1, -1, 322, - -1, -1, 325, -1, -1, 288, -1, 330, 331, -1, - -1, 334, 295, -1, 337, -1, -1, 300, -1, -1, - -1, 304, -1, 306, -1, 308, -1, -1, -1, -1, - 313, -1, -1, 316, -1, 318, -1, -1, -1, 322, - -1, -1, 325, -1, -1, -1, -1, 330, 331, -1, - -1, 334, -1, 376, 337, 265, -1, 267, -1, 422, - 270, -1, -1, -1, -1, 275, -1, -1, -1, 279, - -1, -1, -1, -1, -1, -1, -1, -1, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, - 300, 374, -1, -1, 304, 265, 306, 267, -1, 422, - 270, -1, -1, 313, -1, 275, 316, -1, 318, 279, - -1, -1, 322, -1, -1, 325, -1, -1, 288, -1, - 330, 331, -1, -1, 334, 295, -1, 337, -1, -1, - 300, -1, -1, -1, 304, 265, 306, 267, 308, 422, - 270, -1, -1, 313, -1, 275, 316, -1, 318, 279, - -1, -1, 322, 363, -1, 325, -1, -1, 288, -1, - 330, 331, -1, -1, 334, 295, -1, 337, -1, -1, - 300, -1, -1, -1, 304, 265, 306, 267, 308, -1, - 270, -1, -1, 313, -1, 275, 316, -1, 318, 279, - -1, -1, 322, 283, -1, 325, -1, -1, 288, -1, - 330, 331, -1, 293, 334, 295, -1, 337, -1, -1, - 300, -1, 422, -1, 304, 305, -1, -1, -1, 265, - -1, 267, -1, -1, 270, -1, 316, -1, 318, 275, - -1, -1, 322, 279, -1, -1, -1, -1, -1, -1, - 330, 331, 288, 265, 334, 267, -1, 337, 270, 295, - 272, -1, 422, 275, 300, -1, -1, 279, 304, -1, - -1, -1, -1, -1, -1, -1, 288, -1, -1, -1, - 316, -1, 318, 295, -1, -1, 322, -1, 300, -1, - 302, -1, 304, -1, 330, 331, -1, 261, 334, -1, - -1, 337, 422, -1, 316, -1, 318, -1, 272, -1, - 322, 323, -1, 277, -1, -1, -1, 281, 330, 331, - 284, -1, 334, -1, -1, 337, -1, -1, -1, -1, - -1, -1, 296, 297, -1, -1, -1, 301, 302, -1, - -1, -1, 422, 307, 261, 309, 310, 311, 312, -1, - -1, -1, -1, 317, -1, 272, -1, 321, -1, 323, - 277, -1, -1, -1, 281, -1, -1, 284, -1, 333, - -1, 335, 336, -1, 338, -1, -1, -1, 342, 296, - 297, -1, -1, -1, 301, 302, 422, -1, -1, -1, - 307, 261, 309, 310, 311, 312, -1, -1, 362, -1, - 317, -1, 272, -1, 321, -1, 323, 277, 372, 373, - 422, 281, -1, -1, 284, -1, 333, -1, -1, 336, - -1, 338, -1, -1, -1, 342, 296, 297, -1, -1, - -1, 301, 302, -1, -1, -1, -1, 307, 261, 309, - 310, 311, 312, -1, -1, 362, -1, 317, -1, 272, - -1, 321, -1, 323, 277, 372, 373, -1, 281, -1, - -1, 284, -1, 333, -1, -1, 336, -1, 338, -1, - -1, -1, 342, 296, 297, -1, 261, -1, 301, 302, - -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 362, -1, 317, -1, -1, -1, 321, 284, - 323, -1, 372, -1, -1, -1, -1, -1, -1, -1, - 333, -1, 297, 336, 261, 338, -1, 302, -1, 342, - -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, -1, -1, 321, 284, -1, 362, - -1, -1, -1, -1, -1, -1, -1, -1, 333, 372, - 297, 336, -1, 338, -1, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, -1, -1, 321, -1, -1, 362, -1, -1, - -1, -1, -1, 368, 369, -1, 333, 372, -1, 336, - -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 330, 331, 264, 265, 334, 267, -1, + 337, 270, 271, -1, -1, 342, 275, 276, 277, -1, + 279, -1, -1, -1, -1, -1, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, 365, 366, + -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, 378, -1, -1, -1, -1, -1, 316, -1, 318, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, 337, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 419, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + 265, -1, 267, 372, -1, 270, -1, 272, 273, -1, + 275, -1, 277, -1, 279, -1, 281, 282, 283, -1, + -1, -1, 287, 288, -1, -1, -1, -1, 293, -1, + 295, 296, -1, -1, -1, 300, -1, -1, -1, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 418, + 419, 316, -1, 318, -1, -1, -1, 322, 323, -1, + -1, -1, -1, -1, -1, 330, 331, -1, 265, 334, + 267, -1, 337, 270, -1, -1, 273, 342, 275, -1, + 277, -1, 279, -1, 281, 282, 283, -1, -1, -1, + 287, 288, -1, -1, -1, -1, 293, -1, 295, -1, + 265, -1, 267, 300, -1, 270, -1, 304, 273, -1, + 275, -1, 277, 378, 279, -1, 281, 282, 283, 316, + -1, 318, 287, 288, -1, 322, -1, -1, 293, -1, + 295, -1, -1, 330, 331, 300, -1, 334, -1, 304, + 337, -1, -1, -1, -1, 342, -1, -1, -1, -1, + -1, 316, -1, 318, 419, -1, -1, 322, -1, -1, + -1, -1, -1, -1, -1, 330, 331, -1, 265, 334, + 267, -1, 337, 270, -1, -1, -1, 342, 275, -1, + -1, 378, 279, -1, -1, -1, -1, -1, -1, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + 265, -1, 267, 300, -1, 270, -1, 304, -1, 306, + 275, 308, -1, -1, 279, -1, 313, -1, -1, 316, + -1, 318, 419, 288, -1, 322, -1, -1, 325, -1, + 295, -1, -1, 330, 331, 300, -1, 334, -1, 304, + 337, 306, -1, 308, -1, 265, -1, 267, 313, -1, + 270, 316, -1, 318, 419, 275, -1, 322, -1, 279, + 325, -1, -1, -1, -1, 330, 331, -1, 288, 334, + -1, -1, 337, -1, -1, 295, 373, -1, -1, -1, + 300, -1, -1, -1, 304, -1, 306, -1, -1, -1, + -1, -1, -1, 313, -1, -1, 316, -1, 318, -1, + -1, -1, 322, -1, -1, 325, 371, -1, -1, -1, + 330, 331, -1, -1, 334, -1, 265, 337, 267, -1, + -1, 270, 419, -1, -1, -1, 275, -1, -1, -1, + 279, -1, -1, -1, -1, -1, -1, -1, -1, 288, + -1, -1, -1, 363, -1, -1, 295, -1, -1, -1, + -1, 300, -1, -1, 419, 304, -1, 306, -1, 308, + -1, 265, -1, 267, 313, -1, 270, 316, -1, 318, + -1, 275, -1, 322, -1, 279, 325, -1, -1, -1, + -1, 330, 331, -1, 288, 334, -1, -1, 337, -1, + -1, 295, -1, -1, -1, -1, 300, -1, -1, 419, + 304, -1, 306, -1, 308, -1, 265, -1, 267, 313, + -1, 270, 316, -1, 318, -1, 275, -1, 322, -1, + 279, 325, -1, -1, 283, -1, 330, 331, -1, 288, + 334, -1, -1, 337, 293, -1, 295, -1, -1, -1, + -1, 300, -1, -1, -1, 304, 305, -1, -1, -1, + -1, 265, -1, 267, -1, -1, 270, 316, 272, 318, + -1, 275, -1, 322, -1, 279, -1, -1, -1, -1, + 419, 330, 331, -1, 288, 334, -1, -1, 337, -1, + -1, 295, -1, -1, -1, -1, 300, -1, 302, 265, + 304, 267, -1, -1, 270, -1, -1, -1, -1, 275, + -1, -1, 316, 279, 318, -1, -1, -1, 322, 323, + -1, -1, 288, -1, -1, 419, 330, 331, -1, 295, + 334, -1, -1, 337, 300, -1, -1, -1, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 316, -1, 318, -1, -1, -1, 322, -1, 261, -1, + -1, -1, -1, -1, 330, 331, -1, -1, 334, 272, + 419, 337, -1, -1, 277, -1, -1, -1, 281, -1, + -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 296, 297, -1, -1, 363, 301, 302, + -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, 272, -1, 317, 419, -1, 277, 321, -1, + 323, 281, -1, -1, 284, -1, -1, -1, -1, -1, + 333, -1, 335, 336, -1, 338, 296, 297, -1, 342, + -1, 301, 302, -1, -1, 261, -1, 307, -1, 309, + 310, 311, 312, 419, -1, -1, -1, 317, -1, 362, + -1, 321, -1, 323, -1, -1, 369, 370, 284, -1, + -1, -1, -1, 333, -1, 261, 336, 263, 338, -1, + -1, 297, 342, -1, -1, -1, 302, -1, -1, -1, + -1, 307, -1, 309, 310, 311, 312, -1, 284, 315, + -1, 317, 362, -1, -1, 321, -1, -1, -1, 369, + 370, 297, -1, -1, -1, -1, 302, 333, -1, -1, + 336, 307, 338, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, -1, -1, 321, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 261, 362, 333, -1, -1, + 336, -1, 338, 369, 370, -1, 272, -1, -1, -1, + -1, 277, -1, -1, -1, 281, -1, -1, 284, -1, + -1, -1, -1, -1, -1, -1, 362, -1, -1, -1, + 296, 297, -1, 369, 370, 301, 302, -1, 261, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, 272, + -1, 317, -1, -1, 277, 321, -1, 323, 281, -1, + -1, 284, -1, -1, -1, -1, -1, 333, -1, -1, + 336, -1, 338, 296, 297, -1, 342, -1, 301, 302, + -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, 362, -1, 321, -1, + 323, -1, -1, 369, 284, -1, -1, -1, -1, -1, + 333, -1, -1, 336, -1, 338, -1, 297, -1, 342, + -1, 261, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, 362, + -1, 321, -1, -1, 284, -1, 369, -1, -1, -1, + -1, -1, -1, 333, -1, -1, 336, 297, 338, -1, + -1, 261, 302, 263, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, 315, -1, 317, -1, -1, + -1, 321, 362, -1, 284, 365, 366, -1, -1, 369, + -1, 261, -1, 333, -1, -1, 336, 297, 338, -1, + -1, -1, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, 284, -1, -1, 317, -1, -1, + -1, 321, 362, -1, -1, -1, -1, 297, -1, 369, + -1, 261, 302, 333, -1, -1, 336, 307, 338, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, 284, -1, -1, -1, -1, -1, + -1, -1, 362, 333, -1, -1, 336, 297, 338, 369, + -1, -1, 302, -1, -1, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, 362, -1, -1, 365, 366, -1, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 362, -1, -1, -1, -1, - -1, 368, 369, + -1, -1, 362, }; -#line 7571 "cs-parser.jay" +#line 7304 "cs-parser.jay" // // A class used to hold info about an operator declarator @@ -15753,13 +15313,6 @@ void StoreModifierLocation (object token, Location loc) mod_locations.Add (Tuple.Create ((Modifiers) token, loc)); } -List> GetModifierLocations () -{ - var result = mod_locations; - mod_locations = null; - return result; -} - [System.Diagnostics.Conditional ("FULL_AST")] void PushLocation (Location loc) { @@ -15960,8 +15513,7 @@ void start_anonymous (bool isLambda, ParametersCompiled parameters, bool isAsync current_anonymous_method = new AnonymousMethodExpression (loc); } - current_anonymous_method.IsAsync = isAsync; - + async_block = isAsync; // Force the next block to be created as a ToplevelBlock parsing_anonymous_method = true; @@ -16400,13 +15952,7 @@ static string GetTokenName (int token) return ";"; case Token.TILDE: return "~"; - case Token.WHEN: - return "when"; - case Token.INTERPOLATED_STRING_END: - return "}"; - case Token.INTERPOLATED_STRING: - return "${"; - + case Token.PLUS: case Token.UMINUS: case Token.MINUS: @@ -16688,76 +16234,73 @@ class Token { public const int ASYNC = 362; public const int AWAIT = 363; public const int INTERR_OPERATOR = 364; - public const int WHEN = 365; - public const int INTERPOLATED_STRING = 366; - public const int INTERPOLATED_STRING_END = 367; - public const int GET = 368; - public const int SET = 369; - public const int LAST_KEYWORD = 370; - public const int OPEN_BRACE = 371; - public const int CLOSE_BRACE = 372; - public const int OPEN_BRACKET = 373; - public const int CLOSE_BRACKET = 374; - public const int OPEN_PARENS = 375; - public const int CLOSE_PARENS = 376; - public const int DOT = 377; - public const int COMMA = 378; - public const int COLON = 379; - public const int SEMICOLON = 380; - public const int TILDE = 381; - public const int PLUS = 382; - public const int MINUS = 383; - public const int BANG = 384; - public const int ASSIGN = 385; - public const int OP_LT = 386; - public const int OP_GT = 387; - public const int BITWISE_AND = 388; - public const int BITWISE_OR = 389; - public const int STAR = 390; - public const int PERCENT = 391; - public const int DIV = 392; - public const int CARRET = 393; - public const int INTERR = 394; - public const int DOUBLE_COLON = 395; - public const int OP_INC = 396; - public const int OP_DEC = 397; - public const int OP_SHIFT_LEFT = 398; - public const int OP_SHIFT_RIGHT = 399; - public const int OP_LE = 400; - public const int OP_GE = 401; - public const int OP_EQ = 402; - public const int OP_NE = 403; - public const int OP_AND = 404; - public const int OP_OR = 405; - public const int OP_MULT_ASSIGN = 406; - public const int OP_DIV_ASSIGN = 407; - public const int OP_MOD_ASSIGN = 408; - public const int OP_ADD_ASSIGN = 409; - public const int OP_SUB_ASSIGN = 410; - public const int OP_SHIFT_LEFT_ASSIGN = 411; - public const int OP_SHIFT_RIGHT_ASSIGN = 412; - public const int OP_AND_ASSIGN = 413; - public const int OP_XOR_ASSIGN = 414; - public const int OP_OR_ASSIGN = 415; - public const int OP_PTR = 416; - public const int OP_COALESCING = 417; - public const int OP_GENERICS_LT = 418; - public const int OP_GENERICS_LT_DECL = 419; - public const int OP_GENERICS_GT = 420; - public const int LITERAL = 421; - public const int IDENTIFIER = 422; - public const int OPEN_PARENS_LAMBDA = 423; - public const int OPEN_PARENS_CAST = 424; - public const int GENERIC_DIMENSION = 425; - public const int DEFAULT_COLON = 426; - public const int OPEN_BRACKET_EXPR = 427; - public const int EVAL_STATEMENT_PARSER = 428; - public const int EVAL_COMPILATION_UNIT_PARSER = 429; - public const int EVAL_USING_DECLARATIONS_UNIT_PARSER = 430; - public const int DOC_SEE = 431; - public const int GENERATE_COMPLETION = 432; - public const int COMPLETE_COMPLETION = 433; - public const int UMINUS = 434; + public const int GET = 365; + public const int SET = 366; + public const int LAST_KEYWORD = 367; + public const int OPEN_BRACE = 368; + public const int CLOSE_BRACE = 369; + public const int OPEN_BRACKET = 370; + public const int CLOSE_BRACKET = 371; + public const int OPEN_PARENS = 372; + public const int CLOSE_PARENS = 373; + public const int DOT = 374; + public const int COMMA = 375; + public const int COLON = 376; + public const int SEMICOLON = 377; + public const int TILDE = 378; + public const int PLUS = 379; + public const int MINUS = 380; + public const int BANG = 381; + public const int ASSIGN = 382; + public const int OP_LT = 383; + public const int OP_GT = 384; + public const int BITWISE_AND = 385; + public const int BITWISE_OR = 386; + public const int STAR = 387; + public const int PERCENT = 388; + public const int DIV = 389; + public const int CARRET = 390; + public const int INTERR = 391; + public const int DOUBLE_COLON = 392; + public const int OP_INC = 393; + public const int OP_DEC = 394; + public const int OP_SHIFT_LEFT = 395; + public const int OP_SHIFT_RIGHT = 396; + public const int OP_LE = 397; + public const int OP_GE = 398; + public const int OP_EQ = 399; + public const int OP_NE = 400; + public const int OP_AND = 401; + public const int OP_OR = 402; + public const int OP_MULT_ASSIGN = 403; + public const int OP_DIV_ASSIGN = 404; + public const int OP_MOD_ASSIGN = 405; + public const int OP_ADD_ASSIGN = 406; + public const int OP_SUB_ASSIGN = 407; + public const int OP_SHIFT_LEFT_ASSIGN = 408; + public const int OP_SHIFT_RIGHT_ASSIGN = 409; + public const int OP_AND_ASSIGN = 410; + public const int OP_XOR_ASSIGN = 411; + public const int OP_OR_ASSIGN = 412; + public const int OP_PTR = 413; + public const int OP_COALESCING = 414; + public const int OP_GENERICS_LT = 415; + public const int OP_GENERICS_LT_DECL = 416; + public const int OP_GENERICS_GT = 417; + public const int LITERAL = 418; + public const int IDENTIFIER = 419; + public const int OPEN_PARENS_LAMBDA = 420; + public const int OPEN_PARENS_CAST = 421; + public const int GENERIC_DIMENSION = 422; + public const int DEFAULT_COLON = 423; + public const int OPEN_BRACKET_EXPR = 424; + public const int EVAL_STATEMENT_PARSER = 425; + public const int EVAL_COMPILATION_UNIT_PARSER = 426; + public const int EVAL_USING_DECLARATIONS_UNIT_PARSER = 427; + public const int DOC_SEE = 428; + public const int GENERATE_COMPLETION = 429; + public const int COMPLETE_COMPLETION = 430; + public const int UMINUS = 431; public const int yyErrorCode = 256; } namespace yyParser { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-parser.jay similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-parser.jay index e6eb1b073..16f79e22c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-parser.jay @@ -142,14 +142,6 @@ namespace Mono.CSharp // LocationsBag lbag; List> mod_locations; - Location parameterModifierLocation, savedLocation, savedEventAssignLocation; - Location savedAttrParenOpenLocation, savedAttrParenCloseLocation, savedOperatorLocation; - Stack> locationListStack = new Stack> (); // used for type parameters - Stack opt_intoStack = new Stack (); - - bool HadAttributeParens; - List attributeArgumentCommas = new List (); - List parameterListCommas = new List (); Stack location_stack; %} @@ -266,9 +258,6 @@ namespace Mono.CSharp %token ASYNC %token AWAIT %token INTERR_OPERATOR -%token WHEN -%token INTERPOLATED_STRING -%token INTERPOLATED_STRING_END /* C# keywords which are not really keywords */ %token GET @@ -471,38 +460,25 @@ using_directive ; using_namespace - : USING opt_static namespace_or_type_expr SEMICOLON + : USING namespace_or_type_expr SEMICOLON { - UsingClause uc; - if ($2 != null) { - if (lang_version <= LanguageVersion.V_5) - FeatureIsNotAvailable (GetLocation ($2), "using static"); - - uc = new UsingType ((ATypeNameExpression) $3, GetLocation ($1)); - lbag.AddLocation (uc, GetLocation ($2), GetLocation ($4)); - } else { - uc = new UsingNamespace ((ATypeNameExpression) $3, GetLocation ($1)); - lbag.AddLocation (uc, GetLocation ($4)); - } - - current_namespace.AddUsing (uc); + var un = new UsingNamespace ((ATypeNameExpression) $2, GetLocation ($1)); + current_namespace.AddUsing (un); + + lbag.AddLocation (un, GetLocation ($3)); } - | USING opt_static IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON + | USING IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON { - var lt = (LocatedToken) $3; + var lt = (LocatedToken) $2; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { report.Warning (440, 2, lt.Location, "An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead"); } - if ($2 != null) { - report.Error (8085, GetLocation ($2), "A `using static' directive cannot be used to declare an alias"); - } - - var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) $5, GetLocation ($1)); + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) $4, GetLocation ($1)); current_namespace.AddUsing (un); - lbag.AddLocation (un, GetLocation ($4), GetLocation ($6)); + lbag.AddLocation (un, GetLocation ($3), GetLocation ($5)); } | USING error { @@ -511,11 +487,6 @@ using_namespace } ; -opt_static - : - | STATIC - ; - // // Strictly speaking, namespaces don't have attributes but // we parse global attributes along with namespace declarations and then @@ -735,13 +706,12 @@ attribute_section_cont $$ = new List (0); else $$ = $4; - lbag.InsertLocation ($$, 0, GetLocation ($2)); - lbag.InsertLocation ($$, 0, PopLocation ()); + lbag.InsertLocation ($$, 0, PopLocation ()); if ($5 != null) { - lbag.AddLocation ($$, GetLocation ($5), GetLocation ($6)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($5), GetLocation ($6)); } else { - lbag.AddLocation ($$, GetLocation ($6)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($6)); } current_attr_target = null; @@ -750,6 +720,7 @@ attribute_section_cont | attribute_list opt_comma CLOSE_BRACKET { $$ = $1; + lbag.InsertLocation ($$, 0, PopLocation ()); if ($2 != null) { lbag.AddLocation ($$, GetLocation($2), GetLocation ($3)); @@ -782,10 +753,9 @@ attribute_target { var lt = (LocatedToken) $1; $$ = CheckAttributeTarget (yyToken, lt.Value, lt.Location); - PushLocation (GetLocation ($1)); } - | EVENT { $$ = "event"; PushLocation (GetLocation ($1)); } - | RETURN { $$ = "return"; PushLocation (GetLocation ($1)); } + | EVENT { $$ = "event"; } + | RETURN { $$ = "return"; } ; attribute_list @@ -798,7 +768,7 @@ attribute_list var attrs = (List) $1; if (attrs != null) { attrs.Add ((Attribute) $3); - lbag.AddLocation (attrs, GetLocation ($2)); + lbag.AppendTo (attrs, GetLocation ($2)); } $$ = attrs; @@ -818,17 +788,8 @@ attribute if (tne.HasTypeArguments) { report.Error (404, tne.Location, "Attributes cannot be generic"); } - Arguments [] arguments = (Arguments []) $3; $$ = new Attribute (current_attr_target, tne, (Arguments[]) $3, GetLocation ($1), lexer.IsEscapedIdentifier (tne)); - if (arguments != null) { - attributeArgumentCommas.Insert (0, savedAttrParenOpenLocation); - attributeArgumentCommas.Add (savedAttrParenCloseLocation); - lbag.AddLocation ($$, attributeArgumentCommas); - attributeArgumentCommas.Clear (); - } else if (HadAttributeParens) { - lbag.AddLocation ($$, savedAttrParenOpenLocation, savedAttrParenCloseLocation); - } } ; @@ -837,13 +798,10 @@ attribute_name ; opt_attribute_arguments - : /* empty */ { $$ = null; HadAttributeParens = false; } + : /* empty */ { $$ = null; } | OPEN_PARENS attribute_arguments CLOSE_PARENS { - savedAttrParenOpenLocation = GetLocation ($1); - savedAttrParenCloseLocation = GetLocation ($3); $$ = $2; - HadAttributeParens = true; } ; @@ -875,7 +833,6 @@ attribute_arguments Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); args.Add ((Argument) $3); - attributeArgumentCommas.Add (GetLocation ($2)); } | attribute_arguments COMMA named_attribute_argument { @@ -885,7 +842,6 @@ attribute_arguments } ((Arguments) o [1]).Add ((Argument) $3); - attributeArgumentCommas.Add (GetLocation ($2)); } ; @@ -1028,7 +984,6 @@ struct_declaration lexer.ConstraintsParsing = true; valid_param_mod = ParameterModifierType.PrimaryConstructor; push_current_container (new Struct (current_container, (MemberName) $6, (Modifiers) $2, (Attributes) $1), $3); - lbag.AddMember (current_container, GetModifierLocations (), GetLocation ($4)); } opt_primary_parameters opt_class_base @@ -1046,6 +1001,7 @@ struct_declaration if (doc_support) current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + lbag.AddMember (current_container, mod_locations, GetLocation ($4)); lexer.parsing_modifiers = true; } @@ -1054,7 +1010,7 @@ struct_declaration if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } - opt_class_member_declarations CLOSE_BRACE + opt_class_member_declarations CLOSE_BRACE { --lexer.parsing_declaration; if (doc_support) @@ -1099,7 +1055,7 @@ constant_declaration } current_field.Initializer = (ConstInitializer) $7; - lbag.AddMember (current_field, GetModifierLocations (), GetLocation ($3), GetLocation ($9)); + lbag.AddMember (current_field, mod_locations, GetLocation ($3), GetLocation ($9)); current_field = null; } | opt_attributes @@ -1146,7 +1102,6 @@ constant_initializer { --lexer.parsing_block; $$ = new ConstInitializer (current_field, (Expression) $3, GetLocation ($1)); - lbag.AddLocation ($$, GetLocation ($1)); } | error { @@ -1185,7 +1140,7 @@ field_declaration Lexer.doc_state = XmlCommentState.Allowed; } - lbag.AddMember (current_field, GetModifierLocations (), GetLocation ($8)); + lbag.AddMember (current_field, mod_locations, GetLocation ($8)); $$ = current_field; current_field = null; } @@ -1210,7 +1165,7 @@ field_declaration } current_field.Initializer = (ConstInitializer) $7; - lbag.AddMember (current_field, GetModifierLocations (), GetLocation ($3), GetLocation ($9)); + lbag.AddMember (current_field, mod_locations, GetLocation ($9)); $$ = current_field; current_field = null; } @@ -1346,7 +1301,6 @@ method_declaration async_block = false; if (method.Block == null) { - lbag.AppendToMember (method, savedLocation); // semicolon method.ParameterInfo.CheckParameters (method); if ((method.ModFlags & Modifiers.ASYNC) != 0) { @@ -1391,7 +1345,8 @@ method_header if (doc_support) method.DocComment = Lexer.consume_doc_comment (); - lbag.AddMember (method, GetModifierLocations (), GetLocation ($5), GetLocation ($8)); + lbag.AddMember (method, mod_locations, GetLocation ($5), GetLocation ($8)); + $$ = method; lexer.ConstraintsParsing = true; @@ -1449,7 +1404,7 @@ method_header method.DocComment = Lexer.consume_doc_comment (); StoreModifierLocation (Modifiers.PARTIAL, GetLocation ($3)); - lbag.AddMember (method, GetModifierLocations (), GetLocation ($7), GetLocation ($10)); + lbag.AddMember (method, mod_locations, GetLocation ($7), GetLocation ($10)); $$ = method; } | opt_attributes @@ -1501,7 +1456,7 @@ method_body_expression_block method_body : block - | SEMICOLON { savedLocation = GetLocation ($1); $$ = null; } + | SEMICOLON { $$ = null; } ; expression_block @@ -1534,25 +1489,19 @@ formal_parameter_list { var pars_list = (List) $1; $$ = new ParametersCompiled (pars_list.ToArray ()); - lbag.AddLocation ($$, parameterListCommas); } | fixed_parameters COMMA parameter_array { var pars_list = (List) $1; pars_list.Add ((Parameter) $3); - parameterListCommas.Add (GetLocation ($2)); - + $$ = new ParametersCompiled (pars_list.ToArray ()); - lbag.AddLocation ($$, parameterListCommas); } | fixed_parameters COMMA arglist_modifier { var pars_list = (List) $1; pars_list.Add (new ArglistParameter (GetLocation ($3))); - parameterListCommas.Add (GetLocation ($2)); - $$ = new ParametersCompiled (pars_list.ToArray (), true); - lbag.AddLocation ($$, parameterListCommas); } | parameter_array COMMA error { @@ -1560,7 +1509,6 @@ formal_parameter_list report.Error (231, ((Parameter) $1).Location, "A params parameter must be the last parameter in a formal parameter list"); $$ = new ParametersCompiled (new Parameter[] { (Parameter) $1 } ); - lbag.AddLocation ($$, parameterListCommas); } | fixed_parameters COMMA parameter_array COMMA error { @@ -1569,18 +1517,14 @@ formal_parameter_list var pars_list = (List) $1; pars_list.Add (new ArglistParameter (GetLocation ($3))); - parameterListCommas.Add (GetLocation ($2)); - parameterListCommas.Add (GetLocation ($4)); - + $$ = new ParametersCompiled (pars_list.ToArray (), true); - lbag.AddLocation ($$, parameterListCommas); } | arglist_modifier COMMA error { report.Error (257, GetLocation ($1), "An __arglist parameter must be the last parameter in a formal parameter list"); $$ = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation ($1)) }, true); - lbag.AddLocation ($$, parameterListCommas); } | fixed_parameters COMMA ARGLIST COMMA error { @@ -1588,11 +1532,8 @@ formal_parameter_list var pars_list = (List) $1; pars_list.Add (new ArglistParameter (GetLocation ($3))); - parameterListCommas.Add (GetLocation ($2)); - parameterListCommas.Add (GetLocation ($4)); $$ = new ParametersCompiled (pars_list.ToArray (), true); - lbag.AddLocation ($$, parameterListCommas); } | parameter_array { @@ -1615,7 +1556,7 @@ fixed_parameters parameters_bucket.Clear (); Parameter p = (Parameter) $1; parameters_bucket.Add (p); - parameterListCommas.Clear (); + default_parameter_used = p.HasDefaultValue; $$ = parameters_bucket; } @@ -1632,7 +1573,7 @@ fixed_parameters default_parameter_used |= p.HasDefaultValue; pars.Add (p); - parameterListCommas.Add (GetLocation ($2)); + lbag.AddLocation (p, GetLocation ($2)); } $$ = $1; @@ -1647,7 +1588,6 @@ fixed_parameter { var lt = (LocatedToken) $4; $$ = new Parameter ((FullNamedExpression) $3, lt.Value, (Parameter.Modifier) $2, (Attributes) $1, lt.Location); - lbag.AddLocation ($$, parameterModifierLocation); } | opt_attributes opt_parameter_modifier @@ -1657,7 +1597,6 @@ fixed_parameter var lt = (LocatedToken) $4; report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name"); $$ = new Parameter ((FullNamedExpression) $3, lt.Value, (Parameter.Modifier) $2, (Attributes) $1, lt.Location); - lbag.AddLocation ($$, parameterModifierLocation); } | attribute_sections error { @@ -1673,7 +1612,6 @@ fixed_parameter Error_SyntaxError (yyToken); Location l = GetLocation ($4); $$ = new Parameter ((FullNamedExpression) $3, null, (Parameter.Modifier) $2, (Attributes) $1, l); - lbag.AddLocation ($$, parameterModifierLocation); } | opt_attributes opt_parameter_modifier @@ -1715,7 +1653,7 @@ fixed_parameter var lt = (LocatedToken) $4; $$ = new Parameter ((FullNamedExpression) $3, lt.Value, mod, (Attributes) $1, lt.Location); - lbag.AddLocation ($$, parameterModifierLocation, GetLocation ($5)); // parameterModifierLocation should be ignored when mod == NONE + lbag.AddLocation ($$, GetLocation ($5)); if ($7 != null) ((Parameter) $$).DefaultValue = new DefaultParameterValueExpression ((Expression) $7); @@ -1760,14 +1698,14 @@ parameter_modifier { if ((valid_param_mod & ParameterModifierType.Ref) == 0) Error_ParameterModifierNotValid ("ref", GetLocation ($1)); - parameterModifierLocation = GetLocation ($1); + $$ = Parameter.Modifier.REF; } | OUT { if ((valid_param_mod & ParameterModifierType.Out) == 0) Error_ParameterModifierNotValid ("out", GetLocation ($1)); - parameterModifierLocation = GetLocation ($1); + $$ = Parameter.Modifier.OUT; } | THIS @@ -1777,7 +1715,7 @@ parameter_modifier if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation ($1), "extension methods"); - parameterModifierLocation = GetLocation ($1); + $$ = Parameter.Modifier.This; } ; @@ -1787,7 +1725,6 @@ parameter_array { var lt = (LocatedToken) $4; $$ = new ParamsParameter ((FullNamedExpression) $3, lt.Value, (Attributes) $1, lt.Location); - lbag.AddLocation ($$, savedLocation); } | opt_attributes params_modifier type IDENTIFIER ASSIGN constant_expression { @@ -1795,7 +1732,6 @@ parameter_array var lt = (LocatedToken) $4; $$ = new ParamsParameter ((FullNamedExpression) $3, lt.Value, (Attributes) $1, lt.Location); - lbag.AddLocation ($$, savedLocation); } | opt_attributes params_modifier type error { @@ -1810,7 +1746,6 @@ params_modifier { if ((valid_param_mod & ParameterModifierType.Params) == 0) report.Error (1670, (GetLocation ($1)), "The `params' modifier is not allowed in current context"); - savedLocation = GetLocation ($1); } | PARAMS parameter_modifier { @@ -1820,7 +1755,6 @@ params_modifier } else { report.Error (1611, GetLocation ($1), "The params parameter cannot be declared as ref or out"); } - savedLocation = GetLocation ($1); } | PARAMS params_modifier { @@ -1856,7 +1790,7 @@ property_declaration report.Error (547, GetLocation ($3), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); current_type.AddMember (current_property); - lbag.AddMember (current_property, GetModifierLocations (), GetLocation ($6)); + lbag.AddMember (current_property, mod_locations, GetLocation ($6)); lexer.PropertyParsing = true; } @@ -1947,7 +1881,7 @@ indexer_declaration current_property = indexer; current_type.AddIndexer (indexer); - lbag.AddMember (current_property, GetModifierLocations (), GetLocation ($5), GetLocation ($8)); + lbag.AddMember (current_property, mod_locations, GetLocation ($5), GetLocation ($8)); if (type.Type != null && type.Type.Kind == MemberKind.Void) report.Error (620, GetLocation ($3), "`{0}': indexer return type cannot be `void'", indexer.GetSignatureForError ()); @@ -2029,6 +1963,7 @@ get_accessor_declaration } current_local_parameters = current_property.Get.ParameterInfo; + lbag.AddMember (current_property.Get, mod_locations); lexer.PropertyParsing = false; } accessor_body @@ -2039,10 +1974,7 @@ get_accessor_declaration if (current_container.Kind == MemberKind.Interface) { report.Error (531, current_property.Get.Block.StartLocation, "`{0}': interface members cannot have a definition", current_property.Get.GetSignatureForError ()); - } - lbag.AddMember (current_property.Get, GetModifierLocations ()); - } else { - lbag.AddMember (current_property.Get, GetModifierLocations (), savedLocation); + } } current_local_parameters = null; @@ -2079,6 +2011,7 @@ set_accessor_declaration } current_local_parameters = current_property.Set.ParameterInfo; + lbag.AddMember (current_property.Set, mod_locations); lexer.PropertyParsing = false; } accessor_body @@ -2090,9 +2023,6 @@ set_accessor_declaration report.Error (531, current_property.Set.Block.StartLocation, "`{0}': interface members cannot have a definition", current_property.Set.GetSignatureForError ()); } - lbag.AddMember (current_property.Set, GetModifierLocations ()); - } else { - lbag.AddMember (current_property.Set, GetModifierLocations (), savedLocation); } current_local_parameters = null; @@ -2108,7 +2038,7 @@ accessor_body : block | SEMICOLON { - savedLocation = GetLocation ($1); + // TODO: lbag $$ = null; } | error @@ -2129,7 +2059,7 @@ interface_declaration { lexer.ConstraintsParsing = true; push_current_container (new Interface (current_container, (MemberName) $6, (Modifiers) $2, (Attributes) $1), $3); - lbag.AddMember (current_container, GetModifierLocations (), GetLocation ($4)); + lbag.AddMember (current_container, mod_locations, GetLocation ($4)); } opt_class_base opt_type_parameter_constraints_clauses @@ -2236,10 +2166,7 @@ operator_declaration // Note again, checking is done in semantic analysis current_type.AddOperator (op); - lbag.AddMember (op, GetModifierLocations (), lbag.GetLocations (decl)); - if ($5 == null) { // Semicolon - lbag.AddLocation (op, savedLocation); - } + lbag.AddMember (op, mod_locations, lbag.GetLocations (decl)); } current_local_parameters = null; @@ -2302,42 +2229,42 @@ operator_declarator } $$ = new OperatorDeclaration (op, (FullNamedExpression) $1, loc); - lbag.AddLocation ($$, GetLocation ($2), savedOperatorLocation, GetLocation ($4), GetLocation ($7)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($3), GetLocation ($4), GetLocation ($7)); } | conversion_operator_declarator ; overloadable_operator // Unary operators: - : BANG { $$ = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation ($1); } - | TILDE { $$ = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation ($1); } - | OP_INC { $$ = Operator.OpType.Increment; savedOperatorLocation = GetLocation ($1); } - | OP_DEC { $$ = Operator.OpType.Decrement; savedOperatorLocation = GetLocation ($1); } - | TRUE { $$ = Operator.OpType.True; savedOperatorLocation = GetLocation ($1); } - | FALSE { $$ = Operator.OpType.False; savedOperatorLocation = GetLocation ($1); } + : BANG { $$ = Operator.OpType.LogicalNot; } + | TILDE { $$ = Operator.OpType.OnesComplement; } + | OP_INC { $$ = Operator.OpType.Increment; } + | OP_DEC { $$ = Operator.OpType.Decrement; } + | TRUE { $$ = Operator.OpType.True; } + | FALSE { $$ = Operator.OpType.False; } // Unary and binary: - | PLUS { $$ = Operator.OpType.Addition; savedOperatorLocation = GetLocation ($1); } - | MINUS { $$ = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation ($1); } + | PLUS { $$ = Operator.OpType.Addition; } + | MINUS { $$ = Operator.OpType.Subtraction; } // Binary: - | STAR { $$ = Operator.OpType.Multiply; savedOperatorLocation = GetLocation ($1); } - | DIV { $$ = Operator.OpType.Division; savedOperatorLocation = GetLocation ($1); } - | PERCENT { $$ = Operator.OpType.Modulus; savedOperatorLocation = GetLocation ($1); } - | BITWISE_AND { $$ = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation ($1); } - | BITWISE_OR { $$ = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation ($1); } - | CARRET { $$ = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation ($1); } - | OP_SHIFT_LEFT { $$ = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation ($1); } - | OP_SHIFT_RIGHT { $$ = Operator.OpType.RightShift; savedOperatorLocation = GetLocation ($1); } - | OP_EQ { $$ = Operator.OpType.Equality; savedOperatorLocation = GetLocation ($1); } - | OP_NE { $$ = Operator.OpType.Inequality; savedOperatorLocation = GetLocation ($1); } - | OP_GT { $$ = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation ($1); } - | OP_LT { $$ = Operator.OpType.LessThan; savedOperatorLocation = GetLocation ($1); } - | OP_GE { $$ = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation ($1); } - | OP_LE { $$ = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation ($1); } + | STAR { $$ = Operator.OpType.Multiply; } + | DIV { $$ = Operator.OpType.Division; } + | PERCENT { $$ = Operator.OpType.Modulus; } + | BITWISE_AND { $$ = Operator.OpType.BitwiseAnd; } + | BITWISE_OR { $$ = Operator.OpType.BitwiseOr; } + | CARRET { $$ = Operator.OpType.ExclusiveOr; } + | OP_SHIFT_LEFT { $$ = Operator.OpType.LeftShift; } + | OP_SHIFT_RIGHT { $$ = Operator.OpType.RightShift; } + | OP_EQ { $$ = Operator.OpType.Equality; } + | OP_NE { $$ = Operator.OpType.Inequality; } + | OP_GT { $$ = Operator.OpType.GreaterThan; } + | OP_LT { $$ = Operator.OpType.LessThan; } + | OP_GE { $$ = Operator.OpType.GreaterThanOrEqual; } + | OP_LE { $$ = Operator.OpType.LessThanOrEqual; } | IS { if (lang_version != LanguageVersion.Experimental) FeatureIsNotAvailable (GetLocation ($1), "is user operator"); - savedOperatorLocation = GetLocation ($1); + $$ = Operator.OpType.Is; } ; @@ -2465,7 +2392,7 @@ constructor_declarator } current_type.AddConstructor (c); - lbag.AddMember (c, GetModifierLocations (), GetLocation ($5), GetLocation ($7)); + lbag.AddMember (c, mod_locations, GetLocation ($5), GetLocation ($7)); $$ = c; // @@ -2556,13 +2483,12 @@ destructor_declaration Destructor d = new Destructor (current_type, (Modifiers) $2, ParametersCompiled.EmptyReadOnlyParameters, (Attributes) $1, lt.Location); - d.Identifier = lt.Value; if (doc_support) d.DocComment = ConsumeStoredComment (); d.Block = (ToplevelBlock) $8; current_type.AddMember (d); - lbag.AddMember (d, GetModifierLocations (), GetLocation ($3), GetLocation ($6), GetLocation ($7)); + lbag.AddMember (d, mod_locations, GetLocation ($3), GetLocation ($6), GetLocation ($7)); current_local_parameters = null; } @@ -2591,11 +2517,8 @@ event_declaration current_event_field.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } - if (current_event_field.Initializer != null) { - lbag.AddMember (current_event_field, GetModifierLocations (), GetLocation ($3), savedEventAssignLocation, GetLocation ($9)); - } else { - lbag.AddMember (current_event_field, GetModifierLocations (), GetLocation ($3), GetLocation ($9)); - } + + lbag.AddMember (current_event_field, mod_locations, GetLocation ($3), GetLocation ($9)); current_event_field = null; } | opt_attributes @@ -2605,7 +2528,7 @@ event_declaration { current_event = new EventProperty (current_type, (FullNamedExpression) $4, (Modifiers) $2, (MemberName) $5, (Attributes) $1); current_type.AddMember (current_event); - lbag.AddMember (current_event, GetModifierLocations (), GetLocation ($3), GetLocation ($6)); + lbag.AddMember (current_event, mod_locations, GetLocation ($3), GetLocation ($6)); lexer.EventParsing = true; } @@ -2646,7 +2569,6 @@ opt_event_initializer event_variable_initializer { --lexer.parsing_block; - savedEventAssignLocation = GetLocation ($1); current_event_field.Initializer = (Expression) $3; } ; @@ -2735,7 +2657,7 @@ add_accessor_declaration current_event.Add = new EventProperty.AddDelegateMethod (current_event, (Attributes) $1, GetLocation ($3)); current_local_parameters = current_event.Add.ParameterInfo; - lbag.AddMember (current_event.Add, GetModifierLocations ()); + lbag.AddMember (current_event.Add, mod_locations); lexer.EventParsing = false; } event_accessor_block @@ -2763,7 +2685,7 @@ remove_accessor_declaration current_event.Remove = new EventProperty.RemoveDelegateMethod (current_event, (Attributes) $1, GetLocation ($3)); current_local_parameters = current_event.Remove.ParameterInfo; - lbag.AddMember (current_event.Remove, GetModifierLocations ()); + lbag.AddMember (current_event.Remove, mod_locations); lexer.EventParsing = false; } event_accessor_block @@ -2812,7 +2734,6 @@ incomplete_member FullNamedExpression type = (FullNamedExpression) $3; current_field = new Field (current_type, type, (Modifiers) $2, MemberName.Null, (Attributes) $1); current_type.AddField (current_field); - lbag.AddMember (current_field, GetModifierLocations ()); $$ = current_field; } ; @@ -2820,8 +2741,7 @@ incomplete_member enum_declaration : opt_attributes opt_modifiers - ENUM - type_declaration_name + ENUM type_declaration_name opt_enum_base { if (doc_support) @@ -2838,11 +2758,6 @@ enum_declaration } push_current_container (new Enum (current_container, (FullNamedExpression) $5, (Modifiers) $2, name, (Attributes) $1), null); - if ($5 != null) { - lbag.AddMember (current_container, GetModifierLocations (), GetLocation ($3), savedLocation, GetLocation ($7)); - } else { - lbag.AddMember (current_container, GetModifierLocations (), GetLocation ($3), GetLocation ($7)); - } } opt_enum_member_declarations { @@ -2854,10 +2769,6 @@ enum_declaration } CLOSE_BRACE opt_semicolon { - lbag.AppendToMember (current_container, GetLocation ($11)); - if ($12 != null) { - lbag.AppendToMember (current_container, GetLocation ($12)); - } if (doc_support) current_container.DocComment = enumTypeComment; @@ -2866,6 +2777,7 @@ enum_declaration // if (doc_support) // em.DocComment = ev.DocComment; + lbag.AddMember (current_container, mod_locations, GetLocation ($3), GetLocation ($7), GetLocation ($11)); $$ = pop_current_class (); } ; @@ -2874,7 +2786,6 @@ opt_enum_base : /* empty */ | COLON type { - savedLocation = GetLocation ($1); $$ = $2; } | COLON error @@ -2889,7 +2800,7 @@ opt_enum_member_declarations | enum_member_declarations | enum_member_declarations COMMA { - lbag.AppendToMember (current_container, GetLocation ($2)); + lbag.AddLocation ($1, GetLocation ($2)); } ; @@ -2897,7 +2808,7 @@ enum_member_declarations : enum_member_declaration | enum_member_declarations COMMA enum_member_declaration { - lbag.AppendToMember (current_container, GetLocation ($2)); + lbag.AddLocation ($1, GetLocation ($2)); $$ = $3; } ; @@ -2993,7 +2904,7 @@ delegate_declaration if ($11 != null) current_delegate.SetConstraints ((List) $11); - lbag.AddMember (current_delegate, GetModifierLocations (), GetLocation ($3), GetLocation ($6), GetLocation ($9), GetLocation ($13)); + lbag.AddMember (current_delegate, mod_locations, GetLocation ($3), GetLocation ($6), GetLocation ($9), GetLocation ($13)); $$ = current_delegate; @@ -3020,7 +2931,7 @@ namespace_or_type_expr var lt2 = (LocatedToken) $2; $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); - lbag.AddLocation ($$, savedLocation, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($2)); } | qualified_alias_member IDENTIFIER generic_dimension { @@ -3069,13 +2980,9 @@ opt_type_argument_list | OP_GENERICS_LT type_arguments OP_GENERICS_GT { if (lang_version < LanguageVersion.ISO_2) - FeatureIsNotAvailable (GetLocation ($1), "generics"); - var list = locationListStack.Pop (); - list.Add (GetLocation ($1)); - list.Add (GetLocation ($3)); - lbag.AddLocation ($2, list); - - $$ = $2;; + FeatureIsNotAvailable (GetLocation ($1), "generics"); + + $$ = $2; } | OP_GENERICS_LT error { @@ -3090,15 +2997,13 @@ type_arguments TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) $1); $$ = type_args; - locationListStack.Push (new List ()); } | type_arguments COMMA type { TypeArguments type_args = (TypeArguments) $1; type_args.Add ((FullNamedExpression) $3); $$ = type_args; - locationListStack.Peek ().Add (GetLocation ($2)); - } + } ; // @@ -3163,7 +3068,7 @@ explicit_interface var lt2 = (LocatedToken) $2; $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); - lbag.AddLocation ($$, savedLocation, GetLocation ($4)); + lbag.AddLocation ($$, GetLocation ($4)); } | explicit_interface IDENTIFIER opt_type_argument_list DOT { @@ -3181,10 +3086,7 @@ opt_type_parameter_list FeatureIsNotAvailable (GetLocation ($1), "generics"); $$ = $2; - var list = locationListStack.Pop (); - list.Add (GetLocation ($1)); - list.Add (GetLocation ($2)); - lbag.AddLocation ($2, list); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($3)); } ; @@ -3194,14 +3096,13 @@ type_parameters var tparams = new TypeParameters (); tparams.Add ((TypeParameter)$1); $$ = tparams; - locationListStack.Push (new List ()); } | type_parameters COMMA type_parameter { var tparams = (TypeParameters) $1; tparams.Add ((TypeParameter)$3); $$ = tparams; - locationListStack.Peek ().Add (GetLocation ($2)); + lbag.AddLocation ($3, GetLocation ($3)); } ; @@ -3209,10 +3110,7 @@ type_parameter : opt_attributes opt_type_parameter_variance IDENTIFIER { var lt = (LocatedToken)$3; - var variance = (VarianceDecl) $2; - $$ = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)$1, variance); - if (variance != null) - lbag.AddLocation ($$, savedLocation); + $$ = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)$1, (VarianceDecl) $2); } | error { @@ -3328,7 +3226,6 @@ type_list { var types = (List) $1; types.Add ((FullNamedExpression) $3); - lbag.AddLocation (types, GetLocation ($2)); $$ = types; } ; @@ -3395,7 +3292,6 @@ primary_expression | pointer_member_access | anonymous_method_expression | undocumented_expressions - | interpolated_string ; type_name_expression @@ -3418,71 +3314,6 @@ boolean_literal | FALSE { $$ = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation ($1)); } ; -interpolated_string - : INTERPOLATED_STRING interpolations INTERPOLATED_STRING_END - { - $$ = new InterpolatedString ((StringLiteral) $1, (List) $2, (StringLiteral) $3); - } - | INTERPOLATED_STRING_END - { - $$ = new InterpolatedString ((StringLiteral) $1, null, null); - } - ; - -interpolations - : interpolation - { - var list = new List (); - list.Add ((InterpolatedStringInsert) $1); - $$ = list; - } - | interpolations INTERPOLATED_STRING interpolation - { - var list = (List) $1; - list.Add ((StringLiteral) $2); - list.Add ((InterpolatedStringInsert) $3); - $$ = list; - } - ; - -interpolation - : expression - { - $$ = new InterpolatedStringInsert ((Expression) $1); - } - | expression COMMA expression - { - $$ = new InterpolatedStringInsert ((Expression) $1) { - Alignment = (Expression)$3 - }; - } - | expression COLON - { - lexer.parsing_interpolation_format = true; - } - LITERAL - { - lexer.parsing_interpolation_format = false; - - $$ = new InterpolatedStringInsert ((Expression) $1) { - Format = (string)$4 - }; - } - | expression COMMA expression COLON - { - lexer.parsing_interpolation_format = true; - } - LITERAL - { - lexer.parsing_interpolation_format = false; - - $$ = new InterpolatedStringInsert ((Expression) $1) { - Alignment = (Expression)$3, - Format = (string) $6 - }; - } - ; - // // Here is the trick, tokenizer may think that parens is a special but @@ -3562,7 +3393,7 @@ member_access var lt2 = (LocatedToken) $2; $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); - lbag.AddLocation ($$, savedLocation, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($2)); } | qualified_alias_member identifier_inside_body generic_dimension { @@ -3652,7 +3483,6 @@ member_initializer_list { var a = (List)$1; a.Add ((Expression) $3); - lbag.AddLocation (a, GetLocation ($2)); $$ = a; } | member_initializer_list error { @@ -3689,10 +3519,9 @@ member_initializer { if ($2 == null) $$ = new CollectionElementInitializer (GetLocation ($1)); - else { + else $$ = new CollectionElementInitializer ((List)$2, GetLocation ($1)); - lbag.AddLocation ($$, GetLocation ($2)); - } + lbag.AddLocation ($$, GetLocation ($3)); } | OPEN_BRACKET_EXPR expression_list CLOSE_BRACKET ASSIGN initializer_value @@ -3735,7 +3564,6 @@ argument_list Error_NamedArgumentExpected ((NamedArgument) list [list.Count - 1]); list.Add ((Argument) $3); - lbag.AddLocation (list, GetLocation ($2)); $$ = list; } | argument_list COMMA named_argument @@ -3750,7 +3578,6 @@ argument_list } list.Add (a); - lbag.AddLocation (list, GetLocation ($2)); $$ = list; } | argument_list COMMA error @@ -3897,7 +3724,6 @@ expression_list { var list = (List) $1; list.Add ((Expression) $3); - lbag.AddLocation (list, GetLocation ($2)); $$ = list; } ; @@ -3916,7 +3742,6 @@ expression_list_arguments Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); args.Add ((Argument) $3); - lbag.AddLocation (args, GetLocation ($2)); $$ = args; } ; @@ -4073,8 +3898,6 @@ anonymous_type_parameters { var a = (List) $1; a.Add ((AnonymousTypeParameter) $3); - lbag.AddLocation (a, GetLocation ($2)); - $$ = a; } | COMPLETE_COMPLETION @@ -4194,7 +4017,6 @@ variable_initializer_list { var list = (List) $1; list.Add ((Expression) $3); - lbag.AddLocation (list, GetLocation ($2)); $$ = list; } ; @@ -4232,7 +4054,7 @@ qualified_alias_member var lt = (LocatedToken) $1; if (lang_version == LanguageVersion.ISO_1) FeatureIsNotAvailable (lt.Location, "namespace alias qualifier"); - savedLocation = GetLocation ($2); + $$ = lt; } ; @@ -4296,11 +4118,6 @@ anonymous_method_expression block { $$ = end_anonymous ((ParametersBlock) $4); - if ((ParametersCompiled) $2 != ParametersCompiled.Undefined) { - lbag.AddLocation ($$, GetLocation ($1), PopLocation (), PopLocation ()); - } else { - lbag.AddLocation ($$, GetLocation ($1)); - } } | ASYNC DELEGATE opt_anonymous_method_signature { @@ -4309,12 +4126,6 @@ anonymous_method_expression block { $$ = end_anonymous ((ParametersBlock) $5); - - if ((ParametersCompiled) $3 != ParametersCompiled.Undefined) { - lbag.AddLocation ($$, GetLocation ($1), GetLocation ($2), PopLocation (), PopLocation ()); - } else { - lbag.AddLocation ($$, GetLocation ($1), GetLocation ($2)); - } } ; @@ -4335,8 +4146,6 @@ anonymous_method_signature { valid_param_mod = 0; $$ = $3; - PushLocation (GetLocation ($3)); - PushLocation (GetLocation ($1)); } ; @@ -5008,7 +4817,7 @@ lambda_parameter_list { var pars = new List (4); pars.Add ((Parameter) $1); - parameterListCommas.Clear (); + $$ = pars; } | lambda_parameter_list COMMA lambda_parameter @@ -5020,8 +4829,6 @@ lambda_parameter_list } pars.Add (p); - parameterListCommas.Add (GetLocation ($2)); - $$ = pars; } ; @@ -5056,7 +4863,6 @@ opt_lambda_parameter_list | lambda_parameter_list { var pars_list = (List) $1; $$ = new ParametersCompiled (pars_list.ToArray ()); - lbag.AddLocation ($$, parameterListCommas); } ; @@ -5274,7 +5080,6 @@ class_declaration } push_current_container (c, $3); - lbag.AddMember (current_container, GetModifierLocations (), GetLocation ($4)); valid_param_mod = ParameterModifierType.PrimaryConstructor; } opt_primary_parameters_with_class_base @@ -5288,6 +5093,7 @@ class_declaration if ($9 != null) current_container.SetConstraints ((List) $9); + lbag.AddMember (current_container, mod_locations, GetLocation ($4)); if (doc_support) { current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); @@ -5317,7 +5123,7 @@ opt_partial : /* empty */ { $$ = null; } | PARTIAL - { $$ = $1; StoreModifierLocation (Modifiers.PARTIAL, GetLocation ($1)); } // location + { $$ = $1; } // location ; opt_modifiers @@ -5445,7 +5251,6 @@ class_base : COLON type_list { current_type.SetBaseTypes ((List) $2); - lbag.AppendToMember (current_type, GetLocation ($1)); } | COLON type_list error { @@ -5532,7 +5337,6 @@ type_parameter_constraints } constraints.Add ((FullNamedExpression) $3); - lbag.AddLocation (constraints, GetLocation ($2)); $$ = constraints; } ; @@ -5578,12 +5382,10 @@ type_parameter_variance : OUT { $$ = new VarianceDecl (Variance.Covariant, GetLocation ($1)); - savedLocation = GetLocation ($1); } | IN { $$ = new VarianceDecl (Variance.Contravariant, GetLocation ($1)); - savedLocation = GetLocation ($1); } ; @@ -5627,24 +5429,6 @@ block_end block_prepared - : OPEN_BRACE - { - ++lexer.parsing_block; - current_block.StartLocation = GetLocation ($1); - } - opt_statement_list CLOSE_BRACE - { - --lexer.parsing_block; - $$ = end_block (GetLocation ($4)); - } | CLOSE_BRACE - { - report.Error (1525, GetLocation ($1), "Unexpected symbol '}', expected '{'"); - lexer.putback ('}'); - $$ = end_block (GetLocation ($1)); - } - ; - -block_prepared_strict : OPEN_BRACE { ++lexer.parsing_block; @@ -5677,16 +5461,6 @@ statement current_block.AddStatement ((Statement) $1); } | labeled_statement -// WORKAROUND:Remove that rule, if it is >really< fixed. - | IDENTIFIER error - { - Error_SyntaxError (yyToken); - var lt =(LocatedToken) $1; - var sn = new SimpleName (lt.Value, lt.Location); - current_block.AddStatement(new StatementErrorExpression (sn)); - $$ = null; - } -//////// | error { Error_SyntaxError (yyToken); @@ -5873,7 +5647,7 @@ block_variable_declaration current_block.AddLocalName (li); current_variable = new BlockVariable ((FullNamedExpression) $1, li); } - opt_local_variable_initializer opt_variable_declarators semicolon_or_handle_error_close_brace + opt_local_variable_initializer opt_variable_declarators SEMICOLON { $$ = current_variable; current_variable = null; @@ -5891,23 +5665,9 @@ block_variable_declaration } const_variable_initializer opt_const_declarators SEMICOLON { - if (current_variable.Initializer != null) { - lbag.AddLocation (current_variable, GetLocation ($1), savedLocation, GetLocation ($7)); - } else { - lbag.AddLocation (current_variable, GetLocation ($1), GetLocation ($7)); - } - $$ = current_variable;; + $$ = current_variable; current_variable = null; - } - ; - -semicolon_or_handle_error_close_brace - : SEMICOLON - | CLOSE_BRACE { - // Redundant, but wont regress - report.Error (1525, lexer.Location, "Unexpected symbol }"); - lexer.putback ('}'); - $$ = $1; + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($7)); } ; @@ -5979,7 +5739,6 @@ const_variable_initializer } | ASSIGN constant_initializer_expr { - savedLocation = GetLocation ($1); current_variable.Initializer = (Expression) $2; } ; @@ -6114,7 +5873,7 @@ switch_statement { $$ = new Switch ((Expression) $3, (ExplicitBlock) current_block.Explicit, GetLocation ($1)); end_block (GetLocation ($8)); - lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4), GetLocation ($5), GetLocation ($8)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); } | SWITCH open_parens_any expression error { @@ -6240,7 +5999,6 @@ for_statement current_block.IsCompilerGenerated = true; For f = new For (GetLocation ($1)); current_block.AddStatement (f); - lbag.AddStatement (f, current_block.StartLocation); $$ = f; } for_statement_cont @@ -6253,66 +6011,69 @@ for_statement for_statement_cont : opt_for_initializer SEMICOLON { - For f = (For) $0; - f.Initializer = (Statement) $1; - lbag.AddLocation (f, GetLocation ($2)); - $$ = f; + ((For) $0).Initializer = (Statement) $1; + + // Pass the "For" object to the iterator_part4 + oob_stack.Push ($0); } - for_statement_condition + for_condition_and_iterator_part + embedded_statement { - $$ = $4; - } - | opt_for_initializer CLOSE_PARENS { - report.Error (1525, GetLocation ($2), "Unexpected symbol ')', expected ';'"); - For f = (For) $0; - f.Initializer = (Statement) $1; - lbag.AddLocation (f, GetLocation ($2)); + var locations = (Tuple) $4; + oob_stack.Pop (); + if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($5)); + + For f = ((For) $0); + f.Statement = (Statement) $5; + lbag.AddStatement (f, current_block.StartLocation, GetLocation ($2), GetLocation (locations.Item1), GetLocation (locations.Item2)); + $$ = end_block (GetLocation ($2)); - } + } + | error + { + Error_SyntaxError (yyToken); + $$ = end_block (current_block.StartLocation); + } ; -for_statement_condition +for_condition_and_iterator_part : opt_for_condition SEMICOLON { - For f = (For) $0; + For f = (For) oob_stack.Peek (); f.Condition = (BooleanExpression) $1; - lbag.AddLocation (f, GetLocation ($2)); - $$ = f; } - for_statement_end - { - $$ = $4; + for_iterator_part { + $$ = new Tuple (GetLocation ($2), (Location) $4); } - | boolean_expression CLOSE_PARENS { - report.Error (1525, GetLocation ($2), "Unexpected symbol ')', expected ';'"); - For f = (For) $0; + // Handle errors in the case of opt_for_condition being followed by + // a close parenthesis + | opt_for_condition close_parens_close_brace { + report.Error (1525, GetLocation ($2), "Unexpected symbol `}'"); + For f = (For) oob_stack.Peek (); f.Condition = (BooleanExpression) $1; - lbag.AddLocation (f, GetLocation ($2)); - $$ = end_block (GetLocation ($2)); - } + $$ = new Tuple (GetLocation ($2), GetLocation ($2)); + } ; -for_statement_end - : opt_for_iterator CLOSE_PARENS - embedded_statement - { - For f = (For) $0; +for_iterator_part + : opt_for_iterator CLOSE_PARENS { + For f = (For) oob_stack.Peek (); f.Iterator = (Statement) $1; - - if ($3 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) - Warning_EmptyStatement (GetLocation ($3)); - - f.Statement = (Statement) $3; - lbag.AddLocation (f, GetLocation ($2)); - - $$ = end_block (GetLocation ($2)); + $$ = GetLocation ($2); } - | error - { - Error_SyntaxError (yyToken); - $$ = end_block (current_block.StartLocation); + | opt_for_iterator CLOSE_BRACE { + report.Error (1525, GetLocation ($2), "Unexpected symbol expected ')'"); + For f = (For) oob_stack.Peek (); + f.Iterator = (Statement) $1; + $$ = GetLocation ($2); } + ; + +close_parens_close_brace + : CLOSE_PARENS + | CLOSE_BRACE { lexer.putback ('}'); } ; opt_for_initializer @@ -6363,8 +6124,7 @@ statement_expression_list lbag.AddStatement (sl, GetLocation ($2)); } else { sl.Add ((Statement) $3); - lbag.AddLocation (sl, GetLocation ($2)); - + lbag.AppendTo (sl, GetLocation ($2)); } $$ = sl; @@ -6421,27 +6181,6 @@ foreach_statement lbag.AddStatement (f, GetLocation ($2), GetLocation ($5), GetLocation ($7)); end_block (GetLocation ($7)); - $$ = f; - } - | FOREACH open_parens_any type identifier_inside_body error - { - start_block (GetLocation ($2)); - current_block.IsCompilerGenerated = true; - var lt = $4 as LocatedToken; - var li = lt != null ? new LocalVariable (current_block, lt.Value, LocalVariable.Flags.ForeachVariable | LocalVariable.Flags.Used, lt.Location) : null; - - Foreach f = new Foreach ((Expression) $3, li, null, null, null, GetLocation ($1)); - current_block.AddStatement (f); - - lbag.AddStatement (f, GetLocation ($2)); - $$ = end_block (GetLocation ($5)); - } - | FOREACH open_parens_any type error - { - Foreach f = new Foreach ((Expression) $3, null, null, null, null, GetLocation ($1)); - current_block.AddStatement (f); - - lbag.AddStatement (f, GetLocation ($2)); $$ = f; } ; @@ -6599,7 +6338,7 @@ try_statement } | TRY block catch_clauses FINALLY block { - $$ = new TryFinally (new TryCatch ((Block) $2, (List) $3, GetLocation ($1), true), (ExplicitBlock) $5, GetLocation ($1)); + $$ = new TryFinally (new TryCatch ((Block) $2, (List) $3, Location.Null, true), (ExplicitBlock) $5, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($4)); } | TRY block error @@ -6655,12 +6394,11 @@ catch_clause c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); current_block.AddLocalName (c.Variable); } - + lbag.AddLocation (c, GetLocation ($2), GetLocation ($5)); $$ = c; - lexer.parsing_catch_when = true; } - opt_catch_filter_or_error + opt_catch_filter block_prepared { ((Catch) $6).Filter = (CatchFilterExpression) $7; $$ = $6; @@ -6676,36 +6414,35 @@ catch_clause $$ = new Catch (null, GetLocation ($1)); } - ; - -opt_catch_filter_or_error - : opt_catch_filter block_prepared - { - $$ = $1; - } - | error + | CATCH open_parens_any type opt_identifier CLOSE_PARENS error { - end_block (Location.Null); Error_SyntaxError (yyToken); - $$ = null; + + // Required otherwise missing block could not be detected because + // start_block is run early + var c = new Catch (null, GetLocation ($1)); + c.TypeExpression = (FullNamedExpression) $3; + + if ($4 != null) { + var lt = (LocatedToken) $4; + c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); + } + + lbag.AddLocation (c, GetLocation ($2), GetLocation ($5)); + + $$ = c; } ; opt_catch_filter - : { - lexer.parsing_catch_when = false; - } - | WHEN - { - lexer.parsing_catch_when = false; - } - open_parens_any expression CLOSE_PARENS + : /* empty */ + | IF open_parens_any expression CLOSE_PARENS { if (lang_version <= LanguageVersion.V_5) FeatureIsNotAvailable (GetLocation ($1), "exception filter"); - $$ = new CatchFilterExpression ((Expression) $4, GetLocation ($1)); - lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5)); + $$ = new CatchFilterExpression ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); } ; @@ -6801,7 +6538,6 @@ using_statement Warning_EmptyStatement (GetLocation ($9)); Using u = new Using ((Using.VariableDeclaration) $8, (Statement) $9, GetLocation ($1)); - lbag.AddStatement (u, GetLocation ($2), GetLocation ($7)); current_block.AddStatement (u); $$ = end_block (GetLocation ($7)); } @@ -6839,7 +6575,6 @@ using_or_fixed_variable_initializer | ASSIGN variable_initializer { current_variable.Initializer = (Expression) $2; - lbag.AddLocation (current_variable, GetLocation ($1)); $$ = current_variable; } ; @@ -6949,6 +6684,7 @@ from_clause current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); lbag.AddLocation ($$, GetLocation ($3)); } @@ -7173,7 +6909,7 @@ join_clause into = new Linq.RangeVariable (lt.Value, lt.Location); $$ = new Linq.GroupJoin (block, sn, (Expression)$5, outer_selector, (Linq.QueryBlock) current_block, into, GetLocation ($1)); - lbag.AddLocation ($$, GetLocation ($3), GetLocation ($6), GetLocation ($9), opt_intoStack.Pop ()); + lbag.AddLocation ($$, GetLocation ($3), GetLocation ($6), GetLocation ($9), GetLocation ($12)); } current_block = block.Parent; @@ -7239,7 +6975,6 @@ join_clause $$ = new Linq.GroupJoin (block, sn, (Expression)$6, outer_selector, (Linq.QueryBlock) current_block, into, GetLocation ($1)) { IdentifierType = (FullNamedExpression)$2 }; - lbag.AddLocation ($$, GetLocation ($3), GetLocation ($6), GetLocation ($9), opt_intoStack.Pop ()); } current_block = block.Parent; @@ -7251,7 +6986,6 @@ opt_join_into : /* empty */ | INTO identifier_inside_body { - opt_intoStack.Push (GetLocation ($1)); $$ = $2; } ; @@ -7260,7 +6994,6 @@ orderby_clause : ORDERBY { current_block = new Linq.QueryBlock (current_block, lexer.Location); - lbag.AddLocation (current_block, GetLocation ($1)); } orderings { @@ -7683,13 +7416,6 @@ void StoreModifierLocation (object token, Location loc) mod_locations.Add (Tuple.Create ((Modifiers) token, loc)); } -List> GetModifierLocations () -{ - var result = mod_locations; - mod_locations = null; - return result; -} - [System.Diagnostics.Conditional ("FULL_AST")] void PushLocation (Location loc) { @@ -7890,8 +7616,7 @@ void start_anonymous (bool isLambda, ParametersCompiled parameters, bool isAsync current_anonymous_method = new AnonymousMethodExpression (loc); } - current_anonymous_method.IsAsync = isAsync; - + async_block = isAsync; // Force the next block to be created as a ToplevelBlock parsing_anonymous_method = true; @@ -8330,13 +8055,7 @@ static string GetTokenName (int token) return ";"; case Token.TILDE: return "~"; - case Token.WHEN: - return "when"; - case Token.INTERPOLATED_STRING_END: - return "}"; - case Token.INTERPOLATED_STRING: - return "${"; - + case Token.PLUS: case Token.UMINUS: case Token.MINUS: diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-tokenizer.cs similarity index 89% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-tokenizer.cs index 3ce4b4c01..6f8ed3152 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/cs-tokenizer.cs @@ -11,6 +11,7 @@ // Copyright 2004-2008 Novell, Inc // Copyright 2011 Xamarin, Inc (http://www.xamarin.com) // + using System; using System.Text; using System.Collections.Generic; @@ -18,7 +19,7 @@ using System.Diagnostics; using System.Collections; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // This class has to be used by parser only, it reuses token @@ -69,7 +70,7 @@ class KeywordEntry public KeywordEntry Next; public readonly char[] Value; - public KeywordEntry (string value,T token) + public KeywordEntry (string value, T token) { this.Value = value.ToCharArray (); this.Token = token; @@ -186,7 +187,6 @@ public enum PreprocessorDirective readonly SeekableStreamReader reader; readonly CompilationSourceFile source_file; - public CompilationSourceFile SourceFile { get { return source_file; } } readonly CompilerContext context; readonly Report Report; @@ -232,16 +232,11 @@ public enum PreprocessorDirective // namespace yet // public int parsing_declaration; + public bool parsing_attribute_section; public bool parsing_modifiers; - public bool parsing_catch_when; - - int parsing_string_interpolation; - - public bool parsing_interpolation_format; - // // The special characters to inject on streams to run the unit parser // in the special expression mode. Using private characters from @@ -309,9 +304,16 @@ public enum PreprocessorDirective static readonly char[] line_default = "default".ToCharArray (); static readonly char[] simple_whitespaces = new char[] { ' ', '\t' }; - bool startsLine = true; - internal SpecialsBag sbag; + public int Column { + get { + return col; + } + set { + col = value; + } + } + public bool PropertyParsing { get { return handle_get_set; } set { handle_get_set = value; } @@ -341,7 +343,7 @@ public XmlCommentState doc_state { // // This is used to trigger completion generation on the parser public bool CompleteOnEOF; - + void AddEscapedIdentifier (Location loc) { if (escaped_identifiers == null) @@ -365,9 +367,9 @@ public bool IsEscapedIdentifier (ATypeNameExpression name) // Pre-processor // const int TAKING = 1; - const int ELSE_SEEN = 4; + const int ELSE_SEEN = 4; const int PARENT_TAKING = 8; - const int REGION = 16; + const int REGION = 16; // // pre-processor if stack state: @@ -393,15 +395,6 @@ public int Line { } } - public int Column { - get { - return col; - } - set { - col = value; - } - } - // // This is used when the tokenizer needs to save // the current position as it needs to do some parsing @@ -410,8 +403,7 @@ public int Column { // Stack position_stack = new Stack (2); - class Position - { + class Position { public int position; public int line; public int ref_line; @@ -493,14 +485,14 @@ public void PopPosition () public void DiscardPosition () { position_stack.Pop (); - } + } static void AddKeyword (string kw, int token) { keyword_strings.Add (kw); AddKeyword (keywords, kw, token); -} + } static void AddPreprocessorKeyword (string kw, PreprocessorDirective directive) { @@ -644,9 +636,6 @@ static Tokenizer () AddKeyword ("async", Token.ASYNC); AddKeyword ("await", Token.AWAIT); - // Contextual filter catch keyword - AddKeyword ("when", Token.WHEN); - keywords_preprocessor = new KeywordEntry[10][]; AddPreprocessorKeyword ("region", PreprocessorDirective.Region); @@ -720,10 +709,6 @@ int GetKeyword (char[] id, int id_len) res = Token.DEFAULT_COLON; } break; - case Token.WHEN: - if (current_token != Token.CATCH && !parsing_catch_when) - res = -1; - break; case Token.WHERE: if (!(handle_where && current_token != Token.COLON) && !query_parsing) res = -1; @@ -895,6 +880,7 @@ int GetKeyword (char[] id, int id_len) break; } + return res; } @@ -1254,9 +1240,7 @@ public int peek_token () int the_token; PushPosition (); - sbag.Suppress = true; the_token = token (); - sbag.Suppress = false; PopPosition (); return the_token; @@ -1709,7 +1693,6 @@ int is_number (int c, bool dotLead) #endif number_pos = 0; var loc = Location; - bool hasLeadingDot = c == '.'; if (!dotLead){ if (c == '0'){ @@ -1744,6 +1727,7 @@ int is_number (int c, bool dotLead) putback ('.'); number_pos--; val = res = adjust_int (-1, loc); + #if FULL_AST res.ParsedValue = reader.ReadChars (read_start, reader.Position - 1); #endif @@ -1793,6 +1777,7 @@ int is_number (int c, bool dotLead) } val = res; + #if FULL_AST var chars = reader.ReadChars (read_start, reader.Position - (type == TypeCode.Empty && c > 0 ? 1 : 0)); if (chars[chars.Length - 1] == '\r') @@ -1938,19 +1923,17 @@ int get_char () if (x == '\r') { if (peek_char () == '\n') { putback_char = -1; - advance_line (SpecialsBag.NewLine.Windows); - } else { - advance_line (SpecialsBag.NewLine.Unix); } x = '\n'; + advance_line (); } else if (x == '\n') { - advance_line (SpecialsBag.NewLine.Unix); + advance_line (); } else { col++; } } else if (x >= UnicodeLS && x <= UnicodePS) { - advance_line (SpecialsBag.NewLine.Unix); + advance_line (); } else { col++; } @@ -1958,16 +1941,12 @@ int get_char () return x; } - bool recordNewLine = true; - void advance_line (SpecialsBag.NewLine newLine) + void advance_line () { - if (recordNewLine) - sbag.AddNewLine (line, col, newLine); line++; ref_line++; previous_col = col; col = 0; - startsLine = true; } int peek_char () @@ -2024,24 +2003,16 @@ public int token () } int TokenizePreprocessorKeyword (out int c) - { - int startCol, endLine, endCol; - return TokenizePreprocessorIdentifier (out c, out startCol, out endLine, out endCol); - } - - int TokenizePreprocessorIdentifier (out int c, out int startCol, out int endLine, out int endCol) { // skip over white space do { - endLine = line; - endCol = col; c = get_char (); } while (c == ' ' || c == '\t'); - startCol = col; + + int pos = 0; while (c != -1 && c >= 'a' && c <= 'z') { id_builder[pos++] = (char) c; - endCol = col + 1; c = get_char (); if (c == '\\') { int peek = peek_char (); @@ -2063,27 +2034,23 @@ int TokenizePreprocessorIdentifier (out int c, out int startCol, out int endLine PreprocessorDirective get_cmd_arg (out string arg) { - int c; - int startLine = line, startCol = col; + int c; tokens_seen = false; arg = ""; - - int startCol2, endLine, endCol; - var cmd = GetPreprocessorDirective (id_builder, TokenizePreprocessorIdentifier (out c, out startCol2, out endLine, out endCol)); - - if ((cmd & PreprocessorDirective.CustomArgumentsParsing) != 0) { - if (position_stack.Count == 0) - sbag.AddPreProcessorDirective (startLine, startCol, line, col, cmd, null); + + var cmd = GetPreprocessorDirective (id_builder, TokenizePreprocessorKeyword (out c)); + + if ((cmd & PreprocessorDirective.CustomArgumentsParsing) != 0) return cmd; - } - + // skip over white space - while (c == ' ' || c == '\t') { + while (c == ' ' || c == '\t') c = get_char (); - } + int has_identifier_argument = (int)(cmd & PreprocessorDirective.RequiresArgument); int pos = 0; + while (c != -1 && c != '\n' && c != UnicodeLS && c != UnicodePS) { if (c == '\\' && has_identifier_argument >= 0) { if (has_identifier_argument != 0) { @@ -2094,11 +2061,11 @@ PreprocessorDirective get_cmd_arg (out string arg) int surrogate; c = EscapeUnicode (c, out surrogate); if (surrogate != 0) { - if (is_identifier_part_character ((char)c)) { + if (is_identifier_part_character ((char) c)) { if (pos == value_builder.Length) Array.Resize (ref value_builder, pos * 2); - value_builder [pos++] = (char)c; + value_builder[pos++] = (char) c; } c = surrogate; } @@ -2114,10 +2081,7 @@ PreprocessorDirective get_cmd_arg (out string arg) ReadToEndOfLine (); break; } - - endLine = line; - endCol = col + 1; - + if (pos == value_builder.Length) Array.Resize (ref value_builder, pos * 2); @@ -2134,8 +2098,6 @@ PreprocessorDirective get_cmd_arg (out string arg) // Eat any trailing whitespaces arg = arg.Trim (simple_whitespaces); } - if (position_stack.Count == 0) - sbag.AddPreProcessorDirective (startLine, startCol, endLine, endCol, cmd, arg); return cmd; } @@ -2146,9 +2108,6 @@ PreprocessorDirective get_cmd_arg (out string arg) bool PreProcessLine () { Location loc = Location; - #if FULL_AST - var lineDirective = sbag.GetCurrentLineProcessorDirective(); - #endif int c; @@ -2163,7 +2122,7 @@ bool PreProcessLine () hidden_block_start = Location.Null; } - //ref_line = line; + ref_line = line; return true; } @@ -2193,9 +2152,6 @@ bool PreProcessLine () ReadToEndOfLine (); return new_line != 0; } - #if FULL_AST - lineDirective.LineNumber = new_line; - #endif c = get_char (); if (c == ' ') { @@ -2220,9 +2176,6 @@ bool PreProcessLine () string new_file_name = null; if (c == '"') { new_file_name = TokenizeFileName (ref c); - #if FULL_AST - lineDirective.FileName = new_file_name; - #endif // skip over white space while (c == ' ' || c == '\t') { @@ -2254,7 +2207,7 @@ bool PreProcessLine () hidden_block_start = Location.Null; } - //ref_line = new_line; + ref_line = new_line; return true; } @@ -2590,18 +2543,9 @@ void ReadSingleLineComment () { if (peek_char () != '/') Report.Warning (1696, 1, Location, "Single-line comment or end-of-line expected"); - if (position_stack.Count == 0) - sbag.StartComment (SpecialsBag.CommentType.Single, startsLine, line, col - 1); + // Read everything till the end of the line or file - int c; - do { - c = get_char (); - if (position_stack.Count == 0) - sbag.PushCommentChar (c); - var pc = peek_char (); - if ((pc == '\n' || pc == -1 || pc == UnicodeLS || pc == UnicodePS) && position_stack.Count == 0) - sbag.EndComment (line, col + 1); - } while (c != -1 && c != '\n' && c != UnicodeLS && c != UnicodePS); + ReadToEndOfLine (); } /// @@ -2610,19 +2554,9 @@ void ReadSingleLineComment () void ParsePragmaDirective () { int c; - int startCol, endLine, endCol; - int length = TokenizePreprocessorIdentifier (out c, out startCol, out endLine, out endCol); - #if FULL_AST - var pragmaDirective = sbag.GetPragmaPreProcessorDirective(); - if (pragmaDirective != null) - pragmaDirective.WarningColumn = startCol; - #endif + int length = TokenizePreprocessorKeyword (out c); if (length == pragma_warning.Length && IsTokenIdentifierEqual (pragma_warning)) { - length = TokenizePreprocessorIdentifier (out c, out startCol, out endLine, out endCol); - #if FULL_AST - if (pragmaDirective != null) - pragmaDirective.DisableRestoreColumn = startCol; - #endif + length = TokenizePreprocessorKeyword (out c); // // #pragma warning disable @@ -2630,10 +2564,6 @@ void ParsePragmaDirective () // if (length == pragma_warning_disable.Length) { bool disable = IsTokenIdentifierEqual (pragma_warning_disable); - #if FULL_AST - if (pragmaDirective != null) - pragmaDirective.Disalbe = disable; - #endif if (disable || IsTokenIdentifierEqual (pragma_warning_restore)) { // skip over white space while (c == ' ' || c == '\t') @@ -2659,16 +2589,9 @@ void ParsePragmaDirective () // int code; do { - var startLoc = loc; bool identifier = false; code = TokenizePragmaWarningIdentifier (ref c, ref identifier); if (code > 0) { - #if FULL_AST - var literal = new IntConstant(context.BuiltinTypes, code, startLoc); - if (pragmaDirective != null) - pragmaDirective.Codes.Add (literal); - // literal.ParsedValue = reader.ReadChars (read_start, reader.Position + 1); - #endif if (identifier) { // no-op, custom warnings cannot occur in mcs } else if (disable) { @@ -2692,7 +2615,6 @@ void ParsePragmaDirective () return; } - // // #pragma checksum // @@ -2966,7 +2888,6 @@ bool ParsePreprocessingDirective (bool caller_is_taking) ifstack.Push (flags | TAKING); return true; } - sbag.SkipIf (); ifstack.Push (flags); return false; @@ -3009,7 +2930,6 @@ bool ParsePreprocessingDirective (bool caller_is_taking) } if ((state & TAKING) != 0) { - sbag.SkipIf (); ifstack.Push (0); return false; } @@ -3019,7 +2939,6 @@ bool ParsePreprocessingDirective (bool caller_is_taking) return true; } - sbag.SkipIf (); ifstack.Push (state); return false; } @@ -3119,15 +3038,13 @@ bool ParsePreprocessingDirective (bool caller_is_taking) throw new NotImplementedException (directive.ToString ()); } - int consume_string (bool quoted) + private int consume_string (bool quoted) { int c; int pos = 0; Location start_location = Location; - if (quoted) { + if (quoted) start_location = start_location - 1; - recordNewLine = false; - } #if FULL_AST int reader_pos = reader.Position; @@ -3154,14 +3071,22 @@ int consume_string (bool quoted) continue; } - ILiteralConstant res = new StringLiteral (context.BuiltinTypes, CreateStringFromBuilder (pos), start_location); + string s; + if (pos == 0) + s = string.Empty; + else if (pos <= 4) + s = InternIdentifier (value_builder, pos); + else + s = new string (value_builder, 0, pos); + + ILiteralConstant res = new StringLiteral (context.BuiltinTypes, s, start_location); val = res; #if FULL_AST res.ParsedValue = quoted ? reader.ReadChars (reader_pos - 2, reader.Position - 1) : reader.ReadChars (reader_pos - 1, reader.Position); #endif - recordNewLine = true; + return Token.LITERAL; } @@ -3169,29 +3094,23 @@ int consume_string (bool quoted) if (!quoted) { Report.Error (1010, Location, "Newline in constant"); + advance_line (); // Don't add \r to string literal - if (pos > 1 && value_builder [pos - 1] == '\r') { - advance_line (SpecialsBag.NewLine.Windows); + if (pos > 1 && value_builder [pos - 1] == '\r') --pos; - } else { - advance_line (SpecialsBag.NewLine.Unix); - } val = new StringLiteral (context.BuiltinTypes, new string (value_builder, 0, pos), start_location); - recordNewLine = true; return Token.LITERAL; } - advance_line (SpecialsBag.NewLine.Unix); + advance_line (); } else if (c == '\\' && !quoted) { ++col; int surrogate; c = escape (c, out surrogate); - if (c == -1) { - recordNewLine = true; + if (c == -1) return Token.ERROR; - } if (surrogate != 0) { if (pos == value_builder.Length) Array.Resize (ref value_builder, pos * 2); @@ -3201,7 +3120,6 @@ int consume_string (bool quoted) } } else if (c == -1) { Report.Error (1039, Location, "Unterminated string literal"); - recordNewLine = true; return Token.EOF; } else { ++col; @@ -3212,7 +3130,6 @@ int consume_string (bool quoted) value_builder[pos++] = (char) c; } - recordNewLine = true; } private int consume_identifier (int s) @@ -3221,7 +3138,7 @@ private int consume_identifier (int s) if (doc_state == XmlCommentState.Allowed) doc_state = XmlCommentState.NotAllowed; - startsLine = false; + return res; } @@ -3299,15 +3216,7 @@ int consume_identifier (int c, bool quoted) } string s = InternIdentifier (id_builder, pos); -#if FULL_AST - if (quoted) { - val = ltb.Create ("@" + s, current_source, ref_line, column - 1); - } else { - val = ltb.Create (s, current_source, ref_line, column); - } -#else val = ltb.Create (s, current_source, ref_line, column); -#endif if (quoted && parsing_attribute_section) AddEscapedIdentifier (((LocatedToken) val).Location); @@ -3320,7 +3229,7 @@ string InternIdentifier (char[] charBuffer, int length) // Keep identifiers in an array of hashtables to avoid needless // allocations // - var identifiers_group = identifiers [length]; + var identifiers_group = identifiers[length]; string s; if (identifiers_group != null) { if (identifiers_group.TryGetValue (charBuffer, out s)) { @@ -3331,7 +3240,7 @@ string InternIdentifier (char[] charBuffer, int length) // corlib compilation peaks at 1000 and System.Core at 150 int capacity = length > 20 ? 10 : 100; identifiers_group = new Dictionary (capacity, new IdentifiersComparer (length)); - identifiers [length] = identifiers_group; + identifiers[length] = identifiers_group; } char[] chars = new char[length]; @@ -3339,16 +3248,11 @@ string InternIdentifier (char[] charBuffer, int length) s = new string (charBuffer, 0, length); identifiers_group.Add (chars, s); - return s; } public int xtoken () { - if (parsing_interpolation_format) { - return TokenizeInterpolationFormat (); - } - int d, c; // Whether we have seen comments on the current line @@ -3386,15 +3290,6 @@ public int xtoken () val = ltb.Create (current_source, ref_line, col); return Token.OPEN_BRACE; case '}': - if (parsing_string_interpolation > 0) { - if (peek_char () != '}') { - --parsing_string_interpolation; - return TokenizeInterpolatedString (); - } - - continue; - } - val = ltb.Create (current_source, ref_line, col); return Token.CLOSE_BRACE; case '[': @@ -3504,7 +3399,7 @@ public int xtoken () val = ltb.Create (current_source, ref_line, col); d = peek_char (); - if (d == '=') { + if (d == '='){ get_char (); return Token.OP_GE; } @@ -3566,11 +3461,11 @@ public int xtoken () case '=': val = ltb.Create (current_source, ref_line, col); d = peek_char (); - if (d == '=') { + if (d == '='){ get_char (); return Token.OP_EQ; } - if (d == '>') { + if (d == '>'){ get_char (); return Token.ARROW; } @@ -3580,11 +3475,11 @@ public int xtoken () case '&': val = ltb.Create (current_source, ref_line, col); d = peek_char (); - if (d == '&') { + if (d == '&'){ get_char (); return Token.OP_AND; } - if (d == '=') { + if (d == '='){ get_char (); return Token.OP_AND_ASSIGN; } @@ -3593,11 +3488,11 @@ public int xtoken () case '|': val = ltb.Create (current_source, ref_line, col); d = peek_char (); - if (d == '|') { + if (d == '|'){ get_char (); return Token.OP_OR; } - if (d == '=') { + if (d == '='){ get_char (); return Token.OP_OR_ASSIGN; } @@ -3618,21 +3513,15 @@ public int xtoken () get_char (); return Token.OP_DIV_ASSIGN; } + // Handle double-slash comments. if (d == '/'){ - if (parsing_string_interpolation > 0) { - Report.Error (8077, Location, "A single-line comment may not be used in an interpolated string"); - goto case '}'; - } - get_char (); if (doc_processing) { if (peek_char () == '/') { get_char (); // Don't allow ////. if ((d = peek_char ()) != '/') { - if (position_stack.Count == 0) - sbag.PushCommentChar (d); if (doc_state == XmlCommentState.Allowed) handle_one_line_xml_comment (); else if (doc_state == XmlCommentState.NotAllowed) @@ -3642,48 +3531,23 @@ public int xtoken () if (xml_comment_buffer.Length > 0) doc_state = XmlCommentState.NotAllowed; } - } else { - bool isDoc = peek_char () == '/'; - if (position_stack.Count == 0) - sbag.StartComment (isDoc ? SpecialsBag.CommentType.Documentation : SpecialsBag.CommentType.Single, startsLine, line, col - 1); - if (isDoc) - get_char (); - } - - d = peek_char (); - int endLine = line, endCol = col; - while ((d = get_char ()) != -1 && (d != '\n') && d != '\r' && d != UnicodePS && d != UnicodeLS) { - if (position_stack.Count == 0) - sbag.PushCommentChar (d); - endLine = line; - endCol = col; } - if (position_stack.Count == 0) - sbag.EndComment (endLine, endCol + 1); + + ReadToEndOfLine (); + any_token_seen |= tokens_seen; tokens_seen = false; comments_seen = false; continue; } else if (d == '*'){ - if (position_stack.Count == 0) { - sbag.StartComment (SpecialsBag.CommentType.Multi, startsLine, line, col); - recordNewLine = false; - } get_char (); bool docAppend = false; if (doc_processing && peek_char () == '*') { - int ch = get_char (); + get_char (); // But when it is /**/, just do nothing. if (peek_char () == '/') { - ch = get_char (); - if (position_stack.Count == 0) { - recordNewLine = true; - sbag.EndComment (line, col + 1); - } + get_char (); continue; - } else { - if (position_stack.Count == 0) - sbag.PushCommentChar (ch); } if (doc_state == XmlCommentState.Allowed) docAppend = true; @@ -3701,15 +3565,8 @@ public int xtoken () while ((d = get_char ()) != -1){ if (d == '*' && peek_char () == '/'){ get_char (); - if (position_stack.Count == 0) { - recordNewLine = true; - sbag.EndComment (line, col + 1); - } comments_seen = true; break; - } else { - if (position_stack.Count == 0) - sbag.PushCommentChar (d); } if (docAppend) xml_comment_buffer.Append ((char) d); @@ -3724,7 +3581,6 @@ public int xtoken () comments_seen = false; } } - if (!comments_seen) Report.Error (1035, Location, "End-of-file found, '*/' expected"); @@ -3783,14 +3639,13 @@ public int xtoken () case '#': if (tokens_seen || comments_seen) { - Eror_WrongPreprocessorLocation(); + Eror_WrongPreprocessorLocation (); return Token.ERROR; } - - if (ParsePreprocessingDirective(true)) + + if (ParsePreprocessingDirective (true)) continue; - sbag.StartComment(SpecialsBag.CommentType.InactiveCode, false, line, 1); - recordNewLine = false; + bool directive_expected = false; while ((c = get_char ()) != -1) { if (col == 1) { @@ -3801,45 +3656,27 @@ public int xtoken () // Eror_WrongPreprocessorLocation (); // return Token.ERROR; // } - if (c != '#') - sbag.PushCommentChar (c); continue; } - if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\v' || c == UnicodeLS || c == UnicodePS) { - sbag.PushCommentChar (c); + if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\v' || c == UnicodeLS || c == UnicodePS) continue; - } if (c == '#') { - var oldNL = recordNewLine; - recordNewLine = true; - var continueNormalLexing = ParsePreprocessingDirective(false); - recordNewLine = oldNL; - if (continueNormalLexing) + if (ParsePreprocessingDirective (false)) break; - sbag.StartComment(SpecialsBag.CommentType.InactiveCode, false, line, 1); } - sbag.PushCommentChar (c); directive_expected = false; } - recordNewLine = true; - sbag.EndComment (line, col); + if (c != -1) { tokens_seen = false; continue; } return Token.EOF; - + case '"': - if (parsing_string_interpolation > 0) { - parsing_string_interpolation = 0; - Report.Error (8076, Location, "Missing close delimiter `}' for interpolated expression"); - val = null; - return Token.INTERPOLATED_STRING_END; - } - return consume_string (false); case '\'': @@ -3859,13 +3696,6 @@ public int xtoken () Report.Error (1646, Location, "Keyword, identifier, or string expected after verbatim specifier: @"); return Token.ERROR; - case '$': - if (peek_char () == '"') { - get_char (); - return TokenizeInterpolatedString (); - } - - break; case EvalStatementParserCharacter: return Token.EVAL_STATEMENT_PARSER; case EvalCompilationUnitParserCharacter: @@ -3991,134 +3821,15 @@ int TokenizeLessThan () return Token.OP_LT; } - int TokenizeInterpolatedString () - { - int pos = 0; - var start_location = Location; - - while (true) { - var ch = get_char (); - switch (ch) { - case '"': - val = new StringLiteral (context.BuiltinTypes, CreateStringFromBuilder (pos), start_location); - return Token.INTERPOLATED_STRING_END; - case '{': - if (peek_char () == '{') { - value_builder [pos++] = (char)ch; - get_char (); - break; - } - - ++parsing_string_interpolation; - val = new StringLiteral (context.BuiltinTypes, CreateStringFromBuilder (pos), start_location); - return Token.INTERPOLATED_STRING; - case '\\': - ++col; - int surrogate; - ch = escape (ch, out surrogate); - if (ch == -1) - return Token.ERROR; - - if (ch == '{' || ch == '}') { - Report.Error (8087, Location, "A `{0}' character may only be escaped by doubling `{0}{0}' in an interpolated string", ((char) ch).ToString ()); - } - - if (surrogate != 0) { - if (pos == value_builder.Length) - Array.Resize (ref value_builder, pos * 2); - - value_builder [pos++] = (char)ch; - ch = surrogate; - } - - break; - case -1: - return Token.EOF; - } - - ++col; - value_builder[pos++] = (char) ch; - } - } - - int TokenizeInterpolationFormat () - { - int pos = 0; - int braces = 0; - while (true) { - var ch = get_char (); - switch (ch) { - case '{': - ++braces; - break; - case '}': - if (braces == 0) { - putback_char = ch; - if (pos == 0) { - Report.Error (8089, Location, "Empty interpolated expression format specifier"); - } else if (Array.IndexOf (simple_whitespaces, value_builder [pos - 1]) >= 0) { - Report.Error (8088, Location, "A interpolated expression format specifier may not contain trailing whitespace"); - } - - val = CreateStringFromBuilder (pos); - return Token.LITERAL; - } - - --braces; - break; - case '\\': - ++col; - int surrogate; - ch = escape (ch, out surrogate); - if (ch == -1) - return Token.ERROR; - - if (ch == '{' || ch == '}') { - Report.Error (8087, Location, "A `{0}' character may only be escaped by doubling `{0}{0}' in an interpolated string", ((char) ch).ToString ()); - } - - if (surrogate != 0) { - if (pos == value_builder.Length) - Array.Resize (ref value_builder, pos * 2); - - value_builder [pos++] = (char)ch; - ch = surrogate; - } - - break; - case -1: - return Token.EOF; - } - - ++col; - value_builder[pos++] = (char) ch; - } - } - - string CreateStringFromBuilder (int pos) - { - if (pos == 0) - return string.Empty; - if (pos <= 4) - return InternIdentifier (value_builder, pos); - - return new string (value_builder, 0, pos); - } - // // Handles one line xml comment // private void handle_one_line_xml_comment () { int c; - while ((c = peek_char ()) == ' ') { - if (position_stack.Count == 0) - sbag.PushCommentChar (c); + while ((c = peek_char ()) == ' ') get_char (); // skip heading whitespaces. - } while ((c = peek_char ()) != -1 && c != '\n' && c != '\r') { - if (position_stack.Count == 0) - sbag.PushCommentChar (c); xml_comment_buffer.Append ((char) get_char ()); } if (c == '\r' || c == '\n') diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/decl.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/decl.cs index e54b47c9a..61eba3aaf 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/decl.cs @@ -32,7 +32,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { // // Better name would be DottenName @@ -214,7 +214,7 @@ public SimpleMemberName (string name, Location loc) /// of Name, Location and Modifier flags, and handling Attributes. /// [System.Diagnostics.DebuggerDisplay ("{GetSignatureForError()}")] - public abstract class MemberCore : Attributable, IMemberContext, IMemberDefinition + public abstract partial class MemberCore : Attributable, IMemberContext, IMemberDefinition { string IMemberDefinition.Name { get { @@ -255,7 +255,7 @@ public virtual ModuleContainer Module { /// Location where this declaration happens /// public Location Location { - get { return member_name.Location; } + get { return member_name != null ? member_name.Location : new Location(); } } /// @@ -269,6 +269,32 @@ public Location Location { /// public abstract string DocCommentHeader { get; } + /// + /// Gets the type of the file. + /// + /// The type of the file. + public virtual SourceFileType FileType { + get { + return member_name.Location.SourceFile != null ? member_name.Location.SourceFile.FileType : SourceFileType.CSharp; + } + } + + /// + /// Gets whether this is an extended syntax PlayScript file. + /// + /// The type of the file. + public virtual bool PsExtended { + get { + // member_name will be null if we are running in the repl; + // TODO: Determine if REPL should allow Extended PlayScript language, + // for now to run Tamarin tests, only ActionScript + if (member_name != null) + return member_name.Location.SourceFile != null ? member_name.Location.SourceFile.PsExtended : false; + else + return false; + } + } + [Flags] public enum Flags { Obsolete_Undetected = 1, // Obsolete attribute has not been detected yet @@ -316,6 +342,18 @@ public virtual void Accept (StructuralVisitor visitor) visitor.Visit (this); } + public bool? CheckAllowDynamic () + { + if (OptAttributes != null) { + if (OptAttributes.Contains (Module.PredefinedAttributes.AsAllowDynamicAttribute)) { + return true; + } else if (OptAttributes.Contains (Module.PredefinedAttributes.AsForbidDynamicAttribute)) { + return false; + } + } + return null; + } + protected bool CheckAbstractAndExtern (bool has_block) { if (Parent.PartialContainer.Kind == MemberKind.Interface) @@ -691,7 +729,11 @@ public virtual FullNamedExpression LookupNamespaceAlias (string name) public virtual FullNamedExpression LookupNamespaceOrType (string name, int arity, LookupMode mode, Location loc) { - return Parent.LookupNamespaceOrType (name, arity, mode, loc); + if (Parent != null) { + return Parent.LookupNamespaceOrType (name, arity, mode, loc); + } else { + return null; + } } /// @@ -854,6 +896,11 @@ public virtual void WriteDebugSymbol (MonoSymbolFile file) { } + public void RenameMember(MemberName newName) + { + member_name = newName; + } + #region IMemberContext Members public virtual CompilerContext Compiler { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/delegate.cs similarity index 86% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/delegate.cs index 0d29b7a59..9ce2a989d 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/delegate.cs @@ -23,7 +23,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { // // Delegate container implementation @@ -68,6 +68,103 @@ public Delegate (TypeContainer parent, FullNamedExpression type, Modifiers mod_f spec = new TypeSpec (Kind, null, this, null, ModFlags | Modifiers.SEALED); } + public static TypeSpec CreateDelegateType (ResolveContext rc, AParametersCollection parameters, TypeSpec returnType, Location loc) + { + Namespace type_ns; + string paramsSuffix = ""; + TypeSpec[] paramTypes = parameters.Types; + type_ns = rc.Module.GlobalRootNamespace.GetNamespace ("System", true); + + // Do we have a PARAMS argument as the final argument? (Only supported in PlayScript) + if (rc.FileType == SourceFileType.PlayScript && parameters.FixedParameters.Length > 0 && + (parameters.FixedParameters [parameters.FixedParameters.Length - 1].ModFlags & Parameter.Modifier.PARAMS) != 0) { + paramsSuffix = "P"; + TypeSpec[] newTypes = new TypeSpec[paramTypes.Length - 1]; + Array.Copy (paramTypes, 0, newTypes, 0, newTypes.Length); + paramTypes = newTypes; + type_ns = rc.Module.GlobalRootNamespace.GetNamespace ("PlayScript", true); + } + + if (type_ns == null) { + return null; + } + + if (returnType == rc.BuiltinTypes.Void) { + var actArgs = paramTypes; + var actionType = type_ns.LookupAsType (rc.Module, "Action" + paramsSuffix, actArgs.Length, LookupMode.Normal, loc); + if (actionType == null) { + return rc.BuiltinTypes.Delegate; + } + var actionSpec = actionType.ResolveAsType(rc); + if (actionSpec == null) { + return null; + } + if (actArgs.Length == 0) + return actionSpec; + else + return actionSpec.MakeGenericType(rc, actArgs); + } else { + TypeSpec[] funcArgs = new TypeSpec[paramTypes.Length + 1]; + paramTypes.CopyTo(funcArgs, 0); + funcArgs[paramTypes.Length] = returnType; + var funcSpec = type_ns.LookupAsType (rc.Module, "Func" + paramsSuffix, funcArgs.Length, LookupMode.Normal, loc).ResolveAsType(rc); + if (funcSpec == null) { + return rc.BuiltinTypes.Delegate; + } + return funcSpec.MakeGenericType(rc, funcArgs); + } + } + + public static FullNamedExpression CreateDelegateTypeExpression (BuiltinTypes builtinTypes, ParametersCompiled parameters, FullNamedExpression retType, Location loc){ + + // Setup + bool hasParams = parameters != null && parameters.Count > 0; + int paramCount = hasParams ? parameters.Count : 0; + string ns = "System"; + string paramSuffix = ""; + + // If last parameter is a PARAMS paramter, use the params versions of the delegate types + if (hasParams && (parameters.FixedParameters [parameters.FixedParameters.Length - 1].ModFlags & Parameter.Modifier.PARAMS) != 0) { + ns = "PlayScript"; + paramSuffix = "P"; + paramCount--; + } + + // Check if this is Func or Action + bool hasRetType = !(retType is TypeExpression && ((TypeExpression)retType).Type == builtinTypes.Void); + int typeParamCount = paramCount; + if (hasRetType) + typeParamCount++; + + // Create arguments list + TypeArguments typeArgs = null; + if (typeParamCount > 0) { + var typeArgArray = new FullNamedExpression[typeParamCount]; + for (var i = 0; i < typeParamCount; i++) { + if (i < paramCount) { + var param = parameters.FixedParameters[i] as Parameter; + typeArgArray[i] = param.TypeExpression; + } else { + typeArgArray[i] = retType; + } + } + typeArgs = new TypeArguments (typeArgArray); + } + + // Return the expression for the type we want + if (!hasRetType) { + return new MemberAccess(new SimpleName(ns, loc), "Action" + paramSuffix, typeArgs, loc); + } else { + return new MemberAccess(new SimpleName(ns, loc), "Func" + paramSuffix, typeArgs, loc); + } + } + + + public static TypeSpec CreateDelegateTypeFromMethodSpec (ResolveContext rc, MethodSpec ms, Location loc) + { + return CreateDelegateType (rc, ms.Parameters, ms.ReturnType, loc); + } + #region Properties public TypeSpec MemberType { get { @@ -92,6 +189,19 @@ public FullNamedExpression TypExpression { public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && Members != null && Members.Count > 0) { + foreach (var member in Members) { + if (visitor.Continue) + member.Accept (visitor); + } + } + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -313,11 +423,16 @@ public override void Emit () base.Emit (); if (ReturnType.Type != null) { - if (ReturnType.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + if (ReturnType.Type == Module.Compiler.BuiltinTypes.AsUntyped) { return_attributes = new ReturnParameter (this, InvokeBuilder.MethodBuilder, Location); + Module.PredefinedAttributes.AsUntypedAttribute.EmitAttribute (return_attributes.Builder); + } + + if (ReturnType.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + return_attributes = return_attributes ?? new ReturnParameter (this, InvokeBuilder.MethodBuilder, Location); Module.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder); } else if (ReturnType.Type.HasDynamicElement) { - return_attributes = new ReturnParameter (this, InvokeBuilder.MethodBuilder, Location); + return_attributes = return_attributes ?? new ReturnParameter (this, InvokeBuilder.MethodBuilder, Location); Module.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder, ReturnType.Type, Location); } @@ -419,7 +534,7 @@ public static bool IsTypeCovariant (ResolveContext rc, TypeSpec a, TypeSpec b) if (a.IsGenericParameter && b.IsGenericParameter) return a == b; - return Convert.ImplicitReferenceConversionExists (a, b); + return Convert.ImplicitReferenceConversionExists (a, b, null, false); } public static string FullDelegateDesc (MethodSpec invoke_method) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/doc.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/doc.cs index 8153807e4..8c5b8827d 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/doc.cs @@ -19,7 +19,7 @@ using System.Xml; using System.Linq; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // Implements XML documentation generation. @@ -293,6 +293,13 @@ static void HandleTypeParamRef (MemberCore mc, XmlElement node) FullNamedExpression ResolveMemberName (IMemberContext context, MemberName mn) { +// // PlayScript - use absolute namespace resolution, not relative +// bool absolute_ns = loc.SourceFile != null && loc.SourceFile.FileType == SourceFileType.PlayScript; + +// // FIXME: Default namespace lookups to C# resolution semantics (for now). Need a way to determine if PlayScript absolute +// // namespace lookups should be used here. +// bool absolute_ns = false; + if (mn.Left == null) return context.LookupNamespaceOrType (mn.Name, mn.Arity, LookupMode.Probing, Location.Null); @@ -722,6 +729,12 @@ public FullNamedExpression LookupNamespaceAlias (string name) { throw new NotImplementedException (); } + + public SourceFileType FileType { + get { + return host.Location.SourceFile != null ? host.Location.SourceFile.FileType : SourceFileType.CSharp; + } + } } class DocumentationParameter diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/driver.cs similarity index 82% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/driver.cs index dd7261106..f4793083b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/driver.cs @@ -21,8 +21,11 @@ using System.Globalization; using System.Diagnostics; using System.Threading; - -namespace ICSharpCode.NRefactory.MonoCSharp +//using ICSharpCode.NRefactory.MonoCSharp; +//using Linq = ICSharpCode.NRefactory.MonoCSharp.Linq; +using Mono.PlayScript; + +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// The compiler driver. @@ -57,15 +60,28 @@ void tokenize_file (SourceFile sourceFile, ModuleContainer module, ParserSession SeekableStreamReader reader = new SeekableStreamReader (input, ctx.Settings.Encoding); var file = new CompilationSourceFile (module, sourceFile); - Tokenizer lexer = new Tokenizer (reader, file, session, ctx.Report); - int token, tokens = 0, errors = 0; + if (sourceFile.FileType == SourceFileType.CSharp) { + Tokenizer lexer = new Tokenizer (reader, file, session, ctx.Report); + int token, tokens = 0, errors = 0; - while ((token = lexer.token ()) != Token.EOF){ - tokens++; - if (token == Token.ERROR) - errors++; + while ((token = lexer.token ()) != Token.EOF){ + tokens++; + if (token == Token.ERROR) + errors++; + } + Console.WriteLine ("Tokenized: " + tokens + " found " + errors + " errors"); + } else { + Mono.PlayScript.Tokenizer lexer = new Mono.PlayScript.Tokenizer (reader, file, session, ctx.Report); + lexer.ParsingPlayScript = sourceFile.PsExtended; + int token, tokens = 0, errors = 0; + + while ((token = lexer.token ()) != Mono.PlayScript.Token.EOF){ + tokens++; + if (token == Mono.PlayScript.Token.ERROR) + errors++; + } + Console.WriteLine ("Tokenized: " + tokens + " found " + errors + " errors"); } - Console.WriteLine ("Tokenized: " + tokens + " found " + errors + " errors"); } return; @@ -80,15 +96,26 @@ void Parse (ModuleContainer module) var session = new ParserSession { UseJayGlobalArrays = true, - LocatedTokens = new LocatedToken[15000] + LocatedTokens = new LocatedToken[15000], + AsLocatedTokens = new Mono.PlayScript.LocatedToken[15000] }; + bool has_playscript_files = false; + for (int i = 0; i < sources.Count; ++i) { if (tokenize_only) { tokenize_file (sources[i], module, session); } else { Parse (sources[i], module, session, Report); } + if (sources[i].FileType == SourceFileType.PlayScript) { + has_playscript_files = true; + } + } + + // PlayScript needs to add generated code after parsing. + if (has_playscript_files) { + CodeGenerator.GenerateCode(module, session, Report); } } @@ -161,12 +188,28 @@ public void Parse (SourceFile file, ModuleContainer module, ParserSession sessio input.Close (); } - public static CSharpParser Parse (SeekableStreamReader reader, SourceFile sourceFile, ModuleContainer module, ParserSession session, Report report, int lineModifier = 0, int colModifier = 0) + public static void Parse (SeekableStreamReader reader, SourceFile sourceFile, ModuleContainer module, ParserSession session, Report report) + { + var file = new CompilationSourceFile (module, sourceFile); + module.AddTypeContainer (file); + + if (sourceFile.FileType == SourceFileType.CSharp) { + CSharpParser parser = new CSharpParser (reader, file, report, session); + parser.parse (); + } else { + PlayScriptParser parser = new PlayScriptParser (reader, file, report, session); + parser.parsing_playscript = sourceFile.PsExtended; + parser.parse (); + } + } + + public static PlayScriptParser PsParse (SeekableStreamReader reader, SourceFile sourceFile, ModuleContainer module, ParserSession session, Report report, int lineModifier = 0, int colModifier = 0) { var file = new CompilationSourceFile (module, sourceFile); - module.AddTypeContainer(file); + module.AddTypeContainer (file); - CSharpParser parser = new CSharpParser (reader, file, report, session); + var parser = new PlayScriptParser (reader, file, report, session); + parser.parsing_playscript = sourceFile.PsExtended; parser.Lexer.Line += lineModifier; parser.Lexer.Column += colModifier; parser.Lexer.sbag = new SpecialsBag (); @@ -388,7 +431,7 @@ public bool Compile () assembly.Emit (); tr.Stop (TimeReporter.TimerType.EmitTotal); - if (Report.Errors > 0){ + if (Report.Errors > 0 && (settings.Target & Target.IsTextTarget) == 0) { return false; } @@ -400,8 +443,8 @@ public bool Compile () if (!settings.WriteMetadataOnly) assembly.EmbedResources (); tr.Stop (TimeReporter.TimerType.Resouces); - - if (Report.Errors > 0) + + if (Report.Errors > 0 && (settings.Target & Target.IsTextTarget) == 0) return false; assembly.Save (); @@ -427,8 +470,7 @@ public class CompilerCompilationUnit { // // This is the only public entry point // - public class CompilerCallableEntryPoint : MarshalByRefObject - { + public class CompilerCallableEntryPoint : MarshalByRefObject { public static bool InvokeCompiler (string [] args, TextWriter error) { try { @@ -471,5 +513,4 @@ public static void Reset (bool full_flag) TypeInfo.Reset (); } } - } diff --git a/ICSharpCode.NRefactory.PlayScript/Parser/mcs/dynamic.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/dynamic.cs new file mode 100644 index 000000000..b28e73106 --- /dev/null +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/dynamic.cs @@ -0,0 +1,1894 @@ +// +// dynamic.cs: support for dynamic expressions +// +// Authors: Marek Safar (marek.safar@gmail.com) +// +// Dual licensed under the terms of the MIT X11 or GNU GPL +// +// Copyright 2009 Novell, Inc +// Copyright 2011 Xamarin Inc. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using SLE = System.Linq.Expressions; + +#if NET_4_0 || MOBILE_DYNAMIC +using System.Dynamic; +#endif + +namespace ICSharpCode.NRefactory.MonoPlayScript +{ + // + // A copy of Microsoft.CSharp/Microsoft.CSharp.RuntimeBinder/CSharpBinderFlags.cs + // has to be kept in sync + // + [Flags] + public enum CSharpBinderFlags + { + None = 0, + CheckedContext = 1, + InvokeSimpleName = 1 << 1, + InvokeSpecialName = 1 << 2, + BinaryOperationLogical = 1 << 3, + ConvertExplicit = 1 << 4, + ConvertArrayIndex = 1 << 5, + ResultIndexed = 1 << 6, + ValueFromCompoundAssignment = 1 << 7, + ResultDiscarded = 1 << 8 + } + + [Flags] + public enum DynamicOperation + { + Binary = 1, + Convert = 1 << 1, + GetIndex = 1 << 2, + GetMember = 1 << 3, + Invoke = 1 << 4, + InvokeConstructor = 1 << 5, + InvokeMember = 1 << 6, + IsEvent = 1 << 7, + SetIndex = 1 << 8, + SetMember = 1 << 9, + Unary = 1 << 10 + } + + // + // Type expression with internal dynamic type symbol + // + class DynamicTypeExpr : TypeExpr + { + public DynamicTypeExpr (Location loc) + { + this.loc = loc; + } + + public override TypeSpec ResolveAsType (IMemberContext ec, bool allowUnboundTypeArguments) + { + eclass = ExprClass.Type; + type = ec.Module.Compiler.BuiltinTypes.Dynamic; + return type; + } + } + + #region Dynamic runtime binder expressions + + // + // Expression created from runtime dynamic object value by dynamic binder + // + public class RuntimeValueExpression : Expression, IDynamicAssign, IMemoryLocation + { +#if !NET_4_0 && !MOBILE_DYNAMIC + public class DynamicMetaObject + { + public TypeSpec RuntimeType; + public TypeSpec LimitType; + public SLE.Expression Expression; + } +#endif + + readonly DynamicMetaObject obj; + + public RuntimeValueExpression (DynamicMetaObject obj, TypeSpec type) + { + this.obj = obj; + this.type = type; + this.eclass = ExprClass.Variable; + } + + #region Properties + + public bool IsSuggestionOnly { get; set; } + + public DynamicMetaObject MetaObject { + get { return obj; } + } + + #endregion + + public void AddressOf (EmitContext ec, AddressOp mode) + { + throw new NotImplementedException (); + } + + public override bool ContainsEmitWithAwait () + { + throw new NotSupportedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new NotSupportedException (); + } + + protected override Expression DoResolve (ResolveContext ec) + { + return this; + } + + public override Expression DoResolveLValue (ResolveContext ec, Expression right_side) + { + return this; + } + + public override void Emit (EmitContext ec) + { + throw new NotImplementedException (); + } + + #region IAssignMethod Members + + public void Emit (EmitContext ec, bool leave_copy) + { + throw new NotImplementedException (); + } + + public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound) + { + throw new NotImplementedException (); + } + + #endregion + + public SLE.Expression MakeAssignExpression (BuilderContext ctx, Expression source) + { + return obj.Expression; + } + + public override SLE.Expression MakeExpression (BuilderContext ctx) + { +#if STATIC + return base.MakeExpression (ctx); +#else + +#if NET_4_0 || MOBILE_DYNAMIC + if (type.IsStruct && !obj.Expression.Type.IsValueType) + return SLE.Expression.Unbox (obj.Expression, type.GetMetaInfo ()); + + if (obj.Expression.NodeType == SLE.ExpressionType.Parameter) { + if (((SLE.ParameterExpression) obj.Expression).IsByRef) + return obj.Expression; + } + #endif + + return SLE.Expression.Convert (obj.Expression, type.GetMetaInfo ()); +#endif + } + } + + // + // Wraps runtime dynamic expression into expected type. Needed + // to satify expected type check by dynamic binder and no conversion + // is required (ResultDiscarded). + // + public class DynamicResultCast : ShimExpression + { + public DynamicResultCast (TypeSpec type, Expression expr) + : base (expr) + { + this.type = type; + } + + protected override Expression DoResolve (ResolveContext ec) + { + expr = expr.Resolve (ec); + eclass = ExprClass.Value; + return this; + } + +#if NET_4_0 || MOBILE_DYNAMIC + public override SLE.Expression MakeExpression (BuilderContext ctx) + { +#if STATIC + return base.MakeExpression (ctx); +#else + return SLE.Expression.Block (expr.MakeExpression (ctx), SLE.Expression.Default (type.GetMetaInfo ())); +#endif + } +#endif + } + + #endregion + + // + // Creates dynamic binder expression + // + interface IDynamicBinder + { + Expression CreateCallSiteBinder (ResolveContext ec, Arguments args); + } + + interface IDynamicCallSite + { + bool UseCallSite(ResolveContext rc, Arguments args); + Expression CreateCallSite(ResolveContext rc, Arguments args, bool isSet); + Expression InvokeCallSite(ResolveContext rc, Expression site, Arguments args, TypeSpec returnType, bool isStatement); + } + + // + // Extends standard assignment interface for expressions + // supported by dynamic resolver + // + interface IDynamicAssign : IAssignMethod + { + SLE.Expression MakeAssignExpression (BuilderContext ctx, Expression source); + } + + // + // Base dynamic expression statement creator + // + class DynamicExpressionStatement : ExpressionStatement + { + // + // Binder flag dynamic constant, the value is combination of + // flags known at resolve stage and flags known only at emit + // stage + // + protected class BinderFlags : EnumConstant + { + readonly DynamicExpressionStatement statement; + readonly CSharpBinderFlags flags; + + public BinderFlags (CSharpBinderFlags flags, DynamicExpressionStatement statement) + : base (statement.loc) + { + this.flags = flags; + this.statement = statement; + eclass = 0; + } + + protected override Expression DoResolve (ResolveContext ec) + { + Child = new IntConstant (ec.BuiltinTypes, (int) (flags | statement.flags), statement.loc); + + type = ec.Module.PredefinedTypes.GetBinderFlags(ec).Resolve (); + eclass = Child.eclass; + return this; + } + } + + readonly Arguments arguments; + protected IDynamicBinder binder; + protected Expression binder_expr; + + private bool isPlayScriptDynamicMode; + private bool isPlayScriptAotMode; + + // Used by BinderFlags + protected CSharpBinderFlags flags; + + TypeSpec binder_type; + TypeParameters context_mvars; + + protected bool useDelegateInvoke; + + public DynamicExpressionStatement (IDynamicBinder binder, Arguments args, Location loc) + { + this.binder = binder; + this.arguments = args; + this.loc = loc; + } + + public Arguments Arguments { + get { + return arguments; + } + } + + public override bool ContainsEmitWithAwait () + { + return arguments.ContainsEmitWithAwait (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + ec.Report.Error (1963, loc, "An expression tree cannot contain a dynamic operation"); + return null; + } + + protected override Expression DoResolve (ResolveContext rc) + { + if (DoResolveCore (rc)) + { + var dc = (binder as IDynamicCallSite); + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && (dc != null) && dc.UseCallSite(rc, arguments)) { + this.useDelegateInvoke = false; + arguments.CreateDynamicBinderArguments(rc); + binder_expr = dc.CreateCallSite(rc, arguments, false); + } else { + this.useDelegateInvoke = true; + binder_expr = binder.CreateCallSiteBinder (rc, arguments); + } + } + + return this; + } + + protected bool DoResolveCore (ResolveContext rc) + { + foreach (var arg in arguments) { + if (arg.Type == InternalType.VarOutType) { + // Should be special error message about dynamic dispatch + rc.Report.Error (8047, arg.Expr.Location, "Declaration expression cannot be used in this context"); + } + } + + if (rc.CurrentTypeParameters != null && rc.CurrentTypeParameters[0].IsMethodTypeParameter) + context_mvars = rc.CurrentTypeParameters; + + int errors = rc.Report.Errors; + var pt = rc.Module.PredefinedTypes; + + binder_type = pt.GetBinder (rc).Resolve (); + + isPlayScriptDynamicMode = pt.IsPlayScriptDynamicMode; + isPlayScriptAotMode = pt.IsPlayScriptAotMode; + + // NOTE: Use AsCallSite if in PlayScript AOT mode only. + if (isPlayScriptAotMode) { + pt.AsCallSite.Resolve (); + pt.AsCallSiteGeneric.Resolve (); + } else { + pt.CallSite.Resolve (); + pt.CallSiteGeneric.Resolve (); + } + + eclass = ExprClass.Value; + + if (type == null) + type = rc.FileType == SourceFileType.PlayScript ? rc.BuiltinTypes.AsUntyped : rc.BuiltinTypes.Dynamic; + + if (rc.Report.Errors == errors) + return true; + + if (isPlayScriptDynamicMode) { + rc.Report.Error (7027, loc, + "PlayScript dynamic operation cannot be compiled without `ascorlib.dll' assembly reference"); + } else { + rc.Report.Error (1969, loc, + "Dynamic operation cannot be compiled without `Microsoft.CSharp.dll' assembly reference"); + } + return false; + } + + public override void Emit (EmitContext ec) + { + EmitCall (ec, binder_expr, arguments, false); + } + + public override void EmitStatement (EmitContext ec) + { + EmitCall (ec, binder_expr, arguments, true); + } + + private bool IsValidPlayScriptAotType(TypeSpec t, bool is_invoke) + { + return (t.BuiltinType == BuiltinTypeSpec.Type.Object || + t.BuiltinType == BuiltinTypeSpec.Type.Int || // Specialize only on basic PlayScript types in AOT mode. + t.BuiltinType == BuiltinTypeSpec.Type.UInt || // (NOTE: We can still handle other types, but we box to Object). + t.BuiltinType == BuiltinTypeSpec.Type.Bool || + t.BuiltinType == BuiltinTypeSpec.Type.Double || + t.BuiltinType == BuiltinTypeSpec.Type.String) && + !is_invoke; + } + + protected void EmitCall (EmitContext ec, Expression binder, Arguments arguments, bool isStatement) + { + if (!useDelegateInvoke) { + EmitCallWithInvoke(ec, binder, arguments, isStatement); + } else { + EmitCallWithDelegate(ec, binder, arguments, isStatement); + } + } + + protected void EmitCallWithInvoke (EmitContext ec, Expression binder, Arguments arguments, bool isStatement) + { + var module = ec.Module; + + var site_container = ec.CreateDynamicSite (); + + var block = ec.MemberContext is MethodCore ? + ((MethodCore)ec.MemberContext).Block : + ((ec.MemberContext is AbstractPropertyEventMethod) ? ((AbstractPropertyEventMethod)ec.MemberContext).Block : null); + if (block == null) + throw new InvalidOperationException ("Must have block when creating block context!"); + BlockContext bc = new BlockContext (ec.MemberContext, block, ec.BuiltinTypes.Void); + + FieldExpr site_field_expr = null; + StatementExpression s = null; + + // create call site + var call_site = binder; + if (call_site != null) { + // resolve call site + call_site = call_site.Resolve(bc); + + // create field for call site + var site_type_decl = call_site.Type; + var field = site_container.CreateCallSiteField (new TypeExpression(site_type_decl, loc), loc); + if (field == null) { + throw new InvalidOperationException("Could not create call site field"); + } + + // ??? + bool inflate_using_mvar = context_mvars != null && ec.IsAnonymousStoreyMutateRequired; + + // ??? + TypeSpec gt; + if (inflate_using_mvar || context_mvars == null) { + gt = site_container.CurrentType; + } else { + gt = site_container.CurrentType.MakeGenericType (module, context_mvars.Types); + } + + // When site container already exists the inflated version has to be + // updated manually to contain newly created field + if (gt is InflatedTypeSpec && site_container.AnonymousMethodsCounter > 1) { + var tparams = gt.MemberDefinition.TypeParametersCount > 0 ? gt.MemberDefinition.TypeParameters : TypeParameterSpec.EmptyTypes; + var inflator = new TypeParameterInflator (module, gt, tparams, gt.TypeArguments); + gt.MemberCache.AddMember (field.InflateMember (inflator)); + } + + site_field_expr = new FieldExpr (MemberCache.GetMember (gt, field), loc); + + s = new StatementExpression (new SimpleAssign (site_field_expr, call_site)); + } + + + + using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { + if (s!= null && s.Resolve (bc)) { + Statement init = new If (new Binary (Binary.Operator.Equality, site_field_expr, new NullLiteral (loc)), s, loc); + init.Emit (ec); + } + + // remove dynamics from argument list + arguments.CastDynamicArgs(bc); + + IDynamicCallSite dynamicCallSite = (IDynamicCallSite)this.binder; + Expression target = dynamicCallSite.InvokeCallSite(bc, site_field_expr, arguments, type, isStatement); + if (target != null) + target = target.Resolve(bc); + + if (target != null) + { + var statement = target as ExpressionStatement; + if (isStatement && statement != null) + { + statement.EmitStatement(ec); + } + else + { + if (!isStatement && (target.Type != type)) { + // PlayScript: If doing an invoke, we have to cast the return type to the type expected by the expression.. + target = new Cast(new TypeExpression(type, loc), target, loc).Resolve (bc); + } + + target.Emit(ec); + } + } + } + + } + + protected void EmitCallWithDelegate (EmitContext ec, Expression binder, Arguments arguments, bool isStatement) + { + // + // This method generates all internal infrastructure for a dynamic call. The + // reason why it's quite complicated is the mixture of dynamic and anonymous + // methods. Dynamic itself requires a temporary class (ContainerX) and anonymous + // methods can generate temporary storey as well (AnonStorey). Handling MVAR + // type parameters rewrite is non-trivial in such case as there are various + // combinations possible therefore the mutator is not straightforward. Secondly + // we need to keep both MVAR(possibly VAR for anon storey) and type VAR to emit + // correct Site field type and its access from EmitContext. + // + + int dyn_args_count = arguments == null ? 0 : arguments.Count; + int default_args = isStatement ? 1 : 2; + var module = ec.Module; + + bool is_invoke = ((MemberAccess)((Invocation)binder).Exp).Name.StartsWith ("Invoke"); + + TypeSpec callSite; + TypeSpec callSiteGeneric; + + if (isPlayScriptAotMode) { + callSite = module.PredefinedTypes.AsCallSite.TypeSpec; + callSiteGeneric = module.PredefinedTypes.AsCallSiteGeneric.TypeSpec; + } else { + callSite = module.PredefinedTypes.CallSite.TypeSpec; + callSiteGeneric = module.PredefinedTypes.CallSiteGeneric.TypeSpec; + } + + bool has_ref_out_argument = false; + var targs = new TypeExpression[dyn_args_count + default_args]; + targs[0] = new TypeExpression (callSite, loc); + + TypeExpression[] targs_for_instance = null; + TypeParameterMutator mutator; + + var site_container = ec.CreateDynamicSite (); + + if (context_mvars != null) { + TypeParameters tparam; + TypeContainer sc = site_container; + do { + tparam = sc.CurrentTypeParameters; + sc = sc.Parent; + } while (tparam == null); + + mutator = new TypeParameterMutator (context_mvars, tparam); + + if (!ec.IsAnonymousStoreyMutateRequired) { + targs_for_instance = new TypeExpression[targs.Length]; + targs_for_instance[0] = targs[0]; + } + } else { + mutator = null; + } + + for (int i = 0; i < dyn_args_count; ++i) { + Argument a = arguments[i]; + if (a.ArgType == Argument.AType.Out || a.ArgType == Argument.AType.Ref) + has_ref_out_argument = true; + + var t = a.Type; + + // Convert any internal type like dynamic or null to object + if (t.Kind == MemberKind.InternalCompilerType) + t = ec.BuiltinTypes.Object; + + // PlayScript AOT mode - Convert all types to object if they are not basic AS types or this is an invocation. + if (isPlayScriptAotMode && !IsValidPlayScriptAotType (t, is_invoke) && !(a.Expr is NullConstant)) { // Always box to Object for invoke argument lists + t = ec.BuiltinTypes.Object; + arguments [i] = new Argument (new BoxedCast(a.Expr, ec.BuiltinTypes.Object)); + } + + if (targs_for_instance != null) + targs_for_instance[i + 1] = new TypeExpression (t, loc); + + if (mutator != null) + t = t.Mutate (mutator); + + targs[i + 1] = new TypeExpression (t, loc); + } + + // Always use "object" as return type in AOT mode. + var ret_type = type; + if (isPlayScriptAotMode && !isStatement && !IsValidPlayScriptAotType (ret_type, is_invoke)) { + ret_type = ec.BuiltinTypes.Object; + } + + TypeExpr del_type = null; + TypeExpr del_type_instance_access = null; + if (!has_ref_out_argument) { + string d_name = isStatement ? "Action" : "Func"; + + TypeSpec te = null; + Namespace type_ns = module.GlobalRootNamespace.GetNamespace ("System", true); + if (type_ns != null) { + te = type_ns.LookupType (module, d_name, dyn_args_count + default_args, LookupMode.Normal, loc); + } + + if (te != null) { + if (!isStatement) { + var t = ret_type; + if (t.Kind == MemberKind.InternalCompilerType) + t = ec.BuiltinTypes.Object; + + if (targs_for_instance != null) + targs_for_instance[targs_for_instance.Length - 1] = new TypeExpression (t, loc); + + if (mutator != null) + t = t.Mutate (mutator); + + targs[targs.Length - 1] = new TypeExpression (t, loc); + } + + del_type = new GenericTypeExpr (te, new TypeArguments (targs), loc); + if (targs_for_instance != null) + del_type_instance_access = new GenericTypeExpr (te, new TypeArguments (targs_for_instance), loc); + else + del_type_instance_access = del_type; + } + } + + // + // Create custom delegate when no appropriate predefined delegate has been found + // + Delegate d; + if (del_type == null) { + TypeSpec rt = isStatement ? ec.BuiltinTypes.Void : ret_type; + Parameter[] p = new Parameter[dyn_args_count + 1]; + p[0] = new Parameter (targs[0], "p0", Parameter.Modifier.NONE, null, loc); + + var site = ec.CreateDynamicSite (); + int index = site.Containers == null ? 0 : site.Containers.Count; + + if (mutator != null) + rt = mutator.Mutate (rt); + + for (int i = 1; i < dyn_args_count + 1; ++i) { + p[i] = new Parameter (targs[i], "p" + i.ToString ("X"), arguments[i - 1].Modifier, null, loc); + } + + d = new Delegate (site, new TypeExpression (rt, loc), + Modifiers.INTERNAL | Modifiers.COMPILER_GENERATED, + new MemberName ("Container" + index.ToString ("X")), + new ParametersCompiled (p), null); + + d.CreateContainer (); + d.DefineContainer (); + d.Define (); + d.PrepareEmit (); + + site.AddTypeContainer (d); + + // + // Add new container to inflated site container when the + // member cache already exists + // + if (site.CurrentType is InflatedTypeSpec && index > 0) + site.CurrentType.MemberCache.AddMember (d.CurrentType); + + del_type = new TypeExpression (d.CurrentType, loc); + if (targs_for_instance != null) { + del_type_instance_access = null; + } else { + del_type_instance_access = del_type; + } + } else { + d = null; + } + + var site_type_decl = new GenericTypeExpr (callSiteGeneric, new TypeArguments (del_type), loc); + var field = site_container.CreateCallSiteField (site_type_decl, loc); + if (field == null) + return; + + if (del_type_instance_access == null) { + var dt = d.CurrentType.DeclaringType.MakeGenericType (module, context_mvars.Types); + del_type_instance_access = new TypeExpression (MemberCache.GetMember (dt, d.CurrentType), loc); + } + + var instanceAccessExprType = new GenericTypeExpr (callSiteGeneric, new TypeArguments (del_type_instance_access), loc); + + if (instanceAccessExprType.ResolveAsType (ec.MemberContext) == null) + return; + + bool inflate_using_mvar = context_mvars != null && ec.IsAnonymousStoreyMutateRequired; + + TypeSpec gt; + if (inflate_using_mvar || context_mvars == null) { + gt = site_container.CurrentType; + } else { + gt = site_container.CurrentType.MakeGenericType (module, context_mvars.Types); + } + + // When site container already exists the inflated version has to be + // updated manually to contain newly created field + if (gt is InflatedTypeSpec && site_container.AnonymousMethodsCounter > 1) { + var tparams = gt.MemberDefinition.TypeParametersCount > 0 ? gt.MemberDefinition.TypeParameters : TypeParameterSpec.EmptyTypes; + var inflator = new TypeParameterInflator (module, gt, tparams, gt.TypeArguments); + gt.MemberCache.AddMember (field.InflateMember (inflator)); + } + + FieldExpr site_field_expr = new FieldExpr (MemberCache.GetMember (gt, field), loc); + + var block = ec.MemberContext is MethodCore ? + ((MethodCore)ec.MemberContext).Block : + ((ec.MemberContext is AbstractPropertyEventMethod) ? ((AbstractPropertyEventMethod)ec.MemberContext).Block : null); + if (block == null) + throw new InvalidOperationException ("Must have block when creating block context!"); + BlockContext bc = new BlockContext (ec.MemberContext, block, ec.BuiltinTypes.Void); + + Arguments args = new Arguments (1); + args.Add (new Argument (binder)); + StatementExpression s = new StatementExpression (new SimpleAssign (site_field_expr, new Invocation (new MemberAccess (instanceAccessExprType, "Create"), args))); + + using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { + if (s.Resolve (bc)) { + Statement init = new If (new Binary (Binary.Operator.Equality, site_field_expr, new NullLiteral (loc)), s, loc); + init.Emit (ec); + } + + args = new Arguments (1 + dyn_args_count); + args.Add (new Argument (site_field_expr)); + if (arguments != null) { + int arg_pos = 1; + foreach (Argument a in arguments) { + if (a is NamedArgument) { + // Name is not valid in this context + args.Add (new Argument (a.Expr, a.ArgType)); + } else { + args.Add (a); + } + + if (inflate_using_mvar && a.Type != targs[arg_pos].Type) + a.Expr.Type = targs[arg_pos].Type; + + ++arg_pos; + } + } + + Expression target; + if (isPlayScriptAotMode && !isStatement && type != ret_type) { + // PlayScript: If doing an invoke, we have to cast the return type to the type expected by the expression.. + target = new Cast(new TypeExpression(type, loc), new DelegateInvocation (new MemberAccess (site_field_expr, "Target", loc).Resolve (bc), args, false, loc), loc).Resolve (bc); + } else { + //target = new DelegateInvocation (new MemberAccess (site_field_expr, "Target", loc).Resolve (bc), args, loc).Resolve (bc); + target = new DelegateInvocation (new MemberAccess (site_field_expr, "Target", loc).Resolve (bc), args, false, loc).Resolve (bc); + } + + if (target != null) + target.Emit (ec); + } + } + + public override void FlowAnalysis (FlowAnalysisContext fc) + { + arguments.FlowAnalysis (fc); + } + + public static MemberAccess GetBinderNamespace (ResolveContext rc, Location loc) + { + if (rc.Module.PredefinedTypes.IsPlayScriptDynamicMode) { + return new MemberAccess ( + new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "PlayScript", loc), "RuntimeBinder", loc); + } else { + return new MemberAccess (new MemberAccess ( + new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "Microsoft", loc), "CSharp", loc), "RuntimeBinder", loc); + } + } + + protected MemberAccess GetBinder (string name, Location loc) + { + return new MemberAccess (new TypeExpression (binder_type, loc), name, loc); + } + } + + // + // Dynamic member access compound assignment for events + // + class DynamicEventCompoundAssign : ExpressionStatement + { + class IsEvent : DynamicExpressionStatement, IDynamicBinder + { + string name; + + public IsEvent (string name, Arguments args, Location loc) + : base (null, args, loc) + { + this.name = name; + binder = this; + } + + public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) + { + Statement.DynamicOps |= DynamicOperation.IsEvent; + + type = ec.BuiltinTypes.Bool; + + Arguments binder_args = new Arguments (3); + + binder_args.Add (new Argument (new BinderFlags (0, this))); + binder_args.Add (new Argument (new StringLiteral (ec.BuiltinTypes, name, loc))); + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + + return new Invocation (GetBinder ("IsEvent", loc), binder_args); + } + } + + Expression condition; + ExpressionStatement invoke, assign; + + public DynamicEventCompoundAssign (string name, Arguments args, ExpressionStatement assignment, ExpressionStatement invoke, Location loc) + { + condition = new IsEvent (name, args, loc); + this.invoke = invoke; + this.assign = assignment; + this.loc = loc; + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + return condition.CreateExpressionTree (ec); + } + + protected override Expression DoResolve (ResolveContext rc) + { + type = rc.BuiltinTypes.Dynamic; + eclass = ExprClass.Value; + condition = condition.Resolve (rc); + return this; + } + + public override void Emit (EmitContext ec) + { + var rc = new ResolveContext (ec.MemberContext); + var expr = new Conditional (new BooleanExpression (condition), invoke, assign, loc).Resolve (rc); + expr.Emit (ec); + } + + public override void EmitStatement (EmitContext ec) + { + var stmt = new If (condition, new StatementExpression (invoke), new StatementExpression (assign), loc); + using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { + stmt.Emit (ec); + } + } + + public override void FlowAnalysis (FlowAnalysisContext fc) + { + invoke.FlowAnalysis (fc); + } + } + + class DynamicConversion : DynamicExpressionStatement, IDynamicBinder + { + public DynamicConversion (TypeSpec targetType, CSharpBinderFlags flags, Arguments args, Location loc) + : base (null, args, loc) + { + type = targetType; + base.flags = flags; + base.binder = this; + } + + + protected override Expression DoResolve(ResolveContext rc) + { + // get expresion we're converting + var expr = this.Arguments[0].Expr; + + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && rc.Module.Compiler.Settings.NewDynamicRuntime_ConvertReturnType) { + // encourage dynamic expression to resolve to our type to avoid this conversion + expr = expr.ResolveWithTypeHint(rc, this.Type); + if (expr.Type == this.type) { + // skip dynamic conversions + return expr; + } + } + + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && rc.Module.Compiler.Settings.NewDynamicRuntime_Convert) { + var conversion = CreateDynamicConversion (rc, expr.Resolve (rc), this.Type); + if (conversion != null) + return conversion.Resolve (rc); + } + + return base.DoResolve(rc); + } + + #region IDynamicCallSite implementation + + public static Expression CreateDynamicConversion(ResolveContext rc, Expression expr, TypeSpec target_type) + { + var expr_type = expr.Type; + + // object can hold any value + if (target_type.BuiltinType == BuiltinTypeSpec.Type.Object) + return EmptyCast.Create(expr, target_type, rc); + + // casts between Object (Dynamic) and * (AsUntyped), and vice versa + if ((expr_type.IsDynamic || TypeManager.IsAsUndefined (expr_type, rc)) && target_type.IsDynamic) { + if (expr_type == target_type) + return expr; // nothing to do + + // in C#, allow dynamic to hold undefined + if (rc.FileType != SourceFileType.PlayScript) + return EmptyCast.Create (expr, target_type, rc).Resolve (rc); + + // cast from * (AsUntyped) to Object (Dynamic) + if ((expr.Type.IsAsUntyped || TypeManager.IsAsUndefined (expr.Type, rc)) && !target_type.IsAsUntyped) { + var args = new Arguments (1); + args.Add (new Argument (EmptyCast.RemoveDynamic (rc, expr))); + var function = new MemberAccess (new TypeExpression (rc.Module.PredefinedTypes.PsConverter.Resolve (), expr.Location), "ConvertToObj", expr.Location); + return new Invocation (function, args); + } + + // cast from Object (Dynamic) to * (AsUntyped) + return EmptyCast.Create (expr, target_type, rc).Resolve (rc); + } + + // other class types must be type checked - fall back to the slow path + if ((target_type.IsClass || target_type.IsInterface) && target_type.BuiltinType != BuiltinTypeSpec.Type.String) + return null; + + TypeSpec converter = rc.Module.PredefinedTypes.PsConverter.Resolve(); + + // perform numeric or other type conversion + string converterMethod = null; + + switch (target_type.BuiltinType) { + case BuiltinTypeSpec.Type.UInt: + converterMethod = "ConvertToUInt"; + break; + case BuiltinTypeSpec.Type.Double: + converterMethod = "ConvertToDouble"; + break; + case BuiltinTypeSpec.Type.Float: + converterMethod = "ConvertToFloat"; + break; + case BuiltinTypeSpec.Type.Int: + converterMethod = "ConvertToInt"; + break; + case BuiltinTypeSpec.Type.String: + converterMethod = "ConvertToString"; + break; + case BuiltinTypeSpec.Type.Bool: + converterMethod = "ConvertToBool"; + break; + default: +// throw new InvalidOperationException("Unhandled convert to: " + target_type.GetSignatureForError()); + return EmptyCast.Create(expr, target_type, rc); +// converterMethod = "ConvertTo" + target_type.Name.ToString(); +// break; + } + + var cast_args = new Arguments(1); + cast_args.Add(new Argument(EmptyCast.RemoveDynamic(rc, expr))); + return new Invocation(new MemberAccess(new TypeExpression(converter, expr.Location), converterMethod, expr.Location), cast_args); + } + + #endregion + + public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) + { + Statement.DynamicOps |= DynamicOperation.Convert; + + Arguments binder_args = new Arguments (3); + + flags |= ec.HasSet (ResolveContext.Options.CheckedScope) ? CSharpBinderFlags.CheckedContext : 0; + + binder_args.Add (new Argument (new BinderFlags (flags, this))); + binder_args.Add (new Argument (new TypeOf (type, loc))); + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + return new Invocation (GetBinder ("Convert", loc), binder_args); + } + } + + class DynamicConstructorBinder : DynamicExpressionStatement, IDynamicBinder + { + private Expression typeExpr; + + public DynamicConstructorBinder (TypeSpec type, Arguments args, Location loc) + : base (null, args, loc) + { + this.type = type; + this.typeExpr = null; + base.binder = this; + } + + public DynamicConstructorBinder (Expression typeExpr, Arguments args, Location loc) + : base (null, args, loc) + { + this.type = null; + this.typeExpr = typeExpr; + base.binder = this; + } + + protected override Expression DoResolve(ResolveContext rc) + { + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && rc.Module.Compiler.Settings.NewDynamicRuntime_Constructor) { + if ((this.typeExpr == null) && (this.type != null)) { + var ctors = MemberCache.FindMembers (type, Constructor.ConstructorName, true); + if (ctors != null) { + // if there is one and only one ctor then use it + if (ctors.Count == 1) { + var first = Arguments[0]; + Arguments.RemoveAt(0); + bool hasDynamic; + Arguments.Resolve(rc, out hasDynamic); + if (Arguments.AsTryResolveDynamicArgs(rc, ctors[0])) { + // use normal new + return new New(new TypeExpression(type, loc), Arguments, loc).Resolve(rc); + } + + OverloadResolver.Error_ConstructorMismatch (rc, type, Arguments.Count, loc); + return null; + } + } + } + + // fall through to normal resolve -- + } + + return base.DoResolve(rc); + } + + public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) + { + Statement.DynamicOps |= DynamicOperation.InvokeConstructor; + + Arguments binder_args = new Arguments (3); + + binder_args.Add (new Argument (new BinderFlags (0, this))); + if (typeExpr != null) { + binder_args.Add (new Argument (typeExpr)); + } else { + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + } + binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); + + return new Invocation (GetBinder ("InvokeConstructor", loc), binder_args); + } + } + + class DynamicIndexBinder : DynamicMemberAssignable + { + bool can_be_mutator; + + public DynamicIndexBinder (Arguments args, Location loc) + : base (args, loc) + { + } + + public DynamicIndexBinder (CSharpBinderFlags flags, Arguments args, Location loc) + : this (args, loc) + { + base.flags = flags; + } + + protected override Expression DoResolve (ResolveContext ec) + { + can_be_mutator = true; + return base.DoResolve (ec); + } + + public override bool UseCallSite(ResolveContext ec, Arguments args) + { + return ec.Module.Compiler.Settings.NewDynamicRuntime_GetSetIndex; + } + + public override Expression CreateCallSite(ResolveContext rc, Arguments args, bool isSet) + { + TypeExpression type; + isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; + if (!isSet) { + type = new TypeExpression(rc.Module.PredefinedTypes.PsGetIndex.Resolve(), loc); + } else { + type = new TypeExpression(rc.Module.PredefinedTypes.PsSetIndex.Resolve(), loc); + } + + var site_args = new Arguments(0); + return new New( + type, + site_args, + loc + ); + } + + public override Expression InvokeCallSite(ResolveContext rc, Expression site, Arguments args, TypeSpec returnType, bool isStatement) + { + // get object and index + var obj = args[0].Expr; + var index = args[1].Expr; + + bool isSet = IsSetter(site); + isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; + if (!isSet) { + if (NeedsCastToObject(returnType)) { + var site_args = new Arguments(2); + site_args.Add(new Argument(obj)); + site_args.Add(new Argument(index)); + + // get as an object + if (returnType != null && returnType.IsAsUntyped) + return new Invocation(new MemberAccess(site, "GetIndexAsUntyped"), site_args); + else + return new Invocation(new MemberAccess(site, "GetIndexAsObject"), site_args); + } else { + var site_args = new Arguments(2); + site_args.Add(new Argument(obj)); + site_args.Add(new Argument(index)); + + // get as a T + var type_args = new TypeArguments(); + type_args.Add(new TypeExpression(returnType, loc)); + return new Invocation(new MemberAccess(site, "GetIndexAs", type_args, loc), site_args); + } + } else { + var setVal = args[2].Expr; + + if (NeedsCastToObject(setVal.Type)) { + var site_args = new Arguments(3); + site_args.Add(new Argument(obj)); + site_args.Add(new Argument(index)); + site_args.Add(new Argument(new Cast(new TypeExpression(rc.BuiltinTypes.Object, loc), setVal, loc))); + + // set as an object + var type_args = new TypeArguments(); + type_args.Add(new TypeExpression(rc.BuiltinTypes.Object, loc)); + // TODO: AsUntyped parameters aren't yet supported, so there is no SetIndexAsUntyped + return new Invocation(new MemberAccess(site, "SetIndexAs", type_args, loc), site_args); + } else { + var site_args = new Arguments(3); + site_args.Add(new Argument(obj)); + site_args.Add(new Argument(index)); + site_args.Add(new Argument(setVal)); + + // set as a T + var type_args = new TypeArguments(); + type_args.Add(new TypeExpression(setVal.Type, loc)); + return new Invocation(new MemberAccess(site, "SetIndexAs", type_args, loc), site_args); + } + } + } + + protected override Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet) + { + Arguments binder_args = new Arguments (3); + + binder_args.Add (new Argument (new BinderFlags (flags, this))); + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); + + isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; + + if (isSet) { + Statement.DynamicOps |= DynamicOperation.SetIndex; + } else { + Statement.DynamicOps |= DynamicOperation.GetIndex; + } + + return new Invocation (GetBinder (isSet ? "SetIndex" : "GetIndex", loc), binder_args); + } + + protected override Arguments CreateSetterArguments (ResolveContext rc, Expression rhs) + { + // + // Indexer has arguments which complicates things as the setter and getter + // are called in two steps when unary mutator is used. We have to make a + // copy of all variable arguments to not duplicate any side effect. + // + // ++d[++arg, Foo ()] + // + + if (!can_be_mutator) + return base.CreateSetterArguments (rc, rhs); + + var setter_args = new Arguments (Arguments.Count + 1); + for (int i = 0; i < Arguments.Count; ++i) { + var expr = Arguments[i].Expr; + + if (expr is Constant || expr is VariableReference || expr is This) { + setter_args.Add (Arguments [i]); + continue; + } + + LocalVariable temp = LocalVariable.CreateCompilerGenerated (expr.Type, rc.CurrentBlock, loc); + expr = new SimpleAssign (temp.CreateReferenceExpression (rc, expr.Location), expr).Resolve (rc); + Arguments[i].Expr = temp.CreateReferenceExpression (rc, expr.Location).Resolve (rc); + setter_args.Add (Arguments [i].Clone (expr)); + } + + setter_args.Add (new Argument (rhs)); + return setter_args; + } + } + + class DynamicInvocation : DynamicExpressionStatement, IDynamicBinder, IDynamicCallSite + { + readonly ATypeNameExpression member; + + private bool IsMemberAccess; + + public DynamicInvocation (ATypeNameExpression member, Arguments args, Location loc) + : base (null, args, loc) + { + base.binder = this; + this.member = member; + this.IsMemberAccess = (member is MemberAccess) || (member is SimpleName); + } + + public static DynamicInvocation CreateSpecialNameInvoke (ATypeNameExpression member, Arguments args, Location loc) + { + return new DynamicInvocation (member, args, loc) { + flags = CSharpBinderFlags.InvokeSpecialName + }; + } + + protected override Expression DoResolve(ResolveContext rc) + { + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && rc.Module.Compiler.Settings.NewDynamicRuntime_HasOwnProperty) { + // special case handling of hasOwnProperty + if (this.member != null && this.Arguments != null && this.member.Name == "hasOwnProperty" && Arguments.Count == 2) { + var ma = new MemberAccess(new MemberAccess( + new QualifiedAliasMember(QualifiedAliasMember.GlobalAlias, "PlayScript", loc), "Dynamic", loc), "hasOwnProperty"); + + var site_args = new Arguments(2); + site_args.Add(new Argument(EmptyCast.RemoveDynamic(rc, Arguments[0].Expr.Resolve(rc)))); + site_args.Add(Arguments[1]); + return new Invocation(ma, site_args).Resolve(rc); + } + } + + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && rc.Module.Compiler.Settings.NewDynamicRuntime_ToString) { + // special case handling of toString + if (this.member != null && this.Arguments != null && (this.member.Name == "toString" || this.member.Name == "ToString") && Arguments.Count == 1) { + TypeSpec converter = rc.Module.PredefinedTypes.PsConverter.Resolve(); + var site_args = new Arguments(1); + site_args.Add(new Argument(EmptyCast.RemoveDynamic(rc, Arguments[0].Expr.Resolve(rc)))); + return new Invocation(new MemberAccess(new TypeExpression(converter, Location), "ConvertToString", Location), site_args).Resolve(rc); + } + } + + return base.DoResolve(rc); + } + + protected override Expression DoResolveWithTypeHint(ResolveContext rc, TypeSpec t) { + if (IsMemberAccess) + { + this.Type = t; + } + return this.Resolve(rc); + } + + #region IDynamicCallSite implementation + + public bool UseCallSite(ResolveContext rc, Arguments args) + { + return (IsMemberAccess && rc.Module.Compiler.Settings.NewDynamicRuntime_InvokeMember) || + (!IsMemberAccess && rc.Module.Compiler.Settings.NewDynamicRuntime_Invoke); + } + + public Expression CreateCallSite(ResolveContext rc, Arguments args, bool isSet) + { + if (IsMemberAccess) { + // construct new PsInvokeMember(name, argCount) + var site_args = new Arguments(2); + site_args.Add(new Argument(new StringLiteral(rc.BuiltinTypes, member.Name, member.Location))); + site_args.Add(new Argument(new IntLiteral(rc.BuiltinTypes, (args.Count - 1), loc))); + return new New( + new TypeExpression(rc.Module.PredefinedTypes.PsInvokeMember.Resolve(), loc), + site_args, + loc + ); + } else { + // construct new PsInvoke(argCount) + var site_args = new Arguments(1); + site_args.Add(new Argument(new IntLiteral(rc.BuiltinTypes, (args.Count - 1), loc))); + return new New( + new TypeExpression(rc.Module.PredefinedTypes.PsInvoke.Resolve(), loc), + site_args, + loc + ); + } + } + + public TypeExpression CreateReducedTypeExpression(ResolveContext ec, TypeSpec t) + { + // Convert any internal type like dynamic or null to object + if (t.Kind == MemberKind.InternalCompilerType) + t = ec.BuiltinTypes.Object; + + + return new TypeExpression(t, loc); + } + + public Expression InvokeCallSite(ResolveContext rc, Expression site, Arguments args, TypeSpec returnType, bool isStatement) + { + string memberName = "Invoke"; + memberName += isStatement ? "Action" : "Func"; + memberName += (args.Count - 1); + + var ta = new TypeArguments(); + for (int i = 1; i < args.Count; ++i) { + ta.Add(CreateReducedTypeExpression(rc, args[i].Type)); + } + + if (!isStatement) { + ta.Add(CreateReducedTypeExpression(rc, returnType)); + } + + return new Invocation(new MemberAccess(site, memberName, ta, loc), args); + } + + #endregion + + public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) + { + Statement.DynamicOps |= DynamicOperation.Invoke; + + Arguments binder_args = new Arguments (member != null ? 5 : 3); + bool is_member_access = member is MemberAccess; + + CSharpBinderFlags call_flags; + if (!is_member_access && member is SimpleName) { + call_flags = CSharpBinderFlags.InvokeSimpleName; + is_member_access = true; + } else { + call_flags = 0; + } + + binder_args.Add (new Argument (new BinderFlags (call_flags, this))); + + if (is_member_access) + binder_args.Add (new Argument (new StringLiteral (ec.BuiltinTypes, member.Name, member.Location))); + + if (member != null && member.HasTypeArguments) { + TypeArguments ta = member.TypeArguments; + if (ta.Resolve (ec, false)) { + var targs = new ArrayInitializer (ta.Count, loc); + foreach (TypeSpec t in ta.Arguments) + targs.Add (new TypeOf (t, loc)); + + binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (targs, loc))); + } + } else if (is_member_access) { + binder_args.Add (new Argument (new NullLiteral (loc))); + } + + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + + Expression real_args; + if (args == null) { + // Cannot be null because .NET trips over + real_args = new ArrayCreation ( + new MemberAccess (GetBinderNamespace (ec, loc), "CSharpArgumentInfo", loc), + new ArrayInitializer (0, loc), loc); + } else { + real_args = new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc); + } + + binder_args.Add (new Argument (real_args)); + + return new Invocation (GetBinder (is_member_access ? "InvokeMember" : "Invoke", loc), binder_args); + } + + public override void EmitStatement (EmitContext ec) + { + flags |= CSharpBinderFlags.ResultDiscarded; + base.EmitStatement (ec); + } + } + + class DynamicMemberBinder : DynamicMemberAssignable + { + readonly string name; + + public DynamicMemberBinder (string name, Arguments args, Location loc) + : base (args, loc) + { + this.name = name; + } + + public DynamicMemberBinder (string name, CSharpBinderFlags flags, Arguments args, Location loc) + : this (name, args, loc) + { + base.flags = flags; + } + + #region IDynamicCallSite implementation + + public override bool UseCallSite(ResolveContext ec, Arguments args) + { + return ec.Module.Compiler.Settings.NewDynamicRuntime_GetSetMember; + } + + public override Expression CreateCallSite(ResolveContext rc, Arguments args, bool isSet) + { + TypeExpression type; + isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; + if (!isSet) { + type = new TypeExpression(rc.Module.PredefinedTypes.PsGetMember.Resolve(), loc); + } else { + type = new TypeExpression(rc.Module.PredefinedTypes.PsSetMember.Resolve(), loc); + } + + var site_args = new Arguments(1); + site_args.Add(new Argument(new StringLiteral(rc.BuiltinTypes, this.name, loc))); + return new New( + type, + site_args, + loc + ); + } + + public override Expression InvokeCallSite(ResolveContext rc, Expression site, Arguments args, TypeSpec returnType, bool isStatement) + { + var obj = args[0].Expr; + + bool isSet = IsSetter(site); + isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; + if (!isSet) { + if (NeedsCastToObject(returnType)) { + var site_args = new Arguments(1); + site_args.Add(new Argument(obj)); + if (returnType != null && returnType.IsAsUntyped) + return new Invocation(new MemberAccess(site, "GetMemberAsUntyped"), site_args); + else + return new Invocation(new MemberAccess(site, "GetMemberAsObject"), site_args); + } else { + var site_args = new Arguments(1); + site_args.Add(new Argument(obj)); + + var type_args = new TypeArguments(); + type_args.Add(new TypeExpression(returnType, loc)); + return new Invocation(new MemberAccess(site, "GetMember", type_args, loc), site_args); + } + } else { + var setVal = args[1].Expr; + + if (NeedsCastToObject(setVal.Type)) { + var site_args = new Arguments(3); + site_args.Add(new Argument(obj)); + site_args.Add(new Argument(new Cast(new TypeExpression(rc.BuiltinTypes.Object, loc), setVal, loc))); + site_args.Add(new Argument(new BoolLiteral(rc.BuiltinTypes, false, loc))); + // TODO: AsUntyped parameters aren't yet supported, so there is no SetMemberAsUntyped + return new Invocation(new MemberAccess(site, "SetMemberAsObject"), site_args); + } else { + var site_args = new Arguments(2); + site_args.Add(new Argument(obj)); + site_args.Add(new Argument(setVal)); + + var type_args = new TypeArguments(); + type_args.Add(new TypeExpression(setVal.Type, loc)); + return new Invocation(new MemberAccess(site, "SetMember", type_args, loc), site_args); + } + } + } + + #endregion + + protected override Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet) + { + Arguments binder_args = new Arguments (4); + + binder_args.Add (new Argument (new BinderFlags (flags, this))); + binder_args.Add (new Argument (new StringLiteral (ec.BuiltinTypes, name, loc))); + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); + + isSet |= (flags & CSharpBinderFlags.ValueFromCompoundAssignment) != 0; + + if (isSet) { + Statement.DynamicOps |= DynamicOperation.SetMember; + } else { + Statement.DynamicOps |= DynamicOperation.GetMember; + } + + return new Invocation (GetBinder (isSet ? "SetMember" : "GetMember", loc), binder_args); + } + + } + + // + // Any member binder which can be source and target of assignment + // + abstract class DynamicMemberAssignable : DynamicExpressionStatement, IDynamicBinder, IDynamicCallSite, IAssignMethod + { + Expression setter; + Arguments setter_args; + + protected DynamicMemberAssignable (Arguments args, Location loc) + : base (null, args, loc) + { + base.binder = this; + } + + protected override Expression DoResolveWithTypeHint(ResolveContext rc, TypeSpec t) { + this.Type = t; + return this.Resolve(rc); + } + + public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) + { + // + // DoResolve always uses getter + // + return CreateCallSiteBinder (ec, args, false); + } + + protected bool IsSetter(Expression expr) + { + return expr.Type.Name.Contains("Set") && !expr.Type.Name.Contains("Get"); + } + + protected bool NeedsCastToObject(TypeSpec t) + { + return (t == null) || (t.Kind == MemberKind.InternalCompilerType) || (t.BuiltinType == BuiltinTypeSpec.Type.Dynamic); + } + + protected abstract Expression CreateCallSiteBinder (ResolveContext ec, Arguments args, bool isSet); + + #region IDynamicCallSite implementation + public abstract bool UseCallSite(ResolveContext rc, Arguments args); + public abstract Expression CreateCallSite(ResolveContext rc, Arguments args, bool isSet); + public abstract Expression InvokeCallSite(ResolveContext ec, Expression site, Arguments args, TypeSpec returnType, bool isStatement); + #endregion + + protected virtual Arguments CreateSetterArguments (ResolveContext rc, Expression rhs) + { + var setter_args = new Arguments (Arguments.Count + 1); + setter_args.AddRange (Arguments); + setter_args.Add (new Argument (rhs)); + return setter_args; + } + + public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) + { + if (right_side == EmptyExpression.OutAccess) { + right_side.DoResolveLValue (rc, this); + return null; + } + + var res_right_side = right_side.Resolve (rc); + + if (DoResolveCore (rc) && res_right_side != null) { + setter_args = CreateSetterArguments (rc, res_right_side); + + // create setter callsite + var dc = (binder as IDynamicCallSite); + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && (dc != null) && dc.UseCallSite(rc, setter_args)) { + this.useDelegateInvoke = false; + setter_args.CreateDynamicBinderArguments(rc); + setter = CreateCallSite(rc, setter_args, true); + } else { + this.useDelegateInvoke = true; + setter = CreateCallSiteBinder (rc, setter_args, true); + } + } + + eclass = ExprClass.Variable; + return this; + } + + public override void Emit (EmitContext ec) + { + // It's null for ResolveLValue used without assignment + if (binder_expr == null) + EmitCall (ec, setter, Arguments, false); + else + base.Emit (ec); + } + + public override void EmitStatement (EmitContext ec) + { + // It's null for ResolveLValue used without assignment + if (binder_expr == null) + EmitCall (ec, setter, Arguments, true); + else + base.EmitStatement (ec); + } + + #region IAssignMethod Members + + public void Emit (EmitContext ec, bool leave_copy) + { + throw new NotImplementedException (); + } + + public void EmitAssign (EmitContext ec, Expression source, bool leave_copy, bool isCompound) + { + EmitCall (ec, setter, setter_args, !leave_copy); + } + + #endregion + } + + class DynamicUnaryConversion : DynamicExpressionStatement, IDynamicBinder + { + readonly string name; + + public DynamicUnaryConversion (string name, Arguments args, Location loc) + : base (null, args, loc) + { + this.name = name; + base.binder = this; + } + + private static string GetDynamicUnaryTypeName(TypeSpec type) + { + switch (type.BuiltinType){ + case BuiltinTypeSpec.Type.Bool: + return "Bool"; + case BuiltinTypeSpec.Type.Int: + return "Int"; + case BuiltinTypeSpec.Type.Double: + return "Double"; + case BuiltinTypeSpec.Type.String: + return "String"; + case BuiltinTypeSpec.Type.UInt: + return "UInt"; + default: + return "Object"; + } + } + + protected override Expression DoResolve(ResolveContext rc) + { + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && rc.Module.Compiler.Settings.NewDynamicRuntime_UnaryOps) { + return CreateDynamicUnaryOperation(rc); + } + + return base.DoResolve(rc); + } + + private Expression CreateDynamicUnaryOperation(ResolveContext rc) + { + // if type is "*", we return "*"; otherwise, dynamic + var isAsUntyped = Arguments[0].Type.IsAsUntyped; + + // strip dynamic from argument + Arguments.CastDynamicArgs(rc); + + TypeSpec unary = rc.Module.PredefinedTypes.PsUnaryOperation.Resolve(); + string type = GetDynamicUnaryTypeName(Arguments[0].Type); + + // create unary method name + string unaryMethod = this.name + type; + + var ret = new Invocation (new MemberAccess (new TypeExpression (unary, loc), unaryMethod, loc), Arguments).Resolve (rc); + if (ret.Type == rc.BuiltinTypes.Object) { + // cast object to untyped/dynamic for return types + ret = new Cast (new TypeExpression (isAsUntyped ? rc.BuiltinTypes.AsUntyped : rc.BuiltinTypes.Dynamic, loc), ret, loc).Resolve (rc); + } + return ret; + } + + + public static DynamicUnaryConversion CreateIsTrue (ResolveContext rc, Arguments args, Location loc) + { + return new DynamicUnaryConversion ("IsTrue", args, loc) { type = rc.BuiltinTypes.Bool }; + } + + public static DynamicUnaryConversion CreateIsFalse (ResolveContext rc, Arguments args, Location loc) + { + return new DynamicUnaryConversion ("IsFalse", args, loc) { type = rc.BuiltinTypes.Bool }; + } + + public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) + { + Statement.DynamicOps |= DynamicOperation.Unary; + + Arguments binder_args = new Arguments (4); + + MemberAccess ns; + if (ec.Module.PredefinedTypes.IsPlayScriptAotMode) { + ns = new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "PlayScript", loc); + } else { + ns = new MemberAccess (new MemberAccess ( + new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "System", loc), "Linq", loc), "Expressions", loc); + } + + var flags = ec.HasSet (ResolveContext.Options.CheckedScope) ? CSharpBinderFlags.CheckedContext : 0; + + binder_args.Add (new Argument (new BinderFlags (flags, this))); + binder_args.Add (new Argument (new MemberAccess (new MemberAccess (ns, "ExpressionType", loc), name, loc))); + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); + + return new Invocation (GetBinder ("UnaryOperation", loc), binder_args); + } + } + + class DynamicBinaryExpression : DynamicExpressionStatement, IDynamicBinder + { + readonly string name; + readonly Binary.Operator oper; + + public DynamicBinaryExpression (Binary.Operator oper, string name, Arguments args, Location loc) + : base (null, args, loc) + { + this.oper = oper; + this.name = name; + base.binder = this; + } + + protected override Expression DoResolve(ResolveContext rc) + { + if (rc.Module.PredefinedTypes.IsPlayScriptAotMode && rc.Module.Compiler.Settings.NewDynamicRuntime_BinaryOps) { + return this.CreateDynamicBinaryOperation(rc); + } + return base.DoResolve(rc); + } + + private static string GetDynamicBinaryTypeName(TypeSpec type) + { + switch (type.BuiltinType){ + case BuiltinTypeSpec.Type.Bool: + return "Bool"; + case BuiltinTypeSpec.Type.Int: + return "Int"; + case BuiltinTypeSpec.Type.Double: + return "Double"; + case BuiltinTypeSpec.Type.String: + return "String"; + case BuiltinTypeSpec.Type.UInt: + return "UInt"; + default: + return "Obj"; + } + } + + private Expression CreateDynamicBinaryOperation(ResolveContext rc) + { + // if either type is "*", we return "*"; otherwise, dynamic + var isAsUntyped = (Arguments [0].Type.IsAsUntyped || Arguments [1].Type.IsAsUntyped); + + // strip dynamic from all arguments + Arguments.CastDynamicArgs(rc); + + TypeSpec binary = rc.Module.PredefinedTypes.PsBinaryOperation.Resolve(); + + // perform numeric or other type conversion + string binaryMethod = null; + switch (oper) + { + case Binary.Operator.Multiply: + binaryMethod = "Multiply"; + break; + case Binary.Operator.Division: + binaryMethod = "Division"; + break; + case Binary.Operator.Modulus: + binaryMethod = "Modulus"; + break; + case Binary.Operator.Addition: + binaryMethod = "Addition"; + break; + case Binary.Operator.Subtraction: + binaryMethod = "Subtraction"; + break; + case Binary.Operator.LeftShift: + binaryMethod = "LeftShift"; + break; + case Binary.Operator.RightShift: + binaryMethod = "RightShift"; + break; + case Binary.Operator.AsURightShift: + binaryMethod = "AsURightShift"; + break; + case Binary.Operator.LessThan: + binaryMethod = "LessThan"; + break; + case Binary.Operator.GreaterThan: + binaryMethod = "GreaterThan"; + break; + case Binary.Operator.LessThanOrEqual: + binaryMethod = "LessThanOrEqual"; + break; + case Binary.Operator.GreaterThanOrEqual: + binaryMethod = "GreaterThanOrEqual"; + break; + case Binary.Operator.Equality: + binaryMethod = "Equality"; + break; + case Binary.Operator.Inequality: + binaryMethod = "Inequality"; + break; + case Binary.Operator.AsStrictEquality: + binaryMethod = "AsStrictEquality"; + break; + case Binary.Operator.AsStrictInequality: + binaryMethod = "AsStrictInequality"; + break; + case Binary.Operator.BitwiseAnd: + binaryMethod = "BitwiseAnd"; + break; + case Binary.Operator.ExclusiveOr: + binaryMethod = "ExclusiveOr"; + break; + case Binary.Operator.BitwiseOr: + binaryMethod = "BitwiseOr"; + break; + // we should never support these +// case Binary.Operator.LogicalAnd: +// binaryMethod = "LogicalAnd"; +// break; +// case Binary.Operator.LogicalOr: +// binaryMethod = "LogicalOr"; +// break; + case Binary.Operator.AsE4xChild: + binaryMethod = "AsE4xChild"; + break; + case Binary.Operator.AsE4xDescendant: + binaryMethod = "AsE4xDescendant"; + break; + case Binary.Operator.AsE4xChildAttribute: + binaryMethod = "AsE4xChildAttribute"; + break; + case Binary.Operator.AsE4xDescendantAttribute: + binaryMethod = "AsE4xDescendantAttribute"; + break; + default: + throw new InvalidOperationException("Unknown binary operation: " + oper); + } + + string leftType = GetDynamicBinaryTypeName(Arguments[0].Type); + string rightType = GetDynamicBinaryTypeName(Arguments[1].Type); + + // for strict equality checks, just use a single method and check + // types at runtime + if (oper == Binary.Operator.AsStrictEquality || + oper == Binary.Operator.AsStrictInequality) { + leftType = rightType = "Obj"; + } + + // append to binary method instead of using overloads + binaryMethod += leftType + rightType; + + var ret = new Invocation (new MemberAccess (new TypeExpression (binary, loc), binaryMethod, loc), Arguments).Resolve (rc); + if (ret.Type == rc.BuiltinTypes.Object) { + // cast object to untyped/dynamic for return types + ret = new Cast (new TypeExpression (isAsUntyped ? rc.BuiltinTypes.AsUntyped : rc.BuiltinTypes.Dynamic, loc), ret, loc).Resolve (rc); + } + return ret; + } + + + public Expression CreateCallSiteBinder (ResolveContext ec, Arguments args) + { + Arguments binder_args = new Arguments (4); + + MemberAccess ns; + if (ec.Module.PredefinedTypes.IsPlayScriptAotMode) { + ns = new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "PlayScript", loc); + } else { + ns = new MemberAccess (new MemberAccess ( + new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "System", loc), "Linq", loc), "Expressions", loc); + } + + CSharpBinderFlags flags = 0; + if (ec.HasSet (ResolveContext.Options.CheckedScope)) + flags = CSharpBinderFlags.CheckedContext; + + if ((oper & Binary.Operator.LogicalMask) != 0) + flags |= CSharpBinderFlags.BinaryOperationLogical; + + binder_args.Add (new Argument (new EnumConstant (new IntLiteral (ec.BuiltinTypes, (int) flags, loc), ec.Module.PredefinedTypes.GetBinderFlags(ec).Resolve ()))); + binder_args.Add (new Argument (new MemberAccess (new MemberAccess (ns, "ExpressionType", loc), this.name, loc))); + binder_args.Add (new Argument (new TypeOf (ec.CurrentType, loc))); + binder_args.Add (new Argument (new ImplicitlyTypedArrayCreation (args.CreateDynamicBinderArguments (ec), loc))); + + return new Invocation (new MemberAccess (new TypeExpression (ec.Module.PredefinedTypes.GetBinder(ec).TypeSpec, loc), "BinaryOperation", loc), binder_args); + } + } + + + + + + + sealed class DynamicSiteClass : HoistedStoreyClass + { + public DynamicSiteClass (TypeDefinition parent, MemberBase host, TypeParameters tparams) + : base (parent, MakeMemberName (host, "DynamicSite", parent.DynamicSitesCounter, tparams, Location.Null), tparams, Modifiers.STATIC, MemberKind.Class) + { + parent.DynamicSitesCounter++; + } + + public FieldSpec CreateCallSiteField (FullNamedExpression type, Location loc) + { + int index = AnonymousMethodsCounter++; + Field f = new HoistedField (this, type, Modifiers.PUBLIC | Modifiers.STATIC, "Site" + index.ToString ("X"), null, loc); + f.Define (); + + AddField (f); + return f.Spec; + } + } +} diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ecore.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/ecore.cs index 2dde3d5f5..5f2c99ab0 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ecore.cs @@ -25,7 +25,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// The ExprClass class contains the is used to pass the @@ -126,7 +126,7 @@ public interface IExpressionCleanup /// /// Base class for expressions /// - public abstract class Expression { + public abstract partial class Expression { public ExprClass eclass; protected TypeSpec type; protected Location loc; @@ -238,6 +238,31 @@ public virtual TypeSpec ResolveAsType (IMemberContext mc, bool allowUnboundTypeA return null; } + // + // This is used to do a resolve but provides a typespec as a 'hint' + // The hint is used to coerce the resolving code to produce an expression of that type. + // The resolve doesnt necessarily have to respect the hint if it doesnt want to. + // This hint is useful to produce the most optimal code generation (for example, if only + // a Boolean is required then dont do expensive coalescing) + // Expressions should override DoResolveWithTypeHint below + // + public Expression ResolveWithTypeHint (ResolveContext rc, TypeSpec typeHint) + { + if ((rc.FileType == SourceFileType.PlayScript) && rc.Module.Compiler.Settings.NewDynamicRuntime_TypeHint && (typeHint != null)) { + // resolve with type hint + return this.DoResolveWithTypeHint(rc, typeHint); + } else { + // dont use the type hint + return this.Resolve(rc); + } + } + + protected virtual Expression DoResolveWithTypeHint (ResolveContext rc, TypeSpec typeHint) + { + // by default most expressions ignore the type hint + return this.Resolve(rc); + } + public static void ErrorIsInaccesible (IMemberContext rc, string member, Location loc) { rc.Module.Compiler.Report.Error (122, loc, "`{0}' is inaccessible due to its protection level", member); @@ -486,13 +511,13 @@ protected static TypeSpec LiftMemberType (ResolveContext rc, TypeSpec type) /// public Expression Resolve (ResolveContext ec, ResolveFlags flags) { - if (eclass != ExprClass.Unresolved) { - if ((flags & ExprClassToResolveFlags) == 0) { - Error_UnexpectedKind (ec, flags, loc); - return null; - } - + if (eclass != ExprClass.Unresolved) return this; + + if (ec != null) { + if (this.Location.SourceFile != null) { + ec.FileType = this.Location.SourceFile.FileType; + } } Expression e; @@ -503,6 +528,11 @@ public Expression Resolve (ResolveContext ec, ResolveFlags flags) return null; if ((flags & e.ExprClassToResolveFlags) == 0) { + // We automatically do a typeof(type) in PlayScript for type values.. + if (ec.FileType == SourceFileType.PlayScript && + (e is TypeExpr) && (flags & ResolveFlags.VariableOrValue) != 0) { + return Convert.ImplicitConversion (ec, e, ec.BuiltinTypes.Type, e.loc).Resolve (ec); + } e.Error_UnexpectedKind (ec, flags, loc); return null; } @@ -821,6 +851,9 @@ public enum MemberLookupRestrictions IgnoreArity = 1 << 5, IgnoreAmbiguity = 1 << 6, NameOfExcluded = 1 << 7, + PreferStatic = 1 << 8, // Used to filter static/non-static for PlayScript + PreferInstance = 1 << 9, // Used to filter static/non-static for PlayScript + AsTypeCast = 1 << 10 } // @@ -833,117 +866,130 @@ public static Expression MemberLookup (IMemberContext rc, bool errorMode, TypeSp if (members == null) return null; - Expression expr; + MemberSpec non_method = null; + MemberSpec ambig_non_method = null; do { - expr = MemberLookupToExpression (rc, members, errorMode, queried_type, name, arity, restrictions, loc); - if (expr != null) - return expr; + for (int i = 0; i < members.Count; ++i) { + var member = members[i]; - if (members [0].DeclaringType.BaseType == null) - members = null; - else - members = MemberCache.FindMembers (members [0].DeclaringType.BaseType, name, false); - } while (members != null); - - return expr; - } + // HACK: for events because +=/-= can appear at same class only, should use OverrideToBase there + if ((member.Modifiers & Modifiers.OVERRIDE) != 0 && member.Kind != MemberKind.Event) + continue; - public static Expression MemberLookupToExpression (IMemberContext rc, IList members, bool errorMode, TypeSpec queried_type, string name, int arity, MemberLookupRestrictions restrictions, Location loc) - { - MemberSpec non_method = null; - MemberSpec ambig_non_method = null; + if ((member.Modifiers & Modifiers.BACKING_FIELD) != 0 || member.Kind == MemberKind.Operator) + continue; - for (int i = 0; i < members.Count; ++i) { - var member = members [i]; + if ((arity > 0 || (restrictions & MemberLookupRestrictions.ExactArity) != 0) && member.Arity != arity) + continue; - // HACK: for events because +=/-= can appear at same class only, should use OverrideToBase there - if ((member.Modifiers & Modifiers.OVERRIDE) != 0 && member.Kind != MemberKind.Event) - continue; + if (!errorMode) { + if (!member.IsAccessible (rc)) + continue; - if ((member.Modifiers & Modifiers.BACKING_FIELD) != 0 || member.Kind == MemberKind.Operator) - continue; + // + // With runtime binder we can have a situation where queried type is inaccessible + // because it came via dynamic object, the check about inconsisted accessibility + // had no effect as the type was unknown during compilation + // + // class A { + // private class N { } + // + // public dynamic Foo () + // { + // return new N (); + // } + // } + // + if (rc.Module.Compiler.IsRuntimeBinder && !member.DeclaringType.IsAccessible (rc)) + continue; + } - if ((arity > 0 || (restrictions & MemberLookupRestrictions.ExactArity) != 0) && member.Arity != arity) - continue; + if ((restrictions & MemberLookupRestrictions.InvocableOnly) != 0) { + if (member is MethodSpec) { + // + // Interface members that are hidden by class members are removed from the set. This + // step only has an effect if T is a type parameter and T has both an effective base + // class other than object and a non-empty effective interface set + // + var tps = queried_type as TypeParameterSpec; + if (tps != null && tps.HasTypeConstraint) + members = RemoveHiddenTypeParameterMethods (members); - if (!errorMode) { - if (!member.IsAccessible (rc)) - continue; + return new MethodGroupExpr (members, queried_type, loc); + } - // - // With runtime binder we can have a situation where queried type is inaccessible - // because it came via dynamic object, the check about inconsisted accessibility - // had no effect as the type was unknown during compilation - // - // class A { - // private class N { } - // - // public dynamic Foo () - // { - // return new N (); - // } - // } - // - if (rc.Module.Compiler.IsRuntimeBinder && !member.DeclaringType.IsAccessible (rc)) - continue; - } + if (!Invocation.IsMemberInvocable (member, rc as ResolveContext)) + continue; + } - if ((restrictions & MemberLookupRestrictions.InvocableOnly) != 0) { - if (member is MethodSpec) { + if (non_method == null || member is MethodSpec || non_method.IsNotCSharpCompatible) { + non_method = member; + } else if (!errorMode && !member.IsNotCSharpCompatible) { + // + // Interface members that are hidden by class members are removed from the set when T is a type parameter and + // T has both an effective base class other than object and a non-empty effective interface set. // - // Interface members that are hidden by class members are removed from the set. This - // step only has an effect if T is a type parameter and T has both an effective base - // class other than object and a non-empty effective interface set + // The spec has more complex rules but we simply remove all members declared in an interface declaration. // var tps = queried_type as TypeParameterSpec; - if (tps != null && tps.HasTypeConstraint) - members = RemoveHiddenTypeParameterMethods (members); + if (tps != null && tps.HasTypeConstraint) { + if (non_method.DeclaringType.IsClass && member.DeclaringType.IsInterface) + continue; - return new MethodGroupExpr (members, queried_type, loc); - } + if (non_method.DeclaringType.IsInterface && member.DeclaringType.IsInterface) { + non_method = member; + continue; + } + } - if (!Invocation.IsMemberInvocable (member)) - continue; + ambig_non_method = member; + } } - if (non_method == null || member is MethodSpec || non_method.IsNotCSharpCompatible) { - non_method = member; - } else if (!errorMode && !member.IsNotCSharpCompatible) { - // - // Interface members that are hidden by class members are removed from the set when T is a type parameter and - // T has both an effective base class other than object and a non-empty effective interface set. - // - // The spec has more complex rules but we simply remove all members declared in an interface declaration. - // - var tps = queried_type as TypeParameterSpec; - if (tps != null && tps.HasTypeConstraint) { - if (non_method.DeclaringType.IsClass && member.DeclaringType.IsInterface) - continue; + if (non_method != null) { + if (!loc.IsPlayScript) + if (ambig_non_method != null && rc != null && (restrictions & MemberLookupRestrictions.IgnoreAmbiguity) == 0) { + var report = rc.Module.Compiler.Report; + report.SymbolRelatedToPreviousError (non_method); + report.SymbolRelatedToPreviousError (ambig_non_method); + report.Error (229, loc, "Ambiguity between `{0}' and `{1}'", + non_method.GetSignatureForError (), ambig_non_method.GetSignatureForError ()); + } - if (non_method.DeclaringType.IsInterface && member.DeclaringType.IsInterface) { - non_method = member; - continue; + if (loc.IsPlayScript) + if (ambig_non_method != null && rc != null) { + // PlayScript - we resolve ambiguity between identically named static/instance methods based on preference passed + // from the caller (which checks to see if a TypeName.blah is used). This allows us to have identically named + // properties/member vars. + // ./as/test-as-StaticVsInstanceSameName.as + // ./as/test-as-StaticVsInstanceSameNameProp.as + if ((restrictions & MemberLookupRestrictions.PreferStatic) != 0 && + ((non_method.Modifiers & Modifiers.STATIC) != (ambig_non_method.Modifiers & Modifiers.STATIC))) { + non_method = (non_method.Modifiers & Modifiers.STATIC) != 0 ? non_method : ambig_non_method; + } else if ((restrictions & MemberLookupRestrictions.PreferInstance) != 0 && + ((non_method.Modifiers & Modifiers.STATIC) != (ambig_non_method.Modifiers & Modifiers.STATIC))) { + non_method = (non_method.Modifiers & Modifiers.STATIC) == 0 ? non_method : ambig_non_method; + } else { + var report = rc.Module.Compiler.Report; + report.SymbolRelatedToPreviousError (non_method); + report.SymbolRelatedToPreviousError (ambig_non_method); + report.Error (229, loc, "Ambiguity between `{0}' and `{1}'", + non_method.GetSignatureForError (), ambig_non_method.GetSignatureForError ()); + } } - } - ambig_non_method = member; - } - } + if (non_method is MethodSpec) + return new MethodGroupExpr (members, queried_type, loc); - if (non_method != null) { - if (ambig_non_method != null && rc != null && (restrictions & MemberLookupRestrictions.IgnoreAmbiguity) == 0) { - var report = rc.Module.Compiler.Report; - report.SymbolRelatedToPreviousError (non_method); - report.SymbolRelatedToPreviousError (ambig_non_method); - report.Error (229, loc, "Ambiguity between `{0}' and `{1}'", - non_method.GetSignatureForError (), ambig_non_method.GetSignatureForError ()); + return ExprClassFromMemberInfo (non_method, loc); } - if (non_method is MethodSpec) - return new MethodGroupExpr (members, queried_type, loc); + if (members[0].DeclaringType.BaseType == null) + members = null; + else + members = MemberCache.FindMembers (members[0].DeclaringType.BaseType, name, false); - return ExprClassFromMemberInfo (non_method, loc); - } + } while (members != null); return null; } @@ -1291,7 +1337,7 @@ public virtual object Accept (StructuralVisitor visitor) /// being that they would support an extra Emition interface that /// does not leave a result on the stack. /// - public abstract class ExpressionStatement : Expression + public abstract partial class ExpressionStatement : Expression { public virtual void MarkReachable (Reachability rc) { @@ -1384,7 +1430,7 @@ public override void EmitSideEffect (EmitContext ec) /// would be "unsigned int". /// /// - public abstract class TypeCast : Expression + public abstract partial class TypeCast : Expression { protected readonly Expression child; @@ -1458,13 +1504,16 @@ public override bool IsNull { } } - public class EmptyCast : TypeCast { + public partial class EmptyCast : TypeCast { EmptyCast (Expression child, TypeSpec target_type) : base (child, target_type) { + if (child.Type == null || child.eclass == ExprClass.Unresolved) { + throw new InvalidOperationException("Unresolved type in EmptyCast"); + } } - public static Expression Create (Expression child, TypeSpec type) + public static Expression Create (Expression child, TypeSpec type, ResolveContext opt_ec) { Constant c = child as Constant; if (c != null) { @@ -1476,7 +1525,7 @@ public static Expression Create (Expression child, TypeSpec type) if (c.Type == type) return c; - var res = c.ConvertImplicitly (type); + var res = c.ConvertImplicitly (type, opt_ec, false); if (res != null) return res; } @@ -1489,6 +1538,19 @@ public static Expression Create (Expression child, TypeSpec type) return new EmptyCast (child, type); } + public static Expression RemoveDynamic(ResolveContext rc, Expression child) + { + if (child.Type.IsDynamic) { + if (child.eclass == ExprClass.Unresolved) { + // dont really like this, but sometimes its needed + return new BoxedCast(child, rc.BuiltinTypes.Object); + } else { + return EmptyCast.Create(child, rc.BuiltinTypes.Object, rc); + } + } + return child; + } + public override void EmitBranchable (EmitContext ec, Label label, bool on_true) { child.EmitBranchable (ec, label, on_true); @@ -1498,6 +1560,7 @@ public override void EmitSideEffect (EmitContext ec) { child.EmitSideEffect (ec); } + } // @@ -1566,13 +1629,13 @@ public EmptyConstantCast (Constant child, TypeSpec type) this.type = type; } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { if (child.Type == target_type) return child; // FIXME: check that 'type' can be converted to 'target_type' first - return child.ConvertExplicitly (in_checked_context, target_type); + return child.ConvertExplicitly (in_checked_context, target_type, opt_ec); } public override Expression CreateExpressionTree (ResolveContext ec) @@ -1647,16 +1710,16 @@ public override long GetValueAsLong () return child.GetValueAsLong (); } - public override Constant ConvertImplicitly (TypeSpec target_type) + public override Constant ConvertImplicitly (TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) { if (type == target_type) return this; // FIXME: Do we need to check user conversions? - if (!Convert.ImplicitStandardConversionExists (this, target_type)) + if (!Convert.ImplicitStandardConversionExists (this, target_type, opt_ec)) return null; - return child.ConvertImplicitly (target_type); + return child.ConvertImplicitly (target_type, opt_ec, upconvert_only); } } @@ -1762,25 +1825,25 @@ public override bool IsNegative { } } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { if (Child.Type == target_type) return Child; - return Child.ConvertExplicitly (in_checked_context, target_type); + return Child.ConvertExplicitly (in_checked_context, target_type, opt_ec); } - public override Constant ConvertImplicitly (TypeSpec type) + public override Constant ConvertImplicitly (TypeSpec type, ResolveContext opt_ec, bool upconvert_only) { if (this.type == type) { return this; } - if (!Convert.ImplicitStandardConversionExists (this, type)){ + if (!Convert.ImplicitStandardConversionExists (this, type, opt_ec)){ return null; } - return Child.ConvertImplicitly (type); + return Child.ConvertImplicitly (type, opt_ec); } } @@ -1821,7 +1884,6 @@ public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder e public override void Emit (EmitContext ec) { base.Emit (ec); - ec.Emit (OpCodes.Box, child.Type); } @@ -2085,7 +2147,7 @@ public static void Emit (EmitContext ec, Mode mode) } } - class OpcodeCast : TypeCast + partial class OpcodeCast : TypeCast { readonly OpCode op; @@ -2189,15 +2251,15 @@ public ReducedConstantExpression (Constant expr, Expression orig_expr) this.orig_expr = orig_expr; } - public Expression OriginalExpression { - get { - return orig_expr; - } - } + public Expression OriginalExpression { + get { + return orig_expr; + } + } - public override Constant ConvertImplicitly (TypeSpec target_type) + public override Constant ConvertImplicitly (TypeSpec target_type, ResolveContext opt_ec, bool upconvert_only) { - Constant c = base.ConvertImplicitly (target_type); + Constant c = base.ConvertImplicitly (target_type, opt_ec, upconvert_only); if (c != null) c = new ReducedConstantExpression (c, orig_expr); @@ -2209,9 +2271,9 @@ public override Expression CreateExpressionTree (ResolveContext ec) return orig_expr.CreateExpressionTree (ec); } - public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type) + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) { - Constant c = base.ConvertExplicitly (in_checked_context, target_type); + Constant c = base.ConvertExplicitly (in_checked_context, target_type, opt_ec); if (c != null) c = new ReducedConstantExpression (c, orig_expr); return c; @@ -2614,7 +2676,7 @@ public override string GetSignatureForError () /// SimpleName expressions are formed of a single word and only happen at the beginning /// of a dotted-name. /// - public class SimpleName : ATypeNameExpression + public partial class SimpleName : ATypeNameExpression { public SimpleName (string name, Location l) : base (name, l) @@ -2721,7 +2783,7 @@ public override FullNamedExpression ResolveAsTypeOrNamespace (IMemberContext mc, return fne; } - if (Arity == 0 && Name == "dynamic" && !(mc is NamespaceContainer) && mc.Module.Compiler.Settings.Version > LanguageVersion.V_3) { + if (Arity == 0 && Name == "dynamic" && mc.Module.Compiler.Settings.Version > LanguageVersion.V_3) { if (!mc.Module.PredefinedAttributes.Dynamic.IsDefined) { mc.Module.Compiler.Report.Error (1980, Location, "Dynamic keyword requires `{0}' to be defined. Are you missing System.Core.dll assembly reference?", @@ -2744,6 +2806,36 @@ public bool IsPossibleTypeOrNamespace (IMemberContext mc) return mc.LookupNamespaceOrType (Name, Arity, LookupMode.Probing, loc) != null; } + public Expression LookupPackageLevelFunction (ResolveContext rc) + { + bool errorMode = false; + + FullNamedExpression fne = rc.LookupNamespaceOrType (Name + "_fn", 0, LookupMode.Normal, loc); +// if (fne == null || fne is Namespace) { + if (fne == null) { + return null; + } + + TypeSpec member_type = fne.ResolveAsType (rc); + if (member_type == null) { + return null; + } + + Expression e = MemberLookup (rc, errorMode, member_type, Name, Arity, MemberLookupRestrictions.InvocableOnly, loc); + if (e == null) + return null; + + var me = e as MemberExpr; + me = me.ResolveMemberAccess (rc, null, null); + + if (Arity > 0) { + targs.Resolve (rc, false); + me.SetTypeArguments (rc, targs); + } + + return me; + } + public override Expression LookupNameExpression (ResolveContext rc, MemberLookupRestrictions restrictions) { int lookup_arity = Arity; @@ -2752,25 +2844,57 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup Block current_block = rc.CurrentBlock; INamedBlockVariable variable = null; bool variable_found = false; + var name = Name; + + bool is_playscript = rc.FileType == SourceFileType.PlayScript; while (true) { + + // + // PlayScript: Perform member renaming + // + if (is_playscript) { + if (name == "toString") { + name = "ToString"; + } + } + // // Stage 1: binding to local variables or parameters // // LAMESPEC: It should take invocableOnly into account but that would break csc compatibility // if (current_block != null && lookup_arity == 0) { - if (current_block.ParametersBlock.TopBlock.GetLocalName (Name, current_block.Original, ref variable)) { + if (current_block.ParametersBlock.TopBlock.GetLocalName (name, current_block.Original, ref variable)) { + // In PlayScript we allow unassigned variables. It's technically bad coding but not much we can do about it. if (!variable.IsDeclared) { - // We found local name in accessible block but it's not - // initialized yet, maybe the user wanted to bind to something else - errorMode = true; - variable_found = true; + if (is_playscript && !rc.PsExtended) { + rc.Report.Warning(7156, 1, loc, "Use of local variable before declaration"); + if (variable is LocalVariable) { + var locVar = variable as LocalVariable; + if (locVar.Type == null && locVar.TypeExpr != null) { + locVar.DeclFlags |= LocalVariable.Flags.AsIgnoreMultiple; + locVar.Type = locVar.TypeExpr.ResolveAsType(rc); + } + } + e = variable.CreateReferenceExpression (rc, loc); + if (e != null) { + if (Arity > 0) + Error_TypeArgumentsCannotBeUsed (rc, "variable", name, loc); + + return e; + } + } else { + // We found local name in accessible block but it's not + // initialized yet, maybe the user wanted to bind to something else + errorMode = true; + variable_found = true; + } } else { e = variable.CreateReferenceExpression (rc, loc); if (e != null) { if (Arity > 0) - Error_TypeArgumentsCannotBeUsed (rc, "variable", Name, loc); + Error_TypeArgumentsCannotBeUsed (rc, "variable", name, loc); return e; } @@ -2783,7 +2907,7 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup // TypeSpec member_type = rc.CurrentType; for (; member_type != null; member_type = member_type.DeclaringType) { - e = MemberLookup (rc, errorMode, member_type, Name, lookup_arity, restrictions, loc); + e = MemberLookup (rc, errorMode, member_type, name, lookup_arity, restrictions, loc); if (e == null) continue; @@ -2801,7 +2925,7 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup if (me is FieldExpr || me is ConstantExpr || me is EventExpr || me is PropertyExpr) { rc.Report.Error (844, loc, "A local variable `{0}' cannot be used before it is declared. Consider renaming the local variable when it hides the member `{1}'", - Name, me.GetSignatureForError ()); + name, me.GetSignatureForError ()); } else { break; } @@ -2814,8 +2938,8 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup } else { // LAMESPEC: again, ignores InvocableOnly if (variable != null) { - rc.Report.SymbolRelatedToPreviousError (variable.Location, Name); - rc.Report.Error (135, loc, "`{0}' conflicts with a declaration in a child block", Name); + rc.Report.SymbolRelatedToPreviousError (variable.Location, name); + rc.Report.Error (135, loc, "`{0}' conflicts with a declaration in a child block", name); } // @@ -2851,30 +2975,82 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup return me; } + // + // Check for "Object" type if PlayScript + // + if (is_playscript && !variable_found) { + if (name == "Object") { + return new TypeExpression(rc.BuiltinTypes.Dynamic, loc); + } + } + // // Stage 3: Lookup nested types, namespaces and type parameters in the context // if ((restrictions & MemberLookupRestrictions.InvocableOnly) == 0 && !variable_found) { if (IsPossibleTypeOrNamespace (rc)) { if (variable != null) { - rc.Report.SymbolRelatedToPreviousError (variable.Location, Name); - rc.Report.Error (135, loc, "`{0}' conflicts with a declaration in a child block", Name); + rc.Report.SymbolRelatedToPreviousError (variable.Location, name); + rc.Report.Error (135, loc, "`{0}' conflicts with a declaration in a child block", name); } - return ResolveAsTypeOrNamespace (rc, false); + return ResolveAsTypeOrNamespace (rc, true); } } - var expr = NamespaceContainer.LookupStaticUsings (rc, Name, Arity, loc); - if (expr != null) { + // + // Stage 4: If PlayScript, lookup package level functions. + // + if (is_playscript && + (restrictions & MemberLookupRestrictions.InvocableOnly) != 0 && !variable_found) { + + // Is this a package level function? + Expression pkgFn = LookupPackageLevelFunction(rc); + if (pkgFn != null) + return pkgFn; + + // Is this a function style PlayScript cast. + if ((restrictions & MemberLookupRestrictions.AsTypeCast) != 0 && IsPossibleTypeOrNamespace (rc)) { + if (variable != null) { + rc.Report.SymbolRelatedToPreviousError (variable.Location, name); + rc.Report.Error (135, loc, "`{0}' conflicts with a declaration in a child block", name); + } + + return ResolveAsTypeOrNamespace (rc, true); + } + } + + // + // Stage 5: handle actionscript builtin uppercase names (Not keywords). + // + if (is_playscript && !variable_found) { + if (name == "NaN") { + return new DoubleLiteral (rc.BuiltinTypes, double.NaN, loc); + } else if (name == "Infinity") { + return new DoubleLiteral (rc.BuiltinTypes, double.PositiveInfinity, loc); + } else if (name == "String") { + return new TypeExpression(rc.BuiltinTypes.String, loc); + } else if (name == "Boolean") { + return new TypeExpression(rc.BuiltinTypes.Bool, loc); + } else if (name == "Number") { + return new TypeExpression(rc.BuiltinTypes.Double, loc); + } else if (name == "Function") { + return new TypeExpression(rc.BuiltinTypes.Delegate, loc); + } else if (name == "Class") { + return new TypeExpression(rc.BuiltinTypes.Type, loc); + } else if (name == "arguments" && rc is BlockContext) { + rc.Report.Error (7009, loc, "The `arguments' magic variable is not currently supported in PlayScript"); + return null; + } + } + + var mg = NamespaceContainer.LookupStaticUsings (rc, Name, Arity, loc); + if (mg != null) { if (Arity > 0) { targs.Resolve (rc, false); - - var me = expr as MemberExpr; - if (me != null) - me.SetTypeArguments (rc, targs); + mg.SetTypeArguments (rc, targs); } - return expr; + return mg; } if ((restrictions & MemberLookupRestrictions.NameOfExcluded) == 0 && Name == "nameof") @@ -2882,13 +3058,13 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup if (errorMode) { if (variable_found) { - rc.Report.Error (841, loc, "A local variable `{0}' cannot be used before it is declared", Name); + rc.Report.Error (841, loc, "A local variable `{0}' cannot be used before it is declared", name); } else { if (Arity > 0) { var tparams = rc.CurrentTypeParameters; if (tparams != null) { - if (tparams.Find (Name) != null) { - Error_TypeArgumentsCannotBeUsed (rc, "type parameter", Name, loc); + if (tparams.Find (name) != null) { + Error_TypeArgumentsCannotBeUsed (rc, "type parameter", name, loc); return null; } } @@ -2897,8 +3073,8 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup do { if (ct.MemberDefinition.TypeParametersCount > 0) { foreach (var ctp in ct.MemberDefinition.TypeParameters) { - if (ctp.Name == Name) { - Error_TypeArgumentsCannotBeUsed (rc, "type parameter", Name, loc); + if (ctp.Name == name) { + Error_TypeArgumentsCannotBeUsed (rc, "type parameter", name, loc); return null; } } @@ -2909,21 +3085,21 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup } if ((restrictions & MemberLookupRestrictions.InvocableOnly) == 0) { - e = rc.LookupNamespaceOrType (Name, Arity, LookupMode.IgnoreAccessibility, loc); + e = rc.LookupNamespaceOrType (name, Arity, LookupMode.IgnoreAccessibility, loc); if (e != null) { rc.Report.SymbolRelatedToPreviousError (e.Type); ErrorIsInaccesible (rc, e.GetSignatureForError (), loc); return e; } } else { - var me = MemberLookup (rc, false, rc.CurrentType, Name, Arity, restrictions & ~MemberLookupRestrictions.InvocableOnly, loc) as MemberExpr; + var me = MemberLookup (rc, false, rc.CurrentType, name, Arity, restrictions & ~MemberLookupRestrictions.InvocableOnly, loc) as MemberExpr; if (me != null) { Error_UnexpectedKind (rc, me, "method group", me.KindName, loc); return ErrorExpression.Instance; } } - e = rc.LookupNamespaceOrType (Name, -System.Math.Max (1, Arity), LookupMode.Probing, loc); + e = rc.LookupNamespaceOrType (name, -System.Math.Max (1, Arity), LookupMode.Probing, loc); if (e != null) { if (e.Type.Arity != Arity && (restrictions & MemberLookupRestrictions.IgnoreArity) == 0) { Error_TypeArgumentsCannotBeUsed (rc, e.Type, loc); @@ -2946,7 +3122,7 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup } if (rc.Module.Evaluator != null) { - var fi = rc.Module.Evaluator.LookupField (Name); + var fi = rc.Module.Evaluator.LookupField (name); if (fi != null) return new FieldExpr (fi.Item1, loc); } @@ -2963,9 +3139,12 @@ Expression SimpleNameResolve (ResolveContext ec, Expression right_side) if (e == null) return null; - if (e is FullNamedExpression && e.eclass != ExprClass.Unresolved) { - Error_UnexpectedKind (ec, e, "variable", e.ExprClassName, loc); - return e; + // Skip : error CS0118: 'xxx' is a `type' but a `variable' was expected + if (ec.FileType != SourceFileType.PlayScript) { + if (e is FullNamedExpression && e.eclass != ExprClass.Unresolved) { + Error_UnexpectedKind (ec, e, "variable", e.ExprClassName, loc); + return e; + } } if (right_side != null) { @@ -2976,7 +3155,7 @@ Expression SimpleNameResolve (ResolveContext ec, Expression right_side) return e; } - + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -2987,7 +3166,7 @@ public override object Accept (StructuralVisitor visitor) /// Represents a namespace or a type. The name of the class was inspired by /// section 10.8.1 (Fully Qualified Names). /// - public abstract class FullNamedExpression : Expression + public abstract partial class FullNamedExpression : Expression { protected override void CloneTo (CloneContext clonectx, Expression target) { @@ -3108,11 +3287,6 @@ public sealed override TypeSpec ResolveAsType (IMemberContext mc, bool allowUnbo { return type; } - - public override object Accept (StructuralVisitor visitor) - { - return visitor.Visit (this); - } } public class NamespaceExpression : FullNamedExpression @@ -3242,6 +3416,12 @@ public abstract class MemberExpr : Expression, OverloadResolver.IInstanceQualifi // public Expression InstanceExpression; + // + // Allow lookup to specify additional overload restrictions (PlayScript needs this to pass the + // StaticOnly/InstanceOnly restrictions). + // + public OverloadResolver.Restrictions OverloadRestrictions; + /// /// The name of this member. /// @@ -3559,7 +3739,7 @@ bool ResolveInstanceExpressionCore (ResolveContext rc, Expression rhs) t = t.DeclaringType; } while (t != null); - } else { + } else if (rc.FileType != SourceFileType.PlayScript) { var runtime_expr = InstanceExpression as RuntimeValueExpression; if (runtime_expr == null || !runtime_expr.IsSuggestionOnly) { rc.Report.Error (176, loc, @@ -3755,16 +3935,12 @@ public static bool IsExtensionTypeCompatible (TypeSpec argType, TypeSpec extensi // return argType == extensionType || TypeSpecComparer.IsEqual (argType, extensionType) || - Convert.ImplicitReferenceConversionExists (argType, extensionType, false) || + Convert.ImplicitReferenceConversionExists (argType, extensionType, false, null, false) || Convert.ImplicitBoxingConversion (null, argType, extensionType) != null; } public bool ResolveNameOf (ResolveContext rc, MemberAccess ma) { - rc.Report.Error (8093, ma.Location, "An argument to nameof operator cannot be extension method group"); - - // Not included in C#6 - /* ExtensionExpression = ExtensionExpression.Resolve (rc); if (ExtensionExpression == null) return false; @@ -3778,7 +3954,6 @@ public bool ResolveNameOf (ResolveContext rc, MemberAccess ma) // TODO: Scan full hierarchy ma.Error_TypeDoesNotContainDefinition (rc, argType, ma.Name); - */ return false; } @@ -3824,6 +3999,18 @@ public override MethodGroupExpr OverloadResolve (ResolveContext ec, ref Argument return this; } + public override Expression DoResolveLValue (ResolveContext rc, Expression right_side) + { + // Handle extension setters for PlayScript + if (rc.FileType == SourceFileType.PlayScript) { + var args = new Arguments(1); + args.Add(new Argument(right_side)); + return new Invocation(new MemberAccess(ExtensionExpression, Name, type_arguments, Location), args).Resolve (rc); + } else { + return base.DoResolveLValue (rc, right_side); + } + } + #region IErrorHandler Members bool OverloadResolver.IErrorHandler.AmbiguousCandidates (ResolveContext rc, MemberSpec best, MemberSpec ambiguous) @@ -3865,7 +4052,7 @@ bool OverloadResolver.IErrorHandler.TypeInferenceFailed (ResolveContext rc, Memb /// MethodGroupExpr represents a group of method candidates which /// can be resolved to the best method overload /// - public class MethodGroupExpr : MemberExpr, OverloadResolver.IBaseMembersProvider + public partial class MethodGroupExpr : MemberExpr, OverloadResolver.IBaseMembersProvider { static readonly MemberSpec[] Excluded = new MemberSpec[0]; @@ -4248,7 +4435,9 @@ public enum Restrictions CovariantDelegate = 1 << 2, NoBaseMembers = 1 << 3, BaseMembersIncluded = 1 << 4, - GetEnumeratorLookup = 1 << 5 + GetEnumeratorLookup = 1 << 5, + StaticOnly = 1 << 6, // PlayScript - we need to be able to filter by static or instance, as we can have both with the same name. + InstanceOnly = 1 << 7, } public interface IBaseMembersProvider @@ -4585,8 +4774,9 @@ public static int BetterTypeConversion (ResolveContext ec, TypeSpec p, TypeSpec Expression p_tmp = new EmptyExpression (p); Expression q_tmp = new EmptyExpression (q); - bool p_to_q = Convert.ImplicitConversionExists (ec, p_tmp, q); - bool q_to_p = Convert.ImplicitConversionExists (ec, q_tmp, p); + // PlayScript - upconvert_only = true + bool p_to_q = Convert.ImplicitConversionExists (ec, p_tmp, q, true); + bool q_to_p = Convert.ImplicitConversionExists (ec, q_tmp, p, true); if (p_to_q && !q_to_p) return 1; @@ -4772,6 +4962,16 @@ static bool BetterFunction (ResolveContext ec, Arguments args, MemberSpec candid if (specific_at_least_once) return true; + if (ec.FileType == SourceFileType.PlayScript) { + // if one is static and one is not, choose the non static version + if (candidate.IsStatic != best.IsStatic) { + if (!candidate.IsStatic) { + // use the candidate because it is non-static + return true; + } + } + } + return false; } @@ -5351,6 +5551,14 @@ public T ResolveMember (ResolveContext rc, ref Arguments args) where T : Memb instance_qualifier != null && !instance_qualifier.CheckProtectedMemberAccess (rc, member)) { continue; } + + // PlayScript - We need to be able to filter by isntance or static. Playscript can have both with the same name. + if ((restrictions & Restrictions.InstanceOnly) != 0 && (member.Modifiers & Modifiers.STATIC) != 0) + continue; + + // PlayScript - We need to be able to filter by isntance or static. Playscript can have both with the same name. + if ((restrictions & Restrictions.StaticOnly) != 0 && (member.Modifiers & Modifiers.STATIC) == 0) + continue; } IParametersMember pm = member as IParametersMember; @@ -5358,7 +5566,7 @@ public T ResolveMember (ResolveContext rc, ref Arguments args) where T : Memb // // Will use it later to report ambiguity between best method and invocable member // - if (Invocation.IsMemberInvocable (member)) + if (Invocation.IsMemberInvocable (member, rc)) invocable_member = member; continue; @@ -5881,7 +6089,7 @@ bool VerifyArguments (ResolveContext ec, ref Arguments args, MemberSpec member, if (a.Expr.Type == pt || TypeSpecComparer.IsEqual (a.Expr.Type, pt)) { conv = a.Expr; } else { - conv = Convert.ImplicitReferenceConversion (a.Expr, pt, false); + conv = Convert.ImplicitReferenceConversion (a.Expr, pt, false, ec, false); if (conv == null) conv = Convert.ImplicitBoxingConversion (a.Expr, a.Expr.Type, pt); } @@ -6037,7 +6245,7 @@ public override void SetTypeArguments (ResolveContext ec, TypeArguments ta) // // Fully resolved expression that references a Field // - public class FieldExpr : MemberExpr, IDynamicAssign, IMemoryLocation, IVariableReference + public partial class FieldExpr : MemberExpr, IDynamicAssign, IMemoryLocation, IVariableReference { protected FieldSpec spec; VariableInfo variable_info; @@ -6654,7 +6862,7 @@ public override void SetTypeArguments (ResolveContext ec, TypeArguments ta) // This is not an LValue because we need to re-write the expression. We // can not take data from the stack and store it. // - sealed class PropertyExpr : PropertyOrIndexerExpr + sealed partial class PropertyExpr : PropertyOrIndexerExpr { Arguments arguments; FieldExpr backing_field; @@ -7022,7 +7230,7 @@ public override void SetTypeArguments (ResolveContext ec, TypeArguments ta) } } - abstract class PropertyOrIndexerExpr : MemberExpr, IDynamicAssign where T : PropertySpec + abstract partial class PropertyOrIndexerExpr : MemberExpr, IDynamicAssign where T : PropertySpec { // getter and setter can be different for base calls MethodSpec getter, setter; @@ -7200,11 +7408,16 @@ protected override FieldExpr EmitToFieldSource (EmitContext ec) bool ResolveGetter (ResolveContext rc) { - if (!best_candidate.HasGet) { + if (best_candidate == null || !best_candidate.HasGet) { if (InstanceExpression != EmptyExpression.Null) { - rc.Report.SymbolRelatedToPreviousError (best_candidate); - rc.Report.Error (154, loc, "The property or indexer `{0}' cannot be used in this context because it lacks the `get' accessor", - best_candidate.GetSignatureForError ()); + MemberSpec ms = (MemberSpec)best_candidate; + if (ms != null) { + rc.Report.SymbolRelatedToPreviousError (ms); + rc.Report.Error (154, loc, "The property or indexer `{0}' cannot be used in this context because it lacks the `get' accessor", + ms.GetSignatureForError ()); + } else if (rc.FileType == SourceFileType.PlayScript) { + ReportNoIndexerError (rc); + } return false; } } else if (!best_candidate.Get.IsAccessible (rc) || !best_candidate.Get.DeclaringType.IsAccessible (rc)) { @@ -7230,6 +7443,10 @@ protected virtual bool ResolveAutopropertyAssignment (ResolveContext rc, Express { return false; } + + private void ReportNoIndexerError(ResolveContext rc) { + rc.Report.Error (7163, loc, "Target is not dynamic class Object or Dictionary and there is no user defined accessor"); + } } /// @@ -7419,7 +7636,7 @@ public override void SetTypeArguments (ResolveContext ec, TypeArguments ta) } } - public class TemporaryVariableReference : VariableReference + public partial class TemporaryVariableReference : VariableReference { public class Declarator : Statement { @@ -7574,6 +7791,15 @@ public bool InferType (ResolveContext ec, Expression right_side) return false; } + // + // We provide a mechanism to use single precision floats instead of + // doubles for the PlayScript Number type via the [NumberIsFloat] + // attribute. For VarExpr types we must do the conversion from double + // to float here. + // + if (ec.PsNumberIsFloat && type.BuiltinType == BuiltinTypeSpec.Type.Double) + type = ec.BuiltinTypes.Float; + eclass = ExprClass.Variable; return true; } @@ -7586,40 +7812,40 @@ protected override void Error_TypeOrNamespaceNotFound (IMemberContext ec) ec.Module.Compiler.Report.Error (825, loc, "The contextual keyword `var' may only appear within a local variable declaration"); } } - + public class InvalidStatementExpression : Statement { public Expression Expression { get; private set; } - + public InvalidStatementExpression (Expression expr) { this.Expression = expr; } - + public override void Emit (EmitContext ec) { // nothing } - + protected override void DoEmit (EmitContext ec) { // nothing } - + protected override void CloneTo (CloneContext clonectx, Statement target) { // nothing } - - public override ICSharpCode.NRefactory.MonoCSharp.Expression CreateExpressionTree (ResolveContext ec) + + public override ICSharpCode.NRefactory.MonoPlayScript.Expression CreateExpressionTree (ResolveContext ec) { return null; } - - public override object Accept (ICSharpCode.NRefactory.MonoCSharp.StructuralVisitor visitor) + + public override object Accept (ICSharpCode.NRefactory.MonoPlayScript.StructuralVisitor visitor) { return visitor.Visit (this); } @@ -7629,4 +7855,5 @@ protected override bool DoFlowAnalysis(FlowAnalysisContext fc) return false; } } + } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/enum.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/enum.cs index f1ab24490..d3a04ee92 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/enum.cs @@ -22,7 +22,7 @@ using System.Reflection; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public class EnumMember : Const { @@ -75,7 +75,7 @@ public override Constant ConvertInitializer (ResolveContext rc, Constant expr) } if (expr == null) - expr = New.Constantify (underlying, Location); + expr = New.Constantify (underlying, Location, rc.FileType); return new EnumConstant (expr, MemberType); } @@ -133,7 +133,7 @@ protected override Expression DoResolve (ResolveContext rc) { // We are the first member if (prev == null) { - return New.Constantify (current.Parent.Definition, Location); + return New.Constantify (current.Parent.Definition, Location, rc.FileType); } var c = ((ConstSpec) prev.Spec).GetConstant (rc) as EnumConstant; @@ -144,7 +144,7 @@ protected override Expression DoResolve (ResolveContext rc) "The enumerator value `{0}' is outside the range of enumerator underlying type `{1}'", current.GetSignatureForError (), ((Enum) current.Parent).UnderlyingType.GetSignatureForError ()); - return New.Constantify (current.Parent.Definition, current.Location); + return New.Constantify (current.Parent.Definition, current.Location, rc.FileType); } } @@ -205,6 +205,19 @@ public TypeSpec UnderlyingType { public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && Members != null && Members.Count > 0) { + foreach (var member in Members) { + if (visitor.Continue) + member.Accept (visitor); + } + } + } } public void AddEnumMember (EnumMember em) @@ -273,7 +286,7 @@ protected override TypeSpec[] ResolveBaseTypes (out FullNamedExpression base_cla base_class = null; return null; } - + protected override bool VerifyClsCompliance () { if (!base.VerifyClsCompliance ()) @@ -289,7 +302,7 @@ protected override bool VerifyClsCompliance () } return true; - } + } } class EnumSpec : TypeSpec @@ -314,6 +327,14 @@ public TypeSpec UnderlyingType { } } + public override bool IsNumeric { + get { + if (underlying != null) + return underlying.IsNumeric; + return base.IsNumeric; + } + } + public static TypeSpec GetUnderlyingType (TypeSpec t) { return ((EnumSpec) t.GetDefinition ()).UnderlyingType; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/eval.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/eval.cs index 17f29cc10..31244eb56 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/eval.cs @@ -20,8 +20,10 @@ using System.IO; using System.Text; using System.Linq; +using Mono.CSharp; +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { /// @@ -103,6 +105,7 @@ void Init () { var loader = new DynamicLoader (importer, ctx); + CompilerCallableEntryPoint.Reset (); RootContext.ToplevelTypes = module; //var startup_files = new List (); @@ -131,6 +134,8 @@ void ParseStartupFiles () void Reset () { + CompilerCallableEntryPoint.PartialReset (); + Location.Reset (); Location.Initialize (ctx.SourceFiles); } @@ -159,7 +164,7 @@ void Reset () /// /// This is the base class that will host the code /// executed by the Evaluator. By default - /// this is the ICSharpCode.NRefactory.MonoCSharp.InteractiveBase class + /// this is the Mono.CSharp.InteractiveBase class /// which is useful for interactive use. /// /// By changing this property you can control the @@ -235,8 +240,11 @@ public string Compile (string input, out CompiledMethod compiled) } bool partial_input; +#if !PLAYSCRIPT_REPL CSharpParser parser = ParseString (ParseMode.Silent, input, out partial_input); - +#else + PlayScriptParser parser = ParseString (ParseMode.Silent, input, out partial_input); +#endif // Terse mode, try to provide the trailing semicolon automatically. if (parser == null && Terse && partial_input){ bool ignore; @@ -399,7 +407,12 @@ public string [] GetCompletions (string input, out string prefix) Init (); bool partial_input; +#if !PLAYSCRIPT_REPL CSharpParser parser = ParseString (ParseMode.GetCompletions, input, out partial_input); +#else + var parser = ParseString (ParseMode.GetCompletions, input, out partial_input); + parser.parsing_playscript = source_file.PsExtended; +#endif if (parser == null){ return null; } @@ -610,7 +623,12 @@ InputKind ToplevelOrStatement (SeekableStreamReader seekable) // @partial_input: if @silent is true, then it returns whether the // parsed expression was partial, and more data is needed // + //CSharpParser ParseString (ParseMode mode, string input, out bool partial_input) +#if !PLAYSCRIPT_REPL CSharpParser ParseString (ParseMode mode, string input, out bool partial_input) +#else + PlayScriptParser ParseString (ParseMode mode, string input, out bool partial_input) +#endif { partial_input = false; Reset (); @@ -637,8 +655,13 @@ CSharpParser ParseString (ParseMode mode, string input, out bool partial_input) seekable.Position = 0; source_file.DeclarationFound = false; - CSharpParser parser = new CSharpParser (seekable, source_file, new ParserSession ()); - + var session = new ParserSession (); +#if !PLAYSCRIPT_REPL + CSharpParser parser = new CSharpParser (seekable, source_file, session); +#else + var parser = new PlayScriptParser (seekable, source_file, session); + parser.parsing_playscript = source_file.PsExtended; +#endif if (kind == InputKind.StatementOrExpression){ parser.Lexer.putback_char = Tokenizer.EvalStatementParserCharacter; parser.Lexer.parsing_block++; @@ -657,6 +680,10 @@ CSharpParser ParseString (ParseMode mode, string input, out bool partial_input) try { parser.parse (); + // PlayScript needs to add generated code after parsing. + if (ctx.Settings.PsOnlyMode) { + CodeGenerator.GenerateCode(module, session, ctx.Report); + } } finally { if (ctx.Report.Errors != 0){ if (mode != ParseMode.ReportErrors && parser.UnexpectedEOF) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/expression.cs similarity index 82% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/expression.cs index 01a3abddf..a5365565c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/expression.cs @@ -14,7 +14,6 @@ using System.Collections.Generic; using System.Linq; using SLE = System.Linq.Expressions; -using System.Text; #if STATIC using MetaType = IKVM.Reflection.Type; @@ -26,7 +25,9 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +using Mono.PlayScript; + +namespace ICSharpCode.NRefactory.MonoPlayScript { // // This is an user operator expression, automatically created during @@ -107,9 +108,17 @@ public ParenthesizedExpression (Expression expr, Location loc) this.loc = loc; } + private TypeSpec typeHint; + protected override Expression DoResolveWithTypeHint(ResolveContext rc, TypeSpec typeHint) + { + // store type hint + this.typeHint = typeHint; + return this.Resolve(rc); + } + protected override Expression DoResolve (ResolveContext ec) { - var res = expr.Resolve (ec); + var res = expr.ResolveWithTypeHint (ec, typeHint); var constant = res as Constant; if (constant != null && constant.IsLiteral) return Constant.CreateConstantFromValue (res.Type, constant.GetValue (), expr.Location); @@ -124,18 +133,29 @@ public override Expression DoResolveLValue (ResolveContext ec, Expression right_ public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } // // Unary implements unary expressions. // - public class Unary : Expression + public partial class Unary : Expression { public enum Operator : byte { UnaryPlus, UnaryNegation, LogicalNot, OnesComplement, - AddressOf, TOP + AddressOf, AsE4xAttribute, TOP } public readonly Operator Oper; @@ -363,20 +383,27 @@ protected virtual Expression ResolveOperator (ResolveContext ec, Expression expr if (Oper == Operator.OnesComplement && expr_type.IsEnum) return ResolveEnumOperator (ec, expr, predefined); + // + // Handle !object expressions in PlayScript + // + if (ec.FileType == SourceFileType.PlayScript && Oper == Operator.LogicalNot && !expr.Type.IsStruct) { + return new Binary(Binary.Operator.Equality, expr, new NullLiteral(expr.Location)).Resolve(ec); + } + return ResolveUserType (ec, expr, predefined); } protected virtual Expression ResolveEnumOperator (ResolveContext ec, Expression expr, TypeSpec[] predefined) { TypeSpec underlying_type = EnumSpec.GetUnderlyingType (expr.Type); - Expression best_expr = ResolvePrimitivePredefinedType (ec, EmptyCast.Create (expr, underlying_type), predefined); + Expression best_expr = ResolvePrimitivePredefinedType (ec, EmptyCast.Create (expr, underlying_type, ec), predefined); if (best_expr == null) return null; Expr = best_expr; enum_conversion = Binary.GetEnumResultCast (underlying_type); type = expr.Type; - return EmptyCast.Create (this, type); + return EmptyCast.Create (this, type, ec); } public override bool ContainsEmitWithAwait () @@ -475,12 +502,16 @@ static Expression DoNumericPromotion (ResolveContext rc, Operator op, Expression case BuiltinTypeSpec.Type.Short: case BuiltinTypeSpec.Type.UShort: case BuiltinTypeSpec.Type.Char: - return Convert.ImplicitNumericConversion (expr, rc.BuiltinTypes.Int); + return Convert.ImplicitNumericConversion (expr, rc.BuiltinTypes.Int, rc, false); } } if (op == Operator.UnaryNegation && expr_type.BuiltinType == BuiltinTypeSpec.Type.UInt) - return Convert.ImplicitNumericConversion (expr, rc.BuiltinTypes.Long); + return Convert.ImplicitNumericConversion (expr, rc.BuiltinTypes.Long, rc, false); + + // PlayScript - implicit conversion of numeric types to bool + if (rc.FileType == SourceFileType.PlayScript && op == Operator.LogicalNot && expr.Type != rc.BuiltinTypes.Bool) + return Convert.ImplicitNumericConversion (expr, rc.BuiltinTypes.Bool, rc, false); return expr; } @@ -496,9 +527,16 @@ protected override Expression DoResolve (ResolveContext ec) return null; if (Expr.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { - Arguments args = new Arguments (1); - args.Add (new Argument (Expr)); - return new DynamicUnaryConversion (GetOperatorExpressionTypeName (), args, loc).Resolve (ec); + if (ec.FileType == SourceFileType.PlayScript && Oper == Operator.LogicalNot) { + // PlayScript: Call the "Boolean()" static method to convert a dynamic to a bool. EXPENSIVE, but hey.. + Arguments args = new Arguments (1); + args.Add (new Argument(EmptyCast.RemoveDynamic(ec, Expr))); ec.Report.Warning (7164, 1, loc, "Expensive reference conversion to bool"); + Expr = new Invocation(new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, loc), "Boolean_fn", loc), "Boolean", loc), args).Resolve (ec); + } else { + Arguments args = new Arguments (1); + args.Add (new Argument (Expr)); + return new DynamicUnaryConversion (GetOperatorExpressionTypeName (), args, loc).Resolve (ec); + } } if (Expr.Type.IsNullableType) @@ -510,8 +548,18 @@ protected override Expression DoResolve (ResolveContext ec) Constant cexpr = Expr as Constant; if (cexpr != null) { cexpr = TryReduceConstant (ec, cexpr); - if (cexpr != null) + if (cexpr != null) { + // + // We provide a mechanism to use single precision floats instead of + // doubles for the PlayScript Number type via the [NumberIsFloat] + // attribute. By casting doubles to floats here, we allow the constant + // folding to do its thing and remove any unnecessary coversions. + // + if (ec.PsNumberIsFloat && cexpr.Type.BuiltinType == BuiltinTypeSpec.Type.Double) + return new Cast (new TypeExpression (ec.BuiltinTypes.Float, cexpr.Location), cexpr, cexpr.Location).Resolve (ec); + return cexpr; + } } Expression expr = ResolveOperator (ec, Expr); @@ -759,16 +807,16 @@ Expression ResolvePrimitivePredefinedType (ResolveContext rc, Expression expr, T // protected virtual Expression ResolveUserOperator (ResolveContext ec, Expression expr) { - MonoCSharp.Operator.OpType op_type; + ICSharpCode.NRefactory.MonoPlayScript.Operator.OpType op_type; switch (Oper) { case Operator.LogicalNot: - op_type = MonoCSharp.Operator.OpType.LogicalNot; break; + op_type = ICSharpCode.NRefactory.MonoPlayScript.Operator.OpType.LogicalNot; break; case Operator.OnesComplement: - op_type = MonoCSharp.Operator.OpType.OnesComplement; break; + op_type = ICSharpCode.NRefactory.MonoPlayScript.Operator.OpType.OnesComplement; break; case Operator.UnaryNegation: - op_type = MonoCSharp.Operator.OpType.UnaryNegation; break; + op_type = ICSharpCode.NRefactory.MonoPlayScript.Operator.OpType.UnaryNegation; break; case Operator.UnaryPlus: - op_type = MonoCSharp.Operator.OpType.UnaryPlus; break; + op_type = ICSharpCode.NRefactory.MonoPlayScript.Operator.OpType.UnaryPlus; break; default: throw new InternalErrorException (Oper.ToString ()); } @@ -861,7 +909,18 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -996,7 +1055,18 @@ protected override Expression DoResolve (ResolveContext ec) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -1014,7 +1084,7 @@ public override object Accept (StructuralVisitor visitor) /// classes (indexers require temporary access; overloaded require method) /// /// - public class UnaryMutator : ExpressionStatement + public partial class UnaryMutator : ExpressionStatement { class DynamicPostMutator : Expression, IAssignMethod { @@ -1097,7 +1167,7 @@ public enum Mode : byte { // Holds the real operation Expression operation; - + public UnaryMutator (Mode m, Expression e, Location loc) { mode = m; @@ -1402,7 +1472,18 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -1415,6 +1496,9 @@ public abstract class Probe : Expression public Expression ProbeType; protected Expression expr; protected TypeSpec probe_type_expr; + + // ActionScript type expressions can be "Type" objects too. + protected Expression as_probe_type_expr; protected Probe (Expression expr, Expression probe_type, Location l) { @@ -1436,24 +1520,53 @@ public override bool ContainsEmitWithAwait () protected Expression ResolveCommon (ResolveContext rc) { + // NOTE: We need to distinguish between types and expressions which return a Class object. + if (rc.IsPlayScript && (this is Is || this is As)) { + as_probe_type_expr = ProbeType.Resolve (rc); + if (as_probe_type_expr is TypeExpr || as_probe_type_expr is TypeOf) { + // Convert typeof to actual type if somebody actually wrote "typeof" in the code. + if (as_probe_type_expr is TypeOf) { + probe_type_expr = ((TypeOf)as_probe_type_expr).TypeExpression.Type; + } else { + probe_type_expr = as_probe_type_expr.ResolveAsType (rc); + } + // Resolving to actual concrete types above will cause an Object type to be converted to an Expando. We + // have to reverse this. + if (probe_type_expr == rc.Module.PredefinedTypes.AsExpandoObject.Resolve()) { + probe_type_expr = rc.BuiltinTypes.Dynamic; + } + as_probe_type_expr = null; + } else if (as_probe_type_expr.Type.BuiltinType != BuiltinTypeSpec.Type.Type && + as_probe_type_expr.Type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { + rc.Report.Error (7345, loc, "The `{0}' operator cannot be applied to an expression which is not a Class type", + OperatorName); + } + } + expr = expr.Resolve (rc); if (expr == null) return null; - ResolveProbeType (rc); - if (probe_type_expr == null) - return this; - - if (probe_type_expr.IsStatic) { - rc.Report.Error (7023, loc, "The second operand of `is' or `as' operator cannot be static type `{0}'", - probe_type_expr.GetSignatureForError ()); - return null; + // PlayScript : Avoid - error CS0246: The type or namespace name `expectedType' could not be found. + if (!rc.IsPlayScript) { + ResolveProbeType (rc); + if (probe_type_expr == null) + return this; } - - if (expr.Type.IsPointer || probe_type_expr.IsPointer) { - rc.Report.Error (244, loc, "The `{0}' operator cannot be applied to an operand of pointer type", - OperatorName); - return null; + + // PlayScript : probe_type_expr can be null + if (probe_type_expr != null) { + if (probe_type_expr.IsStatic) { + rc.Report.Error (7023, loc, "The second operand of `is' or `as' operator cannot be static type `{0}'", + probe_type_expr.GetSignatureForError ()); + return null; + } + + if (expr.Type.IsPointer || probe_type_expr.IsPointer) { + rc.Report.Error (244, loc, "The `{0}' operator cannot be applied to an operand of pointer type", + OperatorName); + return null; + } } if (expr.Type == InternalType.AnonymousMethod || expr.Type == InternalType.MethodGroup) { @@ -1694,7 +1807,7 @@ protected override Expression DoResolve (ResolveContext rc) type = rc.BuiltinTypes.Bool; eclass = ExprClass.Value; - if (probe_type_expr == null) + if (!rc.IsPlayScript && probe_type_expr == null) return ResolveMatchingExpression (rc); var res = ResolveResultExpression (rc); @@ -1832,6 +1945,25 @@ Expression ResolveResultExpression (ResolveContext ec) TypeSpec d = expr.Type; bool d_is_nullable = false; + +// if (base.DoResolve (ec) == null) +// return null; +// + // Check to see if right side is an expression which returns a Class (Type). If so, generate + // type check code. + if (ec.IsPlayScript && as_probe_type_expr != null) { + var arguments = new Arguments(2); + arguments.Add (new Argument(expr)); + arguments.Add (new Argument(as_probe_type_expr)); + return new Invocation (new MemberAccess(new MemberAccess(new SimpleName("PlayScript", this.loc), "Support", this.loc), "IsCheck", this.loc), arguments).Resolve (ec); + } + +// ======= +// +//>>>>>>> 121766abb99b75a30d0f508d24979bed54c9b4a9 +// TypeSpec d = expr.Type; +// bool d_is_nullable = false; + // // If E is a method group or the null literal, or if the type of E is a reference // type or a nullable type and the value of E is null, the result is false @@ -1880,7 +2012,7 @@ Expression ResolveResultExpression (ResolveContext ec) // // An unboxing conversion exists // - if (Convert.ExplicitReferenceConversionExists (d, t)) + if (Convert.ExplicitReferenceConversionExists (d, t, ec)) return this; // @@ -1912,7 +2044,13 @@ Expression ResolveResultExpression (ResolveContext ec) return CreateConstantResult (ec, true); } } else { - if (Convert.ImplicitReferenceConversionExists (d, t)) { + if (Convert.ImplicitReferenceConversionExists (d, t, ec, false)) { + if (ec.IsPlayScript) { + if (d.MemberDefinition.IsImported && d.BuiltinType != BuiltinTypeSpec.Type.None) { + return this; + } + } + var c = expr as Constant; if (c != null) return CreateConstantResult (ec, !c.IsNull); @@ -1927,7 +2065,6 @@ Expression ResolveResultExpression (ResolveContext ec) if (d.BuiltinType == BuiltinTypeSpec.Type.Dynamic) return this; - // // Turn is check into simple null check for implicitly convertible reference types // @@ -1936,7 +2073,7 @@ Expression ResolveResultExpression (ResolveContext ec) this).Resolve (ec); } - if (Convert.ExplicitReferenceConversionExists (d, t)) + if (Convert.ExplicitReferenceConversionExists (d, t, ec)) return this; // @@ -1969,7 +2106,18 @@ Expression ResolveGenericParameter (ResolveContext ec, TypeSpec d, TypeParameter public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -2344,11 +2492,27 @@ protected override Expression DoResolve (ResolveContext ec) if (ResolveCommon (ec) == null) return null; + if (ec.IsPlayScript && as_probe_type_expr != null && !(as_probe_type_expr is TypeExpr)) { + var arguments = new Arguments (2); + arguments.Add (new Argument (expr)); + arguments.Add (new Argument (as_probe_type_expr)); + return new Invocation (new MemberAccess (new MemberAccess (new SimpleName ("PlayScript", loc), "Support", loc), "DynamicAs", loc), arguments).Resolve (ec); + } + type = probe_type_expr; eclass = ExprClass.Value; TypeSpec etype = expr.Type; - if (!TypeSpec.IsReferenceType (type) && !type.IsNullableType) { + bool isRefType = TypeSpec.IsReferenceType (type) || type.IsNullableType; + + // Always "Object" for dynamic type when evaluating PlayScript AS operator (not dynamic CONV call). + if (ec.IsPlayScript && etype.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + expr = new Cast(new TypeExpression(ec.BuiltinTypes.Object, expr.Location), expr, expr.Location).Resolve(ec); + etype = ec.BuiltinTypes.Object; + } + + // Fail if conv type is not ref type or nullable (but allow if PlayScript) + if (!ec.IsPlayScript && !isRefType) { if (TypeManager.IsGenericParameter (type)) { ec.Report.Error (413, loc, "The `as' operator cannot be used with a non-reference type parameter `{0}'. Consider adding `class' or a reference type constraint", @@ -2365,27 +2529,62 @@ protected override Expression DoResolve (ResolveContext ec) return Nullable.LiftedNull.CreateFromExpression (ec, this); } - // If the compile-time type of E is dynamic, unlike the cast operator the as operator is not dynamically bound - if (etype.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { - return this; - } + // Do ref type AS conversion (always true for CSharp) + if (isRefType) { + + // If the compile-time type of E is dynamic, unlike the cast operator the as operator is not dynamically bound + if (etype.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + return this; + } + + // Special case for as check with strings in PlayScript, since there is an implicit + // conversion from everything to string. + if (ec.IsPlayScript && type.BuiltinType == BuiltinTypeSpec.Type.String) { + var arguments = new Arguments (2); + arguments.Add (new Argument (expr)); + arguments.Add (new Argument (new TypeOf (new TypeExpression (ec.BuiltinTypes.String, expr.Location), expr.Location))); + return new Invocation (new MemberAccess (new MemberAccess (new SimpleName ("PlayScript", loc), "Support", loc), "DynamicAs", loc), arguments).Resolve (ec); + } - Expression e = Convert.ImplicitConversionStandard (ec, expr, type, loc); - if (e != null) { - e = EmptyCast.Create (e, type); - return ReducedExpression.Create (e, this).Resolve (ec); - } + Expression e = Convert.ImplicitConversionStandard (ec, expr, type, loc); + if (e != null) { + e = EmptyCast.Create (e, type, ec); + return ReducedExpression.Create (e, this).Resolve (ec); + } - if (Convert.ExplicitReferenceConversionExists (etype, type)){ - if (TypeManager.IsGenericParameter (etype)) + if (isRefType && Convert.ExplicitReferenceConversionExists (etype, type, ec)) { + if (TypeManager.IsGenericParameter (etype)) + expr = new BoxedCast (expr, etype); + + return this; + } + + if (InflatedTypeSpec.ContainsTypeParameter (etype) || InflatedTypeSpec.ContainsTypeParameter (type)) { expr = new BoxedCast (expr, etype); + return this; + } - return this; - } + } else { +//FIXME + // Do PlayScript AS cast.. - if (InflatedTypeSpec.ContainsTypeParameter (etype) || InflatedTypeSpec.ContainsTypeParameter (type)) { - expr = new BoxedCast (expr, etype); - return this; + bool eIsRefType = TypeSpec.IsReferenceType (etype) || etype.IsNullableType; + + if (eIsRefType) { + + // Copy ref expression to a temporary.. do conditional. + var local = TemporaryVariableReference.Create (etype, ec.CurrentBlock, expr.Location); + var comp_exp = new Binary(Binary.Operator.Equality, new CompilerAssign(local, expr, expr.Location), new NullLiteral(expr.Location)); + var def_const = New.Constantify(type, expr.Location, ec.FileType); + var cast_exp = new Cast(new TypeExpression(type, expr.Location), local, expr.Location); + + return new Conditional(comp_exp, def_const, cast_exp, expr.Location).Resolve(ec); + + } else { + + // Just do normal cast if not a ref type. + return new Cast(new TypeExpression(type, expr.Location), expr, expr.Location).Resolve (ec); + } } if (etype != InternalType.ErrorType) { @@ -2398,7 +2597,18 @@ protected override Expression DoResolve (ResolveContext ec) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -2449,7 +2659,7 @@ protected override Expression DoResolve (ResolveContext ec) var res = Convert.ExplicitConversion (ec, expr, type, loc); if (res == expr) - return EmptyCast.Create (res, type); + return EmptyCast.Create (res, type, ec); return res; } @@ -2464,7 +2674,18 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -2634,12 +2855,12 @@ protected override Expression DoResolve (ResolveContext ec) } if (type.IsPointer) - return new NullLiteral (Location).ConvertImplicitly (type); + return new NullLiteral (Location).ConvertImplicitly (type, ec); if (TypeSpec.IsReferenceType (type)) return new NullConstant (type, loc); - Constant c = New.Constantify (type, expr.Location); + Constant c = New.Constantify (type, expr.Location, ec.FileType); if (c != null) return c; @@ -2673,15 +2894,43 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } /// /// Binary operators /// - public class Binary : Expression, IDynamicBinder + public partial class Binary : Expression, IDynamicBinder { + // + // Control how implitic conversions are handled on operators for ActionScript/PlayScript. In C# only valid up numeric + // implicit conversions are allowed, and so the operator matching algorithm for Binary operators works such that the lowest matching + // implicit conversion type is returned when finding a matching predefined operator. In AS however BOTH up and down conversions are + // allowed, which causes the matching algorithm for Binary to fail as ALL of the potential matches actually succeed (due to implicit + // conversions to any type). To fix this we specifically turn on/off up/down conversions for specific ActionScript predefined operator + // types so that the matching algorithm can match first for the best non-any conversion operators, and only fall back on downcasting when + // all other matches fail. + // + [Flags] + public enum AsOperatorConversions + { + ConvertArgsToRetType = 1, // Force left/right args to be implicitly converted to return type (regarless of input type) + LeftConvertAny = 2, // Allow both up and down conversions on left argument (the default is C# up conversions only) + RightConvertAny = 4 // Allow both up and down conversions on right argument (the default is C# up conversions only) + }; + public class PredefinedOperator { protected readonly TypeSpec left; @@ -2690,23 +2939,34 @@ public class PredefinedOperator protected readonly TypeSpec right_unwrap; public readonly Operator OperatorsMask; public TypeSpec ReturnType; + public AsOperatorConversions AsConversions; public PredefinedOperator (TypeSpec ltype, TypeSpec rtype, Operator op_mask) - : this (ltype, rtype, op_mask, ltype) + : this (ltype, rtype, op_mask, ltype, 0) { } public PredefinedOperator (TypeSpec type, Operator op_mask, TypeSpec return_type) - : this (type, type, op_mask, return_type) + : this (type, type, op_mask, return_type, 0) + { + } + + public PredefinedOperator (TypeSpec type, Operator op_mask, TypeSpec return_type, AsOperatorConversions as_conv) + : this (type, type, op_mask, return_type, as_conv) { } public PredefinedOperator (TypeSpec type, Operator op_mask) - : this (type, type, op_mask, type) + : this (type, type, op_mask, type, 0) { } public PredefinedOperator (TypeSpec ltype, TypeSpec rtype, Operator op_mask, TypeSpec return_type) + : this (ltype, rtype, op_mask, return_type, 0) + { + } + + public PredefinedOperator (TypeSpec ltype, TypeSpec rtype, Operator op_mask, TypeSpec return_type, AsOperatorConversions as_conv) { if ((op_mask & Operator.ValuesOnlyMask) != 0) throw new InternalErrorException ("Only masked values can be used"); @@ -2723,6 +2983,7 @@ public PredefinedOperator (TypeSpec ltype, TypeSpec rtype, Operator op_mask, Typ this.right = rtype; this.OperatorsMask = op_mask; this.ReturnType = return_type; + this.AsConversions = as_conv; } public bool IsLifted { @@ -2935,8 +3196,14 @@ public virtual bool IsApplicable (ResolveContext ec, Expression lexpr, Expressio if (left == lexpr.Type && right == rexpr.Type) return true; - return Convert.ImplicitConversionExists (ec, lexpr, left) && - Convert.ImplicitConversionExists (ec, rexpr, right); + // PlayScript/ActionScript - We need to turn on/off ActionScripts "convert to any" behavior or matching for the best + // argument conversions will not work. We turn this behavior on for logical and certain other operator combinations. + // These flags are only ever set in PlayScript, and implicit conversions to any type only work in PlayScript. + bool left_upconvert_only = (AsConversions & AsOperatorConversions.LeftConvertAny) == 0; + bool right_upconvert_only = (AsConversions & AsOperatorConversions.RightConvertAny) == 0; + + return Convert.ImplicitConversionExists (ec, lexpr, left, left_upconvert_only) && + Convert.ImplicitConversionExists (ec, rexpr, right, right_upconvert_only); } public PredefinedOperator ResolveBetterOperator (ResolveContext ec, PredefinedOperator best_operator) @@ -2955,8 +3222,10 @@ public PredefinedOperator ResolveBetterOperator (ResolveContext ec, PredefinedOp // // When second argument is same as the first one, the result is same // - if (right != null && (left != right || best_operator.left != best_operator.right)) { - result |= OverloadResolver.BetterTypeConversion (ec, best_operator.right_unwrap, right_unwrap); + if (ec.FileType != SourceFileType.PlayScript || (best_operator.OperatorsMask & Binary.Operator.ShiftMask) == 0) { + if (right != null && (left != right || best_operator.left != best_operator.right)) { + result |= OverloadResolver.BetterTypeConversion (ec, best_operator.right_unwrap, right_unwrap); + } } if (result == 0 || result > 2) @@ -3091,9 +3360,9 @@ public override bool IsApplicable (ResolveContext ec, Expression lexpr, Expressi public override Expression ConvertResult (ResolveContext ec, Binary b) { if (left != null) { - b.left = EmptyCast.Create (b.left, left); + b.left = EmptyCast.Create (b.left, left, ec); } else if (right != null) { - b.right = EmptyCast.Create (b.right, right); + b.right = EmptyCast.Create (b.right, right, ec); } TypeSpec r_type = ReturnType; @@ -3127,34 +3396,43 @@ public enum Operator { LeftShift = 5 | ShiftMask, RightShift = 6 | ShiftMask, + AsURightShift = 7 | ShiftMask, // PlayScript Unsigned Right Shift + + LessThan = 8 | ComparisonMask | RelationalMask, + GreaterThan = 9 | ComparisonMask | RelationalMask, + LessThanOrEqual = 10 | ComparisonMask | RelationalMask, + GreaterThanOrEqual = 11 | ComparisonMask | RelationalMask, + Equality = 12 | ComparisonMask | EqualityMask, + Inequality = 13 | ComparisonMask | EqualityMask, + AsStrictEquality = 14 | ComparisonMask | EqualityMask, + AsStrictInequality = 15 | ComparisonMask | EqualityMask, - LessThan = 7 | ComparisonMask | RelationalMask, - GreaterThan = 8 | ComparisonMask | RelationalMask, - LessThanOrEqual = 9 | ComparisonMask | RelationalMask, - GreaterThanOrEqual = 10 | ComparisonMask | RelationalMask, - Equality = 11 | ComparisonMask | EqualityMask, - Inequality = 12 | ComparisonMask | EqualityMask, + BitwiseAnd = 16 | BitwiseMask, + ExclusiveOr = 17 | BitwiseMask, + BitwiseOr = 18 | BitwiseMask, - BitwiseAnd = 13 | BitwiseMask, - ExclusiveOr = 14 | BitwiseMask, - BitwiseOr = 15 | BitwiseMask, + LogicalAnd = 19 | LogicalMask, + LogicalOr = 20 | LogicalMask, - LogicalAnd = 16 | LogicalMask, - LogicalOr = 17 | LogicalMask, + AsE4xChild = 21 | AsE4xMask, + AsE4xDescendant = 22 | AsE4xMask, + AsE4xChildAttribute = 23 | AsE4xMask, + AsE4xDescendantAttribute = 24 | AsE4xMask, // // Operator masks // ValuesOnlyMask = ArithmeticMask - 1, - ArithmeticMask = 1 << 5, - ShiftMask = 1 << 6, - ComparisonMask = 1 << 7, - EqualityMask = 1 << 8, - BitwiseMask = 1 << 9, - LogicalMask = 1 << 10, - AdditionMask = 1 << 11, - SubtractionMask = 1 << 12, - RelationalMask = 1 << 13, + ArithmeticMask = 1 << 6, + ShiftMask = 1 << 7, + ComparisonMask = 1 << 8, + EqualityMask = 1 << 9, + BitwiseMask = 1 << 10, + LogicalMask = 1 << 11, + AdditionMask = 1 << 12, + SubtractionMask = 1 << 13, + RelationalMask = 1 << 14, + AsE4xMask = 1 << 15, DecomposedMask = 1 << 19, NullableMask = 1 << 20, @@ -3254,6 +3532,9 @@ string OperName (Operator oper) case Operator.RightShift: s = ">>"; break; + case Operator.AsURightShift: + s = ">>>"; + break; case Operator.LessThan: s = "<"; break; @@ -3269,9 +3550,15 @@ string OperName (Operator oper) case Operator.Equality: s = "=="; break; + case Operator.AsStrictEquality: + s = "==="; + break; case Operator.Inequality: s = "!="; break; + case Operator.AsStrictInequality: + s = "!=="; + break; case Operator.BitwiseAnd: s = "&"; break; @@ -3395,12 +3682,16 @@ string GetOperatorExpressionTypeName () return IsCompound ? "ExclusiveOrAssign" : "ExclusiveOr"; case Operator.Equality: return "Equal"; + case Operator.AsStrictEquality: + return "StrictEqual"; case Operator.GreaterThan: return "GreaterThan"; case Operator.GreaterThanOrEqual: return "GreaterThanOrEqual"; case Operator.Inequality: return "NotEqual"; + case Operator.AsStrictInequality: + return "StrictNotEqual"; case Operator.LeftShift: return IsCompound ? "LeftShiftAssign" : "LeftShift"; case Operator.LessThan: @@ -3417,6 +3708,8 @@ string GetOperatorExpressionTypeName () return IsCompound ? "MultiplyAssign" : "Multiply"; case Operator.RightShift: return IsCompound ? "RightShiftAssign" : "RightShift"; + case Operator.AsURightShift: + return IsCompound ? "UnsignedRightShiftAssign" : "UnsignedRightShift"; case Operator.Subtraction: return IsCompound ? "SubtractAssign" : "Subtract"; default: @@ -3424,43 +3717,43 @@ string GetOperatorExpressionTypeName () } } - static MonoCSharp.Operator.OpType ConvertBinaryToUserOperator (Operator op) + static MonoPlayScript.Operator.OpType ConvertBinaryToUserOperator (Operator op) { switch (op) { case Operator.Addition: - return MonoCSharp.Operator.OpType.Addition; + return MonoPlayScript.Operator.OpType.Addition; case Operator.BitwiseAnd: case Operator.LogicalAnd: - return MonoCSharp.Operator.OpType.BitwiseAnd; + return MonoPlayScript.Operator.OpType.BitwiseAnd; case Operator.BitwiseOr: case Operator.LogicalOr: - return MonoCSharp.Operator.OpType.BitwiseOr; + return MonoPlayScript.Operator.OpType.BitwiseOr; case Operator.Division: - return MonoCSharp.Operator.OpType.Division; + return MonoPlayScript.Operator.OpType.Division; case Operator.Equality: - return MonoCSharp.Operator.OpType.Equality; + return MonoPlayScript.Operator.OpType.Equality; case Operator.ExclusiveOr: - return MonoCSharp.Operator.OpType.ExclusiveOr; + return MonoPlayScript.Operator.OpType.ExclusiveOr; case Operator.GreaterThan: - return MonoCSharp.Operator.OpType.GreaterThan; + return MonoPlayScript.Operator.OpType.GreaterThan; case Operator.GreaterThanOrEqual: - return MonoCSharp.Operator.OpType.GreaterThanOrEqual; + return MonoPlayScript.Operator.OpType.GreaterThanOrEqual; case Operator.Inequality: - return MonoCSharp.Operator.OpType.Inequality; + return MonoPlayScript.Operator.OpType.Inequality; case Operator.LeftShift: - return MonoCSharp.Operator.OpType.LeftShift; + return MonoPlayScript.Operator.OpType.LeftShift; case Operator.LessThan: - return MonoCSharp.Operator.OpType.LessThan; + return MonoPlayScript.Operator.OpType.LessThan; case Operator.LessThanOrEqual: - return MonoCSharp.Operator.OpType.LessThanOrEqual; + return MonoPlayScript.Operator.OpType.LessThanOrEqual; case Operator.Modulus: - return MonoCSharp.Operator.OpType.Modulus; + return MonoPlayScript.Operator.OpType.Modulus; case Operator.Multiply: - return MonoCSharp.Operator.OpType.Multiply; + return MonoPlayScript.Operator.OpType.Multiply; case Operator.RightShift: - return MonoCSharp.Operator.OpType.RightShift; + return MonoPlayScript.Operator.OpType.RightShift; case Operator.Subtraction: - return MonoCSharp.Operator.OpType.Subtraction; + return MonoPlayScript.Operator.OpType.Subtraction; default: throw new InternalErrorException (op.ToString ()); } @@ -3538,6 +3831,13 @@ public static void EmitOperatorOpcode (EmitContext ec, Operator oper, TypeSpec l else opcode = OpCodes.Shr; break; + case Operator.AsURightShift: + if (!(right is IntConstant)) { + ec.EmitInt (GetShiftMask (l)); + ec.Emit (OpCodes.And); + } + opcode = OpCodes.Shr_Un; + break; case Operator.LeftShift: if (!(right is IntConstant)) { @@ -3681,7 +3981,8 @@ public Expression ResolveOperator (ResolveContext rc) return null; if ((oper & Operator.BitwiseMask) != 0) { - expr = EmptyCast.Create (expr, type); + + expr = EmptyCast.Create (expr, type, rc); enum_conversion = GetEnumResultCast (type); if (oper == Operator.BitwiseAnd && left.Type.IsEnum && right.Type.IsEnum) { @@ -3730,7 +4031,10 @@ public Expression ResolveOperator (ResolveContext rc) return ResolveEquality (rc, l, r, primitives_only); } - expr = ResolveOperatorPredefined (rc, rc.BuiltinTypes.OperatorsBinaryStandard, primitives_only); + PredefinedOperator [] operatorsBinaryStandard = (rc.FileType == SourceFileType.PlayScript ? + rc.BuiltinTypes.AsOperatorsBinaryStandard : rc.BuiltinTypes.OperatorsBinaryStandard); + + expr = ResolveOperatorPredefined (rc, operatorsBinaryStandard, primitives_only); if (expr != null) return expr; @@ -3881,6 +4185,49 @@ public static PredefinedOperator[] CreateStandardOperatorsTable (BuiltinTypes ty new PredefinedOperator (types.ULong, types.Int, Operator.ShiftMask) }; + } + public static PredefinedOperator[] CreateAsStandardOperatorsTable (BuiltinTypes types) + { + TypeSpec bool_type = types.Bool; + + return new [] { + new PredefinedOperator (types.Int, Operator.ArithmeticMask | Operator.BitwiseMask | Operator.ShiftMask), + new PredefinedOperator (types.UInt, Operator.ArithmeticMask | Operator.BitwiseMask), + new PredefinedOperator (types.Long, Operator.ArithmeticMask | Operator.BitwiseMask), + new PredefinedOperator (types.ULong, Operator.ArithmeticMask | Operator.BitwiseMask), + new PredefinedOperator (types.Float, Operator.ArithmeticMask), + new PredefinedOperator (types.Double, Operator.ArithmeticMask), + new PredefinedOperator (types.Decimal, Operator.ArithmeticMask), + + new PredefinedOperator (types.Int, Operator.ComparisonMask, bool_type), + new PredefinedOperator (types.UInt, Operator.ComparisonMask, bool_type), + new PredefinedOperator (types.Long, Operator.ComparisonMask, bool_type), + new PredefinedOperator (types.ULong, Operator.ComparisonMask, bool_type), + new PredefinedOperator (types.Float, Operator.ComparisonMask, bool_type), + new PredefinedOperator (types.Double, Operator.ComparisonMask, bool_type), + new PredefinedOperator (types.Decimal, Operator.ComparisonMask, bool_type), + + // PlayScript/ActionScript allows logical operators where left/right arguments are numeric types (these don't exist in C#) + new PredefinedOperator (types.Int, Operator.LogicalMask, bool_type, AsOperatorConversions.ConvertArgsToRetType | AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.UInt, Operator.LogicalMask, bool_type, AsOperatorConversions.ConvertArgsToRetType | AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.Long, Operator.LogicalMask, bool_type, AsOperatorConversions.ConvertArgsToRetType | AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.ULong, Operator.LogicalMask, bool_type, AsOperatorConversions.ConvertArgsToRetType | AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.Float, Operator.LogicalMask, bool_type, AsOperatorConversions.ConvertArgsToRetType | AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.Double, Operator.LogicalMask, bool_type, AsOperatorConversions.ConvertArgsToRetType | AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.Decimal, Operator.LogicalMask, bool_type, AsOperatorConversions.ConvertArgsToRetType | AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + + new PredefinedStringOperator (types.String, Operator.AdditionMask, types.String), + // Remaining string operators are in lifted tables + + // PlayScript/ActionScript bitwise, logical, and equality arguments can always be converted to bool (allow any up/down conversions) + new PredefinedOperator (bool_type, Operator.BitwiseMask | Operator.LogicalMask | Operator.EqualityMask, bool_type, AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + + // PlayScript/ActionScript right args for shift operators can be up/down converted to the proper target type (allow any right conversions) + new PredefinedOperator (types.UInt, types.Int, Operator.ShiftMask, types.UInt, AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.Long, types.Int, Operator.ShiftMask, types.Long, AsOperatorConversions.RightConvertAny), + new PredefinedOperator (types.ULong, types.Int, Operator.ShiftMask, types.ULong, AsOperatorConversions.RightConvertAny) + }; + } public static PredefinedOperator[] CreateStandardLiftedOperatorsTable (ModuleContainer module) { @@ -3956,6 +4303,17 @@ public static PredefinedOperator[] CreateEqualityOperatorsTable (BuiltinTypes ty }; } + public static PredefinedOperator[] CreateAsEqualityOperatorsTable (BuiltinTypes types) + { + TypeSpec bool_type = types.Bool; + + // We only have one operator in this table as we use the Standard equality table first + return new[] { + // ActionScript/PlayScript - If all else fails, try bool args where one side can be implicity converted to bool + new PredefinedOperator (bool_type, Operator.EqualityMask, bool_type, AsOperatorConversions.LeftConvertAny | AsOperatorConversions.RightConvertAny), + }; + } + public static PredefinedOperator[] CreateEqualityLiftedOperatorsTable (ModuleContainer module) { var nullable = module.PredefinedTypes.Nullable.TypeSpec; @@ -3997,9 +4355,9 @@ bool DoBinaryOperatorPromotion (ResolveContext rc) } // - // This is numeric promotion code only + // This is numeric promotion code only (NOTE: PlayScript "does" handle bool below) // - if (ltype.BuiltinType == BuiltinTypeSpec.Type.Bool) + if (!rc.IsPlayScript && ltype.BuiltinType == BuiltinTypeSpec.Type.Bool) return true; TypeSpec rtype = right.Type; @@ -4012,7 +4370,13 @@ bool DoBinaryOperatorPromotion (ResolveContext rc) TypeSpec type; Expression expr; - if (lb == BuiltinTypeSpec.Type.Decimal || rb == BuiltinTypeSpec.Type.Decimal) { + if (rc.IsPlayScript && (lb == BuiltinTypeSpec.Type.Bool || rb == BuiltinTypeSpec.Type.Bool) && + (Oper == Operator.LogicalAnd || Oper == Operator.LogicalOr || + Oper == Operator.Equality || Oper == Operator.Inequality || + Oper == Operator.AsStrictEquality || Oper == Operator.AsStrictInequality)) { + // PlayScript - Convert left/right operands to bool if logical op + type = rc.BuiltinTypes.Bool; + } else if (lb == BuiltinTypeSpec.Type.Decimal || rb == BuiltinTypeSpec.Type.Decimal) { type = rc.BuiltinTypes.Decimal; } else if (lb == BuiltinTypeSpec.Type.Double || rb == BuiltinTypeSpec.Type.Double) { type = rc.BuiltinTypes.Double; @@ -4022,12 +4386,12 @@ bool DoBinaryOperatorPromotion (ResolveContext rc) type = rc.BuiltinTypes.ULong; if (IsSignedType (lb)) { - expr = ConvertSignedConstant (left, type); + expr = ConvertSignedConstant (rc, left, type); if (expr == null) return false; left = expr; } else if (IsSignedType (rb)) { - expr = ConvertSignedConstant (right, type); + expr = ConvertSignedConstant (rc, right, type); if (expr == null) return false; right = expr; @@ -4039,11 +4403,11 @@ bool DoBinaryOperatorPromotion (ResolveContext rc) type = rc.BuiltinTypes.UInt; if (IsSignedType (lb)) { - expr = ConvertSignedConstant (left, type); + expr = ConvertSignedConstant (rc, left, type); if (expr == null) type = rc.BuiltinTypes.Long; } else if (IsSignedType (rb)) { - expr = ConvertSignedConstant (right, type); + expr = ConvertSignedConstant (rc, right, type); if (expr == null) type = rc.BuiltinTypes.Long; } @@ -4070,6 +4434,21 @@ bool DoBinaryOperatorPromotion (ResolveContext rc) return true; } + private Expression MakeStringComparison (ResolveContext rc) { + var args = new Arguments(2); + args.Add (new Argument(left)); + args.Add (new Argument(right)); + return new Invocation(new MemberAccess(new MemberAccess(new SimpleName("System",loc), "String", loc), "CompareOrdinal", loc), args); + } + + private TypeSpec typeHint; + protected override Expression DoResolveWithTypeHint(ResolveContext rc, TypeSpec typeHint) + { + // store type hint + this.typeHint = typeHint; + return this.Resolve(rc); + } + static bool IsSignedType (BuiltinTypeSpec.Type type) { switch (type) { @@ -4083,13 +4462,13 @@ static bool IsSignedType (BuiltinTypeSpec.Type type) } } - static Expression ConvertSignedConstant (Expression expr, TypeSpec type) + static Expression ConvertSignedConstant (ResolveContext rc, Expression expr, TypeSpec type) { var c = expr as Constant; if (c == null) return null; - return c.ConvertImplicitly (type); + return c.ConvertImplicitly (type, rc); } static Expression PromoteExpression (ResolveContext rc, Expression expr, TypeSpec type) @@ -4101,13 +4480,35 @@ static Expression PromoteExpression (ResolveContext rc, Expression expr, TypeSpe var c = expr as Constant; if (c != null) - return c.ConvertImplicitly (type); + return c.ConvertImplicitly (type, rc); + + return Convert.ImplicitNumericConversion (expr, type, rc, false); + } + + static bool PsIsNullOrUndefined (ResolveContext ec, Expression expr) + { + if (expr is NullLiteral) + return true; + + if (expr != null && expr.Type == ec.Module.PredefinedTypes.AsUndefined.Resolve ()) + return true; - return Convert.ImplicitNumericConversion (expr, type); + return false; } protected override Expression DoResolve (ResolveContext ec) { + if (ec.IsPlayScript) { + // this prevents a lot of extra operations inside of an if(expr) or while(expr) + // where we dont care about the return value at all and just care about the boolean value + // however, x = a || b || c; will still work because its not inside of a boolean expression + if ((oper & Operator.LogicalMask) == 0) { + // discard type hint unless we are inside of a logical operator + typeHint = null; + } + } + + if (left == null) return null; @@ -4127,13 +4528,160 @@ protected override Expression DoResolve (ResolveContext ec) if (left == null) return null; - right = right.Resolve (ec); + // Handle || operator applied to reference types in PlayScript.. + if (ec.IsPlayScript && oper == Operator.LogicalOr && + (left.Type.IsClass || left.Type.IsInterface)) { + if (typeHint != ec.BuiltinTypes.Bool) { + return new Nullable.NullCoalescingOperator (left, right).Resolve (ec); + } + } + + + right = right.ResolveWithTypeHint (ec, typeHint); if (right == null) return null; Constant lc = left as Constant; Constant rc = right as Constant; + // Handle PlayScript binary operators that need to be converted to methods. + if (ec.IsPlayScript) { + + if (oper == Operator.LogicalAnd || oper == Operator.LogicalOr) { + // Handle logical operation on Number/double; i.e. ( x:Number && y:Number) + if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Double || + right.Type.BuiltinType == BuiltinTypeSpec.Type.Double ) { + typeHint = null; + } + } + + // + // Delegate math operations involving null or undefined to the dynamic runtime + // to avoid using nullable types (which do not work the way we want) + // + if ((oper & Operator.ArithmeticMask) != 0) { + var args = new Arguments(2); + args.Add (new Argument (left)); + args.Add (new Argument (right)); + if (left.Type.IsNumeric && PsIsNullOrUndefined (ec, right)) + return new DynamicBinaryExpression (oper, this.GetOperatorExpressionTypeName (), args, loc).Resolve (ec); + else if (right.Type.IsNumeric && PsIsNullOrUndefined (ec, left)) + return new DynamicBinaryExpression (oper, this.GetOperatorExpressionTypeName (), args, loc).Resolve (ec); + } + + // + // Restrict math operations to numeric types + // + if ((oper & (Operator.BitwiseMask | Operator.ArithmeticMask | Operator.ShiftMask)) != 0 && oper != Operator.Addition) { + if (!(left.Type.IsNumeric || left.Type.IsAsUntyped) || !(right.Type.IsNumeric || right.Type.IsAsUntyped)) { + if (!(ec.IsPlayScript && (left.Type.IsDynamic || right.Type.IsDynamic))) { + Error_OperatorCannotBeApplied (ec, left, right, oper, loc); + return null; + } + } + } + + // + // PlayScript supports comparison between objects other than numeric types + // and strings. + // + if ((oper & Operator.ComparisonMask) != 0 && (oper & Operator.EqualityMask) == 0) { + if ((!BuiltinTypeSpec.IsPrimitiveType (left.Type) || !BuiltinTypeSpec.IsPrimitiveType (right.Type)) && + !(left.Type.BuiltinType == BuiltinTypeSpec.Type.String && right.Type.BuiltinType == BuiltinTypeSpec.Type.String)) { + var args = new Arguments (2); + args.Add (new Argument (left)); + args.Add (new Argument (right)); + return new DynamicBinaryExpression (oper, this.GetOperatorExpressionTypeName (), args, loc).Resolve (ec); + } + } + + // + // Delegate to PlayScript.Dynamic.IsNullOrUndefined where possible + // + if (Oper == Operator.Equality || Oper == Operator.Inequality) { + if (left.Type.IsDynamic && PsIsNullOrUndefined (ec, right)) + return PsMakeIsNullOrUndefinedExpression (ec, left).Resolve (ec); + else if (right.Type.IsDynamic && PsIsNullOrUndefined (ec, left)) + return PsMakeIsNullOrUndefinedExpression (ec, right).Resolve (ec); + } + + if ((typeHint != ec.BuiltinTypes.Bool) && (oper == Operator.LogicalOr || oper == Operator.LogicalAnd) && + (left.Type.BuiltinType != BuiltinTypeSpec.Type.Bool || right.Type.BuiltinType != BuiltinTypeSpec.Type.Bool)) { + Expression leftExpr = left; + Expression rightExpr = right; + if (left.Type != right.Type) { + leftExpr = new Cast (new TypeExpression(ec.BuiltinTypes.AsUntyped, loc), left, loc); + rightExpr = new Cast (new TypeExpression(ec.BuiltinTypes.AsUntyped, loc), right, loc); + } + if (oper == Operator.LogicalOr) { + return new Conditional (new Cast(new TypeExpression(ec.BuiltinTypes.Bool, loc), left, loc), leftExpr, rightExpr, loc).Resolve (ec); + } else { + return new Conditional (new Unary(Unary.Operator.LogicalNot, + new Cast(new TypeExpression(ec.BuiltinTypes.Bool, loc), left, loc), loc), leftExpr, rightExpr, loc).Resolve (ec); + } + } else if (oper == Operator.AsStrictEquality || oper == Operator.AsStrictInequality) { + // The rules for strict equality are somewhat complicated, so we let the + // dynamic runtime handle it. + var args = new Arguments(2); + args.Add (new Argument (left)); + args.Add (new Argument (right)); + return new DynamicBinaryExpression (oper, this.GetOperatorExpressionTypeName (), args, loc).Resolve (ec); + } else if (left.Type == ec.Module.PredefinedTypes.AsUndefined.Resolve () || + right.Type == ec.Module.PredefinedTypes.AsUndefined.Resolve ()) { + // The undefined keyword has special behavior, so we let the dynamic + // runtime handle it. + var args = new Arguments(2); + args.Add (new Argument (left)); + args.Add (new Argument (right)); + return new DynamicBinaryExpression (oper, this.GetOperatorExpressionTypeName (), args, loc).Resolve (ec); + } else if (oper == Operator.AsURightShift) { + var bi_type = left.Type.BuiltinType; + if (bi_type == BuiltinTypeSpec.Type.SByte) { + return new Binary(Binary.Operator.RightShift, EmptyCast.Create (left, ec.BuiltinTypes.Byte, ec), right).Resolve (ec); + } else if (bi_type == BuiltinTypeSpec.Type.Short) { + return new Binary(Binary.Operator.RightShift, EmptyCast.Create (left, ec.BuiltinTypes.UShort, ec), right).Resolve (ec); + } else if (bi_type == BuiltinTypeSpec.Type.Int) { + return new Binary(Binary.Operator.RightShift, EmptyCast.Create (left, ec.BuiltinTypes.UInt, ec), right).Resolve (ec); + } else if (bi_type == BuiltinTypeSpec.Type.Long) { + return new Binary(Binary.Operator.RightShift, EmptyCast.Create (left, ec.BuiltinTypes.ULong, ec), right).Resolve (ec); + } else if (bi_type == BuiltinTypeSpec.Type.Float) { + return new Binary(Binary.Operator.RightShift, EmptyCast.Create (left, ec.BuiltinTypes.UInt, ec), right).Resolve (ec); + } else if (bi_type == BuiltinTypeSpec.Type.Double) { + return new Binary(Binary.Operator.RightShift, EmptyCast.Create (left, ec.BuiltinTypes.UInt, ec), right).Resolve (ec); + } + } else if (left.Type.BuiltinType == BuiltinTypeSpec.Type.String) { + if (oper == Operator.LessThan || oper == Operator.GreaterThan || oper == Operator.LessThanOrEqual || oper == Operator.GreaterThanOrEqual) { + // Implement string comparisons + return new Binary(oper, MakeStringComparison (ec).Resolve (ec), new IntLiteral(ec.BuiltinTypes, 0, loc)).Resolve (ec); + } + } else if (Oper == Operator.Division && right.Type != ec.BuiltinTypes.Double && right.Type != ec.BuiltinTypes.Float) { + + // In PlayScript division always results in a double. + left = new Cast(new TypeExpression(ec.BuiltinTypes.Double, loc), left, loc).Resolve (ec); + right = new Cast(new TypeExpression(ec.BuiltinTypes.Double, loc), right, loc).Resolve (ec); + } + + // + // If we're doing any string operations prefer "string" vs. "dynamic" + // + if (left.Type.IsDynamic && right.Type == ec.BuiltinTypes.String) + left = Convert.ImplicitConversion (ec, left, ec.BuiltinTypes.String, loc).Resolve (ec); + else if (right.Type.IsDynamic && left.Type == ec.BuiltinTypes.String) + right = Convert.ImplicitConversion (ec, right, ec.BuiltinTypes.String, loc).Resolve (ec); + + // + // In PlayScript, if either side of an addition operator is a string, convert the other side + // to string as well. This is necessary to resolve ambiguities between object and string. + // + if (oper == Operator.Addition) { + if (left.Type.BuiltinType == BuiltinTypeSpec.Type.String && right.Type.BuiltinType != BuiltinTypeSpec.Type.String) + right = Convert.ImplicitConversion (ec, right, ec.BuiltinTypes.String, loc).Resolve (ec); + if (right.Type.BuiltinType == BuiltinTypeSpec.Type.String && left.Type.BuiltinType != BuiltinTypeSpec.Type.String) + left = Convert.ImplicitConversion (ec, left, ec.BuiltinTypes.String, loc).Resolve (ec); + } + } + + // The conversion rules are ignored in enum context but why if (!ec.HasSet (ResolveContext.Options.EnumScope) && lc != null && rc != null && (left.Type.IsEnum || right.Type.IsEnum)) { lc = EnumLiftUp (ec, lc, rc); @@ -4148,10 +4696,18 @@ protected override Expression DoResolve (ResolveContext ec) return e; } + // in PlayScript this is used as an efficient NaN check + bool is_playscript_nan_check = false; + if (ec.IsPlayScript) { + is_playscript_nan_check = (left.Type.BuiltinType == BuiltinTypeSpec.Type.Double && right.Type.BuiltinType == BuiltinTypeSpec.Type.Double); + } + // Comparison warnings if ((oper & Operator.ComparisonMask) != 0) { if (left.Equals (right)) { - ec.Report.Warning (1718, 3, loc, "A comparison made to same variable. Did you mean to compare something else?"); + if (!is_playscript_nan_check) { + ec.Report.Warning (1718, 3, loc, "A comparison made to same variable. Did you mean to compare something else?"); + } } CheckOutOfRangeComparison (ec, lc, right.Type); CheckOutOfRangeComparison (ec, rc, left.Type); @@ -4159,6 +4715,19 @@ protected override Expression DoResolve (ResolveContext ec) if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic || right.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) return DoResolveDynamic (ec); + + // + // We provide a mechanism to use single precision floats instead of + // doubles for the PlayScript Number type via the [NumberIsFloat] + // attribute. By casting doubles to floats here, we allow the constant + // folding to do its thing and remove any unnecessary coversions. + // + if (ec.PsNumberIsFloat) { + if (left.Type != null && left.Type.BuiltinType == BuiltinTypeSpec.Type.Double) + left = new Cast (new TypeExpression (ec.BuiltinTypes.Float, left.Location), left, left.Location).Resolve (ec); + if (right.Type != null && right.Type.BuiltinType == BuiltinTypeSpec.Type.Double) + right = new Cast (new TypeExpression (ec.BuiltinTypes.Float, right.Location), right, right.Location).Resolve (ec); + } return DoResolveCore (ec, left, right); } @@ -4182,8 +4751,19 @@ Expression DoResolveDynamic (ResolveContext rc) if ((oper & Operator.LogicalMask) != 0) { Expression cond_left, cond_right, expr; - args = new Arguments (2); - + if (rc.FileType == SourceFileType.PlayScript && rc.Module.Compiler.Settings.NewDynamicRuntime_LogicalOps && (typeHint == rc.BuiltinTypes.Bool)) { + // in the new runtime we convert each side to boolean for logical operations + if (lt.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + left = new Cast(new TypeExpression(rc.BuiltinTypes.Bool, loc), left, loc).Resolve(rc); + } + if (rt.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + right = new Cast(new TypeExpression(rc.BuiltinTypes.Bool, loc), right, loc).Resolve(rc); + } + return DoResolveCore(rc, left, right); + } + + args = new Arguments (2); + if (lt.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { LocalVariable temp = LocalVariable.CreateCompilerGenerated (lt, rc.CurrentBlock, loc); @@ -4205,7 +4785,8 @@ Expression DoResolveDynamic (ResolveContext rc) args.Add (new Argument (left)); args.Add (new Argument (right)); - cond_right = new DynamicExpressionStatement (this, args, loc); + cond_right = new DynamicBinaryExpression (this.oper, this.GetOperatorExpressionTypeName(), args, loc); + } else { LocalVariable temp = LocalVariable.CreateCompilerGenerated (rc.BuiltinTypes.Bool, rc.CurrentBlock, loc); @@ -4217,8 +4798,9 @@ Expression DoResolveDynamic (ResolveContext rc) } args.Add (new Argument (temp.CreateReferenceExpression (rc, loc).Resolve (rc))); + args.Add (new Argument (right)); - right = new DynamicExpressionStatement (this, args, loc); + right = new DynamicBinaryExpression (this.oper, this.GetOperatorExpressionTypeName(), args, loc); // // bool && dynamic => (temp = left) ? temp && right : temp; @@ -4238,10 +4820,10 @@ Expression DoResolveDynamic (ResolveContext rc) return new Conditional (expr, cond_left, cond_right, loc).Resolve (rc); } - args = new Arguments (2); - args.Add (new Argument (left)); - args.Add (new Argument (right)); - return new DynamicExpressionStatement (this, args, loc).Resolve (rc); + args = new Arguments(2); + args.Add(new Argument(left)); + args.Add(new Argument(right)); + return new DynamicBinaryExpression (this.oper, this.GetOperatorExpressionTypeName(), args, loc).Resolve(rc); } Expression DoResolveCore (ResolveContext ec, Expression left_orig, Expression right_orig) @@ -4264,6 +4846,16 @@ public override SLE.Expression MakeExpression (BuilderContext ctx) return MakeExpression (ctx, left, right); } + Expression PsMakeIsNullOrUndefinedExpression (ResolveContext ec, Expression expr) + { + var args = new Arguments (1); + args.Add (new Argument (new As (expr, new TypeExpression (ec.BuiltinTypes.Object, loc), loc))); + var call = new Invocation (new MemberAccess (new MemberAccess (new SimpleName ("PlayScript", loc), "Dynamic", loc), "IsNullOrUndefined", loc), args); + if (oper == Operator.Inequality) + return new Unary (Unary.Operator.LogicalNot, call, loc); + return call; + } + public SLE.Expression MakeExpression (BuilderContext ctx, Expression left, Expression right) { var le = left.MakeExpression (ctx); @@ -4563,7 +5155,7 @@ static Expression ConvertEnumOperandToUnderlyingType (ResolveContext rc, Express if (expr.Type == underlying_type) return expr; - return EmptyCast.Create (expr, underlying_type); + return EmptyCast.Create (expr, underlying_type, rc); } Expression ResolveEnumOperators (ResolveContext rc, bool lenum, bool renum, TypeSpec ltype, TypeSpec rtype) @@ -4595,7 +5187,7 @@ Expression ResolveEnumOperators (ResolveContext rc, bool lenum, bool renum, Type if (oper == Operator.Subtraction) expr = ConvertEnumSubtractionResult (rc, expr); else - expr = ConvertEnumAdditionalResult (expr, enum_type); + expr = ConvertEnumAdditionalResult (expr, enum_type, rc); enum_conversion = GetEnumResultCast (expr.Type); @@ -4618,7 +5210,7 @@ Expression ResolveEnumOperators (ResolveContext rc, bool lenum, bool renum, Type if (oper == Operator.Subtraction) expr = ConvertEnumSubtractionResult (rc, expr); else - expr = ConvertEnumAdditionalResult (expr, enum_type); + expr = ConvertEnumAdditionalResult (expr, enum_type, rc); enum_conversion = GetEnumResultCast (expr.Type); } @@ -4626,9 +5218,9 @@ Expression ResolveEnumOperators (ResolveContext rc, bool lenum, bool renum, Type return expr; } - static Expression ConvertEnumAdditionalResult (Expression expr, TypeSpec enumType) + static Expression ConvertEnumAdditionalResult (Expression expr, TypeSpec enumType, ResolveContext rc) { - return EmptyCast.Create (expr, enumType); + return EmptyCast.Create (expr, enumType, rc); } Expression ConvertEnumSubtractionResult (ResolveContext rc, Expression expr) @@ -4662,7 +5254,7 @@ Expression ConvertEnumSubtractionResult (ResolveContext rc, Expression expr) result_type = rc.Module.PredefinedTypes.Nullable.TypeSpec.MakeGenericType (rc.Module, new[] { result_type }); } - return EmptyCast.Create (expr, result_type); + return EmptyCast.Create (expr, result_type, rc); } public static ConvCast.Mode GetEnumResultCast (TypeSpec type) @@ -4837,27 +5429,36 @@ Expression ResolveEquality (ResolveContext ec, TypeSpec l, TypeSpec r, bool prim return l.Kind == MemberKind.InternalCompilerType || l.Kind == MemberKind.Struct ? null : this; } - if (!Convert.ExplicitReferenceConversionExists (l, r) && - !Convert.ExplicitReferenceConversionExists (r, l)) - return null; + // PlayScript - we have to let control fall through to end of method.. so use ret here and set it to null if invalid + Expression ret = this; + + if (!Convert.ExplicitReferenceConversionExists (l, r, ec) && + !Convert.ExplicitReferenceConversionExists (r, l, ec)) + ret = null; // Reject allowed explicit conversions like int->object if (!TypeSpec.IsReferenceType (l) || !TypeSpec.IsReferenceType (r)) - return null; + ret = null; - if (l.BuiltinType == BuiltinTypeSpec.Type.String || l.BuiltinType == BuiltinTypeSpec.Type.Delegate || l.IsDelegate || MemberCache.GetUserOperator (l, MonoCSharp.Operator.OpType.Equality, false) != null) + if (l.BuiltinType == BuiltinTypeSpec.Type.String || l.BuiltinType == BuiltinTypeSpec.Type.Delegate || l.IsDelegate || MemberCache.GetUserOperator (l, ICSharpCode.NRefactory.MonoPlayScript.Operator.OpType.Equality, false) != null) ec.Report.Warning (253, 2, loc, "Possible unintended reference comparison. Consider casting the right side expression to type `{0}' to get value comparison", l.GetSignatureForError ()); - if (r.BuiltinType == BuiltinTypeSpec.Type.String || r.BuiltinType == BuiltinTypeSpec.Type.Delegate || r.IsDelegate || MemberCache.GetUserOperator (r, MonoCSharp.Operator.OpType.Equality, false) != null) + if (r.BuiltinType == BuiltinTypeSpec.Type.String || r.BuiltinType == BuiltinTypeSpec.Type.Delegate || r.IsDelegate || MemberCache.GetUserOperator (r, ICSharpCode.NRefactory.MonoPlayScript.Operator.OpType.Equality, false) != null) ec.Report.Warning (252, 2, loc, "Possible unintended reference comparison. Consider casting the left side expression to type `{0}' to get value comparison", r.GetSignatureForError ()); - return this; - } + // + // PlayScript - Try equality with any PlayScript/ActionScript implicit conversions + // + if (ret == null && ec.IsPlayScript && (!TypeSpec.IsReferenceType (l) || !TypeSpec.IsReferenceType (r))) { + ret = ResolveOperatorPredefined (ec, ec.BuiltinTypes.AsOperatorsBinaryEquality, no_arg_conv); + } + return ret; + } Expression ResolveOperatorPointer (ResolveContext ec, TypeSpec l, TypeSpec r) { @@ -5119,7 +5720,7 @@ Expression ResolveUserOperator (ResolveContext rc, Expression left, Expression r return lifted.Resolve (rc); } - + if ((oper & Operator.LogicalMask) != 0) { // TODO: CreateExpressionTree is allocated every time oper_expr = new ConditionalLogicalOperator (oper_method, args, CreateExpressionTree, @@ -5250,7 +5851,7 @@ void CheckOutOfRangeComparison (ResolveContext ec, Constant c, TypeSpec type) { if (c is IntegralConstant || c is CharConstant) { try { - c.ConvertExplicitly (true, type); + c.ConvertExplicitly (true, type, ec); } catch (OverflowException) { ec.Report.Warning (652, 2, loc, "A comparison between a constant and a variable is useless. The constant is out of the range of the variable type `{0}'", @@ -5649,7 +6250,20 @@ public Expression CreateExpressionTree (ResolveContext ec, Expression method) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Left != null) + this.Left.Accept (visitor); + if (visitor.Continue && this.Right != null) + this.Right.Accept (visitor); + } + + return ret; } } @@ -5658,7 +6272,7 @@ public override object Accept (StructuralVisitor visitor) // Represents the operation a + b [+ c [+ d [+ ...]]], where a is a string // b, c, d... may be strings or objects. // - public class StringConcat : Expression + public partial class StringConcat : Expression { Arguments arguments; @@ -6048,7 +6662,9 @@ protected override Expression DoResolve (ResolveContext ec) // that can be implicitly converted to bool or of // a type that implements operator true - expr = expr.Resolve (ec); + // resolve with a hint to resolve to a boolean type to avoid unnecessary conversion + expr = expr.ResolveWithTypeHint(ec, ec.BuiltinTypes.Bool); + if (expr == null) return null; @@ -6062,9 +6678,16 @@ protected override Expression DoResolve (ResolveContext ec) return expr; if (expr.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { - Arguments args = new Arguments (1); - args.Add (new Argument (expr)); - return DynamicUnaryConversion.CreateIsTrue (ec, args, loc).Resolve (ec); + if (ec.FileType == SourceFileType.PlayScript) { + // PlayScript: Call the "Boolean()" static method to convert a dynamic to a bool. EXPENSIVE, but hey.. + Arguments args = new Arguments (1); + args.Add (new Argument(EmptyCast.RemoveDynamic(ec, expr))); + expr = new Invocation(new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, loc), "Boolean_fn", loc), "Boolean", loc), args).Resolve (ec); + } else { + Arguments args = new Arguments (1); + args.Add (new Argument (expr)); + return DynamicUnaryConversion.CreateIsTrue (ec, args, loc).Resolve (ec); + } } type = ec.BuiltinTypes.Bool; @@ -6086,7 +6709,18 @@ protected override Expression DoResolve (ResolveContext ec) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -6106,7 +6740,7 @@ protected override Expression ResolveOperator (ResolveContext ec, Expression exp /// /// Implements the ternary conditional operator (?:) /// - public class Conditional : Expression { + public partial class Conditional : Expression { Expression expr, true_expr, false_expr; public Conditional (Expression expr, Expression true_expr, Expression false_expr, Location loc) @@ -6167,12 +6801,27 @@ protected override Expression DoResolve (ResolveContext ec) TypeSpec false_type = false_expr.Type; type = true_type; + if (ec.IsPlayScript && ec.Module.Compiler.Settings.NewDynamicRuntime_Conditional) { + // if either true or false are dynamic then we must cast the other to dynamic + if (true_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic || false_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + if (false_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { + false_expr = Convert.ImplicitConversion (ec, false_expr, ec.BuiltinTypes.Dynamic, loc); + false_type = false_expr.Type; + } + if (true_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { + true_expr = Convert.ImplicitConversion (ec, true_expr, ec.BuiltinTypes.Dynamic, loc); + true_type = true_expr.Type; + } + } + } + // // First, if an implicit conversion exists from true_expr // to false_expr, then the result type is of type false_expr.Type - // + // if (!TypeSpecComparer.IsEqual (true_type, false_type)) { - Expression conv = Convert.ImplicitConversion (ec, true_expr, false_type, loc); + // The following needs to be up converted to prevent a CS0172 in ActionScript + Expression conv = Convert.ImplicitConversion (ec, true_expr, false_type, loc, true); if (conv != null && true_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { // // Check if both can convert implicitly to each other's type @@ -6180,7 +6829,8 @@ protected override Expression DoResolve (ResolveContext ec) type = false_type; if (false_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { - var conv_false_expr = Convert.ImplicitConversion (ec, false_expr, true_type, loc); + // The following needs to be up converted to prevent a CS0172 in ActionScript + var conv_false_expr = Convert.ImplicitConversion (ec, false_expr, true_type, loc, true); // // LAMESPEC: There seems to be hardcoded promotition to int type when // both sides are numeric constants and one side is int constant and @@ -6203,13 +6853,13 @@ protected override Expression DoResolve (ResolveContext ec) if (conv_false_expr != null) { ec.Report.Error (172, true_expr.Location, "Type of conditional expression cannot be determined as `{0}' and `{1}' convert implicitly to each other", - true_type.GetSignatureForError (), false_type.GetSignatureForError ()); + true_type.GetSignatureForError (), false_type.GetSignatureForError ()); } } true_expr = conv; if (true_expr.Type != type) - true_expr = EmptyCast.Create (true_expr, type); + true_expr = EmptyCast.Create (true_expr, type, ec); } else if ((conv = Convert.ImplicitConversion (ec, false_expr, true_type, loc)) != null) { false_expr = conv; } else { @@ -6240,6 +6890,130 @@ protected override Expression DoResolve (ResolveContext ec) } return this; + +// expr = expr.Resolve (ec); +// +//// if (true_expr == null || false_expr == null || expr == null) +//// return null; +// +// // +// // Unreachable code needs different resolve path. For instance for await +// // expression to not generate unreachable resumable statement +// // +// Constant c = expr as Constant; +// if (c != null && ec.CurrentBranching != null) { +// bool unreachable = ec.CurrentBranching.CurrentUsageVector.IsUnreachable; +// +// if (c.IsDefaultValue) { +// ec.CurrentBranching.CurrentUsageVector.IsUnreachable = true; +// true_expr = true_expr.Resolve (ec); +// ec.CurrentBranching.CurrentUsageVector.IsUnreachable = unreachable; +// +// false_expr = false_expr.Resolve (ec); +// } else { +// true_expr = true_expr.Resolve (ec); +// +// ec.CurrentBranching.CurrentUsageVector.IsUnreachable = true; +// false_expr = false_expr.Resolve (ec); +// ec.CurrentBranching.CurrentUsageVector.IsUnreachable = unreachable; +// } +// } else { +// true_expr = true_expr.Resolve (ec); +// false_expr = false_expr.Resolve (ec); +// } +// +// if (true_expr == null || false_expr == null || expr == null) +// return null; +// +// eclass = ExprClass.Value; +// TypeSpec true_type = true_expr.Type; +// TypeSpec false_type = false_expr.Type; +// type = true_type; +// +// if (ec.FileType == SourceFileType.PlayScript && ec.Module.Compiler.Settings.NewDynamicRuntime_Conditional) { +// // if either true or false are dynamic then we must cast the other to dynamic +// if (true_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic || false_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { +// if (false_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { +// false_expr = Convert.ImplicitConversion (ec, false_expr, ec.BuiltinTypes.Dynamic, loc); +// false_type = false_expr.Type; +// } +// if (true_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { +// true_expr = Convert.ImplicitConversion (ec, true_expr, ec.BuiltinTypes.Dynamic, loc); +// true_type = true_expr.Type; +// } +// } +// } +// +// // +// // First, if an implicit conversion exists from true_expr +// // to false_expr, then the result type is of type false_expr.Type +// // +// if (!TypeSpecComparer.IsEqual (true_type, false_type)) { +// Expression conv = Convert.ImplicitConversion (ec, true_expr, false_type, loc, true); +// if (conv != null && true_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { +// // +// // Check if both can convert implicitly to each other's type +// // +// type = false_type; +// +// if (false_type.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { +// var conv_false_expr = Convert.ImplicitConversion (ec, false_expr, true_type, loc, true); +// // +// // LAMESPEC: There seems to be hardcoded promotition to int type when +// // both sides are numeric constants and one side is int constant and +// // other side is numeric constant convertible to int. +// // +// // var res = condition ? (short)1 : 1; +// // +// // Type of res is int even if according to the spec the conversion is +// // ambiguous because 1 literal can be converted to short. +// // +// if (conv_false_expr != null) { +// if (conv_false_expr.Type.BuiltinType == BuiltinTypeSpec.Type.Int && conv is Constant) { +// type = true_type; +// conv_false_expr = null; +// } else if (type.BuiltinType == BuiltinTypeSpec.Type.Int && conv_false_expr is Constant) { +// conv_false_expr = null; +// } +// } +// +// if (conv_false_expr != null) { +// ec.Report.Error (172, true_expr.Location, +// "Type of conditional expression cannot be determined as `{0}' and `{1}' convert implicitly to each other", +// true_type.GetSignatureForError (), false_type.GetSignatureForError ()); +// } +// } +// +// true_expr = conv; +// if (true_expr.Type != type) +// true_expr = EmptyCast.Create (true_expr, type, ec); +// } else if ((conv = Convert.ImplicitConversion (ec, false_expr, true_type, loc)) != null) { +// false_expr = conv; +// } else { +// ec.Report.Error (173, true_expr.Location, +// "Type of conditional expression cannot be determined because there is no implicit conversion between `{0}' and `{1}'", +// true_type.GetSignatureForError (), false_type.GetSignatureForError ()); +// return null; +// } +// } +// +// if (c != null) { +// bool is_false = c.IsDefaultValue; +// +// // +// // Don't issue the warning for constant expressions +// // +// if (!(is_false ? true_expr is Constant : false_expr is Constant)) { +// // CSC: Missing warning +// Warning_UnreachableExpression (ec, is_false ? true_expr.Location : false_expr.Location); +// } +// +// return ReducedExpression.Create ( +// is_false ? false_expr : true_expr, this, +// false_expr is Constant && true_expr is Constant).Resolve (ec); +// } +// +// return this; } public override void Emit (EmitContext ec) @@ -6312,14 +7086,9 @@ protected override void CloneTo (CloneContext clonectx, Expression t) target.true_expr = true_expr.Clone (clonectx); target.false_expr = false_expr.Clone (clonectx); } - - public override object Accept (StructuralVisitor visitor) - { - return visitor.Visit (this); - } } - public abstract class VariableReference : Expression, IAssignMethod, IMemoryLocation, IVariableReference + public abstract partial class VariableReference : Expression, IAssignMethod, IMemoryLocation, IVariableReference { LocalTemporary temp; @@ -6567,7 +7336,10 @@ public override void FlowAnalysis (FlowAnalysisContext fc) if (fc.IsDefinitelyAssigned (variable_info)) return; - fc.Report.Error (165, loc, "Use of unassigned local variable `{0}'", Name); + // PlayScript does not consider this an error. + if (!loc.IsPlayScript) + fc.Report.Error (165, loc, "Use of unassigned local variable `{0}'", Name); + variable_info.SetAssigned (fc.DefiniteAssignment, true); } @@ -6678,11 +7450,6 @@ protected override void CloneTo (CloneContext clonectx, Expression t) { // Nothing } - - public override object Accept (StructuralVisitor visitor) - { - return visitor.Visit (this); - } } /// @@ -6863,7 +7630,7 @@ public override void FlowAnalysis (FlowAnalysisContext fc) /// /// Invocation of methods or delegates. /// - public class Invocation : ExpressionStatement + public partial class Invocation : ExpressionStatement { public class Predefined : Invocation { @@ -7019,10 +7786,96 @@ protected override Expression DoResolve (ResolveContext rc) Expression DoResolveInvocation (ResolveContext ec) { Expression member_expr; + bool args_resolved = false; + bool dynamic_arg = false; + var atn = expr as ATypeNameExpression; + + // Handle special casts for dynamic types.. + if (ec.IsPlayScript && arguments != null && arguments.Count == 1) { + + BuiltinTypeSpec.Type castType = BuiltinTypeSpec.Type.None; + + if (expr is TypeExpression) { + castType = ((TypeExpression)expr).Type.BuiltinType; + } else if (atn != null) { // These invoke values can be names.. + if (atn.Name == "String") { + expr = new TypeExpression (ec.BuiltinTypes.String, Location); + atn = null; + castType = BuiltinTypeSpec.Type.String; + } else if (atn.Name == "Number") { + expr = new TypeExpression (ec.BuiltinTypes.Double, Location); + atn = null; + castType = BuiltinTypeSpec.Type.Double; + } else if (atn.Name == "Boolean") { + expr = new TypeExpression (ec.BuiltinTypes.Bool, Location); + atn = null; + castType = BuiltinTypeSpec.Type.Bool; + } + } + + if (castType == BuiltinTypeSpec.Type.Int || castType == BuiltinTypeSpec.Type.UInt || castType == BuiltinTypeSpec.Type.Double || + castType == BuiltinTypeSpec.Type.Bool || castType == BuiltinTypeSpec.Type.String) { + + if (arguments != null) + arguments.Resolve (ec, out dynamic_arg); + args_resolved = true; + + var ct = arguments [0].Expr.Type; + var cbt = ct.BuiltinType; + if (cbt == BuiltinTypeSpec.Type.Dynamic) { + arguments [0].Expr = EmptyCast.RemoveDynamic(ec, arguments[0].Expr); + dynamic_arg = false; + ct = ec.BuiltinTypes.Object; + cbt = BuiltinTypeSpec.Type.Object; + } + switch (castType) { + case BuiltinTypeSpec.Type.Int: + if (cbt == BuiltinTypeSpec.Type.String || + cbt == BuiltinTypeSpec.Type.Object) + atn = new SimpleName ("int", Location); + break; + case BuiltinTypeSpec.Type.UInt: + if (cbt == BuiltinTypeSpec.Type.String || + cbt == BuiltinTypeSpec.Type.Object) + atn = new SimpleName ("uint", Location); + break; + case BuiltinTypeSpec.Type.Double: + if (cbt == BuiltinTypeSpec.Type.String || + cbt == BuiltinTypeSpec.Type.Object) + atn = new SimpleName ("Number", Location); + break; + case BuiltinTypeSpec.Type.Bool: + if (cbt == BuiltinTypeSpec.Type.String || + cbt == BuiltinTypeSpec.Type.Object || + ct.IsClass) + atn = new SimpleName ("Boolean", Location); + break; + case BuiltinTypeSpec.Type.String: + if (arguments [0].Expr.Type.BuiltinType == BuiltinTypeSpec.Type.Int || + arguments [0].Expr.Type.BuiltinType == BuiltinTypeSpec.Type.UInt || + arguments [0].Expr.Type.BuiltinType == BuiltinTypeSpec.Type.Double || + arguments [0].Expr.Type.BuiltinType == BuiltinTypeSpec.Type.Bool) + atn = new SimpleName ("String", Location); + break; + } + } + } + if (atn != null) { - member_expr = atn.LookupNameExpression (ec, MemberLookupRestrictions.InvocableOnly | MemberLookupRestrictions.ReadAccess); + MemberLookupRestrictions lookupRestr = MemberLookupRestrictions.InvocableOnly | MemberLookupRestrictions.ReadAccess; + // Allow lookup to return a type for ActionSctipt function style casts. + if (ec.IsPlayScript && arguments != null && arguments.Count == 1) + lookupRestr |= MemberLookupRestrictions.AsTypeCast; + member_expr = atn.LookupNameExpression (ec, lookupRestr); + //member_expr = atn.LookupNameExpression (ec, MemberLookupRestrictions.InvocableOnly | MemberLookupRestrictions.ReadAccess); if (member_expr != null) { + // Handle "function call" style casts in actionscript. +// if (isPlayScript && member_expr is TypeExpr && +// arguments != null && arguments.Count == 1) { +// var castExpr = new Cast(member_expr, arguments[0].Expr, loc); +// return castExpr.Resolve (ec); +// } var name_of = member_expr as NameOf; if (name_of != null) { return name_of.ResolveOverload (ec, arguments); @@ -7034,19 +7887,39 @@ Expression DoResolveInvocation (ResolveContext ec) member_expr = expr.Resolve (ec); } + // Handle function style casts in PlayScript + if (ec.IsPlayScript && arguments != null && arguments.Count == 1) { + if (member_expr == null && atn != null) { + // if we have no member expression here, then try to resolve again with only ReadAccess + member_expr = atn.LookupNameExpression (ec, MemberLookupRestrictions.ReadAccess) as TypeExpr; + } + + if (member_expr is TypeExpr) { + // perform cast to type expression here using argument 0 + // note its important to resolve argument 0 or else the cast will fail + // this cast supports the Vector.([1,2,3]) syntax with Arguments[0] being an AsArrayInitializer + var cast_expr = Arguments [0].Expr.Resolve (ec); + #if !DISABLE_AS3_NULL_STRINGS + // In PlayScript, the string value of null is "null" + if (cast_expr.IsNull && member_expr.Type != null && member_expr.Type.BuiltinType == BuiltinTypeSpec.Type.String) + return new StringConstant (ec.BuiltinTypes, "null", loc); + #endif + return (new Cast (member_expr, cast_expr, loc)).Resolve (ec); + } + } + if (member_expr == null) return null; - // - // Next, evaluate all the expressions in the argument list - // - bool dynamic_arg = false; - if (arguments != null) + if (arguments != null && !args_resolved) arguments.Resolve (ec, out dynamic_arg); TypeSpec expr_type = member_expr.Type; - if (expr_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) + if (expr_type.IsDynamic) { return DoResolveDynamic (ec, member_expr); + } else if (ec.IsPlayScript && expr_type.BuiltinType == BuiltinTypeSpec.Type.Delegate) { // Calls through delegate in PlayScript are dynamic + return DoResolveDynamic (ec, new Cast(new TypeExpression(ec.BuiltinTypes.Dynamic, Location), member_expr, Location).Resolve (ec)); + } mg = member_expr as MethodGroupExpr; Expression invoke = null; @@ -7076,6 +7949,13 @@ Expression DoResolveInvocation (ResolveContext ec) } } + // If actionscript, try to resolve dynamic args to avoid a dynamic invoke if possible. + if (dynamic_arg && ec.IsPlayScript && mg.Candidates.Count > 0) { + if (arguments.AsTryResolveDynamicArgs(ec, mg.Candidates)) { + dynamic_arg = false; + } + } + if (invoke == null) { mg = DoResolveOverload (ec); if (mg == null) @@ -7100,6 +7980,22 @@ Expression DoResolveInvocation (ResolveContext ec) IsSpecialMethodInvocation (ec, method, loc); + // Check for Mono.Optimization intrinsics. +// if (method != null && mg.BestCandidate.DeclaringType.Name == "Msil" && +// method.DeclaringType.MemberDefinition.Namespace == "Mono.Optimization") { +// return new ICSharpCode.NRefactory.MonoCSharp.MsilIntrinsic(expr, arguments, mg).Resolve (ec); +// } +// +// // Attempt to do inlining.. +// if (method != null && ec.Module.Compiler.Settings.Inlining != InliningMode.None && +// (method.MemberDefinition as IMethodData) != null && ((IMethodData)method.MemberDefinition).IsInlinable) { +// var inliner = new Inliner (this); +// var inlinedExpr = inliner.TryInline (ec); +// if (inlinedExpr != this) { +// return inlinedExpr.Resolve (ec); +// } +// } + eclass = ExprClass.Value; return this; } @@ -7162,7 +8058,7 @@ protected virtual Expression DoResolveDynamic (ResolveContext ec, Expression mem protected virtual MethodGroupExpr DoResolveOverload (ResolveContext ec) { - return mg.OverloadResolve (ec, ref arguments, null, OverloadResolver.Restrictions.None); + return mg.OverloadResolve (ec, ref arguments, null, mg.OverloadRestrictions); } public override void FlowAnalysis (FlowAnalysisContext fc) @@ -7193,7 +8089,7 @@ public override bool HasConditionalAccess () // If a member is a method or event, or if it is a constant, field or property of either a delegate type // or the type dynamic, then the member is invocable // - public static bool IsMemberInvocable (MemberSpec member) + public static bool IsMemberInvocable (MemberSpec member, ResolveContext ec = null) { switch (member.Kind) { case MemberKind.Event: @@ -7201,7 +8097,8 @@ public static bool IsMemberInvocable (MemberSpec member) case MemberKind.Field: case MemberKind.Property: var m = member as IInterfaceMemberSpec; - return m.MemberType.IsDelegate || m.MemberType.BuiltinType == BuiltinTypeSpec.Type.Dynamic; + return m.MemberType.IsDelegate || m.MemberType.BuiltinType == BuiltinTypeSpec.Type.Dynamic || + (ec != null && ec.FileType == SourceFileType.PlayScript && m.MemberType.BuiltinType == BuiltinTypeSpec.Type.Delegate); default: return false; } @@ -7261,14 +8158,29 @@ public static SLE.Expression MakeExpression (BuilderContext ctx, Expression inst public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && arguments != null) { + foreach (var arg in arguments) { + if (visitor.Continue && arg.Expr != null) + arg.Expr.Accept (visitor); + } + } + } + + return ret; } } // // Implements simple new expression // - public class New : ExpressionStatement, IMemoryLocation + public partial class New : ExpressionStatement, IMemoryLocation { protected Arguments arguments; @@ -7321,7 +8233,7 @@ public Expression TypeExpression { /// /// Converts complex core type syntax like 'new int ()' to simple constant /// - public static Constant Constantify (TypeSpec t, Location loc) + public static Constant Constantify (TypeSpec t, Location loc, SourceFileType ft = SourceFileType.CSharp) { switch (t.BuiltinType) { case BuiltinTypeSpec.Type.Int: @@ -7333,9 +8245,9 @@ public static Constant Constantify (TypeSpec t, Location loc) case BuiltinTypeSpec.Type.ULong: return new ULongConstant (t, 0, loc); case BuiltinTypeSpec.Type.Float: - return new FloatConstant (t, 0, loc); + return (ft != SourceFileType.PlayScript ? new FloatConstant (t, 0, loc) : new FloatConstant (t, float.NaN, loc)); case BuiltinTypeSpec.Type.Double: - return new DoubleConstant (t, 0, loc); + return (ft != SourceFileType.PlayScript ? new DoubleConstant (t, 0, loc) : new DoubleConstant (t, double.NaN, loc)); case BuiltinTypeSpec.Type.Short: return new ShortConstant (t, 0, loc); case BuiltinTypeSpec.Type.UShort: @@ -7353,7 +8265,7 @@ public static Constant Constantify (TypeSpec t, Location loc) } if (t.IsEnum) - return new EnumConstant (Constantify (EnumSpec.GetUnderlyingType (t), loc), t); + return new EnumConstant (Constantify (EnumSpec.GetUnderlyingType (t), loc, ft), t); if (t.IsNullableType) return Nullable.LiftedNull.Create (t, loc); @@ -7405,7 +8317,56 @@ public override Expression CreateExpressionTree (ResolveContext ec) protected override Expression DoResolve (ResolveContext ec) { - type = RequestedType.ResolveAsType (ec); + bool dynamic = false; + + Expression ret = null; + + // PlayScript can use expression returning a type as a new expression. + if (ec.FileType == SourceFileType.PlayScript) { + + var reqExpr = RequestedType.Resolve (ec); + if (reqExpr == null) + return null; + + if (reqExpr is TypeExpr) { + // PlayScript: Make sure a "new Object()" call in as uses an actual object type and not + // dynamic. + if (reqExpr.Type == ec.BuiltinTypes.Dynamic) { + type = ec.Module.PredefinedTypes.AsExpandoObject.Resolve (); + } else { + type = ((TypeExpr)reqExpr).ResolveAsType (ec); + } + } else if (reqExpr is TypeOf) { + type = ((TypeOf)reqExpr).TypeArgument; + } else if (reqExpr.Type.BuiltinType == BuiltinTypeSpec.Type.Type || + reqExpr.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic){ + if (arguments != null) { + arguments.Resolve (ec, out dynamic); + } + + if (arguments == null) { + arguments = new Arguments(1); + } + + // TODO: Use Activator for this instead of dynamic new. + + arguments.Insert (0, new Argument (reqExpr.Resolve (ec), Argument.AType.DynamicTypeName)); + ret = new DynamicConstructorBinder (reqExpr, arguments, loc).Resolve (ec); + } + + if (ret != null) + return ret; + + // PlayScript: Make sure a "new Object()" call in as uses an actual object type and not + // dynamic. + if (type == ec.BuiltinTypes.Dynamic) { + type = ec.Module.PredefinedTypes.AsExpandoObject.Resolve (); + } + + } else { + type = RequestedType.ResolveAsType (ec); + } + if (type == null) return null; @@ -7466,7 +8427,6 @@ protected override Expression DoResolve (ResolveContext ec) return null; } - bool dynamic; if (arguments != null) { arguments.Resolve (ec, out dynamic); } else { @@ -7477,10 +8437,12 @@ protected override Expression DoResolve (ResolveContext ec) if (dynamic) { arguments.Insert (0, new Argument (new TypeOf (type, loc).Resolve (ec), Argument.AType.DynamicTypeName)); - return new DynamicConstructorBinder (type, arguments, loc).Resolve (ec); + ret = new DynamicConstructorBinder (type, arguments, loc).Resolve (ec); + } else { + ret = this; } - return this; + return ret; } void DoEmitTypeParameter (EmitContext ec) @@ -7643,7 +8605,24 @@ public override SLE.Expression MakeExpression (BuilderContext ctx) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + if (arguments != null) { + foreach (var arg in arguments) { + if (visitor.Continue && arg.Expr != null) + arg.Expr.Accept (visitor); + } + } + } + } + + return ret; } } @@ -7655,8 +8634,8 @@ public override object Accept (StructuralVisitor visitor) // public class ArrayInitializer : Expression { - List elements; - BlockVariable variable; + protected List elements; + protected BlockVariable variable; public ArrayInitializer (List init, Location loc) { @@ -7700,6 +8679,7 @@ public BlockVariable VariableDeclaration { variable = value; } } + #endregion public void Add (Expression expr) @@ -7758,7 +8738,22 @@ public override void FlowAnalysis (FlowAnalysisContext fc) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + foreach (var elem in elements) { + if (visitor.Continue) + elem.Accept (visitor); + } + } + } + + return ret; } } @@ -7802,7 +8797,7 @@ public class ArrayCreation : Expression public ArrayCreation (FullNamedExpression requested_base_type, List exprs, ComposedTypeSpecifier rank, ArrayInitializer initializers, Location l) : this (requested_base_type, rank, initializers, l) { - arguments = exprs; + arguments = new List (exprs); num_arguments = arguments.Count; } @@ -7853,11 +8848,11 @@ public ArrayInitializer Initializers { return this.initializers; } } - + public List Arguments { get { return this.arguments; } } - + bool CheckIndices (ResolveContext ec, ArrayInitializer probe, int idx, bool specified_dims, int child_bounds) { if (initializers != null && bounds == null) { @@ -8492,7 +9487,26 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + if (arguments != null) { + foreach (var arg in arguments) { + if (visitor.Continue) + arg.Accept (visitor); + } + } + } + if (visitor.Continue && initializers != null) + initializers.Accept (visitor); + } + + return ret; } } @@ -8720,8 +9734,14 @@ public override HoistedVariable GetHoistedVariable (AnonymousExpression ae) public static bool IsThisAvailable (ResolveContext ec, bool ignoreAnonymous) { - if (ec.IsStatic || ec.HasAny (ResolveContext.Options.FieldInitializerScope | ResolveContext.Options.BaseInitializer | ResolveContext.Options.ConstantScope)) - return false; + // Actionscript allows "this" access during constructor base initializer calls. + if (ec.FileType == SourceFileType.PlayScript) { + if (ec.IsStatic || ec.HasAny (ResolveContext.Options.FieldInitializerScope | ResolveContext.Options.ConstantScope)) + return false; + } else { + if (ec.IsStatic || ec.HasAny (ResolveContext.Options.FieldInitializerScope | ResolveContext.Options.BaseInitializer | ResolveContext.Options.ConstantScope)) + return false; + } if (ignoreAnonymous || ec.CurrentAnonymousMethod == null) return true; @@ -8941,18 +9961,35 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + if (arguments != null) { + foreach (var arg in arguments) { + if (visitor.Continue && arg.Expr != null) + arg.Expr.Accept (visitor); + } + } + } + } + + return ret; } } public class RefValueExpr : ShimExpression, IAssignMethod, IMemoryLocation { FullNamedExpression texpr; - + public FullNamedExpression FullNamedExpression { get { return texpr;} } - + public RefValueExpr (Expression expr, FullNamedExpression texpr, Location loc) : base (expr) { @@ -9067,7 +10104,18 @@ public override void Emit (EmitContext ec) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -9572,10 +10620,21 @@ public override object Accept (StructuralVisitor visitor) /// /// Implements the member access expression /// - public class MemberAccess : ATypeNameExpression + public partial class MemberAccess : ATypeNameExpression { + public enum Accessor { + Member, + AsE4xDescendant, // The PlayScript E4X .. operator. + AsE4xChildAll, // The PlayScript E4X .* operator. + AsE4xChildAttribute, // The PlayScript E4X .@ operator. + AsE4xDescendantAll, // The PlayScript E4X ..* operator. + AsE4xNamespace // The PlayScript :: operator. + } + + public Accessor AccessorType = Accessor.Member; + protected Expression expr; - + public MemberAccess (Expression expr, string id) : base (id, expr.Location) { @@ -9612,8 +10671,67 @@ public override Location StartLocation { } } + private Expression MakeE4xInvocation (ResolveContext rc, string method, string arg = null) + { + Arguments args = null; + if (arg != null) { + args = new Arguments (1); + args.Add (new Argument (new StringLiteral (rc.BuiltinTypes, arg, loc))); + } + return new Invocation(new MemberAccess(expr, method, loc), args); + } + protected override Expression DoResolve (ResolveContext rc) { + // PlayScript E4X: Handle E4x accesors. + if (rc.IsPlayScript && AccessorType != Accessor.Member) { + if (AccessorType == Accessor.AsE4xChildAll) { + return MakeE4xInvocation(rc, "children").Resolve (rc); + } else if (AccessorType == Accessor.AsE4xDescendantAll) { + return MakeE4xInvocation(rc, "descendants").Resolve (rc); + } else if (AccessorType == Accessor.AsE4xChildAttribute) { + return MakeE4xInvocation (rc, "attribute", Name).Resolve (rc); + } else if (AccessorType == Accessor.AsE4xDescendant) { + return MakeE4xInvocation (rc, "descendants", Name).Resolve (rc); + } else if (AccessorType == Accessor.AsE4xNamespace) { + + // In ActionScript, we can interpret a IDENT::IDENT as a CONFIG variable constants like CONFIG::DEBUG instead + // of an E4X namespace expression. To distinguish between the two, we check to see if the left side is a simple + // name, and that there is actually a macro defined that matches the name we're checking. + if (expr is SimpleName) { + string config_id = ((SimpleName)expr).Name + "_" + this.Name; + if (rc.Module.Compiler.Settings.IsConditionalSymbolDefined (config_id)) { + string value = rc.Module.Compiler.Settings.GetConditionalSymbolValue (config_id); + if (value == "true") { + return new BoolLiteral (rc.BuiltinTypes, true, this.loc); + } else if (value == "false") { + return new BoolLiteral (rc.BuiltinTypes, false, this.loc); + } else if (value.Length > 0 && char.IsDigit (value [0]) || value [0] == '-') { + if (value.IndexOf (".") != -1) { + double dbl = 0.0; + double.TryParse (value, out dbl); + return new DoubleLiteral (rc.BuiltinTypes, dbl, this.loc); + } else { + int i = 0; + int.TryParse (value, out i); + return new IntLiteral (rc.BuiltinTypes, i, this.loc); + } + } else if (value.Length > 0 && (value [0] == '\'' || value [0] == '"')) { + string str = value.Substring (1); + if (str.Length > 0 && (str [str.Length - 1] == '\'' || str [str.Length - 1] == '"')) { + str = str.Substring (0, str.Length - 1); + } + return new StringLiteral (rc.BuiltinTypes, str, this.loc); + } else { + return new StringLiteral (rc.BuiltinTypes, value, this.loc); + } + } + } + + return MakeE4xInvocation (rc, "namespace", Name).Resolve (rc); + } + } + var e = LookupNameExpression (rc, MemberLookupRestrictions.ReadAccess); if (e != null) e = e.Resolve (rc, ResolveFlags.VariableOrValue | ResolveFlags.Type | ResolveFlags.MethodGroup); @@ -9676,7 +10794,10 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup expr.Error_UnexpectedKind (rc, flags, sn.Location); expr = null; } - } else { + // Add separate BuiltinType for the ActionScript "*" type + } else if (rc.IsPlayScript && expr != null) { + expr = expr.Resolve (rc, flags); + } else if (!rc.IsPlayScript) { using (rc.Set (ResolveContext.Options.ConditionalAccessReceiver)) { expr = expr.Resolve (rc, flags); } @@ -9689,6 +10810,17 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup if (ns != null) { var retval = ns.LookupTypeOrNamespace (rc, Name, Arity, LookupMode.Normal, loc); + // PlayScript - Search for _fn or _ns types for bare functions or namespace classes + bool foundFnType = false; + if (rc.IsPlayScript && retval == null) { + retval = ns.LookupTypeOrNamespace (rc, Name + "_fn", Arity, LookupMode.Normal, loc); + if (retval != null) { + foundFnType = true; + } else { + retval = ns.LookupTypeOrNamespace (rc, Name + "_ns", Arity, LookupMode.Normal, loc); + } + } + if (retval == null) { ns.Error_NamespaceDoesNotExist (rc, Name, Arity, loc); return null; @@ -9701,7 +10833,10 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup targs.Resolve (rc, false); } - return retval; + if (!foundFnType) + return retval; + + expr = retval; } MemberExpr me; @@ -9716,6 +10851,15 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup return new DynamicMemberBinder (Name, args, loc); } + // Add "static/instance" restrictions to lookup. + if (rc.IsPlayScript) { + if (expr is TypeExpression) { + restrictions |= MemberLookupRestrictions.PreferStatic; + } else { + restrictions |= MemberLookupRestrictions.PreferInstance; + } + } + var cma = this as ConditionalMemberAccess; if (cma != null) { if (!IsNullPropagatingValid (expr.Type)) { @@ -9744,7 +10888,26 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup // Try to look for extension method when member lookup failed // if (MethodGroupExpr.IsExtensionMethodArgument (expr)) { - var methods = rc.LookupExtensionMethod (Name, lookup_arity); + + // Handle extension properties for PlayScript (these have a get_ or set_ prefix). + string extMethodName; + bool isAsExtGetter = false; + bool isAsExtSetter = false; + if (rc.IsPlayScript && (restrictions & MemberLookupRestrictions.InvocableOnly) == 0) { + if ((restrictions & MemberLookupRestrictions.ReadAccess) != 0) { + isAsExtGetter = true; + extMethodName = "get_" + Name; + } else { + isAsExtSetter = true; + extMethodName = "set_" + Name; + } + } else { + extMethodName = Name; + } + +// var methods = rc.LookupExtensionMethod (Name, lookup_arity); + var methods = rc.LookupExtensionMethod (extMethodName, lookup_arity); + if (methods != null) { var emg = new ExtensionMethodGroupExpr (methods, expr, loc); if (HasTypeArguments) { @@ -9757,6 +10920,14 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup if (cma != null) emg.ConditionalAccess = true; + // Handle any PlayScript extension getter right here (setters are handled in the Assign expression above) + if (isAsExtGetter) { + var args = new Arguments(0); + return new Invocation(new MemberAccess(expr, extMethodName, targs, expr.Location), args).Resolve (rc); + } else if (isAsExtSetter) { + return emg; + } + // TODO: it should really skip the checks bellow return emg.Resolve (rc); } @@ -9765,6 +10936,46 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup if (errorMode) { if (member_lookup == null) { + + // Check AS builtin types + if (rc.FileType == SourceFileType.PlayScript) { + + // PlayScript E4X: Handle XML child elements. + if (AccessorType == Accessor.Member && + expr.Type.MemberDefinition.Namespace == PsConsts.PsRootNamespace && + (expr.Type.Name == "XML" || expr.Type.Name == "XMLList")) { + + return MakeE4xInvocation(rc, "elements", Name).Resolve (rc); + + } + + if (expr is TypeExpression) { + switch (expr_type.BuiltinType) { + case BuiltinTypeSpec.Type.String: + return new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "String", Location), Name, Location).Resolve (rc); + case BuiltinTypeSpec.Type.Double: + return new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "Number", Location), Name, Location).Resolve (rc); + case BuiltinTypeSpec.Type.Int: + return new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "int", Location), Name, Location).Resolve (rc); + case BuiltinTypeSpec.Type.UInt: + return new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "uint", Location), Name, Location).Resolve (rc); + case BuiltinTypeSpec.Type.Bool: + return new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "Boolean", Location), Name, Location).Resolve (rc); + case BuiltinTypeSpec.Type.Type: + return new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "Class", Location), Name, Location).Resolve (rc); + case BuiltinTypeSpec.Type.Delegate: + return new MemberAccess(new MemberAccess(new SimpleName(PsConsts.PsRootNamespace, Location), "Function", Location), Name, Location).Resolve (rc); + } + + } else if (expr_type.IsAsDynamicClass) { + + var arguments = new Arguments(1); + arguments.Add(new Argument(new StringLiteral(rc.BuiltinTypes, Name, loc))); + return new IndexerExpr (null, rc.BuiltinTypes.Object, new ElementAccess(expr, arguments, loc)).Resolve (rc); + + } + } + var dep = expr_type.GetMissingDependencies (); if (dep != null) { ImportedTypeDefinition.Error_MissingDependency (rc, dep, loc); @@ -9833,6 +11044,13 @@ public override Expression LookupNameExpression (ResolveContext rc, MemberLookup me.SetTypeArguments (rc, targs); } + // PlayScript - Add additional restrictions to overload resolution to disambiguate static/instance methods with the + // same name and params. + if (rc.IsPlayScript && (me is MethodGroupExpr) && ((MethodGroupExpr)me).Candidates.Count > 1) { + me.OverloadRestrictions = (expr is TypeExpr) ? + OverloadResolver.Restrictions.StaticOnly : OverloadResolver.Restrictions.InstanceOnly; + } + return me; } @@ -9853,6 +11071,17 @@ public override FullNamedExpression ResolveAsTypeOrNamespace (IMemberContext rc, if (ns != null) { FullNamedExpression retval = ns.LookupTypeOrNamespace (rc, Name, Arity, LookupMode.Normal, loc); + // Lookup ClassName_fn function classes (if PlayScript) + SourceFileType ft = (rc is ResolveContext ? ((ResolveContext)rc).FileType : + (rc is MemberCore ? ((MemberCore)rc).FileType : + SourceFileType.CSharp)); + if (retval == null && ft == SourceFileType.PlayScript) { + retval = ns.LookupTypeOrNamespace (rc, Name + "_fn", Arity, LookupMode.Normal, loc); + if (retval == null) { + retval = ns.LookupTypeOrNamespace (rc, Name + "_ns", Arity, LookupMode.Normal, loc); + } + } + if (retval == null) { ns.Error_NamespaceDoesNotExist (rc, Name, Arity, loc); } else if (Arity > 0) { @@ -9996,10 +11225,21 @@ protected override void CloneTo (CloneContext clonectx, Expression t) target.expr = expr.Clone (clonectx); } - + public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.LeftExpression != null) + this.LeftExpression.Accept (visitor); + } + + return ret; } } @@ -10022,7 +11262,7 @@ public override bool HasConditionalAccess () public class CheckedExpr : Expression { public Expression Expr; - + public CheckedExpr (Expression e, Location l) { Expr = e; @@ -10089,7 +11329,18 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -10159,7 +11410,18 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -10174,6 +11436,14 @@ public class ElementAccess : Expression public Arguments Arguments; public Expression Expr; + public enum Accessor { + ElementAccess, + AsE4xNamespaceAccess, + AsE4xAttributeAccess + } + + public Accessor AccessorType = Accessor.ElementAccess; + public ElementAccess (Expression e, Arguments args, Location loc) { Expr = e; @@ -10229,7 +11499,7 @@ Expression CreateAccessExpression (ResolveContext ec, bool conditionalAccessRece } var indexers = MemberCache.FindMembers (type, MemberCache.IndexerNameAlias, false); - if (indexers != null || type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + if (indexers != null || type.BuiltinType == BuiltinTypeSpec.Type.Dynamic || type.IsAsDynamicClass) { var indexer = new IndexerExpr (indexers, type, this) { ConditionalAccess = ConditionalAccess }; @@ -10240,6 +11510,15 @@ Expression CreateAccessExpression (ResolveContext ec, bool conditionalAccessRece return indexer; } + // PlayScript supports indexer accesses for non-objects + if (ec.FileType == SourceFileType.PlayScript) { + if (loc.SourceFile == null || !loc.SourceFile.PsExtended) { // .play doesn't allow this + type = ec.BuiltinTypes.AsUntyped; + Expr = EmptyCast.Create (Expr, type, ec); + return new IndexerExpr (indexers, type, this); + } + } + Error_CannotApplyIndexing (ec, type, loc); return null; @@ -10289,6 +11568,15 @@ Expression MakePointerAccess (ResolveContext rc, TypeSpec type) protected override Expression DoResolve (ResolveContext rc) { + // Handle PlayScript E4X namespace and attribute accessors. + if (rc.IsPlayScript && AccessorType != Accessor.ElementAccess) { + if (AccessorType == Accessor.AsE4xAttributeAccess) { + return new Invocation(new MemberAccess(Expr, "attribute", loc), Arguments).Resolve (rc); + } else if (AccessorType == Accessor.AsE4xNamespaceAccess) { + return new Invocation(new MemberAccess(Expr, "namespace", loc), Arguments).Resolve (rc); + } + } + Expression expr; if (!rc.HasSet (ResolveContext.Options.ConditionalAccessReceiver)) { if (HasConditionalAccess ()) { @@ -10354,7 +11642,26 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) + this.Expr.Accept (visitor); + if (visitor.Continue) { + if (Arguments != null) { + foreach (var arg in Arguments) { + if (visitor.Continue && arg.Expr != null) + arg.Expr.Accept (visitor); + } + } + } + } + + return ret; } } @@ -10636,7 +11943,7 @@ SLE.Expression[] MakeExpressionArguments (BuilderContext ctx) // // Indexer access expression // - class IndexerExpr : PropertyOrIndexerExpr, OverloadResolver.IBaseMembersProvider + partial class IndexerExpr : PropertyOrIndexerExpr, OverloadResolver.IBaseMembersProvider { IList indexers; Arguments arguments; @@ -10833,23 +12140,30 @@ protected override Expression OverloadResolve (ResolveContext rc, Expression rig bool dynamic; arguments.Resolve (rc, out dynamic); - if (indexers == null && InstanceExpression.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + if (indexers == null && (InstanceExpression.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic || InstanceExpression.Type.IsAsDynamicClass)) { dynamic = true; - } else { + } else if (indexers != null) { var res = new OverloadResolver (indexers, OverloadResolver.Restrictions.None, loc); res.BaseMembersProvider = this; res.InstanceQualifier = this; + // If actionscript, try to resolve dynamic args to avoid a dynamic invoke if possible. + if (dynamic && rc.FileType == SourceFileType.PlayScript && indexers.Count > 0) { + if (arguments.AsTryResolveDynamicArgs(rc, indexers)) { + dynamic = false; + } + } + // TODO: Do I need 2 argument sets? best_candidate = res.ResolveMember (rc, ref arguments); if (best_candidate != null) type = res.BestCandidateReturnType; - else if (!res.BestCandidateIsDynamic) + else if (!res.BestCandidateIsDynamic && rc.FileType != SourceFileType.PlayScript) return null; } // - // It has dynamic arguments + // It has dynamic arguments or instance // if (dynamic) { Arguments args = new Arguments (arguments.Count + 1); @@ -10865,6 +12179,10 @@ protected override Expression OverloadResolve (ResolveContext rc, Expression rig return new DynamicIndexBinder (args, loc); } + if (best_candidate == null) { + return null; + } + // // Try to avoid resolving left expression again // @@ -11124,26 +12442,11 @@ public override object Accept (StructuralVisitor visitor) public class ErrorExpression : EmptyExpression { public static readonly ErrorExpression Instance = new ErrorExpression (); - public readonly int ErrorCode; - public readonly string Error; - + private ErrorExpression () : base (InternalType.ErrorType) { } - - ErrorExpression (int errorCode, Location location, string error) - : base (InternalType.ErrorType) - { - this.ErrorCode = errorCode; - base.loc = location; - this.Error = error; - } - - public static ErrorExpression Create (int errorCode, Location location, string error) - { - return new ErrorExpression (errorCode, location, error); - } public override Expression CreateExpressionTree (ResolveContext ec) { @@ -11508,7 +12811,7 @@ public class StackAlloc : Expression { TypeSpec otype; Expression t; Expression count; - + public StackAlloc (Expression type, Expression count, Location l) { t = type; @@ -11664,9 +12967,29 @@ protected override Expression DoResolve (ResolveContext ec) ec.CurrentInitializerVariable = previous; if (source == null) return null; - + eclass = source.eclass; type = source.Type; + return this; + } else if (source is AsArrayInitializer) { + Expression previous = ec.CurrentInitializerVariable; + ec.CurrentInitializerVariable = target; + source = source.Resolve(ec); + ec.CurrentInitializerVariable = previous; + if (source == null) + return null; + eclass = source.eclass; + type = source.Type; + } else if (source is AsObjectInitializer) { + Expression previous = ec.CurrentInitializerVariable; + ec.CurrentInitializerVariable = target; + source = source.Resolve(ec); + ec.CurrentInitializerVariable = previous; + if (source == null) + return null; + eclass = source.eclass; + type = source.Type; + return this; } @@ -11688,6 +13011,11 @@ protected virtual bool ResolveElement (ResolveContext rc) Arguments args = new Arguments (1); args.Add (new Argument (rc.CurrentInitializerVariable)); target = new DynamicMemberBinder (Name, args, loc); + } else if (rc.FileType == SourceFileType.PlayScript && (t == rc.Module.PredefinedTypes.AsExpandoObject.Resolve())) { + // use expando-specific element accessor + var arguments = new Arguments(1); + arguments.Add(new Argument(new StringLiteral(rc.BuiltinTypes, Name, loc))); + target = new ElementAccess(rc.CurrentInitializerVariable, arguments, loc); } else { var member = MemberLookup (rc, false, t, Name, 0, MemberLookupRestrictions.ExactArity, loc); @@ -11738,7 +13066,6 @@ class CollectionElementInitializer : Invocation { public readonly bool IsSingle; - public class ElementInitializerArgument : Argument { public ElementInitializerArgument (Expression e) @@ -11863,6 +13190,12 @@ public class CollectionOrObjectInitializers : ExpressionStatement IList initializers; bool is_collection_initialization; + protected Assign assign; + protected Argument argument; + + public static readonly CollectionOrObjectInitializers Empty = + new CollectionOrObjectInitializers (Array.AsReadOnly (new Expression [0]), Location.Null); + public CollectionOrObjectInitializers (Location loc) : this (new Expression[0], loc) { @@ -11873,6 +13206,12 @@ public CollectionOrObjectInitializers (IList initializers, Location this.initializers = initializers; this.loc = loc; } + + public IList Initializers { + get { + return initializers; + } + } public bool IsEmpty { get { @@ -11886,12 +13225,6 @@ public bool IsCollectionInitializer { } } - public IList Initializers { - get { - return initializers; - } - } - protected override void CloneTo (CloneContext clonectx, Expression target) { CollectionOrObjectInitializers t = (CollectionOrObjectInitializers) target; @@ -11948,14 +13281,16 @@ protected override Expression DoResolve (ResolveContext ec) throw new InternalErrorException ("This line should never be reached"); } else { var t = ec.CurrentInitializerVariable.Type; - // LAMESPEC: The collection must implement IEnumerable only, no dynamic support - if (!t.ImplementsInterface (ec.BuiltinTypes.IEnumerable, false) && t.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { - ec.Report.Error (1922, loc, "A field or property `{0}' cannot be initialized with a collection " + - "object initializer because type `{1}' does not implement `{2}' interface", - ec.CurrentInitializerVariable.GetSignatureForError (), - ec.CurrentInitializerVariable.Type.GetSignatureForError (), - ec.BuiltinTypes.IEnumerable.GetSignatureForError ()); - return null; + if (ec.FileType == SourceFileType.CSharp) { + // LAMESPEC: The collection must implement IEnumerable only, no dynamic support + if (!t.ImplementsInterface (ec.BuiltinTypes.IEnumerable, false) && t.BuiltinType != BuiltinTypeSpec.Type.Dynamic) { + ec.Report.Error (1922, loc, "A field or property `{0}' cannot be initialized with a collection " + + "object initializer because type `{1}' does not implement `{2}' interface", + ec.CurrentInitializerVariable.GetSignatureForError (), + ec.CurrentInitializerVariable.Type.GetSignatureForError (), + ec.BuiltinTypes.IEnumerable.GetSignatureForError ()); + return null; + } } is_collection_initialization = true; } @@ -12359,7 +13694,24 @@ protected override Expression DoResolve (ResolveContext ec) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + if (arguments != null) { + foreach (var args in arguments) { + if (visitor.Continue && args.Expr != null) + args.Expr.Accept (visitor); + } + } + } + } + + return ret; } } @@ -12427,178 +13779,4 @@ public CatchFilterExpression (Expression expr, Location loc) this.loc = loc; } } - - public class InterpolatedString : Expression - { - readonly StringLiteral start, end; - readonly List interpolations; - Arguments arguments; - - public InterpolatedString (StringLiteral start, List interpolations, StringLiteral end) - { - this.start = start; - this.end = end; - this.interpolations = interpolations; - loc = start.Location; - } - - public Expression ConvertTo (ResolveContext rc, TypeSpec type) - { - var factory = rc.Module.PredefinedTypes.FormattableStringFactory.Resolve (); - if (factory == null) - return null; - - var ma = new MemberAccess (new TypeExpression (factory, loc), "Create", loc); - var res = new Invocation (ma, arguments).Resolve (rc); - if (res != null && res.Type != type) - res = Convert.ExplicitConversion (rc, res, type, loc); - - return res; - } - - public override bool ContainsEmitWithAwait () - { - if (interpolations == null) - return false; - - foreach (var expr in interpolations) { - if (expr.ContainsEmitWithAwait ()) - return true; - } - - return false; - } - - public override Expression CreateExpressionTree (ResolveContext rc) - { - var best = ResolveBestFormatOverload (rc); - if (best == null) - return null; - - Expression instance = new NullLiteral (loc); - var args = Arguments.CreateForExpressionTree (rc, arguments, instance, new TypeOfMethod (best, loc)); - return CreateExpressionFactoryCall (rc, "Call", args); - } - - protected override Expression DoResolve (ResolveContext rc) - { - string str; - - if (interpolations == null) { - str = start.Value; - arguments = new Arguments (1); - } else { - for (int i = 0; i < interpolations.Count; i += 2) { - var ipi = (InterpolatedStringInsert)interpolations [i]; - ipi.Resolve (rc); - } - - arguments = new Arguments (interpolations.Count); - - var sb = new StringBuilder (start.Value); - for (int i = 0; i < interpolations.Count; ++i) { - if (i % 2 == 0) { - sb.Append ('{').Append (i / 2); - var isi = (InterpolatedStringInsert)interpolations [i]; - if (isi.Alignment != null) { - sb.Append (','); - var value = isi.ResolveAligment (rc); - if (value != null) - sb.Append (value.Value); - } - - if (isi.Format != null) { - sb.Append (':'); - sb.Append (isi.Format); - } - - sb.Append ('}'); - arguments.Add (new Argument (interpolations [i])); - } else { - sb.Append (((StringLiteral)interpolations [i]).Value); - } - } - - sb.Append (end.Value); - str = sb.ToString (); - } - - arguments.Insert (0, new Argument (new StringLiteral (rc.BuiltinTypes, str, start.Location))); - - eclass = ExprClass.Value; - type = rc.BuiltinTypes.String; - return this; - } - - public override void Emit (EmitContext ec) - { - // No interpolation, convert to simple string result (needs to match string.Format unescaping) - if (interpolations == null) { - var str = start.Value.Replace ("{{", "{").Replace ("}}", "}"); - if (str != start.Value) - new StringConstant (ec.BuiltinTypes, str, loc).Emit (ec); - else - start.Emit (ec); - - return; - } - - var best = ResolveBestFormatOverload (new ResolveContext (ec.MemberContext)); - if (best == null) - return; - - var ca = new CallEmitter (); - ca.Emit (ec, best, arguments, loc); - } - - MethodSpec ResolveBestFormatOverload (ResolveContext rc) - { - var members = MemberCache.FindMembers (rc.BuiltinTypes.String, "Format", true); - var res = new OverloadResolver (members, OverloadResolver.Restrictions.NoBaseMembers, loc); - return res.ResolveMember (rc, ref arguments); - } - } - - public class InterpolatedStringInsert : CompositeExpression - { - public InterpolatedStringInsert (Expression expr) - : base (expr) - { - } - - public Expression Alignment { get; set; } - public string Format { get; set; } - - protected override Expression DoResolve (ResolveContext rc) - { - var expr = base.DoResolve (rc); - if (expr == null) - return null; - - // - // For better error reporting, assumes the built-in implementation uses object - // as argument(s) - // - return Convert.ImplicitConversionRequired (rc, expr, rc.BuiltinTypes.Object, expr.Location); - } - - public int? ResolveAligment (ResolveContext rc) - { - var c = Alignment.ResolveLabelConstant (rc); - if (c == null) - return null; - - c = c.ImplicitConversionRequired (rc, rc.BuiltinTypes.Int); - if (c == null) - return null; - - var value = (int) c.GetValueAsLong (); - if (value > 32767 || value < -32767) { - rc.Report.Warning (8094, 1, Alignment.Location, - "Alignment value has a magnitude greater than 32767 and may result in a large formatted string"); - } - - return value; - } - } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/field.cs similarity index 91% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/field.cs index 713cea9e2..cb7091dd3 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/field.cs @@ -26,7 +26,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public class FieldDeclarator { @@ -36,13 +36,33 @@ public FieldDeclarator (SimpleMemberName name, Expression initializer) this.Initializer = initializer; } + // PlayScript - field declarators have types + public FieldDeclarator (SimpleMemberName name, Expression initializer, FullNamedExpression type_expr) + { + this.Name = name; + this.TypeExpression = type_expr; + this.Initializer = initializer; + } + #region Properties public SimpleMemberName Name { get; private set; } + public FullNamedExpression TypeExpression { get; private set; } + public TypeSpec Type { get; private set; } public Expression Initializer { get; private set; } #endregion + public bool ResolveType(IMemberContext mc, TypeSpec defaultType) + { + if (TypeExpression != null) + this.Type = TypeExpression.ResolveAsType (mc); + else + this.Type = defaultType; + + return this.Type != null; + } + public virtual FullNamedExpression GetFieldTypeExpression (FieldBase field) { return new TypeExpression (field.MemberType, Name.Location); @@ -52,7 +72,7 @@ public virtual FullNamedExpression GetFieldTypeExpression (FieldBase field) // // Abstract class for all fields // - abstract public class FieldBase : MemberBase + abstract public partial class FieldBase : MemberBase { protected FieldBuilder FieldBuilder; protected FieldSpec spec; @@ -82,6 +102,12 @@ public override AttributeTargets AttributeTargets { } } + public List Declarators { + get { + return this.declarators; + } + } + public Expression Initializer { get { return initializer; @@ -108,12 +134,7 @@ public override string[] ValidAttributeTargets { return attribute_targets; } } - - public List Declarators { - get { - return this.declarators; - } - } + #endregion public void AddDeclarator (FieldDeclarator declarator) @@ -209,7 +230,7 @@ protected override bool CheckBase () public virtual Constant ConvertInitializer (ResolveContext rc, Constant expr) { - return expr.ConvertImplicitly (MemberType); + return expr.ConvertImplicitly (MemberType, rc); } protected override void DoMemberTypeDependentChecks () @@ -237,6 +258,9 @@ public override string DocCommentHeader { public override void Emit () { + if (member_type == Module.Compiler.BuiltinTypes.AsUntyped) + Module.PredefinedAttributes.AsUntypedAttribute.EmitAttribute (FieldBuilder); + if (member_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { Module.PredefinedAttributes.Dynamic.EmitAttribute (FieldBuilder); } else if (!Parent.IsCompilerGenerated && member_type.HasDynamicElement) { @@ -279,6 +303,20 @@ protected override bool VerifyClsCompliance () } return true; } + + protected override bool ResolveMemberType () + { + if (base.ResolveMemberType()) { + if (declarators != null) { + foreach (var decl in declarators) { + if (!decl.ResolveType (this, MemberType)) + return false; + } + } + return true; + } + return false; + } } // @@ -452,11 +490,6 @@ protected override void DoMemberTypeIndependentChecks () GetSignatureForError ()); } } - - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } public override void Emit() { @@ -632,6 +665,22 @@ bool CanBeVolatile () public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && this.Initializer != null && visitor.Depth >= VisitDepth.Initializers) + this.Initializer.Accept (visitor); + if (visitor.Continue && declarators != null && visitor.Depth >= VisitDepth.Initializers) { + foreach (var decl in declarators) { + if (visitor.Continue && decl.Initializer != null) { + decl.Initializer.Accept (visitor); + } + } + } + } } public override bool Define () @@ -665,7 +714,7 @@ public override bool Define () if (declarators != null) { foreach (var d in declarators) { - var f = new Field (Parent, d.GetFieldTypeExpression (this), ModFlags, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); + var f = new Field (Parent, d.TypeExpression ?? d.GetFieldTypeExpression (this), ModFlags, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); if (d.Initializer != null) f.initializer = d.Initializer; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/flowanalysis.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/flowanalysis.cs index 54dfe9137..762c47d74 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/flowanalysis.cs @@ -15,7 +15,7 @@ using System.Text; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // This is used by the flow analysis code to keep track of the type of local variables. diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/generic.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/generic.cs index c23278dae..e352a701d 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/generic.cs @@ -27,7 +27,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public class VarianceDecl { public VarianceDecl (Variance variance, Location loc) @@ -122,7 +122,7 @@ public class Constraints readonly Location loc; bool resolved; bool resolving; - + public IEnumerable ConstraintExpressions { get { return constraints; @@ -479,6 +479,18 @@ bool ITypeDefinition.IsComImport { } } + bool ITypeDefinition.IsAsDynamicClass { + get { + return false; + } + } + + bool ITypeDefinition.IsAsBindableClass { + get { + return false; + } + } + bool ITypeDefinition.IsPartial { get { return false; @@ -1064,15 +1076,11 @@ public TypeSpec GetEffectiveBase () if (HasTypeConstraint) types [types.Length - 1] = BaseType; - - return effective_base = Convert.FindMostEncompassedType (types); + return effective_base = Convert.FindMostEncompassedType (types, null); } - public override string GetSignatureForDocumentation (bool explicitName) + public override string GetSignatureForDocumentation () { - if (explicitName) - return Name; - var prefix = IsMethodOwned ? "``" : "`"; return prefix + DeclaredPosition; } @@ -2717,7 +2725,8 @@ bool CheckConversion (IMemberContext mc, MemberSpec context, TypeSpec atype, Typ return true; } } else { - if (Convert.ImplicitReferenceConversionExists (atype, ttype) || Convert.ImplicitBoxingConversion (null, atype, ttype) != null) + ResolveContext opt_ec = mc as ResolveContext; + if (Convert.ImplicitReferenceConversionExists (atype, ttype, false, opt_ec, false) || Convert.ImplicitBoxingConversion (null, atype, ttype) != null) return true; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/import.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/import.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/import.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/import.cs index d04b585e0..edcbf5f6d 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/import.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/import.cs @@ -23,8 +23,9 @@ using System.Reflection; using System.Reflection.Emit; #endif +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public abstract class MetadataImporter { @@ -34,10 +35,19 @@ public abstract class MetadataImporter // protected struct DynamicTypeReader { - static readonly bool[] single_attribute = { true }; + enum TypeFlags + { + None = 0, + Dynamic = 1, + AsUntyped = 2, + + All = Dynamic | AsUntyped, + } + + static readonly TypeFlags[] single_dynamic_attribute = { TypeFlags.Dynamic }; public int Position; - bool[] flags; + TypeFlags[] flags; // There is no common type for CustomAttributeData and we cannot // use ICustomAttributeProvider @@ -61,7 +71,7 @@ public bool IsDynamicObject () if (provider != null) ReadAttribute (); - return flags != null && Position < flags.Length && flags[Position]; + return flags != null && Position < flags.Length && (flags [Position] & TypeFlags.Dynamic) != 0; } // @@ -75,6 +85,18 @@ public bool HasDynamicAttribute () return flags != null; } + // + // Returns true when object at local position has an AsUntypedAttribute + // + public bool IsAsUntypedObject (MetadataImporter importer) + { + if (provider != null) + ReadAttribute (); + + return flags != null && Position < flags.Length && (flags [Position] & TypeFlags.AsUntyped) != 0; + + } + IList GetCustomAttributes () { var mi = provider as MemberInfo; @@ -97,13 +119,16 @@ void ReadAttribute () } if (cad.Count > 0) { + // + // Check for DynamicAttribute + // foreach (var ca in cad) { var dt = ca.Constructor.DeclaringType; if (dt.Name != "DynamicAttribute" || dt.Namespace != CompilerServicesNamespace) continue; if (ca.ConstructorArguments.Count == 0) { - flags = single_attribute; + flags = single_dynamic_attribute; break; } @@ -111,15 +136,35 @@ void ReadAttribute () if (arg_type.IsArray && MetaType.GetTypeCode (arg_type.GetElementType ()) == TypeCode.Boolean) { var carg = (IList) ca.ConstructorArguments[0].Value; - flags = new bool[carg.Count]; + flags = new TypeFlags[carg.Count]; for (int i = 0; i < flags.Length; ++i) { - if (MetaType.GetTypeCode (carg[i].ArgumentType) == TypeCode.Boolean) - flags[i] = (bool) carg[i].Value; + if (MetaType.GetTypeCode (carg [i].ArgumentType) == TypeCode.Boolean) + flags [i] |= (bool)carg [i].Value ? TypeFlags.Dynamic : 0; } break; } } + + // + // Check for AsUntypedAttribute + // + if (flags != null) { + foreach (var ca in cad) { + var dt = ca.Constructor.DeclaringType; + if (dt.Name != "AsUntypedAttribute") + continue; + + var newFlags = new TypeFlags[flags.Length]; + for (int i = 0; i < flags.Length; ++i) { + newFlags [i] = flags [i]; + if ((flags [i] & TypeFlags.Dynamic) != 0) + newFlags [i] |= TypeFlags.AsUntyped; + } + flags = newFlags; + break; + } + } } provider = null; @@ -545,11 +590,11 @@ AParametersCollection CreateParameters (TypeSpec parent, ParameterInfo[] pi, Met if (dt.Namespace != CompilerServicesNamespace) continue; - if (dt.Name == "CallerLineNumberAttribute" && (ptype.BuiltinType == BuiltinTypeSpec.Type.Int || Convert.ImplicitNumericConversionExists (module.Compiler.BuiltinTypes.Int, ptype))) + if (dt.Name == "CallerLineNumberAttribute" && (ptype.BuiltinType == BuiltinTypeSpec.Type.Int || Convert.ImplicitNumericConversionExists (module.Compiler.BuiltinTypes.Int, ptype, null, false))) mod |= Parameter.Modifier.CallerLineNumber; - else if (dt.Name == "CallerFilePathAttribute" && Convert.ImplicitReferenceConversionExists (module.Compiler.BuiltinTypes.String, ptype)) + else if (dt.Name == "CallerFilePathAttribute" && Convert.ImplicitReferenceConversionExists (module.Compiler.BuiltinTypes.String, ptype, null, false)) mod |= Parameter.Modifier.CallerFilePath; - else if (dt.Name == "CallerMemberNameAttribute" && Convert.ImplicitReferenceConversionExists (module.Compiler.BuiltinTypes.String, ptype)) + else if (dt.Name == "CallerMemberNameAttribute" && Convert.ImplicitReferenceConversionExists (module.Compiler.BuiltinTypes.String, ptype, null, false)) mod |= Parameter.Modifier.CallerMemberName; } } else if (value == Missing.Value) { @@ -733,6 +778,9 @@ protected TypeSpec CreateType (MetaType type, TypeSpec declaringType, DynamicTyp TypeSpec spec; if (import_cache.TryGetValue (type, out spec)) { if (spec.BuiltinType == BuiltinTypeSpec.Type.Object) { + if (dtype.IsAsUntypedObject (this)) + return module.Compiler.BuiltinTypes.AsUntyped; + if (dtype.IsDynamicObject ()) return module.Compiler.BuiltinTypes.Dynamic; @@ -1172,6 +1220,7 @@ TypeSpec ImportType (MetaType type, DynamicTypeReader dtype) throw new NotImplementedException ("Unknown element type " + type.ToString ()); } + //PlayScript Regression area - 1b41e096fe7068d15386edf2f27ec09bd3755c6b TypeSpec compiled_type; if (compiled_types.TryGetValue (type, out compiled_type)) { if (compiled_type.BuiltinType == BuiltinTypeSpec.Type.Object && dtype.IsDynamicObject ()) @@ -1288,6 +1337,10 @@ protected class AttributesBag public bool? CLSAttributeValue; public TypeSpec CoClass; + // ActionScript - Dynamic attribute defined.. + public bool AsDynamic; + public bool AsBindable; + static bool HasMissingType (ConstructorInfo ctor) { #if STATIC @@ -1408,6 +1461,31 @@ public static AttributesBag Read (MemberInfo mi, MetadataImporter importer) bag.CoClass = importer.ImportType ((MetaType) a.ConstructorArguments[0].Value); continue; } + + // ActionScript Dynamic Attribute + if (name == "DynamicClassAttribute") { + if (dt.Namespace != "PlayScript") + continue; + + if (bag == null) + bag = new AttributesBag (); + + bag.AsDynamic = true; + continue; + } + + // ActionScript Bindable Attribute + if (name == "BindableAttribute") { + if (dt.Namespace != PsConsts.PsRootNamespace) + continue; + + if (bag == null) + bag = new AttributesBag (); + + bag.AsBindable = true; + continue; + } + } } @@ -1834,6 +1912,23 @@ bool ITypeDefinition.IsComImport { } } + bool ITypeDefinition.IsAsDynamicClass { + get { + if (cattrs == null) + ReadAttributes (); + + return cattrs.AsDynamic; + } + } + + bool ITypeDefinition.IsAsBindableClass { + get { + if (cattrs == null) + ReadAttributes (); + + return cattrs.AsBindable; + } + } bool ITypeDefinition.IsPartial { get { @@ -2286,6 +2381,18 @@ bool ITypeDefinition.IsComImport { } } + bool ITypeDefinition.IsAsDynamicClass { + get { + return false; + } + } + + bool ITypeDefinition.IsAsBindableClass { + get { + return false; + } + } + bool ITypeDefinition.IsPartial { get { return false; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/iterators.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/iterators.cs index d84bd010c..ada3d6aa5 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/iterators.cs @@ -21,7 +21,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public abstract class YieldStatement : ResumableStatement where T : StateMachineInitializer { @@ -138,7 +138,18 @@ public override bool Resolve (BlockContext bc) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && expr != null) + expr.Accept (visitor); + } + + return ret; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/lambda.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/lambda.cs index e3046980b..13530b1a1 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/lambda.cs @@ -16,7 +16,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public class LambdaExpression : AnonymousMethodExpression { // @@ -127,7 +127,18 @@ public override string GetSignatureForError () public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && Block != null) + Block.Accept (visitor); + } + + return ret; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/linq.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/linq.cs index c1efb408e..df5c440d5 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/linq.cs @@ -12,7 +12,7 @@ using System; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.MonoCSharp.Linq +namespace ICSharpCode.NRefactory.MonoPlayScript.Linq { public class QueryExpression : AQueryClause { @@ -48,11 +48,6 @@ protected override Expression DoResolve (ResolveContext ec) protected override string MethodName { get { throw new NotSupportedException (); } } - - public override object Accept (StructuralVisitor visitor) - { - return visitor.Visit (this); - } } public abstract class AQueryClause : ShimExpression @@ -281,13 +276,13 @@ protected override Expression DoResolve (ResolveContext ec) } protected RangeVariable identifier; - + public RangeVariable IntoVariable { get { return identifier; } } - + protected ARangeVariableQueryClause (QueryBlock block, RangeVariable identifier, Expression expr, Location loc) : base (block, expr, loc) { @@ -376,6 +371,12 @@ public bool IsParameter { public string Name { get; private set; } + // PlayScript - Not used. + FullNamedExpression INamedBlockVariable.TypeExpr { + get { return null; } + set { } + } + #endregion public Expression CreateReferenceExpression (ResolveContext rc, Location loc) @@ -447,14 +448,8 @@ protected override Expression DoResolve (ResolveContext ec) protected override string MethodName { get { throw new NotSupportedException (); } } - - public override object Accept (StructuralVisitor visitor) - { - return visitor.Visit (this); - } } - public class GroupBy : AQueryClause { Expression element_selector; @@ -524,7 +519,7 @@ public class Join : SelectMany public RangeVariable JoinVariable { get { return this.GetIntoVariable (); } } - + public Join (QueryBlock block, RangeVariable lt, Expression inner, QueryBlock outerSelector, QueryBlock innerSelector, Location loc) : base (block, lt, inner, loc) { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/literal.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/literal.cs index 2a848f9ce..733bb5489 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/literal.cs @@ -26,7 +26,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { public interface ILiteralConstant { @@ -132,20 +132,20 @@ public IntLiteral (BuiltinTypes types, int l, Location loc) { } - public override Constant ConvertImplicitly (TypeSpec type) + public override Constant ConvertImplicitly (TypeSpec type, ResolveContext opt_ec, bool upconvert_only = false) { // // The 0 literal can be converted to an enum value // if (Value == 0 && type.IsEnum) { - Constant c = ConvertImplicitly (EnumSpec.GetUnderlyingType (type)); + Constant c = ConvertImplicitly (EnumSpec.GetUnderlyingType (type), opt_ec, upconvert_only); if (c == null) return null; return new EnumConstant (c, type); } - return base.ConvertImplicitly (type); + return base.ConvertImplicitly (type, opt_ec, upconvert_only); } public override bool IsLiteral { @@ -310,7 +310,7 @@ public override object Accept (StructuralVisitor visitor) } } - public class StringLiteral : StringConstant, ILiteralConstant + public partial class StringLiteral : StringConstant, ILiteralConstant { public StringLiteral (BuiltinTypes types, string s, Location loc) : base (types, s, loc) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/location.cs similarity index 89% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/location.cs index af042e5bb..9d951fdbe 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/location.cs @@ -14,10 +14,17 @@ using System.Collections.Generic; using Mono.CompilerServices.SymbolWriter; using System.Diagnostics; +using System.IO; using System.Linq; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { + public enum SourceFileType + { + CSharp, + PlayScript + } + // // This is one single source file. // @@ -59,6 +66,10 @@ public override string ToString () public readonly int Index; public bool AutoGenerated; + // AS Support + public SourceFileType FileType; // FileType is PlayScript or CSharp + public bool PsExtended; // Allow PlayScript Extended Syntax (C# constructs/types) + SourceFileEntry file; byte[] algGuid, checksum; List hidden_lines; @@ -68,6 +79,16 @@ public SourceFile (string name, string path, int index) this.Index = index; this.Name = name; this.FullPathName = path; + var ext = Path.GetExtension (path); + if (String.IsNullOrEmpty(name) || String.IsNullOrEmpty(ext) || ext.ToLower() == ".play") { + FileType = SourceFileType.PlayScript; + PsExtended = true; + } else if (ext.ToLower() == ".as") { + FileType = SourceFileType.PlayScript; + PsExtended = false; + } else { + FileType = SourceFileType.CSharp; + } } public byte[] Checksum { @@ -197,7 +218,7 @@ public Checkpoint (int file, int line) public readonly static Location Null = new Location (); public static bool InEmacs; - + static Location () { Reset (); @@ -319,7 +340,6 @@ public bool IsNull { public string Name { get { int index = File; - if (token == 0 || index <= 0) return null; @@ -395,6 +415,13 @@ public SourceFile SourceFile { } } + public bool IsPlayScript { + get { + var sourceFile = SourceFile; + return sourceFile == null ? false : (sourceFile.FileType == SourceFileType.PlayScript ? true : false); + } + } + #region IEquatable Members public bool Equals (Location other) @@ -404,7 +431,7 @@ public bool Equals (Location other) #endregion } - + public class SpecialsBag { public enum CommentType @@ -436,7 +463,7 @@ public abstract class SpecialBase { public abstract void Accept (SpecialVisitor visitor); } - + public class Comment : SpecialBase { public readonly CommentType CommentType; @@ -446,7 +473,7 @@ public class Comment : SpecialBase public readonly int EndLine; public readonly int EndCol; public readonly string Content; - + public Comment (CommentType commentType, bool startsLine, int line, int col, int endLine, int endCol, string content) { this.CommentType = commentType; @@ -528,9 +555,9 @@ public class PreProcessorDirective : SpecialBase public readonly Tokenizer.PreprocessorDirective Cmd; public readonly string Arg; - + public bool Take = true; - + public PreProcessorDirective (int line, int col, int endLine, int endCol, Tokenizer.PreprocessorDirective cmd, string arg) { this.Line = line; @@ -540,7 +567,7 @@ public PreProcessorDirective (int line, int col, int endLine, int endCol, Tokeni this.Cmd = cmd; this.Arg = arg; } - + public override void Accept (SpecialVisitor visitor) { visitor.Visit (this); @@ -551,14 +578,14 @@ public override string ToString () return string.Format ("[PreProcessorDirective: Line={0}, Col={1}, EndLine={2}, EndCol={3}, Cmd={4}, Arg={5}]", Line, Col, EndLine, EndCol, Cmd, Arg); } } - + public readonly List Specials = new List (); - + CommentType curComment; bool startsLine; int startLine, startCol; System.Text.StringBuilder contentBuilder = new System.Text.StringBuilder (); - + [Conditional ("FULL_AST")] public void StartComment (CommentType type, bool startsLine, int startLine, int startCol) { @@ -571,7 +598,7 @@ public void StartComment (CommentType type, bool startsLine, int startLine, int this.startCol = startCol; contentBuilder.Length = 0; } - + [Conditional ("FULL_AST")] public void PushCommentChar (int ch) { @@ -588,7 +615,7 @@ public void PushCommentString (string str) return; contentBuilder.Append (str); } - + bool inComment; [Conditional ("FULL_AST")] public void EndComment (int endLine, int endColumn) @@ -603,7 +630,7 @@ public void EndComment (int endLine, int endColumn) return; Specials.Add (new Comment (curComment, startsLine, startLine, startCol, endLine, endColumn, contentBuilder.ToString ())); } - + [Conditional ("FULL_AST")] public void AddPreProcessorDirective (int startLine, int startCol, int endLine, int endColumn, Tokenizer.PreprocessorDirective cmd, string arg) { @@ -612,15 +639,15 @@ public void AddPreProcessorDirective (int startLine, int startCol, int endLine, if (inComment) EndComment (startLine, startCol); switch (cmd) { - case Tokenizer.PreprocessorDirective.Pragma: - Specials.Add (new PragmaPreProcessorDirective (startLine, startCol, endLine, endColumn, cmd, arg)); - break; - case Tokenizer.PreprocessorDirective.Line: - Specials.Add (new LineProcessorDirective (startLine, startCol, endLine, endColumn, cmd, arg)); - break; - default: - Specials.Add (new PreProcessorDirective (startLine, startCol, endLine, endColumn, cmd, arg)); - break; + case Tokenizer.PreprocessorDirective.Pragma: + Specials.Add (new PragmaPreProcessorDirective (startLine, startCol, endLine, endColumn, cmd, arg)); + break; + case Tokenizer.PreprocessorDirective.Line: + Specials.Add (new LineProcessorDirective (startLine, startCol, endLine, endColumn, cmd, arg)); + break; + default: + Specials.Add (new PreProcessorDirective (startLine, startCol, endLine, endColumn, cmd, arg)); + break; } } @@ -685,14 +712,6 @@ public class LocationsBag { public class MemberLocations { - public IList> Modifiers { get; internal set; } - List locations; - - public MemberLocations (IList> mods, IEnumerable locs) - { - Modifiers = mods; - locations = locs != null ? new List (locs) : null; -/* public readonly IList> Modifiers; List locations; @@ -716,7 +735,7 @@ public MemberLocations (IList> mods, Location[] locs) public MemberLocations (IList> mods, List locs) : this (mods) { - locations = locs;*/ + locations = locs; } #region Properties @@ -729,7 +748,7 @@ public Location this [int index] { public int Count { get { - return locations != null ? locations.Count : 0; + return locations.Count; } } @@ -745,16 +764,7 @@ public void AddLocations (Location loc) } public void AddLocations (params Location[] additional) - - { - - AddLocations ((IEnumerable)additional); - - } - public void AddLocations (IEnumerable additional) { - if (additional == null) - return; if (locations == null) { locations = new List (additional); } else { @@ -762,11 +772,6 @@ public void AddLocations (IEnumerable additional) } } } - - public MemberCore LastMember { - get; - private set; - } Dictionary> simple_locs = new Dictionary> (ReferenceEquality.Default); Dictionary member_locs = new Dictionary (ReferenceEquality.Default); @@ -774,20 +779,7 @@ public MemberCore LastMember { [Conditional ("FULL_AST")] public void AddLocation (object element, params Location[] locations) { - AddLocation (element, (IEnumerable)locations); - } - - [Conditional ("FULL_AST")] - public void AddLocation (object element, IEnumerable locations) - { - if (element == null || locations == null) - return; - List found; - if (!simple_locs.TryGetValue (element, out found)) { - simple_locs.Add (element, new List (locations)); - return; - } - found.AddRange(locations); + simple_locs.Add (element, new List (locations)); } [Conditional ("FULL_AST")] @@ -805,69 +797,60 @@ public void InsertLocation (object element, int index, Location location) [Conditional ("FULL_AST")] public void AddStatement (object element, params Location[] locations) { - if (element == null) - return; if (locations.Length == 0) throw new ArgumentException ("Statement is missing semicolon location"); - simple_locs.Add (element, new List(locations)); + + AddLocation (element, locations); + } + + [Conditional ("FULL_AST")] + public void AddMember (MemberCore member, IList> modLocations) + { + member_locs.Add (member, new MemberLocations (modLocations)); + } + + [Conditional ("FULL_AST")] + public void AddMember (MemberCore member, IList> modLocations, Location location) + { + member_locs.Add (member, new MemberLocations (modLocations, location)); } [Conditional ("FULL_AST")] public void AddMember (MemberCore member, IList> modLocations, params Location[] locations) { - LastMember = member; - if (member == null) - return; - - MemberLocations existing; - if (member_locs.TryGetValue (member, out existing)) { - existing.Modifiers = modLocations; - existing.AddLocations (locations); - return; - } member_locs.Add (member, new MemberLocations (modLocations, locations)); } [Conditional ("FULL_AST")] - public void AddMember (MemberCore member, IList> modLocations, IEnumerable locations) + public void AddMember (MemberCore member, IList> modLocations, List locations) { - LastMember = member; - if (member == null) - return; - - MemberLocations existing; - if (member_locs.TryGetValue (member, out existing)) { - existing.Modifiers = modLocations; - existing.AddLocations (locations); - return; - } member_locs.Add (member, new MemberLocations (modLocations, locations)); } [Conditional ("FULL_AST")] - public void AppendToMember (MemberCore existing, params Location[] locations) + public void AppendTo (object element, Location location) { - AppendToMember (existing, (IEnumerable)locations); + List found; + if (!simple_locs.TryGetValue (element, out found)) { + found = new List (); + simple_locs.Add (element, found); + } + found.Add (location); } - + [Conditional ("FULL_AST")] - public void AppendToMember (MemberCore existing, IEnumerable locations) + public void AppendToMember (MemberCore existing, params Location[] locations) { - if (existing == null) - return; MemberLocations member; if (member_locs.TryGetValue (existing, out member)) { member.AddLocations (locations); return; } - member_locs.Add (existing, new MemberLocations (null, locations)); } public List GetLocations (object element) { - if (element == null) - return null; List found; simple_locs.TryGetValue (element, out found); return found; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/membercache.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/membercache.cs index 6cfef4b32..b5ff098bd 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/membercache.cs @@ -15,7 +15,7 @@ using System; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { [Flags] public enum MemberKind @@ -1357,6 +1357,9 @@ public bool CheckExistingMembersOverloads (MemberCore member, AParametersCollect public bool CheckExistingMembersOverloads (MemberCore member, string name, AParametersCollection parameters) { + // Check if we are PlayScript class + bool is_playscript = member.Parent.FileType == SourceFileType.PlayScript; + IList entries; if (!member_hash.TryGetValue (name, out entries)) return false; @@ -1378,6 +1381,10 @@ public bool CheckExistingMembersOverloads (MemberCore member, string name, APara if (member.Parent.PartialContainer != ce.DeclaringType.MemberDefinition) continue; + // PlayScript - Permit methods of the same name/params/arity where one is static and the other is non-static. + if (is_playscript && (member.ModFlags & Modifiers.STATIC) != (ce.Modifiers & Modifiers.STATIC)) + continue; + var p_types = pd.Types; if (method_param_count > 0) { int ii = method_param_count - 1; @@ -1515,5 +1522,6 @@ public bool CheckExistingMembersOverloads (MemberCore member, string name, APara return true; } + } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/method.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/method.cs index 0ce37f6b1..4774a342d 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/method.cs @@ -38,8 +38,9 @@ using System.Reflection; using System.Reflection.Emit; #endif +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public abstract class MethodCore : InterfaceMemberBase, IParametersMember { @@ -47,7 +48,10 @@ public abstract class MethodCore : InterfaceMemberBase, IParametersMember protected ToplevelBlock block; protected MethodSpec spec; - protected MethodCore (TypeDefinition parent, FullNamedExpression type, Modifiers mod, Modifiers allowed_mod, + protected bool isInlinable; + protected bool? allowDynamic; + + public MethodCore (TypeDefinition parent, FullNamedExpression type, Modifiers mod, Modifiers allowed_mod, MemberName name, Attributes attrs, ParametersCompiled parameters) : base (parent, type, mod, allowed_mod, name, attrs) { @@ -102,6 +106,21 @@ public CallingConventions CallingConventions { } } + public bool? AllowDynamic { + get { + if (allowDynamic != null) { + return allowDynamic; + } else if (Parent != null) { + return Parent.AllowDynamic; + } else { + return true; + } + } + set { + allowDynamic = value; + } + } + protected override bool CheckOverrideAgainstBase (MemberSpec base_member) { bool res = base.CheckOverrideAgainstBase (base_member); @@ -134,6 +153,12 @@ public override string DocCommentHeader get { return "M:"; } } + public bool IsInlinable { + get { + return isInlinable; + } + } + public override void Emit () { if ((ModFlags & Modifiers.COMPILER_GENERATED) == 0) { @@ -527,7 +552,7 @@ public override List ResolveMissingDependencies (Membe } } - public abstract class MethodOrOperator : MethodCore, IMethodData, IMethodDefinition + public abstract partial class MethodOrOperator : MethodCore, IMethodData, IMethodDefinition { ReturnParameter return_attributes; SecurityType declarative_security; @@ -618,6 +643,8 @@ public override bool Define () if (!CheckBase ()) return false; + allowDynamic = CheckAllowDynamic (); + MemberKind kind; if (this is Operator) kind = MemberKind.Operator; @@ -655,9 +682,56 @@ public override bool Define () Parent.MemberCache.AddMember (this, explicit_name, spec); + ApplyAggressiveInlining (); + +// if (Compiler.Settings.Inlining != InliningMode.None) +// isInlinable = Inliner.DetermineIsInlinable (Compiler, this); + return true; } + /// + /// Checks for inline attribute and converts it to MethodImplAttribute(MethodImplOptions.AggressiveInlining) + /// if parsing a PlayScript file. + /// + public void ApplyAggressiveInlining () + { + if ((this.FileType != SourceFileType.PlayScript) || (this.OptAttributes == null) + || (!System.Enum.IsDefined(typeof(MethodImplOptions), "AggressiveInlining"))) { + return; + } + + bool hasInlineAttribute = false; + + foreach (var attr in this.OptAttributes.Attrs) { + if (String.Compare (attr.Name, "inline", StringComparison.OrdinalIgnoreCase) == 0) { + hasInlineAttribute = true; + break; + } + } + + if (hasInlineAttribute) { + var system = new SimpleName ("System", Location.Null); + var runtime = new MemberAccess (system, "Runtime", Location.Null); + var compilerServices = new MemberAccess (runtime, "CompilerServices", Location.Null); + var methodImplOptions = new MemberAccess (compilerServices, "MethodImplOptions", Location.Null); + + var args = new Arguments (0); + var aggressiveInlinning = new MemberAccess (methodImplOptions, "AggressiveInlining", Location.Null); + args.Add (new Argument (aggressiveInlinning)); + + var argsArray = new Arguments[2]; + argsArray [0] = args; + argsArray [1] = null; + + var methodImplAttribute = new MemberAccess (compilerServices, "MethodImplAttribute", Location.Null); + var inlineAttribute = new Attribute (null, methodImplAttribute, argsArray, Location.Null, false); + inlineAttribute.AttachTo (this, this); + + this.OptAttributes.AddAttribute (inlineAttribute); + } + } + protected override void DoMemberTypeIndependentChecks () { base.DoMemberTypeIndependentChecks (); @@ -696,11 +770,16 @@ public override void Emit () if ((ModFlags & Modifiers.DEBUGGER_STEP_THROUGH) != 0) Module.PredefinedAttributes.DebuggerStepThrough.EmitAttribute (MethodBuilder); - if (ReturnType.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + if (ReturnType == Module.Compiler.BuiltinTypes.AsUntyped) { return_attributes = new ReturnParameter (this, MethodBuilder, Location); + Module.PredefinedAttributes.AsUntypedAttribute.EmitAttribute (return_attributes.Builder); + } + + if (ReturnType.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + return_attributes = return_attributes ?? new ReturnParameter (this, MethodBuilder, Location); Module.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder); } else if (ReturnType.HasDynamicElement) { - return_attributes = new ReturnParameter (this, MethodBuilder, Location); + return_attributes = return_attributes ?? new ReturnParameter (this, MethodBuilder, Location); Module.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder, ReturnType, Location); } @@ -850,7 +929,7 @@ public override void WriteDebugSymbol (MonoSymbolFile file) } } - public class Method : MethodOrOperator, IGenericMethodDefinition + public partial class Method : MethodOrOperator, IGenericMethodDefinition { Method partialMethodImplementation; @@ -861,12 +940,14 @@ public Method (TypeDefinition parent, FullNamedExpression return_type, Modifiers AllowedModifiersClass | Modifiers.ASYNC, name, attrs, parameters) { + HasNoReturnType = false; } protected Method (TypeDefinition parent, FullNamedExpression return_type, Modifiers mod, Modifiers amod, MemberName name, ParametersCompiled parameters, Attributes attrs) : base (parent, return_type, mod, amod, name, attrs, parameters) { + HasNoReturnType = false; } #region Properties @@ -889,11 +970,22 @@ public int TypeParametersCount { } } + public bool HasNoReturnType { get; set; } + #endregion public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && visitor.Depth >= VisitDepth.MethodBodies && this.block != null) + this.block.Accept (visitor); + } } public static Method Create (TypeDefinition parent, FullNamedExpression returnType, Modifiers mod, @@ -1230,6 +1322,11 @@ public override bool Define () DefineTypeParameters (); } + // PlayScript - Create a varargs array for this method +// if (Parent.FileType == SourceFileType.PlayScript && !PsExtended && block != null) { +// block.ParametersBlock.PsCreateVarArgsArray (Parent.Module); +// } + if (block != null) { if (block.IsIterator) { // @@ -1442,7 +1539,10 @@ public abstract class ConstructorInitializer : ExpressionStatement Arguments argument_list; MethodSpec base_ctor; - protected ConstructorInitializer (Arguments argument_list, Location loc) + // PlayScript: Initializer is explicitly called via super() call in constructor method. + public bool IsAsExplicitSuperCall; + + public ConstructorInitializer (Arguments argument_list, Location loc) { this.argument_list = argument_list; this.loc = loc; @@ -1479,6 +1579,16 @@ protected override Expression DoResolve (ResolveContext ec) bool dynamic; argument_list.Resolve (ec, out dynamic); + // If actionscript, convert dynamic constructor arguments to type System.Object. + if (dynamic && ec.FileType == SourceFileType.PlayScript) { + var ctors = MemberCache.FindMembers (ec.CurrentType.BaseType, Constructor.ConstructorName, true); + if (ctors != null) { + if (argument_list.AsTryResolveDynamicArgs(ec, ctors)) { + dynamic = false; + } + } + } + if (dynamic) { ec.Report.Error (1975, loc, "The constructor call cannot be dynamically dispatched within constructor initializer"); @@ -1635,6 +1745,11 @@ public bool IsDefault () public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Continue && visitor.Depth >= VisitDepth.MethodBodies && this.block != null) + this.block.Accept (visitor); + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -1698,11 +1813,6 @@ public override bool Define () } } - if ((ModFlags & Modifiers.EXTERN) != 0 && Initializer != null) { - Report.Error (8091, Location, "`{0}': Contructors cannot be extern and have a constructor initializer", - GetSignatureForError ()); - } - var ca = ModifiersExtensions.MethodAttr (ModFlags) | MethodAttributes.RTSpecialName | MethodAttributes.SpecialName; ConstructorBuilder = Parent.TypeBuilder.DefineConstructor ( @@ -1712,7 +1822,12 @@ public override bool Define () spec = new MethodSpec (MemberKind.Constructor, Parent.Definition, this, Compiler.BuiltinTypes.Void, parameters, ModFlags); Parent.MemberCache.AddMember (spec); - + + // PlayScript - Create a varargs array for this method +// if (Parent.FileType == SourceFileType.PlayScript && !PsExtended && block != null) { +// block.ParametersBlock.PsCreateVarArgsArray (Parent.Module); +// } + if (block != null) { // It's here only to report an error if (block.IsIterator) { @@ -1778,7 +1893,8 @@ public override void Emit () Initializer = new GeneratedBaseInitializer (Location, null); } - if (Initializer != null) { + if (Initializer != null && + !(bc.FileType == SourceFileType.PlayScript && Initializer.IsAsExplicitSuperCall)) { // // mdb format does not support reqions. Try to workaround this by emitting the // sequence point at initializer. Any breakpoint at constructor header should @@ -1909,13 +2025,15 @@ public interface IMethodData : IMemberContext Attributes OptAttributes { get; } ToplevelBlock Block { get; set; } + bool IsInlinable { get; } + EmitContext CreateEmitContext (ILGenerator ig, SourceMethodBuilder sourceMethod); } // // Encapsulates most of the Method's state // - public class MethodData + public partial class MethodData { public readonly IMethodData method; @@ -2216,7 +2334,7 @@ public string Identifier { get; set; } - + public Destructor (TypeDefinition parent, Modifiers mod, ParametersCompiled parameters, Attributes attrs, Location l) : base (parent, null, mod, AllowedModifiers, new MemberName (MetadataName, l), attrs, parameters) { @@ -2227,6 +2345,15 @@ public Destructor (TypeDefinition parent, Modifiers mod, ParametersCompiled para public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && this.block != null) + this.block.Accept (visitor); + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -2238,7 +2365,7 @@ public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] base.ApplyAttributeBuilder (a, ctor, cdata, pa); } - + protected override bool CheckBase () { if ((caching_flags & Flags.MethodOverloadsExist) != 0) @@ -2316,6 +2443,7 @@ public abstract class AbstractPropertyEventMethod : MemberCore, IMethodData, IMe protected MethodData method_data; protected ToplevelBlock block; protected SecurityType declarative_security; + protected bool isInlinable; protected readonly string prefix; @@ -2366,6 +2494,12 @@ public bool IsAccessor { } } + public bool IsInlinable { + get { + return isInlinable; + } + } + public MemberName MethodName { get { return MemberName; @@ -2421,6 +2555,10 @@ public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] protected virtual void ApplyToExtraTarget (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { + // We ignore this error in AS as attributes are always applied to getters/setters (seems like a missing feature in C#). + if (a.Location.SourceFile != null && a.Location.SourceFile.FileType == SourceFileType.PlayScript) + return; + throw new NotSupportedException ("You forgot to define special attribute target handling"); } @@ -2439,11 +2577,16 @@ public virtual void Emit (TypeDefinition parent) if (((ModFlags & Modifiers.DEBUGGER_HIDDEN) != 0)) Module.PredefinedAttributes.DebuggerHidden.EmitAttribute (method_data.MethodBuilder); - if (ReturnType.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + if (ReturnType == Module.Compiler.BuiltinTypes.AsUntyped) { return_attributes = new ReturnParameter (this, method_data.MethodBuilder, Location); + Module.PredefinedAttributes.AsUntypedAttribute.EmitAttribute (return_attributes.Builder); + } + + if (ReturnType.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + return_attributes = return_attributes ?? new ReturnParameter (this, method_data.MethodBuilder, Location); Module.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder); } else if (ReturnType.HasDynamicElement) { - return_attributes = new ReturnParameter (this, method_data.MethodBuilder, Location); + return_attributes = return_attributes ?? new ReturnParameter (this, method_data.MethodBuilder, Location); Module.PredefinedAttributes.Dynamic.EmitAttribute (return_attributes.Builder, ReturnType, Location); } @@ -2556,6 +2699,10 @@ public enum OpType : byte { GreaterThanOrEqual, LessThanOrEqual, + // PlayScript binary operators + AsIn, // PlayScript "in" operator + AsURightShift, // PlayScript unsigned shift right + // Implicit and Explicit Implicit, Explicit, @@ -2598,6 +2745,8 @@ static Operator () names [(int) OpType.LessThan] = new string [] { "<", "op_LessThan" }; names [(int) OpType.GreaterThanOrEqual] = new string [] { ">=", "op_GreaterThanOrEqual" }; names [(int) OpType.LessThanOrEqual] = new string [] { "<=", "op_LessThanOrEqual" }; + names [(int) OpType.AsIn] = new string [] { "in", "op_In" }; + names [(int) OpType.AsURightShift] = new string [] { ">>>", "op_UnsignedRightShift" }; names [(int) OpType.Implicit] = new string [] { "implicit", "op_Implicit" }; names [(int) OpType.Explicit] = new string [] { "explicit", "op_Explicit" }; names [(int) OpType.Is] = new string[] { "is", "op_Is" }; @@ -2614,6 +2763,15 @@ public Operator (TypeDefinition parent, OpType type, FullNamedExpression ret_typ public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && this.block != null) + this.block.Accept (visitor); + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -2716,7 +2874,7 @@ public override bool Define () return false; } } - } else if (OperatorType == OpType.LeftShift || OperatorType == OpType.RightShift) { + } else if (OperatorType == OpType.LeftShift || OperatorType == OpType.RightShift || OperatorType == OpType.AsURightShift) { if (first_arg_type != declaring_type || parameters.Types[1].BuiltinType != BuiltinTypeSpec.Type.Int) { Report.Error (564, Location, "Overloaded shift operator must have the type of the first operand be the containing type, and the type of the second operand must be int"); return false; @@ -2843,6 +3001,8 @@ public OpType GetMatchingOperator () return OpType.LessThanOrEqual; case OpType.LessThanOrEqual: return OpType.GreaterThanOrEqual; + case OpType.AsIn: // PlayScript "in" operator + return OpType.AsIn; default: return OpType.TOP; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/modifiers.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/modifiers.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/modifiers.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/modifiers.cs index 2bb83c1db..9ce3fd16c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/modifiers.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/modifiers.cs @@ -18,27 +18,29 @@ using System.Reflection; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { [Flags] public enum Modifiers { - PROTECTED = 0x0001, - PUBLIC = 0x0002, - PRIVATE = 0x0004, - INTERNAL = 0x0008, - NEW = 0x0010, - ABSTRACT = 0x0020, - SEALED = 0x0040, - STATIC = 0x0080, - READONLY = 0x0100, - VIRTUAL = 0x0200, - OVERRIDE = 0x0400, - EXTERN = 0x0800, - VOLATILE = 0x1000, - UNSAFE = 0x2000, - ASYNC = 0x4000, - TOP = 0x8000, + PROTECTED = 0x0001, + PUBLIC = 0x0002, + PRIVATE = 0x0004, + INTERNAL = 0x0008, + NEW = 0x0010, + ABSTRACT = 0x0020, + SEALED = 0x0040, + STATIC = 0x0080, + READONLY = 0x0100, + VIRTUAL = 0x0200, + OVERRIDE = 0x0400, + EXTERN = 0x0800, + VOLATILE = 0x1000, + UNSAFE = 0x2000, + ASYNC = 0x4000, + AS_DYNAMIC = 0x8000, // ActionScript dynamic classes + AS_UNTYPED = 0x10000, // ActionScript "*" type + TOP = 0x20000, // // Compiler specific flags @@ -112,6 +114,10 @@ static public string Name (Modifiers i) s = "unsafe"; break; case Modifiers.ASYNC: s = "async"; break; + case Modifiers.AS_DYNAMIC: + s = "dynamic"; break; + case Modifiers.AS_UNTYPED: + s = "*"; break; } return s; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/module.cs similarity index 51% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/module.cs index 549e643f7..71bd37891 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/module.cs @@ -25,12 +25,12 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // Module (top-level type) container // - public sealed class ModuleContainer : TypeContainer + public sealed partial class ModuleContainer : TypeContainer { #if STATIC // @@ -321,8 +321,6 @@ public override CompilerContext Compiler { } } - public int CounterAnonymousTypes { get; set; } - public AssemblyDefinition DeclaringAssembly { get { return assembly; @@ -418,6 +416,17 @@ public override string[] ValidAttributeTargets { public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + foreach (var cont in containers) { + if (visitor.Continue && visitor.Depth >= VisitDepth.Namespaces && cont != null) + cont.Accept (visitor); + } + } } public void AddAnonymousType (AnonymousTypeClass type) @@ -535,10 +544,16 @@ public override bool Define () { DefineContainer (); + if (Compiler.Settings.AutoSeal) { + AutoSealTypes (); + } + ExpandBaseInterfaces (); base.Define (); + ApplyAssemblyAttributes (); + HasTypesFullyDefined = true; return true; @@ -556,6 +571,541 @@ public void EnableRedefinition () is_defined = false; } + private void ApplyAssemblyAttributes () + { + if (OptAttributes != null) { + foreach (Attribute a in OptAttributes.Attrs) { + // cannot rely on any resolve-based members before you call Resolve + if (a.ExplicitTarget != "assembly") + continue; + + if ((a.Name == "AllowDynamic" || a.Name == "ForbidDynamic") && a.NamedArguments != null && + a.NamedArguments.Count == 1 && a.NamedArguments[0].Expr is StringLiteral) { + string nsName = (a.NamedArguments [0].Expr as StringLiteral).GetValue() as string; + Namespace ns = GlobalRootNamespace.GetNamespace (nsName, false); + if (ns != null) { + ns.AllowDynamic = (a.Name == "AllowDynamic"); + } + } + } + } + + } + + private class AutoSealVisitor : StructuralVisitor + { + public enum Pass + { + /// + /// We are going through all classes and methods, properties and indexers and add them to the cache + /// + DiscoverClassesAndMethods, + /// + /// Once the methods are discovered, we set all the virtual types accordingly. + /// + SetVirtualTypes, + /// + /// Once all the virtual types have been discovered, we can promote the FirstAndOnlyVirtual to NotVirtual. + /// + FinalizeModifierFlags, + } + + enum VirtualType + { + /// + /// We know the function is not virtual. It can be inlined. + /// + NotVirtual, + /// + /// This is the first virtual function, and there are overrides. It can't be inlined (unless called explicitly). + /// + FirstVirtual, + /// + /// This is an override of a virtual function. It can't be inlined (unless called explicitly). + /// + OverrideVirtual, + /// + /// This is the first virtual function, and there may or may not be overrides. + /// It will be changed at some later point to NotVirtual if not overriden, or FirstVirtual if overriden. + /// + FirstAndOnlyVirtual, + /// + /// Placeholder in the method cache during Pass.DiscoverMethods, will be set correctly during Pass.SetVirtualTypes. + /// + Unknown, + } + + class MethodInfo + { + public MethodInfo(MemberCore member) + { + Member = member; + } + public VirtualType Type + { + get + { + return type; + } + set + { + //Console.WriteLine("[Auto-sealing] Setting method {0} virtual type to {1}.", Member.GetSignatureForError(), value.ToString()); + type = value; + } + } + public MemberCore Member; + + private VirtualType type = VirtualType.Unknown; + } + + HashSet baseTypes = new HashSet(); + Dictionary> methodsByTypes = new Dictionary>(); + HashSet visitedClasses = new HashSet(); + Pass currentPass = Pass.DiscoverClassesAndMethods; + bool verbose = false; + + public AutoSealVisitor(bool verbose) + { + AutoVisit = true; + Depth = VisitDepth.Members; + this.verbose = verbose; + } + + public Pass CurrentPass + { + get { return currentPass; } set { currentPass = value; visitedClasses.Clear(); } + } + + public override void Visit (MemberCore member) + { + if (member is TypeContainer) { + var tc = member as TypeContainer; + foreach (var container in tc.Containers) { + container.Accept (this); + } + } + } + + public override void Visit (Class c) + { + VisitClass(c); + } + + private void VisitClass(Class c) + { + if (visitedClasses.Contains(c)) { + Skip = true; + return; + } + visitedClasses.Add(c); + + switch (CurrentPass) { + case Pass.DiscoverClassesAndMethods: { + TypeSpec baseType = c.BaseType; + if (baseType != null) { + if (verbose) { + Console.WriteLine("[Auto-sealing] Found parent class {0} for class {1}.", baseType.GetSignatureForError(), c.GetSignatureForError()); + } + baseTypes.Add (baseType); + + if (baseType.MemberDefinition is ImportedTypeDefinition) { + // The base class is coming from another assembly - It will not be visited as part of this assembly + // But we still have to get some of its information recursively + // and visit all the methods + + // TODO: Do the parsing work + } + } + break; + } + + case Pass.FinalizeModifierFlags: + // Last class of a hierarchy are auto-sealed if they are not static + if (IsLeafClass(c.CurrentType) && ((c.ModFlags & Modifiers.STATIC) == 0)) { + if (verbose) { + Console.WriteLine("[Auto-sealing] Making class {0} sealed.", c.GetSignatureForError()); + } + + // When we seal here, we get proper compile error, however the class does not seem to be marked as sealed in IL + //c.ModFlags |= Modifiers.SEALED; + } + break; + } + } + + /// + /// Visits the method. + /// Create a specific version with a different name to avoid unexpected overrides. + /// + /// The method to visit. + private void VisitMethod(MemberCore m, bool updateModFlags) + { + switch (CurrentPass) { + case Pass.DiscoverClassesAndMethods: + AddMethodToCache(m); + break; + case Pass.SetVirtualTypes: + DetermineVirtualState(m); + break; + case Pass.FinalizeModifierFlags: + FinalizeVirtualState(m, updateModFlags); + break; + } + } + + public override void Visit (Method m) + { + VisitMethod(m, true); + } + + public void VisitProperty (PropertyBase p) + { + if (p.Get != null) + VisitMethod(p.Get, false); // We don't change the state of getter and setter + if (p.Set != null) + VisitMethod(p.Set, false); + + //Do we need to update some state on the property? + switch (CurrentPass) { + case Pass.DiscoverClassesAndMethods: + break; + + case Pass.SetVirtualTypes: + break; + + case Pass.FinalizeModifierFlags: { + bool hasVirtual = false; + bool hasOverride = false; + if (p.Get != null) { + MethodInfo methodInfo = GetMethodInfoFromCache(p.Get); + if (methodInfo != null) { + switch (methodInfo.Type) { + case VirtualType.NotVirtual: + if (verbose) { + Console.WriteLine("[Auto-sealing] get property {0} is not virtual.", p.Get.GetSignatureForError()); + } + break; + case VirtualType.FirstVirtual: + hasVirtual = true; + if (verbose) { + Console.WriteLine("[Auto-sealing] get property {0} is first virtual.", p.Get.GetSignatureForError()); + } + break; + case VirtualType.OverrideVirtual: + hasOverride = true; + if (verbose) { + Console.WriteLine("[Auto-sealing] get property {0} is override.", p.Get.GetSignatureForError()); + } + break; + default: + if (verbose) { + Console.WriteLine("[Auto-sealing] Unexpected virtual type in get property {0}.", p.Get.GetSignatureForError()); + } + break; + } + } + } + if (p.Set != null) { + MethodInfo methodInfo = GetMethodInfoFromCache(p.Set); + if (methodInfo != null) { + switch (methodInfo.Type) { + case VirtualType.NotVirtual: + if (verbose) { + Console.WriteLine("[Auto-sealing] set property {0} is not virtual.", p.Set.GetSignatureForError()); + } + break; + case VirtualType.FirstVirtual: + hasVirtual = true; + if (verbose) { + Console.WriteLine("[Auto-sealing] set property {0} is first virtual.", p.Set.GetSignatureForError()); + } + break; + case VirtualType.OverrideVirtual: + hasOverride = true; + if (verbose) { + Console.WriteLine("[Auto-sealing] set property {0} is override.", p.Set.GetSignatureForError()); + } + break; + default: + if (verbose) { + Console.WriteLine("[Auto-sealing] Unexpected virtual type in set property {0}.", p.Set.GetSignatureForError()); + } + break; + } + } + } + + if (hasVirtual) { + p.ModFlags &= ~Modifiers.OVERRIDE; + p.ModFlags |= Modifiers.VIRTUAL; + if (verbose) { + Console.WriteLine("[Auto-sealing] Make property {0} virtual.", p.GetSignatureForError()); + } + } else if (hasOverride) { + p.ModFlags &= ~Modifiers.VIRTUAL; + p.ModFlags |= Modifiers.OVERRIDE; + if (verbose) { + Console.WriteLine("[Auto-sealing] Make property {0} override.", p.GetSignatureForError()); + } + } else { + p.ModFlags &= ~(Modifiers.VIRTUAL | Modifiers.OVERRIDE); + if (verbose) { + Console.WriteLine("[Auto-sealing] Remove virtual and override on property {0}.", p.GetSignatureForError()); + } + } + break; + } + } + } + + public override void Visit (Property p) + { + VisitProperty(p); + } + + public override void Visit (Indexer i) + { + VisitProperty(i); + } + + private void AddMethodToCache(MemberCore m) + { + TypeSpec containerType = m.Parent.CurrentType; + Dictionary listOfMethods; + if (methodsByTypes.TryGetValue(containerType, out listOfMethods) == false) { + listOfMethods = new Dictionary(); + methodsByTypes.Add(containerType, listOfMethods); + } + string signature = GetSignature(m); + MethodInfo methodInfo = new MethodInfo(m); + listOfMethods[signature] = methodInfo; // Note that a method can be visited several times + } + + private MethodInfo GetMethodInfoFromCache(MemberCore m) + { + string signature; + return GetMethodInfoFromCache(m, out signature); + } + + private MethodInfo GetMethodInfoFromCache(MemberCore m, out string signature) + { + signature = "unknown"; + + TypeSpec containerType = m.Parent.CurrentType; + Dictionary listOfMethods; + if (methodsByTypes.TryGetValue(containerType, out listOfMethods) == false) { + return null; + } + + signature = GetSignature(m); + MethodInfo methodInfo = listOfMethods[signature]; + if (methodInfo == null) { + if (verbose) { + Console.WriteLine("[Auto-sealing] Error when looking for method {0}.", m.GetSignatureForError()); + } + } else if (methodInfo.Member != m) { + if (verbose) { + Console.WriteLine("[Auto-sealing] Error when matching method {0}.", m.GetSignatureForError()); + } + } + return methodInfo; + } + + private MethodInfo GetMethodInfoFromCache(TypeSpec containerType, string signature) + { + Dictionary listOfMethods; + if (methodsByTypes.TryGetValue(containerType, out listOfMethods) == false) { + return null; + } + + MethodInfo methodInfo; + listOfMethods.TryGetValue(signature, out methodInfo); + return methodInfo; + } + + private bool DetermineVirtualState(MemberCore m) + { + // We should find the method in the cache + string signature; + MethodInfo methodInfo = GetMethodInfoFromCache(m, out signature); + if (methodInfo != null) { + return DetermineVirtualState(signature, methodInfo); + } else { + return false; + } + } + + private bool DetermineVirtualState(string signature, MethodInfo methodInfo) + { + if (methodInfo.Type != VirtualType.Unknown) { + // Has been already determined, no further work needed (parent methods have been scanned too) + return (methodInfo.Type != VirtualType.NotVirtual); + } + + bool isVirtual = ((methodInfo.Member.ModFlags & Modifiers.VIRTUAL) != 0); + if (methodInfo.Member is PropertyBase.PropertyMethod) { + // If property (or indexer), we also look at the property itself + isVirtual |= (((PropertyBase.PropertyMethod)(methodInfo.Member)).Property.ModFlags & Modifiers.VIRTUAL) != 0; + } + bool isOverride = ((methodInfo.Member.ModFlags & Modifiers.OVERRIDE) != 0); + if (methodInfo.Member is PropertyBase.PropertyMethod) { + // If property (or indexer), we also look at the property itself + isOverride |= (((PropertyBase.PropertyMethod)(methodInfo.Member)).Property.ModFlags & Modifiers.OVERRIDE) != 0; + } + + if (isVirtual || isOverride) { + methodInfo.Type = VirtualType.FirstAndOnlyVirtual; // Initial state if virtual + + // Now we need to recursively go up the base classes, and find methods with the same signature + // And if there is one and it was already virtual, we need to change the current method to VirtualType.OverrideVirtual. + // We have to double-check if a class skip a level + TypeSpec parentType = methodInfo.Member.Parent.CurrentType.BaseType; + while (parentType != null) { + MethodInfo parentMethodInfo = GetMethodInfoFromCache(parentType, signature); + if (parentMethodInfo != null) { + // Recurse here, it will go through each base method, one parent class at a time + bool isParentVirtual = DetermineVirtualState(signature, parentMethodInfo); + // We should expect the base method to be virtual as this method is virtual + if (isParentVirtual == false) { + if (verbose) { + Console.WriteLine("[Auto-sealing] Error with method {0}. Base method is not virtual, child method is.", parentMethodInfo.Member.GetSignatureForError()); + } + } + if (parentMethodInfo.Type == VirtualType.FirstAndOnlyVirtual) { + // The parent method is actually not the the only virtual in the tree, mark it as top of the tree + parentMethodInfo.Type = VirtualType.FirstVirtual; + } + + // But in any case, we know that the current method is overriden (we don't support new, just override) + methodInfo.Type = VirtualType.OverrideVirtual; + break; // No need to continue with all the base types as they have been already parsed + } else { + // No parent method, we keep the state FirstAndOnlyVirtual for the moment + // But we have to go through all parents to make sure + + if (parentType.MemberDefinition is ImportedTypeDefinition) { + // Due to the lack of full parsing of imported types (to be done later), + // There is only one case where we rely on the flags of the method. + // If the base type is imported and the current method is override, we assume that it is true, + // And up the chain one method was FirstVirtual (but it won't be visited) + if (isOverride) { + methodInfo.Type = VirtualType.OverrideVirtual; + + if (verbose) { + Console.WriteLine("[Auto-sealing] Assume method {0} is override due to imported base class {1}", methodInfo.Member.GetSignatureForError(), parentType.GetSignatureForError()); + } + } + // We stop at the first imported type, as we won't get more information going further up the chain + // as visited types have not been visited + break; + } + } + + parentType = parentType.BaseType; + } + return true; + } else { + methodInfo.Type = VirtualType.NotVirtual; + return false; + } + } + + private void FinalizeVirtualState(MemberCore m, bool updateModFlags) + { + string signature; + MethodInfo methodInfo = GetMethodInfoFromCache(m, out signature); + if (methodInfo != null) { + switch (methodInfo.Type) { + case VirtualType.Unknown: + if (verbose) { + Console.WriteLine("[Auto-sealing] Error with method {0}. Still has an unknown virtual type.", methodInfo.Member.GetSignatureForError()); + } + break; + case VirtualType.FirstAndOnlyVirtual: + // This the first and only virtual, it is as if the method was not virtual at all + if (updateModFlags) { + m.ModFlags &= ~Modifiers.VIRTUAL; + methodInfo.Member.ModFlags &= ~Modifiers.VIRTUAL; + } + methodInfo.Type = VirtualType.NotVirtual; + if (verbose) { + Console.WriteLine("[Auto-sealing] Remove virtual on {0}", m.GetSignatureForError()); + } + break; + case VirtualType.OverrideVirtual: + // Set the override flag in case it was not set + if (updateModFlags) { + m.ModFlags &= ~Modifiers.VIRTUAL; + m.ModFlags |= Modifiers.OVERRIDE; + } + if (verbose) { + Console.WriteLine("[Auto-sealing] Make override on {0}", m.GetSignatureForError()); + } + break; + case VirtualType.FirstVirtual: + if ((m.Parent.ModFlags & Modifiers.SEALED) != 0) { + // This case can happen if we could not track correctly the method earlier + if (verbose) { + Console.WriteLine("[Auto-sealing] Remove virtual (due to sealed class) on {0}", m.GetSignatureForError()); + } + m.ModFlags &= ~Modifiers.VIRTUAL; + } + break; + } + } + } + + private bool IsLeafClass(TypeSpec type) + { + return (!baseTypes.Contains(type) && (type.Modifiers & Modifiers.ABSTRACT) == 0); + } + + + private string GetSignature(MemberCore m) + { + // We want the signature without any class info + signatureBuilder.Length = 0; + signatureBuilder.Append(m.MemberName.Basename); + signatureBuilder.Append('('); + if (m.CurrentTypeParameters != null) { + bool passedFirstParameter = false; + foreach (TypeParameterSpec parameter in m.CurrentTypeParameters.Types) { + if (passedFirstParameter) { + signatureBuilder.Append(','); + } + signatureBuilder.Append(parameter.Name); + } + } + signatureBuilder.Append(')'); + return signatureBuilder.ToString(); + } + + private System.Text.StringBuilder signatureBuilder = new System.Text.StringBuilder(); + } + + private void AutoSealTypes () + { + bool verbose = Compiler.Settings.AutoSealVerbosity; + var visitor = new AutoSealVisitor (verbose); + visitor.CurrentPass = AutoSealVisitor.Pass.DiscoverClassesAndMethods; + if (verbose) { + Console.WriteLine("[Auto-sealing] Pass {0}.", visitor.CurrentPass); + } + this.Accept (visitor); + + visitor.CurrentPass = AutoSealVisitor.Pass.SetVirtualTypes; + if (verbose) { + Console.WriteLine("[Auto-sealing] Pass {0}.", visitor.CurrentPass); + } + this.Accept (visitor); + + visitor.CurrentPass = AutoSealVisitor.Pass.FinalizeModifierFlags; + if (verbose) { + Console.WriteLine("[Auto-sealing] Pass {0}.", visitor.CurrentPass); + } + this.Accept (visitor ); + } + public override void EmitContainer () { if (OptAttributes != null) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/namespace.cs similarity index 80% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/namespace.cs index d31ab96ce..e3e0b8c63 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/namespace.cs @@ -14,7 +14,7 @@ using System.Linq; using Mono.CompilerServices.SymbolWriter; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public class RootNamespace : Namespace { @@ -118,6 +118,10 @@ public class Namespace Dictionary cached_types; bool cls_checked; + public readonly MemberName MemberName; + + protected bool? allow_dynamic; + /// /// Constructor Takes the current namespace and the /// name. This is bootstrapped with parent == null @@ -171,6 +175,25 @@ public Namespace Parent { get { return parent; } } + /// + /// Gets or sets whether dynamic code is allowed in this namespace. If null, the default value set in CompilerSettings should be used. + /// + /// The allow dynamic value. + public bool? AllowDynamic { + get { + if (allow_dynamic != null) { + return allow_dynamic; + } else if (this.Parent != null) { + return this.Parent.AllowDynamic; + } else { + return null; + } + } + set { + allow_dynamic = value; + } + } + #endregion public Namespace AddNamespace (MemberName name) @@ -323,6 +346,76 @@ public TypeSpec LookupType (IMemberContext ctx, string name, int arity, LookupMo return best; } + public TypeExpr LookupAsType (IMemberContext ctx, string name, int arity, LookupMode mode, Location loc) + { + if (types == null) + return null; + + TypeExpr te; + + IList found; + if (!types.TryGetValue (name, out found)) + return null; + + TypeSpec best = null; + foreach (var ts in found) { + if (ts.Arity == arity) { + if (best == null) { + if ((ts.Modifiers & Modifiers.INTERNAL) != 0 && !ts.MemberDefinition.IsInternalAsPublic (ctx.Module.DeclaringAssembly) && mode != LookupMode.IgnoreAccessibility) + continue; + + best = ts; + continue; + } + + if (best.MemberDefinition.IsImported && ts.MemberDefinition.IsImported) { + if (mode == LookupMode.Normal) { + ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (best); + ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (ts); + ctx.Module.Compiler.Report.Error (433, loc, "The imported type `{0}' is defined multiple times", ts.GetSignatureForError ()); + } + break; + } + + if (best.MemberDefinition.IsImported) + best = ts; + + if ((best.Modifiers & Modifiers.INTERNAL) != 0 && !best.MemberDefinition.IsInternalAsPublic (ctx.Module.DeclaringAssembly)) + continue; + + if (mode != LookupMode.Normal) + continue; + + if (ts.MemberDefinition.IsImported) { + ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (best); + ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (ts); + } + + ctx.Module.Compiler.Report.Warning (436, 2, loc, + "The type `{0}' conflicts with the imported type of same name'. Ignoring the imported type definition", + best.GetSignatureForError ()); + } + + // + // Lookup for the best candidate with the closest arity match + // + if (arity < 0) { + if (best == null) { + best = ts; + } else if (System.Math.Abs (ts.Arity + arity) < System.Math.Abs (best.Arity + arity)) { + best = ts; + } + } + } + + if (best == null) + return null; + + te = new TypeExpression (best, Location.Null); + + return te; + } + public FullNamedExpression LookupTypeOrNamespace (IMemberContext ctx, string name, int arity, LookupMode mode, Location loc) { var texpr = LookupType (ctx, name, arity, mode, loc); @@ -350,6 +443,23 @@ public FullNamedExpression LookupTypeOrNamespace (IMemberContext ctx, string nam return new TypeExpression (texpr, loc); } + public ATypeNameExpression MakeTypeNameExpression(Location loc) + { + string[] names = Name.Split(new [] {'.'}); + + ATypeNameExpression exp = null; + for (var i = 0; i < names.Length; i++) { + var name = names[i]; + if (exp == null) { + exp = new SimpleName (name, loc); + } else { + exp = new MemberAccess(exp, name, loc); + } + } + + return exp; + } + // // Completes types with the given `prefix' // @@ -665,6 +775,9 @@ void CreateUnitSymbolInfo (MonoSymbolFile symwriter) var si = file.CreateSymbolInfo (symwriter); comp_unit = new CompileUnitEntry (symwriter, si); + if (comp_unit == null) + return; + if (include_files != null) { foreach (SourceFile include in include_files.Values) { si = include.CreateSymbolInfo (symwriter); @@ -688,6 +801,17 @@ public bool IsConditionalDefined (string value) return Compiler.Settings.IsConditionalSymbolDefined (value); } + public string GetConditionalValue (string value) + { + if (conditionals != null) { + bool res; + if (conditionals.TryGetValue (value, out res)) + return res ? "true" : "false"; + } + + return Compiler.Settings.GetConditionalSymbolValue (value); + } + public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); @@ -698,24 +822,30 @@ public override void Accept (StructuralVisitor visitor) // // Namespace block as created by the parser // - public class NamespaceContainer : TypeContainer, IMemberContext + public partial class NamespaceContainer : TypeContainer, IMemberContext { static readonly Namespace[] empty_namespaces = new Namespace[0]; + static readonly Tuple[] empty_types = new Tuple[0]; /* AS SUPPORT */ readonly Namespace ns; public new readonly NamespaceContainer Parent; - List clauses; + List clauses; // Used by parsed to check for parser errors public bool DeclarationFound; Namespace[] namespace_using_table; + + Tuple[] type_using_table; /* AS SUPPORT */ + TypeSpec[] types_using_table; Dictionary aliases; public readonly MemberName RealMemberName; + CompilationSourceFile compSourceFile; + public NamespaceContainer (MemberName name, NamespaceContainer parent) : base (parent, name, null, MemberKind.Namespace) { @@ -724,6 +854,12 @@ public NamespaceContainer (MemberName name, NamespaceContainer parent) this.ns = parent.NS.AddNamespace (name); containers = new List (); + + var topParent = this; + while (topParent.Parent != null) { + topParent = topParent.Parent; + } + compSourceFile = topParent as CompilationSourceFile; } protected NamespaceContainer (ModuleContainer parent) @@ -735,6 +871,12 @@ protected NamespaceContainer (ModuleContainer parent) #region Properties + public CompilationSourceFile CompilationSourceFile { + get { + return compSourceFile; + } + } + public override AttributeTargets AttributeTargets { get { throw new NotSupportedException (); @@ -752,8 +894,8 @@ public Namespace NS { return ns; } } - - public List Usings { + + public List Usings { get { return clauses; } @@ -765,16 +907,40 @@ public override string[] ValidAttributeTargets { } } + public override SourceFileType FileType { + get { + return compSourceFile != null ? compSourceFile.SourceFile.FileType : SourceFileType.CSharp; + } + } + + public override bool? AllowDynamic { + get { + bool? allowed = ns.AllowDynamic; + if (allowed != null) { + return allowed; + } else { + return Compiler.Settings.AllowDynamic; + } + } + set { + ns.AllowDynamic = value; + } + } + #endregion - public void AddUsing (UsingClause un) + public void AddUsing (UsingNamespace un, bool forceAppend = false) { - if (DeclarationFound){ + bool isPlayScript = this.CompilationSourceFile != null && + this.CompilationSourceFile.SourceFile != null && + this.CompilationSourceFile.SourceFile.FileType == ICSharpCode.NRefactory.MonoPlayScript.SourceFileType.PlayScript; + + if (DeclarationFound && !forceAppend && !isPlayScript){ Compiler.Report.Error (1529, un.Location, "A using clause must precede all other namespace elements except extern alias declarations"); } if (clauses == null) - clauses = new List (); + clauses = new List (); clauses.Add (un); } @@ -791,7 +957,7 @@ public void AddUsing (UsingAliasNamespace un) void AddAlias (UsingAliasNamespace un) { if (clauses == null) { - clauses = new List (); + clauses = new List (); } else { foreach (var entry in clauses) { var a = entry as UsingAliasNamespace; @@ -985,6 +1151,9 @@ ExtensionMethodCandidates LookupExtensionMethodCandidates (IMemberContext invoca public override FullNamedExpression LookupNamespaceOrType (string name, int arity, LookupMode mode, Location loc) { + // PlayScript - use absolute namespace resolution, not relative + bool absolute_ns = loc.SourceFile != null && loc.SourceFile.FileType == SourceFileType.PlayScript; + // // Only simple names (no dots) will be looked up with this function // @@ -997,7 +1166,12 @@ public override FullNamedExpression LookupNamespaceOrType (string name, int arit var container_ns = container.ns.Parent; var mn = container.MemberName.Left; while (mn != null) { - resolved = container_ns.LookupTypeOrNamespace (this, name, arity, mode, loc); + // If PlayScript/ActionScript we need to avoid lookup up the first identifier in a namespace relatively. This means we only + // do namespace lookup for the first identifier from the global namespace. + if (absolute_ns) + resolved = container_ns.LookupAsType (this, name, arity, mode, loc); + else + resolved = container_ns.LookupTypeOrNamespace (this, name, arity, mode, loc); if (resolved != null) return resolved; @@ -1078,10 +1252,21 @@ public override FullNamedExpression LookupNamespaceAlias (string name) FullNamedExpression Lookup (string name, int arity, LookupMode mode, Location loc) { + // PlayScript - use absolute namespace resolution, not relative + bool absolute_ns = loc.SourceFile != null && loc.SourceFile.FileType == SourceFileType.PlayScript; + // // Check whether it's in the namespace. // - FullNamedExpression fne = ns.LookupTypeOrNamespace (this, name, arity, mode, loc); + + FullNamedExpression fne; + + // For PlayScript/ActionScript we only search for namespaces for simple names when we're at the top level namespace. ActionScript does not + // use relative package name resolution. + if (absolute_ns && this.MemberName != null && this.MemberName.Left != null) + fne = ns.LookupAsType (this, name, arity, mode, loc); + else + fne = ns.LookupTypeOrNamespace (this, name, arity, mode, loc); // // Check aliases. @@ -1111,11 +1296,23 @@ FullNamedExpression Lookup (string name, int arity, LookupMode mode, Location lo if (namespace_using_table == null) { DoDefineNamespace (); } + + FullNamedExpression match = null; + // + // Check using types. + // + foreach (Tuple using_type in type_using_table) { + var texpr = using_type.Item1; + var tspec = using_type.Item2; + if (tspec.Name == name && tspec.Arity == arity) { + match = texpr; + } + } + // // Check using entries. // - FullNamedExpression match = null; foreach (Namespace using_ns in namespace_using_table) { // // A using directive imports only types contained in the namespace, it @@ -1161,7 +1358,7 @@ FullNamedExpression Lookup (string name, int arity, LookupMode mode, Location lo return match; } - public static Expression LookupStaticUsings (IMemberContext mc, string name, int arity, Location loc) + public static MethodGroupExpr LookupStaticUsings (IMemberContext mc, string name, int arity, Location loc) { for (var m = mc.CurrentMemberDefinition; m != null; m = m.Parent) { @@ -1175,15 +1372,8 @@ public static Expression LookupStaticUsings (IMemberContext mc, string name, int var members = MemberCache.FindMembers (using_type, name, true); if (members != null) { foreach (var member in members) { - if ((member.Kind & MemberKind.NestedMask) != 0) { - // non-static nested type is included with using static - } else { - if ((member.Modifiers & Modifiers.STATIC) == 0) - continue; - - if ((member.Modifiers & Modifiers.METHOD_EXTENSION) != 0) - continue; - } + if ((member.Modifiers & Modifiers.METHOD_EXTENSION) != 0) + continue; if (arity > 0 && member.Arity != arity) continue; @@ -1197,11 +1387,8 @@ public static Expression LookupStaticUsings (IMemberContext mc, string name, int } } - if (candidates != null) { - var expr = Expression.MemberLookupToExpression (mc, candidates, false, null, name, arity, Expression.MemberLookupRestrictions.None, loc); - if (expr != null) - return expr; - } + if (candidates != null) + return new MethodGroupExpr (candidates, null, loc); } return null; @@ -1218,15 +1405,21 @@ protected override void DefineNamespace () void DoDefineNamespace () { namespace_using_table = empty_namespaces; + type_using_table = empty_types; /* AS SUPPORT */ if (clauses != null) { + var t_list = new List> (clauses.Count); /* AS SUPPORT */ + + var list = new List (clauses.Count); + List namespaces = null; List types = null; bool post_process_using_aliases = false; + for (int i = 0; i < clauses.Count; ++i) { - var entry = clauses[i]; + var entry = clauses [i]; if (entry.Alias != null) { if (aliases == null) @@ -1239,7 +1432,7 @@ void DoDefineNamespace () if (entry is UsingExternAlias) { entry.Define (this); if (entry.ResolvedExpression != null) - aliases.Add (entry.Alias.Value, (UsingExternAlias) entry); + aliases.Add (entry.Alias.Value, (UsingExternAlias)entry); clauses.RemoveAt (i--); } else { @@ -1260,10 +1453,30 @@ void DoDefineNamespace () continue; } + var ut_entry = entry as UsingType; + if (ut_entry != null) { /* AS SUPPORT */ + + TypeExpr using_te = ut_entry.ResolvedExpression as TypeExpr; + TypeSpec using_ts = ut_entry.ResolvedType as TypeSpec; + + if (using_te != null && using_ts != null) { + if (t_list.Find (t => t.Item1 == using_te) != null) { + // Ensure we don't report the warning multiple times in repl + clauses.RemoveAt (i--); + + Compiler.Report.Warning (105, 3, entry.Location, + "The using directive for `{0}' appeared previously in this namespace", using_te.GetSignatureForError ()); + } else { + t_list.Add (new Tuple (using_te, using_ts)); + } + } + continue; + } + var using_ns = entry.ResolvedExpression as NamespaceExpression; if (using_ns == null) { - var type = entry.ResolvedExpression.Type; + var type = ((TypeExpr)entry.ResolvedExpression).Type; if (types == null) types = new List (); @@ -1288,6 +1501,9 @@ void DoDefineNamespace () } } + namespace_using_table = list.ToArray (); + type_using_table = t_list.ToArray (); /* AS SUPPORT */ + namespace_using_table = namespaces == null ? new Namespace [0] : namespaces.ToArray (); if (types != null) types_using_table = types.ToArray (); @@ -1347,7 +1563,7 @@ protected override bool VerifyClsCompliance () return false; } - void Warning_DuplicateEntry (UsingClause entry) + void Warning_DuplicateEntry (UsingNamespace entry) { Compiler.Report.Warning (105, 3, entry.Location, "The using directive for `{0}' appeared previously in this namespace", @@ -1360,17 +1576,54 @@ public override void Accept (StructuralVisitor visitor) } } - public class UsingNamespace : UsingClause + public class UsingNamespace { + readonly ATypeNameExpression expr; + readonly Location loc; + protected FullNamedExpression resolved; + public UsingNamespace (ATypeNameExpression expr, Location loc) - : base (expr, loc) { + this.expr = expr; + this.loc = loc; } - public override void Define (NamespaceContainer ctx) + #region Properties + + public virtual SimpleMemberName Alias { + get { + return null; + } + } + + public Location Location { + get { + return loc; + } + } + + public ATypeNameExpression NamespaceExpression { + get { + return expr; + } + } + + public FullNamedExpression ResolvedExpression { + get { + return resolved; + } + } + + #endregion + + public string GetSignatureForError () { - base.Define (ctx); + return expr.GetSignatureForError (); + } + public virtual void Define (NamespaceContainer ctx) + { + resolved = expr.ResolveAsTypeOrNamespace (ctx, false); var ns = resolved as NamespaceExpression; if (ns != null) return; @@ -1378,43 +1631,32 @@ public override void Define (NamespaceContainer ctx) if (resolved != null) { var compiler = ctx.Module.Compiler; var type = resolved.Type; + if (compiler.Settings.Version >= LanguageVersion.V_6) { + if (!type.IsClass || !type.IsStatic) { + compiler.Report.SymbolRelatedToPreviousError (type); + compiler.Report.Error (7007, Location, + "`{0}' is not a static class. A using namespace directive can only be applied to static classes or namespace", + GetSignatureForError ()); + } + + return; + } compiler.Report.SymbolRelatedToPreviousError (type); compiler.Report.Error (138, Location, - "A `using' directive can only be applied to namespaces but `{0}' denotes a type. Consider using a `using static' instead", - type.GetSignatureForError ()); + "`{0}' is a type not a namespace. A using namespace directive can only be applied to namespaces", + GetSignatureForError ()); } } - } - public class UsingType : UsingClause - { - public UsingType (ATypeNameExpression expr, Location loc) - : base (expr, loc) + public virtual void Accept (StructuralVisitor visitor) { + visitor.Visit (this); } - public override void Define (NamespaceContainer ctx) + public override string ToString() { - base.Define (ctx); - - if (resolved == null) - return; - - var ns = resolved as NamespaceExpression; - if (ns != null) { - var compiler = ctx.Module.Compiler; - compiler.Report.Error (7007, Location, - "A 'using static' directive can only be applied to types but `{0}' denotes a namespace. Consider using a `using' directive instead", - ns.GetSignatureForError ()); - return; - } - - // TODO: Need to move it to post_process_using_aliases - //ObsoleteAttribute obsolete_attr = resolved.Type.GetAttributeObsolete (); - //if (obsolete_attr != null) { - // AttributeTester.Report_ObsoleteMessage (obsolete_attr, resolved.GetSignatureForError (), Location, ctx.Compiler.Report); - //} + return resolved.ToString(); } } @@ -1467,7 +1709,7 @@ public virtual void Define (NamespaceContainer ctx) { resolved = expr.ResolveAsTypeOrNamespace (ctx, false); } - + public virtual void Accept (StructuralVisitor visitor) { visitor.Visit (this); @@ -1498,13 +1740,31 @@ public override void Define (NamespaceContainer ctx) resolved = new NamespaceExpression (ns, Location); } + } + + public class UsingType : UsingNamespace + { + protected TypeSpec resolvedType; - public override void Accept (StructuralVisitor visitor) + public UsingType (ATypeNameExpression expr, Location loc) + : base (expr, loc) { - visitor.Visit (this); + } + + public override void Define (NamespaceContainer ctx) + { + resolved = NamespaceExpression.ResolveAsTypeOrNamespace (ctx, false); + if (resolved != null) { + resolvedType = resolved.ResolveAsType (ctx); + } + } + + public TypeSpec ResolvedType { + get { return resolvedType; } } } + public class UsingAliasNamespace : UsingNamespace { readonly SimpleMemberName alias; @@ -1604,6 +1864,10 @@ public FullNamedExpression LookupNamespaceAlias (string name) { return ns.LookupNamespaceAlias (name); } + + public SourceFileType FileType { + get { return ns.FileType; } + } } public UsingAliasNamespace (SimpleMemberName alias, ATypeNameExpression expr, Location loc) @@ -1632,10 +1896,5 @@ public override void Define (NamespaceContainer ctx) // resolved = NamespaceExpression.ResolveAsTypeOrNamespace (new AliasContext (ctx), false); } - - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/nullable.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/nullable.cs index 7acee36e0..d91cb0b2c 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/nullable.cs @@ -21,7 +21,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp.Nullable +namespace ICSharpCode.NRefactory.MonoPlayScript.Nullable { public class NullableType : TypeExpr { @@ -1220,6 +1220,13 @@ Expression ConvertExpression (ResolveContext ec) return ReducedExpression.Create (right, this, false).Resolve (ec); left = Convert.ImplicitConversion (ec, unwrap ?? left, rtype, loc); + + if (!ec.IsPlayScript) // I#76, do not optimize this, causing a side effect on || statements (?) + if (TypeSpec.IsValueType (left.Type) && !left.Type.IsNullableType) { + Warning_UnreachableExpression (ec, right.Location); + return ReducedExpression.Create (left, this, false).Resolve (ec); + } + type = rtype; return this; } @@ -1348,7 +1355,20 @@ protected override void CloneTo (CloneContext clonectx, Expression t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && left != null) + left.Accept (visitor); + if (visitor.Continue && right != null) + right.Accept (visitor); + } + + return ret; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/outline.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/outline.cs index 0cbfb0ce9..d3fd8fa24 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/outline.cs @@ -36,7 +36,7 @@ using System.IO; using System.Text; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public class Outline { bool declared_only; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/parameter.cs similarity index 97% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/parameter.cs index 22f6405ae..1d978b6ce 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/parameter.cs @@ -24,7 +24,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { /// /// Abstract Base class for parameters of a method. @@ -434,7 +434,7 @@ void ResolveCallerAttributes (ResolveContext rc) if (atype == pa.CallerMemberNameAttribute) { caller_type = rc.BuiltinTypes.String; - if (caller_type != parameter_type && !Convert.ImplicitReferenceConversionExists (caller_type, parameter_type)) { + if (caller_type != parameter_type && !Convert.ImplicitReferenceConversionExists (caller_type, parameter_type, rc, false)) { rc.Report.Error (4019, attr.Location, "The CallerMemberName attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'", caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ()); @@ -453,7 +453,7 @@ void ResolveCallerAttributes (ResolveContext rc) if (atype == pa.CallerLineNumberAttribute) { caller_type = rc.BuiltinTypes.Int; - if (caller_type != parameter_type && !Convert.ImplicitStandardConversionExists (new IntConstant (caller_type, int.MaxValue, Location.Null), parameter_type)) { + if (caller_type != parameter_type && !Convert.ImplicitStandardConversionExists (new IntConstant (caller_type, int.MaxValue, Location.Null), parameter_type, rc, false)) { rc.Report.Error (4017, attr.Location, "The CallerLineNumberAttribute attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'", caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ()); @@ -471,7 +471,7 @@ void ResolveCallerAttributes (ResolveContext rc) if (atype == pa.CallerFilePathAttribute) { caller_type = rc.BuiltinTypes.String; - if (caller_type != parameter_type && !Convert.ImplicitReferenceConversionExists (caller_type, parameter_type)) { + if (caller_type != parameter_type && !Convert.ImplicitReferenceConversionExists (caller_type, parameter_type, rc, false)) { rc.Report.Error (4018, attr.Location, "The CallerFilePath attribute cannot be applied because there is no standard conversion from `{0}' to `{1}'", caller_type.GetSignatureForError (), parameter_type.GetSignatureForError ()); @@ -712,6 +712,9 @@ public virtual void ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, in } if (parameter_type != null) { + if (parameter_type == pa.Module.Compiler.BuiltinTypes.AsUntyped) + pa.AsUntypedAttribute.EmitAttribute (builder); + if (parameter_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { pa.Dynamic.EmitAttribute (builder); } else if (parameter_type.HasDynamicElement) { @@ -1096,7 +1099,7 @@ public ParametersImported (IParameterData[] param, TypeSpec[] types, bool hasPar /// /// Represents the methods parameters /// - public class ParametersCompiled : AParametersCollection + public partial class ParametersCompiled : AParametersCollection { public static readonly ParametersCompiled EmptyReadOnlyParameters = new ParametersCompiled (); @@ -1418,20 +1421,27 @@ public void Resolve (ResolveContext rc, Parameter p) expr = Child; - if (!(expr is Constant || expr is DefaultValueExpression || (expr is New && ((New) expr).IsGeneratedStructConstructor))) { - if (!(expr is ErrorExpression)) { - rc.Report.Error (1736, Location, - "The expression being assigned to optional parameter `{0}' must be a constant or default value", - p.Name); - } - - return; - } - var parameter_type = p.Type; if (type == parameter_type) return; + // ActionScript allows * and Object types to have default values as well. + bool param_is_as_obj = rc.IsPlayScript && + (parameter_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic || + parameter_type.BuiltinType == BuiltinTypeSpec.Type.Object); + + if (!param_is_as_obj) { // PlayScript - see check above - tested via as/test-debug-UntypedParameterTest.as + if (!(expr is Constant || expr is DefaultValueExpression || (expr is New && ((New)expr).IsGeneratedStructConstructor))) { + if (!(expr is ErrorExpression)) { + rc.Report.Error (1736, Location, + "The expression being assigned to optional parameter `{0}' must be a constant or default value", + p.Name); + + return; + } + } + } + var res = Convert.ImplicitConversionStandard (rc, expr, parameter_type, Location); if (res != null) { if (parameter_type.IsNullableType && res is Nullable.Wrap) { @@ -1445,7 +1455,7 @@ public void Resolve (ResolveContext rc, Parameter p) } } - if (!expr.IsNull && TypeSpec.IsReferenceType (parameter_type) && parameter_type.BuiltinType != BuiltinTypeSpec.Type.String) { + if (!expr.IsNull && TypeSpec.IsReferenceType (parameter_type) && parameter_type.BuiltinType != BuiltinTypeSpec.Type.String && !param_is_as_obj) { rc.Report.Error (1763, Location, "Optional parameter `{0}' of type `{1}' can only be initialized with `null'", p.Name, parameter_type.GetSignatureForError ()); @@ -1468,5 +1478,6 @@ public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); } + } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/pending.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/pending.cs index e1f9eb6eb..277ef1aa1 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/pending.cs @@ -24,7 +24,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { struct TypeAndMethods { public TypeSpec type; @@ -122,6 +122,10 @@ public FullNamedExpression LookupNamespaceAlias (string name) { throw new NotImplementedException (); } + + public SourceFileType FileType { + get { return container.FileType; } + } } public class PendingImplementation diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/property.cs similarity index 93% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/property.cs index 80ded8f7a..e0b3861bc 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/property.cs @@ -29,7 +29,7 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // It is used as a base class for all property based members // This includes properties, indexers, and events @@ -186,9 +186,9 @@ public override List ResolveMissingDependencies (Membe // Properties and Indexers both generate PropertyBuilders, we use this to share // their common bits. // - abstract public class PropertyBase : PropertyBasedMember { + abstract public partial class PropertyBase : PropertyBasedMember { - public class GetMethod : PropertyMethod + public partial class GetMethod : PropertyMethod { static readonly string[] attribute_targets = new string [] { "method", "return" }; @@ -229,7 +229,7 @@ public override string[] ValidAttributeTargets { } } - public class SetMethod : PropertyMethod { + public partial class SetMethod : PropertyMethod { static readonly string[] attribute_targets = new string[] { "method", "param", "return" }; @@ -250,7 +250,10 @@ protected override void ApplyToExtraTarget (Attribute a, MethodSpec ctor, byte[] return; } - base.ApplyToExtraTarget (a, ctor, cdata, pa); + // NOTE: This is probably a stack overflow in C# as well, but we only see it happening in PlayScript, so disable it there. + if (this.Location.SourceFile == null || this.Location.SourceFile.FileType != SourceFileType.PlayScript) + base.ApplyToExtraTarget (a, ctor, cdata, pa); + } public override ParametersCompiled ParameterInfo { @@ -337,22 +340,18 @@ public virtual void Define (TypeContainer parent) ModFlags |= method.ModFlags; flags = method.flags; } else { - CheckModifiers (ModFlags); - ModFlags |= (method.ModFlags & (~Modifiers.AccessibilityMask)); - ModFlags |= Modifiers.PROPERTY_CUSTOM; - - if (container.Kind == MemberKind.Interface) { + if (container.Kind == MemberKind.Interface) Report.Error (275, Location, "`{0}': accessibility modifiers may not be used on accessors in an interface", GetSignatureForError ()); - } else if ((ModFlags & Modifiers.PRIVATE) != 0) { - if ((method.ModFlags & Modifiers.ABSTRACT) != 0) { - Report.Error (442, Location, "`{0}': abstract properties cannot have private accessors", GetSignatureForError ()); - } - - ModFlags &= ~Modifiers.VIRTUAL; + else if ((method.ModFlags & Modifiers.ABSTRACT) != 0 && (ModFlags & Modifiers.PRIVATE) != 0) { + Report.Error (442, Location, "`{0}': abstract properties cannot have private accessors", GetSignatureForError ()); } - flags = ModifiersExtensions.MethodAttr (ModFlags) | MethodAttributes.SpecialName; + CheckModifiers (ModFlags); + ModFlags |= (method.ModFlags & (~Modifiers.AccessibilityMask)); + ModFlags |= Modifiers.PROPERTY_CUSTOM; + flags = ModifiersExtensions.MethodAttr (ModFlags); + flags |= (method.flags & (~MethodAttributes.MemberAccessMask)); } CheckAbstractAndExtern (block != null); @@ -535,12 +534,7 @@ protected override bool CheckOverrideAgainstBase (MemberSpec base_member) ok = false; } } else if (Get.HasCustomAccessModifier || base_prop.HasDifferentAccessibility) { - if (!base_prop.Get.IsAccessible (this)) { - // Same as csc but it should be different error code - Report.Error (115, Get.Location, "`{0}' is marked as an override but no accessible `get' accessor found to override", - GetSignatureForError ()); - ok = false; - } else if (!CheckAccessModifiers (Get, base_prop.Get)) { + if (!CheckAccessModifiers (Get, base_prop.Get)) { Error_CannotChangeAccessModifiers (Get, base_prop.Get); ok = false; } @@ -556,12 +550,6 @@ protected override bool CheckOverrideAgainstBase (MemberSpec base_member) GetSignatureForError (), base_prop.GetSignatureForError ()); ok = false; } - - if (Get.IsCompilerGenerated) { - Report.Error (8080, Location, "`{0}': Auto-implemented properties must override all accessors of the overridden property", - GetSignatureForError ()); - ok = false; - } } else { if (!base_prop.HasSet) { if (ok) { @@ -572,12 +560,7 @@ protected override bool CheckOverrideAgainstBase (MemberSpec base_member) ok = false; } } else if (Set.HasCustomAccessModifier || base_prop.HasDifferentAccessibility) { - if (!base_prop.Set.IsAccessible (this)) { - // Same as csc but it should be different error code - Report.Error (115, Set.Location, "`{0}' is marked as an override but no accessible `set' accessor found to override", - GetSignatureForError ()); - ok = false; - } else if (!CheckAccessModifiers (Set, base_prop.Set)) { + if (!CheckAccessModifiers (Set, base_prop.Set)) { Error_CannotChangeAccessModifiers (Set, base_prop.Set); ok = false; } @@ -602,6 +585,16 @@ protected override void DoMemberTypeDependentChecks () if (MemberType.IsStatic) Error_StaticReturnType (); + + // Check to make sure property method return types match (PlayScript). + if (this.Location.SourceFile.FileType == SourceFileType.PlayScript && this.Get != null && this.Set != null) { + if (this.Set.ParameterTypes == null) + this.Set.ParameterInfo.Resolve(this.Set); + int valueParamIdx = this.Set.ParameterInfo.Count - 1; + if (this.Get.ReturnType != this.Set.ParameterTypes[valueParamIdx]) { + Report.Error (7002, Location, "Type of property getter and setter must match"); + } + } } protected override void DoMemberTypeIndependentChecks () @@ -675,6 +668,9 @@ public override void Emit () if (OptAttributes != null) OptAttributes.Emit (); + if (member_type == Module.Compiler.BuiltinTypes.AsUntyped) + Module.PredefinedAttributes.AsUntypedAttribute.EmitAttribute (PropertyBuilder); + if (member_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { Module.PredefinedAttributes.Dynamic.EmitAttribute (PropertyBuilder); } else if (member_type.HasDynamicElement) { @@ -793,6 +789,13 @@ public Property (TypeDefinition parent, FullNamedExpression type, Modifiers mod, public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit && visitor.Depth >= VisitDepth.MethodBodies) { + if (visitor.Continue && Get != null && visitor.Depth >= VisitDepth.MethodBodies) + Get.Accept (visitor); + if (visitor.Continue && Set != null && visitor.Depth >= VisitDepth.MethodBodies) + Set.Accept (visitor); + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -842,7 +845,7 @@ void CreateAutomaticProperty () Set.ModFlags |= Modifiers.COMPILER_GENERATED; } } - + public override bool Define () { if (!base.Define ()) @@ -1150,6 +1153,24 @@ public override string[] ValidAttributeTargets { public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && this.initializer != null && visitor.Depth >= VisitDepth.Initializers) { + initializer.Accept (visitor); + } + + if (visitor.Continue && declarators != null && visitor.Depth >= VisitDepth.Initializers) { + foreach (var decl in declarators) { + if (visitor.Continue && decl.Initializer != null) { + decl.Initializer.Accept (visitor); + } + } + } + } } public void AddDeclarator (FieldDeclarator declarator) @@ -1225,6 +1246,20 @@ public override bool Define() return true; } + + protected override bool ResolveMemberType () + { + if (base.ResolveMemberType()) { + if (declarators != null) { + foreach (var decl in declarators) { + if (!decl.ResolveType (this, MemberType)) + return false; + } + } + return true; + } + return false; + } } public abstract class Event : PropertyBasedMember @@ -1267,7 +1302,9 @@ protected override void ApplyToExtraTarget (Attribute a, MethodSpec ctor, byte[] return; } - base.ApplyToExtraTarget (a, ctor, cdata, pa); + // NOTE: This is probably a stack overflow in C# as well, but we only see it happening in PlayScript, so disable it there. + if (this.Location.SourceFile == null || this.Location.SourceFile.FileType != SourceFileType.PlayScript) + base.ApplyToExtraTarget (a, ctor, cdata, pa); } public override AttributeTargets AttributeTargets { @@ -1651,6 +1688,17 @@ public ParametersCompiled ParameterInfo { public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return; + } + if (visitor.Continue && Get != null && visitor.Depth >= VisitDepth.MethodBodies) + Get.Accept (visitor); + if (visitor.Continue && Set != null && visitor.Depth >= VisitDepth.MethodBodies) + Set.Accept (visitor); + } } public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) @@ -1667,7 +1715,7 @@ protected override bool CheckForDuplications () { return Parent.MemberCache.CheckExistingMembersOverloads (this, parameters); } - + public override bool Define () { if (!base.Define ()) diff --git a/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-codegen.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-codegen.cs new file mode 100644 index 000000000..37839bc57 --- /dev/null +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-codegen.cs @@ -0,0 +1,284 @@ +// Copyright 2013 Zynga Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +//using Mono.CSharp; +using System.IO; +using System.Collections.Generic; +using System.Text; +using ICSharpCode.NRefactory.MonoCSharp; + +namespace ICSharpCode.NRefactory.MonoPlayScript +{ + public static class CodeGenerator + { + public static void GenerateCode (ModuleContainer module, ParserSession session, Report report) + { + GenerateDynamicPartialClasses(module, session, report); + if (report.Errors > 0) + return; + + GenerateEmbedClasses(module, session, report); + if (report.Errors > 0) + return; + + } + + public static void FindDynamicClasses(TypeContainer container, List classes) + { + foreach (var cont in container.Containers) { + if (cont is Class) { + + // Is class marked as dynamic? + var cl = cont as Class; + if (cl.IsAsDynamicClass && !(cl.BaseType != null && cl.BaseType.IsAsDynamicClass)) { + classes.Add ((Class)cont); + } + } + + // Recursively find more classes + if (cont.Containers != null) + FindDynamicClasses(cont, classes); + } + } + + public static void GenerateDynamicPartialClasses(ModuleContainer module, ParserSession session, Report report) + { + List classes = new List(); + FindDynamicClasses(module, classes); + + if (classes.Count == 0) + return; + + var os = new StringWriter(); + + os.Write (@" +// Generated dynamic class partial classes + +"); + + foreach (var cl in classes) { + os.Write (@" +namespace {1} {{ + + partial class {2} : PlayScript.IDynamicClass {{ + + private PlayScript.IDynamicClass __dynamicProps; + + dynamic PlayScript.IDynamicClass.__GetDynamicValue(string name) {{ + object value = null; + if (__dynamicProps != null) {{ + value = __dynamicProps.__GetDynamicValue(name); + }} + return value; + }} + + bool PlayScript.IDynamicClass.__TryGetDynamicValue(string name, out object value) {{ + if (__dynamicProps != null) {{ + return __dynamicProps.__TryGetDynamicValue(name, out value); + }} else {{ + value = PlayScript.Undefined._undefined; + return false; + }} + }} + + void PlayScript.IDynamicClass.__SetDynamicValue(string name, object value) {{ + if (__dynamicProps == null) {{ + __dynamicProps = new PlayScript.DynamicProperties(this); + }} + __dynamicProps.__SetDynamicValue(name, value); + }} + + bool PlayScript.IDynamicClass.__DeleteDynamicValue(object name) {{ + if (__dynamicProps != null) {{ + return __dynamicProps.__DeleteDynamicValue(name); + }} + return false; + }} + + bool PlayScript.IDynamicClass.__HasDynamicValue(string name) {{ + if (__dynamicProps != null) {{ + return __dynamicProps.__HasDynamicValue(name); + }} + return false; + }} + + System.Collections.IEnumerable PlayScript.IDynamicClass.__GetDynamicNames() {{ + if (__dynamicProps != null) {{ + return __dynamicProps.__GetDynamicNames(); + }} + return null; + }} + }} +}} + +", PsConsts.PsRootNamespace, ((ITypeDefinition)cl).Namespace, cl.MemberName.Basename); + } + + string fileStr = os.ToString(); + String path; + //TODO: This is an ugly use of try/catch and needs cleaned up + try { + path = Path.Combine (Path.GetDirectoryName (Path.GetFullPath (module.Compiler.Settings.OutputFile)), "dynamic.g.cs"); + } catch { + path = Path.Combine (Path.GetTempPath (), "dynamic.g.cs"); + } + File.WriteAllText(path, fileStr); + + byte[] byteArray = Encoding.ASCII.GetBytes( fileStr ); + var input = new MemoryStream( byteArray, false ); + var reader = new SeekableStreamReader (input, System.Text.Encoding.UTF8); + + SourceFile file = new SourceFile(path, path, 0); + file.FileType = SourceFileType.CSharp; + + Driver.Parse (reader, file, module, session, report); + + } + + private static int _embedCount = 1; + + private class EmbedData { + public int _index; + public string _className; + public Field _field; + + public string source = "null"; + public string mimeType = "null"; + public string embedAsCFF = "null"; + public string fontFamily = "null"; + public string symbol = "null"; + } + + private static void FindEmbedFields(ModuleContainer module, ClassOrStruct cl, List embeds) { + foreach (var m in cl.Members) { + var f = m as Field; + if (f == null || f.OptAttributes == null || f.OptAttributes.Attrs.Count == 0) + continue; + + if (!(f.TypeExpression is TypeExpression) || f.TypeExpression.Type != module.Compiler.BuiltinTypes.Type) + continue; + + ICSharpCode.NRefactory.MonoPlayScript.Attribute embedAttr = null; + foreach (var attr in f.OptAttributes.Attrs) { + if (attr.Name == "Embed") { + embedAttr = attr; + break; + } + } + + if (embedAttr == null) + continue; + + var e = new EmbedData(); + e._index = _embedCount; + _embedCount++; + e._className = "__EmbedLoader" + e._index; + e._field = f; + + e.source = e.mimeType = e.embedAsCFF = e.fontFamily = e.symbol = "null"; + + foreach (NamedArgument arg in embedAttr.NamedArguments) { + if (!(arg.Expr is StringLiteral)) + continue; + var s = ((StringLiteral)(arg.Expr)).GetValueAsLiteral(); + switch (arg.Name) { + case "source": e.source = s; break; + case "mimeType": e.mimeType = s; break; + case "embedAsCFF": e.embedAsCFF = s; break; + case "fontFamily": e.fontFamily = s; break; + case "symbol": e.symbol = s; break; + } + } + + embeds.Add (e); + + } + } + + private static void FindEmbedClasses(ModuleContainer module, TypeContainer container, List embeds) + { + foreach (var cont in container.Containers) { + if (cont is ClassOrStruct) { + + // Is class marked as dynamic? + var cl = cont as ClassOrStruct; + FindEmbedFields (module, cl, embeds); + } + + // Recursively find more classes + if (cont.Containers != null) + FindEmbedClasses(module, cont, embeds); + } + } + + public static void GenerateEmbedClasses(ModuleContainer module, ParserSession session, Report report) + { + List embeds = new List(); + FindEmbedClasses(module, module, embeds); + if (embeds.Count == 0) + return; + + var os = new StringWriter(); + + os.Write (@" +// Generated embed loader classes + +"); + + foreach (var e in embeds) { + + var loc = e._field.Location; + + e._field.Initializer = new TypeOf(new MemberAccess(new SimpleName("_embed_loaders", loc), e._className), loc); + + os.Write (@" +namespace _embed_loaders {{ + + internal class {1} : PlayScript.EmbedLoader {{ + + public {1}() : base({2}, {3}, {4}, {5}, {6}) {{ + }} + }} +}} + +", PsConsts.PsRootNamespace, e._className, e.source, e.mimeType, e.embedAsCFF, e.fontFamily, e.symbol); + } + + string fileStr = os.ToString(); + //TODO: This is an ugly use of try/catch and needs cleaned up + String path; + try { + path = Path.Combine (Path.GetDirectoryName (Path.GetFullPath (module.Compiler.Settings.OutputFile)), "embed.g.cs"); + } catch { + path = Path.Combine (Path.GetTempPath (), "embed.g.cs"); + } + + File.WriteAllText(path, fileStr); + + byte[] byteArray = Encoding.ASCII.GetBytes( fileStr ); + var input = new MemoryStream( byteArray, false ); + var reader = new SeekableStreamReader (input, System.Text.Encoding.UTF8); + + SourceFile file = new SourceFile(path, path, 0); + file.FileType = SourceFileType.CSharp; + + Driver.Parse (reader, file, module, session, report); + } + + } + + +} + diff --git a/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-lang.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-lang.cs new file mode 100644 index 000000000..35bec39e0 --- /dev/null +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-lang.cs @@ -0,0 +1,1301 @@ +// Copyright 2013 Zynga Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Collections.Generic; + +#if STATIC +using IKVM.Reflection; +using IKVM.Reflection.Emit; +#else +using System.Reflection; +using System.Reflection.Emit; +#endif +using ICSharpCode.NRefactory.MonoCSharp; + +namespace ICSharpCode.NRefactory.MonoPlayScript +{ + // + // Constants + // + + public static class PsConsts + { + // + // The namespace used for the root package. + // + public const string PsRootNamespace = "_root"; + } + + // + // Expressions + // + + public class UntypedTypeExpression : TypeExpr + { + public UntypedTypeExpression (Location loc) + { + this.loc = loc; + } + + public override TypeSpec ResolveAsType (IMemberContext mc, bool allowUnboundTypeArguments) + { + return mc.Module.Compiler.BuiltinTypes.AsUntyped; + } + } + + public class UntypedBlockVariable : BlockVariable + { + public UntypedBlockVariable (LocalVariable li) + : base (li) + { + } + + public new FullNamedExpression TypeExpression { + get { + return type_expr; + } + set { + type_expr = value; + } + } + + public override bool Resolve (BlockContext bc) + { + if (type_expr == null) { + if (Initializer == null) + type_expr = new UntypedTypeExpression (loc); + else + type_expr = new VarExpr (loc); + } + + return base.Resolve (bc); + } + } + + public class UntypedExceptionExpression : UntypedTypeExpression + { + public UntypedExceptionExpression (Location loc) + : base(loc) + { + } + + public override TypeSpec ResolveAsType (IMemberContext mc, bool allowUnboundTypeArguments) + { + return mc.Module.Compiler.BuiltinTypes.Exception; + } + } + + // + // ActionScript: Object initializers implement standard JSON style object + // initializer syntax in the form { ident : expr [ , ... ] } or { "literal" : expr [, ... ]} + // Like the array initializer, type is inferred from assignment type, parameter type, or + // field, var initializer type, or of no type can be inferred it is of type Dictionary. + // + public partial class AsObjectInitializer : Expression + { + List elements; + BlockVariable variable; + Assign assign; + + public AsObjectInitializer (List init, Location loc) + { + elements = init; + this.loc = loc; + } + + public AsObjectInitializer (int count, Location loc) + : this (new List (count), loc) + { + } + + public AsObjectInitializer (Location loc) + : this (4, loc) + { + } + + #region Properties + + public int Count { + get { return elements.Count; } + } + + public List Elements { + get { + return elements; + } + } + + public Expression this [int index] { + get { + return elements [index]; + } + } + + public BlockVariable VariableDeclaration { + get { + return variable; + } + set { + variable = value; + } + } + + public Assign Assign { + get { + return assign; + } + set { + assign = value; + } + } + + #endregion + + public void Add (Expression expr) + { + elements.Add (expr); + } + + public override bool ContainsEmitWithAwait () + { + throw new NotSupportedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new NotSupportedException ("ET"); + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + var target = (AsObjectInitializer) t; + + target.elements = new List (elements.Count); + foreach (var element in elements) + target.elements.Add (element.Clone (clonectx)); + } + + protected override Expression DoResolve (ResolveContext rc) + { + // ActionScript - Always use dynamic "expando" object. + TypeExpression type = new TypeExpression (rc.Module.PredefinedTypes.AsExpandoObject.Resolve(), Location); + + return new NewInitialize (type, null, + new CollectionOrObjectInitializers(elements, Location), Location).Resolve (rc); + } + + public override void Emit (EmitContext ec) + { + throw new InternalErrorException ("Missing Resolve call"); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && elements != null) { + foreach (var elem in elements) { + if (visitor.Continue) + elem.Accept (visitor); + } + } + } + + return ret; + } + } + + // + // ActionScript: Array initializer expression is a standard expression + // allowed anywhere an expression is valid. The type is inferred from + // assignment type, parameter type, or field/variable initializer type. + // If no type is inferred, the type is Vector.. + // + public partial class AsArrayInitializer : ArrayInitializer + { + Assign assign; + FullNamedExpression vectorType; + + public AsArrayInitializer (List init, Location loc) + : base(init, loc) + { + } + + public AsArrayInitializer (int count, Location loc) + : this (new List (count), loc) + { + } + + public AsArrayInitializer (Location loc) + : this (4, loc) + { + } + + #region Properties + + public Assign Assign { + get { + return assign; + } + set { + assign = value; + } + } + + public FullNamedExpression VectorType { + get { + return vectorType; + } + set { + vectorType = value; + } + } + + #endregion + + protected override Expression DoResolve (ResolveContext rc) + { + // Attempt to build simple const initializer + bool is_const_init = false; + TypeSpec const_type = null; + if (elements.Count > 0) { + is_const_init = true; + const_type = vectorType != null ? vectorType.ResolveAsType (rc) : null; + foreach (var elem in elements) { + if (elem == null) { + is_const_init = false; + break; + } + if (!(elem is Constant) && !(elem is Unary && ((Unary)elem).Expr is Constant)) { + is_const_init = false; + break; + } + TypeSpec elemType = elem.Type; + if (vectorType == null) { + if (elemType == null) { + is_const_init = false; + break; + } + if (const_type == null) + const_type = BuiltinTypeSpec.IsPrimitiveType (elemType) ? elemType : rc.BuiltinTypes.Object; + if (const_type != elemType) { + if (((const_type == rc.BuiltinTypes.Int || const_type == rc.BuiltinTypes.UInt) && elemType == rc.BuiltinTypes.Double) || + (const_type == rc.BuiltinTypes.Double && (elemType == rc.BuiltinTypes.Int || elemType == rc.BuiltinTypes.UInt))) { + const_type = rc.BuiltinTypes.Double; + } else { + const_type = rc.BuiltinTypes.Object; + } + } + } + } + } + + TypeExpression type; + if (vectorType != null) { // For new [ initializer ] expressions.. + var elemTypeSpec = vectorType.ResolveAsType(rc); + if (elemTypeSpec != null) { + type = new TypeExpression( + rc.Module.PredefinedTypes.AsVector.Resolve().MakeGenericType (rc, new [] { elemTypeSpec }), Location); + } else { + type = new TypeExpression (rc.Module.PredefinedTypes.AsArray.Resolve(), Location); + } + } else { + type = new TypeExpression (rc.Module.PredefinedTypes.AsArray.Resolve(), Location); + } + + TypeSpec typeSpec = type.ResolveAsType(rc.MemberContext); + if (typeSpec.IsArray) { + ArrayCreation arrayCreate = (ArrayCreation)new ArrayCreation (type, this).Resolve (rc); + return arrayCreate; + } else if (is_const_init) { + // If all elements in the initializer list are simple constants, we just pass the elements in a .NET array to the + // PS Array initializer. + var newArgs = new Arguments (1); + newArgs.Add (new Argument (new ArrayCreation (new TypeExpression(const_type, loc), this, loc))); + return new New (type, newArgs, loc).Resolve (rc); + } else { + var initElems = new List(); + foreach (var e in elements) { + initElems.Add (new CollectionElementInitializer(e)); + } + return new NewInitialize (type, null, + new CollectionOrObjectInitializers(initElems, Location), Location).Resolve (rc); + } + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && elements != null) { + foreach (var elem in elements) { + if (visitor.Continue) + elem.Accept (visitor); + } + } + } + + return ret; + } + } + + // + // ActionScript: Implements the ActionScript delete expression. + // This expression is used to implement the delete expression as + // well as the delete statement. Handles both the element access + // form or the member access form. + // + public partial class AsDelete : ExpressionStatement { + + public Expression Expr; + private Invocation removeExpr; + + public AsDelete (Expression expr, Location l) + { + this.Expr = expr; + loc = l; + } + + public override bool IsSideEffectFree { + get { + return removeExpr.IsSideEffectFree; + } + } + + public override bool ContainsEmitWithAwait () + { + return removeExpr.ContainsEmitWithAwait (); + } + + protected override Expression DoResolve (ResolveContext ec) + { + if (Expr is ElementAccess) { + + var elem_access = Expr as ElementAccess; + + if (elem_access.Arguments.Count != 1) { + ec.Report.Error (7021, loc, "delete statement must have only one index argument."); + return null; + } + + var expr = elem_access.Expr.Resolve (ec); + if (expr.Type == null) { + return null; + } + + if (expr.Type.IsArray) { + ec.Report.Error (7021, loc, "delete statement not allowed on arrays."); + return null; + } + + if (!expr.Type.IsAsDynamicClass && (expr.Type.BuiltinType != BuiltinTypeSpec.Type.Dynamic)) + { + ec.Report.Error (7021, loc, "delete statement only allowed on dynamic types or dynamic classes"); + return null; + } + + // cast expression to IDynamicClass and invoke __DeleteDynamicValue + var dynClass = new Cast(new MemberAccess(new SimpleName("PlayScript", loc), "IDynamicClass", loc), expr, loc); + removeExpr = new Invocation (new MemberAccess (dynClass, "__DeleteDynamicValue", loc), elem_access.Arguments); + return removeExpr.Resolve (ec); + + } else if (Expr is MemberAccess) { + + var memb_access = Expr as MemberAccess; + + var expr = memb_access.LeftExpression.Resolve (ec); + if (expr.Type == null) { + return null; + } + + if (!expr.Type.IsAsDynamicClass && (expr.Type.BuiltinType != BuiltinTypeSpec.Type.Dynamic)) + { + ec.Report.Error (7021, loc, "delete statement only allowed on dynamic types or dynamic classes"); + return null; + } + + // cast expression to IDynamicClass and invoke __DeleteDynamicValue + var dynClass = new Cast(new MemberAccess(new SimpleName("PlayScript", loc), "IDynamicClass", loc), expr, loc); + var args = new Arguments(1); + args.Add (new Argument(new StringLiteral(ec.BuiltinTypes, memb_access.Name, loc))); + removeExpr = new Invocation (new MemberAccess (dynClass, "__DeleteDynamicValue", loc), args); + return removeExpr.Resolve (ec); + + } else { + // Error is reported elsewhere. + return null; + } + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + var target = (AsDelete) t; + + target.Expr = Expr.Clone (clonectx); + } + + public override void Emit (EmitContext ec) + { + throw new System.NotImplementedException (); + } + + public override void EmitStatement (EmitContext ec) + { + throw new System.NotImplementedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + return removeExpr.CreateExpressionTree(ec); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; + } + } + + // + // ActionScript: Implements the ActionScript new expression. + // This expression is used to implement the as new expression + // which takes either a type expression, an AsArrayInitializer, + // or an invocation expression of some form. + // + public partial class AsNew : ExpressionStatement { + + public Expression Expr; + private Expression newExpr; + + public AsNew (Expression expr, Location l) + { + this.Expr = expr; + loc = l; + } + + public override bool IsSideEffectFree { + get { + return newExpr.IsSideEffectFree; + } + } + + public override bool ContainsEmitWithAwait () + { + return newExpr.ContainsEmitWithAwait (); + } + + private bool IsPlayScriptScalarClass (string className) + { + switch (className) { + case "String": + case "Number": + case "Boolean": + return true; + default: + return false; + } + } + + protected override Expression DoResolve (ResolveContext ec) + { + if (Expr is AsArrayInitializer) + return Expr.Resolve (ec); + + New newExpr = null; + + if (Expr is Invocation) { + var inv = Expr as Invocation; + + // + // Special case for PlayScript scalar types with 1 argument - + // just do an assignment. This is required for cosntructs like + // + // var num:Number = new Number(1.0); + // + // since the underlying C# types are primitives and don't have + // constructors which take arugments. + // + var sn = inv.Exp as SimpleName; + if (sn != null && IsPlayScriptScalarClass (sn.Name) && inv.Arguments != null && inv.Arguments.Count == 1) { + Argument arg = inv.Arguments [0].Clone (new CloneContext ()); + arg.Resolve (ec); + if (arg.Expr.Type != null) { + if (BuiltinTypeSpec.IsPrimitiveType (arg.Expr.Type) || arg.Expr.Type.BuiltinType == BuiltinTypeSpec.Type.String) + return arg.Expr; + } + // TODO: ActionScript does actually allow this, but its runtime + // rules are hard to implement at compile time, and this should + // be a rare use case, so I am leaving it as a compiler error for + // now. + ec.Report.Error (7112, loc, "The type `{0}' does not contain a constructor that takes non-scalar arguments", sn.Name); + return null; + } + + newExpr = new New(inv.Exp, inv.Arguments, loc); + } else if (Expr is ElementAccess) { + if (loc.SourceFile != null && !loc.SourceFile.PsExtended) { + ec.Report.Error (7103, loc, "Native arrays are only suppored in ASX.'"); + return null; + } + var elemAcc = Expr as ElementAccess; + var exprList = new List(); + foreach (var arg in elemAcc.Arguments) { + exprList.Add (arg.Expr); + } + // TODO: Handle jagged arrays + var arrayCreate = new ArrayCreation ((FullNamedExpression) elemAcc.Expr, exprList, + new ComposedTypeSpecifier (exprList.Count, loc), null, loc); + return arrayCreate.Resolve (ec); + } else { + var resolveExpr = Expr.Resolve (ec); + if (resolveExpr == null) + return null; + if (resolveExpr is TypeOf) { + newExpr = new New (((TypeOf)resolveExpr).TypeExpression, new Arguments (0), loc); + } else { + newExpr = new New (resolveExpr, new Arguments (0), loc); + } + } + + return newExpr.Resolve (ec); + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + var target = (AsNew) t; + + target.Expr = Expr.Clone (clonectx); + } + + public override void Emit (EmitContext ec) + { + throw new System.NotImplementedException (); + } + + public override void EmitStatement (EmitContext ec) + { + throw new System.NotImplementedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + return newExpr.CreateExpressionTree(ec); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + if (visitor.Continue && this.newExpr != null) + this.newExpr.Accept (visitor); + } + + return ret; + } + } + + // + // ActionScript: Implements the ActionScript typeof expression. + // This expression is for backwards compatibility with javascript + // and is not supported in ASX. + // + public partial class AsTypeOf : ExpressionStatement { + + public Expression Expr; + + public AsTypeOf (Expression expr, Location l) + { + this.Expr = expr; + loc = l; + } + + public override bool IsSideEffectFree { + get { + return Expr.IsSideEffectFree; + } + } + + public override bool ContainsEmitWithAwait () + { + return Expr.ContainsEmitWithAwait (); + } + + protected override Expression DoResolve (ResolveContext ec) + { + if (loc.SourceFile != null && loc.SourceFile.PsExtended) { + ec.Report.Error (7101, loc, "'typeof' operator not supported in ASX.'"); + return null; + } + + var args = new Arguments(1); + args.Add (new Argument(Expr)); + + return new Invocation(new MemberAccess(new MemberAccess( + new SimpleName(PsConsts.PsRootNamespace, loc), "_typeof_fn", loc), "_typeof", loc), args).Resolve (ec); + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + var target = (AsDelete) t; + + target.Expr = Expr.Clone (clonectx); + } + + public override void Emit (EmitContext ec) + { + throw new System.NotImplementedException (); + } + + public override void EmitStatement (EmitContext ec) + { + throw new System.NotImplementedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + return Expr.CreateExpressionTree(ec); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; + } + } + + + public partial class RegexLiteral : Constant, ILiteralConstant + { + readonly public string Regex; + readonly public string Options; + + public RegexLiteral (BuiltinTypes types, string regex, string options, Location loc) + : base (loc) + { + Regex = regex; + Options = options ?? ""; + } + + public override bool IsLiteral { + get { return true; } + } + + public override object GetValue () + { + return "/" + Regex + "/" + Options; + } + + public override string GetValueAsLiteral () + { + return GetValue () as String; + } + + public override long GetValueAsLong () + { + throw new NotSupportedException (); + } + + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) + { + throw new NotSupportedException (); + } + + public override bool IsDefaultValue { + get { + return Regex == null && Options == ""; + } + } + + public override bool IsNegative { + get { + return false; + } + } + + public override bool IsNull { + get { + return IsDefaultValue; + } + } + + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) + { + return null; + } + + protected override Expression DoResolve (ResolveContext rc) + { + var args = new Arguments(2); + args.Add (new Argument(new StringLiteral(rc.BuiltinTypes, Regex, this.Location))); + args.Add (new Argument(new StringLiteral(rc.BuiltinTypes, Options, this.Location))); + + return new New(new TypeExpression(rc.Module.PredefinedTypes.AsRegExp.Resolve(), this.Location), + args, this.Location).Resolve (rc); + } + + public override void Emit (EmitContext ec) + { + throw new NotSupportedException (); + } + +#if FULL_AST + public char[] ParsedValue { get; set; } +#endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } + } + + public partial class XmlLiteral : Constant, ILiteralConstant + { + readonly public string Xml; + + public XmlLiteral (BuiltinTypes types, string xml, Location loc) + : base (loc) + { + Xml = xml; + } + + public override bool IsLiteral { + get { return true; } + } + + public override object GetValue () + { + return Xml; + } + + public override string GetValueAsLiteral () + { + return GetValue () as String; + } + + public override long GetValueAsLong () + { + throw new NotSupportedException (); + } + + public override void EncodeAttributeValue (IMemberContext rc, AttributeEncoder enc, TypeSpec targetType, TypeSpec parameterType) + { + throw new NotSupportedException (); + } + + public override bool IsDefaultValue { + get { + return Xml == null; + } + } + + public override bool IsNegative { + get { + return false; + } + } + + public override bool IsNull { + get { + return IsDefaultValue; + } + } + + public override Constant ConvertExplicitly (bool in_checked_context, TypeSpec target_type, ResolveContext opt_ec) + { + return null; + } + + protected override Expression DoResolve (ResolveContext rc) + { + var args = new Arguments(1); + args.Add (new Argument(new StringLiteral(rc.BuiltinTypes, Xml, this.Location))); + + return new New(new TypeExpression(rc.Module.PredefinedTypes.AsXml.Resolve(), this.Location), + args, this.Location).Resolve (rc); + } + + public override void Emit (EmitContext ec) + { + throw new NotSupportedException (); + } + +#if FULL_AST + public char[] ParsedValue { get; set; } +#endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } + } + + /// + /// Implementation of the ActionScript `in' operator. + /// + public partial class AsIn : Expression + { + protected Expression expr; + protected Expression objExpr; + + public AsIn (Expression expr, Expression obj_expr, Location l) + { + this.expr = expr; + this.objExpr = obj_expr; + loc = l; + } + + public Expression Expr { + get { + return expr; + } + } + + public Expression ObjectExpression { + get { + return objExpr; + } + } + + public override bool ContainsEmitWithAwait () + { + throw new NotSupportedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new NotSupportedException ("ET"); + } + + protected override Expression DoResolve (ResolveContext ec) + { + var objExpRes = objExpr.Resolve (ec); + + var args = new Arguments (1); + args.Add (new Argument (expr)); + + if (objExpRes.Type.IsDynamic) { + var inArgs = new Arguments (2); + inArgs.Add (new Argument (objExpr)); + inArgs.Add (new Argument (expr)); + return new Invocation (new MemberAccess (new MemberAccess (new SimpleName ("PlayScript", loc), "Support", loc), "DynamicIn", loc), inArgs).Resolve (ec); + } else { + string containsMethodName = "Contains"; + + if (objExpRes.Type != null && objExpRes.Type.ImplementsInterface (ec.Module.PredefinedTypes.IDictionary.Resolve(), true)) { + containsMethodName = "ContainsKey"; + } + + return new Invocation (new MemberAccess (objExpr, containsMethodName, loc), args).Resolve (ec); + } + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + AsIn target = (AsIn) t; + + target.expr = expr.Clone (clonectx); + target.objExpr = objExpr.Clone (clonectx); + } + + public override void Emit (EmitContext ec) + { + throw new InternalErrorException ("Missing Resolve call"); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + if (visitor.Continue && this.objExpr != null) + this.objExpr.Accept (visitor); + } + + return ret; + } + + } + + /// + /// Implementation of the ActionScript `undefined' object constant. + /// + public partial class AsUndefinedLiteral : Expression + { + public AsUndefinedLiteral (Location l) + { + loc = l; + } + + public override string ToString () + { + return this.GetType ().Name + " (undefined)"; + } + + public override bool ContainsEmitWithAwait () + { + throw new NotSupportedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new NotSupportedException ("ET"); + } + + protected override Expression DoResolve (ResolveContext ec) + { + return new MemberAccess(new TypeExpression(ec.Module.PredefinedTypes.AsUndefined.Resolve(), loc), + "_undefined", loc).Resolve (ec); + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + } + + public override void Emit (EmitContext ec) + { + throw new InternalErrorException ("Missing Resolve call"); + } + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } + + } + + // + // ActionScript: Implements the ActionScript delete expression. + // This expression is used to implement the delete expression as + // well as the delete statement. Handles both the element access + // form or the member access form. + // + public partial class AsLocalFunction : Statement { + + public string Name; + public AnonymousMethodExpression MethodExpr; + public BlockVariable VarDecl; + + public AsLocalFunction (Location loc, string name, AnonymousMethodExpression methodExpr, BlockVariable varDecl) + { + this.loc = loc; + this.Name = name; + this.MethodExpr = methodExpr; + this.VarDecl = varDecl; + } + + public override bool Resolve (BlockContext bc) + { + return true; + } + + protected override void CloneTo (CloneContext clonectx, Statement t) + { + var target = (AsLocalFunction) t; + + target.Name = Name; + target.MethodExpr = MethodExpr.Clone (clonectx) as AnonymousMethodExpression; + target.VarDecl = VarDecl.Clone (clonectx) as BlockVariable; + } + + protected override bool DoFlowAnalysis (FlowAnalysisContext fc) + { + throw new NotImplementedException (); + } + + protected override void DoEmit (EmitContext ec) + { + } + + + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new System.NotSupportedException (); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.MethodExpr != null) + this.MethodExpr.Accept (visitor); + } + + return ret; + } + } + + // Use namespace statement + public partial class AsUseNamespaceStatement : Statement { + + public string NS; + + public AsUseNamespaceStatement(string ns, Location loc) + { + this.loc = loc; + NS = ns; + } + + public override bool Resolve (BlockContext ec) + { + return true; + } + + protected override bool DoFlowAnalysis (FlowAnalysisContext fc) + { + throw new NotImplementedException (); + } + +// public override bool ResolveUnreachable (BlockContext ec, bool warn) +// { +// return true; +// } + + public override void Emit (EmitContext ec) + { + } + + protected override void DoEmit (EmitContext ec) + { + throw new NotSupportedException (); + } + + protected override void CloneTo (CloneContext clonectx, Statement target) + { + // nothing needed. + } + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } + + } + + public partial class AsNonAssignStatementExpression : Statement + { + public Expression expr; + + public AsNonAssignStatementExpression (Expression expr) + { + this.expr = expr; + } + + public Expression Expr { + get { + return expr; + } + } + + public override bool Resolve (BlockContext bc) + { + if (!base.Resolve (bc)) + return false; + + expr = expr.Resolve (bc); + + return expr != null; + } + + protected override bool DoFlowAnalysis (FlowAnalysisContext fc) + { + // TODO: Is it ok to short-circuit the flow analysis for a getter that has no assignment?... + return true; + } + + protected override void DoEmit (EmitContext ec) + { + if (!expr.IsSideEffectFree) { + expr.EmitSideEffect (ec); + } + } + + protected override void CloneTo (CloneContext clonectx, Statement target) + { + var t = target as AsNonAssignStatementExpression; + t.expr = expr.Clone (clonectx); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + } + + return ret; + } + } + + /// + /// Implementation of the ActionScript E4X xml query. + /// + public partial class AsXmlQueryExpression : Expression + { + protected Expression expr; + protected Expression query; + + public AsXmlQueryExpression (Expression expr, Expression query, Location l) + { + this.expr = expr; + this.query = query; + loc = l; + } + + public Expression Expr { + get { + return expr; + } + } + + public Expression Query { + get { + return query; + } + } + + public override bool ContainsEmitWithAwait () + { + throw new NotSupportedException (); + } + + public override Expression CreateExpressionTree (ResolveContext ec) + { + throw new NotSupportedException ("ET"); + } + + protected override Expression DoResolve (ResolveContext ec) + { + // TODO: Implement XML query expression. + return null; + } + + protected override void CloneTo (CloneContext clonectx, Expression t) + { + AsXmlQueryExpression target = (AsXmlQueryExpression) t; + + target.expr = expr.Clone (clonectx); + target.query = query.Clone (clonectx); + } + + public override void Emit (EmitContext ec) + { + throw new InternalErrorException ("Missing Resolve call"); + } + + public override object Accept (StructuralVisitor visitor) + { + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + if (visitor.Continue && this.query != null) + this.query.Accept (visitor); + } + + return ret; + } + + } + + public class AsMethod : Method + { + public AsMethod (TypeDefinition parent, FullNamedExpression returnType, Modifiers mod, MemberName name, ParametersCompiled parameters, Attributes attrs) + : base (parent, returnType, mod, name, parameters, attrs) + { + } + + public static new Method Create (TypeDefinition parent, FullNamedExpression returnType, Modifiers mod, + MemberName name, ParametersCompiled parameters, Attributes attrs) + { + var rt = returnType ?? new UntypedTypeExpression (name.Location); + + var m = Method.Create (parent, rt, mod, name, parameters, attrs); + + if (returnType == null) + m.HasNoReturnType = true; + + return m; + } + + protected override void Error_OverrideWithoutBase (MemberSpec candidate) + { + if (candidate == null) { + Report.Error (1020, Location, "`{0}': Method marked override must override another method", GetSignatureForError ()); + return; + } + + base.Error_OverrideWithoutBase (candidate); + } + } +} diff --git a/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-parser.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-parser.cs new file mode 100644 index 000000000..2af9e95f7 --- /dev/null +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-parser.cs @@ -0,0 +1,15809 @@ +// created by jay 0.7 (c) 1998 Axel.Schreiner@informatik.uni-osnabrueck.de + +#line 2 "ps-parser.jay" +// +// ps-parser.jay: The Parser for the PlayScript language +// Authors: Miguel de Icaza (miguel@gnome.org) +// Ravi Pratap (ravi@ximian.com) +// Marek Safar (marek.safar@gmail.com) +// Ben Cooley (bcooley@zynga.com) +// Dual Licensed under the terms of the GNU GPL and the MIT X11 license +// +// (C) 2001 Ximian, Inc (http://www.ximian.com) +// (C) 2004-2011 Novell, Inc +// Copyright 2011-2012 Xamarin Inc. +// + +using System.Text; +using System.IO; +using System; +using System.Collections.Generic; +using ICSharpCode.NRefactory.MonoPlayScript; +using Linq = ICSharpCode.NRefactory.MonoPlayScript.Linq; +using Enum = ICSharpCode.NRefactory.MonoPlayScript.Enum; +using Attribute = ICSharpCode.NRefactory.MonoPlayScript.Attribute; +using Delegate = ICSharpCode.NRefactory.MonoPlayScript.Delegate; +using Nullable = ICSharpCode.NRefactory.MonoPlayScript.Nullable; + +namespace Mono.PlayScript +{ + /// + /// The PlayScript Parser + /// + public class PlayScriptParser + { + [Flags] + enum ParameterModifierType + { + Ref = 1 << 1, + Out = 1 << 2, + This = 1 << 3, + Params = 1 << 4, + Arglist = 1 << 5, + DefaultValue = 1 << 6, + + All = Ref | Out | This | Params | Arglist | DefaultValue + } + + public bool parsing_playscript = false; + + static readonly object ModifierNone = 0; + + const string RootNs = PsConsts.PsRootNamespace; + + NamespaceContainer current_namespace; + NamespaceContainer prev_namespace; + NamespaceContainer private_namespace; + TypeContainer current_container; + TypeDefinition current_type; + PropertyBase current_property; + EventProperty current_event; + EventField current_event_field; + FieldBase current_field; + Constructor current_constructor; + + // Set by config params to enable/disable inclusion of methods, fields, consts, classes, structs, etc. + bool is_config_enabled = true; + + bool is_package_function = false; + + /// + /// Current block is used to add statements as we find + /// them. + /// + Block current_block; + + BlockVariable current_variable; + + Delegate current_delegate; + + AnonymousMethodExpression current_anonymous_method; + + /// + /// This is used by the unary_expression code to resolve + /// a name against a parameter. + /// + + // FIXME: This is very ugly and it's very hard to reset it correctly + // on all places, especially when some parameters are autogenerated. + ParametersCompiled current_local_parameters; + + bool parsing_anonymous_method; + + bool async_block; + + /// + /// An out-of-band stack. + /// + Stack oob_stack; + + /// + /// Controls the verbosity of the errors produced by the parser + /// + int yacc_verbose_flag; + + /// + /// Used by the interactive shell, flags whether EOF was reached + /// and an error was produced + /// + public bool UnexpectedEOF; + + /// + /// The current file. + /// + readonly CompilationSourceFile file; + + /// + /// Temporary Xml documentation cache. + /// For enum types, we need one more temporary store. + /// + string tmpComment; + string enumTypeComment; + + /// Current attribute target + string current_attr_target; + + ParameterModifierType valid_param_mod; + + bool default_parameter_used; + + /// When using the interactive parser, this holds the + /// resulting expression + public Class InteractiveResult; + + // Current modifier namespace identifier + public string ns_modifier; + + // + // Keeps track of global data changes to undo on parser error + // + public Undo undo; + + bool? interactive_async; + + Stack linq_clause_blocks; + + ModuleContainer module; + + readonly CompilerContext compiler; + readonly LanguageVersion lang_version; + readonly bool doc_support; + readonly CompilerSettings settings; + readonly Report report; + + // + // Instead of allocating carrier array everytime we + // share the bucket for very common constructs which can never + // be recursive + // + List parameters_bucket; + + // + // Full AST support members + // + LocationsBag lbag; + List> mod_locations; + Stack location_stack; +#line default + + /** error output stream. + It should be changeable. + */ + public System.IO.TextWriter ErrorOutput = System.Console.Out; + + /** simplified error message. + @see yyerror + */ + public void yyerror (string message) { + yyerror(message, null); + } +#pragma warning disable 649 + /* An EOF token */ + public int eof_token; +#pragma warning restore 649 + /** (syntax) error message. + Can be overwritten to control message format. + @param message text to be displayed. + @param expected vector of acceptable tokens, if available. + */ + public void yyerror (string message, string[] expected) { + if ((yacc_verbose_flag > 0) && (expected != null) && (expected.Length > 0)) { + ErrorOutput.Write (message+", expecting"); + for (int n = 0; n < expected.Length; ++ n) + ErrorOutput.Write (" "+expected[n]); + ErrorOutput.WriteLine (); + } else + ErrorOutput.WriteLine (message); + } + + /** debugging support, requires the package jay.yydebug. + Set to null to suppress debugging messages. + */ +//t internal yydebug.yyDebug debug; + + protected const int yyFinal = 7; +//t // Put this array into a separate class so it is only initialized if debugging is actually used +//t // Use MarshalByRefObject to disable inlining +//t class YYRules : MarshalByRefObject { +//t public static readonly string [] yyRule = { +//t "$accept : compilation_unit", +//t "compilation_unit : outer_declaration opt_EOF", +//t "$$1 :", +//t "compilation_unit : interactive_parsing $$1 opt_EOF", +//t "compilation_unit : documentation_parsing", +//t "outer_declaration : opt_extern_alias_directives opt_package_directives", +//t "outer_declaration : opt_extern_alias_directives opt_package_directives package_declaration opt_attributes", +//t "outer_declaration : opt_extern_alias_directives opt_package_directives attribute_sections", +//t "outer_declaration : error", +//t "opt_EOF :", +//t "opt_EOF : EOF", +//t "extern_alias_directives : extern_alias_directive", +//t "extern_alias_directives : extern_alias_directives extern_alias_directive", +//t "extern_alias_directive : EXTERN IDENTIFIER IDENTIFIER SEMICOLON", +//t "extern_alias_directive : EXTERN error", +//t "no_config_package_directive : import_directive", +//t "no_config_package_directive : use_namespace_directive", +//t "package_directive : no_config_package_directive", +//t "package_directive : config_package_directive", +//t "$$2 :", +//t "config_package_directive : IDENTIFIER_CONFIG $$2 no_config_package_directive", +//t "$$3 :", +//t "config_package_directive : IDENTIFIER_CONFIG OPEN_BRACE $$3 opt_package_directives CLOSE_BRACE", +//t "package_directives : package_directive", +//t "package_directives : package_directives package_directive", +//t "use_namespace_directive : use_namespace", +//t "use_namespace : USE NAMESPACE IDENTIFIER SEMICOLON", +//t "import_directive : import_package", +//t "$$4 :", +//t "import_package : IMPORT namespace_or_type_expr $$4 DOT_STAR SEMICOLON", +//t "import_package : IMPORT typeof_type_expression SEMICOLON", +//t "import_package : IMPORT IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON", +//t "import_package : IMPORT error", +//t "$$5 :", +//t "$$6 :", +//t "$$7 :", +//t "$$8 :", +//t "package_declaration : opt_attributes PACKAGE $$5 opt_package_name $$6 OPEN_BRACE $$7 opt_package_statements_or_blocks CLOSE_BRACE $$8 opt_package_statements_or_blocks", +//t "opt_package_name :", +//t "opt_package_name : package_name", +//t "package_name : IDENTIFIER", +//t "package_name : package_name DOT IDENTIFIER", +//t "package_name : error", +//t "opt_semicolon :", +//t "opt_semicolon : SEMICOLON", +//t "opt_comma :", +//t "opt_comma : COMMA", +//t "opt_package_statements_or_blocks : opt_extern_alias_directives opt_package_statements", +//t "opt_package_statements_or_blocks : OPEN_BRACE opt_package_statements_or_blocks CLOSE_BRACE", +//t "opt_package_directives :", +//t "opt_package_directives : package_directives", +//t "opt_extern_alias_directives :", +//t "opt_extern_alias_directives : extern_alias_directives", +//t "opt_package_statements :", +//t "opt_package_statements : package_statements", +//t "package_statements : package_statement", +//t "package_statements : package_statements package_statement", +//t "package_statement : no_config_package_statement", +//t "package_statement : config_package_statement", +//t "package_statement : attribute_sections CLOSE_BRACE", +//t "no_config_package_statement : type_declaration", +//t "no_config_package_statement : method_declaration", +//t "no_config_package_statement : no_config_package_directive", +//t "$$9 :", +//t "config_package_statement : IDENTIFIER_CONFIG $$9 no_config_package_statement", +//t "$$10 :", +//t "config_package_statement : IDENTIFIER_CONFIG OPEN_BRACE $$10 opt_package_statements CLOSE_BRACE", +//t "type_declaration : class_declaration", +//t "type_declaration : struct_declaration", +//t "type_declaration : interface_declaration", +//t "type_declaration : enum_declaration", +//t "type_declaration : delegate_declaration", +//t "type_declaration : namespace_declaration", +//t "opt_attributes :", +//t "opt_attributes : attribute_sections", +//t "attribute_sections : attribute_section", +//t "attribute_sections : attribute_sections attribute_section", +//t "$$11 :", +//t "attribute_section : OPEN_BRACKET $$11 attribute_section_cont", +//t "$$12 :", +//t "attribute_section_cont : attribute_target COLON $$12 attribute_list opt_comma CLOSE_BRACKET", +//t "attribute_section_cont : attribute_list opt_comma CLOSE_BRACKET", +//t "attribute_section_cont : IDENTIFIER error", +//t "attribute_section_cont : error", +//t "attribute_target : IDENTIFIER", +//t "attribute_target : EVENT", +//t "attribute_target : RETURN", +//t "attribute_list : attribute", +//t "attribute_list : attribute_list COMMA attribute", +//t "$$13 :", +//t "attribute : attribute_name $$13 opt_attribute_arguments", +//t "attribute_name : namespace_or_type_expr", +//t "opt_attribute_arguments :", +//t "opt_attribute_arguments : OPEN_PARENS attribute_arguments CLOSE_PARENS", +//t "attribute_arguments :", +//t "attribute_arguments : positional_argument", +//t "attribute_arguments : named_attribute_argument", +//t "attribute_arguments : attribute_arguments COMMA positional_argument", +//t "attribute_arguments : attribute_arguments COMMA named_attribute_argument", +//t "$$14 :", +//t "named_attribute_argument : IDENTIFIER ASSIGN $$14 expression", +//t "positional_argument : expression", +//t "positional_argument : error", +//t "opt_class_member_declarations :", +//t "opt_class_member_declarations : class_member_declarations", +//t "class_member_declarations : class_member_declaration", +//t "class_member_declarations : class_member_declarations class_member_declaration", +//t "class_member_declaration : constant_declaration", +//t "class_member_declaration : field_declaration", +//t "class_member_declaration : method_declaration", +//t "class_member_declaration : property_declaration", +//t "class_member_declaration : event_declaration", +//t "class_member_declaration : indexer_declaration", +//t "class_member_declaration : operator_declaration", +//t "class_member_declaration : destructor_declaration", +//t "class_member_declaration : type_declaration", +//t "class_member_declaration : member_config_block", +//t "class_member_declaration : config_member_declaration", +//t "class_member_declaration : attributes_without_members", +//t "class_member_declaration : use_namespace_class_directive", +//t "class_member_declaration : import_class_directive", +//t "class_member_declaration : error", +//t "use_namespace_class_directive : opt_attributes opt_modifiers use_namespace_directive", +//t "import_class_directive : opt_attributes opt_modifiers import_directive", +//t "$$15 :", +//t "config_member_declaration : IDENTIFIER_CONFIG $$15 class_member_declaration", +//t "$$16 :", +//t "member_config_block : IDENTIFIER_CONFIG OPEN_BRACE $$16 opt_class_member_declarations CLOSE_BRACE", +//t "$$17 :", +//t "$$18 :", +//t "$$19 :", +//t "$$20 :", +//t "$$21 :", +//t "struct_declaration : opt_attributes opt_modifiers opt_partial STRUCT $$17 type_declaration_name $$18 opt_class_extends opt_class_implements opt_type_parameter_constraints_clauses $$19 OPEN_BRACE $$20 opt_class_member_declarations CLOSE_BRACE $$21 opt_semicolon", +//t "struct_declaration : opt_attributes opt_modifiers opt_partial STRUCT error", +//t "opt_member_type :", +//t "opt_member_type : COLON member_type", +//t "$$22 :", +//t "constant_declaration : opt_attributes opt_modifiers CONST IDENTIFIER opt_member_type $$22 opt_constant_initializer opt_constant_declarators SEMICOLON", +//t "opt_constant_declarators :", +//t "opt_constant_declarators : constant_declarators", +//t "constant_declarators : constant_declarator", +//t "constant_declarators : constant_declarators constant_declarator", +//t "constant_declarator : COMMA IDENTIFIER opt_member_type opt_constant_initializer", +//t "opt_constant_initializer :", +//t "opt_constant_initializer : constant_initializer", +//t "$$23 :", +//t "constant_initializer : ASSIGN $$23 constant_initializer_expr", +//t "constant_initializer : error", +//t "constant_initializer_expr : constant_expression", +//t "$$24 :", +//t "field_declaration : opt_attributes opt_modifiers VAR IDENTIFIER opt_member_type $$24 opt_field_initializer opt_field_declarators SEMICOLON", +//t "$$25 :", +//t "field_declaration : opt_attributes opt_modifiers FIXED IDENTIFIER COLON simple_type $$25 fixed_field_size opt_fixed_field_declarators SEMICOLON", +//t "field_declaration : opt_attributes opt_modifiers FIXED IDENTIFIER COLON simple_type error SEMICOLON", +//t "opt_field_initializer :", +//t "$$26 :", +//t "opt_field_initializer : ASSIGN $$26 variable_initializer", +//t "opt_field_declarators :", +//t "opt_field_declarators : field_declarators", +//t "field_declarators : field_declarator", +//t "field_declarators : field_declarators field_declarator", +//t "field_declarator : COMMA IDENTIFIER opt_member_type", +//t "$$27 :", +//t "field_declarator : COMMA IDENTIFIER opt_member_type ASSIGN $$27 variable_initializer", +//t "opt_fixed_field_declarators :", +//t "opt_fixed_field_declarators : fixed_field_declarators", +//t "fixed_field_declarators : fixed_field_declarator", +//t "fixed_field_declarators : fixed_field_declarators fixed_field_declarator", +//t "fixed_field_declarator : COMMA IDENTIFIER fixed_field_size COLON member_type", +//t "$$28 :", +//t "fixed_field_size : OPEN_BRACKET $$28 expression CLOSE_BRACKET", +//t "fixed_field_size : OPEN_BRACKET error", +//t "variable_initializer : expression", +//t "variable_initializer : error", +//t "$$29 :", +//t "method_declaration : method_header $$29 method_body", +//t "$$30 :", +//t "$$31 :", +//t "method_header : opt_attributes opt_modifiers FUNCTION method_declaration_name OPEN_PARENS $$30 opt_formal_parameter_list CLOSE_PARENS opt_method_return_type $$31 opt_type_parameter_constraints_clauses", +//t "$$32 :", +//t "method_header : opt_attributes opt_modifiers FUNCTION_GET method_declaration_name OPEN_PARENS $$32 opt_formal_parameter_list CLOSE_PARENS opt_method_return_type", +//t "$$33 :", +//t "method_header : opt_attributes opt_modifiers FUNCTION_SET method_declaration_name OPEN_PARENS $$33 opt_formal_parameter_list CLOSE_PARENS opt_method_return_type", +//t "$$34 :", +//t "$$35 :", +//t "$$36 :", +//t "method_header : opt_attributes opt_modifiers PARTIAL FUNCTION $$34 method_declaration_name OPEN_PARENS $$35 opt_formal_parameter_list CLOSE_PARENS COLON VOID $$36 opt_type_parameter_constraints_clauses", +//t "method_header : opt_attributes opt_modifiers FUNCTION modifiers method_declaration_name OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS method_colon member_type", +//t "method_header : opt_attributes opt_modifiers FUNCTION method_declaration_name error", +//t "opt_method_return_type :", +//t "opt_method_return_type : method_colon member_type", +//t "method_colon : COLON", +//t "method_body : block", +//t "method_body : SEMICOLON", +//t "opt_formal_parameter_list :", +//t "opt_formal_parameter_list : formal_parameter_list", +//t "formal_parameter_list : fixed_parameters", +//t "formal_parameter_list : fixed_parameters COMMA parameter_array", +//t "formal_parameter_list : parameter_array COMMA error", +//t "formal_parameter_list : fixed_parameters COMMA parameter_array COMMA error", +//t "formal_parameter_list : parameter_array", +//t "formal_parameter_list : error", +//t "fixed_parameters : fixed_parameter", +//t "fixed_parameters : fixed_parameters COMMA fixed_parameter", +//t "fixed_parameter : opt_attributes opt_parameter_modifier IDENTIFIER opt_parameter_type", +//t "fixed_parameter : attribute_sections error", +//t "fixed_parameter : opt_attributes opt_parameter_modifier IDENTIFIER COLON error", +//t "$$37 :", +//t "fixed_parameter : opt_attributes opt_parameter_modifier IDENTIFIER opt_parameter_type ASSIGN $$37 constant_expression", +//t "opt_parameter_modifier :", +//t "opt_parameter_modifier : parameter_modifiers", +//t "parameter_modifiers : parameter_modifier", +//t "parameter_modifiers : parameter_modifiers parameter_modifier", +//t "parameter_modifier : REF", +//t "parameter_modifier : OUT", +//t "parameter_modifier : THIS", +//t "parameter_array : opt_attributes DOTDOTDOT IDENTIFIER opt_arglist_type", +//t "parameter_array : opt_attributes DOTDOTDOT IDENTIFIER ASSIGN constant_expression", +//t "parameter_array : opt_attributes DOTDOTDOT error", +//t "opt_arglist_type :", +//t "opt_arglist_type : COLON IDENTIFIER", +//t "$$38 :", +//t "$$39 :", +//t "$$40 :", +//t "property_declaration : opt_attributes opt_modifiers PROPERTY member_declaration_name COLON member_type $$38 OPEN_BRACE $$39 accessor_declarations $$40 CLOSE_BRACE", +//t "$$41 :", +//t "$$42 :", +//t "$$43 :", +//t "indexer_declaration : opt_attributes opt_modifiers INDEXER indexer_declaration_name OPEN_PARENS $$41 opt_formal_parameter_list CLOSE_PARENS COLON member_type OPEN_BRACE $$42 accessor_declarations $$43 CLOSE_BRACE", +//t "accessor_declarations : get_accessor_declaration", +//t "accessor_declarations : get_accessor_declaration accessor_declarations", +//t "accessor_declarations : set_accessor_declaration", +//t "accessor_declarations : set_accessor_declaration accessor_declarations", +//t "accessor_declarations : error", +//t "$$44 :", +//t "get_accessor_declaration : opt_attributes opt_modifiers GET $$44 accessor_body", +//t "$$45 :", +//t "set_accessor_declaration : opt_attributes opt_modifiers SET $$45 accessor_body", +//t "accessor_body : block", +//t "accessor_body : SEMICOLON", +//t "accessor_body : error", +//t "$$46 :", +//t "$$47 :", +//t "$$48 :", +//t "$$49 :", +//t "$$50 :", +//t "interface_declaration : opt_attributes opt_modifiers opt_partial INTERFACE $$46 type_declaration_name $$47 opt_interface_extends opt_class_implements opt_type_parameter_constraints_clauses $$48 OPEN_BRACE $$49 opt_interface_member_declarations CLOSE_BRACE $$50 opt_semicolon", +//t "interface_declaration : opt_attributes opt_modifiers opt_partial INTERFACE error", +//t "opt_interface_member_declarations :", +//t "opt_interface_member_declarations : interface_member_declarations", +//t "interface_member_declarations : interface_member_declaration", +//t "interface_member_declarations : interface_member_declarations interface_member_declaration", +//t "interface_member_declaration : constant_declaration", +//t "interface_member_declaration : field_declaration", +//t "interface_member_declaration : method_declaration", +//t "interface_member_declaration : property_declaration", +//t "interface_member_declaration : event_declaration", +//t "interface_member_declaration : indexer_declaration", +//t "interface_member_declaration : operator_declaration", +//t "interface_member_declaration : type_declaration", +//t "$$51 :", +//t "operator_declaration : opt_attributes opt_modifiers operator_declarator $$51 operator_body", +//t "operator_body : block", +//t "operator_body : SEMICOLON", +//t "operator_type : type_expression_or_array", +//t "operator_type : VOID", +//t "$$52 :", +//t "operator_declarator : OPERATOR overloadable_operator OPEN_PARENS $$52 opt_formal_parameter_list CLOSE_PARENS COLON operator_type", +//t "operator_declarator : conversion_operator_declarator", +//t "overloadable_operator : BANG", +//t "overloadable_operator : TILDE", +//t "overloadable_operator : OP_INC", +//t "overloadable_operator : OP_DEC", +//t "overloadable_operator : TRUE", +//t "overloadable_operator : FALSE", +//t "overloadable_operator : PLUS", +//t "overloadable_operator : MINUS", +//t "overloadable_operator : STAR", +//t "overloadable_operator : DIV", +//t "overloadable_operator : PERCENT", +//t "overloadable_operator : BITWISE_AND", +//t "overloadable_operator : BITWISE_OR", +//t "overloadable_operator : CARRET", +//t "overloadable_operator : OP_SHIFT_LEFT", +//t "overloadable_operator : OP_SHIFT_RIGHT", +//t "overloadable_operator : OP_USHIFT_RIGHT", +//t "overloadable_operator : OP_EQ", +//t "overloadable_operator : OP_NE", +//t "overloadable_operator : OP_GT", +//t "overloadable_operator : OP_LT", +//t "overloadable_operator : OP_GE", +//t "overloadable_operator : OP_LE", +//t "overloadable_operator : OP_IN", +//t "$$53 :", +//t "conversion_operator_declarator : IMPLICIT OPERATOR type OPEN_PARENS $$53 opt_formal_parameter_list CLOSE_PARENS", +//t "$$54 :", +//t "conversion_operator_declarator : EXPLICIT OPERATOR type OPEN_PARENS $$54 opt_formal_parameter_list CLOSE_PARENS", +//t "conversion_operator_declarator : IMPLICIT error", +//t "conversion_operator_declarator : EXPLICIT error", +//t "$$55 :", +//t "destructor_declaration : opt_attributes opt_modifiers FUNCTION TILDE $$55 IDENTIFIER OPEN_PARENS CLOSE_PARENS method_body", +//t "$$56 :", +//t "event_declaration : opt_attributes opt_modifiers EVENT member_declaration_name COLON type $$56 opt_event_initializer opt_event_declarators SEMICOLON", +//t "$$57 :", +//t "$$58 :", +//t "event_declaration : opt_attributes opt_modifiers EVENT member_declaration_name COLON type OPEN_BRACE $$57 event_accessor_declarations $$58 CLOSE_BRACE", +//t "opt_event_initializer :", +//t "$$59 :", +//t "opt_event_initializer : ASSIGN $$59 event_variable_initializer", +//t "opt_event_declarators :", +//t "opt_event_declarators : event_declarators", +//t "event_declarators : event_declarator", +//t "event_declarators : event_declarators event_declarator", +//t "event_declarator : COMMA IDENTIFIER COLON member_type", +//t "$$60 :", +//t "event_declarator : COMMA IDENTIFIER COLON member_type ASSIGN $$60 event_variable_initializer", +//t "$$61 :", +//t "event_variable_initializer : $$61 variable_initializer", +//t "event_accessor_declarations : add_accessor_declaration remove_accessor_declaration", +//t "event_accessor_declarations : remove_accessor_declaration add_accessor_declaration", +//t "event_accessor_declarations : add_accessor_declaration", +//t "event_accessor_declarations : remove_accessor_declaration", +//t "event_accessor_declarations : error", +//t "$$62 :", +//t "add_accessor_declaration : opt_attributes opt_modifiers ADD $$62 event_accessor_block", +//t "$$63 :", +//t "remove_accessor_declaration : opt_attributes opt_modifiers REMOVE $$63 event_accessor_block", +//t "event_accessor_block : opt_semicolon", +//t "event_accessor_block : block", +//t "attributes_without_members : attribute_sections CLOSE_BRACE", +//t "$$64 :", +//t "$$65 :", +//t "$$66 :", +//t "enum_declaration : opt_attributes opt_modifiers ENUM type_declaration_name opt_enum_base $$64 OPEN_BRACE $$65 opt_enum_member_declarations $$66 CLOSE_BRACE opt_semicolon", +//t "opt_enum_base :", +//t "opt_enum_base : COLON type", +//t "opt_enum_base : COLON error", +//t "opt_enum_member_declarations :", +//t "opt_enum_member_declarations : enum_member_declarations", +//t "opt_enum_member_declarations : enum_member_declarations COMMA", +//t "enum_member_declarations : enum_member_declaration", +//t "enum_member_declarations : enum_member_declarations COMMA enum_member_declaration", +//t "enum_member_declaration : opt_attributes IDENTIFIER", +//t "$$67 :", +//t "enum_member_declaration : opt_attributes IDENTIFIER $$67 ASSIGN constant_expression", +//t "enum_member_declaration : opt_attributes IDENTIFIER error", +//t "enum_member_declaration : attributes_without_members", +//t "$$68 :", +//t "$$69 :", +//t "$$70 :", +//t "delegate_declaration : opt_attributes opt_modifiers DELEGATE type_declaration_name OPEN_PARENS $$68 opt_formal_parameter_list CLOSE_PARENS COLON member_type $$69 opt_type_parameter_constraints_clauses $$70 SEMICOLON", +//t "namespace_declaration : opt_attributes opt_modifiers NAMESPACE IDENTIFIER opt_namespace_url SEMICOLON", +//t "opt_namespace_url :", +//t "opt_namespace_url : namespace_url", +//t "namespace_url : ASSIGN LITERAL", +//t "opt_nullable :", +//t "opt_nullable : INTERR_NULLABLE", +//t "namespace_or_type_expr : member_name", +//t "member_name : simple_name_expr", +//t "member_name : namespace_or_type_expr DOT IDENTIFIER opt_type_argument_list", +//t "member_name : namespace_or_type_expr DOT IDENTIFIER generic_dimension", +//t "simple_name_expr : IDENTIFIER opt_type_argument_list", +//t "simple_name_expr : IDENTIFIER generic_dimension", +//t "opt_type_argument_list :", +//t "opt_type_argument_list : OP_GENERICS_LT type_arguments OP_GENERICS_GT", +//t "opt_type_argument_list : OP_GENERICS_LT error", +//t "type_arguments : type", +//t "type_arguments : type_arguments COMMA type", +//t "$$71 :", +//t "type_declaration_name : IDENTIFIER $$71 opt_type_parameter_list", +//t "member_declaration_name : method_declaration_name", +//t "method_declaration_name : type_declaration_name", +//t "method_declaration_name : explicit_interface IDENTIFIER opt_type_parameter_list", +//t "indexer_declaration_name : THIS", +//t "indexer_declaration_name : explicit_interface THIS", +//t "explicit_interface : IDENTIFIER opt_type_argument_list DOT", +//t "explicit_interface : explicit_interface IDENTIFIER opt_type_argument_list DOT", +//t "opt_type_parameter_list :", +//t "opt_type_parameter_list : OP_GENERICS_LT type_parameters OP_GENERICS_GT", +//t "type_parameters : type_parameter", +//t "type_parameters : type_parameters COMMA type_parameter", +//t "type_parameter : opt_attributes opt_type_parameter_variance IDENTIFIER", +//t "type_parameter : error", +//t "type_and_void : type_expression_or_array", +//t "type_and_void : VOID", +//t "member_type : type_and_void", +//t "type : type_expression_or_array", +//t "type : VOID", +//t "simple_type : type_expression", +//t "simple_type : VOID", +//t "opt_parameter_type :", +//t "opt_parameter_type : COLON parameter_type", +//t "parameter_type : type_expression_or_array", +//t "parameter_type : VOID", +//t "type_expression_or_array : type_expression", +//t "type_expression_or_array : type_expression rank_specifiers", +//t "type_expression : namespace_or_type_expr opt_nullable", +//t "type_expression : STAR", +//t "type_expression : builtin_types opt_nullable", +//t "type_list : base_type_name", +//t "type_list : type_list COMMA base_type_name", +//t "base_type_name : type", +//t "builtin_types : DECIMAL", +//t "builtin_types : FLOAT", +//t "builtin_types : DOUBLE", +//t "builtin_types : integral_type", +//t "integral_type : SBYTE", +//t "integral_type : BYTE", +//t "integral_type : SHORT", +//t "integral_type : USHORT", +//t "integral_type : INT", +//t "integral_type : UINT", +//t "integral_type : LONG", +//t "integral_type : ULONG", +//t "integral_type : CHAR", +//t "primary_expression : primary_expression_or_type", +//t "primary_expression : literal", +//t "primary_expression : parenthesized_expression", +//t "primary_expression : default_value_expression", +//t "primary_expression : invocation_expression", +//t "primary_expression : element_access", +//t "primary_expression : this_access", +//t "primary_expression : base_access", +//t "primary_expression : post_increment_expression", +//t "primary_expression : post_decrement_expression", +//t "primary_expression : sizeof_expression", +//t "primary_expression : checked_expression", +//t "primary_expression : unchecked_expression", +//t "primary_expression : new_expression", +//t "primary_expression : anonymous_method_expression", +//t "primary_expression : array_initializer", +//t "primary_expression : object_or_collection_initializer", +//t "primary_expression_or_type : simple_name_expr", +//t "primary_expression_or_type : IDENTIFIER GENERATE_COMPLETION", +//t "primary_expression_or_type : builtin_types", +//t "primary_expression_or_type : member_access", +//t "literal : boolean_literal", +//t "literal : LITERAL", +//t "literal : UNDEFINED", +//t "literal : NULL", +//t "boolean_literal : TRUE", +//t "boolean_literal : FALSE", +//t "open_parens_any : OPEN_PARENS", +//t "close_parens : CLOSE_PARENS", +//t "close_parens : COMPLETE_COMPLETION", +//t "parenthesized_expression : OPEN_PARENS expression CLOSE_PARENS", +//t "parenthesized_expression : OPEN_PARENS expression COMPLETE_COMPLETION", +//t "member_access : primary_expression DOT IDENTIFIER opt_type_argument_list", +//t "member_access : primary_expression INTERR_OPERATOR DOT identifier_inside_body opt_type_argument_list", +//t "member_access : primary_expression INTERR_OPERATOR DOT identifier_inside_body opt_type_argument_list", +//t "member_access : primary_expression DOT_AT IDENTIFIER", +//t "member_access : AWAIT DOT identifier_inside_body opt_type_argument_list", +//t "member_access : primary_expression DOT_STAR", +//t "member_access : primary_expression DOTDOT IDENTIFIER", +//t "member_access : primary_expression DOTDOT_STAR", +//t "member_access : primary_expression DOUBLE_COLON IDENTIFIER", +//t "member_access : primary_expression DOUBLE_COLON OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET", +//t "member_access : primary_expression DOT_AT OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET", +//t "member_access : primary_expression DOT OPEN_PARENS expression CLOSE_PARENS", +//t "member_access : SUPER DOT IDENTIFIER opt_type_argument_list", +//t "member_access : qualified_alias_member identifier_inside_body generic_dimension", +//t "member_access : primary_expression DOT GENERATE_COMPLETION", +//t "member_access : primary_expression DOT IDENTIFIER GENERATE_COMPLETION", +//t "invocation_expression : SUPER open_parens_any opt_argument_list close_parens", +//t "invocation_expression : primary_expression open_parens_any opt_argument_list close_parens", +//t "invocation_expression : primary_expression open_parens_any argument_list error", +//t "object_or_collection_initializer : init_open_brace opt_member_initializer_list init_close_brace_or_complete_completion", +//t "object_or_collection_initializer : init_open_brace member_initializer_list COMMA init_close_brace", +//t "init_open_brace : OPEN_BRACE_INIT", +//t "init_close_brace : CLOSE_BRACE", +//t "init_close_brace_or_complete_completion : CLOSE_BRACE", +//t "init_close_brace_or_complete_completion : COMPLETE_COMPLETION", +//t "opt_member_initializer_list :", +//t "opt_member_initializer_list : member_initializer_list", +//t "member_initializer_list : member_initializer", +//t "member_initializer_list : member_initializer_list COMMA member_initializer", +//t "member_initializer_list : member_initializer_list error", +//t "member_initializer : IDENTIFIER COLON initializer_value", +//t "member_initializer : AWAIT ASSIGN initializer_value", +//t "member_initializer : LITERAL COLON initializer_value", +//t "member_initializer : GENERATE_COMPLETION", +//t "initializer_value : expression", +//t "opt_argument_list :", +//t "opt_argument_list : argument_list", +//t "argument_list : argument", +//t "argument_list : argument_list COMMA argument", +//t "argument_list : argument_list COMMA error", +//t "argument_list : COMMA error", +//t "argument : expression", +//t "argument : non_simple_argument", +//t "non_simple_argument : REF variable_reference", +//t "non_simple_argument : REF declaration_expression", +//t "non_simple_argument : OUT variable_reference", +//t "non_simple_argument : OUT declaration_expression", +//t "declaration_expression : OPEN_PARENS declaration_expression CLOSE_PARENS", +//t "declaration_expression : variable_type identifier_inside_body", +//t "declaration_expression : variable_type identifier_inside_body ASSIGN expression", +//t "variable_reference : expression", +//t "element_access : primary_expression OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET", +//t "element_access : primary_expression INTERR_OPERATOR OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET", +//t "element_access : primary_expression OPEN_BRACKET_EXPR expression_list_arguments error", +//t "element_access : primary_expression OPEN_BRACKET_EXPR error", +//t "expression_list : expression", +//t "expression_list : expression_list COMMA expression", +//t "expression_list : expression_list error", +//t "expression_list_arguments : expression_list_argument", +//t "expression_list_arguments : expression_list_arguments COMMA expression_list_argument", +//t "expression_list_argument : expression", +//t "this_access : THIS", +//t "base_access : SUPER OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET", +//t "base_access : SUPER OPEN_BRACKET error", +//t "post_increment_expression : primary_expression OP_INC", +//t "post_decrement_expression : primary_expression OP_DEC", +//t "new_expression : NEW new_type_or_member_access", +//t "new_expression : NEW builtin_types", +//t "new_expression : NEW OPEN_PARENS expression CLOSE_PARENS", +//t "new_expression : NEW OP_LT type_expression OP_GT array_initializer", +//t "new_type_or_member_access : simple_name_expr", +//t "new_type_or_member_access : THIS", +//t "new_type_or_member_access : SUPER DOT IDENTIFIER opt_type_argument_list", +//t "new_type_or_member_access : new_type_or_member_access DOT IDENTIFIER opt_type_argument_list", +//t "rank_specifiers : rank_specifier", +//t "rank_specifiers : rank_specifier rank_specifiers", +//t "rank_specifier : OPEN_BRACKET CLOSE_BRACKET", +//t "rank_specifier : OPEN_BRACKET dim_separators CLOSE_BRACKET", +//t "dim_separators : COMMA", +//t "dim_separators : dim_separators COMMA", +//t "array_initializer : init_open_bracket init_close_bracket", +//t "array_initializer : init_open_bracket_expr variable_initializer_list opt_comma init_close_bracket", +//t "init_open_bracket : OPEN_BRACKET", +//t "init_open_bracket_expr : OPEN_BRACKET_EXPR", +//t "init_close_bracket : CLOSE_BRACKET", +//t "variable_initializer_list : variable_initializer", +//t "variable_initializer_list : variable_initializer_list COMMA variable_initializer", +//t "typeof_expression : TYPEOF open_parens_any typeof_type_expression CLOSE_PARENS", +//t "typeof_type_expression : type_and_void", +//t "typeof_type_expression : error", +//t "generic_dimension : GENERIC_DIMENSION", +//t "sizeof_expression : SIZEOF open_parens_any type CLOSE_PARENS", +//t "sizeof_expression : SIZEOF open_parens_any type error", +//t "checked_expression : CHECKED open_parens_any expression CLOSE_PARENS", +//t "checked_expression : CHECKED error", +//t "unchecked_expression : UNCHECKED open_parens_any expression CLOSE_PARENS", +//t "unchecked_expression : UNCHECKED error", +//t "$$72 :", +//t "$$73 :", +//t "anonymous_method_expression : FUNCTION OPEN_PARENS $$72 opt_formal_parameter_list CLOSE_PARENS COLON member_type $$73 anon_block", +//t "$$74 :", +//t "$$75 :", +//t "anonymous_method_expression : ASYNC FUNCTION OPEN_PARENS $$74 opt_formal_parameter_list CLOSE_PARENS COLON member_type $$75 anon_block", +//t "$$76 :", +//t "$$77 :", +//t "local_function_statement : FUNCTION IDENTIFIER OPEN_PARENS $$76 opt_formal_parameter_list CLOSE_PARENS COLON member_type $$77 block", +//t "$$78 :", +//t "$$79 :", +//t "local_function_statement : ASYNC FUNCTION IDENTIFIER OPEN_PARENS $$78 opt_formal_parameter_list CLOSE_PARENS COLON member_type $$79 block", +//t "default_value_expression : DEFAULT open_parens_any type CLOSE_PARENS", +//t "unary_expression : primary_expression", +//t "unary_expression : BANG prefixed_unary_expression", +//t "unary_expression : TILDE prefixed_unary_expression", +//t "unary_expression : AWAIT prefixed_unary_expression", +//t "unary_expression : OP_AT prefixed_unary_expression", +//t "unary_expression : TYPEOF prefixed_unary_expression", +//t "unary_expression : DELETE prefixed_unary_expression", +//t "unary_expression : BANG error", +//t "unary_expression : TILDE error", +//t "unary_expression : AWAIT error", +//t "unary_expression : OP_AT error", +//t "unary_expression : TYPEOF error", +//t "unary_expression : DELETE error", +//t "prefixed_unary_expression : unary_expression", +//t "prefixed_unary_expression : PLUS prefixed_unary_expression", +//t "prefixed_unary_expression : MINUS prefixed_unary_expression", +//t "prefixed_unary_expression : OP_INC prefixed_unary_expression", +//t "prefixed_unary_expression : OP_DEC prefixed_unary_expression", +//t "prefixed_unary_expression : BITWISE_AND prefixed_unary_expression", +//t "prefixed_unary_expression : PLUS error", +//t "prefixed_unary_expression : MINUS error", +//t "prefixed_unary_expression : OP_INC error", +//t "prefixed_unary_expression : OP_DEC error", +//t "prefixed_unary_expression : BITWISE_AND error", +//t "multiplicative_expression : prefixed_unary_expression", +//t "multiplicative_expression : multiplicative_expression STAR prefixed_unary_expression", +//t "multiplicative_expression : multiplicative_expression DIV prefixed_unary_expression", +//t "multiplicative_expression : multiplicative_expression PERCENT prefixed_unary_expression", +//t "multiplicative_expression : multiplicative_expression STAR error", +//t "multiplicative_expression : multiplicative_expression DIV error", +//t "multiplicative_expression : multiplicative_expression PERCENT error", +//t "additive_expression : multiplicative_expression", +//t "additive_expression : additive_expression PLUS multiplicative_expression", +//t "additive_expression : additive_expression MINUS multiplicative_expression", +//t "additive_expression : additive_expression OP_IN multiplicative_expression", +//t "additive_expression : additive_expression AS primary_expression_or_type", +//t "additive_expression : additive_expression IS primary_expression_or_type", +//t "additive_expression : additive_expression PLUS error", +//t "additive_expression : additive_expression MINUS error", +//t "additive_expression : additive_expression OP_IN error", +//t "additive_expression : additive_expression AS error", +//t "additive_expression : additive_expression IS error", +//t "shift_expression : additive_expression", +//t "shift_expression : shift_expression OP_SHIFT_LEFT additive_expression", +//t "shift_expression : shift_expression OP_SHIFT_RIGHT additive_expression", +//t "shift_expression : shift_expression OP_USHIFT_RIGHT additive_expression", +//t "shift_expression : shift_expression OP_SHIFT_LEFT error", +//t "shift_expression : shift_expression OP_SHIFT_RIGHT error", +//t "shift_expression : shift_expression OP_USHIFT_RIGHT error", +//t "relational_expression : shift_expression", +//t "relational_expression : relational_expression OP_LT shift_expression", +//t "relational_expression : relational_expression OP_GT shift_expression", +//t "relational_expression : relational_expression OP_LE shift_expression", +//t "relational_expression : relational_expression OP_GE shift_expression", +//t "relational_expression : relational_expression OP_LT error", +//t "relational_expression : relational_expression OP_GT error", +//t "relational_expression : relational_expression OP_LE error", +//t "relational_expression : relational_expression OP_GE error", +//t "equality_expression : relational_expression", +//t "equality_expression : equality_expression OP_EQ relational_expression", +//t "equality_expression : equality_expression OP_NE relational_expression", +//t "equality_expression : equality_expression OP_STRICT_EQ relational_expression", +//t "equality_expression : equality_expression OP_STRICT_NE relational_expression", +//t "and_expression : equality_expression", +//t "and_expression : and_expression BITWISE_AND equality_expression", +//t "and_expression : and_expression BITWISE_AND error", +//t "exclusive_or_expression : and_expression", +//t "exclusive_or_expression : exclusive_or_expression CARRET and_expression", +//t "exclusive_or_expression : exclusive_or_expression CARRET error", +//t "inclusive_or_expression : exclusive_or_expression", +//t "inclusive_or_expression : inclusive_or_expression BITWISE_OR exclusive_or_expression", +//t "inclusive_or_expression : inclusive_or_expression BITWISE_OR error", +//t "conditional_and_expression : inclusive_or_expression", +//t "conditional_and_expression : conditional_and_expression OP_AND inclusive_or_expression", +//t "conditional_and_expression : conditional_and_expression OP_AND error", +//t "conditional_or_expression : conditional_and_expression", +//t "conditional_or_expression : conditional_or_expression OP_OR conditional_and_expression", +//t "conditional_or_expression : conditional_or_expression OP_OR error", +//t "null_coalescing_expression : conditional_or_expression", +//t "null_coalescing_expression : conditional_or_expression OP_COALESCING null_coalescing_expression", +//t "conditional_expression : null_coalescing_expression", +//t "conditional_expression : null_coalescing_expression INTERR expression COLON expression", +//t "conditional_expression : null_coalescing_expression INTERR expression error", +//t "conditional_expression : null_coalescing_expression INTERR expression COLON error", +//t "assignment_expression : prefixed_unary_expression ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_MULT_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_DIV_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_MOD_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_ADD_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_SUB_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_SHIFT_LEFT_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_SHIFT_RIGHT_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_USHIFT_RIGHT_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_AND_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression LOGICAL_AND_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_OR_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression LOGICAL_OR_ASSIGN expression", +//t "assignment_expression : prefixed_unary_expression OP_XOR_ASSIGN expression", +//t "expression_or_error : expression", +//t "expression_or_error : error", +//t "expression : assignment_expression", +//t "expression : non_assignment_expression", +//t "non_assignment_expression : conditional_expression", +//t "non_assignment_expression : query_expression", +//t "constant_expression : expression", +//t "boolean_expression : expression", +//t "$$80 :", +//t "$$81 :", +//t "$$82 :", +//t "$$83 :", +//t "$$84 :", +//t "class_declaration : opt_attributes opt_modifiers opt_partial CLASS $$80 type_declaration_name $$81 opt_class_extends opt_class_implements opt_type_parameter_constraints_clauses $$82 OPEN_BRACE $$83 opt_class_member_declarations CLOSE_BRACE $$84 opt_semicolon", +//t "opt_partial :", +//t "opt_partial : PARTIAL", +//t "opt_modifiers :", +//t "opt_modifiers : modifiers", +//t "modifiers : modifier", +//t "modifiers : modifiers modifier", +//t "modifier : NEW", +//t "modifier : PUBLIC", +//t "modifier : PROTECTED", +//t "modifier : INTERNAL", +//t "modifier : PRIVATE", +//t "modifier : ABSTRACT", +//t "modifier : FINAL", +//t "modifier : STATIC", +//t "modifier : READONLY", +//t "modifier : VIRTUAL", +//t "modifier : OVERRIDE", +//t "modifier : NATIVE", +//t "modifier : VOLATILE", +//t "modifier : UNSAFE", +//t "modifier : ASYNC", +//t "modifier : DYNAMIC", +//t "modifier : IDENTIFIER_MODIFIER", +//t "opt_class_extends :", +//t "opt_class_extends : EXTENDS base_type_name", +//t "opt_class_extends : EXTENDS base_type_name error", +//t "opt_interface_extends :", +//t "opt_interface_extends : EXTENDS type_list", +//t "opt_interface_extends : EXTENDS type_list error", +//t "opt_class_implements :", +//t "opt_class_implements : IMPLEMENTS type_list", +//t "opt_class_implements : IMPLEMENTS type_list error", +//t "opt_type_parameter_constraints_clauses :", +//t "opt_type_parameter_constraints_clauses : type_parameter_constraints_clauses", +//t "type_parameter_constraints_clauses : type_parameter_constraints_clause", +//t "type_parameter_constraints_clauses : type_parameter_constraints_clauses type_parameter_constraints_clause", +//t "type_parameter_constraints_clause : WHERE IDENTIFIER COLON type_parameter_constraints", +//t "type_parameter_constraints_clause : WHERE IDENTIFIER error", +//t "type_parameter_constraints : type_parameter_constraint", +//t "type_parameter_constraints : type_parameter_constraints COMMA type_parameter_constraint", +//t "type_parameter_constraint : type", +//t "type_parameter_constraint : NEW OPEN_PARENS CLOSE_PARENS", +//t "type_parameter_constraint : CLASS", +//t "type_parameter_constraint : STRUCT", +//t "opt_type_parameter_variance :", +//t "opt_type_parameter_variance : type_parameter_variance", +//t "type_parameter_variance : OUT", +//t "type_parameter_variance : IN", +//t "$$85 :", +//t "block : OPEN_BRACE $$85 opt_statement_list block_end", +//t "$$86 :", +//t "anon_block : OPEN_BRACE $$86 opt_statement_list anon_block_end", +//t "$$87 :", +//t "config_block : opt_block_config OPEN_BRACE $$87 opt_statement_list block_end", +//t "opt_block_config :", +//t "opt_block_config : IDENTIFIER DOUBLE_COLON block_config_identifier", +//t "block_config_identifier : IDENTIFIER", +//t "block_end : CLOSE_BRACE", +//t "block_end : COMPLETE_COMPLETION", +//t "anon_block_end : CLOSE_BRACE", +//t "anon_block_end : COMPLETE_COMPLETION", +//t "$$88 :", +//t "block_prepared : OPEN_BRACE $$88 opt_statement_list CLOSE_BRACE", +//t "opt_statement_list :", +//t "opt_statement_list : statement_list", +//t "statement_list : statement", +//t "statement_list : statement_list statement", +//t "statement : block_variable_declaration", +//t "statement : valid_declaration_statement", +//t "statement : labeled_statement", +//t "statement : error", +//t "interactive_statement_list : interactive_statement", +//t "interactive_statement_list : interactive_statement_list interactive_statement", +//t "interactive_statement : block_variable_declaration", +//t "interactive_statement : interactive_valid_declaration_statement", +//t "interactive_statement : labeled_statement", +//t "valid_declaration_statement : config_block", +//t "valid_declaration_statement : empty_statement", +//t "valid_declaration_statement : expression_statement", +//t "valid_declaration_statement : selection_statement", +//t "valid_declaration_statement : iteration_statement", +//t "valid_declaration_statement : jump_statement", +//t "valid_declaration_statement : try_statement", +//t "valid_declaration_statement : checked_statement", +//t "valid_declaration_statement : unchecked_statement", +//t "valid_declaration_statement : lock_statement", +//t "valid_declaration_statement : using_statement", +//t "valid_declaration_statement : unsafe_statement", +//t "valid_declaration_statement : fixed_statement", +//t "valid_declaration_statement : local_function_statement", +//t "interactive_valid_declaration_statement : config_block", +//t "interactive_valid_declaration_statement : empty_statement", +//t "interactive_valid_declaration_statement : interactive_expression_statement", +//t "interactive_valid_declaration_statement : selection_statement", +//t "interactive_valid_declaration_statement : iteration_statement", +//t "interactive_valid_declaration_statement : jump_statement", +//t "interactive_valid_declaration_statement : try_statement", +//t "interactive_valid_declaration_statement : checked_statement", +//t "interactive_valid_declaration_statement : unchecked_statement", +//t "interactive_valid_declaration_statement : lock_statement", +//t "interactive_valid_declaration_statement : using_statement", +//t "interactive_valid_declaration_statement : unsafe_statement", +//t "interactive_valid_declaration_statement : fixed_statement", +//t "interactive_valid_declaration_statement : local_function_statement", +//t "embedded_statement : valid_declaration_statement", +//t "embedded_statement : block_variable_declaration", +//t "embedded_statement : labeled_statement", +//t "embedded_statement : error", +//t "empty_statement : SEMICOLON", +//t "$$89 :", +//t "labeled_statement : identifier_inside_body COLON $$89 statement", +//t "use_namespace_statement : USE NAMESPACE IDENTIFIER stmnt_end_semicolon", +//t "variable_type : variable_type_simple", +//t "variable_type : variable_type_simple rank_specifiers", +//t "variable_type_simple : primary_expression_or_type opt_nullable", +//t "variable_type_simple : VOID", +//t "identifier_inside_body : IDENTIFIER", +//t "identifier_inside_body : AWAIT", +//t "stmnt_end_semicolon : SEMICOLON", +//t "$$90 :", +//t "block_variable_declaration : VAR identifier_inside_body COLON type $$90 opt_local_variable_initializer opt_variable_declarators stmnt_end_semicolon", +//t "$$91 :", +//t "block_variable_declaration : VAR identifier_inside_body $$91 opt_local_variable_initializer opt_variable_declarators stmnt_end_semicolon", +//t "$$92 :", +//t "block_variable_declaration : CONST identifier_inside_body COLON type $$92 opt_local_variable_initializer opt_variable_declarators stmnt_end_semicolon", +//t "opt_local_variable_initializer :", +//t "opt_local_variable_initializer : ASSIGN block_variable_initializer", +//t "opt_local_variable_initializer : error", +//t "opt_variable_declarators :", +//t "opt_variable_declarators : variable_declarators", +//t "opt_using_or_fixed_variable_declarators :", +//t "opt_using_or_fixed_variable_declarators : variable_declarators", +//t "variable_declarators : variable_declarator", +//t "variable_declarators : variable_declarators variable_declarator", +//t "variable_declarator : COMMA identifier_inside_body", +//t "variable_declarator : COMMA identifier_inside_body ASSIGN block_variable_initializer", +//t "variable_declarator : COMMA identifier_inside_body COLON type", +//t "variable_declarator : COMMA identifier_inside_body COLON type ASSIGN block_variable_initializer", +//t "block_variable_initializer : variable_initializer", +//t "expression_statement : statement_expression stmnt_end_semicolon", +//t "expression_statement : statement_expression COMPLETE_COMPLETION", +//t "expression_statement : statement_expression CLOSE_BRACE", +//t "interactive_expression_statement : interactive_statement_expression SEMICOLON", +//t "interactive_expression_statement : interactive_statement_expression COMPLETE_COMPLETION", +//t "statement_expression : expression", +//t "interactive_statement_expression : expression", +//t "interactive_statement_expression : error", +//t "selection_statement : if_statement", +//t "selection_statement : switch_statement", +//t "stmnt_close_parens : CLOSE_PARENS", +//t "stmnt_else : ELSE", +//t "if_statement : IF open_parens_any boolean_expression stmnt_close_parens embedded_statement", +//t "if_statement : IF open_parens_any boolean_expression stmnt_close_parens embedded_statement stmnt_else embedded_statement", +//t "if_statement : IF open_parens_any boolean_expression error", +//t "$$93 :", +//t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$93 opt_switch_sections CLOSE_BRACE", +//t "switch_statement : SWITCH open_parens_any expression error", +//t "opt_switch_sections :", +//t "opt_switch_sections : switch_labels", +//t "opt_switch_sections : switch_sections opt_switch_labels", +//t "switch_sections : switch_section", +//t "switch_sections : switch_sections switch_section", +//t "switch_sections : error", +//t "switch_section : switch_labels statement_list", +//t "opt_switch_labels :", +//t "opt_switch_labels : switch_labels", +//t "switch_labels : switch_label", +//t "switch_labels : switch_labels switch_label", +//t "switch_label : CASE constant_expression COLON", +//t "switch_label : CASE constant_expression error", +//t "switch_label : DEFAULT_COLON", +//t "iteration_statement : while_statement", +//t "iteration_statement : do_statement", +//t "iteration_statement : for_statement", +//t "iteration_statement : foreach_statement", +//t "while_statement : WHILE open_parens_any boolean_expression stmnt_close_parens embedded_statement", +//t "while_statement : WHILE open_parens_any boolean_expression error", +//t "stmnt_do : DO", +//t "do_while_stmnt_close_parens : CLOSE_PARENS", +//t "do_statement : stmnt_do embedded_statement WHILE open_parens_any boolean_expression do_while_stmnt_close_parens stmnt_end_semicolon", +//t "do_statement : stmnt_do embedded_statement error", +//t "do_statement : stmnt_do embedded_statement WHILE open_parens_any boolean_expression error", +//t "$$94 :", +//t "for_statement : FOR open_parens_any $$94 for_statement_cont", +//t "$$95 :", +//t "for_statement_cont : for_initializer IN $$95 expression stmnt_close_parens embedded_statement", +//t "$$96 :", +//t "for_statement_cont : opt_for_initializer SEMICOLON $$96 for_condition_and_iterator_part embedded_statement", +//t "for_statement_cont : error", +//t "$$97 :", +//t "for_condition_and_iterator_part : opt_for_condition SEMICOLON $$97 for_iterator_part", +//t "for_condition_and_iterator_part : opt_for_condition close_parens_close_brace", +//t "for_iterator_part : opt_for_iterator stmnt_close_parens", +//t "for_iterator_part : opt_for_iterator CLOSE_BRACE", +//t "close_parens_close_brace : CLOSE_PARENS", +//t "close_parens_close_brace : CLOSE_BRACE", +//t "opt_for_initializer :", +//t "opt_for_initializer : for_initializer", +//t "$$98 :", +//t "for_initializer : VAR identifier_inside_body opt_type $$98 opt_local_variable_initializer opt_variable_declarators", +//t "for_initializer : expression_list", +//t "opt_type :", +//t "opt_type : COLON type", +//t "opt_for_condition :", +//t "opt_for_condition : boolean_expression", +//t "opt_for_iterator :", +//t "opt_for_iterator : for_iterator", +//t "for_iterator : statement_expression_list", +//t "statement_expression_list : statement_expression", +//t "statement_expression_list : statement_expression_list COMMA statement_expression", +//t "$$99 :", +//t "$$100 :", +//t "$$101 :", +//t "foreach_statement : FOR_EACH $$99 open_parens_any for_initializer IN $$100 expression stmnt_close_parens $$101 embedded_statement", +//t "jump_statement : break_statement", +//t "jump_statement : continue_statement", +//t "jump_statement : goto_statement", +//t "jump_statement : return_statement", +//t "jump_statement : throw_statement", +//t "jump_statement : yield_statement", +//t "jump_statement : use_namespace_statement", +//t "break_statement : BREAK stmnt_end_semicolon", +//t "continue_statement : CONTINUE stmnt_end_semicolon", +//t "continue_statement : CONTINUE error", +//t "goto_statement : GOTO identifier_inside_body stmnt_end_semicolon", +//t "goto_statement : GOTO CASE constant_expression stmnt_end_semicolon", +//t "goto_statement : GOTO DEFAULT stmnt_end_semicolon", +//t "return_statement : RETURN opt_expression stmnt_end_semicolon", +//t "return_statement : RETURN expression error", +//t "return_statement : RETURN error", +//t "throw_statement : THROW opt_expression stmnt_end_semicolon", +//t "throw_statement : THROW expression error", +//t "throw_statement : THROW error", +//t "yield_statement : identifier_inside_body RETURN opt_expression stmnt_end_semicolon", +//t "yield_statement : identifier_inside_body RETURN expression error", +//t "yield_statement : identifier_inside_body BREAK stmnt_end_semicolon", +//t "opt_expression :", +//t "opt_expression : expression", +//t "try_statement : TRY block catch_clauses", +//t "try_statement : TRY block FINALLY block", +//t "try_statement : TRY block catch_clauses FINALLY block", +//t "try_statement : TRY block error", +//t "catch_clauses : catch_clause", +//t "catch_clauses : catch_clauses catch_clause", +//t "catch_clause : CATCH opt_catch_filter block", +//t "$$102 :", +//t "catch_clause : CATCH open_parens_any IDENTIFIER opt_type CLOSE_PARENS $$102 opt_catch_filter block_prepared", +//t "catch_clause : CATCH open_parens_any error", +//t "opt_catch_filter :", +//t "opt_catch_filter : IF open_parens_any expression CLOSE_PARENS", +//t "checked_statement : CHECKED block", +//t "unchecked_statement : UNCHECKED block", +//t "$$103 :", +//t "unsafe_statement : UNSAFE $$103 block", +//t "lock_statement : LOCK open_parens_any expression CLOSE_PARENS embedded_statement", +//t "lock_statement : LOCK open_parens_any expression error", +//t "$$104 :", +//t "$$105 :", +//t "fixed_statement : FIXED open_parens_any type identifier_inside_body $$104 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$105 embedded_statement", +//t "$$106 :", +//t "$$107 :", +//t "using_statement : USING open_parens_any variable_type identifier_inside_body $$106 using_initialization CLOSE_PARENS $$107 embedded_statement", +//t "using_statement : USING open_parens_any expression CLOSE_PARENS embedded_statement", +//t "using_statement : USING open_parens_any expression error", +//t "using_initialization : using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators", +//t "using_initialization : error", +//t "using_or_fixed_variable_initializer :", +//t "using_or_fixed_variable_initializer : ASSIGN variable_initializer", +//t "query_expression : first_from_clause query_body", +//t "query_expression : nested_from_clause query_body", +//t "query_expression : first_from_clause COMPLETE_COMPLETION", +//t "query_expression : nested_from_clause COMPLETE_COMPLETION", +//t "first_from_clause : FROM_FIRST identifier_inside_body IN expression", +//t "first_from_clause : FROM_FIRST type identifier_inside_body IN expression", +//t "nested_from_clause : FROM identifier_inside_body IN expression", +//t "nested_from_clause : FROM type identifier_inside_body IN expression", +//t "$$108 :", +//t "from_clause : FROM identifier_inside_body IN $$108 expression_or_error", +//t "$$109 :", +//t "from_clause : FROM type identifier_inside_body IN $$109 expression_or_error", +//t "query_body : query_body_clauses select_or_group_clause opt_query_continuation", +//t "query_body : select_or_group_clause opt_query_continuation", +//t "query_body : query_body_clauses COMPLETE_COMPLETION", +//t "query_body : query_body_clauses error", +//t "query_body : error", +//t "$$110 :", +//t "select_or_group_clause : SELECT $$110 expression_or_error", +//t "$$111 :", +//t "$$112 :", +//t "select_or_group_clause : GROUP $$111 expression_or_error $$112 BY expression_or_error", +//t "query_body_clauses : query_body_clause", +//t "query_body_clauses : query_body_clauses query_body_clause", +//t "query_body_clause : from_clause", +//t "query_body_clause : let_clause", +//t "query_body_clause : where_clause", +//t "query_body_clause : join_clause", +//t "query_body_clause : orderby_clause", +//t "$$113 :", +//t "let_clause : LET identifier_inside_body ASSIGN $$113 expression_or_error", +//t "$$114 :", +//t "where_clause : WHERE $$114 expression_or_error", +//t "$$115 :", +//t "$$116 :", +//t "$$117 :", +//t "join_clause : JOIN identifier_inside_body IN $$115 expression_or_error ON $$116 expression_or_error EQUALS $$117 expression_or_error opt_join_into", +//t "$$118 :", +//t "$$119 :", +//t "$$120 :", +//t "join_clause : JOIN type identifier_inside_body IN $$118 expression_or_error ON $$119 expression_or_error EQUALS $$120 expression_or_error opt_join_into", +//t "opt_join_into :", +//t "opt_join_into : INTO identifier_inside_body", +//t "$$121 :", +//t "orderby_clause : ORDERBY $$121 orderings", +//t "orderings : order_by", +//t "$$122 :", +//t "orderings : order_by COMMA $$122 orderings_then_by", +//t "orderings_then_by : then_by", +//t "$$123 :", +//t "orderings_then_by : orderings_then_by COMMA $$123 then_by", +//t "order_by : expression", +//t "order_by : expression ASCENDING", +//t "order_by : expression DESCENDING", +//t "then_by : expression", +//t "then_by : expression ASCENDING", +//t "then_by : expression DESCENDING", +//t "opt_query_continuation :", +//t "$$124 :", +//t "opt_query_continuation : INTO identifier_inside_body $$124 query_body", +//t "interactive_parsing : EVAL_STATEMENT_PARSER EOF", +//t "interactive_parsing : EVAL_USING_DECLARATIONS_UNIT_PARSER package_directives opt_COMPLETE_COMPLETION", +//t "$$125 :", +//t "interactive_parsing : EVAL_STATEMENT_PARSER $$125 interactive_statement_list opt_COMPLETE_COMPLETION", +//t "interactive_parsing : EVAL_COMPILATION_UNIT_PARSER interactive_compilation_unit", +//t "interactive_compilation_unit : opt_extern_alias_directives opt_package_directives", +//t "interactive_compilation_unit : opt_extern_alias_directives opt_package_directives package_declaration", +//t "opt_COMPLETE_COMPLETION :", +//t "opt_COMPLETE_COMPLETION : COMPLETE_COMPLETION", +//t "documentation_parsing : DOC_SEE doc_cref", +//t "doc_cref : doc_type_declaration_name opt_doc_method_sig", +//t "doc_cref : doc_type_declaration_name DOT THIS", +//t "$$126 :", +//t "doc_cref : doc_type_declaration_name DOT THIS OPEN_BRACKET $$126 opt_doc_parameters CLOSE_BRACKET", +//t "doc_cref : EXPLICIT OPERATOR type opt_doc_method_sig", +//t "doc_cref : IMPLICIT OPERATOR type opt_doc_method_sig", +//t "doc_cref : OPERATOR overloadable_operator opt_doc_method_sig", +//t "doc_type_declaration_name : type_declaration_name", +//t "doc_type_declaration_name : doc_type_declaration_name DOT type_declaration_name", +//t "opt_doc_method_sig :", +//t "$$127 :", +//t "opt_doc_method_sig : OPEN_PARENS $$127 opt_doc_parameters CLOSE_PARENS", +//t "opt_doc_parameters :", +//t "opt_doc_parameters : doc_parameters", +//t "doc_parameters : doc_parameter", +//t "doc_parameters : doc_parameters COMMA doc_parameter", +//t "doc_parameter : opt_parameter_modifier parameter_type", +//t }; +//t public static string getRule (int index) { +//t return yyRule [index]; +//t } +//t} + protected static readonly string [] yyNames = { + "end-of-file",null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,null,null,null,null,null,null,null, + null,null,null,null,null,null,null,"EOF","NONE","ERROR", + "FIRST_KEYWORD","ABSTRACT","AS","ADD","SUPER","BOOL","BOOLEAN", + "BREAK","BYTE","CASE","CATCH","CHAR","CHECKED","CLASS","CONST", + "CONTINUE","DECIMAL","DEFAULT","DELEGATE","DELETE","DO","DOUBLE", + "DOUBLE2","DOUBLE3","DOUBLE4","DYNAMIC","EACH","ELSE","ENUM","EVENT", + "EXPLICIT","EXTENDS","FALSE","FINAL","FINALLY","FIXED","FLOAT", + "FLOAT2","FLOAT3","FLOAT4","FOR","FOR_EACH","FUNCTION","FUNCTION_GET", + "FUNCTION_SET","GOTO","IF","IMPLICIT","IMPLEMENTS","IMPORT","IN", + "INDEXER","INSTANCEOF","INT","INTERFACE","INTERNAL","IS","LOCK", + "LONG","NAMESPACE","NATIVE","NEW","NULL","OBJECT","OPERATOR","OUT", + "OVERRIDE","OVERLOAD","PACKAGE","PARAMS","PRIVATE","PROPERTY", + "PROTECTED","PUBLIC","READONLY","REF","RETURN","REMOVE","SBYTE", + "SHORT","SIZEOF","STACKALLOC","STATIC","STRING","STRUCT","SWITCH", + "THIS","THROW","TRUE","TRY","TYPEOF","UINT","ULONG","UNCHECKED", + "UNDEFINED","UNSAFE","USE","USHORT","USING","VAR","VIRTUAL","VOID", + "VOLATILE","WHERE","WHILE","PARTIAL","ARROW","FROM","FROM_FIRST", + "JOIN","ON","EQUALS","SELECT","GROUP","BY","LET","ORDERBY", + "ASCENDING","DESCENDING","INTO","INTERR_NULLABLE","EXTERN","ASYNC", + "AWAIT","INTERR_OPERATOR","GET","SET","LAST_KEYWORD","OPEN_BRACE", + "CLOSE_BRACE","OPEN_BRACKET","CLOSE_BRACKET","OPEN_PARENS", + "CLOSE_PARENS","DOT","DOT_AT","DOT_STAR","DOTDOT","DOTDOT_AT", + "DOTDOT_STAR","DOTDOTDOT","DOT_OPEN_PARENS","CLOSE_PARENS_DOT", + "COMMA","COLON","SEMICOLON","TILDE","PLUS","MINUS","BANG","ASSIGN", + "OP_LT","OP_GT","BITWISE_AND","BITWISE_OR","LOGICAL_AND_ASSIGN", + "LOGICAL_OR_ASSIGN","STAR","PERCENT","DIV","CARRET","INTERR", + "DOUBLE_COLON","OP_INC","OP_DEC","OP_SHIFT_LEFT","OP_SHIFT_RIGHT", + "OP_USHIFT_RIGHT","OP_LE","OP_GE","OP_EQ","OP_STRICT_EQ","OP_NE", + "OP_STRICT_NE","OP_AND","OP_OR","OP_MULT_ASSIGN","OP_DIV_ASSIGN", + "OP_MOD_ASSIGN","OP_ADD_ASSIGN","OP_SUB_ASSIGN", + "OP_SHIFT_LEFT_ASSIGN","OP_SHIFT_RIGHT_ASSIGN", + "OP_USHIFT_RIGHT_ASSIGN","OP_AND_ASSIGN","OP_XOR_ASSIGN", + "OP_OR_ASSIGN","OP_PTR","OP_COALESCING","OP_IN","OP_AT", + "OP_GENERICS_LT","OP_GENERICS_LT_DECL","OP_GENERICS_GT","LITERAL", + "IDENTIFIER","IDENTIFIER_MODIFIER","IDENTIFIER_CONFIG", + "GENERIC_DIMENSION","DEFAULT_COLON","OPEN_BRACKET_EXPR", + "OPEN_BRACE_INIT","EVAL_STATEMENT_PARSER", + "EVAL_COMPILATION_UNIT_PARSER","EVAL_USING_DECLARATIONS_UNIT_PARSER", + "DOC_SEE","GENERATE_COMPLETION","COMPLETE_COMPLETION","UMINUS", + "qualified_alias_member", + }; + + /** index-checked interface to yyNames[]. + @param token single character or %token value. + @return token name or [illegal] or [unknown]. + */ +//t public static string yyname (int token) { +//t if ((token < 0) || (token > yyNames.Length)) return "[illegal]"; +//t string name; +//t if ((name = yyNames[token]) != null) return name; +//t return "[unknown]"; +//t } + +#pragma warning disable 414 + int yyExpectingState; +#pragma warning restore 414 + /** computes list of expected tokens on error by tracing the tables. + @param state for which to compute the list. + @return list of token names. + */ + protected int [] yyExpectingTokens (int state){ + int token, n, len = 0; + bool[] ok = new bool[yyNames.Length]; + if ((n = yySindex[state]) != 0) + for (token = n < 0 ? -n : 0; + (token < yyNames.Length) && (n+token < yyTable.Length); ++ token) + if (yyCheck[n+token] == token && !ok[token] && yyNames[token] != null) { + ++ len; + ok[token] = true; + } + if ((n = yyRindex[state]) != 0) + for (token = n < 0 ? -n : 0; + (token < yyNames.Length) && (n+token < yyTable.Length); ++ token) + if (yyCheck[n+token] == token && !ok[token] && yyNames[token] != null) { + ++ len; + ok[token] = true; + } + int [] result = new int [len]; + for (n = token = 0; n < len; ++ token) + if (ok[token]) result[n++] = token; + return result; + } + protected string[] yyExpecting (int state) { + int [] tokens = yyExpectingTokens (state); + string [] result = new string[tokens.Length]; + for (int n = 0; n < tokens.Length; n++) + result[n++] = yyNames[tokens [n]]; + return result; + } + + /** the generated parser, with debugging messages. + Maintains a state and a value stack, currently with fixed maximum size. + @param yyLex scanner. + @param yydebug debug message writer implementing yyDebug, or null. + @return result of the last reduction, if any. + @throws yyException on irrecoverable parse error. + */ + internal Object yyparse (yyParser.yyInput yyLex, Object yyd) + { +//t this.debug = (yydebug.yyDebug)yyd; + return yyparse(yyLex); + } + + /** initial size and increment of the state/value stack [default 256]. + This is not final so that it can be overwritten outside of invocations + of yyparse(). + */ + protected int yyMax; + + /** executed at the beginning of a reduce action. + Used as $$ = yyDefault($1), prior to the user-specified action, if any. + Can be overwritten to provide deep copy, etc. + @param first value for $1, or null. + @return first. + */ + protected Object yyDefault (Object first) { + return first; + } + + static int[] global_yyStates; + static object[] global_yyVals; +#pragma warning disable 649 + protected bool use_global_stacks; +#pragma warning restore 649 + object[] yyVals; // value stack + object yyVal; // value stack ptr + int yyToken; // current input + int yyTop; + + /** the generated parser. + Maintains a state and a value stack, currently with fixed maximum size. + @param yyLex scanner. + @return result of the last reduction, if any. + @throws yyException on irrecoverable parse error. + */ + internal Object yyparse (yyParser.yyInput yyLex) + { + if (yyMax <= 0) yyMax = 256; // initial size + int yyState = 0; // state stack ptr + int [] yyStates; // state stack + yyVal = null; + yyToken = -1; + int yyErrorFlag = 0; // #tks to shift + if (use_global_stacks && global_yyStates != null) { + yyVals = global_yyVals; + yyStates = global_yyStates; + } else { + yyVals = new object [yyMax]; + yyStates = new int [yyMax]; + if (use_global_stacks) { + global_yyVals = yyVals; + global_yyStates = yyStates; + } + } + + /*yyLoop:*/ for (yyTop = 0;; ++ yyTop) { + if (yyTop >= yyStates.Length) { // dynamically increase + global::System.Array.Resize (ref yyStates, yyStates.Length+yyMax); + global::System.Array.Resize (ref yyVals, yyVals.Length+yyMax); + } + yyStates[yyTop] = yyState; + yyVals[yyTop] = yyVal; +//t if (debug != null) debug.push(yyState, yyVal); + + /*yyDiscarded:*/ while (true) { // discarding a token does not change stack + int yyN; + if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) + if (yyToken < 0) { + yyToken = yyLex.advance() ? yyLex.token() : 0; +//t if (debug != null) +//t debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); + } + if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0) + && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) { +//t if (debug != null) +//t debug.shift(yyState, yyTable[yyN], yyErrorFlag-1); + yyState = yyTable[yyN]; // shift to yyN + yyVal = yyLex.value(); + yyToken = -1; + if (yyErrorFlag > 0) -- yyErrorFlag; + goto continue_yyLoop; + } + if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 + && yyN < yyTable.Length && yyCheck[yyN] == yyToken) + yyN = yyTable[yyN]; // reduce (yyN) + else + switch (yyErrorFlag) { + + case 0: + yyExpectingState = yyState; + // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState)); +//t if (debug != null) debug.error("syntax error"); + if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof (); + goto case 1; + case 1: case 2: + yyErrorFlag = 3; + do { + if ((yyN = yySindex[yyStates[yyTop]]) != 0 + && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length + && yyCheck[yyN] == Token.yyErrorCode) { +//t if (debug != null) +//t debug.shift(yyStates[yyTop], yyTable[yyN], 3); + yyState = yyTable[yyN]; + yyVal = yyLex.value(); + goto continue_yyLoop; + } +//t if (debug != null) debug.pop(yyStates[yyTop]); + } while (-- yyTop >= 0); +//t if (debug != null) debug.reject(); + throw new yyParser.yyException("irrecoverable syntax error"); + + case 3: + if (yyToken == 0) { +//t if (debug != null) debug.reject(); + throw new yyParser.yyException("irrecoverable syntax error at end-of-file"); + } +//t if (debug != null) +//t debug.discard(yyState, yyToken, yyname(yyToken), +//t yyLex.value()); + yyToken = -1; + goto continue_yyDiscarded; // leave stack alone + } + } + int yyV = yyTop + 1-yyLen[yyN]; +//t if (debug != null) +//t debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]); + yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); + switch (yyN) { +case 1: +#line 438 "ps-parser.jay" + { + Lexer.check_incorrect_doc_comment (); + } + break; +case 2: +#line 439 "ps-parser.jay" + { Lexer.CompleteOnEOF = false; } + break; +case 6: + case_6(); + break; +case 7: +#line 458 "ps-parser.jay" + { + module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace); + } + break; +case 8: + case_8(); + break; +case 13: + case_13(); + break; +case 14: +#line 503 "ps-parser.jay" + { + Error_SyntaxError (yyToken); + } + break; +case 19: + case_19(); + break; +case 20: + case_20(); + break; +case 21: + case_21(); + break; +case 22: + case_22(); + break; +case 25: + case_25(); + break; +case 27: + case_27(); + break; +case 28: +#line 569 "ps-parser.jay" + { + Lexer.AllowAutoSemiAfterToken(Token.DOT_STAR, true); + } + break; +case 29: + case_29(); + break; +case 30: + case_30(); + break; +case 31: + case_31(); + break; +case 32: + case_32(); + break; +case 33: +#line 621 "ps-parser.jay" + { + Lexer.AutoSemiInsertion = false; + } + break; +case 34: + case_34(); + break; +case 35: + case_35(); + break; +case 36: + case_36(); + break; +case 37: + case_37(); + break; +case 40: + case_40(); + break; +case 41: + case_41(); + break; +case 42: + case_42(); + break; +case 59: + case_59(); + break; +case 60: + case_60(); + break; +case 61: + case_61(); + break; +case 63: + case_63(); + break; +case 64: + case_64(); + break; +case 65: + case_65(); + break; +case 66: + case_66(); + break; +case 75: + case_75(); + break; +case 76: + case_76(); + break; +case 77: + case_77(); + break; +case 78: + case_78(); + break; +case 79: + case_79(); + break; +case 80: + case_80(); + break; +case 81: + case_81(); + break; +case 82: + case_82(); + break; +case 83: + case_83(); + break; +case 84: + case_84(); + break; +case 85: +#line 953 "ps-parser.jay" + { yyVal = "event"; } + break; +case 86: +#line 954 "ps-parser.jay" + { yyVal = "return"; } + break; +case 87: +#line 961 "ps-parser.jay" + { + yyVal = new List (4) { (Attribute) yyVals[0+yyTop] }; + } + break; +case 88: + case_88(); + break; +case 89: +#line 978 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 90: + case_90(); + break; +case 92: +#line 997 "ps-parser.jay" + { yyVal = null; } + break; +case 93: + case_93(); + break; +case 94: +#line 1007 "ps-parser.jay" + { yyVal = null; } + break; +case 95: + case_95(); + break; +case 96: + case_96(); + break; +case 97: + case_97(); + break; +case 98: + case_98(); + break; +case 99: +#line 1049 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 100: + case_100(); + break; +case 101: +#line 1063 "ps-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop]); + } + break; +case 102: + case_102(); + break; +case 105: + case_105(); + break; +case 106: + case_106(); + break; +case 121: + case_121(); + break; +case 122: + case_122(); + break; +case 123: + case_123(); + break; +case 124: + case_124(); + break; +case 125: + case_125(); + break; +case 126: + case_126(); + break; +case 127: + case_127(); + break; +case 128: + case_128(); + break; +case 129: + case_129(); + break; +case 130: + case_130(); + break; +case 131: + case_131(); + break; +case 132: + case_132(); + break; +case 133: + case_133(); + break; +case 134: +#line 1218 "ps-parser.jay" + { + Error_SyntaxError (yyToken); + } + break; +case 135: +#line 1225 "ps-parser.jay" + { + yyVal = null; + } + break; +case 136: +#line 1229 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 137: + case_137(); + break; +case 138: + case_138(); + break; +case 141: +#line 1277 "ps-parser.jay" + { + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 142: +#line 1281 "ps-parser.jay" + { + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 143: + case_143(); + break; +case 144: +#line 1304 "ps-parser.jay" + { + yyVal = new ConstInitializer (current_field, new DefaultValueExpression(current_field.TypeExpression, current_field.Location), current_field.Location); + } + break; +case 146: +#line 1312 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 147: + case_147(); + break; +case 148: + case_148(); + break; +case 150: + case_150(); + break; +case 151: + case_151(); + break; +case 152: + case_152(); + break; +case 153: + case_153(); + break; +case 154: +#line 1403 "ps-parser.jay" + { + report.Error (1641, GetLocation (yyVals[0+yyTop]), "A fixed size buffer field must have the array size specifier after the field name"); + } + break; +case 156: + case_156(); + break; +case 157: + case_157(); + break; +case 160: +#line 1432 "ps-parser.jay" + { + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 161: +#line 1436 "ps-parser.jay" + { + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 162: + case_162(); + break; +case 163: +#line 1456 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 164: + case_164(); + break; +case 167: +#line 1482 "ps-parser.jay" + { + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 168: +#line 1486 "ps-parser.jay" + { + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 169: + case_169(); + break; +case 170: +#line 1502 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 171: + case_171(); + break; +case 172: + case_172(); + break; +case 174: + case_174(); + break; +case 175: + case_175(); + break; +case 176: + case_176(); + break; +case 177: + case_177(); + break; +case 178: +#line 1645 "ps-parser.jay" + { + lexer.ConstraintsParsing = true; + } + break; +case 179: + case_179(); + break; +case 180: +#line 1714 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.All; + } + break; +case 181: + case_181(); + break; +case 182: +#line 1776 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.All; + } + break; +case 183: + case_183(); + break; +case 184: +#line 1845 "ps-parser.jay" + { + lexer.parsing_generic_declaration = true; + } + break; +case 185: + case_185(); + break; +case 186: +#line 1855 "ps-parser.jay" + { + lexer.ConstraintsParsing = true; + } + break; +case 187: + case_187(); + break; +case 188: + case_188(); + break; +case 189: + case_189(); + break; +case 191: +#line 1926 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 192: + case_192(); + break; +case 194: + case_194(); + break; +case 195: +#line 1947 "ps-parser.jay" + { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } + break; +case 197: + case_197(); + break; +case 198: + case_198(); + break; +case 199: + case_199(); + break; +case 200: + case_200(); + break; +case 201: +#line 2005 "ps-parser.jay" + { + yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); + } + break; +case 202: + case_202(); + break; +case 203: + case_203(); + break; +case 204: + case_204(); + break; +case 205: + case_205(); + break; +case 206: + case_206(); + break; +case 207: + case_207(); + break; +case 208: +#line 2087 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 209: + case_209(); + break; +case 210: +#line 2135 "ps-parser.jay" + { yyVal = Parameter.Modifier.NONE; } + break; +case 212: +#line 2143 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 213: + case_213(); + break; +case 214: + case_214(); + break; +case 215: + case_215(); + break; +case 216: + case_216(); + break; +case 217: + case_217(); + break; +case 218: + case_218(); + break; +case 219: + case_219(); + break; +case 221: + case_221(); + break; +case 222: + case_222(); + break; +case 223: + case_223(); + break; +case 224: + case_224(); + break; +case 225: + case_225(); + break; +case 226: +#line 2297 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; + } + break; +case 227: + case_227(); + break; +case 228: +#line 2338 "ps-parser.jay" + { + lexer.PropertyParsing = false; + } + break; +case 229: + case_229(); + break; +case 234: + case_234(); + break; +case 235: + case_235(); + break; +case 236: + case_236(); + break; +case 237: + case_237(); + break; +case 238: + case_238(); + break; +case 240: + case_240(); + break; +case 241: + case_241(); + break; +case 242: + case_242(); + break; +case 243: + case_243(); + break; +case 244: + case_244(); + break; +case 245: + case_245(); + break; +case 246: + case_246(); + break; +case 247: + case_247(); + break; +case 248: +#line 2531 "ps-parser.jay" + { + Error_SyntaxError (yyToken); + } + break; +case 251: + case_251(); + break; +case 252: + case_252(); + break; +case 253: +#line 2556 "ps-parser.jay" + { + report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); + } + break; +case 254: +#line 2560 "ps-parser.jay" + { + report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); + } + break; +case 259: +#line 2568 "ps-parser.jay" + { + report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); + } + break; +case 260: +#line 2576 "ps-parser.jay" + { + report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); + } + break; +case 261: +#line 2582 "ps-parser.jay" + { + } + break; +case 262: + case_262(); + break; +case 264: +#line 2628 "ps-parser.jay" + { yyVal = null; } + break; +case 266: + case_266(); + break; +case 267: +#line 2644 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.DefaultValue; + } + break; +case 268: + case_268(); + break; +case 270: +#line 2692 "ps-parser.jay" + { yyVal = Operator.OpType.LogicalNot; } + break; +case 271: +#line 2693 "ps-parser.jay" + { yyVal = Operator.OpType.OnesComplement; } + break; +case 272: +#line 2694 "ps-parser.jay" + { yyVal = Operator.OpType.Increment; } + break; +case 273: +#line 2695 "ps-parser.jay" + { yyVal = Operator.OpType.Decrement; } + break; +case 274: +#line 2696 "ps-parser.jay" + { yyVal = Operator.OpType.True; } + break; +case 275: +#line 2697 "ps-parser.jay" + { yyVal = Operator.OpType.False; } + break; +case 276: +#line 2699 "ps-parser.jay" + { yyVal = Operator.OpType.Addition; } + break; +case 277: +#line 2700 "ps-parser.jay" + { yyVal = Operator.OpType.Subtraction; } + break; +case 278: +#line 2702 "ps-parser.jay" + { yyVal = Operator.OpType.Multiply; } + break; +case 279: +#line 2703 "ps-parser.jay" + { yyVal = Operator.OpType.Division; } + break; +case 280: +#line 2704 "ps-parser.jay" + { yyVal = Operator.OpType.Modulus; } + break; +case 281: +#line 2705 "ps-parser.jay" + { yyVal = Operator.OpType.BitwiseAnd; } + break; +case 282: +#line 2706 "ps-parser.jay" + { yyVal = Operator.OpType.BitwiseOr; } + break; +case 283: +#line 2707 "ps-parser.jay" + { yyVal = Operator.OpType.ExclusiveOr; } + break; +case 284: +#line 2708 "ps-parser.jay" + { yyVal = Operator.OpType.LeftShift; } + break; +case 285: +#line 2709 "ps-parser.jay" + { yyVal = Operator.OpType.RightShift; } + break; +case 286: +#line 2710 "ps-parser.jay" + { yyVal = Operator.OpType.AsURightShift; } + break; +case 287: +#line 2711 "ps-parser.jay" + { yyVal = Operator.OpType.Equality; } + break; +case 288: +#line 2712 "ps-parser.jay" + { yyVal = Operator.OpType.Inequality; } + break; +case 289: +#line 2713 "ps-parser.jay" + { yyVal = Operator.OpType.GreaterThan; } + break; +case 290: +#line 2714 "ps-parser.jay" + { yyVal = Operator.OpType.LessThan; } + break; +case 291: +#line 2715 "ps-parser.jay" + { yyVal = Operator.OpType.GreaterThanOrEqual; } + break; +case 292: +#line 2716 "ps-parser.jay" + { yyVal = Operator.OpType.LessThanOrEqual; } + break; +case 293: +#line 2717 "ps-parser.jay" + { yyVal = Operator.OpType.AsIn; } + break; +case 294: +#line 2724 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.DefaultValue; + } + break; +case 295: + case_295(); + break; +case 296: +#line 2743 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.DefaultValue; + } + break; +case 297: + case_297(); + break; +case 298: + case_298(); + break; +case 299: + case_299(); + break; +case 300: + case_300(); + break; +case 301: + case_301(); + break; +case 302: + case_302(); + break; +case 303: + case_303(); + break; +case 304: + case_304(); + break; +case 305: + case_305(); + break; +case 306: + case_306(); + break; +case 308: +#line 3007 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 309: + case_309(); + break; +case 312: +#line 3024 "ps-parser.jay" + { + current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 313: +#line 3028 "ps-parser.jay" + { + current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + } + break; +case 314: + case_314(); + break; +case 315: +#line 3041 "ps-parser.jay" + { + ++lexer.parsing_block; + } + break; +case 316: + case_316(); + break; +case 317: + case_317(); + break; +case 318: +#line 3066 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 321: + case_321(); + break; +case 322: + case_322(); + break; +case 323: + case_323(); + break; +case 324: + case_324(); + break; +case 325: + case_325(); + break; +case 326: + case_326(); + break; +case 327: + case_327(); + break; +case 328: + case_328(); + break; +case 330: + case_330(); + break; +case 331: + case_331(); + break; +case 332: + case_332(); + break; +case 333: + case_333(); + break; +case 334: + case_334(); + break; +case 336: + case_336(); + break; +case 337: + case_337(); + break; +case 340: +#line 3236 "ps-parser.jay" + { + lbag.AddLocation (yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + } + break; +case 342: + case_342(); + break; +case 343: + case_343(); + break; +case 344: + case_344(); + break; +case 345: + case_345(); + break; +case 346: + case_346(); + break; +case 348: +#line 3310 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; + } + break; +case 349: + case_349(); + break; +case 350: +#line 3329 "ps-parser.jay" + { + lexer.ConstraintsParsing = false; + } + break; +case 351: + case_351(); + break; +case 352: + case_352(); + break; +case 355: + case_355(); + break; +case 357: + case_357(); + break; +case 360: + case_360(); + break; +case 361: + case_361(); + break; +case 362: + case_362(); + break; +case 363: + case_363(); + break; +case 365: + case_365(); + break; +case 366: + case_366(); + break; +case 367: + case_367(); + break; +case 368: + case_368(); + break; +case 369: +#line 3485 "ps-parser.jay" + { + lexer.parsing_generic_declaration = true; + } + break; +case 370: + case_370(); + break; +case 371: + case_371(); + break; +case 373: + case_373(); + break; +case 374: + case_374(); + break; +case 375: + case_375(); + break; +case 376: + case_376(); + break; +case 377: + case_377(); + break; +case 379: + case_379(); + break; +case 380: + case_380(); + break; +case 381: + case_381(); + break; +case 382: + case_382(); + break; +case 383: + case_383(); + break; +case 385: +#line 3603 "ps-parser.jay" + { + yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); + } + break; +case 386: +#line 3610 "ps-parser.jay" + { + lexer.parsing_generic_declaration = true; + } + break; +case 388: + case_388(); + break; +case 390: + case_390(); + break; +case 391: +#line 3638 "ps-parser.jay" + { + yyVal = null; + } + break; +case 392: +#line 3642 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 394: + case_394(); + break; +case 396: + case_396(); + break; +case 397: + case_397(); + break; +case 398: +#line 3679 "ps-parser.jay" + { + yyVal = new TypeExpression (compiler.BuiltinTypes.AsUntyped, GetLocation (yyVals[0+yyTop])); + } + break; +case 399: + case_399(); + break; +case 400: + case_400(); + break; +case 401: + case_401(); + break; +case 402: + case_402(); + break; +case 403: +#line 3732 "ps-parser.jay" + { CheckIsPlayScript("decimal", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } + break; +case 404: +#line 3733 "ps-parser.jay" + { CheckIsPlayScript("float", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } + break; +case 405: +#line 3737 "ps-parser.jay" + { CheckIsPlayScript("double", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } + break; +case 407: +#line 3745 "ps-parser.jay" + { CheckIsPlayScript("sbyte", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } + break; +case 408: +#line 3746 "ps-parser.jay" + { CheckIsPlayScript("byte", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } + break; +case 409: +#line 3747 "ps-parser.jay" + { CheckIsPlayScript("short", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } + break; +case 410: +#line 3748 "ps-parser.jay" + { CheckIsPlayScript("ushort", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } + break; +case 411: +#line 3749 "ps-parser.jay" + { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } + break; +case 412: +#line 3750 "ps-parser.jay" + { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } + break; +case 413: +#line 3751 "ps-parser.jay" + { CheckIsPlayScript("long", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } + break; +case 414: +#line 3752 "ps-parser.jay" + { CheckIsPlayScript("ulong", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } + break; +case 415: +#line 3753 "ps-parser.jay" + { CheckIsPlayScript("char", GetLocation(yyVals[0+yyTop])); yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } + break; +case 434: + case_434(); + break; +case 435: +#line 3802 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 439: +#line 3809 "ps-parser.jay" + { yyVal = new AsUndefinedLiteral (GetLocation (yyVals[0+yyTop])); } + break; +case 440: +#line 3810 "ps-parser.jay" + { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } + break; +case 441: +#line 3814 "ps-parser.jay" + { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } + break; +case 442: +#line 3815 "ps-parser.jay" + { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } + break; +case 446: + case_446(); + break; +case 447: +#line 3841 "ps-parser.jay" + { + yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } + break; +case 448: + case_448(); + break; +case 449: + case_449(); + break; +case 450: + case_450(); + break; +case 451: + case_451(); + break; +case 452: + case_452(); + break; +case 453: + case_453(); + break; +case 454: + case_454(); + break; +case 455: + case_455(); + break; +case 456: + case_456(); + break; +case 457: + case_457(); + break; +case 458: + case_458(); + break; +case 459: + case_459(); + break; +case 460: + case_460(); + break; +case 461: + case_461(); + break; +case 462: +#line 3968 "ps-parser.jay" + { + yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); + } + break; +case 463: + case_463(); + break; +case 464: + case_464(); + break; +case 465: + case_465(); + break; +case 466: + case_466(); + break; +case 467: + case_467(); + break; +case 468: + case_468(); + break; +case 469: + case_469(); + break; +case 470: + case_470(); + break; +case 471: + case_471(); + break; +case 473: +#line 4070 "ps-parser.jay" + { yyVal = null; } + break; +case 474: +#line 4074 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 475: + case_475(); + break; +case 476: + case_476(); + break; +case 477: + case_477(); + break; +case 478: + case_478(); + break; +case 479: + case_479(); + break; +case 480: + case_480(); + break; +case 481: +#line 4130 "ps-parser.jay" + { + yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); + } + break; +case 483: +#line 4157 "ps-parser.jay" + { yyVal = null; } + break; +case 485: + case_485(); + break; +case 486: + case_486(); + break; +case 487: + case_487(); + break; +case 488: + case_488(); + break; +case 489: +#line 4191 "ps-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop]); + } + break; +case 491: + case_491(); + break; +case 492: +#line 4204 "ps-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); + } + break; +case 493: + case_493(); + break; +case 494: +#line 4213 "ps-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); + } + break; +case 495: + case_495(); + break; +case 496: + case_496(); + break; +case 497: + case_497(); + break; +case 499: + case_499(); + break; +case 500: + case_500(); + break; +case 501: + case_501(); + break; +case 502: + case_502(); + break; +case 503: + case_503(); + break; +case 504: + case_504(); + break; +case 505: + case_505(); + break; +case 506: + case_506(); + break; +case 507: + case_507(); + break; +case 508: +#line 4353 "ps-parser.jay" + { + yyVal = new Argument ((Expression) yyVals[0+yyTop]); + } + break; +case 509: +#line 4360 "ps-parser.jay" + { + yyVal = new This (GetLocation (yyVals[0+yyTop])); + } + break; +case 510: + case_510(); + break; +case 511: + case_511(); + break; +case 512: +#line 4380 "ps-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + } + break; +case 513: +#line 4387 "ps-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + } + break; +case 514: +#line 4451 "ps-parser.jay" + { + yyVal = new AsNew ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 515: +#line 4455 "ps-parser.jay" + { + yyVal = new AsNew ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 516: +#line 4459 "ps-parser.jay" + { + yyVal = new AsNew ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + } + break; +case 517: + case_517(); + break; +case 519: +#line 4473 "ps-parser.jay" + { + yyVal = new This (GetLocation (yyVals[0+yyTop])); + } + break; +case 520: + case_520(); + break; +case 521: + case_521(); + break; +case 523: + case_523(); + break; +case 524: + case_524(); + break; +case 525: + case_525(); + break; +case 526: +#line 4585 "ps-parser.jay" + { + yyVal = 2; + } + break; +case 527: +#line 4589 "ps-parser.jay" + { + yyVal = ((int) yyVals[-1+yyTop]) + 1; + } + break; +case 528: + case_528(); + break; +case 529: + case_529(); + break; +case 530: + case_530(); + break; +case 531: + case_531(); + break; +case 532: +#line 4648 "ps-parser.jay" + { + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + } + break; +case 533: + case_533(); + break; +case 534: + case_534(); + break; +case 535: + case_535(); + break; +case 537: + case_537(); + break; +case 538: + case_538(); + break; +case 539: + case_539(); + break; +case 540: + case_540(); + break; +case 541: + case_541(); + break; +case 542: + case_542(); + break; +case 543: + case_543(); + break; +case 544: + case_544(); + break; +case 545: +#line 4814 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; +case 546: + case_546(); + break; +case 547: +#line 4823 "ps-parser.jay" + { + yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); + } + break; +case 548: +#line 4827 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; +case 549: + case_549(); + break; +case 550: +#line 4836 "ps-parser.jay" + { + yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); + } + break; +case 551: +#line 4843 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; +case 552: + case_552(); + break; +case 553: + case_553(); + break; +case 554: +#line 4864 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; +case 555: + case_555(); + break; +case 556: + case_556(); + break; +case 557: + case_557(); + break; +case 559: +#line 4914 "ps-parser.jay" + { + yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 560: +#line 4918 "ps-parser.jay" + { + yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 561: + case_561(); + break; +case 562: +#line 4946 "ps-parser.jay" + { + yyVal = new Unary (Unary.Operator.AsE4xAttribute, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 563: +#line 4950 "ps-parser.jay" + { + yyVal = new AsTypeOf ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 564: + case_564(); + break; +case 565: + case_565(); + break; +case 566: + case_566(); + break; +case 567: + case_567(); + break; +case 568: + case_568(); + break; +case 569: + case_569(); + break; +case 570: + case_570(); + break; +case 572: +#line 5007 "ps-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 573: +#line 5011 "ps-parser.jay" + { + yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 574: +#line 5015 "ps-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 575: +#line 5019 "ps-parser.jay" + { + yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 576: +#line 5027 "ps-parser.jay" + { + yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 577: + case_577(); + break; +case 578: + case_578(); + break; +case 579: + case_579(); + break; +case 580: + case_580(); + break; +case 581: + case_581(); + break; +case 583: + case_583(); + break; +case 584: + case_584(); + break; +case 585: + case_585(); + break; +case 586: + case_586(); + break; +case 587: + case_587(); + break; +case 588: + case_588(); + break; +case 590: + case_590(); + break; +case 591: + case_591(); + break; +case 592: +#line 5121 "ps-parser.jay" + { + yyVal = new AsIn ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 593: +#line 5125 "ps-parser.jay" + { + yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 594: + case_594(); + break; +case 595: + case_595(); + break; +case 596: + case_596(); + break; +case 597: + case_597(); + break; +case 598: + case_598(); + break; +case 599: + case_599(); + break; +case 601: + case_601(); + break; +case 602: + case_602(); + break; +case 603: + case_603(); + break; +case 604: + case_604(); + break; +case 605: + case_605(); + break; +case 606: + case_606(); + break; +case 608: + case_608(); + break; +case 609: + case_609(); + break; +case 610: + case_610(); + break; +case 611: + case_611(); + break; +case 612: + case_612(); + break; +case 613: + case_613(); + break; +case 614: + case_614(); + break; +case 615: + case_615(); + break; +case 617: + case_617(); + break; +case 618: + case_618(); + break; +case 619: + case_619(); + break; +case 620: + case_620(); + break; +case 622: + case_622(); + break; +case 623: + case_623(); + break; +case 625: + case_625(); + break; +case 626: + case_626(); + break; +case 628: + case_628(); + break; +case 629: + case_629(); + break; +case 631: + case_631(); + break; +case 632: + case_632(); + break; +case 634: + case_634(); + break; +case 635: + case_635(); + break; +case 637: + case_637(); + break; +case 639: + case_639(); + break; +case 640: + case_640(); + break; +case 641: + case_641(); + break; +case 642: + case_642(); + break; +case 643: + case_643(); + break; +case 644: + case_644(); + break; +case 645: + case_645(); + break; +case 646: + case_646(); + break; +case 647: + case_647(); + break; +case 648: + case_648(); + break; +case 649: + case_649(); + break; +case 650: + case_650(); + break; +case 651: + case_651(); + break; +case 652: + case_652(); + break; +case 653: + case_653(); + break; +case 654: + case_654(); + break; +case 655: + case_655(); + break; +case 657: + case_657(); + break; +case 663: +#line 5540 "ps-parser.jay" + { + yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); + } + break; +case 664: + case_664(); + break; +case 665: + case_665(); + break; +case 666: + case_666(); + break; +case 667: + case_667(); + break; +case 668: + case_668(); + break; +case 669: + case_669(); + break; +case 670: +#line 5618 "ps-parser.jay" + { yyVal = null; } + break; +case 671: +#line 5620 "ps-parser.jay" + { yyVal = yyVals[0+yyTop]; } + break; +case 672: + case_672(); + break; +case 673: +#line 5633 "ps-parser.jay" + { + lexer.parsing_modifiers = false; + } + break; +case 675: + case_675(); + break; +case 676: + case_676(); + break; +case 677: + case_677(); + break; +case 678: + case_678(); + break; +case 679: + case_679(); + break; +case 680: + case_680(); + break; +case 681: + case_681(); + break; +case 682: + case_682(); + break; +case 683: + case_683(); + break; +case 684: + case_684(); + break; +case 685: + case_685(); + break; +case 686: + case_686(); + break; +case 687: + case_687(); + break; +case 688: + case_688(); + break; +case 689: + case_689(); + break; +case 690: + case_690(); + break; +case 691: + case_691(); + break; +case 692: + case_692(); + break; +case 694: +#line 5754 "ps-parser.jay" + { + current_type.AddBaseForPart ((FullNamedExpression) yyVals[0+yyTop]); + } + break; +case 695: + case_695(); + break; +case 697: +#line 5768 "ps-parser.jay" + { + current_type.SetBaseTypes ((List) yyVals[0+yyTop]); + } + break; +case 698: + case_698(); + break; +case 700: +#line 5782 "ps-parser.jay" + { + current_type.AddBasesForPart ((List) yyVals[0+yyTop]); + } + break; +case 701: + case_701(); + break; +case 703: +#line 5796 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 704: + case_704(); + break; +case 705: + case_705(); + break; +case 706: + case_706(); + break; +case 707: + case_707(); + break; +case 708: + case_708(); + break; +case 709: + case_709(); + break; +case 710: + case_710(); + break; +case 711: + case_711(); + break; +case 712: +#line 5888 "ps-parser.jay" + { + yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); + } + break; +case 713: +#line 5892 "ps-parser.jay" + { + yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); + } + break; +case 714: +#line 5899 "ps-parser.jay" + { + yyVal = Variance.None; + } + break; +case 715: + case_715(); + break; +case 716: +#line 5913 "ps-parser.jay" + { + yyVal = Variance.Covariant; + } + break; +case 717: +#line 5917 "ps-parser.jay" + { + yyVal = Variance.Contravariant; + } + break; +case 718: + case_718(); + break; +case 719: +#line 5944 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 720: + case_720(); + break; +case 721: +#line 5960 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 722: + case_722(); + break; +case 723: + case_723(); + break; +case 725: + case_725(); + break; +case 726: + case_726(); + break; +case 727: + case_727(); + break; +case 728: + case_728(); + break; +case 729: + case_729(); + break; +case 730: + case_730(); + break; +case 731: + case_731(); + break; +case 732: + case_732(); + break; +case 737: +#line 6063 "ps-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } + break; +case 738: +#line 6067 "ps-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } + break; +case 740: + case_740(); + break; +case 743: +#line 6091 "ps-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } + break; +case 744: +#line 6095 "ps-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } + break; +case 775: + case_775(); + break; +case 776: + case_776(); + break; +case 777: + case_777(); + break; +case 778: + case_778(); + break; +case 779: + case_779(); + break; +case 781: + case_781(); + break; +case 783: + case_783(); + break; +case 784: + case_784(); + break; +case 785: + case_785(); + break; +case 787: + case_787(); + break; +case 788: +#line 6301 "ps-parser.jay" + { + Lexer.AutoSemiInsertion = true; + } + break; +case 789: + case_789(); + break; +case 790: + case_790(); + break; +case 791: + case_791(); + break; +case 792: + case_792(); + break; +case 793: + case_793(); + break; +case 794: + case_794(); + break; +case 796: + case_796(); + break; +case 797: + case_797(); + break; +case 801: + case_801(); + break; +case 804: + case_804(); + break; +case 805: + case_805(); + break; +case 806: + case_806(); + break; +case 807: + case_807(); + break; +case 809: + case_809(); + break; +case 810: +#line 6478 "ps-parser.jay" + { yyVal = yyVals[-1+yyTop]; } + break; +case 811: + case_811(); + break; +case 812: +#line 6488 "ps-parser.jay" + { yyVal = yyVals[-1+yyTop]; } + break; +case 813: +#line 6489 "ps-parser.jay" + { yyVal = yyVals[-1+yyTop]; } + break; +case 814: +#line 6500 "ps-parser.jay" + { + yyVal = ConvertExpressionToStatement((Expression)yyVals[0+yyTop]); + } + break; +case 815: + case_815(); + break; +case 816: + case_816(); + break; +case 819: +#line 6525 "ps-parser.jay" + { + Lexer.AutoSemiInsertionAfter = 1; + } + break; +case 820: +#line 6532 "ps-parser.jay" + { + Lexer.AutoSemiInsertionAfter = 1; + } + break; +case 821: + case_821(); + break; +case 822: + case_822(); + break; +case 823: + case_823(); + break; +case 824: + case_824(); + break; +case 825: + case_825(); + break; +case 826: + case_826(); + break; +case 827: +#line 6590 "ps-parser.jay" + { + report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + } + break; +case 828: +#line 6594 "ps-parser.jay" + { + report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + } + break; +case 832: +#line 6604 "ps-parser.jay" + { + Error_SyntaxError (yyToken); + } + break; +case 836: + case_836(); + break; +case 837: +#line 6626 "ps-parser.jay" + { + current_block.AddStatement ((Statement) yyVals[0+yyTop]); + } + break; +case 838: + case_838(); + break; +case 839: + case_839(); + break; +case 840: + case_840(); + break; +case 845: + case_845(); + break; +case 846: + case_846(); + break; +case 847: +#line 6677 "ps-parser.jay" + { + Lexer.AutoSemiInsertionAfter = 1; + } + break; +case 848: +#line 6684 "ps-parser.jay" + { + Lexer.AutoSemiInsertion = true; + } + break; +case 849: + case_849(); + break; +case 850: + case_850(); + break; +case 851: + case_851(); + break; +case 852: + case_852(); + break; +case 853: + case_853(); + break; +case 854: +#line 6733 "ps-parser.jay" + { + lexer.ForInParsing = false; + } + break; +case 855: + case_855(); + break; +case 856: + case_856(); + break; +case 857: + case_857(); + break; +case 858: + case_858(); + break; +case 859: + case_859(); + break; +case 860: +#line 6820 "ps-parser.jay" + { + yyVal = new Tuple (GetLocation (yyVals[-2+yyTop]), (Location) yyVals[0+yyTop]); + } + break; +case 861: + case_861(); + break; +case 862: + case_862(); + break; +case 863: + case_863(); + break; +case 865: +#line 6850 "ps-parser.jay" + { lexer.putback ('}'); } + break; +case 866: +#line 6854 "ps-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } + break; +case 868: + case_868(); + break; +case 869: + case_869(); + break; +case 870: +#line 6881 "ps-parser.jay" + { + + } + break; +case 871: +#line 6888 "ps-parser.jay" + { + yyVal = null; + } + break; +case 872: +#line 6892 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 873: +#line 6896 "ps-parser.jay" + { yyVal = null; } + break; +case 875: +#line 6901 "ps-parser.jay" + { yyVal = new EmptyStatement (lexer.Location); } + break; +case 879: + case_879(); + break; +case 880: +#line 6930 "ps-parser.jay" + { + lexer.ForInParsing = true; + } + break; +case 881: +#line 6934 "ps-parser.jay" + { + lexer.ForInParsing = false; + } + break; +case 882: + case_882(); + break; +case 883: + case_883(); + break; +case 891: + case_891(); + break; +case 892: + case_892(); + break; +case 893: + case_893(); + break; +case 894: + case_894(); + break; +case 895: + case_895(); + break; +case 896: + case_896(); + break; +case 897: + case_897(); + break; +case 898: + case_898(); + break; +case 899: + case_899(); + break; +case 900: + case_900(); + break; +case 901: + case_901(); + break; +case 902: + case_902(); + break; +case 903: + case_903(); + break; +case 904: + case_904(); + break; +case 905: + case_905(); + break; +case 908: +#line 7126 "ps-parser.jay" + { + yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); + } + break; +case 909: + case_909(); + break; +case 910: + case_910(); + break; +case 911: + case_911(); + break; +case 912: + case_912(); + break; +case 913: + case_913(); + break; +case 914: + case_914(); + break; +case 915: + case_915(); + break; +case 916: + case_916(); + break; +case 917: + case_917(); + break; +case 919: + case_919(); + break; +case 920: +#line 7239 "ps-parser.jay" + { + yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 921: +#line 7246 "ps-parser.jay" + { + yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; +case 922: + case_922(); + break; +case 923: +#line 7256 "ps-parser.jay" + { + yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + } + break; +case 924: + case_924(); + break; +case 925: + case_925(); + break; +case 926: + case_926(); + break; +case 927: + case_927(); + break; +case 928: + case_928(); + break; +case 929: + case_929(); + break; +case 930: + case_930(); + break; +case 931: + case_931(); + break; +case 932: + case_932(); + break; +case 933: + case_933(); + break; +case 935: + case_935(); + break; +case 936: +#line 7365 "ps-parser.jay" + { + Error_MissingInitializer (lexer.Location); + } + break; +case 937: + case_937(); + break; +case 938: + case_938(); + break; +case 939: + case_939(); + break; +case 940: + case_940(); + break; +case 941: + case_941(); + break; +case 942: + case_942(); + break; +case 943: + case_943(); + break; +case 944: + case_944(); + break; +case 945: + case_945(); + break; +case 946: +#line 7477 "ps-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; +case 947: + case_947(); + break; +case 948: +#line 7492 "ps-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; +case 949: + case_949(); + break; +case 950: + case_950(); + break; +case 951: + case_951(); + break; +case 953: + case_953(); + break; +case 954: + case_954(); + break; +case 955: +#line 7554 "ps-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; +case 956: + case_956(); + break; +case 957: + case_957(); + break; +case 958: + case_958(); + break; +case 959: + case_959(); + break; +case 961: + case_961(); + break; +case 967: +#line 7608 "ps-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; +case 968: + case_968(); + break; +case 969: +#line 7627 "ps-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; +case 970: + case_970(); + break; +case 971: + case_971(); + break; +case 972: + case_972(); + break; +case 973: + case_973(); + break; +case 974: + case_974(); + break; +case 975: + case_975(); + break; +case 976: + case_976(); + break; +case 977: + case_977(); + break; +case 978: + case_978(); + break; +case 980: +#line 7771 "ps-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } + break; +case 981: +#line 7778 "ps-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; +case 982: + case_982(); + break; +case 984: + case_984(); + break; +case 985: + case_985(); + break; +case 987: + case_987(); + break; +case 988: + case_988(); + break; +case 989: +#line 7824 "ps-parser.jay" + { + yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } + break; +case 990: + case_990(); + break; +case 991: + case_991(); + break; +case 992: +#line 7841 "ps-parser.jay" + { + yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } + break; +case 993: + case_993(); + break; +case 994: + case_994(); + break; +case 996: + case_996(); + break; +case 997: + case_997(); + break; +case 1000: + case_1000(); + break; +case 1001: + case_1001(); + break; +case 1007: +#line 7966 "ps-parser.jay" + { + module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; + } + break; +case 1008: +#line 7973 "ps-parser.jay" + { + module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; + } + break; +case 1009: +#line 7990 "ps-parser.jay" + { + yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); + } + break; +case 1010: +#line 7994 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; +case 1011: + case_1011(); + break; +case 1012: + case_1012(); + break; +case 1013: + case_1013(); + break; +case 1014: + case_1014(); + break; +case 1016: +#line 8030 "ps-parser.jay" + { + yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); + } + break; +case 1018: +#line 8038 "ps-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + break; +case 1019: +#line 8042 "ps-parser.jay" + { + yyVal = yyVals[-1+yyTop]; + } + break; +case 1020: +#line 8049 "ps-parser.jay" + { + yyVal = new List (0); + } + break; +case 1022: + case_1022(); + break; +case 1023: + case_1023(); + break; +case 1024: + case_1024(); + break; +#line default + } + yyTop -= yyLen[yyN]; + yyState = yyStates[yyTop]; + int yyM = yyLhs[yyN]; + if (yyState == 0 && yyM == 0) { +//t if (debug != null) debug.shift(0, yyFinal); + yyState = yyFinal; + if (yyToken < 0) { + yyToken = yyLex.advance() ? yyLex.token() : 0; +//t if (debug != null) +//t debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value()); + } + if (yyToken == 0) { +//t if (debug != null) debug.accept(yyVal); + return yyVal; + } + goto continue_yyLoop; + } + if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0) + && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState)) + yyState = yyTable[yyN]; + else + yyState = yyDgoto[yyM]; +//t if (debug != null) debug.shift(yyStates[yyTop], yyState); + goto continue_yyLoop; + continue_yyDiscarded: ; // implements the named-loop continue: 'continue yyDiscarded' + } + continue_yyLoop: ; // implements the named-loop continue: 'continue yyLoop' + } + } + +/* + All more than 3 lines long rules are wrapped into a method +*/ +void case_6() +#line 446 "ps-parser.jay" +{ + if (yyVals[0+yyTop] != null) { + Attributes attrs = (Attributes) yyVals[0+yyTop]; + report.Error (1730, attrs.Attrs [0].Location, + "Assembly and module attributes must precede all other elements except using clauses and extern alias declarations"); + + current_namespace.UnattachedAttributes = attrs; + } + } + +void case_8() +#line 460 "ps-parser.jay" +{ + if (yyToken == Token.EXTERN) + report.Error (439, lexer.Location, "An extern alias declaration must precede all other elements"); + else + Error_SyntaxError (yyToken); + } + +void case_13() +#line 480 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + string s = lt.Value; + if (s != "alias") { + syntax_error (lt.Location, "`alias' expected"); + } else { + if (lang_version == LanguageVersion.ISO_1) + FeatureIsNotAvailable (lt.Location, "external alias"); + + lt = (LocatedToken) yyVals[-1+yyTop]; + if (lt.Value == QualifiedAliasMember.GlobalAlias) { + RootNamespace.Error_GlobalNamespaceRedefined (report, lt.Location); + } + + var na = new UsingExternAlias (new SimpleMemberName (lt.Value, lt.Location), GetLocation (yyVals[-3+yyTop])); + current_namespace.AddUsing (na); + + lbag.AddLocation (na, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + } + +void case_19() +#line 518 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + is_config_enabled = IsConfigVarDefined(lt.Value); + } + +void case_20() +#line 523 "ps-parser.jay" +{ + is_config_enabled = true; + yyVal = yyVals[0+yyTop]; + } + +void case_21() +#line 528 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + is_config_enabled = IsConfigVarDefined(lt.Value); + Lexer.EatBlock = !is_config_enabled; + } + +void case_22() +#line 534 "ps-parser.jay" +{ + is_config_enabled = true; + yyVal = yyVals[-1+yyTop]; + } + +void case_25() +#line 547 "ps-parser.jay" +{ + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + +void case_27() +#line 559 "ps-parser.jay" +{ + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + +void case_29() +#line 571 "ps-parser.jay" +{ + if (is_config_enabled) { + var un = new UsingNamespace ((ATypeNameExpression) yyVals[-3+yyTop], GetLocation (yyVals[-4+yyTop])); + current_namespace.AddUsing (un); + + lbag.AddLocation (un, GetLocation (yyVals[0+yyTop])); + + Lexer.AllowAutoSemiAfterToken(Token.DOT_STAR, false); + } + } + +void case_30() +#line 582 "ps-parser.jay" +{ + if (is_config_enabled) { + var ut = new UsingType ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + current_namespace.AddUsing (ut); + + lbag.AddLocation (ut, GetLocation (yyVals[0+yyTop])); + } + } + +void case_31() +#line 591 "ps-parser.jay" +{ + if (is_config_enabled) { + var lt = (LocatedToken) yyVals[-3+yyTop]; + if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { + report.Warning (440, 2, lt.Location, + "An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead"); + } + + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); + current_namespace.AddUsing (un); + + lbag.AddLocation (un, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + } + +void case_32() +#line 606 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = null; + } + +void case_34() +#line 623 "ps-parser.jay" +{ + Attributes attrs = (Attributes) yyVals[-3+yyTop]; + var name = yyVals[0+yyTop] as MemberName; + if (name == null) { + name = new MemberName(RootNs); + } + if (attrs != null) { + bool valid_global_attrs = true; + if ((current_namespace.DeclarationFound || current_namespace != file)) { + valid_global_attrs = false; + } else { + foreach (var a in attrs.Attrs) { + if (a.ExplicitTarget == "assembly" || a.ExplicitTarget == "module") + continue; + + valid_global_attrs = false; + break; + } + } + + if (!valid_global_attrs) + report.Error (1671, name.Location, "A namespace declaration cannot have modifiers or attributes"); + } + + module.AddAttributes (attrs, current_namespace); + + /* Close the private package namespace (if it's active)*/ + if (current_namespace == private_namespace) { + if (private_namespace.Containers.Count > 0) { + prev_namespace.AddTypeContainer(private_namespace); + var priv_un = new UsingNamespace ( + private_namespace.NS.MakeTypeNameExpression(GetLocation(yyVals[-3+yyTop])), GetLocation (yyVals[-3+yyTop])); + prev_namespace.AddUsing(priv_un, true); + } + current_container = current_namespace = prev_namespace.Parent; + prev_namespace = private_namespace = null; + } + + var ns = new NamespaceContainer (name, current_namespace); + current_namespace.AddTypeContainer (ns); + current_container = current_namespace = ns; + var un = new UsingNamespace (new SimpleName (RootNs, GetLocation (yyVals[-3+yyTop])), GetLocation (yyVals[-3+yyTop])); + current_namespace.AddUsing(un, true); + } + +void case_35() +#line 668 "ps-parser.jay" +{ + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + + Lexer.AutoSemiInsertion = true; + } + +void case_36() +#line 675 "ps-parser.jay" +{ + lbag.AddLocation (current_container, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); + + if (current_namespace.Parent != null && current_namespace.Parent.Parent == null) { /* Is this the top level package?*/ + var ns = new NamespaceContainer (new MemberName("__" + file.FileName.Replace(".","_").Replace("/","_").Replace("\\", "_").Replace("-", "_") ), current_namespace); + prev_namespace = current_namespace; + current_container = private_namespace = current_namespace = ns; + } else { + current_container = current_namespace = current_namespace.Parent; + } + + lexer.parsing_modifiers = false; + } + +void case_37() +#line 689 "ps-parser.jay" +{ + /* Close the private package namespace (if it's active)*/ + if (current_namespace == private_namespace) { + if (private_namespace.Containers.Count > 0) { + prev_namespace.AddTypeContainer(private_namespace); + var priv_un = new UsingNamespace ( + private_namespace.NS.MakeTypeNameExpression(GetLocation(yyVals[-10+yyTop])), GetLocation (yyVals[-10+yyTop])); + prev_namespace.AddUsing(priv_un, true); + } + current_container = current_namespace = prev_namespace.Parent; + prev_namespace = private_namespace = null; + } + +/* lbag.AddLocation (current_container, GetLocation ($2), GetLocation ($6), GetLocation ($11));*/ + } + +void case_40() +#line 713 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + yyVal = new MemberName (lt.Value, lt.Location); + } + +void case_41() +#line 718 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location); + } + +void case_42() +#line 723 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new MemberName ("", lexer.Location); + } + +void case_59() +#line 767 "ps-parser.jay" +{ + current_namespace.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; + report.Error (1518, lexer.Location, "Attributes must be attached to class, delegate, enum, interface or struct"); + lexer.putback ('}'); + is_config_enabled = true; + } + +void case_60() +#line 777 "ps-parser.jay" +{ + if (is_config_enabled) { + if (yyVals[0+yyTop] != null) { + TypeContainer ds = (TypeContainer)yyVals[0+yyTop]; + + if ((ds.ModFlags & (Modifiers.PRIVATE | Modifiers.PROTECTED)) != 0){ + report.Error (1527, ds.Location, + "Namespace elements cannot be explicitly declared as private, protected or protected internal"); + } + + /* Here is a trick, for explicit attributes we don't know where they belong to until*/ + /* we parse succeeding declaration hence we parse them as normal and re-attach them*/ + /* when we know whether they are global (assembly:, module:) or local (type:).*/ + if (ds.OptAttributes != null) { + ds.OptAttributes.ConvertGlobalAttributes (ds, current_namespace, !current_namespace.DeclarationFound && current_namespace == file); + } + } + current_namespace.DeclarationFound = true; + } + } + +void case_61() +#line 798 "ps-parser.jay" +{ + if (is_config_enabled) { + current_namespace.DeclarationFound = true; + } + } + +void case_63() +#line 808 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + is_config_enabled = IsConfigVarDefined(lt.Value); + } + +void case_64() +#line 813 "ps-parser.jay" +{ + is_config_enabled = true; + yyVal = yyVals[0+yyTop]; + } + +void case_65() +#line 818 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + is_config_enabled = IsConfigVarDefined(lt.Value); + Lexer.EatBlock = !is_config_enabled; + } + +void case_66() +#line 824 "ps-parser.jay" +{ + is_config_enabled = true; + yyVal = yyVals[-1+yyTop]; + } + +void case_75() +#line 859 "ps-parser.jay" +{ + var sect = (List) yyVals[0+yyTop]; + yyVal = new Attributes (sect); + } + +void case_76() +#line 864 "ps-parser.jay" +{ + Attributes attrs = yyVals[-1+yyTop] as Attributes; + var sect = (List) yyVals[0+yyTop]; + if (attrs == null) + attrs = new Attributes (sect); + else if (sect != null) + attrs.AddAttributes (sect); + yyVal = attrs; + } + +void case_77() +#line 877 "ps-parser.jay" +{ + PushLocation (GetLocation (yyVals[0+yyTop])); + lexer.parsing_attribute_section = true; + } + +void case_78() +#line 882 "ps-parser.jay" +{ + lexer.parsing_attribute_section = false; + yyVal = yyVals[0+yyTop]; + } + +void case_79() +#line 890 "ps-parser.jay" +{ + current_attr_target = (string) yyVals[-1+yyTop]; + if (current_attr_target == "assembly" || current_attr_target == "module") { + Lexer.check_incorrect_doc_comment (); + } + } + +void case_80() +#line 897 "ps-parser.jay" +{ + /* when attribute target is invalid*/ + if (current_attr_target == string.Empty) + yyVal = new List (0); + else + yyVal = yyVals[-2+yyTop]; + + lbag.InsertLocation (yyVal, 0, PopLocation ()); + if (yyVals[-1+yyTop] != null) { + lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } else { + lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[0+yyTop])); + } + + current_attr_target = null; + lexer.parsing_attribute_section = false; + lexer.AutoSemiInsertionAfter = 1; + } + +void case_81() +#line 916 "ps-parser.jay" +{ + lexer.AutoSemiInsertionAfter = 1; + yyVal = yyVals[-2+yyTop]; + + lbag.InsertLocation (yyVal, 0, PopLocation ()); + if (yyVals[-1+yyTop] != null) { + lbag.AddLocation (yyVal, GetLocation(yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } else { + lbag.AddLocation (yyVal, GetLocation(yyVals[0+yyTop])); + } + } + +void case_82() +#line 928 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) yyVals[-1+yyTop]; + var tne = new SimpleName (lt.Value, null, lt.Location); + + yyVal = new List () { + new Attribute (null, tne, null, GetLocation (yyVals[-1+yyTop]), false) + }; + } + +void case_83() +#line 939 "ps-parser.jay" +{ + /*CheckAttributeTarget (GetTokenName (yyToken), GetLocation ($1));*/ + CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation (yyVals[0+yyTop])); + yyVal = null; + } + +void case_84() +#line 948 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + /*$$ = CheckAttributeTarget (lt.Value, lt.Location);*/ + yyVal = CheckAttributeTarget (yyToken, lt.Value, lt.Location); + } + +void case_88() +#line 963 "ps-parser.jay" +{ + var attrs = (List) yyVals[-2+yyTop]; + if (attrs != null) { + attrs.Add ((Attribute) yyVals[0+yyTop]); + lbag.AppendTo (attrs, GetLocation (yyVals[-1+yyTop])); + } + + yyVal = attrs; + } + +void case_90() +#line 980 "ps-parser.jay" +{ + --lexer.parsing_block; + + var tne = (ATypeNameExpression) yyVals[-2+yyTop]; + if (tne.HasTypeArguments) { + report.Error (404, tne.Location, "Attributes cannot be generic"); + } + + yyVal = new Attribute (current_attr_target, tne, (Arguments[]) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), lexer.IsEscapedIdentifier (tne)); + } + +void case_93() +#line 999 "ps-parser.jay" +{ + lexer.AutoSemiInsertionAfter = 1; + yyVal = yyVals[-1+yyTop]; + } + +void case_95() +#line 1009 "ps-parser.jay" +{ + Arguments a = new Arguments (4); + a.Add ((Argument) yyVals[0+yyTop]); + yyVal = new Arguments [] { a, null }; + } + +void case_96() +#line 1015 "ps-parser.jay" +{ + Arguments a = new Arguments (4); + a.Add ((Argument) yyVals[0+yyTop]); + yyVal = new Arguments [] { null, a }; + } + +void case_97() +#line 1021 "ps-parser.jay" +{ + Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; + if (o [1] != null) { + report.Error (1016, ((Argument) yyVals[0+yyTop]).Expr.Location, "Named attribute arguments must appear after the positional arguments"); + o [0] = new Arguments (4); + } + + Arguments args = ((Arguments) o [0]); + if (args.Count > 0 && !(yyVals[0+yyTop] is NamedArgument) && args [args.Count - 1] is NamedArgument) + Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); + + args.Add ((Argument) yyVals[0+yyTop]); + } + +void case_98() +#line 1035 "ps-parser.jay" +{ + Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; + if (o [1] == null) { + o [1] = new Arguments (4); + } + + ((Arguments) o [1]).Add ((Argument) yyVals[0+yyTop]); + } + +void case_100() +#line 1051 "ps-parser.jay" +{ + --lexer.parsing_block; + var lt = (LocatedToken) yyVals[-3+yyTop]; + yyVal = new NamedArgument (lt.Value, lt.Location, (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); + } + +void case_102() +#line 1065 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = null; + } + +void case_105() +#line 1078 "ps-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + +void case_106() +#line 1083 "ps-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + +void case_121() +#line 1106 "ps-parser.jay" +{ + report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", + GetSymbolName (yyToken)); + yyVal = null; + lexer.parsing_generic_declaration = false; + } + +void case_122() +#line 1118 "ps-parser.jay" +{ + if (yyVals[-2+yyTop] != null || (Modifiers) yyVals[-1+yyTop] != 0) { + report.Error (7058, GetLocation(yyVals[-2+yyTop] ?? yyVals[-1+yyTop]), "Modifiers and attributes not allowed"); + } + } + +void case_123() +#line 1129 "ps-parser.jay" +{ + if (yyVals[-2+yyTop] != null || (Modifiers) yyVals[-1+yyTop] != 0) { + report.Error (7058, GetLocation(yyVals[-2+yyTop] ?? yyVals[-1+yyTop]), "Modifiers and attributes not allowed"); + } + } + +void case_124() +#line 1138 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + is_config_enabled = IsConfigVarDefined(lt.Value); + } + +void case_125() +#line 1143 "ps-parser.jay" +{ + is_config_enabled = true; + yyVal = yyVals[0+yyTop]; + } + +void case_126() +#line 1152 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + is_config_enabled = IsConfigVarDefined(lt.Value); + Lexer.EatBlock = !is_config_enabled; + } + +void case_127() +#line 1158 "ps-parser.jay" +{ + is_config_enabled = true; + yyVal = yyVals[-1+yyTop]; + } + +void case_128() +#line 1169 "ps-parser.jay" +{ + lexer.ConstraintsParsing = true; + lexer.AutoSemiInsertion = false; + } + +void case_129() +#line 1174 "ps-parser.jay" +{ + bool is_partial = IsPartial(yyVals[-5+yyTop]) || yyVals[-3+yyTop] != null; + push_current_container (new Struct (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), is_partial); + } + +void case_130() +#line 1181 "ps-parser.jay" +{ + lexer.ConstraintsParsing = false; + + if (yyVals[0+yyTop] != null) + current_container.SetConstraints ((List) yyVals[0+yyTop]); + + if (doc_support) + current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-6+yyTop])); + + lexer.parsing_modifiers = true; + lexer.AutoSemiInsertion = true; + } + +void case_131() +#line 1196 "ps-parser.jay" +{ + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + lexer.DynamicParsing = false; + Lexer.EatBlock = !is_config_enabled; + } + +void case_132() +#line 1203 "ps-parser.jay" +{ + lexer.DynamicParsing = true; + --lexer.parsing_declaration; + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + +void case_133() +#line 1210 "ps-parser.jay" +{ + is_config_enabled = true; + lbag.AppendToMember (current_container, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = pop_current_class (); + } + +void case_137() +#line 1236 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + if (yyVals[0+yyTop] == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + yyVals[0+yyTop] = new UntypedTypeExpression (GetLocation (yyVals[-1+yyTop])); + } + var mod = (Modifiers) yyVals[-3+yyTop]; + mod &= ~Modifiers.STATIC; + current_field = new Const (current_type, (FullNamedExpression) yyVals[0+yyTop], mod, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]); + if (is_config_enabled) { + current_type.AddMember (current_field); + } + is_config_enabled = true; + + yyVal = current_field; + } + +void case_138() +#line 1256 "ps-parser.jay" +{ + if (doc_support) { + current_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + current_field.Initializer = (ConstInitializer) yyVals[-2+yyTop]; + lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); + current_field = null; + } + +void case_143() +#line 1286 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + if (yyVals[-1+yyTop] == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + yyVals[-1+yyTop] = new UntypedTypeExpression (GetLocation (yyVals[-2+yyTop])); + } + yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop], (FullNamedExpression) yyVals[-1+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop])); + } + +void case_147() +#line 1314 "ps-parser.jay" +{ + --lexer.parsing_block; + yyVal = new ConstInitializer (current_field, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + } + +void case_148() +#line 1319 "ps-parser.jay" +{ + report.Error (145, lexer.Location, "A const field requires a value to be provided"); + yyVal = null; + } + +void case_150() +#line 1333 "ps-parser.jay" +{ + lexer.parsing_generic_declaration = false; + + var lt = (LocatedToken) yyVals[-1+yyTop]; + if (yyVals[0+yyTop] == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + yyVals[0+yyTop] = new UntypedTypeExpression (GetLocation (yyVals[-1+yyTop])); + } + + FullNamedExpression type = (FullNamedExpression) yyVals[0+yyTop]; + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (670, GetLocation (yyVals[0+yyTop]), "Fields cannot have void type"); + + current_field = new Field (current_type, type, (Modifiers) yyVals[-3+yyTop], new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]); + if (is_config_enabled) { + current_type.AddField (current_field); + } + is_config_enabled = true; + yyVal = current_field; + } + +void case_151() +#line 1359 "ps-parser.jay" +{ + if (doc_support) { + current_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[0+yyTop])); + yyVal = current_field; + current_field = null; + } + +void case_152() +#line 1372 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "fixed size buffers"); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + current_field = new FixedField (current_type, (FullNamedExpression) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], + new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-5+yyTop]); + + if (is_config_enabled) { + current_type.AddField (current_field); + } + is_config_enabled = true; + } + +void case_153() +#line 1386 "ps-parser.jay" +{ + if (doc_support) { + current_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + current_field.Initializer = (ConstInitializer) yyVals[-2+yyTop]; + lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[0+yyTop])); + yyVal = current_field; + current_field = null; + } + +void case_156() +#line 1409 "ps-parser.jay" +{ + ++lexer.parsing_block; + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + start_block (GetLocation (yyVals[0+yyTop])); + } + +void case_157() +#line 1415 "ps-parser.jay" +{ + --lexer.parsing_block; + current_field.Initializer = (Expression) yyVals[0+yyTop]; + end_block (lexer.Location); + current_local_parameters = null; + } + +void case_162() +#line 1441 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + if (yyVals[0+yyTop] == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + yyVals[0+yyTop] = new UntypedTypeExpression (GetLocation (yyVals[-1+yyTop])); + } + yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null, (FullNamedExpression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_164() +#line 1458 "ps-parser.jay" +{ + --lexer.parsing_block; + var lt = (LocatedToken) yyVals[-4+yyTop]; + if (yyVals[-3+yyTop] == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + yyVals[-3+yyTop] = new UntypedTypeExpression (GetLocation (yyVals[-4+yyTop])); + } + yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], (FullNamedExpression) yyVals[-3+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); + } + +void case_169() +#line 1491 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-3+yyTop]; + yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[-2+yyTop], (FullNamedExpression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop])); + } + +void case_171() +#line 1504 "ps-parser.jay" +{ + --lexer.parsing_block; + yyVal = new ConstInitializer (current_field, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_172() +#line 1510 "ps-parser.jay" +{ + report.Error (443, lexer.Location, "Value or constant expected"); + yyVal = null; + } + +void case_174() +#line 1519 "ps-parser.jay" +{ + /* It has to be here for the parent to safely restore artificial block*/ + Error_SyntaxError (yyToken); + yyVal = null; + } + +void case_175() +#line 1528 "ps-parser.jay" +{ + if (doc_support) + Lexer.doc_state = XmlCommentState.NotAllowed; + + /* Add it early in the case of body being eof for full ast*/ + Method m = yyVals[0+yyTop] as Method; + if (m != null) { + async_block = (m.ModFlags & Modifiers.ASYNC) != 0; + if (is_config_enabled) { + current_type.AddMember (m); + } + } + + Constructor c = yyVals[0+yyTop] as Constructor; + if (c != null) { + if (is_config_enabled) { + current_type.AddConstructor (c); + } + current_constructor = c; + } + + if (is_package_function) + lexer.DynamicParsing = false; + + } + +void case_176() +#line 1554 "ps-parser.jay" +{ + if (is_package_function) + lexer.DynamicParsing = true; + + async_block = false; + + if (yyVals[-2+yyTop] is Method) { + + Method method = yyVals[-2+yyTop] as Method; + + if (yyVals[0+yyTop] == null) { + method.ParameterInfo.CheckParameters (method); + + if ((method.ModFlags & Modifiers.ASYNC) != 0) { + report.Error (1994, method.Location, "`{0}': The async modifier can only be used with methods that have a body", + method.GetSignatureForError ()); + } + } else { + method.Block = (ToplevelBlock) yyVals[0+yyTop]; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, method.Location, "`{0}': interface members cannot have a definition", + method.GetSignatureForError ()); + } + } + + } else if (yyVals[-2+yyTop] is Constructor) { + + Constructor c = yyVals[-2+yyTop] as Constructor; + + if (yyVals[0+yyTop] != null) { + c.Block = (ToplevelBlock) yyVals[0+yyTop]; + } + + if (doc_support) + c.DocComment = ConsumeStoredComment (); + + } else { + + Property.PropertyMethod propMethod = yyVals[-2+yyTop] as Property.PropertyMethod; + + if (yyVals[0+yyTop] != null) { + propMethod.Block = (ToplevelBlock) yyVals[0+yyTop]; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, propMethod.Block.StartLocation, + "`{0}': interface members cannot have a definition", propMethod.GetSignatureForError ()); + } + } + + } + + current_local_parameters = null; + current_property = null; + current_constructor = null; + + /* If this was a package function, pop the container xxxxx_fn class.*/ + if (is_package_function) { + pop_current_class(); + is_package_function = false; + } + + is_config_enabled = true; + + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + +void case_177() +#line 1628 "ps-parser.jay" +{ + valid_param_mod = ParameterModifierType.All; + + /* If package level function, create a new package function class with */ + /* the name of the function plus "_fn".*/ + if (current_container is NamespaceContainer) { + MemberName methodName = (MemberName) yyVals[-1+yyTop]; + MemberName className = new MemberName(methodName.Name + "_fn", GetLocation(yyVals[-1+yyTop])); + var fnClassModifiers = (Modifiers) yyVals[-3+yyTop] | Modifiers.PARTIAL | Modifiers.STATIC; /* Allows overloads..*/ + push_current_container(new Class (current_container, className, fnClassModifiers, (Attributes) yyVals[-4+yyTop]), GetLocation(yyVals[-2+yyTop])); + is_package_function = true; + } + + } + +void case_179() +#line 1647 "ps-parser.jay" +{ + lexer.ConstraintsParsing = false; + valid_param_mod = 0; + MemberName name = (MemberName) yyVals[-7+yyTop]; + current_local_parameters = (ParametersCompiled) yyVals[-4+yyTop]; + + var modifiers = (Modifiers) yyVals[-9+yyTop]; + if (is_package_function) { + modifiers |= Modifiers.STATIC; + } + + if (current_type != null && name.Name == current_type.MemberName.Name) { + + var c = new Constructor (current_type, name.Name, modifiers, (Attributes) yyVals[-10+yyTop], current_local_parameters, name.Location); + + if (yyVals[0+yyTop] != null) { + report.Error (7011, c.Location, + "`{0}': constructor can not have type constraints.", + c.GetSignatureForError ()); + } + + if ((modifiers & Modifiers.STATIC) != 0) { + if ((modifiers & Modifiers.AccessibilityMask) != 0){ + report.Error (515, c.Location, + "`{0}': static constructor cannot have an access modifier", + c.GetSignatureForError ()); + } + } + + if (doc_support) + c.DocComment = Lexer.consume_doc_comment (); + + lbag.AddMember (c, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop])); + yyVal = c; + + } else { + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + var ret_type = yyVals[-2+yyTop] as FullNamedExpression; + if (ret_type == null) { + if (settings.PsStrictMode) + report.Error (7012, GetLocation(yyVals[-3+yyTop]), "Method `{0}' must specify a return type.", name.Name); + else + report.Warning (1009, 1, GetLocation(yyVals[-3+yyTop]), "Method `{0}' return type has no type declaration.", name.Name); + } + + var method = AsMethod.Create (current_type, (FullNamedExpression) yyVals[-2+yyTop], modifiers, + name, current_local_parameters, (Attributes) yyVals[-10+yyTop]); + + if (yyVals[0+yyTop] != null) + method.SetConstraints ((List) yyVals[0+yyTop]); + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + lbag.AddMember (method, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop])); + yyVal = method; + + } + } + +void case_181() +#line 1716 "ps-parser.jay" +{ + var type = (FullNamedExpression) yyVals[0+yyTop]; + var name = (MemberName) yyVals[-5+yyTop]; + var modifiers = (Modifiers) yyVals[-7+yyTop]; + var parameters = (ParametersCompiled) yyVals[-2+yyTop]; + + if (type == null) { + if (settings.PsStrictMode) + report.Error (7012, name.Location, "Property getter `{0}' must specify a return type.", name.Name); + else + report.Warning (1009, 1, name.Location, "Property getter `{0}' return type has no type declaration.", name.Name); + type = new UntypedTypeExpression (name.Location); + } + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + if (parameters != null && parameters.Count > 0) + report.Error (7016, GetLocation (yyVals[0+yyTop]), "Property getter functions may not have parameters"); + + current_property = current_type.LookupNameInContainer (name.Name, modifiers) as Property; + + if (current_property == null) { + current_property = new Property (current_type, type, modifiers, name, (Attributes) yyVals[-8+yyTop]); + if (is_config_enabled) { + current_type.AddMember (current_property); + } + modifiers = (Modifiers) 0; + } else { + if (current_property.Set != null && ModifiersExtensions.IsRestrictedModifier (current_property.ModFlags & Modifiers.AccessibilityMask, modifiers & Modifiers.AccessibilityMask)) { + current_property.Set.ModFlags |= current_property.ModFlags & Modifiers.AccessibilityMask; + current_property.ModFlags = (current_property.ModFlags & ~Modifiers.AccessibilityMask) | (modifiers & Modifiers.AccessibilityMask); + modifiers = (Modifiers) 0; + } else if ((modifiers & Modifiers.AccessibilityMask) == (current_property.ModFlags & Modifiers.AccessibilityMask)) { + modifiers = (Modifiers) 0; + } + } + + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (547, GetLocation (yyVals[0+yyTop]), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); + + if (current_property.Get != null) { + report.Error (1007, GetLocation (yyVals[-6+yyTop]), "Property getter already defined"); + } + + current_property.Get = new Property.GetMethod (current_property, + modifiers & Modifiers.AccessibilityMask, (Attributes) yyVals[-8+yyTop], GetLocation (yyVals[-6+yyTop])); + + is_config_enabled = true; + + lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[0+yyTop])); + current_local_parameters = current_property.Get.ParameterInfo; + yyVal = current_property.Get; + } + +void case_183() +#line 1778 "ps-parser.jay" +{ + var void_type = (FullNamedExpression) yyVals[0+yyTop]; + var name = (MemberName) yyVals[-5+yyTop]; + var modifiers = (Modifiers) yyVals[-7+yyTop]; + var parameters = (ParametersCompiled) yyVals[-2+yyTop]; + + if (void_type == null) { + if (settings.PsStrictMode) + report.Error (7012, name.Location, "Property setter `{0}' must specify a return type.", name.Name); + else + report.Warning (1009, 1, name.Location, "Property setter `{0}' return type has no type declaration.", name.Name); + void_type = new TypeExpression (compiler.BuiltinTypes.Void, name.Location); + } + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + if (void_type.Type != null && void_type.Type.Kind != MemberKind.Void) + report.Error (7003, GetLocation (yyVals[0+yyTop]), "Property setter function must be of type void"); + + current_property = current_type.LookupNameInContainer (name.Name, modifiers) as Property; + + FullNamedExpression type; + + if (parameters == null || parameters.Count != 1 || parameters.FixedParameters.Length != parameters.Count) { + report.Error (7001, GetLocation (yyVals[-2+yyTop]), "Property setter must have a single parameter"); + type = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[-2+yyTop])); + } else { + type = ((Parameter)parameters.FixedParameters[0]).TypeExpression; + } + + if (current_property == null) { + current_property = new Property (current_type, type, modifiers, name, (Attributes) yyVals[-8+yyTop]); + if (is_config_enabled) { + current_type.AddMember (current_property); + } + modifiers = (Modifiers) 0; + } else { + if (current_property.Get != null && ModifiersExtensions.IsRestrictedModifier (current_property.ModFlags & Modifiers.AccessibilityMask, modifiers & Modifiers.AccessibilityMask)) { + current_property.Get.ModFlags |= current_property.ModFlags & Modifiers.AccessibilityMask; + current_property.ModFlags = (current_property.ModFlags & ~Modifiers.AccessibilityMask) | (modifiers & Modifiers.AccessibilityMask); + modifiers = (Modifiers) 0; + } else if ((modifiers & Modifiers.AccessibilityMask) == (current_property.ModFlags & Modifiers.AccessibilityMask)) { + modifiers = (Modifiers) 0; + } + } + + if (current_property.Set != null) { + report.Error (1007, GetLocation (yyVals[-6+yyTop]), "Property setter already defined"); + } + + current_property.Set = new Property.SetMethod (current_property, + modifiers & Modifiers.AccessibilityMask, (ParametersCompiled) yyVals[-2+yyTop], (Attributes) yyVals[-8+yyTop], GetLocation (yyVals[-6+yyTop])); + + is_config_enabled = true; + + lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[0+yyTop])); + current_local_parameters = parameters; + yyVal = current_property.Set; + } + +void case_185() +#line 1848 "ps-parser.jay" +{ + lexer.parsing_generic_declaration = false; + valid_param_mod = ParameterModifierType.All; + } + +void case_187() +#line 1857 "ps-parser.jay" +{ + lexer.ConstraintsParsing = false; + valid_param_mod = 0; + + MemberName name = (MemberName) yyVals[-8+yyTop]; + current_local_parameters = (ParametersCompiled) yyVals[-5+yyTop]; + + var modifiers = (Modifiers) yyVals[-12+yyTop]; + modifiers |= Modifiers.PARTIAL; + + if (name.ExplicitInterface == null && (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + var method = AsMethod.Create (current_type, new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-2+yyTop])), + modifiers, name, current_local_parameters, (Attributes) yyVals[-13+yyTop]); + + if (yyVals[0+yyTop] != null) + method.SetConstraints ((List) yyVals[0+yyTop]); + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[-11+yyTop])); + lbag.AddMember (method, mod_locations, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-4+yyTop])); + yyVal = method; + } + +void case_188() +#line 1887 "ps-parser.jay" +{ + MemberName name = (MemberName) yyVals[-5+yyTop]; + report.Error (1585, name.Location, + "Member modifier `{0}' must precede the member type and name", ModifiersExtensions.Name ((Modifiers) yyVals[-6+yyTop])); + + var method = AsMethod.Create (current_type, (FullNamedExpression) yyVals[-9+yyTop], + 0, name, (ParametersCompiled) yyVals[-3+yyTop], (Attributes) yyVals[-9+yyTop]); + + current_local_parameters = (ParametersCompiled) yyVals[-3+yyTop]; + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + yyVal = method; + } + +void case_189() +#line 1906 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + current_local_parameters = ParametersCompiled.Undefined; + + MemberName name = (MemberName) yyVals[-1+yyTop]; + var method = AsMethod.Create (current_type, new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (Modifiers) yyVals[-3+yyTop], + name, current_local_parameters, (Attributes) yyVals[-4+yyTop]); + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + yyVal = method; + } + +void case_192() +#line 1931 "ps-parser.jay" +{ + if (current_container.Kind == MemberKind.Interface) + Lexer.AutoSemiInsertion = true; + } + +void case_194() +#line 1940 "ps-parser.jay" +{ + /* method body.*/ + yyVal = null; + } + +void case_197() +#line 1953 "ps-parser.jay" +{ + var pars_list = (List) yyVals[0+yyTop]; + yyVal = new ParametersCompiled (pars_list.ToArray ()); + } + +void case_198() +#line 1958 "ps-parser.jay" +{ + var pars_list = (List) yyVals[-2+yyTop]; + pars_list.Add ((Parameter) yyVals[0+yyTop]); + + yyVal = new ParametersCompiled (pars_list.ToArray ()); + } + +void case_199() +#line 1971 "ps-parser.jay" +{ + if (yyVals[-2+yyTop] != null) + report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); + + yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[-2+yyTop] } ); + } + +void case_200() +#line 1978 "ps-parser.jay" +{ + if (yyVals[-2+yyTop] != null) + report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); + + var pars_list = (List) yyVals[-4+yyTop]; + pars_list.Add (new ArglistParameter (GetLocation (yyVals[-2+yyTop]))); + + yyVal = new ParametersCompiled (pars_list.ToArray (), true); + } + +void case_202() +#line 2011 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = ParametersCompiled.EmptyReadOnlyParameters; + } + +void case_203() +#line 2019 "ps-parser.jay" +{ + parameters_bucket.Clear (); + Parameter p = (Parameter) yyVals[0+yyTop]; + parameters_bucket.Add (p); + + default_parameter_used = p.HasDefaultValue; + yyVal = parameters_bucket; + } + +void case_204() +#line 2028 "ps-parser.jay" +{ + var pars = (List) yyVals[-2+yyTop]; + Parameter p = (Parameter) yyVals[0+yyTop]; + if (p != null) { + if (p.HasExtensionMethodModifier) + report.Error (1100, p.Location, "The parameter modifier `this' can only be used on the first parameter"); + else if (!p.HasDefaultValue && default_parameter_used) + report.Error (1737, p.Location, "Optional parameter cannot precede required parameters"); + + default_parameter_used |= p.HasDefaultValue; + pars.Add (p); + + lbag.AddLocation (p, GetLocation (yyVals[-1+yyTop])); + } + + yyVal = yyVals[-2+yyTop]; + } + +void case_205() +#line 2052 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + if (yyVals[0+yyTop] == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + yyVals[0+yyTop] = new UntypedTypeExpression (lt.Location); + } + yyVal = new Parameter ((FullNamedExpression) yyVals[0+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], lt.Location); + } + +void case_206() +#line 2064 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + Location l = GetLocation (yyVals[0+yyTop]); + yyVal = new Parameter (null, null, Parameter.Modifier.NONE, (Attributes) yyVals[-1+yyTop], l); + } + +void case_207() +#line 2074 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + Location l = GetLocation (yyVals[0+yyTop]); + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new Parameter (new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])), lt.Value, (Parameter.Modifier) yyVals[-3+yyTop], (Attributes) yyVals[-4+yyTop], l); + } + +void case_209() +#line 2089 "ps-parser.jay" +{ + --lexer.parsing_block; + if (lang_version <= LanguageVersion.V_3) { + FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "optional parameter"); + } + + Parameter.Modifier mod = (Parameter.Modifier) yyVals[-5+yyTop]; + if (mod != Parameter.Modifier.NONE) { + switch (mod) { + case Parameter.Modifier.REF: + case Parameter.Modifier.OUT: + report.Error (1741, GetLocation (yyVals[-5+yyTop]), "Cannot specify a default value for the `{0}' parameter", + Parameter.GetModifierSignature (mod)); + break; + + case Parameter.Modifier.This: + report.Error (1743, GetLocation (yyVals[-5+yyTop]), "Cannot specify a default value for the `{0}' parameter", + Parameter.GetModifierSignature (mod)); + break; + default: + throw new NotImplementedException (mod.ToString ()); + } + + mod = Parameter.Modifier.NONE; + } + + if ((valid_param_mod & ParameterModifierType.DefaultValue) == 0) + report.Error (1065, GetLocation (yyVals[-2+yyTop]), "Optional parameter is not valid in this context"); + + var lt = (LocatedToken) yyVals[-4+yyTop]; + if (yyVals[-3+yyTop] == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + yyVals[-3+yyTop] = new UntypedTypeExpression (lt.Location); + } + yyVal = new Parameter ((FullNamedExpression) yyVals[-3+yyTop], lt.Value, mod, (Attributes) yyVals[-6+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + + if (yyVals[0+yyTop] != null) + ((Parameter) yyVal).DefaultValue = new DefaultParameterValueExpression ((Expression) yyVals[0+yyTop]); + } + +void case_213() +#line 2145 "ps-parser.jay" +{ + Parameter.Modifier p2 = (Parameter.Modifier)yyVals[0+yyTop]; + Parameter.Modifier mod = (Parameter.Modifier)yyVals[-1+yyTop] | p2; + if (((Parameter.Modifier)yyVals[-1+yyTop] & p2) == p2) { + Error_DuplicateParameterModifier (lexer.Location, p2); + } else { + switch (mod & ~Parameter.Modifier.This) { + case Parameter.Modifier.REF: + report.Error (1101, lexer.Location, "The parameter modifiers `this' and `ref' cannot be used altogether"); + break; + case Parameter.Modifier.OUT: + report.Error (1102, lexer.Location, "The parameter modifiers `this' and `out' cannot be used altogether"); + break; + default: + report.Error (1108, lexer.Location, "A parameter cannot have specified more than one modifier"); + break; + } + } + yyVal = mod; + } + +void case_214() +#line 2169 "ps-parser.jay" +{ + if ((valid_param_mod & ParameterModifierType.Ref) == 0) + Error_ParameterModifierNotValid ("ref", GetLocation (yyVals[0+yyTop])); + + yyVal = Parameter.Modifier.REF; + } + +void case_215() +#line 2176 "ps-parser.jay" +{ + if ((valid_param_mod & ParameterModifierType.Out) == 0) + Error_ParameterModifierNotValid ("out", GetLocation (yyVals[0+yyTop])); + + yyVal = Parameter.Modifier.OUT; + } + +void case_216() +#line 2183 "ps-parser.jay" +{ + if ((valid_param_mod & ParameterModifierType.This) == 0) + Error_ParameterModifierNotValid ("this", GetLocation (yyVals[0+yyTop])); + + if (lang_version <= LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "extension methods"); + + yyVal = Parameter.Modifier.This; + } + +void case_217() +#line 2196 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + var type = new ComposedCast ( + new TypeExpression(compiler.BuiltinTypes.Object, GetLocation(yyVals[-1+yyTop])), + ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop]))); + /* NOTE: We add two underscores here to allow us to define the Array version later in ActionScript (not in PlayScript)*/ + yyVal = new ParamsParameter (type, "__" + lt.Value, (Attributes) yyVals[-3+yyTop], lt.Location); + } + +void case_218() +#line 2205 "ps-parser.jay" +{ + report.Error (1751, GetLocation (yyVals[-3+yyTop]), "Cannot specify a default value for a variable argument array"); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + var type = new ComposedCast ( + new TypeExpression(compiler.BuiltinTypes.Object, GetLocation(yyVals[-2+yyTop])), + ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-2+yyTop]))); + /* NOTE: We add two underscores here to allow us to define the Array version later in ActionScript (not in PlayScript)*/ + yyVal = new ParamsParameter (type, "__" + lt.Value, (Attributes) yyVals[-4+yyTop], lt.Location); + } + +void case_219() +#line 2216 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = null; + } + +void case_221() +#line 2225 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + if (lt.Value != "Array") + report.Error (7353, GetLocation (yyVals[0+yyTop]), "Argument type for variable argument must be Array"); + } + +void case_222() +#line 2244 "ps-parser.jay" +{ + if (doc_support) + tmpComment = Lexer.consume_doc_comment (); + } + +void case_223() +#line 2249 "ps-parser.jay" +{ + var type = (FullNamedExpression) yyVals[-2+yyTop]; + + var modifiers = (Modifiers) yyVals[-6+yyTop]; + + var name = (MemberName) yyVals[-4+yyTop]; + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + current_property = new Property (current_type, type, modifiers, + name, (Attributes) yyVals[-7+yyTop]); + + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (547, GetLocation (yyVals[-5+yyTop]), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); + + if (is_config_enabled) { + current_type.AddMember (current_property); + } + + lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[0+yyTop])); + + lexer.PropertyParsing = true; + } + +void case_224() +#line 2275 "ps-parser.jay" +{ + lexer.PropertyParsing = false; + + if (doc_support) + current_property.DocComment = ConsumeStoredComment (); + } + +void case_225() +#line 2282 "ps-parser.jay" +{ + CheckIsPlayScript("property", GetLocation(yyVals[-9+yyTop])); + + is_config_enabled = true; + + lbag.AppendToMember (current_property, GetLocation (yyVals[0+yyTop])); + current_property = null; + } + +void case_227() +#line 2299 "ps-parser.jay" +{ + valid_param_mod = 0; + var type = (FullNamedExpression) yyVals[-1+yyTop]; + + var modifiers = (Modifiers) yyVals[-9+yyTop]; + + var name = (MemberName) yyVals[-7+yyTop]; + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + Indexer indexer = new Indexer (current_type, type, name, modifiers, (ParametersCompiled) yyVals[-4+yyTop], (Attributes) yyVals[-10+yyTop]); + + current_property = indexer; + + if (is_config_enabled) { + current_type.AddIndexer (indexer); + } + lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop])); + + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (620, GetLocation (yyVals[-8+yyTop]), "`{0}': indexer return type cannot be `void'", indexer.GetSignatureForError ()); + + if (indexer.ParameterInfo.IsEmpty) { + report.Error (1551, GetLocation (yyVals[-6+yyTop]), "Indexers must have at least one parameter"); + } + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lexer.PropertyParsing = true; + Lexer.EatBlock = !is_config_enabled; + } + +void case_229() +#line 2340 "ps-parser.jay" +{ + CheckIsPlayScript("indexer", GetLocation(yyVals[-12+yyTop])); + + if (current_property.AccessorFirst != null && current_property.AccessorFirst.Block == null) + ((Indexer) current_property).ParameterInfo.CheckParameters (current_property); + + if (doc_support) + current_property.DocComment = ConsumeStoredComment (); + + is_config_enabled = true; + + lbag.AppendToMember (current_property, GetLocation (yyVals[-3+yyTop])); + current_property = null; + } + +void case_234() +#line 2363 "ps-parser.jay" +{ + if (yyToken == Token.CLOSE_BRACE) { + report.Error (548, lexer.Location, "`{0}': property or indexer must have at least one accessor", current_property.GetSignatureForError ()); + } else { + if (yyToken == Token.SEMICOLON) + report.Error (1597, lexer.Location, "Semicolon after method or accessor block is not valid"); + else + report.Error (1014, GetLocation (yyVals[0+yyTop]), "A get or set accessor expected"); + } + } + +void case_235() +#line 2377 "ps-parser.jay" +{ + if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { + FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); + } + + if (current_property.Get != null) { + report.Error (1007, GetLocation (yyVals[0+yyTop]), "Property getter already defined"); + } + + if (current_property is Indexer) { + current_property.Get = new Indexer.GetIndexerMethod (current_property, (Modifiers) yyVals[-1+yyTop], ((Indexer)current_property).ParameterInfo.Clone (), + (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); + } else { + current_property.Get = new Property.GetMethod (current_property, + (Modifiers) yyVals[-1+yyTop], (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); + } + + current_local_parameters = current_property.Get.ParameterInfo; + lbag.AddMember (current_property.Get, mod_locations); + lexer.PropertyParsing = false; + } + +void case_236() +#line 2399 "ps-parser.jay" +{ + if (yyVals[0+yyTop] != null) { + current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_property.Get.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_property.Get.GetSignatureForError ()); + } + } + + current_local_parameters = null; + lexer.PropertyParsing = true; + + if (doc_support) + if (Lexer.doc_state == XmlCommentState.Error) + Lexer.doc_state = XmlCommentState.NotAllowed; + } + +void case_237() +#line 2420 "ps-parser.jay" +{ + if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { + FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); + } + + if (current_property.Set != null) { + report.Error (1007, GetLocation (yyVals[0+yyTop]), "Property getter already defined"); + } + + if (current_property is Indexer) { + current_property.Set = new Indexer.SetIndexerMethod (current_property, (Modifiers) yyVals[-1+yyTop], + ParametersCompiled.MergeGenerated (compiler, + ((Indexer)current_property).ParameterInfo, true, new Parameter ( + current_property.TypeExpression, "value", Parameter.Modifier.NONE, null, GetLocation (yyVals[0+yyTop])), + null), + (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); + } else { + current_property.Set = new Property.SetMethod (current_property, (Modifiers) yyVals[-1+yyTop], + ParametersCompiled.CreateImplicitParameter (current_property.TypeExpression, GetLocation (yyVals[0+yyTop])), + (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); + } + + current_local_parameters = current_property.Set.ParameterInfo; + lbag.AddMember (current_property.Set, mod_locations); + lexer.PropertyParsing = false; + } + +void case_238() +#line 2447 "ps-parser.jay" +{ + if (yyVals[0+yyTop] != null) { + current_property.Set.Block = (ToplevelBlock) yyVals[0+yyTop]; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_property.Set.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_property.Set.GetSignatureForError ()); + } + } + + current_local_parameters = null; + lexer.PropertyParsing = true; + + if (doc_support + && Lexer.doc_state == XmlCommentState.Error) + Lexer.doc_state = XmlCommentState.NotAllowed; + } + +void case_240() +#line 2469 "ps-parser.jay" +{ + /* TODO: lbag*/ + yyVal = null; + } + +void case_241() +#line 2474 "ps-parser.jay" +{ + Error_SyntaxError (1043, yyToken, "Invalid accessor body"); + yyVal = null; + } + +void case_242() +#line 2485 "ps-parser.jay" +{ + lexer.ConstraintsParsing = true; + Lexer.AutoSemiInsertion = false; + } + +void case_243() +#line 2490 "ps-parser.jay" +{ + bool is_partial = IsPartial(yyVals[-5+yyTop]) || yyVals[-3+yyTop] != null; + push_current_container (new Interface (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), is_partial); + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-2+yyTop])); + } + +void case_244() +#line 2498 "ps-parser.jay" +{ + lexer.ConstraintsParsing = false; + + if (yyVals[0+yyTop] != null) + current_container.SetConstraints ((List) yyVals[0+yyTop]); + + if (doc_support) { + current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lexer.parsing_modifiers = true; + } + +void case_245() +#line 2512 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + Lexer.EatBlock = !is_config_enabled; + } + +void case_246() +#line 2517 "ps-parser.jay" +{ + --lexer.parsing_declaration; + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + +void case_247() +#line 2523 "ps-parser.jay" +{ + is_config_enabled = true; + lbag.AppendToMember (current_container, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); + yyVal = pop_current_class (); + } + +void case_251() +#line 2541 "ps-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + +void case_252() +#line 2546 "ps-parser.jay" +{ + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + +void case_262() +#line 2584 "ps-parser.jay" +{ + OperatorDeclaration decl = (OperatorDeclaration) yyVals[-2+yyTop]; + if (decl != null) { + var modifiers = (Modifiers) yyVals[-3+yyTop]; + +/* if (current_container.Kind == MemberKind.Class && */ +/* (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0)*/ +/* modifiers |= Modifiers.VIRTUAL; */ + + if (current_local_parameters.Count < 1) { + + report.Error (7037, GetLocation (yyVals[-4+yyTop]), "Invalid number of parameters for operator."); + + } else { + + Operator op = new Operator ( + current_type, decl.optype, decl.ret_type, modifiers, + current_local_parameters, + (ToplevelBlock) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop], decl.location); + + if (op.Block == null) + op.ParameterInfo.CheckParameters (op); + + if (doc_support) { + op.DocComment = tmpComment; + Lexer.doc_state = XmlCommentState.Allowed; + } + + /* Note again, checking is done in semantic analysis*/ + if (is_config_enabled) { + current_type.AddOperator (op); + } + is_config_enabled = true; + + lbag.AddMember (op, mod_locations, lbag.GetLocations (decl)); + } + } + + current_local_parameters = null; + } + +void case_266() +#line 2634 "ps-parser.jay" +{ + report.Error (590, GetLocation (yyVals[0+yyTop]), "User-defined operators cannot return void"); + yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); + } + +void case_268() +#line 2646 "ps-parser.jay" +{ + CheckIsPlayScript("operator", GetLocation(yyVals[-7+yyTop])); + + valid_param_mod = 0; + + Location loc = GetLocation (yyVals[-7+yyTop]); + Operator.OpType op = (Operator.OpType) yyVals[0+yyTop]; + current_local_parameters = (ParametersCompiled)yyVals[-3+yyTop]; + + int p_count = current_local_parameters.Count; + if (p_count == 1) { + if (op == Operator.OpType.Addition) + op = Operator.OpType.UnaryPlus; + else if (op == Operator.OpType.Subtraction) + op = Operator.OpType.UnaryNegation; + } + + if (IsUnaryOperator (op)) { + if (p_count == 2) { + report.Error (1020, loc, "Overloadable binary operator expected"); + } else if (p_count != 1) { + report.Error (1535, loc, "Overloaded unary operator `{0}' takes one parameter", + Operator.GetName (op)); + } + } else { + if (p_count == 1) { + report.Error (1019, loc, "Overloadable unary operator expected"); + } else if (p_count != 2) { + report.Error (1534, loc, "Overloaded binary operator `{0}' takes two parameters", + Operator.GetName (op)); + } + } + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + yyVal = new OperatorDeclaration (op, (FullNamedExpression) yyVals[0+yyTop], loc); + lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); + } + +void case_295() +#line 2726 "ps-parser.jay" +{ + valid_param_mod = 0; + + Location loc = GetLocation (yyVals[-5+yyTop]); + current_local_parameters = (ParametersCompiled)yyVals[-1+yyTop]; + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + yyVal = new OperatorDeclaration (Operator.OpType.Implicit, (FullNamedExpression) yyVals[-4+yyTop], loc); + lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_297() +#line 2745 "ps-parser.jay" +{ + valid_param_mod = 0; + + Location loc = GetLocation (yyVals[-5+yyTop]); + current_local_parameters = (ParametersCompiled)yyVals[-1+yyTop]; + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + yyVal = new OperatorDeclaration (Operator.OpType.Explicit, (FullNamedExpression) yyVals[-4+yyTop], loc); + lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_298() +#line 2760 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + yyVal = new OperatorDeclaration (Operator.OpType.Implicit, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_299() +#line 2766 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + yyVal = new OperatorDeclaration (Operator.OpType.Explicit, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_300() +#line 2905 "ps-parser.jay" +{ + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + } + +void case_301() +#line 2914 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-3+yyTop]; + if (lt.Value != current_container.MemberName.Name){ + report.Error (574, lt.Location, "Name of destructor must match name of class"); + } else if (current_container.Kind != MemberKind.Class){ + report.Error (575, lt.Location, "Only class types can contain destructor"); + } + + Destructor d = new Destructor (current_type, (Modifiers) yyVals[-7+yyTop], + ParametersCompiled.EmptyReadOnlyParameters, (Attributes) yyVals[-8+yyTop], lt.Location); + if (doc_support) + d.DocComment = ConsumeStoredComment (); + + d.Block = (ToplevelBlock) yyVals[0+yyTop]; + if (is_config_enabled) { + current_type.AddMember (d); + } + is_config_enabled = true; + lbag.AddMember (d, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[-1+yyTop])); + + current_local_parameters = null; + } + +void case_302() +#line 2942 "ps-parser.jay" +{ + current_event_field = new EventField (current_type, (FullNamedExpression) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (MemberName) yyVals[-2+yyTop], (Attributes) yyVals[-5+yyTop]); + if (is_config_enabled) { + current_type.AddMember (current_event_field); + } + is_config_enabled = true; + + if (current_event_field.MemberName.ExplicitInterface != null) { + report.Error (71, current_event_field.Location, "`{0}': An explicit interface implementation of an event must use property syntax", + current_event_field.GetSignatureForError ()); + } + + yyVal = current_event_field; + } + +void case_303() +#line 2959 "ps-parser.jay" +{ + if (doc_support) { + current_event_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lbag.AddMember (current_event_field, mod_locations, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[0+yyTop])); + current_event_field = null; + } + +void case_304() +#line 2972 "ps-parser.jay" +{ + current_event = new EventProperty (current_type, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-5+yyTop], (MemberName) yyVals[-3+yyTop], (Attributes) yyVals[-6+yyTop]); + if (is_config_enabled) { + current_type.AddMember (current_event); + } + is_config_enabled = true; + lbag.AddMember (current_event, mod_locations, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[0+yyTop])); + + lexer.EventParsing = true; + } + +void case_305() +#line 2983 "ps-parser.jay" +{ + if (current_container.Kind == MemberKind.Interface) + report.Error (69, GetLocation (yyVals[-2+yyTop]), "Event in interface cannot have add or remove accessors"); + + lexer.EventParsing = false; + } + +void case_306() +#line 2990 "ps-parser.jay" +{ + if (doc_support) { + current_event.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lbag.AppendToMember (current_event, GetLocation (yyVals[-1+yyTop])); + current_event = null; + current_local_parameters = null; + } + +void case_309() +#line 3009 "ps-parser.jay" +{ + --lexer.parsing_block; + current_event_field.Initializer = (Expression) yyVals[0+yyTop]; + } + +void case_314() +#line 3033 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null, (FullNamedExpression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop])); + } + +void case_316() +#line 3043 "ps-parser.jay" +{ + --lexer.parsing_block; + var lt = (LocatedToken) yyVals[-5+yyTop]; + yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop], (FullNamedExpression) yyVals[-3+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-2+yyTop])); + } + +void case_317() +#line 3052 "ps-parser.jay" +{ + if (current_container.Kind == MemberKind.Interface) { + report.Error (68, lexer.Location, "`{0}': event in interface cannot have an initializer", + current_event_field.GetSignatureForError ()); + } + + if ((current_event_field.ModFlags & Modifiers.ABSTRACT) != 0) { + report.Error (74, lexer.Location, "`{0}': abstract event cannot have an initializer", + current_event_field.GetSignatureForError ()); + } + } + +void case_321() +#line 3073 "ps-parser.jay" +{ + report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", + current_event.GetSignatureForError ()); + } + +void case_322() +#line 3078 "ps-parser.jay" +{ + report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", + current_event.GetSignatureForError ()); + } + +void case_323() +#line 3083 "ps-parser.jay" +{ + report.Error (1055, GetLocation (yyVals[0+yyTop]), "An add or remove accessor expected"); + yyVal = null; + } + +void case_324() +#line 3091 "ps-parser.jay" +{ + if (yyVals[-1+yyTop] != ModifierNone) { + report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); + } + + current_event.Add = new EventProperty.AddDelegateMethod (current_event, (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); + current_local_parameters = current_event.Add.ParameterInfo; + + lbag.AddMember (current_event.Add, mod_locations); + lexer.EventParsing = false; + } + +void case_325() +#line 3103 "ps-parser.jay" +{ + lexer.EventParsing = true; + + current_event.Add.Block = (ToplevelBlock) yyVals[0+yyTop]; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_event.Add.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_event.Add.GetSignatureForError ()); + } + + current_local_parameters = null; + } + +void case_326() +#line 3119 "ps-parser.jay" +{ + if (yyVals[-1+yyTop] != ModifierNone) { + report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); + } + + current_event.Remove = new EventProperty.RemoveDelegateMethod (current_event, (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop])); + current_local_parameters = current_event.Remove.ParameterInfo; + + lbag.AddMember (current_event.Remove, mod_locations); + lexer.EventParsing = false; + } + +void case_327() +#line 3131 "ps-parser.jay" +{ + lexer.EventParsing = true; + + current_event.Remove.Block = (ToplevelBlock) yyVals[0+yyTop]; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_event.Remove.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_event.Remove.GetSignatureForError ()); + } + + current_local_parameters = null; + } + +void case_328() +#line 3147 "ps-parser.jay" +{ + report.Error (73, lexer.Location, "An add or remove accessor must have a body"); + yyVal = null; + } + +void case_330() +#line 3156 "ps-parser.jay" +{ + current_type.UnattachedAttributes = (Attributes) yyVals[-1+yyTop]; + report.Error (1519, GetLocation (yyVals[-1+yyTop]), "An attribute is missing member declaration"); + lexer.putback ('}'); + } + +void case_331() +#line 3168 "ps-parser.jay" +{ + if (doc_support) + enumTypeComment = Lexer.consume_doc_comment (); + } + +void case_332() +#line 3173 "ps-parser.jay" +{ + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + + MemberName name = (MemberName) yyVals[-3+yyTop]; + if (name.IsGeneric) { + report.Error (1675, name.Location, "Enums cannot have type parameters"); + } + + push_current_container (new Enum (current_container, (FullNamedExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-5+yyTop], name, (Attributes) yyVals[-6+yyTop]), null); + + Lexer.EatBlock = !is_config_enabled; + } + +void case_333() +#line 3187 "ps-parser.jay" +{ + lexer.parsing_modifiers = true; + + /* here will be evaluated after CLOSE_BLACE is consumed.*/ + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + +void case_334() +#line 3195 "ps-parser.jay" +{ + CheckIsPlayScript("enum", GetLocation(yyVals[-9+yyTop])); + + if (doc_support) + current_container.DocComment = enumTypeComment; + + --lexer.parsing_declaration; + +/* if (doc_support)*/ +/* em.DocComment = ev.DocComment;*/ + + is_config_enabled = true; + + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop])); + yyVal = pop_current_class (); + } + +void case_336() +#line 3216 "ps-parser.jay" +{ +/* var te = $2 as TypeExpression;*/ +/* if (te == null || !EnumSpec.IsValidUnderlyingType (te.Type)) {*/ +/* Enum.Error_1008 (GetLocation ($2), report);*/ +/* }*/ + yyVal = yyVals[0+yyTop]; + } + +void case_337() +#line 3224 "ps-parser.jay" +{ + Error_TypeExpected (GetLocation (yyVals[-1+yyTop])); + yyVal = null; + } + +void case_342() +#line 3242 "ps-parser.jay" +{ + lbag.AddLocation (yyVals[-2+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = yyVals[0+yyTop]; + } + +void case_343() +#line 3250 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-1+yyTop]); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) { + em.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + yyVal = em; + } + +void case_344() +#line 3263 "ps-parser.jay" +{ + ++lexer.parsing_block; + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + } + +void case_345() +#line 3271 "ps-parser.jay" +{ + --lexer.parsing_block; + + var lt = (LocatedToken) yyVals[-3+yyTop]; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]); + em.Initializer = new ConstInitializer (em, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) + em.DocComment = ConsumeStoredComment (); + + yyVal = em; + } + +void case_346() +#line 3285 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) yyVals[-1+yyTop]; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-2+yyTop]); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) { + em.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + yyVal = em; + } + +void case_349() +#line 3312 "ps-parser.jay" +{ + valid_param_mod = 0; + + ParametersCompiled p = (ParametersCompiled) yyVals[-3+yyTop]; + + Delegate del = new Delegate (current_container, (FullNamedExpression) yyVals[0+yyTop], (Modifiers) yyVals[-8+yyTop], (MemberName) yyVals[-6+yyTop], p, (Attributes) yyVals[-9+yyTop]); + + p.CheckParameters (del); + + current_container.AddTypeContainer (del); + + current_delegate = del; + lexer.ConstraintsParsing = true; + } + +void case_351() +#line 3331 "ps-parser.jay" +{ + CheckIsPlayScript("delegate", GetLocation(yyVals[-11+yyTop])); + + if (doc_support) { + current_delegate.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + if (yyVals[-2+yyTop] != null) + current_delegate.SetConstraints ((List) yyVals[-2+yyTop]); + lbag.AddMember (current_delegate, mod_locations, GetLocation (yyVals[-11+yyTop]), GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop])); + + yyVal = current_delegate; + + current_delegate = null; + } + +void case_352() +#line 3354 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + MemberName className = new MemberName(lt.Value + "_ns", GetLocation(yyVals[-2+yyTop])); + push_current_container(new Class (current_container, className, (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), GetLocation(yyVals[-3+yyTop])); + pop_current_class(); + + if (doc_support) { + current_delegate.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + } + +void case_355() +#line 3374 "ps-parser.jay" +{ + if (!(yyVals[0+yyTop] is StringLiteral)) + syntax_error (GetLocation(yyVals[0+yyTop]), "string literal expected"); + yyVal = yyVals[0+yyTop]; + } + +void case_357() +#line 3384 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types"); + + yyVal = ComposedTypeSpecifier.CreateNullable (GetLocation (yyVals[0+yyTop])); + } + +void case_360() +#line 3415 "ps-parser.jay" +{ + /* member_name*/ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_361() +#line 3422 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_362() +#line 3431 "ps-parser.jay" +{ + /* simple_name_expr*/ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); + } + +void case_363() +#line 3437 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new SimpleName (lt.Value, (int) yyVals[0+yyTop], lt.Location); + } + +void case_365() +#line 3450 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); + + yyVal = yyVals[-1+yyTop]; + } + +void case_366() +#line 3457 "ps-parser.jay" +{ + Error_TypeExpected (lexer.Location); + yyVal = new TypeArguments (); + } + +void case_367() +#line 3465 "ps-parser.jay" +{ + TypeArguments type_args = new TypeArguments (); + type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); + yyVal = type_args; + } + +void case_368() +#line 3471 "ps-parser.jay" +{ + TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; + type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); + yyVal = type_args; + } + +void case_370() +#line 3487 "ps-parser.jay" +{ + lexer.parsing_generic_declaration = false; + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new MemberName (lt.Value, (TypeParameters)yyVals[0+yyTop], lt.Location); + } + +void case_371() +#line 3496 "ps-parser.jay" +{ + MemberName mn = (MemberName)yyVals[0+yyTop]; + if (mn.TypeParameters != null) + syntax_error (mn.Location, string.Format ("Member `{0}' cannot declare type arguments", + mn.GetSignatureForError ())); + } + +void case_373() +#line 3507 "ps-parser.jay" +{ + lexer.parsing_generic_declaration = false; + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberName (lt.Value, (TypeParameters) yyVals[0+yyTop], (ATypeNameExpression) yyVals[-2+yyTop], lt.Location); + } + +void case_374() +#line 3516 "ps-parser.jay" +{ + lexer.parsing_generic_declaration = false; + yyVal = new MemberName (TypeDefinition.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); + } + +void case_375() +#line 3521 "ps-parser.jay" +{ + lexer.parsing_generic_declaration = false; + yyVal = new MemberName (TypeDefinition.DefaultIndexerName, null, (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + } + +void case_376() +#line 3529 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new SimpleName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_377() +#line 3543 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new MemberAccess ((ATypeNameExpression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_379() +#line 3553 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); + + yyVal = yyVals[-1+yyTop]; + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_380() +#line 3564 "ps-parser.jay" +{ + var tparams = new TypeParameters (); + tparams.Add ((TypeParameter)yyVals[0+yyTop]); + yyVal = tparams; + } + +void case_381() +#line 3570 "ps-parser.jay" +{ + var tparams = (TypeParameters) yyVals[-2+yyTop]; + tparams.Add ((TypeParameter)yyVals[0+yyTop]); + yyVal = tparams; + lbag.AddLocation (yyVals[0+yyTop], GetLocation (yyVals[0+yyTop])); + } + +void case_382() +#line 3580 "ps-parser.jay" +{ + var lt = (LocatedToken)yyVals[0+yyTop]; + yyVal = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)yyVals[-2+yyTop], (VarianceDecl) yyVals[-1+yyTop]); + } + +void case_383() +#line 3585 "ps-parser.jay" +{ + if (GetTokenName (yyToken) == "type") + report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); + else + Error_SyntaxError (yyToken); + + yyVal = new TypeParameter (MemberName.Null, null, null); + } + +void case_388() +#line 3619 "ps-parser.jay" +{ + Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); + yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); + } + +void case_390() +#line 3628 "ps-parser.jay" +{ + Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); + yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); + } + +void case_394() +#line 3648 "ps-parser.jay" +{ + report.Error (1536, GetLocation (yyVals[0+yyTop]), "Invalid parameter type `void'"); + yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); + } + +void case_396() +#line 3657 "ps-parser.jay" +{ + CheckIsPlayScript("arrays", GetLocation(yyVals[0+yyTop])); + yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + } + +void case_397() +#line 3665 "ps-parser.jay" +{ + if (yyVals[0+yyTop] != null) { + yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + } else { + var sn = yyVals[-1+yyTop] as SimpleName; + if (sn != null) + yyVal = ConvertAsType(sn, yyVals[-1+yyTop]); + else + yyVal = yyVals[-1+yyTop]; + } + } + +void case_399() +#line 3685 "ps-parser.jay" +{ + if (yyVals[0+yyTop] != null) + yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + } + +void case_400() +#line 3701 "ps-parser.jay" +{ + var types = new List (2); + types.Add ((FullNamedExpression) yyVals[0+yyTop]); + yyVal = types; + } + +void case_401() +#line 3707 "ps-parser.jay" +{ + var types = (List) yyVals[-2+yyTop]; + types.Add ((FullNamedExpression) yyVals[0+yyTop]); + yyVal = types; + } + +void case_402() +#line 3716 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is ComposedCast) { + report.Error (1521, GetLocation (yyVals[0+yyTop]), "Invalid base type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); + } + yyVal = yyVals[0+yyTop]; + } + +void case_434() +#line 3796 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); + } + +void case_446() +#line 3834 "ps-parser.jay" +{ + yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_448() +#line 3846 "ps-parser.jay" +{ + /* member_access*/ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_449() +#line 3853 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "null propagating operator"); + + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new ConditionalMemberAccess ((Expression) yyVals[-4+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); + } + +void case_450() +#line 3862 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "null propagating operator"); + + var lt = (LocatedToken) yyVals[-1+yyTop]; + /*$$ = new NullMemberAccess ((Expression) $1, lt.Value, (TypeArguments) $5, lt.Location);*/ + yyVal = new ConditionalMemberAccess ((Expression) yyVals[-4+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); + } + +void case_451() +#line 3872 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + var ma = new MemberAccess ((Expression) yyVals[-2+yyTop], lt.Value, null, lt.Location); + ma.AccessorType = MemberAccess.Accessor.AsE4xChildAttribute; + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + yyVal = ma; + } + +void case_452() +#line 3881 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess (new SimpleName ("await", ((LocatedToken) yyVals[-3+yyTop]).Location), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_453() +#line 3888 "ps-parser.jay" +{ + var ma = new MemberAccess ((Expression) yyVals[-1+yyTop], "any", null, GetLocation(yyVals[0+yyTop])); + ma.AccessorType = MemberAccess.Accessor.AsE4xChildAll; + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + yyVal = ma; + } + +void case_454() +#line 3895 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + var ma = new MemberAccess ((Expression) yyVals[-2+yyTop], lt.Value, null, lt.Location); + ma.AccessorType = MemberAccess.Accessor.AsE4xDescendant; + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + yyVal = ma; + } + +void case_455() +#line 3903 "ps-parser.jay" +{ + var ma = new MemberAccess ((Expression) yyVals[-1+yyTop], "any", null, GetLocation(yyVals[0+yyTop])); + ma.AccessorType = MemberAccess.Accessor.AsE4xDescendantAll; + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + yyVal = ma; + } + +void case_456() +#line 3910 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + var ma = new MemberAccess ((Expression) yyVals[-2+yyTop], lt.Value, null, lt.Location); + ma.AccessorType = MemberAccess.Accessor.AsE4xNamespace; + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + yyVal = ma; + } + +void case_457() +#line 3918 "ps-parser.jay" +{ + var ea = new ElementAccess ((Expression) yyVals[-4+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + ea.AccessorType = ElementAccess.Accessor.AsE4xNamespaceAccess; + lbag.AddLocation (GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = ea; + } + +void case_458() +#line 3925 "ps-parser.jay" +{ + var ea = new ElementAccess ((Expression) yyVals[-4+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + ea.AccessorType = ElementAccess.Accessor.AsE4xAttributeAccess; + lbag.AddLocation (GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = ea; + } + +void case_459() +#line 3932 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + var ma = new AsXmlQueryExpression ((Expression) yyVals[-4+yyTop], (Expression) yyVals[-1+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop])); + yyVal = ma; + } + +void case_460() +#line 3945 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_461() +#line 3959 "ps-parser.jay" +{ + var lt1 = (LocatedToken) yyVals[-2+yyTop]; + var lt2 = (LocatedToken) yyVals[-1+yyTop]; + + yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) yyVals[0+yyTop], lt1.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_463() +#line 3969 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); + } + +void case_464() +#line 3985 "ps-parser.jay" +{ + if (current_constructor == null) + report.Error (7014, GetLocation (yyVals[-3+yyTop]), "Base constructor initializer may only be called in constructor"); + var initializer = new ConstructorBaseInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + initializer.IsAsExplicitSuperCall = true; + current_constructor.Initializer = initializer; + yyVal = initializer; + lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_465() +#line 3995 "ps-parser.jay" +{ + var newExpr = yyVals[-3+yyTop] as AsNew; + if (newExpr != null) { + /* Convert Invocation(AsNew()) into AsNew(Invocation())*/ + var invExpr = new Invocation(newExpr.Expr, (Arguments) yyVals[-1+yyTop]); + newExpr.Expr = invExpr; + yyVal = newExpr; + } else { + /* Just a normal invocation*/ + yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop]); + } + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_466() +#line 4009 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_467() +#line 4019 "ps-parser.jay" +{ + var expList = yyVals[-1+yyTop] as List; + if (expList == null) { + expList = new List(); + } + var oi = new AsObjectInitializer (expList, GetLocation (yyVals[-2+yyTop])); + if (current_variable != null) { + oi.VariableDeclaration = current_variable; + } + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + yyVal = oi; + } + +void case_468() +#line 4032 "ps-parser.jay" +{ + var oi = new AsObjectInitializer ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); + if (current_variable != null) { + oi.VariableDeclaration = current_variable; + } + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = oi; + } + +void case_469() +#line 4044 "ps-parser.jay" +{ + oob_stack.Push (Lexer.AutoSemiInsertion); + Lexer.AutoSemiInsertion = false; + } + +void case_470() +#line 4052 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + if (Lexer.AutoSemiInsertion) + Lexer.AllowAutoSemiAfterToken(Token.CLOSE_BRACE, true); + } + +void case_471() +#line 4061 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + if (Lexer.AutoSemiInsertion) + Lexer.AllowAutoSemiAfterToken(Token.CLOSE_BRACE, true); + } + +void case_475() +#line 4079 "ps-parser.jay" +{ + var a = new List (); + a.Add ((Expression) yyVals[0+yyTop]); + yyVal = a; + } + +void case_476() +#line 4085 "ps-parser.jay" +{ + var a = (List)yyVals[-2+yyTop]; + a.Add ((Expression) yyVals[0+yyTop]); + yyVal = a; + } + +void case_477() +#line 4090 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = yyVals[-1+yyTop]; + } + +void case_478() +#line 4098 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_479() +#line 4104 "ps-parser.jay" +{ + var lt = (LocatedToken) Error_AwaitAsIdentifier (yyVals[-2+yyTop]); + yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_480() +#line 4110 "ps-parser.jay" +{ + ILiteralConstant lit = yyVals[-2+yyTop] as ILiteralConstant; + string nm; + if (lit is StringLiteral) { + nm = ((StringLiteral)lit).Value; + } else { + if (parsing_playscript || !(lit is IntLiteral || lit is DoubleLiteral || lit is BoolLiteral)) { + report.Error (7019, GetLocation (yyVals[-2+yyTop]), "Must be identifier or string literal"); + nm = "err"; + } else { + nm = ((Constant)yyVals[-2+yyTop]).GetValueAsLiteral(); + } + } + + yyVal = new ElementInitializer (nm, (Expression)yyVals[0+yyTop], GetLocation(yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_485() +#line 4163 "ps-parser.jay" +{ + Arguments list = new Arguments (4); + list.Add ((Argument) yyVals[0+yyTop]); + yyVal = list; + } + +void case_486() +#line 4169 "ps-parser.jay" +{ + Arguments list = (Arguments) yyVals[-2+yyTop]; + list.Add ((Argument) yyVals[0+yyTop]); + yyVal = list; + } + +void case_487() +#line 4175 "ps-parser.jay" +{ + lexer.putback (')'); /* TODO: Wrong but what can I do*/ + Error_SyntaxError (yyToken); + yyVal = yyVals[-2+yyTop]; + } + +void case_488() +#line 4181 "ps-parser.jay" +{ + report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); + yyVal = null; + } + +void case_491() +#line 4197 "ps-parser.jay" +{ + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_493() +#line 4206 "ps-parser.jay" +{ + yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_495() +#line 4218 "ps-parser.jay" +{ + yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_496() +#line 4235 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "declaration expression"); + + var lt = (LocatedToken) yyVals[0+yyTop]; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + yyVal = new DeclarationExpression ((FullNamedExpression) yyVals[-1+yyTop], lv); + } + +void case_497() +#line 4245 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "declaration expression"); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + yyVal = new DeclarationExpression ((FullNamedExpression) yyVals[-3+yyTop], lv) { + Initializer = (Expression) yyVals[0+yyTop] + }; + } + +void case_499() +#line 4264 "ps-parser.jay" +{ + var newExpr = yyVals[-3+yyTop] as AsNew; + if (newExpr != null) { + /* Convert ElementAccess(AsNew()) into AsNew(ElementAccess())*/ + var elemAccessExpr = new ElementAccess(newExpr.Expr, (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + newExpr.Expr = elemAccessExpr; + yyVal = newExpr; + } else { + yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_500() +#line 4277 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "null propagating operator"); + + yyVal = new ElementAccess ((Expression) yyVals[-4+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])) { + ConditionalAccess = true + }; + + lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_501() +#line 4289 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } + +void case_502() +#line 4294 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new ElementAccess ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); + } + +void case_503() +#line 4317 "ps-parser.jay" +{ + var list = new List (4); + list.Add ((Expression) yyVals[0+yyTop]); + yyVal = list; + } + +void case_504() +#line 4323 "ps-parser.jay" +{ + var list = (List) yyVals[-2+yyTop]; + list.Add ((Expression) yyVals[0+yyTop]); + yyVal = list; + } + +void case_505() +#line 4328 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = yyVals[-1+yyTop]; + } + +void case_506() +#line 4336 "ps-parser.jay" +{ + Arguments args = new Arguments (4); + args.Add ((Argument) yyVals[0+yyTop]); + yyVal = args; + } + +void case_507() +#line 4342 "ps-parser.jay" +{ + Arguments args = (Arguments) yyVals[-2+yyTop]; + args.Add ((Argument) yyVals[0+yyTop]); + yyVal = args; + } + +void case_510() +#line 4365 "ps-parser.jay" +{ + yyVal = new ElementAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_511() +#line 4370 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_517() +#line 4461 "ps-parser.jay" +{ + var arrayInit = (AsArrayInitializer) yyVals[0+yyTop]; + arrayInit.VectorType = (FullNamedExpression) yyVals[-2+yyTop]; + yyVal = arrayInit; + } + +void case_520() +#line 4475 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_521() +#line 4481 "ps-parser.jay" +{ + /* member_name*/ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_523() +#line 4562 "ps-parser.jay" +{ + ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; + yyVal = yyVals[-1+yyTop]; + } + +void case_524() +#line 4570 "ps-parser.jay" +{ + yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_525() +#line 4575 "ps-parser.jay" +{ + yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_528() +#line 4605 "ps-parser.jay" +{ + var ai = new AsArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); + if (current_variable != null) { + ai.VariableDeclaration = current_variable; + } + lbag.AddLocation (ai, GetLocation (yyVals[0+yyTop])); + yyVal = ai; + } + +void case_529() +#line 4614 "ps-parser.jay" +{ + var ai = new AsArrayInitializer ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); + if (current_variable != null) { + ai.VariableDeclaration = current_variable; + } + if (yyVals[-1+yyTop] != null) { + lbag.AddLocation (ai, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } else { + lbag.AddLocation (ai, GetLocation (yyVals[0+yyTop])); + } + yyVal = ai; + } + +void case_530() +#line 4630 "ps-parser.jay" +{ + oob_stack.Push (Lexer.AutoSemiInsertion); + Lexer.AutoSemiInsertion = false; + } + +void case_531() +#line 4638 "ps-parser.jay" +{ + oob_stack.Push (Lexer.AutoSemiInsertion); + Lexer.AutoSemiInsertion = false; + } + +void case_533() +#line 4653 "ps-parser.jay" +{ + var list = new List (4); + list.Add ((Expression) yyVals[0+yyTop]); + yyVal = list; + } + +void case_534() +#line 4659 "ps-parser.jay" +{ + var list = (List) yyVals[-2+yyTop]; + list.Add ((Expression) yyVals[0+yyTop]); + yyVal = list; + } + +void case_535() +#line 4681 "ps-parser.jay" +{ + yyVal = new TypeOf ((FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_537() +#line 4691 "ps-parser.jay" +{ + Error_TypeExpected (lexer.Location); + yyVal = null; + } + +void case_538() +#line 4737 "ps-parser.jay" +{ + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); + + yyVal = yyVals[0+yyTop]; + } + +void case_539() +#line 4758 "ps-parser.jay" +{ + CheckIsPlayScript("sizeof", GetLocation(yyVals[-3+yyTop])); + yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_540() +#line 4764 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_541() +#line 4774 "ps-parser.jay" +{ + CheckIsPlayScript("checked", GetLocation(yyVals[-3+yyTop])); + yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_542() +#line 4780 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new CheckedExpr (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_543() +#line 4789 "ps-parser.jay" +{ + CheckIsPlayScript("unchecked", GetLocation(yyVals[-3+yyTop])); + yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_544() +#line 4795 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new UnCheckedExpr (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_546() +#line 4816 "ps-parser.jay" +{ + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) yyVals[-3+yyTop], (FullNamedExpression) yyVals[0+yyTop], false, GetLocation (yyVals[-6+yyTop])); + } + +void case_549() +#line 4829 "ps-parser.jay" +{ + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) yyVals[-3+yyTop], (FullNamedExpression) yyVals[0+yyTop], true, GetLocation (yyVals[-7+yyTop])); + } + +void case_552() +#line 4845 "ps-parser.jay" +{ + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) yyVals[-3+yyTop], (FullNamedExpression) yyVals[0+yyTop], false, GetLocation (yyVals[-7+yyTop])); + } + +void case_553() +#line 4850 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-8+yyTop]; + var anonMethod = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); + var li = new LocalVariable (current_block.ParametersBlock, lt.Value, lt.Location); + var type = Delegate.CreateDelegateTypeExpression(compiler.BuiltinTypes, anonMethod.AsParameters, anonMethod.AsReturnType, GetLocation(yyVals[-9+yyTop])); + var decl = new BlockVariable(type, li); + decl.Initializer = anonMethod; + current_block.AddLocalName (li); + current_block.ParametersBlock.AddScopeStatement (decl); + yyVal = new AsLocalFunction(GetLocation(yyVals[-9+yyTop]), lt.Value, anonMethod, decl); + } + +void case_555() +#line 4866 "ps-parser.jay" +{ + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) yyVals[-3+yyTop], (FullNamedExpression) yyVals[0+yyTop], true, GetLocation (yyVals[-8+yyTop])); + } + +void case_556() +#line 4871 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-8+yyTop]; + var anonMethod = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); + var li = new LocalVariable (current_block.ParametersBlock, lt.Value, lt.Location); + var type = Delegate.CreateDelegateTypeExpression(compiler.BuiltinTypes, anonMethod.AsParameters, anonMethod.AsReturnType, GetLocation(yyVals[-10+yyTop])); + var decl = new BlockVariable(type, li); + decl.Initializer = anonMethod; + current_block.AddLocalName (li); + current_block.ParametersBlock.AddScopeStatement (decl); + yyVal = new AsLocalFunction(GetLocation(yyVals[-10+yyTop]), lt.Value, anonMethod, decl); + } + +void case_557() +#line 4898 "ps-parser.jay" +{ + CheckIsPlayScript("default values", GetLocation(yyVals[-3+yyTop])); + + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); + + yyVal = new DefaultValueExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_561() +#line 4920 "ps-parser.jay" +{ + CheckIsPlayScript("await", GetLocation(yyVals[-1+yyTop])); + + if (!async_block) { + if (current_anonymous_method is LambdaExpression) { + report.Error (4034, GetLocation (yyVals[-1+yyTop]), + "The `await' operator can only be used when its containing lambda expression is marked with the `async' modifier"); + } else if (current_anonymous_method != null) { + report.Error (4035, GetLocation (yyVals[-1+yyTop]), + "The `await' operator can only be used when its containing anonymous method is marked with the `async' modifier"); + } else if (interactive_async != null) { + current_block.Explicit.RegisterAsyncAwait (); + interactive_async = true; + } else { + report.Error (4033, GetLocation (yyVals[-1+yyTop]), + "The `await' operator can only be used when its containing method is marked with the `async' modifier"); + } + } else { + current_block.Explicit.RegisterAsyncAwait (); + } + + yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + +void case_564() +#line 4952 "ps-parser.jay" +{ + var expr = yyVals[0+yyTop] as Expression; + if (!(expr is ElementAccess || expr is MemberAccess)) { + report.Error (7022, GetLocation (yyVals[-1+yyTop]), + "delete operator may only be used with element access or member access expressions"); + } + yyVal = new AsDelete ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + +void case_565() +#line 4961 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Unary (Unary.Operator.LogicalNot, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_566() +#line 4967 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Unary (Unary.Operator.OnesComplement, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_567() +#line 4973 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Await (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_568() +#line 4979 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Unary (Unary.Operator.AsE4xAttribute, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_569() +#line 4985 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new AsTypeOf (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_570() +#line 4991 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new AsDelete (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_577() +#line 5029 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Unary (Unary.Operator.UnaryPlus, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_578() +#line 5035 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Unary (Unary.Operator.UnaryNegation, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_579() +#line 5041 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_580() +#line 5047 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_581() +#line 5059 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Unary (Unary.Operator.AddressOf, null, GetLocation (yyVals[-1+yyTop])); + } + +void case_583() +#line 5069 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_584() +#line 5074 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_585() +#line 5079 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_586() +#line 5084 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_587() +#line 5091 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_588() +#line 5098 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_590() +#line 5109 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_591() +#line 5114 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_594() +#line 5127 "ps-parser.jay" +{ + yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); +/* var is_expr = new Is ((Expression) $1, (Expression) $3, GetLocation ($2));*/ +/* if ($4 != null) {*/ +/* if (lang_version != LanguageVersion.Experimental)*/ +/* FeatureIsNotAvailable (GetLocation ($4), "type pattern matching");*/ +/**/ +/* var lt = (LocatedToken) $4;*/ +/* is_expr.Variable = new LocalVariable (current_block, lt.Value, lt.Location);*/ +/* current_block.AddLocalName (is_expr.Variable);*/ +/* }*/ +/**/ +/* $$ = is_expr;*/ + } + +void case_595() +#line 5142 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_596() +#line 5149 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_597() +#line 5156 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new AsIn ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); + } + +void case_598() +#line 5162 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new As ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); + } + +void case_599() +#line 5168 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Is ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); + } + +void case_601() +#line 5178 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_602() +#line 5183 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_603() +#line 5188 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.AsURightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_604() +#line 5193 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_605() +#line 5200 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_606() +#line 5207 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.AsURightShift, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_608() +#line 5218 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_609() +#line 5223 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_610() +#line 5228 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_611() +#line 5233 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_612() +#line 5238 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_613() +#line 5245 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_614() +#line 5252 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_615() +#line 5259 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_617() +#line 5270 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_618() +#line 5275 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_619() +#line 5280 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.AsStrictEquality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_620() +#line 5285 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.AsStrictInequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_622() +#line 5294 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_623() +#line 5299 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_625() +#line 5310 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_626() +#line 5315 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_628() +#line 5326 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_629() +#line 5331 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_631() +#line 5342 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_632() +#line 5347 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_634() +#line 5358 "ps-parser.jay" +{ + yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_635() +#line 5363 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], null); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_637() +#line 5374 "ps-parser.jay" +{ + CheckIsPlayScript("?? operator", GetLocation(yyVals[-1+yyTop])); + + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); + + yyVal = new Nullable.NullCoalescingOperator ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_639() +#line 5388 "ps-parser.jay" +{ + yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_640() +#line 5393 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-3+yyTop]), (Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); + } + +void case_641() +#line 5399 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_642() +#line 5409 "ps-parser.jay" +{ + Expression target = (Expression) yyVals[-2+yyTop]; + Expression source = (Expression) yyVals[0+yyTop]; + + var assign = new SimpleAssign (target, source); + lbag.AddLocation (assign, GetLocation (yyVals[-1+yyTop])); + + if (source is AsArrayInitializer) { + (source as AsArrayInitializer).Assign = assign; + } else if (source is AsObjectInitializer) { + (source as AsObjectInitializer).Assign = assign; + } + + yyVal = assign; + } + +void case_643() +#line 5425 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_644() +#line 5430 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_645() +#line 5435 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_646() +#line 5440 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_647() +#line 5445 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_648() +#line 5450 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_649() +#line 5455 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_650() +#line 5460 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.AsURightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_651() +#line 5465 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_652() +#line 5470 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_653() +#line 5475 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_654() +#line 5480 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_655() +#line 5485 "ps-parser.jay" +{ + yyVal = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_657() +#line 5494 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = null; + } + +void case_664() +#line 5551 "ps-parser.jay" +{ + lexer.ConstraintsParsing = true; + lexer.AutoSemiInsertion = false; + } + +void case_665() +#line 5556 "ps-parser.jay" +{ + /* To workaround access level restrictions, we make internal classes*/ + /* public for ActionScript.*/ + var modifiers = (Modifiers) yyVals[-4+yyTop]; + if (!parsing_playscript) { + if ((modifiers & Modifiers.INTERNAL) != 0) { /* specified as internal*/ + modifiers &= ~Modifiers.INTERNAL; + modifiers |= Modifiers.PUBLIC; + } + if ((modifiers & Modifiers.AccessibilityMask) == 0) { /* defaults to internal*/ + modifiers |= Modifiers.PUBLIC; + } + } + + Class c = new Class (current_container, (MemberName) yyVals[0+yyTop], modifiers, (Attributes) yyVals[-5+yyTop]); + if (((c.ModFlags & Modifiers.STATIC) != 0) && lang_version == LanguageVersion.ISO_1) { + FeatureIsNotAvailable (c.Location, "static classes"); + } + + bool is_partial = IsPartial(yyVals[-5+yyTop]) || yyVals[-3+yyTop] != null; + push_current_container (c, is_partial); + } + +void case_666() +#line 5581 "ps-parser.jay" +{ + lexer.ConstraintsParsing = false; + + if (yyVals[0+yyTop] != null) + current_container.SetConstraints ((List) yyVals[0+yyTop]); + lbag.AddMember (current_container, mod_locations, GetLocation (yyVals[-6+yyTop])); + + if (doc_support) { + current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lexer.parsing_modifiers = true; + lexer.DynamicParsing = false; + } + +void case_667() +#line 5597 "ps-parser.jay" +{ + lexer.AutoSemiInsertion = true; + Lexer.EatBlock = !is_config_enabled; + } + +void case_668() +#line 5602 "ps-parser.jay" +{ + lexer.DynamicParsing = true; + --lexer.parsing_declaration; + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + +void case_669() +#line 5609 "ps-parser.jay" +{ + is_config_enabled = true; + lbag.AppendToMember (current_container, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = pop_current_class (); + } + +void case_672() +#line 5625 "ps-parser.jay" +{ + mod_locations = null; + yyVal = ModifierNone; + lexer.parsing_modifiers = false; + } + +void case_675() +#line 5639 "ps-parser.jay" +{ + var m1 = (Modifiers) yyVals[-1+yyTop]; + var m2 = (Modifiers) yyVals[0+yyTop]; + + if ((m1 & m2) != 0) { + report.Error (1004, lexer.Location - ModifiersExtensions.Name (m2).Length, + "Duplicate `{0}' modifier", ModifiersExtensions.Name (m2)); + } else if ((m2 & Modifiers.AccessibilityMask) != 0 && (m1 & Modifiers.AccessibilityMask) != 0 && + ((m2 | m1 & Modifiers.AccessibilityMask) != (Modifiers.PROTECTED | Modifiers.INTERNAL))) { + report.Error (107, lexer.Location - ModifiersExtensions.Name (m2).Length, + "More than one protection modifier specified"); + } + + yyVal = m1 | m2; + } + +void case_676() +#line 5658 "ps-parser.jay" +{ + yyVal = Modifiers.NEW; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + + if (current_container.Kind == MemberKind.Namespace) + report.Error (1530, GetLocation (yyVals[0+yyTop]), "Keyword `new' is not allowed on namespace elements"); + } + +void case_677() +#line 5666 "ps-parser.jay" +{ + yyVal = Modifiers.PUBLIC; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_678() +#line 5671 "ps-parser.jay" +{ + yyVal = Modifiers.PROTECTED; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_679() +#line 5676 "ps-parser.jay" +{ + yyVal = Modifiers.INTERNAL; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_680() +#line 5681 "ps-parser.jay" +{ + yyVal = Modifiers.PRIVATE; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_681() +#line 5686 "ps-parser.jay" +{ + yyVal = Modifiers.ABSTRACT; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_682() +#line 5691 "ps-parser.jay" +{ + yyVal = (Modifiers)0; /* Modifiers.SEALED; // The semantics for SEALED and FINAL don't quite match. Ignore FINAL for right now. (BEN)*/ + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_683() +#line 5696 "ps-parser.jay" +{ + yyVal = Modifiers.STATIC; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_684() +#line 5701 "ps-parser.jay" +{ + yyVal = Modifiers.READONLY; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_685() +#line 5706 "ps-parser.jay" +{ + yyVal = Modifiers.VIRTUAL; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_686() +#line 5711 "ps-parser.jay" +{ + yyVal = Modifiers.OVERRIDE; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_687() +#line 5716 "ps-parser.jay" +{ + yyVal = Modifiers.EXTERN; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_688() +#line 5721 "ps-parser.jay" +{ + yyVal = Modifiers.VOLATILE; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_689() +#line 5726 "ps-parser.jay" +{ + yyVal = Modifiers.UNSAFE; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + if (!settings.Unsafe) + Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); + } + +void case_690() +#line 5733 "ps-parser.jay" +{ + yyVal = Modifiers.ASYNC; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_691() +#line 5738 "ps-parser.jay" +{ + yyVal = Modifiers.AS_DYNAMIC; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_692() +#line 5743 "ps-parser.jay" +{ + yyVal = Modifiers.INTERNAL; + StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_695() +#line 5756 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + current_type.AddBaseForPart ((FullNamedExpression) yyVals[-1+yyTop]); + } + +void case_698() +#line 5770 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + current_type.SetBaseTypes ((List) yyVals[-1+yyTop]); + } + +void case_701() +#line 5784 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + current_type.AddBasesForPart ((List) yyVals[-1+yyTop]); + } + +void case_704() +#line 5801 "ps-parser.jay" +{ + var constraints = new List (1); + constraints.Add ((Constraints) yyVals[0+yyTop]); + yyVal = constraints; + } + +void case_705() +#line 5807 "ps-parser.jay" +{ + var constraints = (List) yyVals[-1+yyTop]; + Constraints new_constraint = (Constraints)yyVals[0+yyTop]; + + foreach (Constraints c in constraints) { + if (new_constraint.TypeParameter.Value == c.TypeParameter.Value) { + report.Error (409, new_constraint.Location, + "A constraint clause has already been specified for type parameter `{0}'", + new_constraint.TypeParameter.Value); + } + } + + constraints.Add (new_constraint); + yyVal = constraints; + } + +void case_706() +#line 5826 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_707() +#line 5832 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), null, GetLocation (yyVals[-2+yyTop])); + } + +void case_708() +#line 5842 "ps-parser.jay" +{ + var constraints = new List (1); + constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); + yyVal = constraints; + } + +void case_709() +#line 5848 "ps-parser.jay" +{ + var constraints = (List) yyVals[-2+yyTop]; + var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; + if (prev != null && (prev.Constraint & SpecialConstraint.Constructor) != 0) { + report.Error (401, GetLocation (yyVals[-1+yyTop]), "The `new()' constraint must be the last constraint specified"); + } + + prev = yyVals[0+yyTop] as SpecialContraintExpr; + if (prev != null) { + if ((prev.Constraint & (SpecialConstraint.Class | SpecialConstraint.Struct)) != 0) { + report.Error (449, prev.Location, "The `class' or `struct' constraint must be the first constraint specified"); + } else { + prev = constraints [0] as SpecialContraintExpr; + if (prev != null && (prev.Constraint & SpecialConstraint.Struct) != 0) { + report.Error (451, GetLocation (yyVals[0+yyTop]), "The `new()' constraint cannot be used with the `struct' constraint"); + } + } + } + + constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); + yyVal = constraints; + } + +void case_710() +#line 5874 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is ComposedCast) + report.Error (706, GetLocation (yyVals[0+yyTop]), "Invalid constraint type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); + + yyVal = yyVals[0+yyTop]; + } + +void case_711() +#line 5881 "ps-parser.jay" +{ + yyVal = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation (yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_715() +#line 5901 "ps-parser.jay" +{ + if (lang_version <= LanguageVersion.V_3) + FeatureIsNotAvailable (lexer.Location, "generic type variance"); + + yyVal = yyVals[0+yyTop]; + } + +void case_718() +#line 5935 "ps-parser.jay" +{ + ++lexer.parsing_block; + lexer.AutoSemiInsertion = true; + start_block (GetLocation (yyVals[0+yyTop])); + Lexer.EatBlock = !is_config_enabled; + } + +void case_720() +#line 5952 "ps-parser.jay" +{ + ++lexer.parsing_block; + lexer.AutoSemiInsertion = true; + start_block (GetLocation (yyVals[0+yyTop])); + } + +void case_722() +#line 5969 "ps-parser.jay" +{ + ++lexer.parsing_block; + start_block (GetLocation (yyVals[0+yyTop])); + Lexer.EatBlock = !is_config_enabled; + } + +void case_723() +#line 5975 "ps-parser.jay" +{ + if (is_config_enabled) { + /* This block should be included*/ + yyVal = yyVals[0+yyTop]; + } else { + yyVal = new EmptyStatement (GetLocation (yyVals[-3+yyTop])); + } + is_config_enabled = true; + } + +void case_725() +#line 5989 "ps-parser.jay" +{ + var lt1 = (LocatedToken) yyVals[-2+yyTop]; + var lt2 = (LocatedToken) yyVals[0+yyTop]; + is_config_enabled = IsConfigVarDefined (lt1.Value + "::" + lt2.Value); + } + +void case_726() +#line 5998 "ps-parser.jay" +{ + Lexer.AutoSemiInsertionAfter = 1; + yyVal = yyVals[0+yyTop]; + } + +void case_727() +#line 6006 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + yyVal = end_block (GetLocation (yyVals[0+yyTop])); + } + +void case_728() +#line 6012 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + yyVal = end_block (lexer.Location); + } + +void case_729() +#line 6021 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + Lexer.AllowAutoSemiAfterToken(Token.CLOSE_BRACE, true); + --lexer.parsing_block; + yyVal = end_block (GetLocation (yyVals[0+yyTop])); + } + +void case_730() +#line 6028 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + yyVal = end_block (lexer.Location); + } + +void case_731() +#line 6037 "ps-parser.jay" +{ + ++lexer.parsing_block; + current_block.StartLocation = GetLocation (yyVals[0+yyTop]); + } + +void case_732() +#line 6042 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + yyVal = end_block (GetLocation (yyVals[0+yyTop])); + } + +void case_740() +#line 6070 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = null; + } + +void case_775() +#line 6138 "ps-parser.jay" +{ + if (parsing_playscript) { + report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); + yyVal = null; + } else { + /* NOTE: This is actually allowed in PlayScript. We'll turn it off in ASX though as it's error prone.*/ + yyVal = yyVals[0+yyTop]; + } + } + +void case_776() +#line 6148 "ps-parser.jay" +{ + report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); + yyVal = null; + } + +void case_777() +#line 6153 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); + } + +void case_778() +#line 6161 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + /* Uses lexer.Location because semicolon location is not kept in quick mode*/ + yyVal = new EmptyStatement (lexer.Location); + } + +void case_779() +#line 6170 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); + lbag.AddLocation (labeled, GetLocation (yyVals[0+yyTop])); + current_block.AddLabel (labeled); + current_block.AddStatement (labeled); + } + +void case_781() +#line 6182 "ps-parser.jay" +{ + Lexer.NamespaceParsing = false; + var lt = (LocatedToken) yyVals[-2+yyTop]; + yyVal = new AsUseNamespaceStatement (lt.Value, GetLocation (yyVals[-3+yyTop])); + } + +void case_783() +#line 6192 "ps-parser.jay" +{ + if (yyVals[-1+yyTop] is VarExpr) + yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); + + yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + } + +void case_784() +#line 6208 "ps-parser.jay" +{ + /* Ok, the above "primary_expression" is there to get rid of*/ + /* both reduce/reduce and shift/reduces in the grammar, it should*/ + /* really just be "type_name". If you use type_name, a reduce/reduce*/ + /* creeps up. If you use namespace_or_type_name (which is all we need*/ + /* really) two shift/reduces appear.*/ + /* */ + + /* So the super-trick is that primary_expression*/ + /* can only be either a SimpleName or a MemberAccess. */ + /* The MemberAccess case arises when you have a fully qualified type-name like :*/ + /* Foo.Bar.Blah i;*/ + /* SimpleName is when you have*/ + /* Blah i;*/ + + Expression expr = (Expression) yyVals[-1+yyTop]; + if (yyVals[0+yyTop] == null) { + SimpleName sn = expr as SimpleName; + if (sn != null) + yyVal = ConvertAsType(sn, yyVals[-1+yyTop]); + else + yyVal = yyVals[-1+yyTop]; + } else if (expr is ATypeNameExpression) { + yyVal = new ComposedCast ((ATypeNameExpression)expr, (ComposedTypeSpecifier) yyVals[0+yyTop]); + } else { + Error_ExpectingTypeName (expr); + yyVal = null; + } + } + +void case_785() +#line 6264 "ps-parser.jay" +{ + Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); + yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); + } + +void case_787() +#line 6289 "ps-parser.jay" +{ + if (async_block) { + report.Error (4003, GetLocation (yyVals[0+yyTop]), "`await' cannot be used as an identifier within an async method"); + yyVal = new LocatedToken ("await", GetLocation (yyVals[0+yyTop])); + } + } + +void case_789() +#line 6306 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + var li = GetOrCreateLocalVariable (current_block, lt.Value, 0, (FullNamedExpression) yyVals[0+yyTop], lt.Location); + current_variable = new BlockVariable ((FullNamedExpression) yyVals[0+yyTop], li); + } + +void case_790() +#line 6312 "ps-parser.jay" +{ + yyVal = current_variable; + current_variable = null; + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_791() +#line 6318 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + var li = GetOrCreateLocalVariable (current_block, lt.Value, 0, null, lt.Location); + current_variable = new BlockVariable (new VarExpr (GetLocation(yyVals[-1+yyTop])), li); + } + +void case_792() +#line 6324 "ps-parser.jay" +{ + yyVal = current_variable; + current_variable = null; + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_793() +#line 6330 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + var li = GetOrCreateLocalVariable (current_block, lt.Value, /*LocalVariable.Flags.Constant*/ 0, null, lt.Location); + current_variable = new BlockVariable (new VarExpr (GetLocation(yyVals[-3+yyTop])), li); /* new BlockConstant ((FullNamedExpression) $4, li);*/ + } + +void case_794() +#line 6337 "ps-parser.jay" +{ + yyVal = current_variable; + current_variable = null; + lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-1+yyTop])); + } + +void case_796() +#line 6347 "ps-parser.jay" +{ + current_variable.Initializer = (Expression) yyVals[0+yyTop]; + PushLocation (GetLocation (yyVals[-1+yyTop])); + yyVal = current_variable; + } + +void case_797() +#line 6353 "ps-parser.jay" +{ + if (yyToken == Token.OPEN_BRACKET_EXPR) { + report.Error (650, lexer.Location, + "Syntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type"); + } else { + Error_SyntaxError (yyToken); + } + } + +void case_801() +#line 6371 "ps-parser.jay" +{ + foreach (var d in current_variable.Declarators) { + if (d.Initializer == null) + Error_MissingInitializer (d.Variable.Location); + } + } + +void case_804() +#line 6386 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[0+yyTop]; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, current_variable.TypeExpression, lt.Location); + var d = new BlockVariableDeclarator (li, null); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation (yyVals[-1+yyTop])); + } + +void case_805() +#line 6395 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, current_variable.TypeExpression, lt.Location); + var d = new BlockVariableDeclarator (li, (Expression) yyVals[0+yyTop]); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); + } + +void case_806() +#line 6404 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, (FullNamedExpression) yyVals[0+yyTop], lt.Location); + var d = new BlockVariableDeclarator (li, null, (FullNamedExpression) yyVals[0+yyTop]); + d.Location = GetLocation(yyVals[-2+yyTop]); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop])); + } + +void case_807() +#line 6414 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-4+yyTop]; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, (FullNamedExpression) yyVals[-2+yyTop], lt.Location); + var d = new BlockVariableDeclarator (li, (Expression) yyVals[0+yyTop], (FullNamedExpression) yyVals[-2+yyTop]); + d.Location = GetLocation(yyVals[-4+yyTop]); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop])); + } + +void case_809() +#line 6474 "ps-parser.jay" +{ + yyVal = yyVals[-1+yyTop]; + lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_811() +#line 6480 "ps-parser.jay" +{ + yyVal = yyVals[-1+yyTop]; + report.Error (1002, GetLocation (yyVals[0+yyTop]), "; expected"); + lexer.putback ('}'); + } + +void case_815() +#line 6505 "ps-parser.jay" +{ + Expression expr = (Expression) yyVals[0+yyTop]; + yyVal = new StatementExpression (new OptionalAssign (expr, lexer.Location)); + } + +void case_816() +#line 6510 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); + } + +void case_821() +#line 6538 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is EmptyStatement) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + yyVal = new If ((BooleanExpression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); + } + +void case_822() +#line 6547 "ps-parser.jay" +{ + yyVal = new If ((BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); + + if (yyVals[-2+yyTop] is EmptyStatement) + Warning_EmptyStatement (GetLocation (yyVals[-2+yyTop])); + if (yyVals[0+yyTop] is EmptyStatement) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + } + +void case_823() +#line 6557 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new If ((BooleanExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_824() +#line 6567 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + start_block (GetLocation (yyVals[0+yyTop])); + } + +void case_825() +#line 6572 "ps-parser.jay" +{ + yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, GetLocation (yyVals[-7+yyTop])); + end_block (GetLocation (yyVals[0+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop])); + } + +void case_826() +#line 6578 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Switch ((Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_836() +#line 6618 "ps-parser.jay" +{ + var label = (SwitchLabel) yyVals[0+yyTop]; + label.SectionStart = true; + current_block.AddStatement (label); + } + +void case_838() +#line 6631 "ps-parser.jay" +{ + yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + Lexer.AutoSemiInsertionAfter = 1; + } + +void case_839() +#line 6637 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } + +void case_840() +#line 6642 "ps-parser.jay" +{ + yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); + Lexer.AutoSemiInsertionAfter = 1; + } + +void case_845() +#line 6657 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + yyVal = new While ((BooleanExpression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); + } + +void case_846() +#line 6665 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new While ((BooleanExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_849() +#line 6689 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + + yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_850() +#line 6696 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + + Error_SyntaxError (yyToken); + yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), Location.Null); + } + +void case_851() +#line 6703 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + + Error_SyntaxError (yyToken); + + yyVal = new Do ((Statement) yyVals[-4+yyTop], (BooleanExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); + } + +void case_852() +#line 6715 "ps-parser.jay" +{ + start_block (GetLocation (yyVals[0+yyTop])); + current_block.IsCompilerGenerated = true; + lexer.ForInParsing = true; + yyVal = new Tuple(GetLocation(yyVals[-2+yyTop]), GetLocation(yyVals[-1+yyTop])); + } + +void case_853() +#line 6722 "ps-parser.jay" +{ + lexer.ForInParsing = false; + yyVal = yyVals[0+yyTop]; + } + +void case_855() +#line 6735 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + var blockVar = yyVals[-5+yyTop] as BlockVariable; + if (blockVar != null) { + if (blockVar == null || blockVar.Initializer != null || blockVar.Declarators != null) { + report.Error (7036, GetLocation (yyVals[-2+yyTop]), "Invalid for each initializer"); + yyVal = end_block (current_block.StartLocation); + } else { + var locations = (Tuple) yyVals[-6+yyTop]; + + Foreach f = new Foreach (blockVar.TypeExpression, blockVar.Variable, (Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], current_block, AsForEachType.ForEachKey, locations.Item1); + lbag.AddStatement (f, locations.Item2, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop])); + + end_block (GetLocation (yyVals[-1+yyTop])); + yyVal = f; + } + } else { + var expList = yyVals[-5+yyTop] as List; + var varRef = (yyVals[-5+yyTop] as FullNamedExpression) ?? ((expList != null && expList.Count == 1) ? (expList[0] as FullNamedExpression) : null); + if (varRef == null) { + report.Error (7041, GetLocation (yyVals[-5+yyTop]), "Invalid iterator initializer"); + yyVal = end_block (current_block.StartLocation); + } else { + var locations = (Tuple) yyVals[-6+yyTop]; + + Foreach f = new Foreach (varRef, (Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], current_block, AsForEachType.ForEachKey, locations.Item1); + lbag.AddStatement (f, locations.Item2, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop])); + + end_block (GetLocation (yyVals[-1+yyTop])); + yyVal = f; + } + } + } + +void case_856() +#line 6771 "ps-parser.jay" +{ + lexer.ForInParsing = false; + + var locations = (Tuple) yyVals[-2+yyTop]; + + For f = new For (locations.Item1); + current_block.AddStatement (f); + + var expList = yyVals[-1+yyTop] as List; + if (expList != null) + f.Initializer = ExpressionListToStatementList (expList); + else + f.Initializer = (Statement) yyVals[-1+yyTop]; + + /* Pass the "For" object to the iterator_part4*/ + oob_stack.Push (f); + + yyVal = f; + } + +void case_857() +#line 6792 "ps-parser.jay" +{ + var locations = (Tuple) yyVals[-1+yyTop]; + oob_stack.Pop (); + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + For f = ((For) yyVals[-2+yyTop]); + f.Statement = (Statement) yyVals[0+yyTop]; + lbag.AddStatement (f, current_block.StartLocation, GetLocation (yyVals[-3+yyTop]), GetLocation (locations.Item1), GetLocation (locations.Item2)); + + yyVal = end_block (GetLocation (yyVals[-3+yyTop])); + } + +void case_858() +#line 6805 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + yyVal = end_block (current_block.StartLocation); + } + +void case_859() +#line 6814 "ps-parser.jay" +{ + For f = (For) oob_stack.Peek (); + f.Condition = (BooleanExpression) yyVals[-1+yyTop]; + } + +void case_861() +#line 6824 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol `}'"); + For f = (For) oob_stack.Peek (); + f.Condition = (BooleanExpression) yyVals[-1+yyTop]; + yyVal = new Tuple (GetLocation (yyVals[0+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_862() +#line 6834 "ps-parser.jay" +{ + For f = (For) oob_stack.Peek (); + f.Iterator = (Statement) yyVals[-1+yyTop]; + yyVal = GetLocation (yyVals[0+yyTop]); + } + +void case_863() +#line 6839 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol expected ')'"); + For f = (For) oob_stack.Peek (); + f.Iterator = (Statement) yyVals[-1+yyTop]; + yyVal = GetLocation (yyVals[0+yyTop]); + } + +void case_868() +#line 6860 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + var type = (FullNamedExpression) yyVals[0+yyTop]; + if (type == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + type = new UntypedTypeExpression (GetLocation (yyVals[-1+yyTop])); + } + var li = GetOrCreateLocalVariable (current_block, lt.Value, 0, type, lt.Location); + current_variable = new BlockVariable (type, li); + } + +void case_869() +#line 6874 "ps-parser.jay" +{ + yyVal = current_variable; + current_variable = null; + } + +void case_879() +#line 6912 "ps-parser.jay" +{ + var sl = yyVals[-2+yyTop] as StatementList; + if (sl == null) { + sl = new StatementList ((Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop]); + lbag.AddStatement (sl, GetLocation (yyVals[-1+yyTop])); + } else { + sl.Add ((Statement) yyVals[0+yyTop]); + lbag.AppendTo (sl, GetLocation (yyVals[-1+yyTop])); + } + + yyVal = sl; + } + +void case_882() +#line 6936 "ps-parser.jay" +{ + start_block (GetLocation (yyVals[-5+yyTop])); + current_block.IsCompilerGenerated = true; + } + +void case_883() +#line 6941 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + var blockVar = yyVals[-6+yyTop] as BlockVariable; + if (blockVar != null) { + if (blockVar == null || blockVar.Initializer != null || blockVar.Declarators != null) { + report.Error (7036, GetLocation (yyVals[-6+yyTop]), "Invalid for each initializer"); + yyVal = end_block (current_block.StartLocation); + } else { + Foreach f = new Foreach (blockVar.TypeExpression, blockVar.Variable, (Expression) yyVals[-3+yyTop], (Statement) yyVals[0+yyTop], current_block, AsForEachType.ForEachValue, GetLocation (yyVals[-9+yyTop])); + lbag.AddStatement (f, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); + + end_block (GetLocation (yyVals[-5+yyTop])); + yyVal = f; + } + } else { + var expList = yyVals[-6+yyTop] as List; + var varRef = (yyVals[-6+yyTop] as FullNamedExpression) ?? ((expList != null && expList.Count == 1) ? (expList[0] as FullNamedExpression) : null); + if (varRef == null) { + report.Error (7041, GetLocation (yyVals[-6+yyTop]), "Invalid iterator initializer"); + yyVal = end_block (current_block.StartLocation); + } else { + Foreach f = new Foreach (varRef, (Expression) yyVals[-3+yyTop], (Statement) yyVals[0+yyTop], current_block, AsForEachType.ForEachValue, GetLocation (yyVals[-9+yyTop])); + lbag.AddStatement (f, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop])); + + end_block (GetLocation (yyVals[-5+yyTop])); + yyVal = f; + } + } + } + +void case_891() +#line 6986 "ps-parser.jay" +{ + yyVal = new Break (GetLocation (yyVals[-1+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_892() +#line 6994 "ps-parser.jay" +{ + yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_893() +#line 6999 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); + } + +void case_894() +#line 7007 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-1+yyTop]; + yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_895() +#line 7013 "ps-parser.jay" +{ + yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_896() +#line 7018 "ps-parser.jay" +{ + yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_897() +#line 7026 "ps-parser.jay" +{ + yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_898() +#line 7031 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } + +void case_899() +#line 7037 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + yyVal = new Return (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_900() +#line 7046 "ps-parser.jay" +{ + yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_901() +#line 7051 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + } + +void case_902() +#line 7057 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + yyVal = new Throw (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_903() +#line 7066 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-3+yyTop]; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if (yyVals[-1+yyTop] == null) { + report.Error (1627, GetLocation (yyVals[0+yyTop]), "Expression expected after yield return"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + yyVal = new Yield ((Expression) yyVals[-1+yyTop], lt.Location); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_904() +#line 7082 "ps-parser.jay" +{ + Lexer.AutoSemiInsertion = true; + + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) yyVals[-3+yyTop]; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if (yyVals[-1+yyTop] == null) { + report.Error (1627, GetLocation (yyVals[0+yyTop]), "Expression expected after yield return"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + yyVal = new Yield ((Expression) yyVals[-1+yyTop], lt.Location); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_905() +#line 7102 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-2+yyTop]; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + yyVal = new YieldBreak (lt.Location); + lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_909() +#line 7128 "ps-parser.jay" +{ + /*$$ = new TryFinally ((Statement) $2, (Block) $4, GetLocation ($1));*/ + yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_910() +#line 7134 "ps-parser.jay" +{ + /*$$ = new TryFinally (new TryCatch ((Block) $2, (List) $3, Location.Null, true), (Block) $5, GetLocation ($1));*/ + /*lbag.AddStatement ($$, GetLocation ($4));*/ + yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List) yyVals[-2+yyTop], Location.Null, true), (ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); + } + +void case_911() +#line 7141 "ps-parser.jay" +{ + Error_SyntaxError (1524, yyToken); + yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); + } + +void case_912() +#line 7149 "ps-parser.jay" +{ + var l = new List (2); + + l.Add ((Catch) yyVals[0+yyTop]); + yyVal = l; + } + +void case_913() +#line 7156 "ps-parser.jay" +{ + var l = (List) yyVals[-1+yyTop]; + + Catch c = (Catch) yyVals[0+yyTop]; + var prev_catch = l [l.Count - 1]; + if (prev_catch.IsGeneral && prev_catch.Filter == null) { + report.Error (1017, c.loc, "Try statement already has an empty catch block"); + } + + l.Add (c); + yyVal = l; + } + +void case_914() +#line 7172 "ps-parser.jay" +{ + /*$$ = new Catch ((Block) $2, GetLocation ($1));*/ + /*$$ = new Catch ((ExplicitBlock) $2, GetLocation ($1));*/ + var c = new Catch ((ExplicitBlock) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + c.Filter = (CatchFilterExpression) yyVals[-1+yyTop]; + yyVal = c; + } + +void case_915() +#line 7180 "ps-parser.jay" +{ + start_block (GetLocation (yyVals[-3+yyTop])); + var lt = (LocatedToken) yyVals[-2+yyTop]; + var type = (FullNamedExpression) yyVals[-1+yyTop]; + if (type == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + type = new UntypedExceptionExpression (lt.Location); + } + + if (type.Type != null && type.Type.IsDynamic) + type = new UntypedExceptionExpression (lt.Location); + + /*var c = new Catch (current_block, GetLocation ($1));*/ + var c = new Catch ((ExplicitBlock) current_block, GetLocation (yyVals[-4+yyTop])); + c.TypeExpression = type; + c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); + c.Variable.TypeExpr = c.TypeExpression; + current_block.AddLocalName (c.Variable); + + lbag.AddLocation (c, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = c; + } + +void case_916() +#line 7206 "ps-parser.jay" +{ + ((Catch) yyVals[-2+yyTop]).Filter = (CatchFilterExpression) yyVals[-1+yyTop]; + yyVal = yyVals[-2+yyTop]; + } + +void case_917() +#line 7211 "ps-parser.jay" +{ + if (yyToken == Token.CLOSE_PARENS) { + report.Error (1015, lexer.Location, + "A type that derives from `System.Exception', `object', or `string' expected"); + } else { + Error_SyntaxError (yyToken); + } + + yyVal = new Catch (null, GetLocation (yyVals[-2+yyTop])); + } + +void case_919() +#line 7226 "ps-parser.jay" +{ + if (lang_version <= LanguageVersion.V_5) + FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "exception filter"); + + yyVal = new CatchFilterExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } + +void case_922() +#line 7251 "ps-parser.jay" +{ + if (!settings.Unsafe) + Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); + } + +void case_924() +#line 7261 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + yyVal = new Lock ((Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); + } + +void case_925() +#line 7269 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Lock ((Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_926() +#line 7279 "ps-parser.jay" +{ + start_block (GetLocation (yyVals[-2+yyTop])); + + current_block.IsCompilerGenerated = true; + var lt = (LocatedToken) yyVals[0+yyTop]; + var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.FixedVariable | LocalVariable.Flags.Used, lt.Location); + current_block.AddLocalName (li); + current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); + } + +void case_927() +#line 7289 "ps-parser.jay" +{ + yyVal = current_variable; + current_variable = null; + } + +void case_928() +#line 7294 "ps-parser.jay" +{ + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + Fixed f = new Fixed ((Fixed.VariableDeclaration) yyVals[-1+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-9+yyTop])); + current_block.AddStatement (f); + yyVal = end_block (GetLocation (yyVals[-2+yyTop])); + } + +void case_929() +#line 7306 "ps-parser.jay" +{ + start_block (GetLocation (yyVals[-2+yyTop])); + + current_block.IsCompilerGenerated = true; + var lt = (LocatedToken) yyVals[0+yyTop]; + var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.UsingVariable | LocalVariable.Flags.Used, lt.Location); + current_block.AddLocalName (li); + current_variable = new Using.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); + } + +void case_930() +#line 7316 "ps-parser.jay" +{ + yyVal = current_variable; + current_variable = null; + } + +void case_931() +#line 7321 "ps-parser.jay" +{ + CheckIsPlayScript("using", GetLocation(yyVals[-7+yyTop])); + + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + Using u = new Using ((Using.VariableDeclaration) yyVals[-1+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-8+yyTop])); + current_block.AddStatement (u); + yyVal = end_block (GetLocation (yyVals[-2+yyTop])); + } + +void case_932() +#line 7332 "ps-parser.jay" +{ + CheckIsPlayScript("using", GetLocation(yyVals[-3+yyTop])); + + if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); + + yyVal = new Using ((Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); + } + +void case_933() +#line 7342 "ps-parser.jay" +{ + CheckIsPlayScript("using", GetLocation(yyVals[-2+yyTop])); + + Error_SyntaxError (yyToken); + + yyVal = new Using ((Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_935() +#line 7355 "ps-parser.jay" +{ + /* It has to be here for the parent to safely restore artificial block*/ + Error_SyntaxError (yyToken); + } + +void case_937() +#line 7367 "ps-parser.jay" +{ + current_variable.Initializer = (Expression) yyVals[0+yyTop]; + yyVal = current_variable; + } + +void case_938() +#line 7390 "ps-parser.jay" +{ + lexer.query_parsing = false; + + Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; + + from.Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; + yyVal = from; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + +void case_939() +#line 7402 "ps-parser.jay" +{ + Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; + + from.Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; + yyVal = from; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + +void case_940() +#line 7413 "ps-parser.jay" +{ + lexer.query_parsing = false; + yyVal = yyVals[-1+yyTop]; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + +void case_941() +#line 7420 "ps-parser.jay" +{ + yyVal = yyVals[-1+yyTop]; + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + +void case_942() +#line 7429 "ps-parser.jay" +{ + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + yyVal = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-3+yyTop]))); + } + +void case_943() +#line 7437 "ps-parser.jay" +{ + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + yyVal = new Linq.QueryExpression ( + new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-4+yyTop])) { + IdentifierType = (FullNamedExpression)yyVals[-3+yyTop] + } + ); + } + +void case_944() +#line 7452 "ps-parser.jay" +{ + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + yyVal = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-3+yyTop]))); + } + +void case_945() +#line 7460 "ps-parser.jay" +{ + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) yyVals[-2+yyTop]; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + yyVal = new Linq.QueryExpression ( + new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-4+yyTop])) { + IdentifierType = (FullNamedExpression)yyVals[-3+yyTop] + } + ); + } + +void case_947() +#line 7479 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-3+yyTop]; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + yyVal = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + } + +void case_949() +#line 7494 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-3+yyTop]; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + + yyVal = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop])) { + IdentifierType = (FullNamedExpression)yyVals[-4+yyTop] + }; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + } + +void case_950() +#line 7511 "ps-parser.jay" +{ + Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; + + if (yyVals[0+yyTop] != null) + head.Next = (Linq.AQueryClause)yyVals[0+yyTop]; + + if (yyVals[-2+yyTop] != null) { + Linq.AQueryClause clause = (Linq.AQueryClause)yyVals[-2+yyTop]; + clause.Tail.Next = head; + head = clause; + } + + yyVal = head; + } + +void case_951() +#line 7526 "ps-parser.jay" +{ + Linq.AQueryClause head = (Linq.AQueryClause)yyVals[0+yyTop]; + + if (yyVals[-1+yyTop] != null) { + Linq.AQueryClause clause = (Linq.AQueryClause)yyVals[-1+yyTop]; + clause.Tail.Next = head; + head = clause; + } + + yyVal = head; + } + +void case_953() +#line 7539 "ps-parser.jay" +{ + report.Error (742, GetLocation (yyVals[0+yyTop]), "Unexpected symbol `{0}'. A query body must end with select or group clause", GetSymbolName (yyToken)); + yyVal = yyVals[-1+yyTop]; + } + +void case_954() +#line 7544 "ps-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = null; + } + +void case_956() +#line 7556 "ps-parser.jay" +{ + yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + +void case_957() +#line 7563 "ps-parser.jay" +{ + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock)current_block); + } + +void case_958() +#line 7571 "ps-parser.jay" +{ + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + +void case_959() +#line 7578 "ps-parser.jay" +{ + yyVal = new Linq.GroupBy ((Linq.QueryBlock)current_block, (Expression)yyVals[-3+yyTop], linq_clause_blocks.Pop (), (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + +void case_961() +#line 7590 "ps-parser.jay" +{ + ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; + yyVal = yyVals[-1+yyTop]; + } + +void case_968() +#line 7610 "ps-parser.jay" +{ + var lt = (LocatedToken) yyVals[-3+yyTop]; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + yyVal = new Linq.Let ((Linq.QueryBlock) current_block, sn, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + } + +void case_970() +#line 7629 "ps-parser.jay" +{ + yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + +void case_971() +#line 7639 "ps-parser.jay" +{ + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + +void case_972() +#line 7647 "ps-parser.jay" +{ + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + +void case_973() +#line 7655 "ps-parser.jay" +{ + current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + +void case_974() +#line 7663 "ps-parser.jay" +{ + current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); + current_block.SetEndLocation (lexer.Location); + + var outer_selector = linq_clause_blocks.Pop (); + var block = linq_clause_blocks.Pop (); + + var lt = (LocatedToken) yyVals[-10+yyTop]; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + Linq.RangeVariable into; + + if (yyVals[0+yyTop] == null) { + into = sn; + yyVal = new Linq.Join (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, GetLocation (yyVals[-11+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop])); + } else { + /**/ + /* Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions*/ + /**/ + var parent = block.Parent; + while (parent is Linq.QueryBlock) { + parent = parent.Parent; + } + current_block.Parent = parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + + lt = (LocatedToken) yyVals[0+yyTop]; + into = new Linq.RangeVariable (lt.Value, lt.Location); + + yyVal = new Linq.GroupJoin (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, into, GetLocation (yyVals[-11+yyTop])); + lbag.AddLocation (yyVal, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); + } + + current_block = block.Parent; + ((Linq.QueryBlock)current_block).AddRangeVariable (into); + } + +void case_975() +#line 7701 "ps-parser.jay" +{ + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + +void case_976() +#line 7709 "ps-parser.jay" +{ + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + +void case_977() +#line 7717 "ps-parser.jay" +{ + current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + +void case_978() +#line 7725 "ps-parser.jay" +{ + current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); + current_block.SetEndLocation (lexer.Location); + + var outer_selector = linq_clause_blocks.Pop (); + var block = linq_clause_blocks.Pop (); + + var lt = (LocatedToken) yyVals[-10+yyTop]; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + Linq.RangeVariable into; + + if (yyVals[0+yyTop] == null) { + into = sn; + yyVal = new Linq.Join (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, GetLocation (yyVals[-12+yyTop])) { + IdentifierType = (FullNamedExpression)yyVals[-11+yyTop] + }; + } else { + /**/ + /* Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions*/ + /**/ + var parent = block.Parent; + while (parent is Linq.QueryBlock) { + parent = parent.Parent; + } + current_block.Parent = parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + + lt = (LocatedToken) yyVals[0+yyTop]; + into = new Linq.RangeVariable (lt.Value, lt.Location); /* TODO:*/ + + yyVal = new Linq.GroupJoin (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, into, GetLocation (yyVals[-12+yyTop])) { + IdentifierType = (FullNamedExpression)yyVals[-11+yyTop] + }; + } + + current_block = block.Parent; + ((Linq.QueryBlock)current_block).AddRangeVariable (into); + } + +void case_982() +#line 7780 "ps-parser.jay" +{ + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + yyVal = yyVals[0+yyTop]; + } + +void case_984() +#line 7791 "ps-parser.jay" +{ + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + +void case_985() +#line 7798 "ps-parser.jay" +{ + ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; + yyVal = yyVals[-3+yyTop]; + } + +void case_987() +#line 7807 "ps-parser.jay" +{ + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location); + } + +void case_988() +#line 7814 "ps-parser.jay" +{ + ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; + yyVal = yyVals[-3+yyTop]; + } + +void case_990() +#line 7826 "ps-parser.jay" +{ + yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_991() +#line 7831 "ps-parser.jay" +{ + yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_993() +#line 7843 "ps-parser.jay" +{ + yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_994() +#line 7848 "ps-parser.jay" +{ + yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + } + +void case_996() +#line 7858 "ps-parser.jay" +{ + /* query continuation block is not linked with query block but with block*/ + /* before. This means each query can use same range variable names for*/ + /* different identifiers.*/ + + current_block.SetEndLocation (GetLocation (yyVals[-1+yyTop])); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + +void case_997() +#line 7874 "ps-parser.jay" +{ + var current_block = linq_clause_blocks.Pop (); + var lt = (LocatedToken) yyVals[-2+yyTop]; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + yyVal = new Linq.QueryStartClause ((Linq.QueryBlock)current_block, null, rv, GetLocation (yyVals[-3+yyTop])) { + next = (Linq.AQueryClause)yyVals[0+yyTop] + }; + } + +void case_1000() +#line 7901 "ps-parser.jay" +{ + current_container = current_type = new Class (current_container, new MemberName (""), Modifiers.PUBLIC, null); + + /* (ref object retval)*/ + Parameter [] mpar = new Parameter [1]; + mpar [0] = new Parameter (new TypeExpression (compiler.BuiltinTypes.Object, Location.Null), "$retval", Parameter.Modifier.REF, null, Location.Null); + + ParametersCompiled pars = new ParametersCompiled (mpar); + var mods = Modifiers.PUBLIC | Modifiers.STATIC; + if (settings.Unsafe) + mods |= Modifiers.UNSAFE; + + current_local_parameters = pars; + var method = new InteractiveMethod ( + current_type, + new TypeExpression (compiler.BuiltinTypes.Void, Location.Null), + mods, + pars); + + current_type.AddMember (method); + oob_stack.Push (method); + + interactive_async = false; + + ++lexer.parsing_block; + start_block (lexer.Location); + } + +void case_1001() +#line 7929 "ps-parser.jay" +{ + --lexer.parsing_block; + var method = (InteractiveMethod) oob_stack.Pop (); + method.Block = (ToplevelBlock) end_block(lexer.Location); + + if (interactive_async == true) { + method.ChangeToAsync (); + } + + InteractiveResult = (Class) pop_current_class (); + current_local_parameters = null; + } + +void case_1011() +#line 7996 "ps-parser.jay" +{ + module.DocumentationBuilder.ParsedParameters = (List)yyVals[-1+yyTop]; + yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], MemberCache.IndexerNameAlias, Location.Null); + } + +void case_1012() +#line 8001 "ps-parser.jay" +{ + var p = (List)yyVals[0+yyTop] ?? new List (1); + p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); + module.DocumentationBuilder.ParsedParameters = p; + module.DocumentationBuilder.ParsedOperator = Operator.OpType.Explicit; + yyVal = null; + } + +void case_1013() +#line 8009 "ps-parser.jay" +{ + var p = (List)yyVals[0+yyTop] ?? new List (1); + p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); + module.DocumentationBuilder.ParsedParameters = p; + module.DocumentationBuilder.ParsedOperator = Operator.OpType.Implicit; + yyVal = null; + } + +void case_1014() +#line 8017 "ps-parser.jay" +{ + var p = (List)yyVals[0+yyTop] ?? new List (1); + module.DocumentationBuilder.ParsedParameters = p; + module.DocumentationBuilder.ParsedOperator = (Operator.OpType) yyVals[-1+yyTop]; + yyVal = null; + } + +void case_1022() +#line 8055 "ps-parser.jay" +{ + var parameters = new List (); + parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); + yyVal = parameters; + } + +void case_1023() +#line 8061 "ps-parser.jay" +{ + var parameters = yyVals[-2+yyTop] as List; + parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); + yyVal = parameters; + } + +void case_1024() +#line 8070 "ps-parser.jay" +{ + if (yyVals[-1+yyTop] != null) + yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); + else + yyVal = new DocumentationParameter ((FullNamedExpression) yyVals[0+yyTop]); + } + +#line default + static readonly short [] yyLhs = { -1, + 0, 4, 0, 0, 1, 1, 1, 1, 2, 2, + 11, 11, 12, 12, 13, 13, 16, 16, 18, 17, + 19, 17, 20, 20, 15, 21, 14, 24, 22, 22, + 22, 22, 27, 28, 30, 31, 8, 26, 26, 32, + 32, 32, 33, 33, 34, 34, 29, 29, 7, 7, + 6, 6, 35, 35, 36, 36, 37, 37, 37, 38, + 38, 38, 42, 39, 43, 39, 40, 40, 40, 40, + 40, 40, 9, 9, 10, 10, 52, 50, 55, 51, + 51, 51, 51, 53, 53, 53, 54, 54, 59, 56, + 57, 58, 58, 60, 60, 60, 60, 60, 64, 62, + 61, 61, 65, 65, 66, 66, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, + 67, 78, 79, 81, 76, 82, 75, 85, 87, 90, + 91, 92, 45, 45, 93, 93, 96, 68, 97, 97, + 98, 98, 99, 95, 95, 102, 100, 100, 101, 105, + 69, 109, 69, 69, 104, 112, 104, 106, 106, 113, + 113, 114, 115, 114, 110, 110, 116, 116, 117, 118, + 108, 108, 111, 111, 121, 41, 124, 126, 119, 127, + 119, 128, 119, 129, 130, 131, 119, 119, 119, 125, + 125, 133, 120, 120, 123, 123, 135, 135, 135, 135, + 135, 135, 136, 136, 138, 138, 138, 141, 138, 139, + 139, 142, 142, 143, 143, 143, 137, 137, 137, 144, + 144, 146, 148, 149, 70, 151, 152, 153, 72, 147, + 147, 147, 147, 147, 157, 154, 158, 155, 156, 156, + 156, 159, 161, 162, 164, 165, 46, 46, 163, 163, + 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, + 170, 73, 169, 169, 171, 171, 174, 168, 168, 173, + 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, + 173, 173, 173, 177, 175, 178, 175, 175, 175, 179, + 74, 181, 71, 184, 185, 71, 180, 187, 180, 182, + 182, 188, 188, 189, 190, 189, 191, 186, 183, 183, + 183, 183, 183, 195, 192, 196, 193, 194, 194, 77, + 198, 200, 201, 47, 197, 197, 197, 199, 199, 199, + 202, 202, 203, 204, 203, 203, 203, 205, 206, 207, + 48, 49, 208, 208, 209, 210, 210, 23, 211, 211, + 211, 212, 212, 213, 213, 213, 215, 215, 217, 84, + 145, 122, 122, 150, 150, 218, 218, 216, 216, 219, + 219, 220, 220, 222, 222, 94, 176, 176, 107, 107, + 140, 140, 224, 224, 172, 172, 223, 223, 223, 227, + 227, 228, 226, 226, 226, 226, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 231, 231, 231, 231, 232, 232, 232, 232, + 249, 249, 250, 251, 251, 233, 233, 248, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, + 248, 248, 248, 235, 235, 235, 247, 247, 256, 260, + 258, 258, 257, 257, 259, 259, 259, 261, 261, 261, + 261, 262, 254, 254, 255, 255, 255, 255, 263, 263, + 264, 264, 264, 264, 266, 266, 266, 265, 236, 236, + 236, 236, 268, 268, 268, 253, 253, 269, 237, 238, + 238, 239, 240, 244, 244, 244, 244, 270, 270, 270, + 270, 225, 225, 271, 271, 272, 272, 246, 246, 273, + 275, 274, 276, 276, 277, 25, 25, 214, 241, 241, + 242, 242, 243, 243, 278, 280, 245, 281, 282, 245, + 284, 285, 283, 286, 287, 283, 234, 288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, + 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, + 289, 290, 290, 290, 290, 290, 290, 290, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 292, + 292, 292, 292, 292, 292, 292, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 294, 294, 294, 294, 294, + 295, 295, 295, 296, 296, 296, 297, 297, 297, 298, + 298, 298, 299, 299, 299, 300, 300, 301, 301, 301, + 301, 302, 302, 302, 302, 302, 302, 302, 302, 302, + 302, 302, 302, 302, 302, 303, 303, 63, 63, 304, + 304, 103, 306, 307, 308, 309, 310, 311, 44, 83, + 83, 80, 80, 132, 132, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 86, 86, 86, 160, 160, 160, 88, 88, + 88, 89, 89, 313, 313, 314, 314, 315, 315, 316, + 316, 316, 316, 221, 221, 317, 317, 319, 134, 321, + 279, 325, 323, 324, 324, 326, 320, 320, 322, 322, + 328, 327, 318, 318, 329, 329, 330, 330, 330, 330, + 334, 334, 335, 335, 335, 332, 332, 332, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, 332, 336, + 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 350, 350, 350, 350, 337, 351, 333, + 352, 267, 267, 354, 354, 252, 252, 353, 356, 331, + 358, 331, 359, 331, 355, 355, 355, 357, 357, 362, + 362, 361, 361, 363, 363, 363, 363, 360, 338, 338, + 338, 349, 349, 364, 365, 365, 339, 339, 368, 369, + 366, 366, 366, 371, 367, 367, 370, 370, 370, 373, + 373, 373, 375, 374, 374, 372, 372, 376, 376, 376, + 340, 340, 340, 340, 377, 377, 381, 382, 378, 378, + 378, 384, 379, 386, 383, 389, 383, 383, 392, 388, + 388, 391, 391, 393, 393, 387, 387, 396, 385, 385, + 395, 395, 390, 390, 394, 394, 397, 398, 398, 399, + 400, 401, 380, 341, 341, 341, 341, 341, 341, 341, + 402, 403, 403, 404, 404, 404, 405, 405, 405, 406, + 406, 406, 407, 407, 407, 408, 408, 342, 342, 342, + 342, 409, 409, 410, 412, 410, 410, 411, 411, 343, + 344, 413, 347, 345, 345, 415, 416, 348, 418, 419, + 346, 346, 346, 417, 417, 414, 414, 305, 305, 305, + 305, 420, 420, 422, 422, 424, 423, 425, 423, 421, + 421, 421, 421, 421, 429, 427, 430, 431, 427, 426, + 426, 432, 432, 432, 432, 432, 437, 433, 438, 434, + 439, 440, 441, 435, 443, 444, 445, 435, 442, 442, + 447, 436, 446, 450, 446, 449, 452, 449, 448, 448, + 448, 451, 451, 451, 428, 453, 428, 3, 3, 455, + 3, 3, 456, 456, 454, 454, 5, 457, 457, 461, + 457, 457, 457, 457, 458, 458, 459, 462, 459, 460, + 460, 463, 463, 464, + }; + static readonly short [] yyLen = { 2, + 2, 0, 3, 1, 2, 4, 3, 1, 0, 1, + 1, 2, 4, 2, 1, 1, 1, 1, 0, 3, + 0, 5, 1, 2, 1, 4, 1, 0, 5, 3, + 5, 2, 0, 0, 0, 0, 11, 0, 1, 1, + 3, 1, 0, 1, 0, 1, 2, 3, 0, 1, + 0, 1, 0, 1, 1, 2, 1, 1, 2, 1, + 1, 1, 0, 3, 0, 5, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 2, 0, 3, 0, 6, + 3, 2, 1, 1, 1, 1, 1, 3, 0, 3, + 1, 0, 3, 0, 1, 1, 3, 3, 0, 4, + 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 3, 0, 3, 0, 5, 0, 0, 0, + 0, 0, 17, 5, 0, 2, 0, 9, 0, 1, + 1, 2, 4, 0, 1, 0, 3, 1, 1, 0, + 9, 0, 10, 8, 0, 0, 3, 0, 1, 1, + 2, 3, 0, 6, 0, 1, 1, 2, 5, 0, + 4, 2, 1, 1, 0, 3, 0, 0, 11, 0, + 9, 0, 9, 0, 0, 0, 14, 10, 5, 0, + 2, 1, 1, 1, 0, 1, 1, 3, 3, 5, + 1, 1, 1, 3, 4, 2, 5, 0, 7, 0, + 1, 1, 2, 1, 1, 1, 4, 5, 3, 0, + 2, 0, 0, 0, 12, 0, 0, 0, 15, 1, + 2, 1, 2, 1, 0, 5, 0, 5, 1, 1, + 1, 0, 0, 0, 0, 0, 17, 5, 0, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 5, 1, 1, 1, 1, 0, 8, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 7, 0, 7, 2, 2, 0, + 9, 0, 10, 0, 0, 11, 0, 0, 3, 0, + 1, 1, 2, 4, 0, 7, 0, 2, 2, 2, + 1, 1, 1, 0, 5, 0, 5, 1, 1, 2, + 0, 0, 0, 12, 0, 2, 2, 0, 1, 2, + 1, 3, 2, 0, 5, 3, 1, 0, 0, 0, + 14, 6, 0, 1, 2, 0, 1, 1, 1, 4, + 4, 2, 2, 0, 3, 2, 1, 3, 0, 3, + 1, 1, 3, 1, 2, 3, 4, 0, 3, 1, + 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 1, 1, 1, 2, 2, 1, 2, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 3, 4, 5, 5, + 3, 4, 2, 3, 2, 3, 5, 5, 5, 4, + 3, 3, 4, 4, 4, 4, 3, 4, 1, 1, + 1, 1, 0, 1, 1, 3, 2, 3, 3, 3, + 1, 1, 0, 1, 1, 3, 3, 2, 1, 1, + 2, 2, 2, 2, 3, 2, 4, 1, 4, 5, + 4, 3, 1, 3, 2, 1, 3, 1, 1, 4, + 3, 2, 2, 2, 2, 4, 5, 1, 1, 4, + 4, 1, 2, 2, 3, 1, 2, 2, 4, 1, + 1, 1, 1, 3, 4, 1, 1, 1, 4, 4, + 4, 2, 4, 2, 0, 0, 9, 0, 0, 10, + 0, 0, 10, 0, 0, 11, 4, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 3, 3, 3, 3, 3, 3, 1, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, + 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, + 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, + 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 1, 5, 4, + 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 17, 0, + 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 2, 3, 0, 2, 3, 0, 2, + 3, 0, 1, 1, 2, 4, 3, 1, 3, 1, + 3, 1, 1, 0, 1, 1, 1, 0, 4, 0, + 4, 0, 5, 0, 3, 1, 1, 1, 1, 1, + 0, 4, 0, 1, 1, 2, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 4, 1, 2, 2, 1, 1, 1, 1, 0, 8, + 0, 6, 0, 8, 0, 2, 1, 0, 1, 0, + 1, 1, 2, 2, 4, 4, 6, 1, 2, 2, + 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 5, 7, 4, 0, 8, 4, 0, 1, 2, 1, + 2, 1, 2, 0, 1, 1, 2, 3, 3, 1, + 1, 1, 1, 1, 5, 4, 1, 1, 7, 3, + 6, 0, 4, 0, 6, 0, 5, 1, 0, 4, + 2, 2, 2, 1, 1, 0, 1, 0, 6, 1, + 0, 2, 0, 1, 0, 1, 1, 1, 3, 0, + 0, 0, 10, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 3, 4, 3, 3, 3, 2, 3, + 3, 2, 4, 4, 3, 0, 1, 3, 4, 5, + 3, 1, 2, 3, 0, 8, 3, 0, 4, 2, + 2, 0, 3, 5, 4, 0, 0, 10, 0, 0, + 9, 5, 4, 2, 1, 0, 2, 2, 2, 2, + 2, 4, 5, 4, 5, 0, 5, 0, 6, 3, + 2, 2, 2, 1, 0, 3, 0, 0, 6, 1, + 2, 1, 1, 1, 1, 1, 0, 5, 0, 3, + 0, 0, 0, 12, 0, 0, 0, 13, 0, 2, + 0, 3, 1, 0, 4, 1, 0, 4, 1, 2, + 2, 1, 2, 2, 0, 0, 4, 2, 3, 0, + 4, 2, 2, 3, 0, 1, 2, 2, 3, 0, + 7, 4, 4, 3, 1, 3, 0, 0, 4, 0, + 1, 1, 3, 2, + }; + static readonly short [] yyDefRed = { 0, + 8, 0, 0, 0, 0, 0, 0, 0, 2, 4, + 0, 0, 11, 14, 0, 998, 0, 0, 1002, 0, + 0, 0, 17, 15, 16, 23, 18, 0, 25, 27, + 0, 0, 0, 369, 1015, 1007, 0, 10, 1, 0, + 0, 0, 12, 0, 816, 0, 0, 408, 415, 0, + 0, 0, 403, 0, 0, 847, 405, 442, 0, 404, + 0, 880, 0, 0, 0, 411, 0, 413, 0, 440, + 0, 407, 409, 0, 0, 509, 0, 441, 0, 0, + 412, 414, 0, 439, 922, 0, 410, 0, 0, 0, + 0, 0, 0, 0, 530, 0, 778, 0, 0, 0, + 0, 0, 0, 0, 0, 438, 0, 531, 469, 0, + 815, 433, 435, 406, 0, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 436, 437, 0, 0, 0, 0, 773, 571, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 660, 658, 659, 661, 760, 0, 743, 745, + 0, 741, 744, 761, 763, 764, 765, 766, 767, 768, + 769, 770, 771, 772, 762, 890, 0, 817, 818, 841, + 842, 843, 844, 0, 884, 885, 886, 887, 888, 889, + 0, 0, 0, 0, 385, 398, 0, 0, 0, 384, + 358, 359, 536, 0, 0, 0, 21, 0, 1006, 24, + 999, 0, 0, 275, 274, 271, 276, 277, 270, 290, + 289, 281, 282, 278, 280, 279, 283, 272, 273, 284, + 285, 286, 292, 291, 287, 288, 293, 0, 0, 1018, + 0, 1008, 3, 77, 0, 0, 0, 75, 13, 0, + 443, 0, 0, 0, 788, 891, 542, 718, 920, 0, + 787, 786, 0, 893, 892, 0, 570, 0, 0, 0, + 0, 0, 0, 564, 0, 852, 0, 545, 0, 0, + 0, 0, 0, 0, 0, 519, 0, 0, 0, 518, + 515, 0, 899, 0, 0, 0, 0, 902, 0, 0, + 0, 569, 563, 544, 921, 0, 0, 0, 0, 0, + 0, 388, 0, 0, 387, 0, 0, 0, 0, 0, + 567, 0, 561, 0, 566, 560, 577, 572, 578, 573, + 565, 559, 581, 576, 579, 574, 580, 575, 568, 562, + 0, 0, 538, 434, 362, 363, 0, 0, 0, 0, + 453, 0, 455, 0, 512, 513, 0, 0, 0, 0, + 779, 0, 0, 0, 481, 0, 0, 475, 532, 528, + 174, 173, 533, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 722, 742, 1001, 812, 813, 777, + 814, 759, 746, 775, 774, 776, 747, 748, 749, 750, + 751, 752, 753, 754, 755, 756, 757, 758, 0, 0, + 954, 969, 0, 0, 955, 957, 0, 981, 940, 938, + 962, 0, 0, 960, 963, 964, 965, 966, 941, 939, + 1004, 0, 0, 357, 0, 0, 397, 30, 0, 396, + 0, 399, 0, 0, 20, 0, 0, 1014, 0, 370, + 0, 0, 1016, 0, 6, 33, 76, 511, 0, 508, + 0, 506, 0, 0, 0, 489, 0, 0, 485, 490, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 551, + 662, 0, 896, 894, 663, 0, 0, 0, 0, 0, + 0, 898, 897, 0, 0, 901, 900, 911, 0, 0, + 0, 912, 0, 923, 0, 785, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 548, 0, 0, + 446, 447, 726, 725, 366, 367, 0, 461, 0, 0, + 0, 0, 462, 451, 0, 454, 456, 0, 502, 0, + 0, 0, 905, 0, 0, 0, 0, 0, 0, 471, + 472, 467, 477, 0, 0, 0, 642, 652, 654, 643, + 644, 645, 646, 647, 648, 649, 650, 651, 655, 653, + 586, 583, 588, 585, 587, 584, 598, 0, 0, 0, + 599, 0, 595, 582, 0, 596, 0, 597, 0, 604, + 0, 605, 0, 606, 0, 612, 0, 613, 0, 614, + 0, 615, 0, 0, 0, 0, 0, 623, 0, 626, + 0, 629, 0, 632, 0, 635, 0, 637, 0, 0, + 850, 0, 811, 810, 809, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 953, 952, 0, 961, 0, 951, + 0, 0, 0, 524, 526, 0, 523, 26, 0, 1012, + 1013, 383, 0, 0, 380, 215, 214, 216, 0, 0, + 212, 0, 0, 1022, 1010, 83, 85, 86, 0, 0, + 78, 0, 0, 87, 89, 0, 460, 510, 0, 0, + 498, 493, 494, 0, 491, 492, 488, 444, 445, 464, + 0, 740, 0, 0, 735, 737, 738, 739, 541, 793, + 557, 926, 858, 0, 503, 0, 853, 0, 0, 0, + 202, 0, 0, 0, 196, 0, 0, 203, 0, 895, + 823, 819, 0, 925, 0, 0, 516, 0, 0, 540, + 539, 826, 0, 0, 0, 0, 909, 0, 913, 543, + 781, 933, 0, 784, 929, 783, 789, 797, 0, 0, + 846, 0, 0, 944, 0, 942, 0, 554, 452, 0, + 365, 0, 0, 0, 463, 448, 0, 0, 501, 499, + 465, 466, 904, 903, 780, 482, 479, 480, 478, 470, + 468, 476, 534, 529, 640, 0, 0, 0, 657, 656, + 970, 0, 946, 0, 971, 956, 958, 967, 0, 982, + 0, 950, 996, 31, 360, 361, 29, 525, 527, 22, + 717, 716, 0, 715, 0, 379, 394, 393, 1024, 213, + 1019, 0, 0, 82, 79, 0, 0, 0, 42, 40, + 34, 0, 507, 0, 0, 487, 486, 727, 728, 719, + 736, 0, 0, 0, 505, 0, 854, 856, 881, 0, + 0, 206, 0, 0, 0, 0, 0, 924, 520, 517, + 521, 824, 0, 917, 0, 914, 910, 932, 0, 0, + 808, 796, 0, 0, 0, 802, 845, 945, 943, 0, + 0, 368, 449, 500, 459, 458, 457, 641, 639, 723, + 0, 948, 0, 975, 0, 0, 0, 990, 991, 984, + 0, 382, 381, 1023, 0, 0, 88, 81, 0, 90, + 0, 0, 495, 0, 0, 0, 0, 0, 868, 504, + 0, 0, 0, 219, 0, 0, 0, 0, 204, 199, + 0, 820, 0, 0, 0, 0, 935, 0, 0, 0, + 0, 792, 803, 0, 0, 851, 848, 0, 0, 947, + 0, 0, 0, 968, 0, 997, 1011, 0, 102, 0, + 0, 95, 96, 101, 35, 41, 497, 0, 937, 0, + 0, 872, 0, 0, 874, 0, 0, 0, 0, 0, + 217, 0, 0, 546, 386, 0, 0, 822, 832, 0, + 840, 0, 0, 0, 830, 836, 919, 915, 934, 930, + 0, 0, 0, 0, 0, 849, 949, 0, 972, 959, + 0, 0, 986, 0, 99, 93, 0, 0, 794, 927, + 0, 0, 857, 865, 864, 859, 861, 882, 221, 218, + 207, 392, 208, 0, 200, 552, 0, 825, 0, 837, + 0, 829, 831, 0, 0, 790, 0, 805, 549, 0, + 976, 0, 993, 994, 987, 80, 0, 97, 98, 0, + 0, 0, 0, 869, 855, 0, 0, 0, 720, 547, + 0, 839, 838, 0, 931, 0, 0, 555, 0, 0, + 0, 100, 0, 0, 0, 0, 62, 47, 0, 55, + 57, 58, 60, 61, 67, 68, 69, 70, 71, 72, + 175, 36, 928, 878, 860, 0, 876, 0, 883, 209, + 0, 553, 731, 916, 807, 550, 0, 0, 973, 988, + 48, 65, 0, 681, 691, 682, 679, 687, 676, 686, + 680, 678, 677, 684, 683, 689, 685, 688, 690, 692, + 0, 0, 674, 59, 56, 0, 0, 863, 862, 0, + 0, 0, 556, 977, 0, 0, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 675, 194, 176, 193, 37, + 879, 729, 730, 721, 0, 0, 0, 0, 0, 0, + 0, 372, 0, 0, 0, 0, 0, 0, 184, 664, + 0, 0, 732, 0, 0, 974, 66, 348, 0, 331, + 0, 189, 177, 0, 0, 180, 182, 0, 0, 354, + 0, 0, 248, 0, 134, 0, 978, 980, 0, 337, + 336, 0, 376, 0, 0, 0, 0, 373, 0, 0, + 355, 352, 0, 665, 243, 129, 0, 332, 0, 0, + 0, 377, 0, 0, 185, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 347, 333, 0, 341, 192, 178, 0, + 0, 181, 183, 0, 402, 0, 0, 0, 0, 400, + 0, 0, 349, 0, 330, 0, 0, 0, 191, 188, + 0, 695, 0, 0, 666, 0, 704, 698, 0, 244, + 130, 0, 346, 0, 0, 342, 179, 0, 701, 0, + 0, 705, 401, 0, 0, 350, 0, 44, 334, 186, + 707, 0, 667, 245, 131, 0, 345, 0, 712, 0, + 713, 710, 0, 708, 0, 0, 0, 351, 187, 0, + 0, 121, 0, 0, 115, 109, 0, 0, 105, 107, + 108, 110, 111, 112, 113, 114, 116, 117, 118, 119, + 120, 0, 260, 255, 253, 254, 256, 257, 258, 259, + 0, 0, 251, 0, 711, 709, 126, 0, 0, 668, + 106, 0, 246, 252, 132, 0, 125, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 123, 122, 261, + 269, 0, 0, 0, 0, 0, 371, 0, 299, 0, + 0, 300, 298, 0, 374, 0, 0, 0, 0, 0, + 0, 0, 669, 247, 133, 127, 0, 137, 0, 0, + 0, 0, 0, 226, 375, 0, 267, 0, 150, 264, + 263, 262, 136, 0, 0, 296, 390, 0, 389, 0, + 294, 0, 0, 222, 0, 148, 146, 0, 145, 304, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, + 0, 0, 0, 0, 0, 141, 0, 308, 0, 0, + 154, 0, 0, 0, 0, 0, 0, 223, 0, 0, + 0, 0, 160, 147, 149, 0, 138, 142, 323, 0, + 305, 0, 0, 317, 0, 0, 0, 312, 297, 172, + 0, 0, 0, 0, 167, 301, 295, 0, 0, 0, + 157, 0, 151, 161, 0, 0, 0, 0, 319, 0, + 320, 309, 0, 0, 303, 313, 0, 0, 153, 168, + 0, 266, 268, 265, 234, 0, 224, 0, 0, 0, + 143, 324, 326, 306, 0, 0, 318, 0, 171, 0, + 227, 0, 0, 231, 233, 163, 0, 0, 0, 0, + 0, 235, 237, 225, 0, 328, 329, 325, 327, 315, + 169, 228, 0, 0, 164, 317, 0, 241, 240, 239, + 236, 238, 316, 229, + }; + protected static readonly short [] yyDgoto = { 7, + 8, 39, 9, 40, 10, 1091, 41, 245, 742, 462, + 12, 13, 23, 24, 25, 26, 27, 208, 474, 42, + 29, 30, 314, 466, 199, 861, 706, 941, 1092, 1048, + 1177, 862, 1606, 586, 1118, 1119, 1120, 1121, 1122, 1375, + 1376, 1153, 1186, 1125, 1126, 1127, 1128, 1129, 1130, 248, + 701, 484, 702, 703, 936, 704, 705, 940, 858, 991, + 992, 993, 421, 1087, 1377, 1378, 1379, 1380, 1381, 1382, + 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1171, + 1408, 1416, 1195, 1212, 1246, 1287, 1278, 1308, 1325, 1345, + 1367, 1434, 1458, 1014, 1488, 1474, 1504, 1505, 1506, 1489, + 1524, 1502, 512, 1501, 1485, 1521, 1478, 1513, 1494, 1543, + 901, 1519, 1522, 1523, 1605, 1544, 1545, 1541, 1131, 1198, + 1176, 1213, 744, 1254, 1299, 1318, 1259, 1260, 1241, 1285, + 1358, 1172, 1300, 1199, 745, 746, 747, 748, 689, 1013, + 1098, 690, 691, 1011, 1438, 1499, 1577, 1550, 1593, 1447, + 1482, 1601, 1617, 1578, 1579, 1621, 1613, 1614, 1244, 1289, + 1277, 1344, 1401, 1366, 1433, 1402, 1403, 1430, 1472, 1452, + 1573, 315, 238, 1483, 1431, 1305, 1496, 1492, 1462, 1509, + 1491, 1536, 1531, 1507, 1557, 1562, 1534, 1537, 1538, 1616, + 1563, 1532, 1533, 1608, 1597, 1598, 1230, 1252, 1295, 1280, + 1316, 1296, 1297, 1334, 1249, 1332, 1356, 1239, 1240, 467, + 201, 112, 345, 346, 557, 480, 239, 1215, 684, 685, + 843, 1015, 204, 849, 470, 113, 1309, 1310, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 260, + 720, 135, 491, 497, 498, 136, 366, 582, 367, 811, + 368, 807, 499, 500, 712, 713, 714, 736, 492, 292, + 471, 676, 137, 370, 138, 374, 0, 509, 1100, 1064, + 787, 1107, 422, 749, 1101, 911, 1147, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 821, 155, 156, 516, 1242, 1276, 1341, 1365, + 1432, 1173, 1326, 1327, 1363, 1364, 844, 723, 501, 870, + 1141, 1204, 423, 158, 650, 554, 1144, 1182, 724, 725, + 424, 425, 426, 161, 162, 163, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 175, 439, + 576, 176, 256, 540, 780, 900, 904, 542, 872, 902, + 905, 1001, 906, 440, 177, 178, 179, 753, 963, 1022, + 964, 1023, 1024, 1072, 1025, 1026, 180, 181, 182, 183, + 184, 978, 737, 507, 738, 951, 739, 1006, 952, 1007, + 1135, 1096, 1057, 1136, 949, 1003, 1137, 1138, 277, 953, + 1097, 185, 186, 187, 188, 189, 190, 295, 531, 532, + 766, 1074, 307, 947, 873, 1093, 969, 899, 1075, 191, + 450, 192, 451, 923, 979, 452, 453, 670, 661, 662, + 926, 454, 455, 456, 457, 458, 927, 656, 925, 1082, + 1185, 1226, 981, 1109, 1206, 830, 664, 831, 1042, 985, + 1043, 1111, 931, 211, 17, 19, 36, 37, 242, 692, + 853, 481, 693, 694, + }; + protected static readonly short [] yySindex = { -134, + 0, -214, 369, 33, -207, -133, 0, 378, 0, 0, + -207, 33, 0, 0, 334, 0, 3246, -207, 0, 9917, + 545, 427, 0, 0, 0, 0, 0, -69, 0, 0, + 523, 594, 9983, 0, 0, 0, 798, 0, 0, 378, + 506, -207, 0, 521, 0, 513, 548, 0, 0, 203, + -263, -188, 0, 591, 5361, 0, 0, 0, 591, 0, + 591, 0, -256, -64, 591, 0, 591, 0, 3885, 0, + 4073, 0, 0, 591, 591, 0, 4234, 0, 598, 5522, + 0, 0, 205, 0, 0, 716, 0, 591, -263, 591, +16057,16057, 769, 5200, 0,13982, 0, 5683, 5844, 6005, + 6166, 6327, 6488, 6649, 6810, 0, 580, 0, 0, -263, + 0, 0, 0, 0, 964, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 163, 188, 695, 4395, 0, 0, + 663, -265, 131, 837, 685, 788, 707, 715, 734, 731, + 618, 752, 0, 0, 0, 0, 0, 767, 0, 0, + 2868, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, + 0, 0, 0, 3418, 0, 0, 0, 0, 0, 0, + 313, 574, 506, 0, 0, 0, 439, 214, 789, 0, + 0, 0, 0, 812, 829, 782, 0, 462, 0, 0, + 0,16166,16166, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 832, 793, 0, + 119, 0, 0, 0, 506, 932, 506, 0, 0, 1014, + 0, 826,13982,13382, 0, 0, 0, 0, 0,13982, + 0, 0, 885, 0, 0,16166, 0, -180, 915, 144, + 1012, 5200, 659, 0,16166, 0, 591, 0, 925,13982, + 548, 548,13982,13982, 928, 0,13982, 4121, 309, 0, + 0, 948, 0, 1070, 548,16166,13982, 0, 1089, 548, + 610, 0, 0, 0, 0,13982, 598, 897,13532, 951, +13982, 0, 309, 214, 0, -263, 1037, -263, 1052, 351, + 0, -263, 0, 238, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 909,14342, 0, 0, 0, 0, 921, 337, 306, 627, + 0, 911, 0, 706, 0, 0, 4556,13382, 548,13982, + 0, 963, 981, 987, 0, 157, -173, 0, 0, 0, + 0, 0, 0, 986,13982,13982,13982,13982,13982,13982, +13982,13982,13982,13982,13982,13982,13982,13982, 6971, 7132, + 7293, 9869, 9968, 7454, 7615, 7776, 7937, 8098, 8259, 8420, + 8581, 8742, 8903,14282,14282,14282,14282, 9064, 9225, 9386, + 9547, 9708,14282,13982, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -178, 285, + 0, 0,16057,16057, 0, 0, -263, 0, 0, 0, + 0, 609, 1015, 0, 0, 0, 0, 0, 0, 0, + 0, 506, 938, 0, 941, 999, 0, 0, 624, 0, + 812, 0, 993, -207, 0, 832, 832, 0, -197, 0, + -184, 1010, 0, -149, 0, 0, 0, 0, 953, 0, + 681, 0,13682,13682, 1145, 0, 241, 1002, 0, 0, + 3590, 1013,16166, 1016, 1021, -263, 3912,13832, -169, 0, + 0, 548, 0, 0, 0, 82, 179, 952, 1022, 996, + 959, 0, 0, 183, 186, 0, 0, 0, 236, 598, + -122, 0, 1023, 0, 548, 0, 192, 829, -263, 812, +16166, -192, 195, 1107,13982, 1109,13982, 0, 1028, 953, + 0, 0, 0, 0, 0, 0, 10, 0, -263,13982, +13982, 432, 0, 0,13982, 0, 0,13982, 0, 162, + 241, 79, 0, 1165, 548, 3590,13982,13982,13982, 0, + 0, 0, 0, 268, 4395, 695, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1029, 964, 0, + 0, 0, 0, 0, -265, 0, -265, 0, -265, 0, + 131, 0, 131, 0, 131, 0, 837, 0, 837, 0, + 837, 0, 837, 685, 685, 685, 685, 0, 788, 0, + 707, 0, 715, 0, 734, 0, 731, 0, -71, 3590, + 0, 591, 0, 0, 0, 4717, -263, 1112, -263, 1115, + 4717, 4717, 1018,13982, 0, 0, 1015, 0, -263, 0, + 656, 309, 1024, 0, 0, 721, 0, 0, 1041, 0, + 0, 0, 638, 367, 0, 0, 0, 0,16197, -184, + 0, 1033, 1030, 0, 0, 0, 0, 0, -137, 1038, + 0, 1027, 1034, 0, 0, -151, 0, 0,13982,13682, + 0, 0, 0, -263, 0, 0, 0, 0, 0, 0, + 3751, 0, 211, 3590, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -263, 0, 95, 0, 1125, 1031, 1129, + 0, 335, 125, 1048, 0, 1039, 1040, 0, -169, 0, + 0, 0, 3418, 0, 3418, 953, 0, 258, 953, 0, + 0, 0, 1057, 591, -144, 598, 0, 598, 0, 0, + 0, 0, 3418, 0, 0, 0, 0, 0, 4395, 1043, + 0, 3418,13982, 0,13982, 0, -169, 0, 0,16166, + 0, 953, 724, 1054, 0, 0, 727, 730, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4878, 211,13982, 0, 0, + 0, 1138, 0, 1139, 0, 0, 0, 0, 855, 0, + 1047, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 997, 0, -197, 0, 0, 0, 0, 0, + 0, -184, -184, 0, 0, 938, 1063, 1064, 0, 0, + 0, 1066, 0, 1068, 1056, 0, 0, 0, 0, 0, + 0, -192, 1060, 1053, 0,13982, 0, 0, 0, -142, + 1009, 0, 1067, 506, 1211, 1081, 1188, 0, 0, 0, + 0, 0,13982, 0, 1053, 0, 0, 0, -191, -192, + 0, 0, -263, 548, 1043, 0, 0, 0, 0, 1084, + -169, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 199, 0, 4717, 0, 4717, 1104, 4717, 0, 0, 0, + 450, 0, 0, 0, 1088, 938, 0, 0, 5039, 0, + 1092, 1026, 0,13982, 1043, 4395, 1043,16166, 0, 0, +13982,13982,13982, 0, 766, 1079,16243, 1083, 0, 0, + 1080, 0, 3418, -194, 1094, 1095, 0, 1043, 1096, 1043, + 801, 0, 0, 1086, 1098, 0, 0, 548, 4717, 0, + 4717, 1122, 4717, 0,13982, 0, 0, 1034, 0, 501, + -243, 0, 0, 0, 0, 0, 0, 548, 0, 1043, + 1100, 0, -192, 1101, 0, 3418, 616, 1101, 1045,13982, + 0,14553, 1085, 0, 0, 1240,16243, 0, 0,13982, + 0, 1126, 2622, -211, 0, 0, 0, 0, 0, 0, + 548,16166, 4395,16243, 1110, 0, 0, 1147, 0, 0, + 870, 1116, 0, 1127, 0, 0, 5039, 741, 0, 0, + 1043, 3418, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1132, 0, 0, -62, 0, 3590, 0, + 2622, 0, 0, 1215, 3418, 0, 1118, 0, 0,16243, + 0, 4717, 0, 0, 0, 0,13982, 0, 0, 741, + -201, 1133, 3418, 0, 0,13982, 3418,13982, 0, 0, + 598, 0, 0, 1141, 0, 4395, 1132, 0, 4717, 1155, +13982, 0, 1142, 1144,15969, 863, 0, 0, -201, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 625, 0, 1130, 0, 0, + 3590, 0, 0, 0, 0, 0, 598, 1159, 0, 0, + 0, 0, -209, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 636,15969, 0, 0, 0, 350, 741, 0, 0,13982, + 240, 3590, 0, 0, 4717, -201, 0, 1097, 1097,15938, + 1099, 1099, 1103, 1232, 477, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1146, 4717, 1157, 1151, 1149, 1143, + 953, 0, 194,15938, 1105, 1158, 1161, 1153, 0, 0, + 1303, 1313, 0, 1157, -263, 0, 0, 0,14583, 0, + 1177, 0, 0, 1181, 1123, 0, 0, 1131, 1175, 0, + 1099, 1097, 0, 1097, 0, 1097, 0, 0, -169, 0, + 0, 1193, 0, -169, -169,14542, 1190, 0, -169, -169, + 0, 0, 1194, 0, 0, 0, 1196, 0, 1200, 1204, + 0, 0, 1205, 1207, 0, 1296, 1312, 1296, 1201, 506, + 1202, 1202, 1202, 1202, -169,16166, 1301,16166, 1301, 1301, +16243, 1156, 907, 0, 0, 1210, 0, 0, 0,16243, +16243, 0, 0, 1217, 0, 1348,16166, 1251, 97, 0, + 1251, 1251, 0, 1359, 0, 1227, 506, 1251, 0, 0, + 1213, 0, 129, 1163, 0, 1251, 0, 0,16166, 0, + 0, 1251, 0, 1212, 1216, 0, 0, 1259, 0, -60, + 1235, 0, 0, 1236, 1239, 0,13982, 0, 0, 0, + 0,16046, 0, 0, 0, 1223, 0, 1251, 0, 1237, + 0, 0, 1228, 0, -189, 506, -189, 0, 0, 1241, +16046, 0, 1242,15969, 0, 0, 1246, -189, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,15969, 0, 0, 0, 0, 0, 0, 0, 0, + 1250, 506, 0, 1253, 0, 0, 0, -189, 3008, 0, + 0, 2407, 0, 0, 0, -189, 0, 1197, 1099, -140, + 1199,15725, 147, 150, 9983, 1099, 1203, 0, 0, 0, + 0, 1216, 1216, 1216, 1262, 1258, 0, 1263, 0,16166, + 1264, 0, 0,16166, 0, 953, 1265, 155, 1271, 1268, + 1258, 381, 0, 0, 0, 0,16243, 0,16166, 1274, +16274, 1218, 1284, 0, 0, 953, 0,16243, 0, 0, + 0, 0, 0, -190, 1267, 0, 0, 1421, 0, 1286, + 0, -169, -169, 0, 1269, 0, 0, 1277, 0, 0, + 1273, -169, 1276, 1295, 1299, -169, 1300, 1302, 1306, 0, + 1285,13982, 1234, 1291, 1277, 0, 166, 0, 1294, 1305, + 0, 1444, 1298, 350, 1309, 1308, 1325, 0, 4395, 1248, + 1326, 1285, 0, 0, 0, 1258, 0, 0, 0,15969, + 0, 506, 506, 0, 1249, 1327, 1294, 0, 0, 0, +13982, 1255, 1329, 1298, 0, 0, 0,16243,16320, 187, + 0, 1258, 0, 0, -190, 451, 1317,15969, 0,15969, + 0, 0, 4395, 1331, 0, 0, 1322, 1295, 0, 0, + 1342, 0, 0, 0, 0,15969, 0, 187, 187, 1328, + 0, 0, 0, 0, 1402, 1477, 0,16243, 0, 1337, + 0, 935, 1353, 0, 0, 0, 570, 570, 1333,16243, + 187, 0, 0, 0, 4395, 0, 0, 0, 0, 0, + 0, 0, -161, -161, 0, 0, 1355, 0, 0, 0, + 0, 0, 0, 0, + }; + protected static readonly short [] yyRindex = { 118, + 0, 0, 3074, 118, 0, 0, 0, 1745, 0, 0, + 21, 2090, 0, 0, 0, 0, 1358, 21, 0, 0, + 0, 518, 0, 0, 0, 0, 0, 38, 0, 0, + 0, 0, 0, 0, 0, 0, 1747, 0, 0, 1745, + 26, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1343, 0, 0, 0, 0, 0, 1343, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,13195, 0, 0, 0, + 0, 0, 0, 0,10644, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 0, 0, 0, 0, +11078,11162,11528,11850,12250, 465,12730,12890,13050, 5195, + 5517, 1134, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1358, 0, 0, 0, 0, 0, 0, + 0, 0, 48, 1879, 0, 0, 643, 644, 0, 0, + 0, 0, 0, 748, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1747, 29, 0, + 0, 0, 0, 0, 55, 0, 52, 0, 0, 0, + 0, 0, 0, 349, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,10071, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1684, 0, + 0,10453, 0, 1344, 0, 0, 0, 0, 1344, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -195, + 0, 0, 247, 607, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 349, 0, 1343, + 0, 0, 0, 0, 0, 0, 266, 0, 0, 0, + 0, 0, 0, 1362, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5678, 0, 0, 0, 0, 0, 0, 0, + 0, 2298, 0, 0, 0, 0, 0, 0, 0, 0, + 824, 0, 0, 1361, 0, 1747, 1747, 0, 69, 0, +13405, 1754, 0, 0, 0, 0, 0, 0,10071, 0, + 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, + 273, 0, 0, 0, 0, 0, 1350, 0, 271, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1368, 0, + 1369, 0, 0, 0, 0, 0, 0,10711, 0, 296, + 0, 823, 0, 0, 0, 0, 0, 0, 0,10071, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,10071, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 364, 0, 1344, 0, 1358, 0, 0, 0, 0, + 0, 0, 0, 0, 1371, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,10853, + 0,10952, 0, 0,11261, 0,11345, 0,11444, 0, +11610, 0,11690, 0,11770, 0,11930, 0,12010, 0, +12090, 0,12170,12330,12410,12490,12570, 0,12650, 0, +12810, 0,12970, 0,13130, 0, 5356, 0, 0, 273, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5678, 0, 0, 0, + 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1310, 0, 0, 0, 0, 0, 0,16351, + 0, 0, 849, 0, 0, 0, 0, 0, 933, 652, + 0, 0, 1362, 0, 0, 1372, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -236, 0, 1363, 0, 0, + 0, 1311, 277, 0, 0, 1370, 1374, 0, 271, 0, + 0, 0, 1358, 0, 1358,10262, 0, 0,10262, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1358, 0, 0, 0, 0, 0, 0, 1364, + 0, 1358, 0, 0, 0, 0, 271, 0, 0, 0, + 0,10071, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -141, 0, + 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, + 0,16397,16092, 0, 0, 1371, 0, 746, 0, 0, + 0, 1376, 0, 0, -203, 0, 0, 0, 0, 0, + 0, 823, 723, -58, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 374, 0, 0, 1575, 0, 0, 0, + 0, 0, 0, 0, 1377, 0, 0, 0, 723, 823, + 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, + 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 751, 0, + 0, 0, 0, 0, 1364, 0, 1378, 0, 0, 0, + 0, 658, 0, 0, 753, -247, 0, 1379, 0, 0, + 0, 0, 1358, 1384, 0, 0, 0, 1378, 0, 1364, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1362, 0,14633, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1386, + 0, 0, 260, 0, 0, 1358, 0, 0, 0, 0, + 0, 0, 757, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 940, 1391, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 246, 882, 0, 0, 0, 0, 0,14819, 0, 0, + 173, 1358, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -213, 0, + 946, 0, 0, 1368, 1358, 0, 336, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,14819, + 2413, 0, 1358, 0, 0, 785, 1358, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,15447, 894,10452, 0, 0, 2503, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 821, 0, 0, + 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,15532, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 575,16488, 0, 0, 0, 0, 2208, 0, 0, 0, + 0, 950, 0, 0, 0,10261, 0, 0, 0, 0, + 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 943, 0, 0, 1393, + 40, 0, 0, 0, 0, 0, 0, 1380, 0, 0, + 1332, 1334, 0, 943, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 271, 0, + 0, 0, 0, 271, 271, 669, 0, 0, 271, 271, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 459, 0, 0, 0, 0, 328, 393, 328, 0, 347, + 528, 0, 572, 572, 271, 0, -224, 0, -224, -224, + 0, 0,14909, 0, 0, 1394, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 416, 0, 1396, 420, 0, + 1396, 1396, 0, 680, 0, 0, 348, 586, 0, 0, + 0, 0, -218, 0, 0, 619, 0, 0, 0, 0, + 0, 1381, 0, 0, 1997, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 586, 0, 0, + 0, 0, 608, 0,15011,15281,15011, 0, 0, 0, + 0, 0,14460,16527, 0, 0, 0,15101, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1288, 0, 0, 0, 0, 0, 0, 0, 0, + 0,15371, 0, 0, 0, 0, 0,15191, 575, 0, + 0, 575, 0, 0, 0,15011, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1997, 1997, 1997, 0, -78, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1397, 0, 0, 0, 0, + 754, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1397, 0, 0, 0, 0, + 0, 0, 0, 873, 790, 0, 0, 1398, 0, 0, + 0, 271, 271, 0, 895, 0, 0, 1385, 0, 0, + 899, 271, 0, 0, 0, 271, 0, 0, 0, 0, + 1389, 0, 0, 0, 1390, 0,14652, 0, 1392, 0, + 0,14132, 1395, 0, 0, 0, 0, 0, 0, 0, + 0, 1399, 0, 0, 0, -78, 0, 0, 0, 496, + 0,15778,15831, 0, 0, 0, 1400, 0, 0, 0, + 0, 0, 0, 1401, 0, 0, 0, 0, 0,15862, + 0, 754, 0, 0, 873, 0, 0, 1459, 0, 1535, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 965, 0,15578,15616, 900, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,10642,15694, 908, 0, +15862, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + }; + protected static readonly short [] yyGindex = { 0, + 0, 1759, 0, 0, 0, 1032, -2, 1608, -34, -24, + 0, 1790, -199, 394, 399, 736, 0, 0, 0, 1802, + 0, 0, -5, 0, 0, 0, 0, 0, -664, 0, + 0, 0, -939, -678, 623, 0, 691, 660, 0,-1020, + -982, 0, 0, 0, 0, 0, 0, 0, 0, -239, + 0, 0, 0, 875, 0, 956, 0, 0, 0, 0, + 768, 770, -17, 0, -640, 0, -533, -593, -493, -445, + -441, -422, -410, 0, 0, 0, -851, 0, 0,-1090, + 0, 0, 0, -3, 0, 536, 0, 81, -430, 0, + 0, 0,-1394, -984, 261, 0, 0, 0, 315, 0, + 0, 0, -969, 0, 0, 0, 0, 250, 0, 0, + -136, 0, 0, 299, 0, 0, 278, 0, 0, 311, + 0,-1111, -738, 0, 92, 0, 0, 0, 0, 0, + 0,-1146, 544, -49, 0, 0, 949, 957, 1093, 0, + 0, 0, 1137, 0, 408, 0, -707, 0, 0, 0, + 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 0, 0, 0, + 0, 8, 423, 0, 0, -87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 229, 0, 0, 316, 0, + 0, 324, 326, 262, 0, 0, 0, 0, 0, 0, + 0, 0, 542, 0, 0, 0, 0, 0, 0, -183, + 0, -6, -458, -300, 0, 626, 0, 440, 0, 1017, + 0, 1843, -282, 853, -343, 111, 559, -819, 0, 985, + -269, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1111, 0, 0, 0, 23, + 1297, -19, -311, 1514, 1515, 0, 0, 0, 0, 0, + 1290, 802, 1162, 0, 1388, -457, 1569, 0, 1176, 0, + 0, 0, 0, 1304, 0, 0, 0, 0, 777, 0, + 0, 0, 72, 0, 0, 0, 0, 0, 2710, 892, + 893, 866, 867, 1478, 1480, 1481, 1476, 1482, 0, 1485, + 0, 0, -519, 0, 0, -299, 0, 0, 0, 0, + 0, -547, 0, 569, 0, 529, 0, -632, 0, 1082, + 0, 0, 84, 0, 0, 0, 0, 0, -906, -563, + 6, -482, 22, 0, 1740, 0, 110, 0, 178, 212, + 222, 234, 357, 370, 373, 384, 388, 398, 0, -494, + 0, 0, -9, 0, -420, 0, -835, 0, 0, -577, + -101, 934, -416,-1003, 0, 0, 0, -516, 0, 0, + 0, 879, 0, 0, 880, -889, 0, 0, 0, 0, + 0, 0, 0, 0, 1404, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1011, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -42, 0, 1387, + 831, 0, 0, 1008, 0, 0, 0, 0, 0, 0, + -182, 0, 0, 0, 0, 0, 1456, 1243, 0, 0, + 0, 1457, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, + 806, 0, 0, 1758, 0, 0, 0, 0, -202, 1091, + 0, 0, 0, 1102, + }; + protected static readonly short [] yyTable = { 111, + 259, 373, 35, 316, 318, 520, 246, 487, 475, 460, + 886, 543, 805, 202, 198, 193, 247, 817, 727, 50, + 49, 472, 159, 1005, 857, 5, 782, 200, 378, 301, + 707, 263, 1066, 305, 300, 478, 716, 1005, 160, 538, + 1060, 14, 265, 1214, 282, 570, 558, 1003, 910, 1079, + 1067, 7, 496, 294, 73, 833, 1469, 1020, 682, 299, + 791, 1019, 290, 778, 967, 1486, 1372, 264, 254, 310, + 1123, 317, 319, 870, 1020, 257, 266, 651, 324, 1216, + 1217, 275, 583, 276, 202, 202, 741, 283, 139, 284, + 347, 789, 1134, 727, 1618, 1108, 296, 297, 1123, 20, + 157, 20, 1234, 796, 859, 306, 696, 20, 1124, 998, + 309, 894, 311, 954, 989, 1439, 1069, 51, 854, 261, + 372, 1, 610, 612, 476, 477, 164, 677, 1140, 1263, + 205, 1555, 1123, 1070, 1031, 278, 1124, 358, 699, 697, + 686, 826, 827, 111, 700, 391, 21, 529, 21, 1046, + 687, 389, 390, 391, 21, 391, 31, 1580, 246, 1047, + 871, 688, 391, 699, 1069, 1123, 159, 727, 870, 700, + 1124, 768, 975, 32, 724, 833, 1201, 135, 504, 291, + 244, 1070, 160, 1440, 815, 652, 698, 506, 244, 496, + 33, 262, 244, 1102, 165, 1351, 776, 871, 279, 496, + 244, 205, 205, 1124, 280, 202, 202, 791, 524, 791, + 485, 251, 281, 835, 791, 1094, 255, 779, 946, 1487, + 244, 989, 487, 538, 538, 989, 258, 989, 166, 584, + 989, 989, 139, 989, 989, 490, 496, 483, 167, 20, + 15, 727, 502, 1619, 157, 833, 2, 1021, 793, 22, + 168, 871, 864, 797, 556, 1114, 798, 534, 887, 202, + 888, 989, 511, 496, 1021, 515, 517, 1373, 202, 519, + 164, 513, 514, 680, 681, 1214, 50, 49, 898, 525, + 1005, 202, 5, 1409, 378, 523, 21, 907, 533, 202, + 527, 537, 306, 515, 1005, 369, 544, 889, 546, 508, + 891, 1412, 550, 860, 1003, 699, 1313, 1437, 7, 1044, + 895, 73, 955, 342, 1437, 1319, 1320, 575, 261, 378, + 343, 34, 205, 205, 135, 989, 135, 3, 4, 5, + 6, 135, 816, 913, 802, 202, 378, 751, 165, 490, + 496, 1103, 574, 1352, 871, 1393, 871, 50, 49, 573, + 875, 871, 1328, 73, 774, 657, 659, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 836, 166, 169, 51, 73, 205, 1357, 73, 74, + 882, 1393, 167, 1394, 1339, 205, 170, 22, 378, 171, + 262, 378, 392, 73, 168, 1349, 649, 209, 205, 304, + 172, 364, 1443, 980, 173, 982, 205, 984, 50, 50, + 49, 724, 790, 2, 174, 730, 378, 799, 799, 1394, + 378, 1529, 378, 658, 660, 1113, 51, 663, 1294, 359, + 655, 369, 378, 364, 754, 787, 202, 202, 760, 1556, + 538, 762, 1575, 369, 683, 51, 393, 772, 813, 1232, + 781, 945, 205, 777, 976, 1078, 202, 671, 257, 1037, + 304, 1038, 791, 1040, 482, 1294, 1306, 1585, 1018, 1586, + 1444, 679, 1473, 51, 752, 711, 711, 202, 700, 970, + 767, 721, 798, 1484, 743, 1592, 732, 1052, 973, 735, + 735, 1058, 1453, 1454, 1455, 1445, 202, 876, 360, 1329, + 1465, 992, 750, 487, 787, 871, 726, 51, 1181, 1343, + 1267, 1053, 1200, 799, 244, 1269, 1270, 169, 921, 775, + 1273, 1274, 728, 73, 378, 771, 364, 784, 1145, 786, + 170, 1329, 1525, 171, 202, 251, 378, 394, 395, 792, + 727, 764, 490, 794, 172, 580, 1304, 490, 173, 1205, + 490, 765, 800, 205, 205, 244, 786, 1095, 174, 806, + 806, 806, 1110, 1571, 709, 804, 361, 372, 441, 795, + 362, 755, 787, 34, 51, 761, 244, 798, 763, 396, + 1105, 726, 1051, 973, 773, 1233, 727, 752, 727, 1148, + 258, 977, 258, 464, 251, 73, 251, 728, 1133, 868, + 804, 74, 1139, 1599, 1446, 73, 356, 465, 992, 1466, + 418, 74, 992, 205, 992, 1611, 73, 992, 992, 1179, + 992, 992, 74, 581, 1196, 16, 364, 251, 1202, 364, + 551, 358, 473, 718, 38, 693, 364, 822, 820, 824, + 364, 363, 364, 820, 820, 806, 829, 95, 992, 833, + 362, 205, 1005, 365, 474, 726, 810, 364, 727, 686, + 724, 733, 795, 195, 795, 1207, 1196, 724, 734, 687, + 73, 728, 419, 653, 818, 442, 74, 869, 782, 443, + 688, 444, 202, 804, 445, 446, 1224, 447, 448, 255, + 693, 490, 324, 804, 865, 804, 848, 561, 73, 727, + 696, 364, 912, 496, 552, 441, 1203, 719, 73, 364, + 473, 364, 992, 1582, 874, 693, 896, 108, 897, 73, + 621, 363, 364, 694, 743, 73, 1404, 697, 806, 726, + 559, 74, 474, 365, 880, 338, 340, 258, 806, 733, + 806, 483, 548, 1497, 1498, 728, 734, 395, 986, 1220, + 782, 654, 1231, 1510, 1197, 696, 484, 1515, 672, 342, + 562, 372, 743, 210, 364, 908, 343, 909, 258, 845, + 20, 563, 1395, 73, 621, 1435, 1257, 210, 694, 449, + 696, 364, 697, 202, 364, 1470, 893, 1583, 44, 364, + 1221, 364, 364, 364, 364, 364, 560, 364, 919, 205, + 515, 73, 73, 694, 364, 549, 364, 697, 1395, 999, + 683, 364, 442, 364, 207, 483, 443, 21, 444, 846, + 1222, 445, 446, 522, 447, 448, 19, 621, 73, 441, + 484, 621, 672, 621, 621, 621, 621, 621, 621, 621, + 621, 621, 621, 621, 1411, 1000, 212, 670, 463, 202, + 700, 671, 366, 621, 364, 621, 364, 621, 950, 743, + 1002, 383, 356, 206, 665, 528, 1000, 621, 621, 621, + 1594, 1595, 1396, 19, 1417, 965, 487, 621, 621, 529, + 1330, 1331, 342, 971, 621, 621, 743, 1337, 670, 342, + 190, 1117, 671, 1612, 972, 244, 343, 795, 621, 621, + 205, 1346, 250, 530, 251, 820, 252, 820, 1396, 820, + 1045, 383, 621, 1188, 356, 190, 356, 213, 670, 1117, + 1397, 994, 671, 1189, 1398, 249, 997, 1369, 372, 202, + 700, 621, 190, 1004, 515, 1008, 442, 1190, 1191, 1192, + 443, 202, 444, 1399, 1077, 445, 446, 841, 447, 448, + 202, 342, 255, 1117, 1193, 1400, 1397, 258, 343, 190, + 1398, 820, 842, 820, 200, 820, 344, 1041, 1036, 356, + 706, 442, 253, 702, 1348, 443, 190, 444, 73, 1399, + 445, 446, 251, 447, 448, 258, 1117, 1231, 1049, 356, + 702, 1400, 511, 73, 356, 706, 356, 356, 356, 356, + 1194, 341, 511, 395, 1054, 202, 703, 1257, 1055, 356, + 202, 356, 706, 1178, 674, 372, 356, 752, 356, 848, + 1056, 1076, 364, 703, 200, 202, 675, 202, 726, 994, + 342, 11, 364, 356, 308, 18, 364, 343, 364, 28, + 459, 200, 91, 91, 728, 344, 873, 364, 356, 465, + 873, 1142, 412, 487, 91, 395, 1115, 395, 205, 356, + 834, 356, 873, 983, 820, 413, 1116, 205, 343, 1112, + 320, 708, 375, 202, 726, 666, 726, 376, 377, 522, + 511, 564, 343, 709, 1115, 369, 565, 200, 372, 344, + 728, 820, 728, 1041, 1116, 400, 401, 1183, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 342, + 395, 838, 402, 403, 914, 936, 343, 916, 1115, 408, + 917, 2, 205, 839, 344, 936, 709, 205, 1090, 709, + 395, 522, 709, 522, 409, 395, 92, 985, 395, 395, + 395, 1251, 205, 94, 205, 220, 726, 410, 92, 205, + 395, 1115, 395, 94, 415, 220, 135, 395, 135, 205, + 567, 1116, 728, 135, 411, 568, 672, 820, 556, 1009, + 983, 672, 414, 875, 983, 1010, 983, 875, 1479, 983, + 983, 672, 983, 983, 1209, 1210, 522, 726, 820, 240, + 205, 241, 302, 468, 302, 672, 672, 672, 979, 302, + 395, 469, 395, 728, 1032, 1248, 522, 672, 464, 877, + 1033, 522, 672, 877, 522, 522, 522, 404, 405, 406, + 407, 683, 202, 240, 743, 795, 522, 795, 522, 743, + 743, 928, 929, 522, 743, 743, 473, 672, 1264, 1021, + 1265, 1021, 1266, 479, 985, 1292, 1083, 1084, 985, 202, + 985, 1174, 244, 985, 985, 1293, 985, 985, 672, 486, + 743, 397, 398, 399, 1362, 627, 629, 631, 633, 488, + 634, 635, 636, 637, 983, 144, 522, 144, 522, 202, + 489, 202, 1292, 1362, 202, 615, 617, 619, 503, 621, + 623, 625, 1293, 202, 202, 1315, 244, 155, 200, 155, + 202, 307, 162, 307, 162, 979, 278, 200, 200, 979, + 314, 979, 314, 505, 979, 979, 510, 979, 979, 1602, + 1603, 518, 202, 364, 364, 522, 364, 724, 828, 511, + 1374, 1392, 1374, 724, 835, 364, 84, 724, 733, 205, + 1293, 521, 1293, 1374, 526, 202, 545, 348, 985, 672, + 672, 535, 1460, 1293, 541, 251, 1463, 349, 350, 351, + 352, 547, 353, 553, 202, 566, 205, 1392, 908, 1311, + 1312, 1475, 577, 1374, 1302, 1303, 609, 609, 343, 808, + 809, 1374, 1551, 1293, 578, 354, 355, 356, 585, 638, + 579, 1293, 289, 669, 673, 672, 205, 678, 205, 695, + 717, 205, 1471, 342, 721, 729, 756, 758, 731, 979, + 205, 205, 548, 759, 757, 770, 783, 205, 785, 788, + 803, 823, 322, 357, 825, 851, 1587, 828, 837, 840, + 855, 465, 852, 202, 877, 878, 856, 202, 879, 205, + 883, 884, 885, 638, 892, 903, 915, 922, 924, 930, + 202, 932, 202, 938, 202, 939, 948, 743, 743, 942, + 943, 202, 205, 956, 200, 944, 960, 743, 1615, 946, + 957, 743, 1530, 961, 962, 200, 974, 983, 987, 995, + 996, 205, 1012, 1017, 511, 1016, 1027, 1028, 1030, 1034, + 1035, 1039, 1050, 752, 1063, 1065, 638, 1558, 1560, 1059, + 638, 372, 638, 638, 638, 638, 638, 638, 638, 638, + 638, 638, 638, 1080, 1068, 1576, 1081, 1086, 1085, 1099, + 764, 1132, 638, 1567, 638, 1149, 638, 1106, 1143, 1184, + 1151, 1152, 1180, 1219, 1223, 1225, 638, 638, 638, 1227, + 1228, 202, 202, 1576, 1576, 372, 1229, 1607, 1607, 1236, + 205, 34, 1237, 1211, 205, 200, 1574, 1218, 1243, 1235, + 672, 672, 1238, 1620, 1620, 672, 1576, 205, 1245, 205, + 1253, 205, 1255, 1256, 821, 672, 672, 672, 205, 1262, + 1268, 202, 672, 1272, 1261, 1275, 1286, 372, 1279, 672, + 672, 672, 1281, 202, 672, 200, 1282, 1283, 672, 1284, + 638, 672, 1288, 1322, 1291, 1298, 672, 200, 1307, 1321, + 1314, 672, 1317, 1324, 1333, 1335, 1338, 1340, 672, 1350, + 1348, 1347, 1353, 1354, 908, 908, 1355, 1368, 1370, 1407, + 1371, 672, 908, 1405, 1410, 908, 908, 908, 1413, 908, + 908, 1415, 908, 908, 908, 908, 672, 908, 908, 908, + 1456, 1436, 672, 1441, 1490, 908, 1464, 1451, 205, 205, + 908, 1457, 1467, 908, 908, 1476, 1459, 1461, 908, 908, + 908, 1468, 1480, 908, 908, 1481, 1493, 1495, 1500, 1503, + 1511, 908, 1508, 364, 1512, 908, 908, 1520, 1526, 908, + 908, 1514, 1516, 1518, 1517, 1527, 1535, 1539, 205, 1540, + 1542, 1547, 1552, 1564, 908, 1584, 908, 908, 908, 1568, + 205, 1548, 1589, 908, 908, 908, 908, 908, 908, 908, + 908, 908, 908, 908, 908, 908, 908, 908, 1549, 1591, + 1553, 1565, 908, 1569, 1588, 908, 908, 1596, 1583, 1582, + 1600, 1604, 1610, 1624, 9, 724, 1017, 906, 907, 49, + 908, 908, 45, 1009, 866, 918, 908, 908, 908, 38, + 908, 46, 197, 39, 714, 210, 201, 867, 798, 871, + 800, 198, 827, 908, 908, 908, 908, 908, 801, 834, + 335, 908, 339, 702, 353, 702, 242, 152, 128, 139, + 364, 908, 908, 158, 140, 672, 310, 672, 243, 165, + 461, 43, 1428, 159, 311, 166, 28, 1429, 1208, 1175, + 988, 937, 1187, 1290, 1088, 1581, 1089, 1590, 908, 1528, + 1554, 1570, 908, 908, 1546, 1301, 850, 908, 908, 908, + 821, 821, 958, 1450, 881, 908, 1622, 908, 821, 1414, + 959, 821, 821, 821, 1623, 821, 821, 1449, 821, 821, + 821, 821, 1566, 821, 821, 821, 1561, 1559, 1336, 1609, + 1258, 933, 203, 1448, 1062, 1323, 821, 801, 890, 821, + 821, 571, 572, 812, 821, 821, 821, 539, 32, 821, + 821, 715, 867, 1146, 863, 639, 645, 821, 641, 814, + 643, 821, 821, 647, 1342, 821, 821, 648, 920, 1406, + 416, 1029, 1071, 1073, 1104, 966, 968, 667, 668, 832, + 821, 740, 821, 821, 821, 1247, 1150, 769, 417, 821, + 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 821, 821, 0, 0, 0, 0, 821, 364, + 0, 821, 821, 935, 0, 364, 0, 0, 0, 0, + 0, 0, 0, 934, 0, 0, 821, 821, 0, 0, + 0, 0, 821, 821, 821, 0, 821, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 821, + 821, 821, 821, 821, 0, 0, 0, 821, 0, 0, + 0, 364, 0, 364, 0, 0, 43, 821, 821, 364, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 821, 0, 0, 0, 821, 821, + 0, 0, 0, 821, 821, 821, 0, 0, 0, 0, + 0, 821, 0, 821, 0, 0, 364, 0, 0, 0, + 364, 0, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 0, 0, 364, 364, 0, 0, + 0, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 0, 364, 0, 0, 0, 364, 364, 364, 52, + 364, 364, 0, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 0, 364, 364, 0, 32, 32, 364, 0, 364, 32, + 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, + 364, 32, 32, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 32, 32, 32, 0, + 0, 32, 0, 32, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 0, 0, 32, 0, 32, 0, 32, + 0, 0, 32, 32, 0, 0, 0, 32, 32, 32, + 0, 0, 32, 0, 32, 0, 32, 51, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, + 32, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 32, 0, 0, 32, 32, 0, + 32, 0, 0, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 43, 0, 0, 0, 43, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 32, 32, 43, + 43, 0, 0, 0, 43, 0, 0, 0, 0, 0, + 0, 43, 0, 537, 43, 43, 43, 0, 0, 43, + 0, 43, 0, 0, 0, 0, 0, 74, 43, 43, + 43, 0, 0, 43, 0, 43, 0, 43, 0, 0, + 43, 43, 0, 0, 0, 43, 43, 43, 0, 0, + 43, 0, 43, 0, 0, 0, 43, 43, 43, 43, + 43, 0, 0, 0, 32, 32, 0, 0, 43, 0, + 43, 0, 0, 0, 0, 32, 52, 0, 0, 0, + 52, 43, 43, 0, 0, 43, 43, 0, 43, 0, + 0, 43, 52, 0, 0, 0, 0, 52, 0, 0, + 0, 0, 0, 0, 52, 0, 0, 52, 43, 0, + 0, 0, 52, 0, 0, 43, 43, 0, 0, 0, + 0, 52, 52, 52, 0, 0, 0, 0, 52, 0, + 0, 0, 0, 52, 52, 0, 0, 0, 52, 52, + 52, 0, 53, 0, 0, 52, 0, 52, 0, 52, + 0, 52, 52, 52, 0, 0, 0, 0, 0, 0, + 0, 52, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 52, 0, 0, 0, 52, + 0, 52, 43, 43, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 51, 0, 0, 0, 51, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 52, 52, + 51, 0, 0, 0, 0, 51, 0, 0, 0, 0, + 0, 0, 51, 0, 0, 51, 0, 0, 0, 0, + 51, 0, 54, 0, 0, 0, 0, 0, 0, 51, + 51, 51, 0, 0, 0, 0, 51, 0, 0, 0, + 0, 51, 51, 0, 0, 0, 51, 51, 51, 0, + 0, 0, 0, 51, 0, 0, 0, 51, 0, 51, + 51, 51, 0, 0, 0, 52, 52, 0, 0, 51, + 0, 51, 0, 0, 74, 0, 0, 0, 74, 0, + 74, 0, 51, 51, 0, 0, 0, 51, 0, 51, + 74, 74, 51, 0, 0, 74, 0, 0, 0, 0, + 0, 0, 74, 0, 0, 74, 74, 74, 0, 51, + 74, 0, 74, 0, 0, 0, 0, 51, 0, 74, + 74, 74, 0, 0, 74, 0, 0, 74, 74, 0, + 0, 74, 74, 0, 0, 0, 74, 74, 74, 0, + 0, 74, 74, 74, 0, 74, 0, 74, 74, 74, + 74, 74, 0, 0, 74, 0, 0, 0, 0, 74, + 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 74, 0, 0, 0, 74, 74, 0, 74, + 0, 0, 74, 51, 51, 0, 0, 0, 0, 53, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 74, + 1418, 0, 74, 74, 1188, 73, 0, 0, 0, 0, + 73, 0, 0, 0, 1189, 1419, 1420, 73, 0, 0, + 73, 1421, 0, 0, 0, 73, 0, 0, 1190, 1191, + 1192, 0, 0, 1423, 73, 73, 73, 1424, 0, 0, + 0, 0, 0, 0, 0, 1193, 73, 73, 0, 0, + 1425, 73, 73, 73, 0, 0, 0, 1426, 73, 0, + 0, 0, 73, 0, 73, 73, 73, 0, 0, 0, + 0, 0, 74, 74, 73, 0, 73, 0, 0, 54, + 0, 0, 0, 73, 274, 1427, 0, 73, 0, 0, + 0, 1194, 73, 0, 73, 73, 0, 73, 0, 0, + 73, 0, 0, 0, 0, 0, 0, 73, 0, 303, + 73, 0, 0, 0, 73, 73, 0, 0, 0, 0, + 0, 53, 0, 323, 73, 73, 73, 326, 328, 330, + 332, 334, 336, 338, 340, 0, 73, 73, 0, 0, + 0, 73, 73, 73, 0, 0, 0, 0, 73, 0, + 0, 0, 73, 0, 73, 73, 73, 0, 0, 0, + 0, 0, 0, 0, 73, 0, 73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, + 0, 0, 73, 0, 73, 0, 0, 73, 73, 0, + 0, 0, 0, 0, 0, 0, 0, 722, 0, 0, + 0, 0, 0, 0, 73, 46, 0, 0, 47, 48, + 1020, 54, 49, 50, 0, 51, 52, 53, 54, 0, + 55, 56, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 58, 0, 0, 59, 60, 0, 0, + 0, 61, 62, 63, 0, 0, 64, 65, 0, 0, + 0, 0, 0, 0, 66, 0, 0, 0, 67, 68, + 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 73, 72, + 73, 74, 0, 0, 0, 0, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 323, 0, 0, 0, 90, 0, 0, 91, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 94, 0, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 0, 106, 107, 0, 0, 0, + 1021, 108, 109, 0, 0, 0, 0, 0, 0, 0, + 110, 0, 0, 0, 0, 0, 0, 0, 602, 604, + 606, 0, 0, 614, 614, 614, 614, 614, 614, 614, + 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, + 614, 614, 614, 45, 0, 0, 0, 0, 0, 0, + 0, 46, 0, 0, 47, 48, 0, 0, 49, 50, + 0, 51, 52, 53, 54, 0, 55, 56, 57, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, + 0, 0, 59, 60, 0, 0, 0, 61, 62, 63, + 0, 0, 64, 65, 0, 0, 0, 0, 0, 0, + 66, 0, 0, 0, 67, 68, 0, 0, 69, 70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 71, 0, 72, 73, 74, 0, 0, + 0, 0, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 0, 0, 0, + 0, 90, 0, 0, 91, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, + 94, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 98, 99, 100, 101, 0, 0, 0, + 102, 1418, 0, 0, 0, 1188, 0, 0, 0, 0, + 103, 104, 0, 0, 0, 1189, 1419, 1420, 0, 0, + 0, 0, 1421, 0, 0, 0, 0, 0, 0, 1422, + 1191, 1192, 0, 0, 1423, 0, 20, 105, 1424, 0, + 0, 106, 107, 0, 0, 0, 1193, 108, 109, 1000, + 0, 1425, 0, 0, 209, 0, 110, 1000, 1426, 0, + 1000, 1000, 0, 0, 1000, 1000, 0, 1000, 1000, 1000, + 1000, 0, 1000, 1000, 1000, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 0, 1000, 1427, 0, 1000, 1000, + 0, 0, 1194, 1000, 1000, 1000, 0, 0, 1000, 1000, + 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, + 1000, 1000, 0, 0, 1000, 1000, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, + 0, 1000, 1000, 1000, 0, 0, 0, 0, 1000, 1000, + 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 0, 0, 0, 0, 1000, 0, 0, + 1000, 1000, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1000, 1000, 0, 0, 0, + 0, 1000, 0, 1000, 0, 1000, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1000, 1000, + 1000, 1000, 1000, 0, 0, 0, 1000, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1000, 1000, 0, 0, + 0, 45, 0, 0, 0, 0, 0, 0, 0, 46, + 0, 0, 47, 48, 0, 0, 49, 50, 0, 51, + 52, 53, 54, 1000, 55, 56, 57, 1000, 1000, 0, + 0, 0, 0, 1000, 1000, 0, 0, 58, 0, 0, + 59, 60, 1000, 0, 0, 61, 62, 63, 0, 0, + 64, 65, 0, 0, 0, 0, 0, 0, 66, 0, + 0, 0, 67, 68, 0, 0, 69, 70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 71, 0, 72, 73, 74, 0, 0, 0, 0, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 0, 0, 0, 0, 90, + 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 93, 94, 0, + 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 103, 104, + 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, + 0, 46, 0, 0, 47, 48, 0, 0, 49, 50, + 0, 51, 52, 53, 54, 105, 55, 56, 57, 106, + 107, 0, 0, 0, 0, 108, 109, 0, 0, 58, + 0, 0, 59, 60, 110, 0, 0, 61, 62, 63, + 0, 0, 64, 65, 0, 0, 0, 0, 0, 0, + 66, 0, 0, 0, 67, 68, 0, 0, 69, 70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 71, 0, 72, 73, 74, 0, 0, + 0, 0, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 0, 0, 0, + 0, 90, 0, 0, 91, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, + 94, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 103, 104, 0, 0, 0, 722, 0, 0, 0, 0, + 0, 0, 0, 46, 0, 0, 47, 48, 0, 0, + 49, 50, 0, 51, 52, 53, 54, 105, 55, 56, + 57, 106, 107, 0, 0, 0, 0, 108, 109, 0, + 0, 58, 0, 0, 59, 60, 110, 0, 0, 61, + 62, 63, 0, 0, 64, 65, 0, 0, 0, 0, + 0, 0, 66, 0, 0, 0, 67, 68, 0, 0, + 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 71, 0, 72, 73, 74, + 0, 0, 0, 0, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 0, + 0, 0, 0, 90, 0, 0, 91, 92, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 93, 94, 0, 0, 0, 0, 0, 0, 95, + 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 0, 0, 866, 0, 0, 0, + 0, 0, 103, 104, 46, 0, 0, 0, 48, 0, + 0, 49, 268, 0, 0, 0, 53, 54, 0, 55, + 0, 57, 0, 0, 0, 0, 0, 0, 0, 105, + 0, 0, 58, 106, 107, 0, 60, 0, 0, 108, + 109, 0, 269, 0, 0, 0, 0, 0, 110, 0, + 0, 0, 0, 66, 0, 0, 0, 0, 68, 0, + 0, 69, 70, 0, 0, 493, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 494, 0, 0, 72, 73, + 74, 0, 0, 0, 0, 0, 76, 0, 78, 0, + 80, 81, 82, 270, 84, 0, 0, 87, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 91, 92, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 271, 272, 0, 0, 0, 0, 0, 0, + 95, 0, 96, 0, 0, 0, 0, 0, 285, 0, + 0, 0, 48, 0, 0, 49, 98, 99, 100, 101, + 53, 0, 0, 102, 0, 57, 0, 733, 0, 0, + 0, 0, 0, 103, 104, 46, 0, 0, 0, 48, + 60, 0, 49, 268, 0, 0, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 66, 0, 0, + 105, 0, 68, 58, 106, 273, 0, 60, 0, 0, + 108, 109, 0, 269, 0, 0, 0, 0, 0, 110, + 0, 0, 72, 73, 66, 0, 0, 0, 0, 68, + 286, 0, 69, 70, 0, 81, 82, 0, 0, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 734, 0, 0, 0, 0, 0, 287, 0, 91, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 288, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 0, 0, 293, 0, + 0, 0, 0, 0, 103, 104, 46, 0, 0, 289, + 48, 0, 0, 49, 268, 0, 0, 0, 53, 54, + 0, 55, 0, 57, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 58, 106, 273, 0, 60, 0, + 0, 108, 109, 0, 269, 0, 0, 0, 0, 0, + 110, 0, 0, 0, 0, 66, 0, 0, 48, 0, + 68, 49, 0, 69, 70, 0, 53, 0, 0, 0, + 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 73, 74, 0, 0, 0, 60, 0, 76, 0, + 78, 0, 80, 81, 82, 270, 84, 0, 0, 87, + 0, 0, 0, 66, 0, 0, 0, 0, 68, 91, + 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 271, 272, 0, 0, 72, 73, + 0, 0, 95, 0, 96, 0, 0, 0, 0, 0, + 0, 81, 82, 0, 0, 0, 0, 87, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 0, 0, 298, + 0, 0, 0, 0, 0, 103, 104, 46, 0, 0, + 0, 48, 0, 0, 49, 268, 0, 0, 0, 53, + 54, 0, 55, 0, 57, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 58, 106, 273, 0, 60, + 0, 0, 108, 109, 0, 269, 0, 196, 0, 0, + 0, 110, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 68, 0, 0, 69, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 72, 73, 74, 0, 289, 0, 0, 0, 76, + 0, 78, 0, 80, 81, 82, 270, 84, 0, 0, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 271, 272, 0, 0, 0, + 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 0, 0, + 371, 0, 0, 0, 0, 0, 103, 104, 46, 0, + 0, 0, 48, 0, 0, 49, 268, 0, 0, 0, + 53, 54, 0, 55, 0, 57, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 58, 106, 273, 0, + 60, 0, 0, 108, 109, 0, 269, 0, 0, 0, + 0, 0, 110, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 68, 0, 0, 69, 70, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 73, 74, 0, 0, 0, 0, 0, + 76, 0, 78, 0, 80, 81, 82, 270, 84, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 271, 272, 0, 0, + 0, 0, 0, 0, 95, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 0, + 0, 569, 0, 0, 0, 0, 0, 103, 104, 46, + 0, 0, 0, 48, 0, 0, 49, 268, 0, 0, + 0, 53, 54, 0, 55, 0, 57, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 58, 106, 273, + 0, 60, 0, 0, 108, 109, 0, 269, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 66, 0, + 0, 0, 0, 68, 0, 0, 69, 70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 72, 73, 74, 0, 0, 0, 0, + 0, 76, 0, 78, 0, 80, 81, 82, 270, 84, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 271, 272, 0, + 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 0, 0, 819, 0, 0, 0, 0, 0, 103, 104, + 46, 0, 0, 0, 48, 0, 0, 49, 268, 0, + 0, 0, 53, 54, 0, 55, 0, 57, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 0, 58, 106, + 273, 0, 60, 0, 0, 108, 109, 0, 269, 0, + 0, 0, 0, 0, 110, 0, 0, 0, 0, 66, + 0, 0, 0, 0, 68, 0, 0, 69, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 72, 73, 74, 0, 0, 0, + 0, 0, 76, 0, 78, 0, 80, 81, 82, 270, + 84, 0, 0, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 91, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 271, 272, + 0, 0, 0, 0, 0, 0, 95, 0, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 0, 0, 918, 0, 0, 0, 0, 0, 103, + 104, 46, 0, 0, 0, 48, 0, 0, 49, 268, + 0, 0, 0, 53, 54, 0, 55, 0, 57, 0, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 58, + 106, 273, 0, 60, 0, 0, 108, 109, 0, 269, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, + 66, 0, 0, 0, 0, 68, 0, 0, 69, 70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 73, 74, 0, 0, + 0, 0, 0, 76, 0, 78, 0, 80, 81, 82, + 270, 84, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 0, 0, 989, 0, 0, 0, 0, 0, + 103, 104, 46, 0, 0, 0, 48, 0, 0, 49, + 268, 0, 0, 0, 53, 54, 0, 55, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 58, 106, 273, 0, 60, 0, 0, 108, 109, 0, + 269, 0, 0, 0, 0, 0, 110, 0, 0, 0, + 0, 66, 0, 0, 0, 0, 68, 0, 0, 69, + 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 72, 73, 74, 0, + 0, 0, 0, 0, 76, 0, 78, 0, 80, 81, + 82, 270, 84, 0, 0, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 91, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 271, 272, 0, 0, 0, 0, 0, 0, 95, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, + 633, 102, 0, 0, 0, 321, 0, 0, 0, 0, + 0, 103, 104, 46, 0, 0, 0, 48, 0, 0, + 49, 268, 0, 0, 0, 53, 54, 0, 55, 0, + 57, 0, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 58, 106, 990, 0, 60, 0, 0, 108, 109, + 0, 269, 0, 0, 633, 0, 0, 110, 0, 0, + 0, 0, 66, 0, 0, 0, 0, 68, 0, 0, + 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 73, 74, + 0, 0, 0, 0, 0, 76, 0, 78, 0, 80, + 81, 82, 270, 84, 0, 0, 87, 633, 0, 0, + 0, 633, 0, 633, 633, 633, 633, 633, 633, 633, + 633, 633, 633, 633, 0, 0, 0, 0, 0, 0, + 0, 271, 272, 633, 0, 633, 0, 633, 0, 95, + 0, 96, 0, 322, 0, 0, 0, 633, 633, 633, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 634, 102, 0, 0, 633, 267, 0, 0, 0, + 0, 0, 103, 104, 46, 0, 0, 0, 48, 633, + 0, 49, 268, 0, 0, 0, 53, 54, 0, 55, + 0, 57, 633, 0, 0, 0, 0, 0, 0, 105, + 0, 0, 58, 106, 273, 0, 60, 0, 0, 108, + 109, 633, 269, 0, 0, 634, 0, 0, 110, 0, + 0, 0, 0, 66, 0, 0, 0, 0, 68, 0, + 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, + 74, 0, 0, 0, 0, 0, 76, 0, 78, 0, + 80, 81, 82, 270, 84, 0, 0, 87, 634, 0, + 0, 0, 634, 0, 634, 634, 634, 634, 634, 634, + 634, 634, 634, 634, 634, 0, 0, 0, 0, 0, + 0, 0, 271, 272, 634, 0, 634, 0, 634, 0, + 95, 0, 96, 0, 0, 0, 0, 0, 634, 634, + 634, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 636, 102, 0, 0, 634, 302, 0, 0, + 0, 0, 0, 103, 104, 46, 0, 0, 0, 48, + 634, 0, 49, 268, 0, 0, 0, 53, 54, 0, + 55, 0, 57, 634, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 58, 106, 273, 0, 60, 0, 0, + 108, 109, 634, 269, 0, 0, 636, 0, 0, 110, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 68, + 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 636, + 0, 0, 0, 636, 0, 636, 636, 636, 636, 636, + 636, 636, 636, 636, 636, 636, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 636, 0, 636, 0, 636, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 636, + 636, 636, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 995, 102, 0, 0, 636, 325, 0, + 0, 0, 0, 0, 103, 104, 46, 0, 0, 0, + 48, 0, 0, 49, 268, 0, 0, 0, 53, 54, + 0, 55, 0, 57, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 58, 106, 273, 0, 60, 0, + 0, 108, 109, 636, 269, 0, 0, 995, 0, 0, + 110, 0, 0, 0, 0, 66, 0, 0, 0, 0, + 68, 0, 0, 69, 70, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 73, 74, 0, 0, 0, 0, 0, 76, 0, + 78, 0, 80, 81, 82, 270, 84, 0, 0, 87, + 995, 0, 0, 0, 995, 0, 995, 995, 995, 995, + 995, 995, 995, 995, 995, 995, 0, 0, 0, 0, + 0, 0, 0, 0, 271, 272, 995, 0, 995, 0, + 995, 0, 95, 0, 96, 0, 0, 0, 0, 0, + 995, 995, 995, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 0, 0, 327, + 0, 0, 0, 0, 0, 103, 104, 46, 0, 0, + 0, 48, 0, 0, 49, 268, 0, 0, 0, 53, + 54, 0, 55, 0, 57, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 58, 106, 273, 0, 60, + 0, 0, 108, 109, 995, 269, 0, 0, 0, 0, + 0, 110, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 68, 0, 0, 69, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 72, 73, 74, 0, 0, 0, 0, 0, 76, + 0, 78, 0, 80, 81, 82, 270, 84, 0, 0, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 271, 272, 0, 0, 0, + 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 0, 0, + 329, 0, 0, 0, 0, 0, 103, 104, 46, 0, + 0, 0, 48, 0, 0, 49, 268, 0, 0, 0, + 53, 54, 0, 55, 0, 57, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 58, 106, 273, 0, + 60, 0, 0, 108, 109, 0, 269, 0, 0, 0, + 0, 0, 110, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 68, 0, 0, 69, 70, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 73, 74, 0, 0, 0, 0, 0, + 76, 0, 78, 0, 80, 81, 82, 270, 84, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 271, 272, 0, 0, + 0, 0, 0, 0, 95, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 0, + 0, 331, 0, 0, 0, 0, 0, 103, 104, 46, + 0, 0, 0, 48, 0, 0, 49, 268, 0, 0, + 0, 53, 54, 0, 55, 0, 57, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 58, 106, 273, + 0, 60, 0, 0, 108, 109, 0, 269, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 66, 0, + 0, 0, 0, 68, 0, 0, 69, 70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 72, 73, 74, 0, 0, 0, 0, + 0, 76, 0, 78, 0, 80, 81, 82, 270, 84, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 271, 272, 0, + 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 0, 0, 333, 0, 0, 0, 0, 0, 103, 104, + 46, 0, 0, 0, 48, 0, 0, 49, 268, 0, + 0, 0, 53, 54, 0, 55, 0, 57, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 0, 58, 106, + 273, 0, 60, 0, 0, 108, 109, 0, 269, 0, + 0, 0, 0, 0, 110, 0, 0, 0, 0, 66, + 0, 0, 0, 0, 68, 0, 0, 69, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 72, 73, 74, 0, 0, 0, + 0, 0, 76, 0, 78, 0, 80, 81, 82, 270, + 84, 0, 0, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 271, 272, + 0, 0, 0, 0, 0, 0, 95, 0, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 0, 0, 335, 0, 0, 0, 0, 0, 103, + 104, 46, 0, 0, 0, 48, 0, 0, 49, 268, + 0, 0, 0, 53, 54, 0, 55, 0, 57, 0, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 58, + 106, 273, 0, 60, 0, 0, 108, 109, 0, 269, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, + 66, 0, 0, 0, 0, 68, 0, 0, 69, 70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 73, 74, 0, 0, + 0, 0, 0, 76, 0, 78, 0, 80, 81, 82, + 270, 84, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 0, 0, 337, 0, 0, 0, 0, 0, + 103, 104, 46, 0, 0, 0, 48, 0, 0, 49, + 268, 0, 0, 0, 53, 54, 0, 55, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 58, 106, 273, 0, 60, 0, 0, 108, 109, 0, + 269, 0, 0, 0, 0, 0, 110, 0, 0, 0, + 0, 66, 0, 0, 0, 0, 68, 0, 0, 69, + 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 72, 73, 74, 0, + 0, 0, 0, 0, 76, 0, 78, 0, 80, 81, + 82, 270, 84, 0, 0, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 271, 272, 0, 0, 0, 0, 0, 0, 95, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 0, 0, 339, 0, 0, 0, 0, + 0, 103, 104, 46, 0, 0, 0, 48, 0, 0, + 49, 268, 0, 0, 0, 53, 54, 0, 55, 0, + 57, 0, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 58, 106, 273, 0, 60, 0, 0, 108, 109, + 0, 269, 0, 0, 0, 0, 0, 110, 0, 0, + 0, 0, 66, 0, 0, 0, 0, 68, 0, 0, + 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 73, 74, + 0, 0, 0, 0, 0, 76, 0, 78, 0, 80, + 81, 82, 270, 84, 0, 0, 87, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 271, 272, 0, 0, 0, 0, 0, 0, 95, + 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 0, 0, 601, 0, 0, 0, + 0, 0, 103, 104, 46, 0, 0, 0, 48, 0, + 0, 49, 268, 0, 0, 0, 53, 54, 0, 55, + 0, 57, 0, 0, 0, 0, 0, 0, 0, 105, + 0, 0, 58, 106, 273, 0, 60, 0, 0, 108, + 109, 0, 269, 0, 0, 0, 0, 0, 110, 0, + 0, 0, 0, 66, 0, 0, 0, 0, 68, 0, + 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, + 74, 0, 0, 0, 0, 0, 76, 0, 78, 0, + 80, 81, 82, 270, 84, 0, 0, 87, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 271, 272, 0, 0, 0, 0, 0, 0, + 95, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 0, 0, 603, 0, 0, + 0, 0, 0, 103, 104, 46, 0, 0, 0, 48, + 0, 0, 49, 268, 0, 0, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 58, 106, 273, 0, 60, 0, 0, + 108, 109, 0, 269, 0, 0, 0, 0, 0, 110, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 68, + 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 0, 0, 605, 0, + 0, 0, 0, 0, 103, 104, 46, 0, 0, 0, + 48, 0, 0, 49, 268, 0, 0, 0, 53, 54, + 0, 55, 0, 57, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 58, 106, 273, 0, 60, 0, + 0, 108, 109, 0, 269, 0, 0, 0, 0, 0, + 110, 0, 0, 0, 0, 66, 0, 0, 0, 0, + 68, 0, 0, 69, 70, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 73, 74, 0, 0, 0, 0, 0, 76, 0, + 78, 0, 80, 81, 82, 270, 84, 0, 0, 87, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 271, 272, 0, 0, 0, 0, + 0, 0, 95, 0, 96, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 103, 104, 46, 0, 0, + 0, 48, 0, 0, 49, 268, 0, 0, 0, 53, + 54, 0, 55, 0, 57, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 58, 106, 273, 0, 60, + 0, 0, 108, 109, 0, 269, 0, 0, 0, 0, + 0, 110, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 68, 0, 0, 69, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 72, 73, 74, 0, 0, 0, 0, 0, 76, + 0, 78, 0, 80, 81, 82, 270, 84, 0, 0, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 271, 272, 0, 0, 0, + 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 103, 104, 46, 0, + 0, 0, 48, 0, 0, 49, 268, 0, 0, 0, + 53, 54, 0, 55, 0, 57, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 58, 106, 273, 0, + 60, 0, 0, 108, 109, 0, 269, 0, 0, 0, + 0, 0, 110, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 68, 0, 0, 69, 70, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 73, 74, 0, 0, 0, 0, 0, + 76, 0, 78, 0, 80, 81, 82, 270, 84, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 271, 272, 0, 0, + 0, 0, 0, 0, 95, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 0, + 0, 618, 0, 0, 0, 0, 0, 103, 104, 46, + 0, 0, 0, 48, 0, 0, 49, 268, 0, 0, + 0, 53, 54, 0, 55, 0, 57, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 58, 106, 273, + 0, 60, 0, 0, 108, 109, 0, 269, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 66, 0, + 0, 0, 0, 68, 0, 0, 69, 70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 72, 73, 74, 0, 0, 0, 0, + 0, 76, 0, 78, 0, 80, 81, 82, 270, 84, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 271, 272, 0, + 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 0, 0, 620, 0, 0, 0, 0, 0, 103, 104, + 46, 0, 0, 0, 48, 0, 0, 49, 268, 0, + 0, 0, 53, 54, 0, 55, 0, 57, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 0, 58, 106, + 273, 0, 60, 0, 0, 108, 109, 0, 269, 0, + 0, 0, 0, 0, 110, 0, 0, 0, 0, 66, + 0, 0, 0, 0, 68, 0, 0, 69, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 72, 73, 74, 0, 0, 0, + 0, 0, 76, 0, 78, 0, 80, 81, 82, 270, + 84, 0, 0, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 271, 272, + 0, 0, 0, 0, 0, 0, 95, 0, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 0, 0, 622, 0, 0, 0, 0, 0, 103, + 104, 46, 0, 0, 0, 48, 0, 0, 49, 268, + 0, 0, 0, 53, 54, 0, 55, 0, 57, 0, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 58, + 106, 273, 0, 60, 0, 0, 108, 109, 0, 269, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, + 66, 0, 0, 0, 0, 68, 0, 0, 69, 70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 73, 74, 0, 0, + 0, 0, 0, 76, 0, 78, 0, 80, 81, 82, + 270, 84, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 0, 0, 624, 0, 0, 0, 0, 0, + 103, 104, 46, 0, 0, 0, 48, 0, 0, 49, + 268, 0, 0, 0, 53, 54, 0, 55, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 58, 106, 273, 0, 60, 0, 0, 108, 109, 0, + 269, 0, 0, 0, 0, 0, 110, 0, 0, 0, + 0, 66, 0, 0, 0, 0, 68, 0, 0, 69, + 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 72, 73, 74, 0, + 0, 0, 0, 0, 76, 0, 78, 0, 80, 81, + 82, 270, 84, 0, 0, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 271, 272, 0, 0, 0, 0, 0, 0, 95, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, + 0, 102, 0, 0, 0, 626, 0, 0, 0, 0, + 0, 103, 104, 46, 0, 0, 0, 48, 0, 0, + 49, 268, 0, 0, 0, 53, 54, 0, 55, 0, + 57, 0, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 58, 106, 273, 0, 60, 0, 0, 108, 109, + 0, 269, 0, 0, 0, 0, 0, 110, 0, 0, + 0, 0, 66, 0, 0, 0, 0, 68, 0, 0, + 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 73, 74, + 0, 0, 0, 0, 0, 76, 0, 78, 0, 80, + 81, 82, 270, 84, 0, 0, 87, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 271, 272, 0, 0, 0, 0, 0, 0, 95, + 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, + 0, 0, 102, 0, 0, 0, 628, 0, 0, 0, + 0, 0, 103, 104, 46, 0, 0, 0, 48, 0, + 0, 49, 268, 0, 0, 0, 53, 54, 0, 55, + 0, 57, 0, 0, 0, 0, 0, 0, 0, 105, + 0, 0, 58, 106, 273, 0, 60, 0, 0, 108, + 109, 0, 269, 0, 0, 0, 0, 0, 110, 0, + 0, 0, 0, 66, 0, 0, 0, 0, 68, 0, + 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 72, 73, + 74, 0, 0, 0, 0, 0, 76, 0, 78, 0, + 80, 81, 82, 270, 84, 0, 0, 87, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 271, 272, 0, 0, 0, 0, 0, 0, + 95, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 98, 99, 100, 101, + 0, 0, 0, 102, 0, 0, 0, 630, 0, 0, + 0, 0, 0, 103, 104, 46, 0, 0, 0, 48, + 0, 0, 49, 268, 0, 0, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 0, 58, 106, 273, 0, 60, 0, 0, + 108, 109, 0, 269, 0, 0, 0, 0, 0, 110, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 68, + 0, 0, 69, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 0, 0, 0, 632, 0, + 0, 0, 0, 0, 103, 104, 46, 0, 0, 0, + 48, 0, 0, 49, 268, 0, 0, 0, 53, 54, + 0, 55, 0, 57, 0, 0, 0, 0, 0, 0, + 0, 105, 0, 0, 58, 106, 273, 0, 60, 0, + 0, 108, 109, 0, 269, 0, 0, 0, 0, 0, + 110, 0, 0, 0, 0, 66, 0, 0, 0, 0, + 68, 0, 0, 69, 70, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 73, 74, 0, 0, 0, 0, 0, 76, 0, + 78, 0, 80, 81, 82, 270, 84, 0, 0, 87, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 271, 272, 0, 0, 0, 0, + 0, 0, 95, 0, 96, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, + 100, 101, 0, 0, 0, 102, 0, 0, 0, 638, + 0, 0, 0, 0, 0, 103, 104, 46, 0, 0, + 0, 48, 0, 0, 49, 268, 0, 0, 0, 53, + 54, 0, 55, 0, 57, 0, 0, 0, 0, 0, + 0, 0, 105, 0, 0, 58, 106, 273, 0, 60, + 0, 0, 108, 109, 0, 269, 0, 0, 0, 0, + 0, 110, 0, 0, 0, 0, 66, 0, 0, 0, + 0, 68, 0, 0, 69, 70, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 72, 73, 74, 0, 0, 0, 0, 0, 76, + 0, 78, 0, 80, 81, 82, 270, 84, 0, 0, + 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 271, 272, 0, 0, 0, + 0, 0, 0, 95, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, + 99, 100, 101, 0, 0, 0, 102, 0, 0, 0, + 640, 0, 0, 0, 0, 0, 103, 104, 46, 0, + 0, 0, 48, 0, 0, 49, 268, 0, 0, 0, + 53, 54, 0, 55, 0, 57, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 58, 106, 273, 0, + 60, 0, 0, 108, 109, 0, 269, 0, 0, 0, + 0, 0, 110, 0, 0, 0, 0, 66, 0, 0, + 0, 0, 68, 0, 0, 69, 70, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 72, 73, 74, 0, 0, 0, 0, 0, + 76, 0, 78, 0, 80, 81, 82, 270, 84, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 271, 272, 0, 0, + 0, 0, 0, 0, 95, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 98, 99, 100, 101, 0, 0, 0, 102, 0, 0, + 0, 642, 0, 0, 0, 0, 0, 103, 104, 46, + 0, 0, 0, 48, 0, 0, 49, 268, 0, 0, + 0, 53, 54, 0, 55, 0, 57, 0, 0, 0, + 0, 0, 0, 0, 105, 0, 0, 58, 106, 273, + 0, 60, 0, 0, 108, 109, 0, 269, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 66, 0, + 0, 0, 0, 68, 0, 0, 69, 70, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 72, 73, 74, 0, 0, 0, 0, + 0, 76, 0, 78, 0, 80, 81, 82, 270, 84, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 271, 272, 0, + 0, 0, 0, 0, 0, 95, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, + 0, 0, 644, 0, 0, 0, 0, 0, 103, 104, + 46, 0, 0, 0, 48, 0, 0, 49, 268, 0, + 0, 0, 53, 54, 0, 55, 0, 57, 0, 0, + 0, 0, 0, 0, 0, 105, 0, 0, 58, 106, + 273, 0, 60, 0, 0, 108, 109, 0, 269, 0, + 0, 0, 0, 0, 110, 0, 0, 0, 0, 66, + 0, 0, 0, 0, 68, 0, 0, 69, 70, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 72, 73, 74, 0, 0, 0, + 0, 0, 76, 0, 78, 0, 80, 81, 82, 270, + 84, 0, 0, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 271, 272, + 0, 0, 0, 0, 0, 0, 95, 0, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, + 0, 0, 0, 646, 0, 0, 0, 0, 0, 103, + 104, 46, 0, 0, 0, 48, 0, 0, 49, 268, + 0, 0, 0, 53, 54, 0, 55, 0, 57, 0, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 58, + 106, 273, 0, 60, 0, 0, 108, 109, 0, 269, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, + 66, 0, 0, 0, 0, 68, 0, 0, 69, 70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 73, 74, 0, 0, + 0, 0, 0, 76, 0, 78, 0, 80, 81, 82, + 270, 84, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, + 272, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, + 102, 0, 0, 0, 607, 0, 0, 0, 0, 0, + 103, 104, 46, 0, 0, 0, 48, 0, 0, 49, + 268, 0, 0, 0, 53, 54, 0, 0, 0, 57, + 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, + 58, 106, 273, 0, 60, 0, 0, 108, 109, 0, + 269, 0, 194, 0, 0, 0, 110, 0, 0, 0, + 0, 66, 0, 0, 48, 0, 68, 49, 0, 69, + 70, 0, 53, 0, 0, 0, 0, 57, 0, 0, + 0, 0, 0, 0, 0, 0, 72, 73, 74, 0, + 0, 0, 60, 0, 76, 0, 78, 0, 0, 81, + 82, 270, 84, 611, 0, 87, 0, 0, 0, 66, + 0, 46, 0, 0, 68, 48, 0, 0, 49, 268, + 0, 0, 0, 53, 54, 0, 0, 0, 57, 0, + 271, 608, 0, 0, 72, 73, 0, 0, 95, 58, + 96, 0, 0, 60, 0, 0, 0, 81, 82, 269, + 0, 0, 0, 87, 214, 0, 0, 195, 0, 0, + 66, 0, 0, 0, 0, 68, 0, 0, 69, 70, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 73, 74, 0, 0, + 0, 0, 0, 76, 0, 78, 0, 0, 81, 82, + 270, 84, 106, 273, 87, 0, 364, 0, 108, 109, + 215, 0, 364, 196, 0, 0, 0, 110, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, + 608, 0, 0, 0, 0, 0, 0, 95, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 364, 0, 0, 0, 0, 0, 364, 0, 216, 217, + 218, 219, 0, 220, 221, 222, 223, 0, 0, 224, + 225, 226, 227, 0, 0, 228, 229, 230, 231, 232, + 233, 234, 235, 0, 236, 0, 0, 0, 0, 0, + 0, 106, 273, 0, 0, 0, 0, 108, 109, 0, + 0, 237, 0, 364, 0, 0, 110, 364, 0, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 0, 0, 364, 364, 0, 0, 0, 0, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 0, 364, + 0, 0, 0, 364, 364, 364, 0, 364, 364, 0, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 0, 73, 0, 364, 0, 364, 0, 0, 0, 0, + 364, 0, 0, 73, 0, 0, 0, 364, 73, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 73, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 73, 73, 73, 0, 0, 0, 0, 0, + 0, 364, 0, 0, 73, 73, 0, 364, 0, 73, + 73, 73, 0, 0, 0, 0, 73, 0, 0, 0, + 73, 0, 73, 73, 73, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 73, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, + 73, 0, 73, 0, 364, 73, 0, 0, 364, 0, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 0, 73, 0, 0, 364, 0, 0, 0, 53, + 364, 0, 364, 364, 364, 364, 364, 364, 364, 0, + 364, 0, 0, 0, 364, 364, 364, 0, 364, 364, + 0, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 514, 364, + 364, 0, 74, 0, 514, 0, 73, 0, 0, 0, + 0, 364, 0, 0, 74, 0, 0, 0, 364, 74, + 0, 0, 0, 0, 0, 0, 74, 0, 0, 74, + 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 74, 74, 0, 0, 0, 0, + 0, 0, 514, 0, 0, 74, 74, 0, 514, 0, + 74, 74, 74, 0, 0, 0, 0, 74, 0, 0, + 0, 74, 0, 74, 74, 74, 0, 0, 0, 0, + 0, 0, 0, 74, 0, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, + 0, 74, 0, 74, 0, 514, 74, 0, 0, 514, + 0, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 0, 74, 0, 0, 514, 0, 0, 0, + 0, 514, 0, 514, 514, 514, 0, 514, 514, 514, + 0, 514, 0, 0, 0, 514, 514, 514, 0, 514, + 514, 0, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 558, + 514, 514, 43, 0, 0, 558, 0, 74, 0, 0, + 0, 0, 514, 0, 0, 0, 0, 0, 0, 514, + 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, + 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 558, 0, 0, 43, 0, 0, 558, + 0, 43, 43, 0, 0, 0, 416, 43, 0, 0, + 0, 43, 416, 43, 43, 43, 0, 0, 43, 0, + 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, + 0, 43, 0, 43, 0, 0, 558, 0, 0, 0, + 558, 0, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 43, 0, 0, 416, 0, 0, 0, + 43, 43, 558, 0, 558, 0, 558, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 558, 558, 558, 0, + 558, 558, 0, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 0, 0, 0, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, + 0, 558, 558, 356, 416, 0, 0, 43, 0, 0, + 356, 0, 416, 416, 416, 416, 416, 416, 593, 416, + 558, 0, 0, 416, 593, 0, 0, 416, 416, 0, + 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, + 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, + 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, + 416, 416, 416, 416, 416, 416, 416, 0, 416, 416, + 0, 0, 593, 0, 0, 356, 0, 0, 593, 0, + 416, 0, 0, 0, 0, 0, 0, 416, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 594, 0, 0, + 0, 0, 0, 594, 0, 593, 0, 0, 0, 593, + 0, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 0, 0, 0, 0, 416, 0, 0, 0, + 0, 593, 0, 593, 416, 593, 416, 416, 416, 416, + 0, 416, 0, 0, 0, 593, 593, 593, 0, 593, + 593, 594, 0, 593, 593, 593, 593, 594, 0, 0, + 0, 0, 593, 593, 416, 416, 416, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 593, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 593, 593, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 416, 0, 594, 0, 0, 0, 594, 593, + 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, + 594, 0, 0, 582, 0, 416, 0, 0, 0, 582, + 594, 0, 594, 416, 594, 416, 416, 416, 416, 0, + 416, 0, 0, 0, 594, 594, 594, 0, 594, 594, + 0, 0, 594, 594, 594, 594, 0, 0, 0, 0, + 0, 594, 594, 416, 416, 416, 594, 594, 594, 594, + 594, 594, 594, 594, 594, 594, 594, 582, 0, 0, + 0, 0, 0, 582, 0, 0, 0, 0, 0, 594, + 594, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 0, 0, 0, 0, 589, 594, 0, + 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 582, 0, 0, 0, 582, 0, 582, 582, 582, 582, + 582, 582, 582, 582, 582, 582, 582, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 582, 0, 582, 0, + 582, 589, 0, 0, 0, 0, 0, 589, 0, 0, + 582, 582, 582, 0, 582, 582, 0, 0, 582, 582, + 582, 582, 0, 0, 582, 582, 582, 582, 582, 0, + 0, 0, 582, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 0, 0, 0, 590, 0, 0, 0, + 0, 0, 590, 0, 589, 582, 582, 0, 589, 0, + 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, + 589, 0, 0, 0, 582, 0, 0, 0, 0, 0, + 589, 0, 589, 0, 589, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 589, 589, 589, 0, 589, 589, + 590, 0, 589, 589, 589, 589, 590, 0, 0, 0, + 0, 589, 589, 0, 0, 0, 589, 589, 589, 589, + 589, 589, 589, 589, 589, 589, 589, 0, 0, 0, + 591, 0, 0, 0, 0, 0, 591, 0, 0, 589, + 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 590, 0, 0, 0, 590, 589, 590, + 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 0, 590, 0, 590, 591, 0, 0, 0, 0, 0, + 591, 0, 0, 590, 590, 590, 0, 590, 590, 0, + 0, 590, 590, 590, 590, 0, 0, 0, 0, 0, + 590, 590, 0, 0, 0, 590, 590, 590, 590, 590, + 590, 590, 590, 590, 590, 590, 0, 0, 0, 592, + 0, 0, 0, 0, 0, 592, 0, 591, 590, 590, + 0, 591, 0, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 591, 0, 0, 0, 590, 0, 0, + 0, 0, 0, 591, 0, 591, 0, 591, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 591, 591, 591, + 0, 591, 591, 592, 0, 591, 591, 591, 591, 592, + 0, 0, 0, 0, 591, 591, 0, 0, 0, 591, + 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, + 0, 0, 0, 600, 0, 0, 0, 0, 0, 0, + 0, 0, 591, 591, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 0, 0, 0, + 592, 591, 592, 592, 592, 592, 592, 592, 592, 592, + 592, 592, 592, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 592, 0, 592, 0, 592, 600, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 592, 592, 0, + 592, 592, 0, 0, 592, 592, 592, 592, 0, 0, + 0, 0, 0, 592, 592, 601, 0, 0, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 592, 592, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 600, 592, 592, 0, 600, 0, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 0, 0, 0, + 592, 0, 0, 0, 0, 0, 600, 0, 600, 601, + 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 600, 600, 600, 0, 0, 0, 0, 0, 600, 600, + 600, 600, 0, 0, 0, 602, 0, 600, 600, 0, + 0, 0, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 601, 0, 0, 600, 601, 0, 601, 601, + 601, 601, 601, 601, 601, 601, 601, 601, 601, 0, + 0, 0, 0, 0, 600, 0, 0, 0, 601, 602, + 601, 0, 601, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 601, 601, 601, 0, 0, 0, 0, 0, + 601, 601, 601, 601, 0, 603, 0, 0, 0, 601, + 601, 0, 0, 0, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 601, 601, 0, 0, 0, 0, 0, + 0, 0, 602, 0, 0, 0, 602, 601, 602, 602, + 602, 602, 602, 602, 602, 602, 602, 602, 602, 0, + 0, 0, 0, 0, 0, 0, 601, 0, 602, 603, + 602, 0, 602, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 602, 602, 602, 0, 0, 0, 0, 0, + 602, 602, 602, 602, 0, 607, 0, 0, 0, 602, + 602, 0, 0, 0, 602, 602, 602, 602, 602, 602, + 602, 602, 602, 602, 602, 0, 0, 0, 0, 0, + 0, 0, 603, 0, 0, 0, 603, 602, 603, 603, + 603, 603, 603, 603, 603, 603, 603, 603, 603, 0, + 0, 0, 0, 0, 0, 0, 602, 0, 603, 607, + 603, 0, 603, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 603, 603, 603, 0, 0, 0, 0, 0, + 603, 603, 603, 603, 0, 608, 0, 0, 0, 603, + 603, 0, 0, 0, 603, 603, 603, 603, 603, 603, + 603, 603, 603, 603, 603, 0, 0, 0, 0, 0, + 0, 0, 607, 0, 0, 0, 607, 603, 607, 607, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 0, + 0, 0, 0, 0, 0, 0, 603, 0, 607, 608, + 607, 0, 607, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 607, 607, 607, 0, 0, 0, 0, 0, + 607, 607, 607, 607, 0, 609, 0, 0, 0, 607, + 607, 0, 0, 0, 0, 0, 0, 607, 607, 607, + 607, 607, 607, 607, 607, 0, 0, 0, 0, 0, + 0, 0, 608, 0, 0, 0, 608, 607, 608, 608, + 608, 608, 608, 608, 608, 608, 608, 608, 608, 0, + 0, 0, 0, 0, 0, 0, 607, 0, 608, 609, + 608, 0, 608, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 608, 608, 608, 0, 0, 0, 0, 0, + 608, 608, 608, 608, 0, 610, 0, 0, 0, 608, + 608, 0, 0, 0, 0, 0, 0, 608, 608, 608, + 608, 608, 608, 608, 608, 0, 0, 0, 0, 0, + 0, 0, 609, 0, 0, 0, 609, 608, 609, 609, + 609, 609, 609, 609, 609, 609, 609, 609, 609, 0, + 0, 0, 0, 0, 0, 0, 608, 0, 609, 610, + 609, 0, 609, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 609, 609, 609, 0, 0, 0, 0, 0, + 609, 609, 609, 609, 0, 611, 0, 0, 0, 609, + 609, 0, 0, 0, 0, 0, 0, 609, 609, 609, + 609, 609, 609, 609, 609, 0, 0, 0, 0, 0, + 0, 0, 610, 0, 0, 0, 610, 609, 610, 610, + 610, 610, 610, 610, 610, 610, 610, 610, 610, 0, + 0, 0, 0, 0, 0, 0, 609, 0, 610, 611, + 610, 0, 610, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 610, 610, 610, 0, 0, 0, 0, 0, + 610, 610, 610, 610, 0, 616, 0, 0, 0, 610, + 610, 0, 0, 0, 0, 0, 0, 610, 610, 610, + 610, 610, 610, 610, 610, 0, 0, 0, 0, 0, + 0, 0, 611, 0, 0, 0, 611, 610, 611, 611, + 611, 611, 611, 611, 611, 611, 611, 611, 611, 0, + 0, 0, 0, 0, 0, 0, 610, 0, 611, 616, + 611, 0, 611, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 611, 611, 611, 0, 0, 0, 0, 0, + 611, 611, 611, 611, 0, 617, 0, 0, 0, 611, + 611, 0, 0, 0, 0, 0, 0, 611, 611, 611, + 611, 611, 611, 611, 611, 0, 0, 0, 0, 0, + 0, 0, 616, 0, 0, 0, 616, 611, 616, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 0, + 0, 0, 0, 0, 0, 0, 611, 0, 616, 617, + 616, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 616, 616, 0, 0, 0, 0, 0, + 0, 0, 616, 616, 0, 619, 0, 0, 0, 616, + 616, 0, 0, 0, 0, 0, 0, 0, 0, 616, + 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, + 0, 0, 617, 0, 0, 0, 617, 616, 617, 617, + 617, 617, 617, 617, 617, 617, 617, 617, 617, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 617, 619, + 617, 0, 617, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 617, 617, 617, 0, 0, 0, 0, 0, + 0, 0, 617, 617, 0, 618, 0, 0, 0, 617, + 617, 0, 0, 0, 0, 0, 0, 0, 0, 617, + 617, 617, 617, 617, 617, 0, 0, 0, 0, 0, + 0, 0, 619, 0, 0, 0, 619, 617, 619, 619, + 619, 619, 619, 619, 619, 619, 619, 619, 619, 0, + 0, 0, 0, 0, 0, 0, 617, 0, 619, 618, + 619, 0, 619, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 619, 619, 619, 0, 0, 0, 0, 0, + 0, 0, 619, 619, 0, 620, 0, 0, 0, 619, + 619, 0, 0, 0, 0, 0, 0, 0, 0, 619, + 619, 619, 619, 619, 619, 0, 0, 0, 0, 0, + 0, 0, 618, 0, 0, 0, 618, 619, 618, 618, + 618, 618, 618, 618, 618, 618, 618, 618, 618, 0, + 0, 0, 0, 0, 0, 0, 619, 0, 618, 620, + 618, 0, 618, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 618, 618, 618, 0, 0, 0, 0, 0, + 0, 0, 618, 618, 0, 622, 0, 0, 0, 618, + 618, 0, 0, 0, 0, 0, 0, 0, 0, 618, + 618, 618, 618, 618, 618, 0, 0, 0, 0, 0, + 0, 0, 620, 0, 0, 0, 620, 618, 620, 620, + 620, 620, 620, 620, 620, 620, 620, 620, 620, 0, + 0, 0, 0, 0, 0, 0, 618, 0, 620, 622, + 620, 0, 620, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 620, 620, 620, 0, 0, 0, 0, 0, + 0, 0, 620, 620, 0, 624, 0, 0, 0, 620, + 620, 0, 0, 0, 0, 0, 0, 0, 0, 620, + 620, 620, 620, 620, 620, 0, 0, 0, 0, 0, + 0, 0, 622, 0, 0, 0, 622, 620, 622, 622, + 622, 622, 622, 622, 622, 622, 622, 622, 622, 0, + 0, 0, 0, 0, 0, 0, 620, 0, 622, 624, + 622, 0, 622, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 622, 622, 622, 0, 0, 0, 0, 0, + 0, 0, 622, 622, 0, 625, 0, 0, 0, 622, + 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 622, 622, 0, 0, 0, 0, 0, + 0, 0, 624, 0, 0, 0, 624, 622, 624, 624, + 624, 624, 624, 624, 624, 624, 624, 624, 624, 0, + 0, 0, 0, 0, 0, 0, 622, 0, 624, 625, + 624, 0, 624, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 624, 624, 624, 0, 0, 0, 0, 0, + 0, 0, 0, 624, 0, 627, 0, 0, 0, 624, + 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 624, 624, 0, 0, 0, 0, 0, + 0, 0, 625, 0, 0, 0, 625, 624, 625, 625, + 625, 625, 625, 625, 625, 625, 625, 625, 625, 0, + 0, 0, 0, 0, 0, 0, 624, 0, 625, 627, + 625, 0, 625, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 625, 625, 625, 0, 0, 0, 0, 0, + 0, 0, 0, 625, 0, 628, 0, 0, 0, 625, + 625, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 625, 625, 0, 0, 0, 0, 0, + 0, 0, 627, 0, 0, 0, 627, 625, 627, 627, + 627, 627, 627, 627, 627, 627, 627, 627, 627, 0, + 0, 0, 0, 0, 0, 0, 625, 0, 627, 628, + 627, 0, 627, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 627, 627, 627, 0, 0, 0, 0, 0, + 0, 0, 0, 627, 0, 630, 0, 0, 0, 0, + 627, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 627, 627, 0, 0, 0, 0, 0, + 0, 0, 628, 0, 0, 0, 628, 627, 628, 628, + 628, 628, 628, 628, 628, 628, 628, 628, 628, 0, + 0, 0, 0, 0, 0, 0, 627, 0, 628, 630, + 628, 0, 628, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 628, 628, 628, 0, 0, 0, 0, 0, + 0, 0, 0, 628, 0, 631, 0, 0, 0, 0, + 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 628, 628, 0, 0, 0, 0, 0, + 0, 0, 630, 0, 0, 0, 630, 628, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 630, 630, 0, + 0, 0, 0, 0, 0, 0, 628, 0, 630, 631, + 630, 0, 630, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 630, 630, 630, 0, 364, 0, 0, 0, + 0, 786, 0, 0, 0, 0, 0, 0, 0, 0, + 630, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 630, 630, 0, 0, 0, 0, 0, + 0, 0, 631, 0, 0, 0, 631, 630, 631, 631, + 631, 631, 631, 631, 631, 631, 631, 631, 631, 0, + 364, 0, 0, 0, 0, 0, 630, 0, 631, 0, + 631, 0, 631, 0, 0, 0, 0, 0, 0, 0, + 786, 0, 631, 631, 631, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 631, 631, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 631, 364, 0, + 0, 0, 0, 364, 0, 0, 364, 0, 364, 364, + 364, 364, 0, 364, 0, 0, 631, 0, 786, 364, + 0, 364, 364, 0, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 0, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 0, 364, 364, 0, 46, 0, 0, 0, 48, + 0, 0, 49, 268, 364, 0, 0, 53, 54, 0, + 55, 364, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 210, 58, 0, 210, 0, 60, 0, 0, + 210, 0, 0, 269, 0, 210, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 68, + 210, 0, 69, 70, 0, 0, 493, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 494, 210, 0, 72, + 73, 74, 210, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 0, 0, 210, 210, 0, 0, 0, 0, 91, 92, + 0, 0, 0, 0, 0, 210, 210, 0, 0, 0, + 0, 210, 0, 271, 272, 210, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 495, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 46, 0, 1020, 0, 48, + 0, 0, 49, 268, 103, 104, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 210, 0, 58, 0, 0, 0, 60, 0, 0, + 0, 105, 0, 269, 0, 106, 273, 0, 0, 0, + 0, 108, 109, 0, 66, 0, 0, 0, 0, 68, + 110, 0, 69, 70, 0, 0, 0, 0, 0, 210, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 0, 0, 536, 0, 0, 0, 0, 0, 91, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 46, 0, 0, 0, 48, + 0, 0, 49, 268, 103, 104, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, + 0, 105, 0, 269, 0, 106, 273, 0, 0, 0, + 0, 108, 109, 0, 66, 0, 0, 0, 0, 68, + 110, 0, 69, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 0, 0, 536, 0, 0, 0, 0, 0, 91, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 95, 0, 710, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 46, 0, 0, 0, 48, + 0, 0, 49, 268, 103, 104, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, + 0, 105, 0, 269, 0, 106, 273, 0, 0, 0, + 0, 108, 109, 0, 66, 0, 0, 0, 0, 68, + 110, 0, 69, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 734, 0, 0, 0, 0, 0, 0, 0, 91, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 46, 0, 0, 0, 48, + 0, 0, 49, 268, 103, 104, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, + 0, 105, 0, 269, 0, 106, 273, 0, 0, 0, + 0, 108, 109, 0, 66, 0, 0, 0, 0, 68, + 110, 0, 69, 70, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, + 73, 74, 0, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 0, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 0, 0, 102, 170, 0, 0, 0, 170, + 0, 0, 170, 170, 103, 104, 0, 170, 170, 0, + 170, 0, 170, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 170, 0, 0, 0, 170, 0, 0, + 0, 105, 0, 170, 0, 106, 273, 0, 0, 0, + 0, 108, 109, 0, 170, 0, 0, 0, 0, 170, + 110, 0, 170, 170, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, + 170, 170, 0, 0, 0, 0, 0, 170, 0, 170, + 0, 170, 170, 170, 170, 170, 0, 0, 170, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 170, 170, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 170, 170, 0, 0, 0, 0, 0, + 0, 170, 0, 170, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 170, 170, + 170, 0, 0, 0, 170, 46, 0, 0, 0, 48, + 0, 0, 49, 268, 170, 170, 0, 53, 54, 0, + 55, 0, 57, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 58, 0, 0, 0, 60, 0, 0, + 0, 170, 0, 269, 0, 170, 170, 0, 0, 0, + 0, 170, 170, 0, 66, 0, 0, 555, 0, 68, + 170, 0, 69, 70, 0, 0, 0, 0, 0, 48, + 0, 0, 49, 0, 0, 0, 0, 53, 0, 72, + 73, 74, 57, 0, 0, 0, 0, 76, 0, 78, + 0, 80, 81, 82, 270, 84, 0, 60, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66, 0, 0, 0, 0, 68, + 0, 0, 0, 271, 272, 0, 0, 0, 0, 0, + 0, 95, 0, 96, 0, 0, 0, 0, 0, 72, + 73, 0, 0, 0, 0, 0, 0, 98, 99, 100, + 101, 0, 81, 82, 102, 0, 0, 0, 87, 0, + 0, 0, 312, 0, 103, 104, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, + 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 105, 124, 124, 0, 106, 273, 124, 0, 0, + 0, 108, 109, 0, 124, 0, 0, 124, 124, 124, + 110, 0, 124, 0, 124, 0, 0, 0, 196, 0, + 0, 124, 124, 124, 0, 0, 124, 0, 124, 0, + 124, 0, 0, 124, 124, 0, 0, 0, 124, 124, + 124, 0, 0, 124, 0, 124, 0, 0, 0, 124, + 124, 124, 124, 124, 0, 0, 289, 1271, 0, 0, + 0, 124, 0, 124, 0, 0, 0, 0, 1061, 48, + 0, 0, 49, 0, 124, 124, 0, 53, 124, 124, + 48, 124, 57, 49, 124, 0, 0, 0, 53, 0, + 0, 0, 0, 57, 0, 0, 0, 60, 1250, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 60, 124, + 48, 0, 0, 49, 66, 0, 0, 0, 53, 68, + 0, 0, 0, 57, 0, 66, 0, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 0, 0, 60, 72, + 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 73, 81, 82, 364, 66, 0, 0, 87, 0, + 68, 0, 312, 81, 82, 0, 0, 0, 0, 87, + 0, 0, 73, 847, 73, 124, 124, 0, 0, 0, + 72, 73, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 244, 0, 81, 82, 0, 73, 0, 0, 87, + 0, 0, 0, 312, 73, 0, 0, 0, 364, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, + 0, 0, 0, 0, 0, 0, 73, 0, 0, 196, + 0, 73, 73, 0, 0, 0, 0, 73, 0, 0, + 0, 73, 0, 73, 73, 73, 0, 0, 73, 0, + 0, 0, 0, 73, 0, 0, 289, 0, 0, 196, + 0, 0, 0, 0, 0, 0, 73, 289, 0, 0, + 0, 73, 0, 73, 0, 0, 364, 0, 0, 0, + 0, 0, 0, 0, 364, 364, 364, 364, 364, 364, + 0, 364, 0, 73, 0, 364, 0, 289, 0, 364, + 364, 0, 0, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, 364, 51, + 364, 364, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 51, 364, 0, 0, 0, 51, 0, 0, 0, + 0, 0, 0, 51, 0, 0, 51, 73, 0, 0, + 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 51, 51, 0, 0, 0, 0, 51, 0, 0, + 0, 0, 51, 51, 0, 0, 0, 51, 51, 51, + 0, 0, 0, 0, 51, 0, 0, 0, 51, 0, + 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, + 51, 0, 51, 0, 0, 0, 0, 0, 0, 74, + 0, 0, 0, 51, 51, 0, 0, 0, 51, 0, + 51, 74, 74, 51, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 74, 0, 0, 74, 74, 74, 0, + 51, 74, 0, 74, 0, 0, 0, 51, 51, 0, + 74, 74, 74, 0, 0, 74, 0, 74, 0, 74, + 0, 0, 74, 74, 0, 0, 0, 74, 74, 74, + 0, 0, 74, 0, 74, 0, 0, 0, 74, 74, + 74, 74, 74, 0, 0, 0, 0, 0, 0, 0, + 74, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 74, 0, 0, 74, 74, 0, + 74, 73, 0, 74, 51, 51, 0, 0, 0, 0, + 0, 0, 0, 73, 73, 0, 0, 0, 73, 0, + 74, 0, 0, 0, 0, 73, 0, 0, 73, 73, + 73, 0, 0, 73, 0, 73, 0, 0, 0, 0, + 0, 0, 73, 73, 73, 0, 0, 73, 0, 73, + 0, 73, 0, 0, 73, 73, 0, 0, 0, 73, + 73, 73, 0, 0, 73, 0, 73, 0, 0, 0, + 73, 73, 73, 73, 73, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 73, 0, 0, 0, 0, 0, + 0, 73, 0, 74, 74, 73, 73, 0, 0, 73, + 73, 0, 73, 73, 73, 73, 0, 0, 73, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 73, 73, + 73, 0, 73, 73, 0, 73, 0, 0, 0, 103, + 0, 0, 73, 73, 73, 0, 0, 73, 0, 73, + 0, 73, 0, 0, 73, 73, 0, 0, 0, 73, + 73, 73, 0, 0, 73, 0, 73, 0, 0, 0, + 73, 73, 73, 73, 73, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 73, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 73, 73, 0, 0, 73, + 73, 0, 73, 73, 73, 73, 73, 0, 73, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 73, 73, + 73, 0, 73, 73, 0, 73, 0, 0, 0, 104, + 0, 0, 73, 73, 73, 0, 0, 73, 0, 73, + 0, 73, 0, 0, 73, 73, 0, 0, 0, 73, + 73, 73, 0, 0, 73, 0, 73, 0, 0, 0, + 73, 73, 73, 73, 73, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 73, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 73, 73, 0, 0, 73, + 73, 0, 73, 73, 73, 73, 73, 0, 73, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 73, 73, + 73, 0, 73, 73, 0, 73, 0, 0, 0, 0, + 0, 0, 73, 73, 73, 0, 0, 73, 0, 0, + 0, 73, 0, 0, 73, 73, 0, 0, 0, 73, + 73, 73, 0, 0, 73, 0, 73, 0, 0, 0, + 73, 73, 73, 73, 73, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 73, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 73, 0, 0, 0, 73, + 73, 0, 73, 73, 73, 73, 73, 0, 73, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 73, 73, + 73, 0, 73, 73, 0, 73, 0, 0, 0, 249, + 0, 0, 73, 73, 73, 0, 0, 73, 0, 0, + 0, 73, 0, 0, 73, 73, 0, 0, 0, 73, + 73, 73, 0, 0, 73, 0, 73, 0, 0, 0, + 73, 73, 73, 73, 73, 0, 0, 63, 0, 0, + 0, 0, 73, 0, 73, 0, 0, 0, 0, 63, + 0, 0, 0, 0, 63, 73, 0, 0, 0, 73, + 73, 63, 73, 0, 63, 73, 73, 0, 0, 63, + 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, + 63, 0, 73, 0, 0, 63, 0, 0, 0, 250, + 63, 63, 0, 0, 0, 63, 63, 63, 0, 0, + 0, 0, 63, 0, 0, 0, 63, 0, 63, 63, + 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, + 63, 0, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 63, 63, 0, 73, 0, 63, 0, 63, 73, + 0, 63, 0, 0, 0, 0, 73, 0, 0, 73, + 0, 0, 0, 0, 73, 0, 73, 0, 63, 0, + 0, 0, 0, 73, 73, 73, 63, 0, 73, 0, + 0, 0, 0, 0, 0, 73, 73, 0, 0, 0, + 73, 73, 73, 0, 0, 0, 0, 73, 0, 0, + 0, 73, 73, 73, 73, 73, 0, 0, 0, 0, + 73, 0, 0, 73, 0, 73, 73, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, + 0, 73, 73, 73, 0, 0, 73, 73, 73, 0, + 73, 0, 63, 73, 0, 0, 0, 73, 73, 73, + 73, 73, 0, 73, 0, 0, 0, 0, 0, 73, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 73, 0, 73, 0, 0, 73, 73, 73, 0, 73, + 0, 73, 0, 0, 0, 73, 0, 73, 73, 73, + 0, 0, 0, 0, 43, 0, 43, 73, 0, 73, + 0, 0, 73, 73, 0, 0, 230, 0, 0, 0, + 73, 0, 0, 0, 0, 73, 0, 73, 43, 0, + 0, 0, 0, 0, 0, 1154, 43, 73, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, + 73, 73, 0, 0, 232, 0, 0, 0, 43, 1155, + 0, 0, 0, 43, 43, 0, 0, 1156, 0, 43, + 0, 0, 0, 43, 0, 43, 43, 43, 0, 0, + 0, 0, 0, 73, 0, 43, 0, 0, 73, 1157, + 0, 0, 0, 0, 1158, 1159, 0, 0, 43, 0, + 1160, 0, 0, 43, 1161, 43, 1162, 1163, 1164, 0, + 0, 0, 73, 0, 0, 0, 1165, 0, 0, 0, + 73, 73, 0, 0, 0, 43, 0, 0, 0, 1166, + 0, 0, 43, 43, 1167, 0, 1168, 0, 0, 0, + 0, 73, 73, 73, 0, 0, 0, 73, 73, 0, + 0, 0, 0, 73, 0, 0, 1169, 73, 0, 73, + 73, 73, 0, 0, 73, 73, 0, 0, 0, 73, + 0, 0, 73, 73, 0, 0, 0, 0, 0, 0, + 1442, 0, 73, 0, 0, 0, 0, 73, 0, 73, + 0, 0, 0, 0, 0, 73, 73, 0, 0, 43, + 73, 73, 0, 0, 73, 0, 73, 0, 0, 73, + 73, 0, 73, 73, 73, 0, 321, 0, 0, 0, + 0, 0, 73, 0, 0, 0, 73, 0, 0, 1211, + 1170, 73, 73, 0, 0, 73, 0, 73, 0, 0, + 73, 73, 73, 73, 73, 73, 0, 0, 1154, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 0, 0, 73, 0, 0, 322, + 0, 73, 1155, 73, 0, 0, 0, 0, 0, 1154, + 1156, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 73, 73, 0, 0, + 0, 0, 1157, 1155, 0, 0, 0, 1158, 1159, 0, + 0, 1156, 0, 1160, 0, 0, 0, 1161, 0, 1162, + 1163, 1164, 0, 0, 0, 0, 0, 0, 0, 1165, + 0, 0, 0, 1157, 0, 0, 73, 0, 1158, 1159, + 0, 0, 1166, 0, 1160, 0, 0, 1167, 1161, 1168, + 1162, 1163, 1164, 0, 0, 0, 0, 0, 0, 0, + 1165, 0, 0, 48, 0, 0, 49, 73, 1359, 1169, + 0, 53, 0, 1166, 48, 0, 57, 49, 1167, 0, + 1168, 0, 53, 0, 0, 0, 0, 57, 0, 0, + 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 1169, 0, 60, 0, 0, 0, 0, 0, 66, 210, + 0, 0, 210, 68, 0, 0, 1360, 210, 0, 66, + 0, 0, 210, 0, 68, 0, 0, 0, 0, 0, + 0, 0, 0, 72, 73, 0, 0, 210, 0, 1361, + 0, 0, 1211, 1170, 72, 73, 81, 82, 0, 0, + 0, 0, 87, 0, 210, 0, 312, 81, 82, 210, + 0, 0, 0, 87, 0, 0, 0, 312, 0, 0, + 0, 0, 0, 0, 1170, 0, 0, 0, 0, 210, + 210, 0, 0, 48, 0, 0, 49, 0, 0, 261, + 0, 53, 210, 210, 0, 0, 57, 0, 210, 0, + 0, 0, 210, 0, 0, 0, 0, 0, 0, 0, + 0, 60, 196, 0, 48, 0, 0, 49, 0, 0, + 0, 0, 53, 196, 0, 0, 0, 57, 66, 0, + 0, 0, 1020, 68, 0, 0, 0, 0, 0, 0, + 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, + 289, 0, 0, 72, 73, 0, 0, 0, 210, 66, + 48, 313, 0, 49, 68, 0, 81, 82, 53, 0, + 0, 0, 87, 57, 0, 0, 312, 0, 0, 0, + 0, 0, 0, 0, 72, 73, 0, 0, 60, 0, + 0, 48, 0, 0, 49, 0, 210, 81, 82, 53, + 0, 0, 0, 87, 57, 66, 0, 847, 0, 0, + 68, 0, 0, 0, 0, 0, 0, 0, 0, 60, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 73, 196, 0, 0, 0, 66, 48, 0, 0, + 49, 68, 0, 81, 82, 53, 0, 0, 0, 87, + 57, 0, 0, 195, 0, 0, 0, 0, 0, 0, + 0, 72, 73, 196, 0, 60, 0, 0, 211, 0, + 289, 211, 0, 0, 81, 82, 211, 0, 0, 0, + 87, 211, 66, 0, 1477, 0, 0, 68, 0, 0, + 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, + 0, 289, 0, 0, 0, 0, 0, 72, 73, 196, + 0, 0, 0, 211, 210, 0, 0, 210, 211, 0, + 81, 82, 210, 0, 0, 0, 87, 210, 0, 0, + 1572, 0, 0, 0, 0, 0, 0, 0, 211, 211, + 196, 0, 210, 0, 0, 0, 0, 289, 0, 0, + 0, 211, 211, 0, 0, 0, 0, 211, 0, 210, + 0, 211, 0, 0, 210, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, + 0, 0, 0, 0, 210, 210, 196, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 210, 0, + 673, 0, 0, 210, 0, 0, 0, 210, 0, 0, + 673, 673, 0, 0, 0, 673, 0, 211, 0, 0, + 0, 0, 0, 0, 289, 673, 673, 673, 0, 0, + 0, 0, 673, 0, 0, 0, 0, 0, 0, 673, + 673, 673, 0, 0, 673, 0, 673, 0, 673, 672, + 672, 673, 0, 0, 672, 211, 673, 0, 0, 0, + 0, 673, 0, 210, 672, 672, 672, 0, 673, 0, + 0, 672, 0, 0, 673, 0, 0, 0, 672, 672, + 672, 673, 0, 672, 0, 672, 0, 672, 0, 0, + 672, 0, 0, 673, 0, 672, 673, 0, 0, 0, + 672, 210, 673, 0, 0, 0, 0, 672, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 672, 0, 673, 673, 0, 0, 0, 0, 0, 0, + 0, 0, 672, 0, 0, 672, 0, 0, 0, 0, + 0, 672, + }; + protected static readonly short [] yyCheck = { 17, + 50, 138, 6, 91, 92, 288, 41, 247, 208, 192, + 749, 311, 576, 20, 20, 18, 41, 650, 501, 0, + 0, 205, 17, 0, 703, 0, 543, 20, 0, 79, + 489, 51, 1017, 83, 77, 238, 494, 0, 17, 309, + 1010, 256, 52, 1190, 64, 357, 347, 0, 787, 1034, + 1020, 0, 256, 71, 0, 269, 1451, 269, 256, 77, + 256, 256, 69, 256, 256, 256, 256, 256, 46, 89, + 1091, 91, 92, 310, 269, 256, 54, 256, 96, 1191, + 1192, 59, 256, 61, 91, 92, 256, 65, 17, 67, + 110, 550, 1096, 576, 256, 1080, 74, 75, 1119, 309, + 17, 309, 1214, 562, 256, 83, 256, 309, 1091, 945, + 88, 256, 90, 256, 256, 256, 1023, 0, 256, 383, + 138, 256, 392, 393, 212, 213, 17, 471, 1098, 1241, + 20, 1526, 1153, 1023, 970, 392, 1119, 115, 363, 289, + 325, 661, 662, 161, 363, 393, 356, 270, 356, 393, + 335, 417, 418, 419, 356, 403, 290, 1552, 193, 403, + 724, 346, 410, 388, 1071, 1186, 161, 650, 405, 388, + 1153, 294, 911, 307, 388, 389, 1180, 256, 266, 69, + 390, 1071, 161, 324, 256, 364, 336, 275, 390, 393, + 324, 455, 390, 256, 17, 256, 540, 256, 455, 403, + 390, 91, 92, 1186, 269, 212, 213, 403, 296, 405, + 245, 392, 277, 672, 410, 1051, 405, 410, 410, 410, + 390, 363, 462, 493, 494, 367, 388, 369, 17, 403, + 372, 373, 161, 375, 376, 253, 254, 241, 17, 309, + 455, 724, 260, 405, 161, 459, 381, 459, 560, 457, + 17, 310, 710, 565, 342, 457, 568, 307, 753, 266, + 755, 403, 280, 467, 459, 283, 284, 457, 275, 287, + 161, 281, 282, 476, 477, 1422, 257, 257, 773, 297, + 257, 288, 257, 1374, 256, 295, 356, 782, 306, 296, + 300, 309, 270, 311, 257, 256, 316, 756, 318, 277, + 759, 1392, 322, 455, 257, 455, 1291, 1419, 257, 988, + 455, 257, 455, 451, 1426, 1300, 1301, 360, 383, 291, + 458, 455, 212, 213, 403, 467, 405, 462, 463, 464, + 465, 410, 404, 792, 256, 342, 308, 256, 161, 357, + 358, 404, 360, 404, 403, 1366, 405, 328, 328, 359, + 256, 410, 256, 328, 538, 443, 444, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 672, 161, 17, 257, 328, 266, 1347, 310, 328, + 256, 1402, 161, 1366, 256, 275, 17, 457, 256, 17, + 455, 363, 262, 325, 161, 1335, 414, 467, 288, 256, + 17, 0, 256, 923, 17, 925, 296, 927, 389, 390, + 390, 388, 403, 381, 17, 503, 388, 256, 310, 1402, + 392, 256, 394, 443, 444, 1090, 309, 447, 1280, 267, + 440, 392, 404, 394, 256, 267, 443, 444, 256, 1530, + 710, 256, 256, 404, 479, 328, 316, 256, 585, 256, + 256, 872, 342, 541, 256, 1033, 463, 463, 256, 979, + 256, 981, 453, 983, 346, 1317, 1286, 1558, 963, 1560, + 324, 474, 1457, 356, 393, 493, 494, 484, 484, 900, + 530, 403, 310, 1468, 509, 1576, 506, 1004, 905, 507, + 508, 1008, 1432, 1433, 1434, 346, 503, 403, 336, 403, + 346, 256, 512, 743, 336, 1069, 501, 390, 1141, 1329, + 1249, 1006, 1177, 405, 390, 1254, 1255, 161, 818, 539, + 1259, 1260, 501, 455, 392, 535, 394, 545, 1106, 547, + 161, 403, 1502, 161, 541, 392, 404, 407, 408, 559, + 1023, 306, 560, 561, 161, 389, 1285, 565, 161, 1182, + 568, 529, 391, 443, 444, 390, 310, 1052, 161, 577, + 578, 579, 1082, 1548, 403, 575, 404, 585, 256, 310, + 383, 393, 404, 455, 457, 393, 390, 405, 393, 449, + 1075, 576, 1003, 1000, 393, 392, 1069, 393, 1071, 1109, + 388, 393, 388, 380, 392, 325, 392, 576, 1093, 389, + 310, 325, 1097, 1588, 455, 335, 0, 394, 363, 455, + 405, 335, 367, 503, 369, 1600, 346, 372, 373, 1136, + 375, 376, 346, 467, 1172, 257, 380, 392, 389, 383, + 393, 609, 389, 393, 257, 308, 390, 657, 656, 659, + 394, 454, 455, 661, 662, 310, 664, 390, 403, 669, + 383, 541, 952, 466, 389, 650, 389, 256, 1141, 325, + 388, 389, 403, 393, 405, 1185, 1214, 388, 389, 335, + 400, 650, 467, 389, 652, 363, 400, 467, 383, 367, + 346, 369, 689, 393, 372, 373, 1206, 375, 376, 405, + 363, 709, 710, 403, 714, 405, 689, 392, 325, 1182, + 308, 455, 790, 721, 467, 256, 467, 467, 335, 308, + 467, 310, 467, 263, 734, 388, 766, 460, 768, 346, + 256, 454, 455, 308, 749, 455, 1367, 308, 393, 724, + 394, 455, 467, 466, 400, 389, 389, 388, 403, 467, + 405, 393, 392, 1482, 1483, 724, 467, 0, 931, 273, + 455, 467, 1211, 1492, 405, 363, 393, 1496, 263, 451, + 455, 779, 787, 28, 363, 783, 458, 785, 388, 403, + 309, 466, 1366, 400, 310, 1416, 1235, 42, 363, 467, + 388, 380, 363, 790, 383, 405, 764, 337, 455, 388, + 314, 390, 391, 392, 393, 394, 460, 396, 816, 689, + 818, 455, 455, 388, 403, 455, 405, 388, 1402, 946, + 845, 410, 363, 412, 388, 467, 367, 356, 369, 453, + 344, 372, 373, 0, 375, 376, 309, 363, 455, 256, + 467, 367, 337, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 1378, 947, 324, 273, 410, 856, + 856, 273, 394, 389, 453, 391, 455, 393, 876, 884, + 948, 403, 256, 319, 256, 256, 968, 403, 404, 405, + 1578, 1579, 1366, 356, 1408, 893, 1116, 413, 414, 270, + 1311, 1312, 451, 903, 420, 421, 911, 1318, 314, 451, + 363, 1091, 314, 1601, 904, 390, 458, 466, 434, 435, + 790, 1332, 390, 294, 392, 923, 394, 925, 1402, 927, + 410, 453, 448, 278, 308, 388, 310, 324, 344, 1119, + 1366, 939, 344, 288, 1366, 405, 944, 1358, 946, 936, + 936, 467, 405, 951, 952, 953, 363, 302, 303, 304, + 367, 948, 369, 1366, 1032, 372, 373, 310, 375, 376, + 957, 451, 405, 1153, 319, 1366, 1402, 388, 458, 388, + 1402, 979, 325, 981, 957, 983, 466, 985, 978, 363, + 363, 363, 460, 388, 405, 367, 405, 369, 310, 1402, + 372, 373, 392, 375, 376, 388, 1186, 1446, 998, 383, + 405, 1402, 1010, 325, 388, 388, 390, 391, 392, 393, + 365, 422, 1020, 256, 389, 1012, 388, 1466, 393, 403, + 1017, 405, 405, 389, 391, 1033, 410, 393, 412, 1012, + 405, 1031, 380, 405, 1017, 1032, 403, 1034, 1023, 1047, + 451, 0, 390, 390, 319, 4, 394, 458, 396, 396, + 467, 1034, 391, 392, 1023, 466, 389, 405, 405, 394, + 393, 1101, 435, 1293, 403, 308, 1091, 310, 948, 453, + 405, 455, 405, 256, 1082, 448, 1091, 957, 389, 1087, + 302, 391, 410, 1080, 1069, 467, 1071, 415, 416, 256, + 1098, 455, 403, 403, 1119, 391, 460, 1080, 1106, 410, + 1069, 1109, 1071, 1111, 1119, 411, 412, 1147, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 451, + 363, 391, 428, 429, 391, 393, 458, 391, 1153, 413, + 391, 381, 1012, 403, 466, 403, 403, 1017, 388, 403, + 383, 308, 403, 310, 420, 388, 391, 256, 391, 392, + 393, 1229, 1032, 393, 1034, 393, 1141, 414, 403, 393, + 403, 1186, 405, 403, 388, 403, 403, 410, 405, 403, + 455, 1186, 1141, 410, 434, 460, 273, 1185, 1256, 404, + 363, 278, 421, 389, 367, 410, 369, 393, 1461, 372, + 373, 288, 375, 376, 1188, 1189, 363, 1182, 1206, 392, + 1080, 394, 403, 405, 405, 302, 303, 304, 256, 410, + 453, 390, 455, 1182, 404, 1225, 383, 314, 380, 389, + 410, 388, 319, 393, 391, 392, 393, 430, 431, 432, + 433, 1256, 1229, 392, 1249, 403, 403, 405, 405, 1254, + 1255, 377, 378, 410, 1259, 1260, 455, 344, 1242, 391, + 1244, 393, 1246, 451, 363, 1280, 377, 378, 367, 1256, + 369, 389, 390, 372, 373, 1280, 375, 376, 365, 328, + 1285, 425, 426, 427, 1352, 400, 401, 402, 403, 256, + 404, 405, 406, 407, 467, 403, 453, 405, 455, 1286, + 455, 1288, 1317, 1371, 1291, 394, 395, 396, 404, 397, + 398, 399, 1317, 1300, 1301, 389, 390, 403, 1291, 405, + 1307, 403, 403, 405, 405, 363, 392, 1300, 1301, 367, + 403, 369, 405, 302, 372, 373, 392, 375, 376, 385, + 386, 394, 1329, 391, 392, 256, 394, 388, 389, 1347, + 1365, 1366, 1367, 388, 389, 403, 404, 388, 389, 1229, + 1365, 394, 1367, 1378, 256, 1352, 310, 384, 467, 385, + 386, 455, 1440, 1378, 404, 392, 1444, 394, 395, 396, + 397, 310, 399, 455, 1371, 455, 1256, 1402, 0, 1289, + 1290, 1459, 410, 1408, 1283, 1284, 392, 393, 458, 578, + 579, 1416, 1519, 1408, 404, 422, 423, 424, 403, 256, + 404, 1416, 455, 379, 396, 455, 1286, 405, 1288, 390, + 256, 1291, 1452, 451, 403, 393, 455, 412, 393, 467, + 1300, 1301, 392, 455, 393, 393, 310, 1307, 310, 392, + 256, 310, 394, 460, 310, 393, 1563, 410, 405, 389, + 404, 394, 403, 1440, 310, 405, 403, 1444, 310, 1329, + 393, 403, 403, 310, 388, 403, 393, 310, 310, 403, + 1457, 455, 1459, 391, 1461, 392, 404, 1482, 1483, 394, + 393, 1468, 1352, 455, 1457, 410, 256, 1492, 1605, 410, + 404, 1496, 1507, 393, 287, 1468, 393, 374, 391, 388, + 455, 1371, 404, 404, 1502, 403, 393, 393, 393, 404, + 393, 370, 393, 393, 410, 256, 363, 1532, 1533, 455, + 367, 1519, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 404, 389, 1550, 370, 391, 403, 388, + 306, 389, 389, 1541, 391, 371, 393, 410, 388, 371, + 389, 388, 403, 302, 389, 379, 403, 404, 405, 389, + 392, 1548, 1549, 1578, 1579, 1563, 404, 1597, 1598, 392, + 1440, 455, 392, 455, 1444, 1548, 1549, 455, 256, 455, + 273, 274, 410, 1613, 1614, 278, 1601, 1457, 256, 1459, + 394, 1461, 392, 451, 0, 288, 289, 290, 1468, 405, + 388, 1588, 295, 394, 454, 392, 291, 1605, 393, 302, + 303, 304, 393, 1600, 307, 1588, 393, 393, 311, 393, + 467, 314, 291, 256, 404, 404, 319, 1600, 308, 393, + 455, 324, 403, 363, 256, 389, 404, 455, 331, 361, + 405, 410, 388, 388, 256, 257, 388, 405, 392, 388, + 403, 344, 264, 393, 389, 267, 268, 269, 389, 271, + 272, 389, 274, 275, 276, 277, 359, 279, 280, 281, + 389, 455, 365, 455, 388, 287, 392, 455, 1548, 1549, + 292, 404, 392, 295, 296, 392, 404, 404, 300, 301, + 302, 404, 455, 305, 306, 392, 256, 392, 410, 403, + 405, 313, 410, 0, 390, 317, 318, 403, 455, 321, + 322, 393, 393, 388, 393, 405, 403, 393, 1588, 256, + 403, 393, 455, 455, 336, 389, 338, 339, 340, 455, + 1600, 404, 391, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 404, 388, + 405, 405, 364, 405, 404, 367, 368, 410, 337, 263, + 404, 389, 410, 389, 0, 388, 0, 405, 405, 389, + 382, 383, 391, 0, 405, 388, 388, 389, 390, 388, + 392, 391, 393, 388, 455, 455, 393, 405, 405, 393, + 393, 393, 389, 405, 406, 407, 408, 409, 393, 389, + 388, 413, 389, 388, 405, 405, 455, 390, 455, 405, + 394, 423, 424, 405, 405, 337, 405, 263, 40, 405, + 193, 12, 1409, 405, 405, 405, 5, 1409, 1186, 1119, + 936, 856, 1153, 1278, 1047, 1555, 1047, 1568, 450, 1505, + 1522, 1544, 454, 455, 1514, 1282, 690, 459, 460, 461, + 256, 257, 884, 1426, 742, 467, 1614, 469, 264, 1402, + 884, 267, 268, 269, 1616, 271, 272, 1425, 274, 275, + 276, 277, 1537, 279, 280, 281, 1533, 1532, 1317, 1598, + 1235, 845, 20, 1424, 1012, 1307, 292, 571, 758, 295, + 296, 358, 358, 584, 300, 301, 302, 309, 0, 305, + 306, 494, 721, 1107, 709, 408, 411, 313, 409, 586, + 410, 317, 318, 412, 1326, 321, 322, 413, 817, 1371, + 161, 968, 1024, 1024, 1074, 895, 899, 452, 452, 667, + 336, 508, 338, 339, 340, 1224, 1111, 531, 161, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, -1, -1, -1, -1, 364, 256, + -1, 367, 368, 853, -1, 262, -1, -1, -1, -1, + -1, -1, -1, 852, -1, -1, 382, 383, -1, -1, + -1, -1, 388, 389, 390, -1, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 405, + 406, 407, 408, 409, -1, -1, -1, 413, -1, -1, + -1, 308, -1, 310, -1, -1, 0, 423, 424, 316, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 450, -1, -1, -1, 454, 455, + -1, -1, -1, 459, 460, 461, -1, -1, -1, -1, + -1, 467, -1, 469, -1, -1, 363, -1, -1, -1, + 367, -1, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, -1, -1, 383, 384, -1, -1, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, -1, 399, -1, -1, -1, 403, 404, 405, 0, + 407, 408, -1, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + -1, 448, 449, -1, 256, 257, 453, -1, 455, 261, + -1, -1, -1, 460, -1, -1, -1, -1, -1, -1, + 467, 273, 274, -1, -1, -1, 278, -1, -1, -1, + -1, -1, -1, 285, -1, -1, 288, 289, 290, -1, + -1, 293, -1, 295, -1, -1, -1, -1, -1, -1, + 302, 303, 304, -1, -1, 307, -1, 309, -1, 311, + -1, -1, 314, 315, -1, -1, -1, 319, 320, 321, + -1, -1, 324, -1, 326, -1, 328, 0, 330, 331, + 332, 333, 334, -1, -1, -1, -1, -1, -1, -1, + 342, -1, 344, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 355, 356, -1, -1, 359, 360, -1, + 362, -1, -1, 365, -1, -1, -1, -1, -1, -1, + -1, -1, 256, 257, -1, -1, -1, 261, -1, -1, + 382, -1, -1, -1, -1, -1, -1, 389, 390, 273, + 274, -1, -1, -1, 278, -1, -1, -1, -1, -1, + -1, 285, -1, 405, 288, 289, 290, -1, -1, 293, + -1, 295, -1, -1, -1, -1, -1, 0, 302, 303, + 304, -1, -1, 307, -1, 309, -1, 311, -1, -1, + 314, 315, -1, -1, -1, 319, 320, 321, -1, -1, + 324, -1, 326, -1, -1, -1, 330, 331, 332, 333, + 334, -1, -1, -1, 456, 457, -1, -1, 342, -1, + 344, -1, -1, -1, -1, 467, 257, -1, -1, -1, + 261, 355, 356, -1, -1, 359, 360, -1, 362, -1, + -1, 365, 273, -1, -1, -1, -1, 278, -1, -1, + -1, -1, -1, -1, 285, -1, -1, 288, 382, -1, + -1, -1, 293, -1, -1, 389, 390, -1, -1, -1, + -1, 302, 303, 304, -1, -1, -1, -1, 309, -1, + -1, -1, -1, 314, 315, -1, -1, -1, 319, 320, + 321, -1, 0, -1, -1, 326, -1, 328, -1, 330, + -1, 332, 333, 334, -1, -1, -1, -1, -1, -1, + -1, 342, -1, 344, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 355, 356, -1, -1, -1, 360, + -1, 362, 456, 457, 365, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, -1, -1, -1, 261, -1, + -1, 382, -1, -1, -1, -1, -1, -1, 389, 390, + 273, -1, -1, -1, -1, 278, -1, -1, -1, -1, + -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, + 293, -1, 0, -1, -1, -1, -1, -1, -1, 302, + 303, 304, -1, -1, -1, -1, 309, -1, -1, -1, + -1, 314, 315, -1, -1, -1, 319, 320, 321, -1, + -1, -1, -1, 326, -1, -1, -1, 330, -1, 332, + 333, 334, -1, -1, -1, 456, 457, -1, -1, 342, + -1, 344, -1, -1, 257, -1, -1, -1, 261, -1, + 263, -1, 355, 356, -1, -1, -1, 360, -1, 362, + 273, 274, 365, -1, -1, 278, -1, -1, -1, -1, + -1, -1, 285, -1, -1, 288, 289, 290, -1, 382, + 293, -1, 295, -1, -1, -1, -1, 390, -1, 302, + 303, 304, -1, -1, 307, -1, -1, 310, 311, -1, + -1, 314, 315, -1, -1, -1, 319, 320, 321, -1, + -1, 324, 325, 326, -1, 328, -1, 330, 331, 332, + 333, 334, -1, -1, 337, -1, -1, -1, -1, 342, + -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 355, -1, -1, -1, 359, 360, -1, 362, + -1, -1, 365, 456, 457, -1, -1, -1, -1, 257, + -1, -1, -1, 261, -1, -1, -1, -1, -1, 382, + 274, -1, 385, 386, 278, 273, -1, -1, -1, -1, + 278, -1, -1, -1, 288, 289, 290, 285, -1, -1, + 288, 295, -1, -1, -1, 293, -1, -1, 302, 303, + 304, -1, -1, 307, 302, 303, 304, 311, -1, -1, + -1, -1, -1, -1, -1, 319, 314, 315, -1, -1, + 324, 319, 320, 321, -1, -1, -1, 331, 326, -1, + -1, -1, 330, -1, 332, 333, 334, -1, -1, -1, + -1, -1, 455, 456, 342, -1, 344, -1, -1, 257, + -1, -1, -1, 261, 55, 359, -1, 355, -1, -1, + -1, 365, 360, -1, 362, 273, -1, 365, -1, -1, + 278, -1, -1, -1, -1, -1, -1, 285, -1, 80, + 288, -1, -1, -1, 382, 293, -1, -1, -1, -1, + -1, 389, -1, 94, 302, 303, 304, 98, 99, 100, + 101, 102, 103, 104, 105, -1, 314, 315, -1, -1, + -1, 319, 320, 321, -1, -1, -1, -1, 326, -1, + -1, -1, 330, -1, 332, 333, 334, -1, -1, -1, + -1, -1, -1, -1, 342, -1, 344, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 355, -1, -1, + -1, -1, 360, -1, 362, -1, -1, 365, 456, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, -1, -1, -1, 382, 264, -1, -1, 267, 268, + 269, 389, 271, 272, -1, 274, 275, 276, 277, -1, + 279, 280, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 292, -1, -1, 295, 296, -1, -1, + -1, 300, 301, 302, -1, -1, 305, 306, -1, -1, + -1, -1, -1, -1, 313, -1, -1, -1, 317, 318, + -1, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 336, 456, 338, + 339, 340, -1, -1, -1, -1, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 272, -1, -1, -1, 364, -1, -1, 367, 368, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 405, 406, 407, 408, + 409, -1, -1, -1, 413, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 423, 424, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 450, -1, -1, -1, 454, 455, -1, -1, -1, + 459, 460, 461, -1, -1, -1, -1, -1, -1, -1, + 469, -1, -1, -1, -1, -1, -1, -1, 389, 390, + 391, -1, -1, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 256, -1, -1, -1, -1, -1, -1, + -1, 264, -1, -1, 267, 268, -1, -1, 271, 272, + -1, 274, 275, 276, 277, -1, 279, 280, 281, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 292, + -1, -1, 295, 296, -1, -1, -1, 300, 301, 302, + -1, -1, 305, 306, -1, -1, -1, -1, -1, -1, + 313, -1, -1, -1, 317, 318, -1, -1, 321, 322, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 336, -1, 338, 339, 340, -1, -1, + -1, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, -1, -1, + -1, 364, -1, -1, 367, 368, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, + 383, -1, -1, -1, -1, -1, -1, 390, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 405, 406, 407, 408, 409, -1, -1, -1, + 413, 274, -1, -1, -1, 278, -1, -1, -1, -1, + 423, 424, -1, -1, -1, 288, 289, 290, -1, -1, + -1, -1, 295, -1, -1, -1, -1, -1, -1, 302, + 303, 304, -1, -1, 307, -1, 309, 450, 311, -1, + -1, 454, 455, -1, -1, -1, 319, 460, 461, 256, + -1, 324, -1, -1, 467, -1, 469, 264, 331, -1, + 267, 268, -1, -1, 271, 272, -1, 274, 275, 276, + 277, -1, 279, 280, 281, -1, -1, -1, -1, -1, + -1, -1, -1, 356, -1, 292, 359, -1, 295, 296, + -1, -1, 365, 300, 301, 302, -1, -1, 305, 306, + -1, -1, -1, -1, -1, -1, 313, -1, -1, -1, + 317, 318, -1, -1, 321, 322, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 336, + -1, 338, 339, 340, -1, -1, -1, -1, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, -1, -1, -1, -1, 364, -1, -1, + 367, 368, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 382, 383, -1, -1, -1, + -1, 388, -1, 390, -1, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 405, 406, + 407, 408, 409, -1, -1, -1, 413, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 423, 424, -1, -1, + -1, 256, -1, -1, -1, -1, -1, -1, -1, 264, + -1, -1, 267, 268, -1, -1, 271, 272, -1, 274, + 275, 276, 277, 450, 279, 280, 281, 454, 455, -1, + -1, -1, -1, 460, 461, -1, -1, 292, -1, -1, + 295, 296, 469, -1, -1, 300, 301, 302, -1, -1, + 305, 306, -1, -1, -1, -1, -1, -1, 313, -1, + -1, -1, 317, 318, -1, -1, 321, 322, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 336, -1, 338, 339, 340, -1, -1, -1, -1, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, -1, -1, -1, -1, 364, + -1, -1, 367, 368, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 382, 383, -1, + -1, -1, -1, -1, -1, 390, -1, 392, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 405, 406, 407, 408, 409, -1, -1, -1, 413, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 423, 424, + -1, -1, -1, 256, -1, -1, -1, -1, -1, -1, + -1, 264, -1, -1, 267, 268, -1, -1, 271, 272, + -1, 274, 275, 276, 277, 450, 279, 280, 281, 454, + 455, -1, -1, -1, -1, 460, 461, -1, -1, 292, + -1, -1, 295, 296, 469, -1, -1, 300, 301, 302, + -1, -1, 305, 306, -1, -1, -1, -1, -1, -1, + 313, -1, -1, -1, 317, 318, -1, -1, 321, 322, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 336, -1, 338, 339, 340, -1, -1, + -1, -1, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, -1, -1, -1, + -1, 364, -1, -1, 367, 368, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, + 383, -1, -1, -1, -1, -1, -1, 390, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 405, 406, 407, 408, 409, -1, -1, -1, + 413, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 423, 424, -1, -1, -1, 256, -1, -1, -1, -1, + -1, -1, -1, 264, -1, -1, 267, 268, -1, -1, + 271, 272, -1, 274, 275, 276, 277, 450, 279, 280, + 281, 454, 455, -1, -1, -1, -1, 460, 461, -1, + -1, 292, -1, -1, 295, 296, 469, -1, -1, 300, + 301, 302, -1, -1, 305, 306, -1, -1, -1, -1, + -1, -1, 313, -1, -1, -1, 317, 318, -1, -1, + 321, 322, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 336, -1, 338, 339, 340, + -1, -1, -1, -1, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, -1, + -1, -1, -1, 364, -1, -1, 367, 368, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 382, 383, -1, -1, -1, -1, -1, -1, 390, + -1, 392, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 405, 406, 407, 408, 409, -1, + -1, -1, 413, -1, -1, -1, 256, -1, -1, -1, + -1, -1, 423, 424, 264, -1, -1, -1, 268, -1, + -1, 271, 272, -1, -1, -1, 276, 277, -1, 279, + -1, 281, -1, -1, -1, -1, -1, -1, -1, 450, + -1, -1, 292, 454, 455, -1, 296, -1, -1, 460, + 461, -1, 302, -1, -1, -1, -1, -1, 469, -1, + -1, -1, -1, 313, -1, -1, -1, -1, 318, -1, + -1, 321, 322, -1, -1, 325, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 335, -1, -1, 338, 339, + 340, -1, -1, -1, -1, -1, 346, -1, 348, -1, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 367, 368, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 382, 383, -1, -1, -1, -1, -1, -1, + 390, -1, 392, -1, -1, -1, -1, -1, 264, -1, + -1, -1, 268, -1, -1, 271, 406, 407, 408, 409, + 276, -1, -1, 413, -1, 281, -1, 256, -1, -1, + -1, -1, -1, 423, 424, 264, -1, -1, -1, 268, + 296, -1, 271, 272, -1, -1, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, 313, -1, -1, + 450, -1, 318, 292, 454, 455, -1, 296, -1, -1, + 460, 461, -1, 302, -1, -1, -1, -1, -1, 469, + -1, -1, 338, 339, 313, -1, -1, -1, -1, 318, + 346, -1, 321, 322, -1, 351, 352, -1, -1, -1, + -1, 357, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + 359, -1, -1, -1, -1, -1, 392, -1, 367, 368, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, 411, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, -1, -1, -1, 256, -1, + -1, -1, -1, -1, 423, 424, 264, -1, -1, 455, + 268, -1, -1, 271, 272, -1, -1, -1, 276, 277, + -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, + -1, 450, -1, -1, 292, 454, 455, -1, 296, -1, + -1, 460, 461, -1, 302, -1, -1, -1, -1, -1, + 469, -1, -1, -1, -1, 313, -1, -1, 268, -1, + 318, 271, -1, 321, 322, -1, 276, -1, -1, -1, + -1, 281, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, 340, -1, -1, -1, 296, -1, 346, -1, + 348, -1, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, -1, 313, -1, -1, -1, -1, 318, 367, + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 382, 383, -1, -1, 338, 339, + -1, -1, 390, -1, 392, -1, -1, -1, -1, -1, + -1, 351, 352, -1, -1, -1, -1, 357, 406, 407, + 408, 409, -1, -1, -1, 413, -1, -1, -1, 256, + -1, -1, -1, -1, -1, 423, 424, 264, -1, -1, + -1, 268, -1, -1, 271, 272, -1, -1, -1, 276, + 277, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, 450, -1, -1, 292, 454, 455, -1, 296, + -1, -1, 460, 461, -1, 302, -1, 417, -1, -1, + -1, 469, -1, -1, -1, -1, 313, -1, -1, -1, + -1, 318, -1, -1, 321, 322, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, 340, -1, 455, -1, -1, -1, 346, + -1, 348, -1, 350, 351, 352, 353, 354, -1, -1, + 357, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 367, 368, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 382, 383, -1, -1, -1, + -1, -1, -1, 390, -1, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, + 407, 408, 409, -1, -1, -1, 413, -1, -1, -1, + 256, -1, -1, -1, -1, -1, 423, 424, 264, -1, + -1, -1, 268, -1, -1, 271, 272, -1, -1, -1, + 276, 277, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, -1, 450, -1, -1, 292, 454, 455, -1, + 296, -1, -1, 460, 461, -1, 302, -1, -1, -1, + -1, -1, 469, -1, -1, -1, -1, 313, -1, -1, + -1, -1, 318, -1, -1, 321, 322, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 338, 339, 340, -1, -1, -1, -1, -1, + 346, -1, 348, -1, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 367, 368, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 382, 383, -1, -1, + -1, -1, -1, -1, 390, -1, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 406, 407, 408, 409, -1, -1, -1, 413, -1, -1, + -1, 256, -1, -1, -1, -1, -1, 423, 424, 264, + -1, -1, -1, 268, -1, -1, 271, 272, -1, -1, + -1, 276, 277, -1, 279, -1, 281, -1, -1, -1, + -1, -1, -1, -1, 450, -1, -1, 292, 454, 455, + -1, 296, -1, -1, 460, 461, -1, 302, -1, -1, + -1, -1, -1, 469, -1, -1, -1, -1, 313, -1, + -1, -1, -1, 318, -1, -1, 321, 322, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, 340, -1, -1, -1, -1, + -1, 346, -1, 348, -1, 350, 351, 352, 353, 354, + -1, -1, 357, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 367, 368, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 382, 383, -1, + -1, -1, -1, -1, -1, 390, -1, 392, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 406, 407, 408, 409, -1, -1, -1, 413, -1, + -1, -1, 256, -1, -1, -1, -1, -1, 423, 424, + 264, -1, -1, -1, 268, -1, -1, 271, 272, -1, + -1, -1, 276, 277, -1, 279, -1, 281, -1, -1, + -1, -1, -1, -1, -1, 450, -1, -1, 292, 454, + 455, -1, 296, -1, -1, 460, 461, -1, 302, -1, + -1, -1, -1, -1, 469, -1, -1, -1, -1, 313, + -1, -1, -1, -1, 318, -1, -1, 321, 322, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, 340, -1, -1, -1, + -1, -1, 346, -1, 348, -1, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 367, 368, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 382, 383, + -1, -1, -1, -1, -1, -1, 390, -1, 392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 406, 407, 408, 409, -1, -1, -1, 413, + -1, -1, -1, 256, -1, -1, -1, -1, -1, 423, + 424, 264, -1, -1, -1, 268, -1, -1, 271, 272, + -1, -1, -1, 276, 277, -1, 279, -1, 281, -1, + -1, -1, -1, -1, -1, -1, 450, -1, -1, 292, + 454, 455, -1, 296, -1, -1, 460, 461, -1, 302, + -1, -1, -1, -1, -1, 469, -1, -1, -1, -1, + 313, -1, -1, -1, -1, 318, -1, -1, 321, 322, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, 340, -1, -1, + -1, -1, -1, 346, -1, 348, -1, 350, 351, 352, + 353, 354, -1, -1, 357, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 367, 368, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, + 383, -1, -1, -1, -1, -1, -1, 390, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 406, 407, 408, 409, -1, -1, -1, + 413, -1, -1, -1, 256, -1, -1, -1, -1, -1, + 423, 424, 264, -1, -1, -1, 268, -1, -1, 271, + 272, -1, -1, -1, 276, 277, -1, 279, -1, 281, + -1, -1, -1, -1, -1, -1, -1, 450, -1, -1, + 292, 454, 455, -1, 296, -1, -1, 460, 461, -1, + 302, -1, -1, -1, -1, -1, 469, -1, -1, -1, + -1, 313, -1, -1, -1, -1, 318, -1, -1, 321, + 322, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, 339, 340, -1, + -1, -1, -1, -1, 346, -1, 348, -1, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 367, 368, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 382, 383, -1, -1, -1, -1, -1, -1, 390, -1, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 406, 407, 408, 409, -1, -1, + 256, 413, -1, -1, -1, 256, -1, -1, -1, -1, + -1, 423, 424, 264, -1, -1, -1, 268, -1, -1, + 271, 272, -1, -1, -1, 276, 277, -1, 279, -1, + 281, -1, -1, -1, -1, -1, -1, -1, 450, -1, + -1, 292, 454, 455, -1, 296, -1, -1, 460, 461, + -1, 302, -1, -1, 310, -1, -1, 469, -1, -1, + -1, -1, 313, -1, -1, -1, -1, 318, -1, -1, + 321, 322, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, 340, + -1, -1, -1, -1, -1, 346, -1, 348, -1, 350, + 351, 352, 353, 354, -1, -1, 357, 363, -1, -1, + -1, 367, -1, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, -1, -1, -1, -1, -1, + -1, 382, 383, 389, -1, 391, -1, 393, -1, 390, + -1, 392, -1, 394, -1, -1, -1, 403, 404, 405, + -1, -1, -1, -1, -1, 406, 407, 408, 409, -1, + -1, 256, 413, -1, -1, 421, 256, -1, -1, -1, + -1, -1, 423, 424, 264, -1, -1, -1, 268, 435, + -1, 271, 272, -1, -1, -1, 276, 277, -1, 279, + -1, 281, 448, -1, -1, -1, -1, -1, -1, 450, + -1, -1, 292, 454, 455, -1, 296, -1, -1, 460, + 461, 467, 302, -1, -1, 310, -1, -1, 469, -1, + -1, -1, -1, 313, -1, -1, -1, -1, 318, -1, + -1, 321, 322, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, + 340, -1, -1, -1, -1, -1, 346, -1, 348, -1, + 350, 351, 352, 353, 354, -1, -1, 357, 363, -1, + -1, -1, 367, -1, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, -1, -1, -1, -1, -1, + -1, -1, 382, 383, 389, -1, 391, -1, 393, -1, + 390, -1, 392, -1, -1, -1, -1, -1, 403, 404, + 405, -1, -1, -1, -1, -1, 406, 407, 408, 409, + -1, -1, 256, 413, -1, -1, 421, 256, -1, -1, + -1, -1, -1, 423, 424, 264, -1, -1, -1, 268, + 435, -1, 271, 272, -1, -1, -1, 276, 277, -1, + 279, -1, 281, 448, -1, -1, -1, -1, -1, -1, + 450, -1, -1, 292, 454, 455, -1, 296, -1, -1, + 460, 461, 467, 302, -1, -1, 310, -1, -1, 469, + -1, -1, -1, -1, 313, -1, -1, -1, -1, 318, + -1, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, 363, + -1, -1, -1, 367, -1, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, -1, -1, -1, -1, + -1, -1, -1, 382, 383, 389, -1, 391, -1, 393, + -1, 390, -1, 392, -1, -1, -1, -1, -1, 403, + 404, 405, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, 256, 413, -1, -1, 421, 256, -1, + -1, -1, -1, -1, 423, 424, 264, -1, -1, -1, + 268, -1, -1, 271, 272, -1, -1, -1, 276, 277, + -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, + -1, 450, -1, -1, 292, 454, 455, -1, 296, -1, + -1, 460, 461, 467, 302, -1, -1, 310, -1, -1, + 469, -1, -1, -1, -1, 313, -1, -1, -1, -1, + 318, -1, -1, 321, 322, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, 340, -1, -1, -1, -1, -1, 346, -1, + 348, -1, 350, 351, 352, 353, 354, -1, -1, 357, + 363, -1, -1, -1, 367, -1, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, -1, -1, -1, -1, + -1, -1, -1, -1, 382, 383, 389, -1, 391, -1, + 393, -1, 390, -1, 392, -1, -1, -1, -1, -1, + 403, 404, 405, -1, -1, -1, -1, -1, 406, 407, + 408, 409, -1, -1, -1, 413, -1, -1, -1, 256, + -1, -1, -1, -1, -1, 423, 424, 264, -1, -1, + -1, 268, -1, -1, 271, 272, -1, -1, -1, 276, + 277, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, 450, -1, -1, 292, 454, 455, -1, 296, + -1, -1, 460, 461, 467, 302, -1, -1, -1, -1, + -1, 469, -1, -1, -1, -1, 313, -1, -1, -1, + -1, 318, -1, -1, 321, 322, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, 340, -1, -1, -1, -1, -1, 346, + -1, 348, -1, 350, 351, 352, 353, 354, -1, -1, + 357, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 382, 383, -1, -1, -1, + -1, -1, -1, 390, -1, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, + 407, 408, 409, -1, -1, -1, 413, -1, -1, -1, + 256, -1, -1, -1, -1, -1, 423, 424, 264, -1, + -1, -1, 268, -1, -1, 271, 272, -1, -1, -1, + 276, 277, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, -1, 450, -1, -1, 292, 454, 455, -1, + 296, -1, -1, 460, 461, -1, 302, -1, -1, -1, + -1, -1, 469, -1, -1, -1, -1, 313, -1, -1, + -1, -1, 318, -1, -1, 321, 322, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 338, 339, 340, -1, -1, -1, -1, -1, + 346, -1, 348, -1, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 382, 383, -1, -1, + -1, -1, -1, -1, 390, -1, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 406, 407, 408, 409, -1, -1, -1, 413, -1, -1, + -1, 256, -1, -1, -1, -1, -1, 423, 424, 264, + -1, -1, -1, 268, -1, -1, 271, 272, -1, -1, + -1, 276, 277, -1, 279, -1, 281, -1, -1, -1, + -1, -1, -1, -1, 450, -1, -1, 292, 454, 455, + -1, 296, -1, -1, 460, 461, -1, 302, -1, -1, + -1, -1, -1, 469, -1, -1, -1, -1, 313, -1, + -1, -1, -1, 318, -1, -1, 321, 322, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, 340, -1, -1, -1, -1, + -1, 346, -1, 348, -1, 350, 351, 352, 353, 354, + -1, -1, 357, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 382, 383, -1, + -1, -1, -1, -1, -1, 390, -1, 392, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 406, 407, 408, 409, -1, -1, -1, 413, -1, + -1, -1, 256, -1, -1, -1, -1, -1, 423, 424, + 264, -1, -1, -1, 268, -1, -1, 271, 272, -1, + -1, -1, 276, 277, -1, 279, -1, 281, -1, -1, + -1, -1, -1, -1, -1, 450, -1, -1, 292, 454, + 455, -1, 296, -1, -1, 460, 461, -1, 302, -1, + -1, -1, -1, -1, 469, -1, -1, -1, -1, 313, + -1, -1, -1, -1, 318, -1, -1, 321, 322, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, 340, -1, -1, -1, + -1, -1, 346, -1, 348, -1, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 382, 383, + -1, -1, -1, -1, -1, -1, 390, -1, 392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 406, 407, 408, 409, -1, -1, -1, 413, + -1, -1, -1, 256, -1, -1, -1, -1, -1, 423, + 424, 264, -1, -1, -1, 268, -1, -1, 271, 272, + -1, -1, -1, 276, 277, -1, 279, -1, 281, -1, + -1, -1, -1, -1, -1, -1, 450, -1, -1, 292, + 454, 455, -1, 296, -1, -1, 460, 461, -1, 302, + -1, -1, -1, -1, -1, 469, -1, -1, -1, -1, + 313, -1, -1, -1, -1, 318, -1, -1, 321, 322, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, 340, -1, -1, + -1, -1, -1, 346, -1, 348, -1, 350, 351, 352, + 353, 354, -1, -1, 357, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, + 383, -1, -1, -1, -1, -1, -1, 390, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 406, 407, 408, 409, -1, -1, -1, + 413, -1, -1, -1, 256, -1, -1, -1, -1, -1, + 423, 424, 264, -1, -1, -1, 268, -1, -1, 271, + 272, -1, -1, -1, 276, 277, -1, 279, -1, 281, + -1, -1, -1, -1, -1, -1, -1, 450, -1, -1, + 292, 454, 455, -1, 296, -1, -1, 460, 461, -1, + 302, -1, -1, -1, -1, -1, 469, -1, -1, -1, + -1, 313, -1, -1, -1, -1, 318, -1, -1, 321, + 322, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, 339, 340, -1, + -1, -1, -1, -1, 346, -1, 348, -1, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 382, 383, -1, -1, -1, -1, -1, -1, 390, -1, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 406, 407, 408, 409, -1, -1, + -1, 413, -1, -1, -1, 256, -1, -1, -1, -1, + -1, 423, 424, 264, -1, -1, -1, 268, -1, -1, + 271, 272, -1, -1, -1, 276, 277, -1, 279, -1, + 281, -1, -1, -1, -1, -1, -1, -1, 450, -1, + -1, 292, 454, 455, -1, 296, -1, -1, 460, 461, + -1, 302, -1, -1, -1, -1, -1, 469, -1, -1, + -1, -1, 313, -1, -1, -1, -1, 318, -1, -1, + 321, 322, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, 340, + -1, -1, -1, -1, -1, 346, -1, 348, -1, 350, + 351, 352, 353, 354, -1, -1, 357, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 382, 383, -1, -1, -1, -1, -1, -1, 390, + -1, 392, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 406, 407, 408, 409, -1, + -1, -1, 413, -1, -1, -1, 256, -1, -1, -1, + -1, -1, 423, 424, 264, -1, -1, -1, 268, -1, + -1, 271, 272, -1, -1, -1, 276, 277, -1, 279, + -1, 281, -1, -1, -1, -1, -1, -1, -1, 450, + -1, -1, 292, 454, 455, -1, 296, -1, -1, 460, + 461, -1, 302, -1, -1, -1, -1, -1, 469, -1, + -1, -1, -1, 313, -1, -1, -1, -1, 318, -1, + -1, 321, 322, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, + 340, -1, -1, -1, -1, -1, 346, -1, 348, -1, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 382, 383, -1, -1, -1, -1, -1, -1, + 390, -1, 392, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 406, 407, 408, 409, + -1, -1, -1, 413, -1, -1, -1, 256, -1, -1, + -1, -1, -1, 423, 424, 264, -1, -1, -1, 268, + -1, -1, 271, 272, -1, -1, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + 450, -1, -1, 292, 454, 455, -1, 296, -1, -1, + 460, 461, -1, 302, -1, -1, -1, -1, -1, 469, + -1, -1, -1, -1, 313, -1, -1, -1, -1, 318, + -1, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, -1, -1, -1, 256, -1, + -1, -1, -1, -1, 423, 424, 264, -1, -1, -1, + 268, -1, -1, 271, 272, -1, -1, -1, 276, 277, + -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, + -1, 450, -1, -1, 292, 454, 455, -1, 296, -1, + -1, 460, 461, -1, 302, -1, -1, -1, -1, -1, + 469, -1, -1, -1, -1, 313, -1, -1, -1, -1, + 318, -1, -1, 321, 322, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, 340, -1, -1, -1, -1, -1, 346, -1, + 348, -1, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 382, 383, -1, -1, -1, -1, + -1, -1, 390, -1, 392, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 406, 407, + 408, 409, -1, -1, -1, 413, -1, -1, -1, 256, + -1, -1, -1, -1, -1, 423, 424, 264, -1, -1, + -1, 268, -1, -1, 271, 272, -1, -1, -1, 276, + 277, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, 450, -1, -1, 292, 454, 455, -1, 296, + -1, -1, 460, 461, -1, 302, -1, -1, -1, -1, + -1, 469, -1, -1, -1, -1, 313, -1, -1, -1, + -1, 318, -1, -1, 321, 322, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, 340, -1, -1, -1, -1, -1, 346, + -1, 348, -1, 350, 351, 352, 353, 354, -1, -1, + 357, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 382, 383, -1, -1, -1, + -1, -1, -1, 390, -1, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, + 407, 408, 409, -1, -1, -1, 413, -1, -1, -1, + 256, -1, -1, -1, -1, -1, 423, 424, 264, -1, + -1, -1, 268, -1, -1, 271, 272, -1, -1, -1, + 276, 277, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, -1, 450, -1, -1, 292, 454, 455, -1, + 296, -1, -1, 460, 461, -1, 302, -1, -1, -1, + -1, -1, 469, -1, -1, -1, -1, 313, -1, -1, + -1, -1, 318, -1, -1, 321, 322, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 338, 339, 340, -1, -1, -1, -1, -1, + 346, -1, 348, -1, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 382, 383, -1, -1, + -1, -1, -1, -1, 390, -1, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 406, 407, 408, 409, -1, -1, -1, 413, -1, -1, + -1, 256, -1, -1, -1, -1, -1, 423, 424, 264, + -1, -1, -1, 268, -1, -1, 271, 272, -1, -1, + -1, 276, 277, -1, 279, -1, 281, -1, -1, -1, + -1, -1, -1, -1, 450, -1, -1, 292, 454, 455, + -1, 296, -1, -1, 460, 461, -1, 302, -1, -1, + -1, -1, -1, 469, -1, -1, -1, -1, 313, -1, + -1, -1, -1, 318, -1, -1, 321, 322, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, 340, -1, -1, -1, -1, + -1, 346, -1, 348, -1, 350, 351, 352, 353, 354, + -1, -1, 357, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 382, 383, -1, + -1, -1, -1, -1, -1, 390, -1, 392, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 406, 407, 408, 409, -1, -1, -1, 413, -1, + -1, -1, 256, -1, -1, -1, -1, -1, 423, 424, + 264, -1, -1, -1, 268, -1, -1, 271, 272, -1, + -1, -1, 276, 277, -1, 279, -1, 281, -1, -1, + -1, -1, -1, -1, -1, 450, -1, -1, 292, 454, + 455, -1, 296, -1, -1, 460, 461, -1, 302, -1, + -1, -1, -1, -1, 469, -1, -1, -1, -1, 313, + -1, -1, -1, -1, 318, -1, -1, 321, 322, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, 340, -1, -1, -1, + -1, -1, 346, -1, 348, -1, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 382, 383, + -1, -1, -1, -1, -1, -1, 390, -1, 392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 406, 407, 408, 409, -1, -1, -1, 413, + -1, -1, -1, 256, -1, -1, -1, -1, -1, 423, + 424, 264, -1, -1, -1, 268, -1, -1, 271, 272, + -1, -1, -1, 276, 277, -1, 279, -1, 281, -1, + -1, -1, -1, -1, -1, -1, 450, -1, -1, 292, + 454, 455, -1, 296, -1, -1, 460, 461, -1, 302, + -1, -1, -1, -1, -1, 469, -1, -1, -1, -1, + 313, -1, -1, -1, -1, 318, -1, -1, 321, 322, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, 340, -1, -1, + -1, -1, -1, 346, -1, 348, -1, 350, 351, 352, + 353, 354, -1, -1, 357, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, + 383, -1, -1, -1, -1, -1, -1, 390, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 406, 407, 408, 409, -1, -1, -1, + 413, -1, -1, -1, 256, -1, -1, -1, -1, -1, + 423, 424, 264, -1, -1, -1, 268, -1, -1, 271, + 272, -1, -1, -1, 276, 277, -1, 279, -1, 281, + -1, -1, -1, -1, -1, -1, -1, 450, -1, -1, + 292, 454, 455, -1, 296, -1, -1, 460, 461, -1, + 302, -1, -1, -1, -1, -1, 469, -1, -1, -1, + -1, 313, -1, -1, -1, -1, 318, -1, -1, 321, + 322, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, 339, 340, -1, + -1, -1, -1, -1, 346, -1, 348, -1, 350, 351, + 352, 353, 354, -1, -1, 357, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 382, 383, -1, -1, -1, -1, -1, -1, 390, -1, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 406, 407, 408, 409, -1, -1, + -1, 413, -1, -1, -1, 256, -1, -1, -1, -1, + -1, 423, 424, 264, -1, -1, -1, 268, -1, -1, + 271, 272, -1, -1, -1, 276, 277, -1, 279, -1, + 281, -1, -1, -1, -1, -1, -1, -1, 450, -1, + -1, 292, 454, 455, -1, 296, -1, -1, 460, 461, + -1, 302, -1, -1, -1, -1, -1, 469, -1, -1, + -1, -1, 313, -1, -1, -1, -1, 318, -1, -1, + 321, 322, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, 340, + -1, -1, -1, -1, -1, 346, -1, 348, -1, 350, + 351, 352, 353, 354, -1, -1, 357, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 382, 383, -1, -1, -1, -1, -1, -1, 390, + -1, 392, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 406, 407, 408, 409, -1, + -1, -1, 413, -1, -1, -1, 256, -1, -1, -1, + -1, -1, 423, 424, 264, -1, -1, -1, 268, -1, + -1, 271, 272, -1, -1, -1, 276, 277, -1, 279, + -1, 281, -1, -1, -1, -1, -1, -1, -1, 450, + -1, -1, 292, 454, 455, -1, 296, -1, -1, 460, + 461, -1, 302, -1, -1, -1, -1, -1, 469, -1, + -1, -1, -1, 313, -1, -1, -1, -1, 318, -1, + -1, 321, 322, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, + 340, -1, -1, -1, -1, -1, 346, -1, 348, -1, + 350, 351, 352, 353, 354, -1, -1, 357, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 382, 383, -1, -1, -1, -1, -1, -1, + 390, -1, 392, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 406, 407, 408, 409, + -1, -1, -1, 413, -1, -1, -1, 256, -1, -1, + -1, -1, -1, 423, 424, 264, -1, -1, -1, 268, + -1, -1, 271, 272, -1, -1, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + 450, -1, -1, 292, 454, 455, -1, 296, -1, -1, + 460, 461, -1, 302, -1, -1, -1, -1, -1, 469, + -1, -1, -1, -1, 313, -1, -1, -1, -1, 318, + -1, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, -1, -1, -1, 256, -1, + -1, -1, -1, -1, 423, 424, 264, -1, -1, -1, + 268, -1, -1, 271, 272, -1, -1, -1, 276, 277, + -1, 279, -1, 281, -1, -1, -1, -1, -1, -1, + -1, 450, -1, -1, 292, 454, 455, -1, 296, -1, + -1, 460, 461, -1, 302, -1, -1, -1, -1, -1, + 469, -1, -1, -1, -1, 313, -1, -1, -1, -1, + 318, -1, -1, 321, 322, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, 340, -1, -1, -1, -1, -1, 346, -1, + 348, -1, 350, 351, 352, 353, 354, -1, -1, 357, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 382, 383, -1, -1, -1, -1, + -1, -1, 390, -1, 392, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 406, 407, + 408, 409, -1, -1, -1, 413, -1, -1, -1, 256, + -1, -1, -1, -1, -1, 423, 424, 264, -1, -1, + -1, 268, -1, -1, 271, 272, -1, -1, -1, 276, + 277, -1, 279, -1, 281, -1, -1, -1, -1, -1, + -1, -1, 450, -1, -1, 292, 454, 455, -1, 296, + -1, -1, 460, 461, -1, 302, -1, -1, -1, -1, + -1, 469, -1, -1, -1, -1, 313, -1, -1, -1, + -1, 318, -1, -1, 321, 322, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, 340, -1, -1, -1, -1, -1, 346, + -1, 348, -1, 350, 351, 352, 353, 354, -1, -1, + 357, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 382, 383, -1, -1, -1, + -1, -1, -1, 390, -1, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, + 407, 408, 409, -1, -1, -1, 413, -1, -1, -1, + 256, -1, -1, -1, -1, -1, 423, 424, 264, -1, + -1, -1, 268, -1, -1, 271, 272, -1, -1, -1, + 276, 277, -1, 279, -1, 281, -1, -1, -1, -1, + -1, -1, -1, 450, -1, -1, 292, 454, 455, -1, + 296, -1, -1, 460, 461, -1, 302, -1, -1, -1, + -1, -1, 469, -1, -1, -1, -1, 313, -1, -1, + -1, -1, 318, -1, -1, 321, 322, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 338, 339, 340, -1, -1, -1, -1, -1, + 346, -1, 348, -1, 350, 351, 352, 353, 354, -1, + -1, 357, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 382, 383, -1, -1, + -1, -1, -1, -1, 390, -1, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 406, 407, 408, 409, -1, -1, -1, 413, -1, -1, + -1, 256, -1, -1, -1, -1, -1, 423, 424, 264, + -1, -1, -1, 268, -1, -1, 271, 272, -1, -1, + -1, 276, 277, -1, 279, -1, 281, -1, -1, -1, + -1, -1, -1, -1, 450, -1, -1, 292, 454, 455, + -1, 296, -1, -1, 460, 461, -1, 302, -1, -1, + -1, -1, -1, 469, -1, -1, -1, -1, 313, -1, + -1, -1, -1, 318, -1, -1, 321, 322, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, 340, -1, -1, -1, -1, + -1, 346, -1, 348, -1, 350, 351, 352, 353, 354, + -1, -1, 357, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 382, 383, -1, + -1, -1, -1, -1, -1, 390, -1, 392, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 406, 407, 408, 409, -1, -1, -1, 413, -1, + -1, -1, 256, -1, -1, -1, -1, -1, 423, 424, + 264, -1, -1, -1, 268, -1, -1, 271, 272, -1, + -1, -1, 276, 277, -1, 279, -1, 281, -1, -1, + -1, -1, -1, -1, -1, 450, -1, -1, 292, 454, + 455, -1, 296, -1, -1, 460, 461, -1, 302, -1, + -1, -1, -1, -1, 469, -1, -1, -1, -1, 313, + -1, -1, -1, -1, 318, -1, -1, 321, 322, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, 340, -1, -1, -1, + -1, -1, 346, -1, 348, -1, 350, 351, 352, 353, + 354, -1, -1, 357, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 382, 383, + -1, -1, -1, -1, -1, -1, 390, -1, 392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 406, 407, 408, 409, -1, -1, -1, 413, + -1, -1, -1, 256, -1, -1, -1, -1, -1, 423, + 424, 264, -1, -1, -1, 268, -1, -1, 271, 272, + -1, -1, -1, 276, 277, -1, 279, -1, 281, -1, + -1, -1, -1, -1, -1, -1, 450, -1, -1, 292, + 454, 455, -1, 296, -1, -1, 460, 461, -1, 302, + -1, -1, -1, -1, -1, 469, -1, -1, -1, -1, + 313, -1, -1, -1, -1, 318, -1, -1, 321, 322, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, 340, -1, -1, + -1, -1, -1, 346, -1, 348, -1, 350, 351, 352, + 353, 354, -1, -1, 357, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, + 383, -1, -1, -1, -1, -1, -1, 390, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 406, 407, 408, 409, -1, -1, -1, + 413, -1, -1, -1, 256, -1, -1, -1, -1, -1, + 423, 424, 264, -1, -1, -1, 268, -1, -1, 271, + 272, -1, -1, -1, 276, 277, -1, -1, -1, 281, + -1, -1, -1, -1, -1, -1, -1, 450, -1, -1, + 292, 454, 455, -1, 296, -1, -1, 460, 461, -1, + 302, -1, 256, -1, -1, -1, 469, -1, -1, -1, + -1, 313, -1, -1, 268, -1, 318, 271, -1, 321, + 322, -1, 276, -1, -1, -1, -1, 281, -1, -1, + -1, -1, -1, -1, -1, -1, 338, 339, 340, -1, + -1, -1, 296, -1, 346, -1, 348, -1, -1, 351, + 352, 353, 354, 256, -1, 357, -1, -1, -1, 313, + -1, 264, -1, -1, 318, 268, -1, -1, 271, 272, + -1, -1, -1, 276, 277, -1, -1, -1, 281, -1, + 382, 383, -1, -1, 338, 339, -1, -1, 390, 292, + 392, -1, -1, 296, -1, -1, -1, 351, 352, 302, + -1, -1, -1, 357, 292, -1, -1, 361, -1, -1, + 313, -1, -1, -1, -1, 318, -1, -1, 321, 322, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, 340, -1, -1, + -1, -1, -1, 346, -1, 348, -1, -1, 351, 352, + 353, 354, 454, 455, 357, -1, 256, -1, 460, 461, + 348, -1, 262, 417, -1, -1, -1, 469, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, + 383, -1, -1, -1, -1, -1, -1, 390, -1, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 455, -1, -1, -1, -1, -1, -1, -1, -1, + 310, -1, -1, -1, -1, -1, 316, -1, 406, 407, + 408, 409, -1, 411, 412, 413, 414, -1, -1, 417, + 418, 419, 420, -1, -1, 423, 424, 425, 426, 427, + 428, 429, 430, -1, 432, -1, -1, -1, -1, -1, + -1, 454, 455, -1, -1, -1, -1, 460, 461, -1, + -1, 449, -1, 363, -1, -1, 469, 367, -1, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, -1, -1, 383, 384, -1, -1, -1, -1, 389, + 390, 391, 392, 393, 394, 395, 396, 397, -1, 399, + -1, -1, -1, 403, 404, 405, -1, 407, 408, -1, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 256, 448, 449, + -1, 261, -1, 262, -1, 455, -1, -1, -1, -1, + 460, -1, -1, 273, -1, -1, -1, 467, 278, -1, + -1, -1, -1, -1, -1, 285, -1, -1, 288, -1, + -1, -1, -1, 293, -1, -1, -1, -1, -1, -1, + -1, -1, 302, 303, 304, -1, -1, -1, -1, -1, + -1, 310, -1, -1, 314, 315, -1, 316, -1, 319, + 320, 321, -1, -1, -1, -1, 326, -1, -1, -1, + 330, -1, 332, 333, 334, -1, -1, -1, -1, -1, + -1, -1, 342, -1, 344, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 355, -1, -1, -1, -1, + 360, -1, 362, -1, 363, 365, -1, -1, 367, -1, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, -1, 382, -1, -1, 384, -1, -1, -1, 389, + 389, -1, 391, 392, 393, 394, 395, 396, 397, -1, + 399, -1, -1, -1, 403, 404, 405, -1, 407, 408, + -1, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 256, 448, + 449, -1, 261, -1, 262, -1, 456, -1, -1, -1, + -1, 460, -1, -1, 273, -1, -1, -1, 467, 278, + -1, -1, -1, -1, -1, -1, 285, -1, -1, 288, + -1, -1, -1, -1, 293, -1, -1, -1, -1, -1, + -1, -1, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, 310, -1, -1, 314, 315, -1, 316, -1, + 319, 320, 321, -1, -1, -1, -1, 326, -1, -1, + -1, 330, -1, 332, 333, 334, -1, -1, -1, -1, + -1, -1, -1, 342, -1, 344, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 355, -1, -1, -1, + -1, 360, -1, 362, -1, 363, 365, -1, -1, 367, + -1, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, 382, -1, -1, 384, -1, -1, -1, + -1, 389, -1, 391, 392, 393, -1, 395, 396, 397, + -1, 399, -1, -1, -1, 403, 404, 405, -1, 407, + 408, -1, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 256, + 448, 449, 261, -1, -1, 262, -1, 456, -1, -1, + -1, -1, 460, -1, -1, -1, -1, -1, -1, 467, + -1, -1, -1, -1, -1, -1, 285, -1, -1, -1, + -1, -1, -1, -1, 293, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 310, -1, -1, 315, -1, -1, 316, + -1, 320, 321, -1, -1, -1, 256, 326, -1, -1, + -1, 330, 262, 332, 333, 334, -1, -1, 337, -1, + -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 355, -1, -1, -1, + -1, 360, -1, 362, -1, -1, 363, -1, -1, -1, + 367, -1, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 382, -1, -1, 316, -1, -1, -1, + 389, 390, 389, -1, 391, -1, 393, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 403, 404, 405, -1, + 407, 408, -1, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, -1, -1, -1, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + -1, 448, 449, 383, 384, -1, -1, 456, -1, -1, + 390, -1, 392, 393, 394, 395, 396, 397, 256, 399, + 467, -1, -1, 403, 262, -1, -1, 407, 408, -1, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, -1, 448, 449, + -1, -1, 310, -1, -1, 455, -1, -1, 316, -1, + 460, -1, -1, -1, -1, -1, -1, 467, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, + -1, -1, -1, 262, -1, 363, -1, -1, -1, 367, + -1, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, -1, -1, -1, -1, 384, -1, -1, -1, + -1, 389, -1, 391, 392, 393, 394, 395, 396, 397, + -1, 399, -1, -1, -1, 403, 404, 405, -1, 407, + 408, 310, -1, 411, 412, 413, 414, 316, -1, -1, + -1, -1, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 448, 449, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 460, -1, 363, -1, -1, -1, 367, 467, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, -1, -1, 256, -1, 384, -1, -1, -1, 262, + 389, -1, 391, 392, 393, 394, 395, 396, 397, -1, + 399, -1, -1, -1, 403, 404, 405, -1, 407, 408, + -1, -1, 411, 412, 413, 414, -1, -1, -1, -1, + -1, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 310, -1, -1, + -1, -1, -1, 316, -1, -1, -1, -1, -1, 448, + 449, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 460, -1, -1, -1, -1, -1, 256, 467, -1, + -1, -1, -1, 262, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, -1, -1, -1, 367, -1, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 389, -1, 391, -1, + 393, 310, -1, -1, -1, -1, -1, 316, -1, -1, + 403, 404, 405, -1, 407, 408, -1, -1, 411, 412, + 413, 414, -1, -1, 417, 418, 419, 420, 421, -1, + -1, -1, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, -1, -1, -1, 256, -1, -1, -1, + -1, -1, 262, -1, 363, 448, 449, -1, 367, -1, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, -1, -1, -1, 467, -1, -1, -1, -1, -1, + 389, -1, 391, -1, 393, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 403, 404, 405, -1, 407, 408, + 310, -1, 411, 412, 413, 414, 316, -1, -1, -1, + -1, 420, 421, -1, -1, -1, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, -1, -1, -1, + 256, -1, -1, -1, -1, -1, 262, -1, -1, 448, + 449, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 363, -1, -1, -1, 367, 467, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 389, + -1, 391, -1, 393, 310, -1, -1, -1, -1, -1, + 316, -1, -1, 403, 404, 405, -1, 407, 408, -1, + -1, 411, 412, 413, 414, -1, -1, -1, -1, -1, + 420, 421, -1, -1, -1, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, -1, -1, -1, 256, + -1, -1, -1, -1, -1, 262, -1, 363, 448, 449, + -1, 367, -1, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, -1, -1, -1, 467, -1, -1, + -1, -1, -1, 389, -1, 391, -1, 393, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 403, 404, 405, + -1, 407, 408, 310, -1, 411, 412, 413, 414, 316, + -1, -1, -1, -1, 420, 421, -1, -1, -1, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + -1, -1, -1, 256, -1, -1, -1, -1, -1, -1, + -1, -1, 448, 449, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, -1, -1, -1, + 367, 467, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 389, -1, 391, -1, 393, 310, -1, -1, + -1, -1, -1, -1, -1, -1, 403, 404, 405, -1, + 407, 408, -1, -1, 411, 412, 413, 414, -1, -1, + -1, -1, -1, 420, 421, 256, -1, -1, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 448, 449, -1, 367, -1, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, -1, -1, -1, + 467, -1, -1, -1, -1, -1, 389, -1, 391, 310, + 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 403, 404, 405, -1, -1, -1, -1, -1, 411, 412, + 413, 414, -1, -1, -1, 256, -1, 420, 421, -1, + -1, -1, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, 448, 367, -1, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, 467, -1, -1, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + 411, 412, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, 428, 429, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, 430, + 431, 432, 433, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, 413, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, -1, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, -1, 414, -1, 256, -1, -1, -1, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, -1, 414, -1, 256, -1, -1, -1, -1, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, -1, 414, -1, 256, -1, -1, -1, -1, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + -1, -1, -1, -1, -1, -1, 467, -1, 389, 310, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 403, 404, 405, -1, 262, -1, -1, -1, + -1, 267, -1, -1, -1, -1, -1, -1, -1, -1, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 434, 435, -1, -1, -1, -1, -1, + -1, -1, 363, -1, -1, -1, 367, 448, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, -1, + 316, -1, -1, -1, -1, -1, 467, -1, 389, -1, + 391, -1, 393, -1, -1, -1, -1, -1, -1, -1, + 336, -1, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 434, 435, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 448, 384, -1, + -1, -1, -1, 389, -1, -1, 392, -1, 394, 395, + 396, 397, -1, 399, -1, -1, 467, -1, 404, 405, + -1, 407, 408, -1, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, -1, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, -1, 448, 449, -1, 264, -1, -1, -1, 268, + -1, -1, 271, 272, 460, -1, -1, 276, 277, -1, + 279, 467, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 268, 292, -1, 271, -1, 296, -1, -1, + 276, -1, -1, 302, -1, 281, -1, -1, -1, -1, + -1, -1, -1, -1, 313, -1, -1, -1, -1, 318, + 296, -1, 321, 322, -1, -1, 325, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 335, 313, -1, 338, + 339, 340, 318, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, -1, 338, 339, -1, -1, -1, -1, 367, 368, + -1, -1, -1, -1, -1, 351, 352, -1, -1, -1, + -1, 357, -1, 382, 383, 361, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 403, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, 264, -1, 393, -1, 268, + -1, -1, 271, 272, 423, 424, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, 417, -1, 292, -1, -1, -1, 296, -1, -1, + -1, 450, -1, 302, -1, 454, 455, -1, -1, -1, + -1, 460, 461, -1, 313, -1, -1, -1, -1, 318, + 469, -1, 321, 322, -1, -1, -1, -1, -1, 455, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, -1, 361, -1, -1, -1, -1, -1, 367, 368, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, 264, -1, -1, -1, 268, + -1, -1, 271, 272, 423, 424, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 292, -1, -1, -1, 296, -1, -1, + -1, 450, -1, 302, -1, 454, 455, -1, -1, -1, + -1, 460, 461, -1, 313, -1, -1, -1, -1, 318, + 469, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, -1, 361, -1, -1, -1, -1, -1, 367, 368, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, 264, -1, -1, -1, 268, + -1, -1, 271, 272, 423, 424, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 292, -1, -1, -1, 296, -1, -1, + -1, 450, -1, 302, -1, 454, 455, -1, -1, -1, + -1, 460, 461, -1, 313, -1, -1, -1, -1, 318, + 469, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + 359, -1, -1, -1, -1, -1, -1, -1, 367, 368, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, 264, -1, -1, -1, 268, + -1, -1, 271, 272, 423, 424, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 292, -1, -1, -1, 296, -1, -1, + -1, 450, -1, 302, -1, 454, 455, -1, -1, -1, + -1, 460, 461, -1, 313, -1, -1, -1, -1, 318, + 469, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 367, 368, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, 264, -1, -1, -1, 268, + -1, -1, 271, 272, 423, 424, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 292, -1, -1, -1, 296, -1, -1, + -1, 450, -1, 302, -1, 454, 455, -1, -1, -1, + -1, 460, 461, -1, 313, -1, -1, -1, -1, 318, + 469, -1, 321, 322, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, 340, -1, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, -1, 357, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 367, 368, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, -1, -1, 413, 264, -1, -1, -1, 268, + -1, -1, 271, 272, 423, 424, -1, 276, 277, -1, + 279, -1, 281, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 292, -1, -1, -1, 296, -1, -1, + -1, 450, -1, 302, -1, 454, 455, -1, -1, -1, + -1, 460, 461, -1, 313, -1, -1, 256, -1, 318, + 469, -1, 321, 322, -1, -1, -1, -1, -1, 268, + -1, -1, 271, -1, -1, -1, -1, 276, -1, 338, + 339, 340, 281, -1, -1, -1, -1, 346, -1, 348, + -1, 350, 351, 352, 353, 354, -1, 296, 357, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 313, -1, -1, -1, -1, 318, + -1, -1, -1, 382, 383, -1, -1, -1, -1, -1, + -1, 390, -1, 392, -1, -1, -1, -1, -1, 338, + 339, -1, -1, -1, -1, -1, -1, 406, 407, 408, + 409, -1, 351, 352, 413, -1, -1, -1, 357, -1, + -1, -1, 361, -1, 423, 424, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, -1, -1, -1, -1, + 261, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 450, 273, 274, -1, 454, 455, 278, -1, -1, + -1, 460, 461, -1, 285, -1, -1, 288, 289, 290, + 469, -1, 293, -1, 295, -1, -1, -1, 417, -1, + -1, 302, 303, 304, -1, -1, 307, -1, 309, -1, + 311, -1, -1, 314, 315, -1, -1, -1, 319, 320, + 321, -1, -1, 324, -1, 326, -1, -1, -1, 330, + 331, 332, 333, 334, -1, -1, 455, 256, -1, -1, + -1, 342, -1, 344, -1, -1, -1, -1, 256, 268, + -1, -1, 271, -1, 355, 356, -1, 276, 359, 360, + 268, 362, 281, 271, 365, -1, -1, -1, 276, -1, + -1, -1, -1, 281, -1, -1, -1, 296, 256, -1, + -1, 382, -1, -1, -1, -1, -1, -1, 296, 390, + 268, -1, -1, 271, 313, -1, -1, -1, 276, 318, + -1, -1, -1, 281, -1, 313, -1, -1, -1, -1, + 318, -1, -1, -1, -1, -1, -1, -1, 296, 338, + 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, 351, 352, 262, 313, -1, -1, 357, -1, + 318, -1, 361, 351, 352, -1, -1, -1, -1, 357, + -1, -1, 261, 361, 263, 456, 457, -1, -1, -1, + 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 390, -1, 351, 352, -1, 285, -1, -1, 357, + -1, -1, -1, 361, 293, -1, -1, -1, 316, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 417, -1, + -1, -1, -1, -1, -1, -1, 315, -1, -1, 417, + -1, 320, 321, -1, -1, -1, -1, 326, -1, -1, + -1, 330, -1, 332, 333, 334, -1, -1, 337, -1, + -1, -1, -1, 342, -1, -1, 455, -1, -1, 417, + -1, -1, -1, -1, -1, -1, 355, 455, -1, -1, + -1, 360, -1, 362, -1, -1, 384, -1, -1, -1, + -1, -1, -1, -1, 392, 393, 394, 395, 396, 397, + -1, 399, -1, 382, -1, 403, -1, 455, -1, 407, + 408, -1, -1, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 261, + 448, 449, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 273, 460, -1, -1, -1, 278, -1, -1, -1, + -1, -1, -1, 285, -1, -1, 288, 456, -1, -1, + -1, 293, -1, -1, -1, -1, -1, -1, -1, -1, + 302, 303, 304, -1, -1, -1, -1, 309, -1, -1, + -1, -1, 314, 315, -1, -1, -1, 319, 320, 321, + -1, -1, -1, -1, 326, -1, -1, -1, 330, -1, + 332, 333, 334, -1, -1, -1, -1, -1, -1, -1, + 342, -1, 344, -1, -1, -1, -1, -1, -1, 261, + -1, -1, -1, 355, 356, -1, -1, -1, 360, -1, + 362, 273, 274, 365, -1, -1, 278, -1, -1, -1, + -1, -1, -1, 285, -1, -1, 288, 289, 290, -1, + 382, 293, -1, 295, -1, -1, -1, 389, 390, -1, + 302, 303, 304, -1, -1, 307, -1, 309, -1, 311, + -1, -1, 314, 315, -1, -1, -1, 319, 320, 321, + -1, -1, 324, -1, 326, -1, -1, -1, 330, 331, + 332, 333, 334, -1, -1, -1, -1, -1, -1, -1, + 342, -1, 344, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 355, 356, -1, -1, 359, 360, -1, + 362, 261, -1, 365, 456, 457, -1, -1, -1, -1, + -1, -1, -1, 273, 274, -1, -1, -1, 278, -1, + 382, -1, -1, -1, -1, 285, -1, -1, 288, 289, + 290, -1, -1, 293, -1, 295, -1, -1, -1, -1, + -1, -1, 302, 303, 304, -1, -1, 307, -1, 309, + -1, 311, -1, -1, 314, 315, -1, -1, -1, 319, + 320, 321, -1, -1, 324, -1, 326, -1, -1, -1, + 330, 331, 332, 333, 334, -1, -1, -1, -1, -1, + -1, -1, 342, -1, 344, -1, -1, -1, -1, -1, + -1, 261, -1, 455, 456, 355, 356, -1, -1, 359, + 360, -1, 362, 273, 274, 365, -1, -1, 278, -1, + -1, -1, -1, -1, -1, 285, -1, -1, 288, 289, + 290, -1, 382, 293, -1, 295, -1, -1, -1, 389, + -1, -1, 302, 303, 304, -1, -1, 307, -1, 309, + -1, 311, -1, -1, 314, 315, -1, -1, -1, 319, + 320, 321, -1, -1, 324, -1, 326, -1, -1, -1, + 330, 331, 332, 333, 334, -1, -1, -1, -1, -1, + -1, -1, 342, -1, 344, -1, -1, -1, -1, -1, + -1, 261, -1, -1, -1, 355, 356, -1, -1, 359, + 360, -1, 362, 273, 274, 365, 456, -1, 278, -1, + -1, -1, -1, -1, -1, 285, -1, -1, 288, 289, + 290, -1, 382, 293, -1, 295, -1, -1, -1, 389, + -1, -1, 302, 303, 304, -1, -1, 307, -1, 309, + -1, 311, -1, -1, 314, 315, -1, -1, -1, 319, + 320, 321, -1, -1, 324, -1, 326, -1, -1, -1, + 330, 331, 332, 333, 334, -1, -1, -1, -1, -1, + -1, -1, 342, -1, 344, -1, -1, -1, -1, -1, + -1, 261, -1, -1, -1, 355, 356, -1, -1, 359, + 360, -1, 362, 273, 274, 365, 456, -1, 278, -1, + -1, -1, -1, -1, -1, 285, -1, -1, 288, 289, + 290, -1, 382, 293, -1, 295, -1, -1, -1, -1, + -1, -1, 302, 303, 304, -1, -1, 307, -1, -1, + -1, 311, -1, -1, 314, 315, -1, -1, -1, 319, + 320, 321, -1, -1, 324, -1, 326, -1, -1, -1, + 330, 331, 332, 333, 334, -1, -1, -1, -1, -1, + -1, -1, 342, -1, 344, -1, -1, -1, -1, -1, + -1, 261, -1, -1, -1, 355, -1, -1, -1, 359, + 360, -1, 362, 273, 274, 365, 456, -1, 278, -1, + -1, -1, -1, -1, -1, 285, -1, -1, 288, 289, + 290, -1, 382, 293, -1, 295, -1, -1, -1, 389, + -1, -1, 302, 303, 304, -1, -1, 307, -1, -1, + -1, 311, -1, -1, 314, 315, -1, -1, -1, 319, + 320, 321, -1, -1, 324, -1, 326, -1, -1, -1, + 330, 331, 332, 333, 334, -1, -1, 261, -1, -1, + -1, -1, 342, -1, 344, -1, -1, -1, -1, 273, + -1, -1, -1, -1, 278, 355, -1, -1, -1, 359, + 360, 285, 362, -1, 288, 365, 456, -1, -1, 293, + -1, -1, -1, -1, -1, -1, -1, -1, 302, 303, + 304, -1, 382, -1, -1, 309, -1, -1, -1, 389, + 314, 315, -1, -1, -1, 319, 320, 321, -1, -1, + -1, -1, 326, -1, -1, -1, 330, -1, 332, 333, + 334, -1, -1, -1, -1, -1, -1, -1, 342, -1, + 344, -1, 261, -1, -1, -1, -1, -1, -1, -1, + -1, 355, 356, -1, 273, -1, 360, -1, 362, 278, + -1, 365, -1, -1, -1, -1, 285, -1, -1, 288, + -1, -1, -1, -1, 293, -1, 456, -1, 382, -1, + -1, -1, -1, 302, 303, 304, 390, -1, 261, -1, + -1, -1, -1, -1, -1, 314, 315, -1, -1, -1, + 319, 320, 321, -1, -1, -1, -1, 326, -1, -1, + -1, 330, 285, 332, 333, 334, -1, -1, -1, -1, + 293, -1, -1, 342, -1, 344, 261, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 355, -1, -1, -1, + -1, 360, 315, 362, -1, -1, 365, 320, 321, -1, + 285, -1, 456, 326, -1, -1, -1, 330, 293, 332, + 333, 334, -1, 382, -1, -1, -1, -1, -1, 342, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 315, -1, 355, -1, -1, 320, 321, 360, -1, 362, + -1, 326, -1, -1, -1, 330, -1, 332, 333, 334, + -1, -1, -1, -1, 261, -1, 263, 342, -1, 382, + -1, -1, 385, 386, -1, -1, 389, -1, -1, -1, + 355, -1, -1, -1, -1, 360, -1, 362, 285, -1, + -1, -1, -1, -1, -1, 261, 293, 456, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 382, -1, -1, + 385, 386, -1, -1, 389, -1, -1, -1, 315, 285, + -1, -1, -1, 320, 321, -1, -1, 293, -1, 326, + -1, -1, -1, 330, -1, 332, 333, 334, -1, -1, + -1, -1, -1, 456, -1, 342, -1, -1, 261, 315, + -1, -1, -1, -1, 320, 321, -1, -1, 355, -1, + 326, -1, -1, 360, 330, 362, 332, 333, 334, -1, + -1, -1, 285, -1, -1, -1, 342, -1, -1, -1, + 293, 456, -1, -1, -1, 382, -1, -1, -1, 355, + -1, -1, 389, 390, 360, -1, 362, -1, -1, -1, + -1, 261, 315, 263, -1, -1, -1, 320, 321, -1, + -1, -1, -1, 326, -1, -1, 382, 330, -1, 332, + 333, 334, -1, -1, 337, 285, -1, -1, -1, 342, + -1, -1, 261, 293, -1, -1, -1, -1, -1, -1, + 406, -1, 355, -1, -1, -1, -1, 360, -1, 362, + -1, -1, -1, -1, -1, 315, 285, -1, -1, 456, + 320, 321, -1, -1, 293, -1, 326, -1, -1, 382, + 330, -1, 332, 333, 334, -1, 389, -1, -1, -1, + -1, -1, 342, -1, -1, -1, 315, -1, -1, 455, + 456, 320, 321, -1, -1, 355, -1, 326, -1, -1, + 360, 330, 362, 332, 333, 334, -1, -1, 261, -1, + -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, + -1, -1, 382, -1, -1, -1, 355, -1, -1, 389, + -1, 360, 285, 362, -1, -1, -1, -1, -1, 261, + 293, -1, -1, 456, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 382, -1, -1, 385, 386, -1, -1, + -1, -1, 315, 285, -1, -1, -1, 320, 321, -1, + -1, 293, -1, 326, -1, -1, -1, 330, -1, 332, + 333, 334, -1, -1, -1, -1, -1, -1, -1, 342, + -1, -1, -1, 315, -1, -1, 456, -1, 320, 321, + -1, -1, 355, -1, 326, -1, -1, 360, 330, 362, + 332, 333, 334, -1, -1, -1, -1, -1, -1, -1, + 342, -1, -1, 268, -1, -1, 271, 456, 273, 382, + -1, 276, -1, 355, 268, -1, 281, 271, 360, -1, + 362, -1, 276, -1, -1, -1, -1, 281, -1, -1, + -1, 296, -1, -1, -1, -1, -1, -1, -1, -1, + 382, -1, 296, -1, -1, -1, -1, -1, 313, 268, + -1, -1, 271, 318, -1, -1, 321, 276, -1, 313, + -1, -1, 281, -1, 318, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, -1, -1, 296, -1, 344, + -1, -1, 455, 456, 338, 339, 351, 352, -1, -1, + -1, -1, 357, -1, 313, -1, 361, 351, 352, 318, + -1, -1, -1, 357, -1, -1, -1, 361, -1, -1, + -1, -1, -1, -1, 456, -1, -1, -1, -1, 338, + 339, -1, -1, 268, -1, -1, 271, -1, -1, 383, + -1, 276, 351, 352, -1, -1, 281, -1, 357, -1, + -1, -1, 361, -1, -1, -1, -1, -1, -1, -1, + -1, 296, 417, -1, 268, -1, -1, 271, -1, -1, + -1, -1, 276, 417, -1, -1, -1, 281, 313, -1, + -1, -1, 391, 318, -1, -1, -1, -1, -1, -1, + -1, -1, 296, -1, -1, -1, -1, -1, -1, -1, + 455, -1, -1, 338, 339, -1, -1, -1, 417, 313, + 268, 455, -1, 271, 318, -1, 351, 352, 276, -1, + -1, -1, 357, 281, -1, -1, 361, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, 296, -1, + -1, 268, -1, -1, 271, -1, 455, 351, 352, 276, + -1, -1, -1, 357, 281, 313, -1, 361, -1, -1, + 318, -1, -1, -1, -1, -1, -1, -1, -1, 296, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, 417, -1, -1, -1, 313, 268, -1, -1, + 271, 318, -1, 351, 352, 276, -1, -1, -1, 357, + 281, -1, -1, 361, -1, -1, -1, -1, -1, -1, + -1, 338, 339, 417, -1, 296, -1, -1, 268, -1, + 455, 271, -1, -1, 351, 352, 276, -1, -1, -1, + 357, 281, 313, -1, 361, -1, -1, 318, -1, -1, + -1, -1, -1, -1, -1, -1, 296, -1, -1, -1, + -1, 455, -1, -1, -1, -1, -1, 338, 339, 417, + -1, -1, -1, 313, 268, -1, -1, 271, 318, -1, + 351, 352, 276, -1, -1, -1, 357, 281, -1, -1, + 361, -1, -1, -1, -1, -1, -1, -1, 338, 339, + 417, -1, 296, -1, -1, -1, -1, 455, -1, -1, + -1, 351, 352, -1, -1, -1, -1, 357, -1, 313, + -1, 361, -1, -1, 318, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 455, -1, + -1, -1, -1, -1, 338, 339, 417, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 351, 352, -1, + 263, -1, -1, 357, -1, -1, -1, 361, -1, -1, + 273, 274, -1, -1, -1, 278, -1, 417, -1, -1, + -1, -1, -1, -1, 455, 288, 289, 290, -1, -1, + -1, -1, 295, -1, -1, -1, -1, -1, -1, 302, + 303, 304, -1, -1, 307, -1, 309, -1, 311, 273, + 274, 314, -1, -1, 278, 455, 319, -1, -1, -1, + -1, 324, -1, 417, 288, 289, 290, -1, 331, -1, + -1, 295, -1, -1, 337, -1, -1, -1, 302, 303, + 304, 344, -1, 307, -1, 309, -1, 311, -1, -1, + 314, -1, -1, 356, -1, 319, 359, -1, -1, -1, + 324, 455, 365, -1, -1, -1, -1, 331, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 344, -1, 385, 386, -1, -1, -1, -1, -1, -1, + -1, -1, 356, -1, -1, 359, -1, -1, -1, -1, + -1, 365, + }; + +#line 8079 "ps-parser.jay" + +// +// A class used to hold info about an operator declarator +// +class OperatorDeclaration { + public readonly Operator.OpType optype; + public readonly FullNamedExpression ret_type; + public readonly Location location; + + public OperatorDeclaration (Operator.OpType op, FullNamedExpression ret_type, Location location) + { + optype = op; + this.ret_type = ret_type; + this.location = location; + } +} + +void Error_ExpectingTypeName (Expression expr) +{ + if (expr is Invocation){ + report.Error (1002, expr.Location, "Expecting `;'"); + } else { + expr.Error_InvalidExpressionStatement (report); + } +} + +void Error_ParameterModifierNotValid (string modifier, Location loc) +{ + report.Error (631, loc, "The parameter modifier `{0}' is not valid in this context", + modifier); +} + +void Error_DuplicateParameterModifier (Location loc, Parameter.Modifier mod) +{ + report.Error (1107, loc, "Duplicate parameter modifier `{0}'", + Parameter.GetModifierSignature (mod)); +} + +void Error_TypeExpected (Location loc) +{ + report.Error (1031, loc, "Type expected"); +} + +void Error_UnsafeCodeNotAllowed (Location loc) +{ + report.Error (227, loc, "Unsafe code requires the `unsafe' command line option to be specified"); +} + +void Warning_EmptyStatement (Location loc) +{ + report.Warning (642, 3, loc, "Possible mistaken empty statement"); +} + +void Error_NamedArgumentExpected (NamedArgument a) +{ + report.Error (1738, a.Location, "Named arguments must appear after the positional arguments"); +} + +void Error_MissingInitializer (Location loc) +{ + report.Error (210, loc, "You must provide an initializer in a fixed or using statement declaration"); +} + +object Error_AwaitAsIdentifier (object token) +{ + if (async_block) { + report.Error (4003, GetLocation (token), "`await' cannot be used as an identifier within an async method"); + return new LocatedToken ("await", GetLocation (token)); + } + + return token; +} + +void push_current_container (TypeDefinition tc, object partial_token) +{ + if (module.Evaluator != null){ + tc.Definition.Modifiers = tc.ModFlags = (tc.ModFlags & ~Modifiers.AccessibilityMask) | Modifiers.PUBLIC; + if (undo == null) + undo = new Undo (); + + undo.AddTypeContainer (current_container, tc); + } + + if (is_config_enabled) { + if (partial_token != null) + current_container.AddPartial (tc); + else + current_container.AddTypeContainer (tc); + } + + ++lexer.parsing_declaration; + current_container = tc; + current_type = tc; +} + +TypeContainer pop_current_class () +{ + var retval = current_container; + + current_container = current_container.Parent; + current_type = current_type.Parent as TypeDefinition; + + return retval; +} + +[System.Diagnostics.Conditional ("FULL_AST")] +void StoreModifierLocation (object token, Location loc) +{ + if (lbag == null) + return; + + if (mod_locations == null) + mod_locations = new List> (); + + mod_locations.Add (Tuple.Create ((Modifiers) token, loc)); +} + +[System.Diagnostics.Conditional ("FULL_AST")] +void PushLocation (Location loc) +{ + if (location_stack == null) + location_stack = new Stack (); + + location_stack.Push (loc); +} + +Location PopLocation () +{ + if (location_stack == null) + return Location.Null; + + return location_stack.Pop (); +} + +//string CheckAttributeTarget (string a, Location l) +string CheckAttributeTarget (int token, string a, Location l) +{ + switch (a) { + case "assembly" : case "module" : case "field" : case "method" : case "param" : case "property" : case "type" : + return a; + } + +// report.Warning (658, 1, l, +// "`{0}' is invalid attribute target. All attributes in this attribute section will be ignored", a); + if (!Tokenizer.IsValidIdentifier (a)) { + Error_SyntaxError (token); + } else { + report.Warning (658, 1, l, + "`{0}' is invalid attribute target. All attributes in this attribute section will be ignored", a); + } + return string.Empty; +} + +bool IsPartial (object a) +{ + var attrs = a as Attributes; + if (attrs == null) + return false; + foreach (var attr in attrs.Attrs) { + if (attr.TypeExpression.Name == "Partial") + return true; + } + return false; +} + +static bool IsUnaryOperator (Operator.OpType op) +{ + switch (op) { + + case Operator.OpType.LogicalNot: + case Operator.OpType.OnesComplement: + case Operator.OpType.Increment: + case Operator.OpType.Decrement: + case Operator.OpType.True: + case Operator.OpType.False: + case Operator.OpType.UnaryPlus: + case Operator.OpType.UnaryNegation: + return true; + } + return false; +} + +void syntax_error (Location l, string msg) +{ + report.Error (1003, l, "Syntax error, " + msg); +} + +Tokenizer lexer; + +public Tokenizer Lexer { + get { + return lexer; + } +} + +public PlayScriptParser (SeekableStreamReader reader, CompilationSourceFile file, ParserSession session) + : this (reader, file, file.Compiler.Report, session) +{ +} + +public PlayScriptParser (SeekableStreamReader reader, CompilationSourceFile file, Report report, ParserSession session) +{ + this.file = file; + current_container = current_namespace = file; + + this.module = file.Module; + this.compiler = file.Compiler; + this.settings = compiler.Settings; + this.report = report; + + lang_version = settings.Version; + yacc_verbose_flag = settings.VerboseParserFlag; + doc_support = settings.DocumentationFile != null; + lexer = new Tokenizer (reader, file, session, report); + oob_stack = new Stack (); + lbag = session.LocationsBag; + use_global_stacks = session.UseJayGlobalArrays; + parameters_bucket = session.ParametersStack; +} + +public void parse () +{ + eof_token = Token.EOF; + + try { + if (yacc_verbose_flag > 1) + yyparse (lexer, new yydebug.yyDebugSimple ()); + else + yyparse (lexer); + + Tokenizer tokenizer = lexer as Tokenizer; + tokenizer.cleanup (); + } catch (Exception e){ + if (e is yyParser.yyUnexpectedEof) { + Error_SyntaxError (yyToken); + UnexpectedEOF = true; + return; + } + + if (e is yyParser.yyException) { + if (report.Errors == 0) + report.Error (-25, lexer.Location, "Parsing error"); + } else { + // Used by compiler-tester to test internal errors + if (yacc_verbose_flag > 0 || e is FatalException) + throw; + + report.Error (589, lexer.Location, "Internal compiler error during parsing" + e); + } + } +} + +void CheckToken (int error, int yyToken, string msg, Location loc) +{ + if (yyToken >= Token.FIRST_KEYWORD && yyToken <= Token.LAST_KEYWORD) + report.Error (error, loc, "{0}: `{1}' is a keyword", msg, GetTokenName (yyToken)); + else + report.Error (error, loc, msg); +} + +string ConsumeStoredComment () +{ + string s = tmpComment; + tmpComment = null; + Lexer.doc_state = XmlCommentState.Allowed; + return s; +} + +void FeatureIsNotAvailable (Location loc, string feature) +{ + report.FeatureIsNotAvailable (compiler, loc, feature); +} + +Location GetLocation (object obj) +{ + var lt = obj as LocatedToken; + if (lt != null) + return lt.Location; + + var mn = obj as MemberName; + if (mn != null) + return mn.Location; + + var expr = obj as Expression; + if (expr != null) + return expr.Location; + + return lexer.Location; +} + +void start_block (Location loc) +{ + if (current_block == null) { + current_block = new ToplevelBlock (compiler, current_local_parameters, loc); + parsing_anonymous_method = false; + } else if (parsing_anonymous_method) { + current_block = new ParametersBlock (current_block, current_local_parameters, loc); + parsing_anonymous_method = false; + } else { + current_block = new ExplicitBlock (current_block, loc, Location.Null); + } +} + +Block +end_block (Location loc) +{ + Block retval = current_block.Explicit; + retval.SetEndLocation (loc); + current_block = retval.Parent; + return retval; +} + +void start_anonymous (ParametersCompiled parameters, FullNamedExpression retType, bool isAsync, Location loc) +{ + oob_stack.Push (current_anonymous_method); + oob_stack.Push (current_local_parameters); + oob_stack.Push (current_variable); + oob_stack.Push (async_block); + oob_stack.Push (Lexer.PrevAutoSemiInsertion); // Auto semi will always be false after a FUNCTION keyword.. we want to know what it was before that. + + current_local_parameters = parameters; + if (lang_version == LanguageVersion.ISO_1) + FeatureIsNotAvailable (loc, "anonymous methods"); + + current_anonymous_method = new AnonymousMethodExpression (loc, parameters, retType); + + async_block = isAsync; + // Force the next block to be created as a ToplevelBlock + parsing_anonymous_method = true; +} + +/* + * Completes the anonymous method processing + */ +AnonymousMethodExpression end_anonymous (ParametersBlock anon_block) +{ + AnonymousMethodExpression retval; + + if (async_block) + anon_block.IsAsync = true; + + current_anonymous_method.Block = anon_block; + retval = current_anonymous_method; + + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + async_block = (bool) oob_stack.Pop (); + current_variable = (BlockVariable) oob_stack.Pop (); + current_local_parameters = (ParametersCompiled) oob_stack.Pop (); + current_anonymous_method = (AnonymousMethodExpression) oob_stack.Pop (); + + return retval; +} + +void Error_SyntaxError (int token) +{ + Error_SyntaxError (0, token); +} + +void Error_SyntaxError (int error_code, int token) +{ + Error_SyntaxError (error_code, token, "Unexpected symbol"); +} + +void Error_SyntaxError (int error_code, int token, string msg) +{ + Lexer.CompleteOnEOF = false; + + // An error message has been reported by tokenizer + if (token == Token.ERROR) + return; + + // Avoid duplicit error message after unterminated string literals + if (token == Token.LITERAL && lexer.Location.Column == 0) + return; + + string symbol = GetSymbolName (token); + string expecting = GetExpecting (); + var loc = lexer.Location - symbol.Length; + + if (error_code == 0) { + if (expecting == "`identifier'") { + if (token > Token.FIRST_KEYWORD && token < Token.LAST_KEYWORD) { + report.Error (1041, loc, "Identifier expected, `{0}' is a keyword", symbol); + return; + } + + error_code = 1001; + expecting = "identifier"; + } else if (expecting == "`)'") { + error_code = 1026; + } else { + error_code = 1525; + } + } + + if (string.IsNullOrEmpty (expecting)) + report.Error (error_code, loc, "{1} `{0}'", symbol, msg); + else + report.Error (error_code, loc, "{2} `{0}', expecting {1}", symbol, expecting, msg); +} + +void CheckIsPlayScript(string elem, Location loc) +{ + if (!parsing_playscript) { + report.Error (7035, loc, "`{0}' only supported in PlayScript", elem); + } + +} + +object ConvertAsType(SimpleName sn, object e) +{ + if (sn.Name == "Object") + return new TypeExpression (compiler.BuiltinTypes.Dynamic, GetLocation (e)); + else if (sn.Name == "Boolean") + return new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (e)); + else if (sn.Name == "Number") + return new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (e)); + else if (sn.Name == "String") + return new TypeExpression (compiler.BuiltinTypes.String, GetLocation (e)); + else if (sn.Name == "void") + return new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (e)); + else if (sn.Name == "Function") + return new TypeExpression (compiler.BuiltinTypes.Delegate, GetLocation (e)); + else if (sn.Name == "Class") + return new TypeExpression (compiler.BuiltinTypes.Type, GetLocation (e)); + else + return e; +} + +Statement ExpressionListToStatementList(List list) +{ + if (list.Count == 1) { + return ConvertExpressionToStatement(list[0]); + } else if (list.Count > 1) { + var sl = new StatementList(ConvertExpressionToStatement(list[0]), ConvertExpressionToStatement(list[1])); + for (var i = 2; i < list.Count; i++) { + sl.Add(ConvertExpressionToStatement(list[i])); + } + return sl; + } + + return new StatementErrorExpression (EmptyExpression.MissingValue); +} + +Statement ConvertExpressionToStatement(Expression ex) +{ + Statement ret; + ExpressionStatement s = ex as ExpressionStatement; + if (s == null) { + if (Lexer.ParsingPlayScript) { + ex.Error_InvalidExpressionStatement (report); + ret = new StatementErrorExpression (ex); + } else { + ret = new AsNonAssignStatementExpression (ex); + } + } else { + ret = new StatementExpression (s); + } + return ret; +} + +Expression MakeMonoSimdType(string typeName, Location loc) +{ + return new MemberAccess(new MemberAccess(new SimpleName("Mono", loc), "Simd", loc), typeName, loc); +} + +LocalVariable GetOrCreateLocalVariable(Block block, string name, LocalVariable.Flags flags, FullNamedExpression typeExpr, Location loc) +{ + INamedBlockVariable existing = null; + LocalVariable li = null; + + if (!parsing_playscript) { + if (block.ParametersBlock.TopBlock.GetLocalName (name, block, ref existing)) { + if (existing is LocalVariable) { + li = existing as LocalVariable; + if (li.TypeExpr != null && existing.TypeExpr != null && li.TypeExpr.Equals (existing.TypeExpr)) { + report.Warning (7138, 1, loc, "Variable is declared more than once."); + li.DeclFlags |= LocalVariable.Flags.AsIgnoreMultiple; + return li; + } + } + } + } + + li = new LocalVariable(block, name, flags, loc); + li.TypeExpr = typeExpr; + + block.AddLocalName (li); + + return li; +} + +string MakePrivateNamespaceName(NamespaceContainer prev_container, CompilationSourceFile file) +{ + StringBuilder sb = new StringBuilder(); + sb.Append("_"); + sb.Append(System.IO.Path.GetFileNameWithoutExtension(file.FileName)); + sb.Append("_private"); + for (var i = 0; i < sb.Length; i++) { + var ch = sb[i]; + if (ch != '_' && !char.IsLetterOrDigit(ch)) + sb[i] = '_'; + } + return sb.ToString(); +} + +bool IsConfigVarDefined(string configVar) +{ + string var_name = configVar.Replace("::", "_"); + return file.IsConditionalDefined (var_name) && file.GetConditionalValue (var_name) != "false"; +} + +string GetExpecting () +{ + int [] tokens = yyExpectingTokens (yyExpectingState); + var names = new List (tokens.Length); + bool has_type = false; + bool has_identifier = false; + for (int i = 0; i < tokens.Length; i++){ + int token = tokens [i]; + has_identifier |= token == Token.IDENTIFIER; + + string name = GetTokenName (token); + if (name == "") + continue; + + has_type |= name == "type"; + if (names.Contains (name)) + continue; + + names.Add (name); + } + + // + // Too many tokens to enumerate + // + if (names.Count > 8) + return null; + + if (has_type && has_identifier) + names.Remove ("identifier"); + + if (names.Count == 1) + return "`" + GetTokenName (tokens [0]) + "'"; + + StringBuilder sb = new StringBuilder (); + names.Sort (); + int count = names.Count; + for (int i = 0; i < count; i++){ + bool last = i + 1 == count; + if (last) + sb.Append ("or "); + sb.Append ('`'); + sb.Append (names [i]); + sb.Append (last ? "'" : count < 3 ? "' " : "', "); + } + return sb.ToString (); +} + + +string GetSymbolName (int token) +{ + switch (token){ + case Token.LITERAL: + return "Literal " + ((Constant)lexer.Value).GetValue ().ToString (); + case Token.IDENTIFIER: + case Token.IDENTIFIER_MODIFIER: + case Token.IDENTIFIER_CONFIG: + return "Identifier " + ((LocatedToken)lexer.Value).Value ?? ""; + case Token.BOOL: + return "bool"; + case Token.BOOLEAN: + return "boolean"; + case Token.BYTE: + return "byte"; + case Token.CHAR: + return "char"; + case Token.VOID: + return "void"; + case Token.DECIMAL: + return "decimal"; + case Token.DOUBLE: + return "double"; + case Token.DOUBLE2: + return "double2"; + case Token.DOUBLE3: + return "double3"; + case Token.DOUBLE4: + return "double4"; + case Token.DYNAMIC: + return "dynamic"; + case Token.FLOAT: + return "float"; + case Token.FLOAT2: + return "float2"; + case Token.FLOAT3: + return "float3"; + case Token.FLOAT4: + return "float4"; + case Token.INT: + return "int"; + case Token.LONG: + return "long"; + case Token.SBYTE: + return "sbyte"; + case Token.SHORT: + return "short"; + case Token.STRING: + return "string"; + case Token.UINT: + return "uint"; + case Token.ULONG: + return "ulong"; + case Token.USHORT: + return "ushort"; + case Token.OBJECT: + return "object"; + + case Token.PLUS: + return "+"; + case Token.UMINUS: + case Token.MINUS: + return "-"; + case Token.BANG: + return "!"; + case Token.BITWISE_AND: + return "&"; + case Token.BITWISE_OR: + return "|"; + case Token.LOGICAL_AND_ASSIGN: + return "&&="; + case Token.LOGICAL_OR_ASSIGN: + return "||="; + case Token.STAR: + return "*"; + case Token.PERCENT: + return "%"; + case Token.DIV: + return "/"; + case Token.CARRET: + return "^"; + case Token.OP_INC: + return "++"; + case Token.OP_DEC: + return "--"; + case Token.OP_SHIFT_LEFT: + return "<<"; + case Token.OP_SHIFT_RIGHT: + return ">>"; + case Token.OP_USHIFT_RIGHT: + return ">>>"; + case Token.OP_LT: + return "<"; + case Token.OP_GT: + return ">"; + case Token.OP_LE: + return "<="; + case Token.OP_GE: + return ">="; + case Token.OP_EQ: + return "=="; + case Token.OP_STRICT_EQ: + return "==="; + case Token.OP_NE: + return "!="; + case Token.OP_AND: + return "&&"; + case Token.OP_OR: + return "||"; + case Token.OP_PTR: + return "->"; + case Token.OP_IN: + return "in"; + case Token.OP_COALESCING: + return "??"; + case Token.OP_MULT_ASSIGN: + return "*="; + case Token.OP_DIV_ASSIGN: + return "/="; + case Token.OP_MOD_ASSIGN: + return "%="; + case Token.OP_ADD_ASSIGN: + return "+="; + case Token.OP_SUB_ASSIGN: + return "-="; + case Token.OP_SHIFT_LEFT_ASSIGN: + return "<<="; + case Token.OP_SHIFT_RIGHT_ASSIGN: + return ">>="; + case Token.OP_USHIFT_RIGHT_ASSIGN: + return ">>>="; + case Token.OP_AND_ASSIGN: + return "&="; + case Token.OP_XOR_ASSIGN: + return "^="; + case Token.OP_OR_ASSIGN: + return "|="; + } + + return GetTokenName (token); +} + +static string GetTokenName (int token) +{ + switch (token){ + case Token.ABSTRACT: + return "abstract"; + case Token.AS: + return "as"; + case Token.ADD: + return "add"; + case Token.ASYNC: + return "async"; + case Token.SUPER: + return "super"; + case Token.BREAK: + return "break"; + case Token.CASE: + return "case"; + case Token.CATCH: + return "catch"; + case Token.CHECKED: + return "checked"; + case Token.CLASS: + return "class"; + case Token.CONST: + return "const"; + case Token.CONTINUE: + return "continue"; + case Token.DEFAULT: + return "default"; + case Token.DELEGATE: + return "delegate"; + case Token.DELETE: + return "delete"; + case Token.DO: + return "do"; + case Token.EACH: + return "each"; + case Token.ELSE: + return "else"; + case Token.ENUM: + return "enum"; + case Token.EVENT: + return "event"; + case Token.EXPLICIT: + return "explicit"; + case Token.EXTENDS: + return "extends"; + case Token.EXTERN: + return "extern"; + case Token.FALSE: + return "false"; + case Token.FINAL: + return "final"; + case Token.FINALLY: + return "finally"; + case Token.FIXED: + return "fixed"; + case Token.FOR: + return "for"; + case Token.FOR_EACH: + return "for each"; + case Token.FUNCTION: + return "function"; + case Token.FUNCTION_GET: + return "function get"; + case Token.FUNCTION_SET: + return "function set"; + case Token.GOTO: + return "goto"; + case Token.IF: + return "if"; + case Token.IMPLEMENTS: + return "implements"; + case Token.IMPLICIT: + return "implicit"; + case Token.IMPORT: + return "import"; + case Token.IN: + return "in"; + case Token.INDEXER: + return "indexer"; + case Token.INSTANCEOF: + return "instanceof"; + case Token.INTERFACE: + return "interface"; + case Token.INTERNAL: + return "internal"; + case Token.IS: + return "is"; + case Token.LOCK: + return "lock"; + case Token.NAMESPACE: + return "namespace"; + case Token.NATIVE: + return "native"; + case Token.NEW: + return "new"; + case Token.NULL: + return "null"; + case Token.OPERATOR: + return "operator"; + case Token.OUT: + return "out"; + case Token.OVERRIDE: + return "override"; + case Token.OVERLOAD: + return "overload"; + case Token.PARAMS: + return "params"; + case Token.PRIVATE: + return "private"; + case Token.PROPERTY: + return "property"; + case Token.PROTECTED: + return "protected"; + case Token.PUBLIC: + return "public"; + case Token.READONLY: + return "readonly"; + case Token.REF: + return "ref"; + case Token.RETURN: + return "return"; + case Token.REMOVE: + return "remove"; + case Token.SIZEOF: + return "sizeof"; + case Token.STACKALLOC: + return "stackalloc"; + case Token.STATIC: + return "static"; + case Token.STRUCT: + return "struct"; + case Token.SWITCH: + return "switch"; + case Token.THIS: + return "this"; + case Token.THROW: + return "throw"; + case Token.TRUE: + return "true"; + case Token.TRY: + return "try"; + case Token.TYPEOF: + return "typeof"; + case Token.UNCHECKED: + return "unchecked"; + case Token.UNDEFINED: + return "undefined"; + case Token.UNSAFE: + return "unsafe"; + case Token.USE: + return "use"; + case Token.USING: + return "using"; + case Token.VAR: + return "var"; + case Token.VIRTUAL: + return "virtual"; + case Token.VOLATILE: + return "volatile"; + case Token.WHERE: + return "where"; + case Token.WHILE: + return "while"; +// case Token.ARGLIST: +// return "__arglist"; +// case Token.REFVALUE: +// return "__refvalue"; +// case Token.REFTYPE: +// return "__reftype"; +// case Token.MAKEREF: +// return "__makeref"; + case Token.PARTIAL: + return "partial"; + case Token.ARROW: + return "=>"; + case Token.FROM: + case Token.FROM_FIRST: + return "from"; + case Token.JOIN: + return "join"; + case Token.ON: + return "on"; + case Token.EQUALS: + return "equals"; + case Token.SELECT: + return "select"; + case Token.GROUP: + return "group"; + case Token.BY: + return "by"; + case Token.LET: + return "let"; + case Token.ORDERBY: + return "orderby"; + case Token.ASCENDING: + return "ascending"; + case Token.DESCENDING: + return "descending"; + case Token.INTO: + return "into"; + case Token.GET: + return "get"; + case Token.SET: + return "set"; + case Token.OPEN_BRACE: + case Token.OPEN_BRACE_INIT: + return "{"; + case Token.CLOSE_BRACE: + return "}"; + case Token.OPEN_BRACKET: + case Token.OPEN_BRACKET_EXPR: + return "["; + case Token.CLOSE_BRACKET: + return "]"; + case Token.OPEN_PARENS: + return "("; + case Token.CLOSE_PARENS: + return ")"; + case Token.DOT: + return "."; + case Token.DOT_AT: + return ".@"; + case Token.DOT_STAR: + return ".*"; + case Token.DOTDOT: + return ".."; + case Token.DOTDOT_AT: + return "..@"; + case Token.DOTDOT_STAR: + return "..*"; + case Token.DOTDOTDOT: + return "..."; + case Token.COMMA: + return ","; + case Token.DEFAULT_COLON: + return "default:"; + case Token.COLON: + return ":"; + case Token.SEMICOLON: + return ";"; + case Token.TILDE: + return "~"; + + case Token.PLUS: + case Token.UMINUS: + case Token.MINUS: + case Token.BANG: + case Token.OP_LT: + case Token.OP_GT: + case Token.BITWISE_AND: + case Token.BITWISE_OR: + case Token.STAR: + case Token.PERCENT: + case Token.DIV: + case Token.CARRET: + case Token.OP_INC: + case Token.OP_DEC: + case Token.OP_SHIFT_LEFT: + case Token.OP_SHIFT_RIGHT: + case Token.OP_LE: + case Token.OP_GE: + case Token.OP_EQ: + case Token.OP_NE: + case Token.OP_AND: + case Token.OP_OR: + case Token.OP_PTR: + case Token.OP_COALESCING: + case Token.OP_MULT_ASSIGN: + case Token.OP_DIV_ASSIGN: + case Token.OP_MOD_ASSIGN: + case Token.OP_ADD_ASSIGN: + case Token.OP_SUB_ASSIGN: + case Token.OP_SHIFT_LEFT_ASSIGN: + case Token.OP_SHIFT_RIGHT_ASSIGN: + case Token.OP_AND_ASSIGN: + case Token.OP_XOR_ASSIGN: + case Token.OP_OR_ASSIGN: + case Token.OP_AT: + return ""; + + case Token.BOOL: + case Token.BYTE: + case Token.CHAR: + case Token.VOID: + case Token.DECIMAL: + case Token.DOUBLE: + case Token.FLOAT: + case Token.INT: + case Token.LONG: + case Token.SBYTE: + case Token.SHORT: + case Token.STRING: + case Token.UINT: + case Token.ULONG: + case Token.USHORT: + case Token.OBJECT: + return "type"; + + case Token.ASSIGN: + return "="; + case Token.OP_GENERICS_LT: + case Token.GENERIC_DIMENSION: + return ".<"; + case Token.OP_GENERICS_GT: + return ">"; + case Token.INTERR: + case Token.INTERR_NULLABLE: + return "?"; + case Token.DOUBLE_COLON: + return "::"; + case Token.LITERAL: + return "value"; + case Token.IDENTIFIER: + case Token.AWAIT: + return "identifier"; + + case Token.EOF: + return "end-of-file"; + + // All of these are internal. + case Token.NONE: + case Token.ERROR: + case Token.FIRST_KEYWORD: + case Token.EVAL_COMPILATION_UNIT_PARSER: + case Token.EVAL_USING_DECLARATIONS_UNIT_PARSER: + case Token.EVAL_STATEMENT_PARSER: + case Token.LAST_KEYWORD: + case Token.GENERATE_COMPLETION: + case Token.COMPLETE_COMPLETION: + return ""; + + // A bit more robust. + default: + return yyNames [token]; + } +} + +/* end end end */ +} +#line default +namespace yydebug { + using System; + internal interface yyDebug { + void push (int state, Object value); + void lex (int state, int token, string name, Object value); + void shift (int from, int to, int errorFlag); + void pop (int state); + void discard (int state, int token, string name, Object value); + void reduce (int from, int to, int rule, string text, int len); + void shift (int from, int to); + void accept (Object value); + void error (string message); + void reject (); + } + + class yyDebugSimple : yyDebug { + void println (string s){ + Console.Error.WriteLine (s); + } + + public void push (int state, Object value) { + println ("push\tstate "+state+"\tvalue "+value); + } + + public void lex (int state, int token, string name, Object value) { + println("lex\tstate "+state+"\treading "+name+"\tvalue "+value); + } + + public void shift (int from, int to, int errorFlag) { + switch (errorFlag) { + default: // normally + println("shift\tfrom state "+from+" to "+to); + break; + case 0: case 1: case 2: // in error recovery + println("shift\tfrom state "+from+" to "+to + +"\t"+errorFlag+" left to recover"); + break; + case 3: // normally + println("shift\tfrom state "+from+" to "+to+"\ton error"); + break; + } + } + + public void pop (int state) { + println("pop\tstate "+state+"\ton error"); + } + + public void discard (int state, int token, string name, Object value) { + println("discard\tstate "+state+"\ttoken "+name+"\tvalue "+value); + } + + public void reduce (int from, int to, int rule, string text, int len) { + println("reduce\tstate "+from+"\tuncover "+to + +"\trule ("+rule+") "+text); + } + + public void shift (int from, int to) { + println("goto\tfrom state "+from+" to "+to); + } + + public void accept (Object value) { + println("accept\tvalue "+value); + } + + public void error (string message) { + println("error\t"+message); + } + + public void reject () { + println("reject"); + } + + } +} +// %token constants + class Token { + public const int EOF = 257; + public const int NONE = 258; + public const int ERROR = 259; + public const int FIRST_KEYWORD = 260; + public const int ABSTRACT = 261; + public const int AS = 262; + public const int ADD = 263; + public const int SUPER = 264; + public const int BOOL = 265; + public const int BOOLEAN = 266; + public const int BREAK = 267; + public const int BYTE = 268; + public const int CASE = 269; + public const int CATCH = 270; + public const int CHAR = 271; + public const int CHECKED = 272; + public const int CLASS = 273; + public const int CONST = 274; + public const int CONTINUE = 275; + public const int DECIMAL = 276; + public const int DEFAULT = 277; + public const int DELEGATE = 278; + public const int DELETE = 279; + public const int DO = 280; + public const int DOUBLE = 281; + public const int DOUBLE2 = 282; + public const int DOUBLE3 = 283; + public const int DOUBLE4 = 284; + public const int DYNAMIC = 285; + public const int EACH = 286; + public const int ELSE = 287; + public const int ENUM = 288; + public const int EVENT = 289; + public const int EXPLICIT = 290; + public const int EXTENDS = 291; + public const int FALSE = 292; + public const int FINAL = 293; + public const int FINALLY = 294; + public const int FIXED = 295; + public const int FLOAT = 296; + public const int FLOAT2 = 297; + public const int FLOAT3 = 298; + public const int FLOAT4 = 299; + public const int FOR = 300; + public const int FOR_EACH = 301; + public const int FUNCTION = 302; + public const int FUNCTION_GET = 303; + public const int FUNCTION_SET = 304; + public const int GOTO = 305; + public const int IF = 306; + public const int IMPLICIT = 307; + public const int IMPLEMENTS = 308; + public const int IMPORT = 309; + public const int IN = 310; + public const int INDEXER = 311; + public const int INSTANCEOF = 312; + public const int INT = 313; + public const int INTERFACE = 314; + public const int INTERNAL = 315; + public const int IS = 316; + public const int LOCK = 317; + public const int LONG = 318; + public const int NAMESPACE = 319; + public const int NATIVE = 320; + public const int NEW = 321; + public const int NULL = 322; + public const int OBJECT = 323; + public const int OPERATOR = 324; + public const int OUT = 325; + public const int OVERRIDE = 326; + public const int OVERLOAD = 327; + public const int PACKAGE = 328; + public const int PARAMS = 329; + public const int PRIVATE = 330; + public const int PROPERTY = 331; + public const int PROTECTED = 332; + public const int PUBLIC = 333; + public const int READONLY = 334; + public const int REF = 335; + public const int RETURN = 336; + public const int REMOVE = 337; + public const int SBYTE = 338; + public const int SHORT = 339; + public const int SIZEOF = 340; + public const int STACKALLOC = 341; + public const int STATIC = 342; + public const int STRING = 343; + public const int STRUCT = 344; + public const int SWITCH = 345; + public const int THIS = 346; + public const int THROW = 347; + public const int TRUE = 348; + public const int TRY = 349; + public const int TYPEOF = 350; + public const int UINT = 351; + public const int ULONG = 352; + public const int UNCHECKED = 353; + public const int UNDEFINED = 354; + public const int UNSAFE = 355; + public const int USE = 356; + public const int USHORT = 357; + public const int USING = 358; + public const int VAR = 359; + public const int VIRTUAL = 360; + public const int VOID = 361; + public const int VOLATILE = 362; + public const int WHERE = 363; + public const int WHILE = 364; + public const int PARTIAL = 365; + public const int ARROW = 366; + public const int FROM = 367; + public const int FROM_FIRST = 368; + public const int JOIN = 369; + public const int ON = 370; + public const int EQUALS = 371; + public const int SELECT = 372; + public const int GROUP = 373; + public const int BY = 374; + public const int LET = 375; + public const int ORDERBY = 376; + public const int ASCENDING = 377; + public const int DESCENDING = 378; + public const int INTO = 379; + public const int INTERR_NULLABLE = 380; + public const int EXTERN = 381; + public const int ASYNC = 382; + public const int AWAIT = 383; + public const int INTERR_OPERATOR = 384; + public const int GET = 385; + public const int SET = 386; + public const int LAST_KEYWORD = 387; + public const int OPEN_BRACE = 388; + public const int CLOSE_BRACE = 389; + public const int OPEN_BRACKET = 390; + public const int CLOSE_BRACKET = 391; + public const int OPEN_PARENS = 392; + public const int CLOSE_PARENS = 393; + public const int DOT = 394; + public const int DOT_AT = 395; + public const int DOT_STAR = 396; + public const int DOTDOT = 397; + public const int DOTDOT_AT = 398; + public const int DOTDOT_STAR = 399; + public const int DOTDOTDOT = 400; + public const int DOT_OPEN_PARENS = 401; + public const int CLOSE_PARENS_DOT = 402; + public const int COMMA = 403; + public const int COLON = 404; + public const int SEMICOLON = 405; + public const int TILDE = 406; + public const int PLUS = 407; + public const int MINUS = 408; + public const int BANG = 409; + public const int ASSIGN = 410; + public const int OP_LT = 411; + public const int OP_GT = 412; + public const int BITWISE_AND = 413; + public const int BITWISE_OR = 414; + public const int LOGICAL_AND_ASSIGN = 415; + public const int LOGICAL_OR_ASSIGN = 416; + public const int STAR = 417; + public const int PERCENT = 418; + public const int DIV = 419; + public const int CARRET = 420; + public const int INTERR = 421; + public const int DOUBLE_COLON = 422; + public const int OP_INC = 423; + public const int OP_DEC = 424; + public const int OP_SHIFT_LEFT = 425; + public const int OP_SHIFT_RIGHT = 426; + public const int OP_USHIFT_RIGHT = 427; + public const int OP_LE = 428; + public const int OP_GE = 429; + public const int OP_EQ = 430; + public const int OP_STRICT_EQ = 431; + public const int OP_NE = 432; + public const int OP_STRICT_NE = 433; + public const int OP_AND = 434; + public const int OP_OR = 435; + public const int OP_MULT_ASSIGN = 436; + public const int OP_DIV_ASSIGN = 437; + public const int OP_MOD_ASSIGN = 438; + public const int OP_ADD_ASSIGN = 439; + public const int OP_SUB_ASSIGN = 440; + public const int OP_SHIFT_LEFT_ASSIGN = 441; + public const int OP_SHIFT_RIGHT_ASSIGN = 442; + public const int OP_USHIFT_RIGHT_ASSIGN = 443; + public const int OP_AND_ASSIGN = 444; + public const int OP_XOR_ASSIGN = 445; + public const int OP_OR_ASSIGN = 446; + public const int OP_PTR = 447; + public const int OP_COALESCING = 448; + public const int OP_IN = 449; + public const int OP_AT = 450; + public const int OP_GENERICS_LT = 451; + public const int OP_GENERICS_LT_DECL = 452; + public const int OP_GENERICS_GT = 453; + public const int LITERAL = 454; + public const int IDENTIFIER = 455; + public const int IDENTIFIER_MODIFIER = 456; + public const int IDENTIFIER_CONFIG = 457; + public const int GENERIC_DIMENSION = 458; + public const int DEFAULT_COLON = 459; + public const int OPEN_BRACKET_EXPR = 460; + public const int OPEN_BRACE_INIT = 461; + public const int EVAL_STATEMENT_PARSER = 462; + public const int EVAL_COMPILATION_UNIT_PARSER = 463; + public const int EVAL_USING_DECLARATIONS_UNIT_PARSER = 464; + public const int DOC_SEE = 465; + public const int GENERATE_COMPLETION = 466; + public const int COMPLETE_COMPLETION = 467; + public const int UMINUS = 468; + public const int qualified_alias_member = 469; + public const int yyErrorCode = 256; + } + namespace yyParser { + using System; + /** thrown for irrecoverable syntax errors and stack overflow. + */ + internal class yyException : System.Exception { + public yyException (string message) : base (message) { + } + } + internal class yyUnexpectedEof : yyException { + public yyUnexpectedEof (string message) : base (message) { + } + public yyUnexpectedEof () : base ("") { + } + } + + /** must be implemented by a scanner object to supply input to the parser. + */ + internal interface yyInput { + /** move on to next token. + @return false if positioned beyond tokens. + @throws IOException on input error. + */ + bool advance (); // throws java.io.IOException; + /** classifies current token. + Should not be called if advance() returned false. + @return current %token or single character. + */ + int token (); + /** associated with current token. + Should not be called if advance() returned false. + @return value for token(). + */ + Object value (); + } + } +} // close outermost namespace, that MUST HAVE BEEN opened in the prolog diff --git a/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-parser.jay b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-parser.jay new file mode 100644 index 000000000..2db17c932 --- /dev/null +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-parser.jay @@ -0,0 +1,9121 @@ +%{ +// +// ps-parser.jay: The Parser for the PlayScript language +// Authors: Miguel de Icaza (miguel@gnome.org) +// Ravi Pratap (ravi@ximian.com) +// Marek Safar (marek.safar@gmail.com) +// Ben Cooley (bcooley@zynga.com) +// Dual Licensed under the terms of the GNU GPL and the MIT X11 license +// +// (C) 2001 Ximian, Inc (http://www.ximian.com) +// (C) 2004-2011 Novell, Inc +// Copyright 2011-2012 Xamarin Inc. +// + +using System.Text; +using System.IO; +using System; +using System.Collections.Generic; +using ICSharpCode.NRefactory.MonoPlayScript; +using Linq = ICSharpCode.NRefactory.MonoPlayScript.Linq; +using Enum = ICSharpCode.NRefactory.MonoPlayScript.Enum; +using Attribute = ICSharpCode.NRefactory.MonoPlayScript.Attribute; +using Delegate = ICSharpCode.NRefactory.MonoPlayScript.Delegate; +using Nullable = ICSharpCode.NRefactory.MonoPlayScript.Nullable; + +namespace Mono.PlayScript +{ + /// + /// The PlayScript Parser + /// + public class PlayScriptParser + { + [Flags] + enum ParameterModifierType + { + Ref = 1 << 1, + Out = 1 << 2, + This = 1 << 3, + Params = 1 << 4, + Arglist = 1 << 5, + DefaultValue = 1 << 6, + + All = Ref | Out | This | Params | Arglist | DefaultValue + } + + public bool parsing_playscript = false; + + static readonly object ModifierNone = 0; + + const string RootNs = PsConsts.PsRootNamespace; + + NamespaceContainer current_namespace; + NamespaceContainer prev_namespace; + NamespaceContainer private_namespace; + TypeContainer current_container; + TypeDefinition current_type; + PropertyBase current_property; + EventProperty current_event; + EventField current_event_field; + FieldBase current_field; + Constructor current_constructor; + + // Set by config params to enable/disable inclusion of methods, fields, consts, classes, structs, etc. + bool is_config_enabled = true; + + bool is_package_function = false; + + /// + /// Current block is used to add statements as we find + /// them. + /// + Block current_block; + + BlockVariable current_variable; + + ICSharpCode.NRefactory.MonoCSharp.Delegate current_delegate; + + AnonymousMethodExpression current_anonymous_method; + + /// + /// This is used by the unary_expression code to resolve + /// a name against a parameter. + /// + + // FIXME: This is very ugly and it's very hard to reset it correctly + // on all places, especially when some parameters are autogenerated. + ParametersCompiled current_local_parameters; + + bool parsing_anonymous_method; + + bool async_block; + + /// + /// An out-of-band stack. + /// + Stack oob_stack; + + /// + /// Controls the verbosity of the errors produced by the parser + /// + int yacc_verbose_flag; + + /// + /// Used by the interactive shell, flags whether EOF was reached + /// and an error was produced + /// + public bool UnexpectedEOF; + + /// + /// The current file. + /// + readonly CompilationSourceFile file; + + /// + /// Temporary Xml documentation cache. + /// For enum types, we need one more temporary store. + /// + string tmpComment; + string enumTypeComment; + + /// Current attribute target + string current_attr_target; + + ParameterModifierType valid_param_mod; + + bool default_parameter_used; + + /// When using the interactive parser, this holds the + /// resulting expression + public Class InteractiveResult; + + // Current modifier namespace identifier + public string ns_modifier; + + // + // Keeps track of global data changes to undo on parser error + // + public Undo undo; + + bool? interactive_async; + + Stack linq_clause_blocks; + + ModuleContainer module; + + readonly CompilerContext compiler; + readonly LanguageVersion lang_version; + readonly bool doc_support; + readonly CompilerSettings settings; + readonly Report report; + + // + // Instead of allocating carrier array everytime we + // share the bucket for very common constructs which can never + // be recursive + // + List parameters_bucket; + + // + // Full AST support members + // + LocationsBag lbag; + List> mod_locations; + Stack location_stack; +%} + +%token EOF +%token NONE /* This token is never returned by our lexer */ +%token ERROR // This is used not by the parser, but by the tokenizer. + // do not remove. + +/* + *These are the C# keywords + */ +%token FIRST_KEYWORD +%token ABSTRACT +%token AS +%token ADD +%token SUPER +%token BOOL +%token BOOLEAN +%token BREAK +%token BYTE +%token CASE +%token CATCH +%token CHAR +%token CHECKED +%token CLASS +%token CONST +%token CONTINUE +%token DECIMAL +%token DEFAULT +%token DELEGATE +%token DELETE +%token DO +%token DOUBLE +%token DOUBLE2 +%token DOUBLE3 +%token DOUBLE4 +%token DYNAMIC +%token EACH +%token ELSE +%token ENUM +%token EVENT +%token EXPLICIT +%token EXTENDS +%token FALSE +%token FINAL +%token FINALLY +%token FIXED +%token FLOAT +%token FLOAT2 +%token FLOAT3 +%token FLOAT4 +%token FOR +%token FOR_EACH +%token FUNCTION +%token FUNCTION_GET +%token FUNCTION_SET +%token GOTO +%token IF +%token IMPLICIT +%token IMPLEMENTS +%token IMPORT +%token IN +%token INDEXER +%token INSTANCEOF +%token INT +%token INTERFACE +%token INTERNAL +%token IS +%token LOCK +%token LONG +%token NAMESPACE +%token NATIVE +%token NEW +%token NULL +%token OBJECT +%token OPERATOR +%token OUT +%token OVERRIDE +%token OVERLOAD +%token PACKAGE +%token PARAMS +%token PRIVATE +%token PROPERTY +%token PROTECTED +%token PUBLIC +%token READONLY +%token REF +%token RETURN +%token REMOVE +%token SBYTE +%token SHORT +%token SIZEOF +%token STACKALLOC +%token STATIC +%token STRING +%token STRUCT +%token SWITCH +%token THIS +%token THROW +%token TRUE +%token TRY +%token TYPEOF +%token UINT +%token ULONG +%token UNCHECKED +%token UNDEFINED +%token UNSAFE +%token USE +%token USHORT +%token USING +%token VAR +%token VIRTUAL +%token VOID +%token VOLATILE +%token WHERE +%token WHILE +%token PARTIAL +%token ARROW +%token FROM +%token FROM_FIRST +%token JOIN +%token ON +%token EQUALS +%token SELECT +%token GROUP +%token BY +%token LET +%token ORDERBY +%token ASCENDING +%token DESCENDING +%token INTO +%token INTERR_NULLABLE +%token EXTERN +%token ASYNC +%token AWAIT +%token INTERR_OPERATOR + +/* C# keywords which are not really keywords */ +%token GET +%token SET + +%left LAST_KEYWORD + +/* C# single character operators/punctuation. */ +%token OPEN_BRACE +%token CLOSE_BRACE +%token OPEN_BRACKET +%token CLOSE_BRACKET +%token OPEN_PARENS +%token CLOSE_PARENS + +%token DOT +%token DOT_AT +%token DOT_STAR +%token DOTDOT +%token DOTDOT_AT +%token DOTDOT_STAR +%token DOTDOTDOT +%token DOT_OPEN_PARENS +%token CLOSE_PARENS_DOT +%token COMMA +%token COLON +%token SEMICOLON +%token TILDE + +%token PLUS +%token MINUS +%token BANG +%token ASSIGN +%token OP_LT +%token OP_GT +%token BITWISE_AND +%token BITWISE_OR +%token LOGICAL_AND_ASSIGN +%token LOGICAL_OR_ASSIGN +%token STAR +%token PERCENT +%token DIV +%token CARRET +%token INTERR + +/* C# multi-character operators. */ +%token DOUBLE_COLON +%token OP_INC +%token OP_DEC +%token OP_SHIFT_LEFT +%token OP_SHIFT_RIGHT +%token OP_USHIFT_RIGHT +%token OP_LE +%token OP_GE +%token OP_EQ +%token OP_STRICT_EQ +%token OP_NE +%token OP_STRICT_NE +%token OP_AND +%token OP_OR +%token OP_MULT_ASSIGN +%token OP_DIV_ASSIGN +%token OP_MOD_ASSIGN +%token OP_ADD_ASSIGN +%token OP_SUB_ASSIGN +%token OP_SHIFT_LEFT_ASSIGN +%token OP_SHIFT_RIGHT_ASSIGN +%token OP_USHIFT_RIGHT_ASSIGN +%token OP_AND_ASSIGN +%token OP_XOR_ASSIGN +%token OP_OR_ASSIGN +%token OP_PTR +%token OP_COALESCING +%token OP_IN +%token OP_AT + +/* Generics <,> tokens */ +%token OP_GENERICS_LT +%token OP_GENERICS_LT_DECL +%token OP_GENERICS_GT + +%token LITERAL + +%token IDENTIFIER +%token IDENTIFIER_MODIFIER +%token IDENTIFIER_CONFIG +%token GENERIC_DIMENSION +%token DEFAULT_COLON +%token OPEN_BRACKET_EXPR +%token OPEN_BRACE_INIT + +// Make the parser go into eval mode parsing (statements and compilation units). +%token EVAL_STATEMENT_PARSER +%token EVAL_COMPILATION_UNIT_PARSER +%token EVAL_USING_DECLARATIONS_UNIT_PARSER + +%token DOC_SEE + +// +// This token is generated to trigger the completion engine at this point +// +%token GENERATE_COMPLETION + +// +// This token is return repeatedly after the first GENERATE_COMPLETION +// token is produced and before the final EOF +// +%token COMPLETE_COMPLETION + +/* Add precedence rules to solve dangling else s/r conflict */ +%nonassoc IF +%nonassoc ELSE + +/* Define the operator tokens and their precedences */ +%right ASSIGN +%right OP_COALESCING +%right INTERR +%left OP_OR +%left OP_AND +%left BITWISE_OR +%left BITWISE_AND +%left OP_SHIFT_LEFT OP_SHIFT_RIGHT +%left PLUS MINUS +%left STAR DIV PERCENT +%right BANG CARRET UMINUS +%nonassoc OP_INC OP_DEC +%left OPEN_PARENS +%left NEW +%left OPEN_BRACKET OPEN_BRACE +%left DOT + +%start compilation_unit +%% + +compilation_unit + : outer_declaration opt_EOF + { + Lexer.check_incorrect_doc_comment (); + } + | interactive_parsing { Lexer.CompleteOnEOF = false; } opt_EOF + | documentation_parsing + ; + +outer_declaration + : opt_extern_alias_directives opt_package_directives + | opt_extern_alias_directives opt_package_directives package_declaration opt_attributes + { + if ($4 != null) { + Attributes attrs = (Attributes) $4; + report.Error (1730, attrs.Attrs [0].Location, + "Assembly and module attributes must precede all other elements except using clauses and extern alias declarations"); + + current_namespace.UnattachedAttributes = attrs; + } + } + | opt_extern_alias_directives opt_package_directives attribute_sections + { + module.AddAttributes ((Attributes) $3, current_namespace); + } + | error + { + if (yyToken == Token.EXTERN) + report.Error (439, lexer.Location, "An extern alias declaration must precede all other elements"); + else + Error_SyntaxError (yyToken); + } + ; + +opt_EOF + : /* empty */ + | EOF + ; + +extern_alias_directives + : extern_alias_directive + | extern_alias_directives extern_alias_directive + ; + +extern_alias_directive + : EXTERN IDENTIFIER IDENTIFIER SEMICOLON + { + var lt = (LocatedToken) $2; + string s = lt.Value; + if (s != "alias") { + syntax_error (lt.Location, "`alias' expected"); + } else { + if (lang_version == LanguageVersion.ISO_1) + FeatureIsNotAvailable (lt.Location, "external alias"); + + lt = (LocatedToken) $3; + if (lt.Value == QualifiedAliasMember.GlobalAlias) { + RootNamespace.Error_GlobalNamespaceRedefined (report, lt.Location); + } + + var na = new UsingExternAlias (new SimpleMemberName (lt.Value, lt.Location), GetLocation ($1)); + current_namespace.AddUsing (na); + + lbag.AddLocation (na, GetLocation ($2), GetLocation ($4)); + } + } + | EXTERN error + { + Error_SyntaxError (yyToken); + } + ; + +no_config_package_directive + : import_directive + | use_namespace_directive + ; + +package_directive + : no_config_package_directive + | config_package_directive + ; + +config_package_directive + : IDENTIFIER_CONFIG + { + var lt = (LocatedToken) $1; + is_config_enabled = IsConfigVarDefined(lt.Value); + } + no_config_package_directive + { + is_config_enabled = true; + $$ = $3; + } + | IDENTIFIER_CONFIG OPEN_BRACE + { + var lt = (LocatedToken) $1; + is_config_enabled = IsConfigVarDefined(lt.Value); + Lexer.EatBlock = !is_config_enabled; + } + opt_package_directives CLOSE_BRACE + { + is_config_enabled = true; + $$ = $4; + } + ; + +package_directives + : package_directive + | package_directives package_directive + ; + +use_namespace_directive + : use_namespace + { + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + ; + +use_namespace + : USE NAMESPACE IDENTIFIER SEMICOLON + ; + +import_directive + : import_package + { + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + ; + +import_package + : IMPORT namespace_or_type_expr + { + Lexer.AllowAutoSemiAfterToken(Token.DOT_STAR, true); + } + DOT_STAR SEMICOLON + { + if (is_config_enabled) { + var un = new UsingNamespace ((ATypeNameExpression) $2, GetLocation ($1)); + current_namespace.AddUsing (un); + + lbag.AddLocation (un, GetLocation ($5)); + + Lexer.AllowAutoSemiAfterToken(Token.DOT_STAR, false); + } + } + | IMPORT typeof_type_expression SEMICOLON + { + if (is_config_enabled) { + var ut = new UsingType ((ATypeNameExpression) $2, GetLocation ($1)); + current_namespace.AddUsing (ut); + + lbag.AddLocation (ut, GetLocation ($3)); + } + } + | IMPORT IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON + { + if (is_config_enabled) { + var lt = (LocatedToken) $2; + if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { + report.Warning (440, 2, lt.Location, + "An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead"); + } + + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) $4, GetLocation ($1)); + current_namespace.AddUsing (un); + + lbag.AddLocation (un, GetLocation ($3), GetLocation ($5)); + } + } + | IMPORT error + { + Error_SyntaxError (yyToken); + $$ = null; + } + ; + +// +// Strictly speaking, namespaces don't have attributes but +// we parse global attributes along with namespace declarations and then +// detach them +// +package_declaration + : opt_attributes PACKAGE + { + Lexer.AutoSemiInsertion = false; + } + opt_package_name + { + Attributes attrs = (Attributes) $1; + var name = $4 as MemberName; + if (name == null) { + name = new MemberName(RootNs); + } + if (attrs != null) { + bool valid_global_attrs = true; + if ((current_namespace.DeclarationFound || current_namespace != file)) { + valid_global_attrs = false; + } else { + foreach (var a in attrs.Attrs) { + if (a.ExplicitTarget == "assembly" || a.ExplicitTarget == "module") + continue; + + valid_global_attrs = false; + break; + } + } + + if (!valid_global_attrs) + report.Error (1671, name.Location, "A namespace declaration cannot have modifiers or attributes"); + } + + module.AddAttributes (attrs, current_namespace); + + // Close the private package namespace (if it's active) + if (current_namespace == private_namespace) { + if (private_namespace.Containers.Count > 0) { + prev_namespace.AddTypeContainer(private_namespace); + var priv_un = new UsingNamespace ( + private_namespace.NS.MakeTypeNameExpression(GetLocation($1)), GetLocation ($1)); + prev_namespace.AddUsing(priv_un, true); + } + current_container = current_namespace = prev_namespace.Parent; + prev_namespace = private_namespace = null; + } + + var ns = new NamespaceContainer (name, current_namespace); + current_namespace.AddTypeContainer (ns); + current_container = current_namespace = ns; + var un = new UsingNamespace (new SimpleName (RootNs, GetLocation ($1)), GetLocation ($1)); + current_namespace.AddUsing(un, true); + } + OPEN_BRACE + { + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + + Lexer.AutoSemiInsertion = true; + } + opt_package_statements_or_blocks CLOSE_BRACE + { + lbag.AddLocation (current_container, GetLocation ($2), GetLocation ($6), GetLocation ($8)); + + if (current_namespace.Parent != null && current_namespace.Parent.Parent == null) { // Is this the top level package? + var ns = new NamespaceContainer (new MemberName("__" + file.FileName.Replace(".","_").Replace("/","_").Replace("\\", "_").Replace("-", "_") ), current_namespace); + prev_namespace = current_namespace; + current_container = private_namespace = current_namespace = ns; + } else { + current_container = current_namespace = current_namespace.Parent; + } + + lexer.parsing_modifiers = false; + } + opt_package_statements_or_blocks + { + // Close the private package namespace (if it's active) + if (current_namespace == private_namespace) { + if (private_namespace.Containers.Count > 0) { + prev_namespace.AddTypeContainer(private_namespace); + var priv_un = new UsingNamespace ( + private_namespace.NS.MakeTypeNameExpression(GetLocation($1)), GetLocation ($1)); + prev_namespace.AddUsing(priv_un, true); + } + current_container = current_namespace = prev_namespace.Parent; + prev_namespace = private_namespace = null; + } + +// lbag.AddLocation (current_container, GetLocation ($2), GetLocation ($6), GetLocation ($11)); + } + ; + +opt_package_name + : /* empty */ + | package_name + ; + +package_name + : IDENTIFIER + { + var lt = (LocatedToken) $1; + $$ = new MemberName (lt.Value, lt.Location); + } + | package_name DOT IDENTIFIER + { + var lt = (LocatedToken) $3; + $$ = new MemberName ((MemberName) $1, lt.Value, lt.Location); + } + | error + { + Error_SyntaxError (yyToken); + $$ = new MemberName ("", lexer.Location); + } + ; + +opt_semicolon + : /* empty */ + | SEMICOLON + ; + +opt_comma + : /* empty */ + | COMMA + ; + +opt_package_statements_or_blocks + : opt_extern_alias_directives opt_package_statements + | OPEN_BRACE opt_package_statements_or_blocks CLOSE_BRACE + ; + +opt_package_directives + : /* empty */ + | package_directives + ; + +opt_extern_alias_directives + : /* empty */ + | extern_alias_directives + ; + +opt_package_statements + : /* empty */ + | package_statements + ; + +package_statements + : package_statement + | package_statements package_statement + ; + +package_statement + : no_config_package_statement + | config_package_statement + | attribute_sections CLOSE_BRACE { + current_namespace.UnattachedAttributes = (Attributes) $1; + report.Error (1518, lexer.Location, "Attributes must be attached to class, delegate, enum, interface or struct"); + lexer.putback ('}'); + is_config_enabled = true; + } + ; + +no_config_package_statement + : type_declaration + { + if (is_config_enabled) { + if ($1 != null) { + TypeContainer ds = (TypeContainer)$1; + + if ((ds.ModFlags & (Modifiers.PRIVATE | Modifiers.PROTECTED)) != 0){ + report.Error (1527, ds.Location, + "Namespace elements cannot be explicitly declared as private, protected or protected internal"); + } + + // Here is a trick, for explicit attributes we don't know where they belong to until + // we parse succeeding declaration hence we parse them as normal and re-attach them + // when we know whether they are global (assembly:, module:) or local (type:). + if (ds.OptAttributes != null) { + ds.OptAttributes.ConvertGlobalAttributes (ds, current_namespace, !current_namespace.DeclarationFound && current_namespace == file); + } + } + current_namespace.DeclarationFound = true; + } + } + | method_declaration + { + if (is_config_enabled) { + current_namespace.DeclarationFound = true; + } + } + | no_config_package_directive + ; + +config_package_statement + : IDENTIFIER_CONFIG + { + var lt = (LocatedToken) $1; + is_config_enabled = IsConfigVarDefined(lt.Value); + } + no_config_package_statement + { + is_config_enabled = true; + $$ = $3; + } + | IDENTIFIER_CONFIG OPEN_BRACE + { + var lt = (LocatedToken) $1; + is_config_enabled = IsConfigVarDefined(lt.Value); + Lexer.EatBlock = !is_config_enabled; + } + opt_package_statements CLOSE_BRACE + { + is_config_enabled = true; + $$ = $4; + } + ; + +type_declaration + : class_declaration + | struct_declaration + | interface_declaration + | enum_declaration + | delegate_declaration + | namespace_declaration + ; + +// +// Enable this when we have handled all errors, because this acts as a generic fallback +// +// | error { +// Console.WriteLine ("Token=" + yyToken); +// report.Error (1518, GetLocation ($1), "Expected class, struct, interface, enum or delegate"); +// } + ; + +// +// Attributes +// + +opt_attributes + : /* empty */ + | attribute_sections + ; + +attribute_sections + : attribute_section + { + var sect = (List) $1; + $$ = new Attributes (sect); + } + | attribute_sections attribute_section + { + Attributes attrs = $1 as Attributes; + var sect = (List) $2; + if (attrs == null) + attrs = new Attributes (sect); + else if (sect != null) + attrs.AddAttributes (sect); + $$ = attrs; + } + ; + +attribute_section + : OPEN_BRACKET + { + PushLocation (GetLocation ($1)); + lexer.parsing_attribute_section = true; + } + attribute_section_cont + { + lexer.parsing_attribute_section = false; + $$ = $3; + } + ; + +attribute_section_cont + : attribute_target COLON + { + current_attr_target = (string) $1; + if (current_attr_target == "assembly" || current_attr_target == "module") { + Lexer.check_incorrect_doc_comment (); + } + } + attribute_list opt_comma CLOSE_BRACKET + { + // when attribute target is invalid + if (current_attr_target == string.Empty) + $$ = new List (0); + else + $$ = $4; + + lbag.InsertLocation ($$, 0, PopLocation ()); + if ($5 != null) { + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($5), GetLocation ($6)); + } else { + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($6)); + } + + current_attr_target = null; + lexer.parsing_attribute_section = false; + lexer.AutoSemiInsertionAfter = 1; + } + | attribute_list opt_comma CLOSE_BRACKET + { + lexer.AutoSemiInsertionAfter = 1; + $$ = $1; + + lbag.InsertLocation ($$, 0, PopLocation ()); + if ($2 != null) { + lbag.AddLocation ($$, GetLocation($2), GetLocation ($3)); + } else { + lbag.AddLocation ($$, GetLocation($3)); + } + } + | IDENTIFIER error + { + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) $1; + var tne = new SimpleName (lt.Value, null, lt.Location); + + $$ = new List () { + new Attribute (null, tne, null, GetLocation ($1), false) + }; + } + | error + { + //CheckAttributeTarget (GetTokenName (yyToken), GetLocation ($1)); + CheckAttributeTarget (yyToken, GetTokenName (yyToken), GetLocation ($1)); + $$ = null; + } + ; + +attribute_target + : IDENTIFIER + { + var lt = (LocatedToken) $1; + //$$ = CheckAttributeTarget (lt.Value, lt.Location); + $$ = CheckAttributeTarget (yyToken, lt.Value, lt.Location); + } + | EVENT { $$ = "event"; } + | RETURN { $$ = "return"; } + ; + +attribute_list + : attribute + { + $$ = new List (4) { (Attribute) $1 }; + } + | attribute_list COMMA attribute + { + var attrs = (List) $1; + if (attrs != null) { + attrs.Add ((Attribute) $3); + lbag.AppendTo (attrs, GetLocation ($2)); + } + + $$ = attrs; + } + ; + +attribute + : attribute_name + { + ++lexer.parsing_block; + } + opt_attribute_arguments + { + --lexer.parsing_block; + + var tne = (ATypeNameExpression) $1; + if (tne.HasTypeArguments) { + report.Error (404, tne.Location, "Attributes cannot be generic"); + } + + $$ = new Attribute (current_attr_target, tne, (Arguments[]) $3, GetLocation ($1), lexer.IsEscapedIdentifier (tne)); + } + ; + +attribute_name + : namespace_or_type_expr + ; + +opt_attribute_arguments + : /* empty */ { $$ = null; } + | OPEN_PARENS attribute_arguments CLOSE_PARENS + { + lexer.AutoSemiInsertionAfter = 1; + $$ = $2; + } + ; + + +attribute_arguments + : /* empty */ { $$ = null; } + | positional_argument + { + Arguments a = new Arguments (4); + a.Add ((Argument) $1); + $$ = new Arguments [] { a, null }; + } + | named_attribute_argument + { + Arguments a = new Arguments (4); + a.Add ((Argument) $1); + $$ = new Arguments [] { null, a }; + } + | attribute_arguments COMMA positional_argument + { + Arguments[] o = (Arguments[]) $1; + if (o [1] != null) { + report.Error (1016, ((Argument) $3).Expr.Location, "Named attribute arguments must appear after the positional arguments"); + o [0] = new Arguments (4); + } + + Arguments args = ((Arguments) o [0]); + if (args.Count > 0 && !($3 is NamedArgument) && args [args.Count - 1] is NamedArgument) + Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]); + + args.Add ((Argument) $3); + } + | attribute_arguments COMMA named_attribute_argument + { + Arguments[] o = (Arguments[]) $1; + if (o [1] == null) { + o [1] = new Arguments (4); + } + + ((Arguments) o [1]).Add ((Argument) $3); + } + ; + +named_attribute_argument + : IDENTIFIER ASSIGN + { + ++lexer.parsing_block; + } + expression + { + --lexer.parsing_block; + var lt = (LocatedToken) $1; + $$ = new NamedArgument (lt.Value, lt.Location, (Expression) $4); + lbag.AddLocation ($$, GetLocation($2)); + } + ; + +positional_argument + : expression + { + $$ = new Argument ((Expression) $1); + } + | error + { + Error_SyntaxError (yyToken); + $$ = null; + } + ; + +opt_class_member_declarations + : /* empty */ + | class_member_declarations + ; + +class_member_declarations + : class_member_declaration + { + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + | class_member_declarations class_member_declaration + { + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + ; + +class_member_declaration + : constant_declaration + | field_declaration + | method_declaration + | property_declaration + | event_declaration + | indexer_declaration + | operator_declaration +// | constructor_declaration + | destructor_declaration + | type_declaration + | member_config_block + | config_member_declaration + | attributes_without_members + | use_namespace_class_directive + | import_class_directive + | error + { + report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", + GetSymbolName (yyToken)); + $$ = null; + lexer.parsing_generic_declaration = false; + } + ; + +use_namespace_class_directive + : opt_attributes + opt_modifiers + use_namespace_directive + { + if ($1 != null || (Modifiers) $2 != 0) { + report.Error (7058, GetLocation($1 ?? $2), "Modifiers and attributes not allowed"); + } + } + ; + +import_class_directive + : opt_attributes + opt_modifiers + import_directive + { + if ($1 != null || (Modifiers) $2 != 0) { + report.Error (7058, GetLocation($1 ?? $2), "Modifiers and attributes not allowed"); + } + } + ; + +config_member_declaration + : IDENTIFIER_CONFIG + { + var lt = (LocatedToken) $1; + is_config_enabled = IsConfigVarDefined(lt.Value); + } + class_member_declaration + { + is_config_enabled = true; + $$ = $3; + } + ; + + +member_config_block + : IDENTIFIER_CONFIG OPEN_BRACE + { + var lt = (LocatedToken) $1; + is_config_enabled = IsConfigVarDefined(lt.Value); + Lexer.EatBlock = !is_config_enabled; + } + opt_class_member_declarations CLOSE_BRACE + { + is_config_enabled = true; + $$ = $4; + } + ; + +struct_declaration + : opt_attributes + opt_modifiers + opt_partial + STRUCT + { + lexer.ConstraintsParsing = true; + lexer.AutoSemiInsertion = false; + } + type_declaration_name + { + bool is_partial = IsPartial($1) || $3 != null; + push_current_container (new Struct (current_container, (MemberName) $6, (Modifiers) $2, (Attributes) $1), is_partial); + } + opt_class_extends + opt_class_implements + opt_type_parameter_constraints_clauses + { + lexer.ConstraintsParsing = false; + + if ($10 != null) + current_container.SetConstraints ((List) $10); + + if (doc_support) + current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + + lbag.AddMember (current_container, mod_locations, GetLocation ($4)); + + lexer.parsing_modifiers = true; + lexer.AutoSemiInsertion = true; + } + OPEN_BRACE + { + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + lexer.DynamicParsing = false; + Lexer.EatBlock = !is_config_enabled; + } + opt_class_member_declarations CLOSE_BRACE + { + lexer.DynamicParsing = true; + --lexer.parsing_declaration; + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + opt_semicolon + { + is_config_enabled = true; + lbag.AppendToMember (current_container, GetLocation ($12), GetLocation ($15), GetLocation ($17)); + $$ = pop_current_class (); + } + | opt_attributes opt_modifiers opt_partial STRUCT error + { + Error_SyntaxError (yyToken); + } + ; + +opt_member_type + : /* empty */ + { + $$ = null; + } + | COLON member_type + { + $$ = $2; + } + ; + +constant_declaration + : opt_attributes + opt_modifiers + CONST IDENTIFIER opt_member_type + { + var lt = (LocatedToken) $4; + if ($5 == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + $5 = new UntypedTypeExpression (GetLocation ($4)); + } + var mod = (Modifiers) $2; + mod &= ~Modifiers.STATIC; + current_field = new Const (current_type, (FullNamedExpression) $5, mod, new MemberName (lt.Value, lt.Location), (Attributes) $1); + if (is_config_enabled) { + current_type.AddMember (current_field); + } + is_config_enabled = true; + + $$ = current_field; + } + opt_constant_initializer opt_constant_declarators SEMICOLON + { + if (doc_support) { + current_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + current_field.Initializer = (ConstInitializer) $7; + lbag.AddMember (current_field, mod_locations, GetLocation ($3), GetLocation ($9)); + current_field = null; + } + ; + +opt_constant_declarators + : /* empty */ + | constant_declarators + ; + +constant_declarators + : constant_declarator + { + current_field.AddDeclarator ((FieldDeclarator) $1); + } + | constant_declarators constant_declarator + { + current_field.AddDeclarator ((FieldDeclarator) $2); + } + ; + +constant_declarator + : COMMA IDENTIFIER opt_member_type opt_constant_initializer + { + var lt = (LocatedToken) $2; + if ($3 == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Constant `{0}' has no type declaration.", lt.Value); + $3 = new UntypedTypeExpression (GetLocation ($2)); + } + $$ = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) $4, (FullNamedExpression) $3); + lbag.AddLocation ($$, GetLocation ($1)); + } + ; + +opt_constant_initializer + : /* empty */ + { + $$ = new ConstInitializer (current_field, new DefaultValueExpression(current_field.TypeExpression, current_field.Location), current_field.Location); + } + | constant_initializer + ; + +constant_initializer + : ASSIGN + { + ++lexer.parsing_block; + } + constant_initializer_expr + { + --lexer.parsing_block; + $$ = new ConstInitializer (current_field, (Expression) $3, GetLocation ($1)); + } + | error + { + report.Error (145, lexer.Location, "A const field requires a value to be provided"); + $$ = null; + } + ; + +constant_initializer_expr + : constant_expression + ; + +field_declaration + : opt_attributes + opt_modifiers + VAR IDENTIFIER opt_member_type + { + lexer.parsing_generic_declaration = false; + + var lt = (LocatedToken) $4; + if ($5 == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + $5 = new UntypedTypeExpression (GetLocation ($4)); + } + + FullNamedExpression type = (FullNamedExpression) $5; + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (670, GetLocation ($5), "Fields cannot have void type"); + + current_field = new Field (current_type, type, (Modifiers) $2, new MemberName (lt.Value, lt.Location), (Attributes) $1); + if (is_config_enabled) { + current_type.AddField (current_field); + } + is_config_enabled = true; + $$ = current_field; + } + opt_field_initializer + opt_field_declarators + SEMICOLON + { + if (doc_support) { + current_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lbag.AddMember (current_field, mod_locations, GetLocation ($9)); + $$ = current_field; + current_field = null; + } + | opt_attributes + opt_modifiers + FIXED IDENTIFIER COLON simple_type + { + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($6), "fixed size buffers"); + + var lt = (LocatedToken) $4; + current_field = new FixedField (current_type, (FullNamedExpression) $6, (Modifiers) $2, + new MemberName (lt.Value, lt.Location), (Attributes) $1); + + if (is_config_enabled) { + current_type.AddField (current_field); + } + is_config_enabled = true; + } + fixed_field_size opt_fixed_field_declarators SEMICOLON + { + if (doc_support) { + current_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + current_field.Initializer = (ConstInitializer) $8; + lbag.AddMember (current_field, mod_locations, GetLocation ($10)); + $$ = current_field; + current_field = null; + } + | opt_attributes + opt_modifiers + FIXED IDENTIFIER COLON simple_type error + SEMICOLON + { + report.Error (1641, GetLocation ($8), "A fixed size buffer field must have the array size specifier after the field name"); + } + ; + +opt_field_initializer + : /* empty */ + | ASSIGN + { + ++lexer.parsing_block; + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + start_block (GetLocation ($1)); + } + variable_initializer + { + --lexer.parsing_block; + current_field.Initializer = (Expression) $3; + end_block (lexer.Location); + current_local_parameters = null; + } + ; + +opt_field_declarators + : /* empty */ + | field_declarators + ; + +field_declarators + : field_declarator + { + current_field.AddDeclarator ((FieldDeclarator) $1); + } + | field_declarators field_declarator + { + current_field.AddDeclarator ((FieldDeclarator) $2); + } + ; + +field_declarator + : COMMA IDENTIFIER opt_member_type + { + var lt = (LocatedToken) $2; + if ($3 == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + $3 = new UntypedTypeExpression (GetLocation ($2)); + } + $$ = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null, (FullNamedExpression) $3); + lbag.AddLocation ($$, GetLocation ($1)); + } + | COMMA IDENTIFIER opt_member_type ASSIGN + { + ++lexer.parsing_block; + } + variable_initializer + { + --lexer.parsing_block; + var lt = (LocatedToken) $2; + if ($3 == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Field `{0}' has no type declaration.", lt.Value); + $3 = new UntypedTypeExpression (GetLocation ($2)); + } + $$ = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (Expression) $6, (FullNamedExpression) $3); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($4)); + } + ; + +opt_fixed_field_declarators + : /* empty */ + | fixed_field_declarators + ; + +fixed_field_declarators + : fixed_field_declarator + { + current_field.AddDeclarator ((FieldDeclarator) $1); + } + | fixed_field_declarators fixed_field_declarator + { + current_field.AddDeclarator ((FieldDeclarator) $2); + } + ; + +fixed_field_declarator + : COMMA IDENTIFIER fixed_field_size COLON member_type + { + var lt = (LocatedToken) $2; + $$ = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) $3, (FullNamedExpression) $5); + lbag.AddLocation ($$, GetLocation ($1)); + } + ; + +fixed_field_size + : OPEN_BRACKET + { + ++lexer.parsing_block; + } + expression CLOSE_BRACKET + { + --lexer.parsing_block; + $$ = new ConstInitializer (current_field, (Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($4)); + } + | OPEN_BRACKET error + { + report.Error (443, lexer.Location, "Value or constant expected"); + $$ = null; + } + ; + +variable_initializer + : expression + | error + { + // It has to be here for the parent to safely restore artificial block + Error_SyntaxError (yyToken); + $$ = null; + } + ; + +method_declaration + : method_header + { + if (doc_support) + Lexer.doc_state = XmlCommentState.NotAllowed; + + // Add it early in the case of body being eof for full ast + Method m = $1 as Method; + if (m != null) { + async_block = (m.ModFlags & Modifiers.ASYNC) != 0; + if (is_config_enabled) { + current_type.AddMember (m); + } + } + + Constructor c = $1 as Constructor; + if (c != null) { + if (is_config_enabled) { + current_type.AddConstructor (c); + } + current_constructor = c; + } + + if (is_package_function) + lexer.DynamicParsing = false; + + } + method_body + { + if (is_package_function) + lexer.DynamicParsing = true; + + async_block = false; + + if ($1 is Method) { + + Method method = $1 as Method; + + if ($3 == null) { + method.ParameterInfo.CheckParameters (method); + + if ((method.ModFlags & Modifiers.ASYNC) != 0) { + report.Error (1994, method.Location, "`{0}': The async modifier can only be used with methods that have a body", + method.GetSignatureForError ()); + } + } else { + method.Block = (ToplevelBlock) $3; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, method.Location, "`{0}': interface members cannot have a definition", + method.GetSignatureForError ()); + } + } + + } else if ($1 is Constructor) { + + Constructor c = $1 as Constructor; + + if ($3 != null) { + c.Block = (ToplevelBlock) $3; + } + + if (doc_support) + c.DocComment = ConsumeStoredComment (); + + } else { + + Property.PropertyMethod propMethod = $1 as Property.PropertyMethod; + + if ($3 != null) { + propMethod.Block = (ToplevelBlock) $3; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, propMethod.Block.StartLocation, + "`{0}': interface members cannot have a definition", propMethod.GetSignatureForError ()); + } + } + + } + + current_local_parameters = null; + current_property = null; + current_constructor = null; + + // If this was a package function, pop the container xxxxx_fn class. + if (is_package_function) { + pop_current_class(); + is_package_function = false; + } + + is_config_enabled = true; + + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + ; + +method_header + : opt_attributes + opt_modifiers + FUNCTION + method_declaration_name OPEN_PARENS + { + valid_param_mod = ParameterModifierType.All; + + // If package level function, create a new package function class with + // the name of the function plus "_fn". + if (current_container is NamespaceContainer) { + MemberName methodName = (MemberName) $4; + MemberName className = new MemberName(methodName.Name + "_fn", GetLocation($4)); + var fnClassModifiers = (Modifiers) $2 | Modifiers.PARTIAL | Modifiers.STATIC; // Allows overloads.. + push_current_container(new Class (current_container, className, fnClassModifiers, (Attributes) $1), GetLocation($3)); + is_package_function = true; + } + + } + opt_formal_parameter_list CLOSE_PARENS opt_method_return_type + { + lexer.ConstraintsParsing = true; + } + opt_type_parameter_constraints_clauses + { + lexer.ConstraintsParsing = false; + valid_param_mod = 0; + MemberName name = (MemberName) $4; + current_local_parameters = (ParametersCompiled) $7; + + var modifiers = (Modifiers) $2; + if (is_package_function) { + modifiers |= Modifiers.STATIC; + } + + if (current_type != null && name.Name == current_type.MemberName.Name) { + + var c = new Constructor (current_type, name.Name, modifiers, (Attributes) $1, current_local_parameters, name.Location); + + if ($11 != null) { + report.Error (7011, c.Location, + "`{0}': constructor can not have type constraints.", + c.GetSignatureForError ()); + } + + if ((modifiers & Modifiers.STATIC) != 0) { + if ((modifiers & Modifiers.AccessibilityMask) != 0){ + report.Error (515, c.Location, + "`{0}': static constructor cannot have an access modifier", + c.GetSignatureForError ()); + } + } + + if (doc_support) + c.DocComment = Lexer.consume_doc_comment (); + + lbag.AddMember (c, mod_locations, GetLocation ($5), GetLocation ($8)); + $$ = c; + + } else { + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + var ret_type = $9 as FullNamedExpression; + if (ret_type == null) { + if (settings.PsStrictMode) + report.Error (7012, GetLocation($8), "Method `{0}' must specify a return type.", name.Name); + else + report.Warning (1009, 1, GetLocation($8), "Method `{0}' return type has no type declaration.", name.Name); + } + + var method = AsMethod.Create (current_type, (FullNamedExpression) $9, modifiers, + name, current_local_parameters, (Attributes) $1); + + if ($11 != null) + method.SetConstraints ((List) $11); + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + lbag.AddMember (method, mod_locations, GetLocation ($5), GetLocation ($8)); + $$ = method; + + } + } + | opt_attributes + opt_modifiers + FUNCTION_GET method_declaration_name OPEN_PARENS + { + valid_param_mod = ParameterModifierType.All; + } + opt_formal_parameter_list CLOSE_PARENS opt_method_return_type + { + var type = (FullNamedExpression) $9; + var name = (MemberName) $4; + var modifiers = (Modifiers) $2; + var parameters = (ParametersCompiled) $7; + + if (type == null) { + if (settings.PsStrictMode) + report.Error (7012, name.Location, "Property getter `{0}' must specify a return type.", name.Name); + else + report.Warning (1009, 1, name.Location, "Property getter `{0}' return type has no type declaration.", name.Name); + type = new UntypedTypeExpression (name.Location); + } + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + if (parameters != null && parameters.Count > 0) + report.Error (7016, GetLocation ($9), "Property getter functions may not have parameters"); + + current_property = current_type.LookupNameInContainer (name.Name, modifiers) as Property; + + if (current_property == null) { + current_property = new Property (current_type, type, modifiers, name, (Attributes) $1); + if (is_config_enabled) { + current_type.AddMember (current_property); + } + modifiers = (Modifiers) 0; + } else { + if (current_property.Set != null && ModifiersExtensions.IsRestrictedModifier (current_property.ModFlags & Modifiers.AccessibilityMask, modifiers & Modifiers.AccessibilityMask)) { + current_property.Set.ModFlags |= current_property.ModFlags & Modifiers.AccessibilityMask; + current_property.ModFlags = (current_property.ModFlags & ~Modifiers.AccessibilityMask) | (modifiers & Modifiers.AccessibilityMask); + modifiers = (Modifiers) 0; + } else if ((modifiers & Modifiers.AccessibilityMask) == (current_property.ModFlags & Modifiers.AccessibilityMask)) { + modifiers = (Modifiers) 0; + } + } + + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (547, GetLocation ($9), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); + + if (current_property.Get != null) { + report.Error (1007, GetLocation ($3), "Property getter already defined"); + } + + current_property.Get = new Property.GetMethod (current_property, + modifiers & Modifiers.AccessibilityMask, (Attributes) $1, GetLocation ($3)); + + is_config_enabled = true; + + lbag.AddMember (current_property, mod_locations, GetLocation ($9)); + current_local_parameters = current_property.Get.ParameterInfo; + $$ = current_property.Get; + } + | opt_attributes + opt_modifiers + FUNCTION_SET method_declaration_name OPEN_PARENS + { + valid_param_mod = ParameterModifierType.All; + } + opt_formal_parameter_list CLOSE_PARENS opt_method_return_type + { + var void_type = (FullNamedExpression) $9; + var name = (MemberName) $4; + var modifiers = (Modifiers) $2; + var parameters = (ParametersCompiled) $7; + + if (void_type == null) { + if (settings.PsStrictMode) + report.Error (7012, name.Location, "Property setter `{0}' must specify a return type.", name.Name); + else + report.Warning (1009, 1, name.Location, "Property setter `{0}' return type has no type declaration.", name.Name); + void_type = new TypeExpression (compiler.BuiltinTypes.Void, name.Location); + } + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + if (void_type.Type != null && void_type.Type.Kind != MemberKind.Void) + report.Error (7003, GetLocation ($9), "Property setter function must be of type void"); + + current_property = current_type.LookupNameInContainer (name.Name, modifiers) as Property; + + FullNamedExpression type; + + if (parameters == null || parameters.Count != 1 || parameters.FixedParameters.Length != parameters.Count) { + report.Error (7001, GetLocation ($7), "Property setter must have a single parameter"); + type = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation ($7)); + } else { + type = ((Parameter)parameters.FixedParameters[0]).TypeExpression; + } + + if (current_property == null) { + current_property = new Property (current_type, type, modifiers, name, (Attributes) $1); + if (is_config_enabled) { + current_type.AddMember (current_property); + } + modifiers = (Modifiers) 0; + } else { + if (current_property.Get != null && ModifiersExtensions.IsRestrictedModifier (current_property.ModFlags & Modifiers.AccessibilityMask, modifiers & Modifiers.AccessibilityMask)) { + current_property.Get.ModFlags |= current_property.ModFlags & Modifiers.AccessibilityMask; + current_property.ModFlags = (current_property.ModFlags & ~Modifiers.AccessibilityMask) | (modifiers & Modifiers.AccessibilityMask); + modifiers = (Modifiers) 0; + } else if ((modifiers & Modifiers.AccessibilityMask) == (current_property.ModFlags & Modifiers.AccessibilityMask)) { + modifiers = (Modifiers) 0; + } + } + + if (current_property.Set != null) { + report.Error (1007, GetLocation ($3), "Property setter already defined"); + } + + current_property.Set = new Property.SetMethod (current_property, + modifiers & Modifiers.AccessibilityMask, (ParametersCompiled) $7, (Attributes) $1, GetLocation ($3)); + + is_config_enabled = true; + + lbag.AddMember (current_property, mod_locations, GetLocation ($9)); + current_local_parameters = parameters; + $$ = current_property.Set; + } + | opt_attributes + opt_modifiers + PARTIAL + FUNCTION + { + lexer.parsing_generic_declaration = true; + } + method_declaration_name + OPEN_PARENS + { + lexer.parsing_generic_declaration = false; + valid_param_mod = ParameterModifierType.All; + } + opt_formal_parameter_list CLOSE_PARENS COLON VOID + { + lexer.ConstraintsParsing = true; + } + opt_type_parameter_constraints_clauses + { + lexer.ConstraintsParsing = false; + valid_param_mod = 0; + + MemberName name = (MemberName) $6; + current_local_parameters = (ParametersCompiled) $9; + + var modifiers = (Modifiers) $2; + modifiers |= Modifiers.PARTIAL; + + if (name.ExplicitInterface == null && (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + var method = AsMethod.Create (current_type, new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($12)), + modifiers, name, current_local_parameters, (Attributes) $1); + + if ($14 != null) + method.SetConstraints ((List) $14); + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + StoreModifierLocation (Modifiers.PARTIAL, GetLocation ($3)); + lbag.AddMember (method, mod_locations, GetLocation ($7), GetLocation ($10)); + $$ = method; + } + | opt_attributes + opt_modifiers + FUNCTION + modifiers method_declaration_name OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS method_colon member_type + { + MemberName name = (MemberName) $5; + report.Error (1585, name.Location, + "Member modifier `{0}' must precede the member type and name", ModifiersExtensions.Name ((Modifiers) $4)); + + var method = AsMethod.Create (current_type, (FullNamedExpression) $1, + 0, name, (ParametersCompiled) $7, (Attributes) $1); + + current_local_parameters = (ParametersCompiled) $7; + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + $$ = method; + } + | opt_attributes + opt_modifiers + FUNCTION + method_declaration_name error + { + Error_SyntaxError (yyToken); + current_local_parameters = ParametersCompiled.Undefined; + + MemberName name = (MemberName) $4; + var method = AsMethod.Create (current_type, new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($4)), (Modifiers) $2, + name, current_local_parameters, (Attributes) $1); + + if (doc_support) + method.DocComment = Lexer.consume_doc_comment (); + + $$ = method; + } + ; + +opt_method_return_type + : /* empty */ + | method_colon member_type + { + $$ = $2; + } + ; + +method_colon + : COLON + { + if (current_container.Kind == MemberKind.Interface) + Lexer.AutoSemiInsertion = true; + } + ; + +method_body + : block + | SEMICOLON + { + // method body. + $$ = null; + } + ; + +opt_formal_parameter_list + : /* empty */ { $$ = ParametersCompiled.EmptyReadOnlyParameters; } + | formal_parameter_list + ; + +formal_parameter_list + : fixed_parameters + { + var pars_list = (List) $1; + $$ = new ParametersCompiled (pars_list.ToArray ()); + } + | fixed_parameters COMMA parameter_array + { + var pars_list = (List) $1; + pars_list.Add ((Parameter) $3); + + $$ = new ParametersCompiled (pars_list.ToArray ()); + } +// | fixed_parameters COMMA arglist_modifier +// { +// var pars_list = (List) $1; +// pars_list.Add (new ArglistParameter (GetLocation ($3))); +// $$ = new ParametersCompiled (pars_list.ToArray (), true); +// } + | parameter_array COMMA error + { + if ($1 != null) + report.Error (231, ((Parameter) $1).Location, "A params parameter must be the last parameter in a formal parameter list"); + + $$ = new ParametersCompiled (new Parameter[] { (Parameter) $1 } ); + } + | fixed_parameters COMMA parameter_array COMMA error + { + if ($3 != null) + report.Error (231, ((Parameter) $3).Location, "A params parameter must be the last parameter in a formal parameter list"); + + var pars_list = (List) $1; + pars_list.Add (new ArglistParameter (GetLocation ($3))); + + $$ = new ParametersCompiled (pars_list.ToArray (), true); + } +// | arglist_modifier COMMA error +// { +// report.Error (257, GetLocation ($1), "An __arglist parameter must be the last parameter in a formal parameter list"); +// +// $$ = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation ($1)) }, true); +// } +// | fixed_parameters COMMA ARGLIST COMMA error +// { +// report.Error (257, GetLocation ($3), "An __arglist parameter must be the last parameter in a formal parameter list"); +// +// var pars_list = (List) $1; +// pars_list.Add (new ArglistParameter (GetLocation ($3))); +// +// $$ = new ParametersCompiled (pars_list.ToArray (), true); +// } + | parameter_array + { + $$ = new ParametersCompiled (new Parameter[] { (Parameter) $1 } ); + } +// | arglist_modifier +// { +// $$ = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation ($1)) }, true); +// } + | error + { + Error_SyntaxError (yyToken); + $$ = ParametersCompiled.EmptyReadOnlyParameters; + } + ; + +fixed_parameters + : fixed_parameter + { + parameters_bucket.Clear (); + Parameter p = (Parameter) $1; + parameters_bucket.Add (p); + + default_parameter_used = p.HasDefaultValue; + $$ = parameters_bucket; + } + | fixed_parameters COMMA fixed_parameter + { + var pars = (List) $1; + Parameter p = (Parameter) $3; + if (p != null) { + if (p.HasExtensionMethodModifier) + report.Error (1100, p.Location, "The parameter modifier `this' can only be used on the first parameter"); + else if (!p.HasDefaultValue && default_parameter_used) + report.Error (1737, p.Location, "Optional parameter cannot precede required parameters"); + + default_parameter_used |= p.HasDefaultValue; + pars.Add (p); + + lbag.AddLocation (p, GetLocation ($2)); + } + + $$ = $1; + } + ; + +fixed_parameter + : opt_attributes + opt_parameter_modifier + IDENTIFIER + opt_parameter_type + { + var lt = (LocatedToken) $3; + if ($4 == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + $4 = new UntypedTypeExpression (lt.Location); + } + $$ = new Parameter ((FullNamedExpression) $4, lt.Value, (Parameter.Modifier) $2, (Attributes) $1, lt.Location); + } + | attribute_sections error + { + Error_SyntaxError (yyToken); + Location l = GetLocation ($2); + $$ = new Parameter (null, null, Parameter.Modifier.NONE, (Attributes) $1, l); + } + | opt_attributes + opt_parameter_modifier + IDENTIFIER + COLON + error + { + Error_SyntaxError (yyToken); + Location l = GetLocation ($5); + var lt = (LocatedToken) $3; + $$ = new Parameter (new TypeExpression (compiler.BuiltinTypes.Object, GetLocation ($5)), lt.Value, (Parameter.Modifier) $2, (Attributes) $1, l); + } + | opt_attributes + opt_parameter_modifier + IDENTIFIER + opt_parameter_type + ASSIGN + { + ++lexer.parsing_block; + } + constant_expression + { + --lexer.parsing_block; + if (lang_version <= LanguageVersion.V_3) { + FeatureIsNotAvailable (GetLocation ($6), "optional parameter"); + } + + Parameter.Modifier mod = (Parameter.Modifier) $2; + if (mod != Parameter.Modifier.NONE) { + switch (mod) { + case Parameter.Modifier.REF: + case Parameter.Modifier.OUT: + report.Error (1741, GetLocation ($2), "Cannot specify a default value for the `{0}' parameter", + Parameter.GetModifierSignature (mod)); + break; + + case Parameter.Modifier.This: + report.Error (1743, GetLocation ($2), "Cannot specify a default value for the `{0}' parameter", + Parameter.GetModifierSignature (mod)); + break; + default: + throw new NotImplementedException (mod.ToString ()); + } + + mod = Parameter.Modifier.NONE; + } + + if ((valid_param_mod & ParameterModifierType.DefaultValue) == 0) + report.Error (1065, GetLocation ($5), "Optional parameter is not valid in this context"); + + var lt = (LocatedToken) $3; + if ($4 == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Parameter `{0}' has no type declaration.", lt.Value); + $4 = new UntypedTypeExpression (lt.Location); + } + $$ = new Parameter ((FullNamedExpression) $4, lt.Value, mod, (Attributes) $1, lt.Location); + lbag.AddLocation ($$, GetLocation ($5)); + + if ($7 != null) + ((Parameter) $$).DefaultValue = new DefaultParameterValueExpression ((Expression) $7); + } + ; + +opt_parameter_modifier + : /* empty */ { $$ = Parameter.Modifier.NONE; } + | parameter_modifiers + ; + +parameter_modifiers + : parameter_modifier + { + $$ = $1; + } + | parameter_modifiers parameter_modifier + { + Parameter.Modifier p2 = (Parameter.Modifier)$2; + Parameter.Modifier mod = (Parameter.Modifier)$1 | p2; + if (((Parameter.Modifier)$1 & p2) == p2) { + Error_DuplicateParameterModifier (lexer.Location, p2); + } else { + switch (mod & ~Parameter.Modifier.This) { + case Parameter.Modifier.REF: + report.Error (1101, lexer.Location, "The parameter modifiers `this' and `ref' cannot be used altogether"); + break; + case Parameter.Modifier.OUT: + report.Error (1102, lexer.Location, "The parameter modifiers `this' and `out' cannot be used altogether"); + break; + default: + report.Error (1108, lexer.Location, "A parameter cannot have specified more than one modifier"); + break; + } + } + $$ = mod; + } + ; + +parameter_modifier + : REF + { + if ((valid_param_mod & ParameterModifierType.Ref) == 0) + Error_ParameterModifierNotValid ("ref", GetLocation ($1)); + + $$ = Parameter.Modifier.REF; + } + | OUT + { + if ((valid_param_mod & ParameterModifierType.Out) == 0) + Error_ParameterModifierNotValid ("out", GetLocation ($1)); + + $$ = Parameter.Modifier.OUT; + } + | THIS + { + if ((valid_param_mod & ParameterModifierType.This) == 0) + Error_ParameterModifierNotValid ("this", GetLocation ($1)); + + if (lang_version <= LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($1), "extension methods"); + + $$ = Parameter.Modifier.This; + } + ; + +parameter_array + : opt_attributes DOTDOTDOT IDENTIFIER opt_arglist_type + { + var lt = (LocatedToken) $3; + var type = new ComposedCast ( + new TypeExpression(compiler.BuiltinTypes.Object, GetLocation($3)), + ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation ($3))); + // NOTE: We add two underscores here to allow us to define the Array version later in ActionScript (not in PlayScript) + $$ = new ParamsParameter (type, "__" + lt.Value, (Attributes) $1, lt.Location); + } + | opt_attributes DOTDOTDOT IDENTIFIER ASSIGN constant_expression + { + report.Error (1751, GetLocation ($2), "Cannot specify a default value for a variable argument array"); + + var lt = (LocatedToken) $3; + var type = new ComposedCast ( + new TypeExpression(compiler.BuiltinTypes.Object, GetLocation($3)), + ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation ($3))); + // NOTE: We add two underscores here to allow us to define the Array version later in ActionScript (not in PlayScript) + $$ = new ParamsParameter (type, "__" + lt.Value, (Attributes) $1, lt.Location); + } + | opt_attributes DOTDOTDOT error + { + Error_SyntaxError (yyToken); + $$ = null; + } + ; + +opt_arglist_type + : /* empty */ + | COLON IDENTIFIER + { + var lt = (LocatedToken) $2; + if (lt.Value != "Array") + report.Error (7353, GetLocation ($2), "Argument type for variable argument must be Array"); + } + ; + +//arglist_modifier +// : ARGLIST +// { +// if ((valid_param_mod & ParameterModifierType.Arglist) == 0) +// report.Error (1669, GetLocation ($1), "__arglist is not valid in this context"); +// } +// ; + +property_declaration + : opt_attributes + opt_modifiers + PROPERTY member_declaration_name COLON member_type + { + if (doc_support) + tmpComment = Lexer.consume_doc_comment (); + } + OPEN_BRACE + { + var type = (FullNamedExpression) $6; + + var modifiers = (Modifiers) $2; + + var name = (MemberName) $4; + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + current_property = new Property (current_type, type, modifiers, + name, (Attributes) $1); + + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (547, GetLocation ($3), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ()); + + if (is_config_enabled) { + current_type.AddMember (current_property); + } + + lbag.AddMember (current_property, mod_locations, GetLocation ($8)); + + lexer.PropertyParsing = true; + } + accessor_declarations + { + lexer.PropertyParsing = false; + + if (doc_support) + current_property.DocComment = ConsumeStoredComment (); + } + CLOSE_BRACE + { + CheckIsPlayScript("property", GetLocation($3)); + + is_config_enabled = true; + + lbag.AppendToMember (current_property, GetLocation ($12)); + current_property = null; + } + ; + +indexer_declaration + : opt_attributes opt_modifiers + INDEXER indexer_declaration_name OPEN_PARENS + { + valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; + } + opt_formal_parameter_list CLOSE_PARENS COLON member_type OPEN_BRACE + { + valid_param_mod = 0; + var type = (FullNamedExpression) $10; + + var modifiers = (Modifiers) $2; + + var name = (MemberName) $4; + + if (current_container.Kind == MemberKind.Class && name.ExplicitInterface == null && + (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) + modifiers |= Modifiers.VIRTUAL; + + Indexer indexer = new Indexer (current_type, type, name, modifiers, (ParametersCompiled) $7, (Attributes) $1); + + current_property = indexer; + + if (is_config_enabled) { + current_type.AddIndexer (indexer); + } + lbag.AddMember (current_property, mod_locations, GetLocation ($5), GetLocation ($8)); + + if (type.Type != null && type.Type.Kind == MemberKind.Void) + report.Error (620, GetLocation ($3), "`{0}': indexer return type cannot be `void'", indexer.GetSignatureForError ()); + + if (indexer.ParameterInfo.IsEmpty) { + report.Error (1551, GetLocation ($5), "Indexers must have at least one parameter"); + } + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lexer.PropertyParsing = true; + Lexer.EatBlock = !is_config_enabled; + } + accessor_declarations + { + lexer.PropertyParsing = false; + } + CLOSE_BRACE + { + CheckIsPlayScript("indexer", GetLocation($3)); + + if (current_property.AccessorFirst != null && current_property.AccessorFirst.Block == null) + ((Indexer) current_property).ParameterInfo.CheckParameters (current_property); + + if (doc_support) + current_property.DocComment = ConsumeStoredComment (); + + is_config_enabled = true; + + lbag.AppendToMember (current_property, GetLocation ($12)); + current_property = null; + } + ; + + +accessor_declarations + : get_accessor_declaration + | get_accessor_declaration accessor_declarations + | set_accessor_declaration + | set_accessor_declaration accessor_declarations + | error + { + if (yyToken == Token.CLOSE_BRACE) { + report.Error (548, lexer.Location, "`{0}': property or indexer must have at least one accessor", current_property.GetSignatureForError ()); + } else { + if (yyToken == Token.SEMICOLON) + report.Error (1597, lexer.Location, "Semicolon after method or accessor block is not valid"); + else + report.Error (1014, GetLocation ($1), "A get or set accessor expected"); + } + } + ; + +get_accessor_declaration + : opt_attributes opt_modifiers GET + { + if ($2 != ModifierNone && lang_version == LanguageVersion.ISO_1) { + FeatureIsNotAvailable (GetLocation ($2), "access modifiers on properties"); + } + + if (current_property.Get != null) { + report.Error (1007, GetLocation ($3), "Property getter already defined"); + } + + if (current_property is Indexer) { + current_property.Get = new Indexer.GetIndexerMethod (current_property, (Modifiers) $2, ((Indexer)current_property).ParameterInfo.Clone (), + (Attributes) $1, GetLocation ($3)); + } else { + current_property.Get = new Property.GetMethod (current_property, + (Modifiers) $2, (Attributes) $1, GetLocation ($3)); + } + + current_local_parameters = current_property.Get.ParameterInfo; + lbag.AddMember (current_property.Get, mod_locations); + lexer.PropertyParsing = false; + } + accessor_body + { + if ($5 != null) { + current_property.Get.Block = (ToplevelBlock) $5; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_property.Get.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_property.Get.GetSignatureForError ()); + } + } + + current_local_parameters = null; + lexer.PropertyParsing = true; + + if (doc_support) + if (Lexer.doc_state == XmlCommentState.Error) + Lexer.doc_state = XmlCommentState.NotAllowed; + } + ; + +set_accessor_declaration + : opt_attributes opt_modifiers SET + { + if ($2 != ModifierNone && lang_version == LanguageVersion.ISO_1) { + FeatureIsNotAvailable (GetLocation ($2), "access modifiers on properties"); + } + + if (current_property.Set != null) { + report.Error (1007, GetLocation ($3), "Property getter already defined"); + } + + if (current_property is Indexer) { + current_property.Set = new Indexer.SetIndexerMethod (current_property, (Modifiers) $2, + ParametersCompiled.MergeGenerated (compiler, + ((Indexer)current_property).ParameterInfo, true, new Parameter ( + current_property.TypeExpression, "value", Parameter.Modifier.NONE, null, GetLocation ($3)), + null), + (Attributes) $1, GetLocation ($3)); + } else { + current_property.Set = new Property.SetMethod (current_property, (Modifiers) $2, + ParametersCompiled.CreateImplicitParameter (current_property.TypeExpression, GetLocation ($3)), + (Attributes) $1, GetLocation ($3)); + } + + current_local_parameters = current_property.Set.ParameterInfo; + lbag.AddMember (current_property.Set, mod_locations); + lexer.PropertyParsing = false; + } + accessor_body + { + if ($5 != null) { + current_property.Set.Block = (ToplevelBlock) $5; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_property.Set.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_property.Set.GetSignatureForError ()); + } + } + + current_local_parameters = null; + lexer.PropertyParsing = true; + + if (doc_support + && Lexer.doc_state == XmlCommentState.Error) + Lexer.doc_state = XmlCommentState.NotAllowed; + } + ; + +accessor_body + : block + | SEMICOLON + { + // TODO: lbag + $$ = null; + } + | error + { + Error_SyntaxError (1043, yyToken, "Invalid accessor body"); + $$ = null; + } + ; + +interface_declaration + : opt_attributes + opt_modifiers + opt_partial + INTERFACE + { + lexer.ConstraintsParsing = true; + Lexer.AutoSemiInsertion = false; + } + type_declaration_name + { + bool is_partial = IsPartial($1) || $3 != null; + push_current_container (new Interface (current_container, (MemberName) $6, (Modifiers) $2, (Attributes) $1), is_partial); + lbag.AddMember (current_container, mod_locations, GetLocation ($4)); + } + opt_interface_extends + opt_class_implements + opt_type_parameter_constraints_clauses + { + lexer.ConstraintsParsing = false; + + if ($10 != null) + current_container.SetConstraints ((List) $10); + + if (doc_support) { + current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lexer.parsing_modifiers = true; + } + OPEN_BRACE + { + Lexer.AutoSemiInsertion = true; + Lexer.EatBlock = !is_config_enabled; + } + opt_interface_member_declarations CLOSE_BRACE + { + --lexer.parsing_declaration; + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + opt_semicolon + { + is_config_enabled = true; + lbag.AppendToMember (current_container, GetLocation ($12), GetLocation ($15)); + $$ = pop_current_class (); + } + | opt_attributes opt_modifiers opt_partial INTERFACE error + { + Error_SyntaxError (yyToken); + } + ; + +opt_interface_member_declarations + : /* empty */ + | interface_member_declarations + ; + +interface_member_declarations + : interface_member_declaration + { + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + | interface_member_declarations interface_member_declaration + { + lexer.parsing_modifiers = true; + lexer.parsing_block = 0; + } + ; + +interface_member_declaration + : constant_declaration + { + report.Error (525, GetLocation ($1), "Interfaces cannot contain fields or constants"); + } + | field_declaration + { + report.Error (525, GetLocation ($1), "Interfaces cannot contain fields or constants"); + } + | method_declaration + | property_declaration + | event_declaration + | indexer_declaration + | operator_declaration + { + report.Error (567, GetLocation ($1), "Interfaces cannot contain operators"); + } +// | constructor_declaration +// { +// report.Error (526, GetLocation ($1), "Interfaces cannot contain contructors"); +// } + | type_declaration + { + report.Error (524, GetLocation ($1), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); + } + ; + +operator_declaration + : opt_attributes opt_modifiers operator_declarator + { + } + operator_body + { + OperatorDeclaration decl = (OperatorDeclaration) $3; + if (decl != null) { + var modifiers = (Modifiers) $2; + +// if (current_container.Kind == MemberKind.Class && +// (modifiers & (Modifiers.NEW | Modifiers.SEALED | Modifiers.STATIC | Modifiers.PRIVATE | Modifiers.VIRTUAL | Modifiers.OVERRIDE)) == 0) +// modifiers |= Modifiers.VIRTUAL; + + if (current_local_parameters.Count < 1) { + + report.Error (7037, GetLocation ($1), "Invalid number of parameters for operator."); + + } else { + + Operator op = new Operator ( + current_type, decl.optype, decl.ret_type, modifiers, + current_local_parameters, + (ToplevelBlock) $5, (Attributes) $1, decl.location); + + if (op.Block == null) + op.ParameterInfo.CheckParameters (op); + + if (doc_support) { + op.DocComment = tmpComment; + Lexer.doc_state = XmlCommentState.Allowed; + } + + // Note again, checking is done in semantic analysis + if (is_config_enabled) { + current_type.AddOperator (op); + } + is_config_enabled = true; + + lbag.AddMember (op, mod_locations, lbag.GetLocations (decl)); + } + } + + current_local_parameters = null; + } + ; + +operator_body + : block + | SEMICOLON { $$ = null; } + ; + +operator_type + : type_expression_or_array + | VOID + { + report.Error (590, GetLocation ($1), "User-defined operators cannot return void"); + $$ = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)); + } + ; + +operator_declarator + : OPERATOR overloadable_operator OPEN_PARENS + { + valid_param_mod = ParameterModifierType.DefaultValue; + } + opt_formal_parameter_list CLOSE_PARENS COLON operator_type + { + CheckIsPlayScript("operator", GetLocation($1)); + + valid_param_mod = 0; + + Location loc = GetLocation ($1); + Operator.OpType op = (Operator.OpType) $8; + current_local_parameters = (ParametersCompiled)$5; + + int p_count = current_local_parameters.Count; + if (p_count == 1) { + if (op == Operator.OpType.Addition) + op = Operator.OpType.UnaryPlus; + else if (op == Operator.OpType.Subtraction) + op = Operator.OpType.UnaryNegation; + } + + if (IsUnaryOperator (op)) { + if (p_count == 2) { + report.Error (1020, loc, "Overloadable binary operator expected"); + } else if (p_count != 1) { + report.Error (1535, loc, "Overloaded unary operator `{0}' takes one parameter", + Operator.GetName (op)); + } + } else { + if (p_count == 1) { + report.Error (1019, loc, "Overloadable unary operator expected"); + } else if (p_count != 2) { + report.Error (1534, loc, "Overloaded binary operator `{0}' takes two parameters", + Operator.GetName (op)); + } + } + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + $$ = new OperatorDeclaration (op, (FullNamedExpression) $8, loc); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($2), GetLocation ($3), GetLocation ($6)); + } + | conversion_operator_declarator + ; + +overloadable_operator +// Unary operators: + : BANG { $$ = Operator.OpType.LogicalNot; } + | TILDE { $$ = Operator.OpType.OnesComplement; } + | OP_INC { $$ = Operator.OpType.Increment; } + | OP_DEC { $$ = Operator.OpType.Decrement; } + | TRUE { $$ = Operator.OpType.True; } + | FALSE { $$ = Operator.OpType.False; } +// Unary and binary: + | PLUS { $$ = Operator.OpType.Addition; } + | MINUS { $$ = Operator.OpType.Subtraction; } +// Binary: + | STAR { $$ = Operator.OpType.Multiply; } + | DIV { $$ = Operator.OpType.Division; } + | PERCENT { $$ = Operator.OpType.Modulus; } + | BITWISE_AND { $$ = Operator.OpType.BitwiseAnd; } + | BITWISE_OR { $$ = Operator.OpType.BitwiseOr; } + | CARRET { $$ = Operator.OpType.ExclusiveOr; } + | OP_SHIFT_LEFT { $$ = Operator.OpType.LeftShift; } + | OP_SHIFT_RIGHT { $$ = Operator.OpType.RightShift; } + | OP_USHIFT_RIGHT { $$ = Operator.OpType.AsURightShift; } + | OP_EQ { $$ = Operator.OpType.Equality; } + | OP_NE { $$ = Operator.OpType.Inequality; } + | OP_GT { $$ = Operator.OpType.GreaterThan; } + | OP_LT { $$ = Operator.OpType.LessThan; } + | OP_GE { $$ = Operator.OpType.GreaterThanOrEqual; } + | OP_LE { $$ = Operator.OpType.LessThanOrEqual; } + | OP_IN { $$ = Operator.OpType.AsIn; } + ; + +conversion_operator_declarator + : IMPLICIT OPERATOR type OPEN_PARENS + { + valid_param_mod = ParameterModifierType.DefaultValue; + } + opt_formal_parameter_list CLOSE_PARENS + { + valid_param_mod = 0; + + Location loc = GetLocation ($2); + current_local_parameters = (ParametersCompiled)$6; + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + $$ = new OperatorDeclaration (Operator.OpType.Implicit, (FullNamedExpression) $3, loc); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($2), GetLocation ($4), GetLocation ($7)); + } + | EXPLICIT OPERATOR type OPEN_PARENS + { + valid_param_mod = ParameterModifierType.DefaultValue; + } + opt_formal_parameter_list CLOSE_PARENS + { + valid_param_mod = 0; + + Location loc = GetLocation ($2); + current_local_parameters = (ParametersCompiled)$6; + + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + $$ = new OperatorDeclaration (Operator.OpType.Explicit, (FullNamedExpression) $3, loc); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($2), GetLocation ($4), GetLocation ($7)); + } + | IMPLICIT error + { + Error_SyntaxError (yyToken); + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + $$ = new OperatorDeclaration (Operator.OpType.Implicit, null, GetLocation ($1)); + } + | EXPLICIT error + { + Error_SyntaxError (yyToken); + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + $$ = new OperatorDeclaration (Operator.OpType.Explicit, null, GetLocation ($1)); + } + ; + +//constructor_declaration +// : constructor_declarator +// constructor_body +// { +// Constructor c = (Constructor) $1; +// c.Block = (ToplevelBlock) $2; +// +// if (doc_support) +// c.DocComment = ConsumeStoredComment (); +// +// current_local_parameters = null; +// if (doc_support) +// Lexer.doc_state = XmlCommentState.Allowed; +// } +// ; +// +//constructor_declarator +// : opt_attributes +// opt_modifiers +// FUNCTION +// IDENTIFIER +// { +// if (doc_support) { +// tmpComment = Lexer.consume_doc_comment (); +// Lexer.doc_state = XmlCommentState.Allowed; +// } +// +// valid_param_mod = ParameterModifierType.All; +// } +// OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS opt_constructor_type +// { +// valid_param_mod = 0; +// current_local_parameters = (ParametersCompiled) $7; +// +// var lt = (LocatedToken) $4; +// var mods = (Modifiers) $2; +// var c = new Constructor (current_type, lt.Value, mods, (Attributes) $1, current_local_parameters, lt.Location); +// +// if (lt.Value != current_container.MemberName.Name) { +// report.Error (1520, c.Location, "Class, struct, or interface method must have a return type"); +// } else if ((mods & Modifiers.STATIC) != 0) { +// if ((mods & Modifiers.AccessibilityMask) != 0){ +// report.Error (515, c.Location, +// "`{0}': static constructor cannot have an access modifier", +// c.GetSignatureForError ()); +// } +// } +// +// current_type.AddConstructor (c); +// lbag.AddMember (c, mod_locations, GetLocation ($6), GetLocation ($8)); +// $$ = c; +// +// +// start block here, so possible anonymous methods inside +// constructor initializer can get correct parent block +// +// start_block (lexer.Location); +// } +// opt_constructor_initializer +// { +// if ($9 != null) { +// var c = (Constructor) $8; +// c.Initializer = (ConstructorInitializer) $9; +// +// if (c.IsStatic) { +// report.Error (514, c.Location, +// "`{0}': static constructor cannot have an explicit `this' or `base' constructor call", +// c.GetSignatureForError ()); +// } +// } +// +// $$ = $8; +// } +// ; +// +//constructor_body +// : block_prepared +// | SEMICOLON { current_block = null; $$ = null; } +// ; +// +//opt_constructor_type +// : /* Empty */ +// | COLON IDENTIFIER +// { +// var lt = (LocatedToken) $2; +// if (lt.Value != "void"){ +// report.Error (1525, GetLocation ($2), "Unexpected symbol expected 'void'"); +// } +// } +// ; +// +//opt_constructor_initializer +// : /* Empty */ +// | constructor_initializer +// ; +// +//constructor_initializer +// : COLON SUPER OPEN_PARENS +// { +// ++lexer.parsing_block; +// } +// opt_argument_list CLOSE_PARENS +// { +// --lexer.parsing_block; +// $$ = new ConstructorBaseInitializer ((Arguments) $5, GetLocation ($2)); +// lbag.AddLocation ($$, GetLocation ($1), GetLocation ($3), GetLocation ($6)); +// } +// | COLON THIS OPEN_PARENS +// { +// ++lexer.parsing_block; +// } +// opt_argument_list CLOSE_PARENS +// { +// --lexer.parsing_block; +// $$ = new ConstructorThisInitializer ((Arguments) $5, GetLocation ($2)); +// lbag.AddLocation ($$, GetLocation ($1), GetLocation ($3), GetLocation ($6)); +// } +// | COLON error +// { +// Error_SyntaxError (yyToken); +// $$ = new ConstructorThisInitializer (null, GetLocation ($2)); +// lbag.AddLocation ($$, GetLocation ($1)); +// } +// | error +// { +// Error_SyntaxError (yyToken); +// $$ = null; +// } +// ; + +destructor_declaration + : opt_attributes opt_modifiers FUNCTION TILDE + { + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + + current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; + } + IDENTIFIER OPEN_PARENS CLOSE_PARENS method_body + { + var lt = (LocatedToken) $6; + if (lt.Value != current_container.MemberName.Name){ + report.Error (574, lt.Location, "Name of destructor must match name of class"); + } else if (current_container.Kind != MemberKind.Class){ + report.Error (575, lt.Location, "Only class types can contain destructor"); + } + + Destructor d = new Destructor (current_type, (Modifiers) $2, + ParametersCompiled.EmptyReadOnlyParameters, (Attributes) $1, lt.Location); + if (doc_support) + d.DocComment = ConsumeStoredComment (); + + d.Block = (ToplevelBlock) $9; + if (is_config_enabled) { + current_type.AddMember (d); + } + is_config_enabled = true; + lbag.AddMember (d, mod_locations, GetLocation ($4), GetLocation ($7), GetLocation ($8)); + + current_local_parameters = null; + } + ; + +event_declaration + : opt_attributes + opt_modifiers + EVENT member_declaration_name COLON type + { + current_event_field = new EventField (current_type, (FullNamedExpression) $6, (Modifiers) $2, (MemberName) $4, (Attributes) $1); + if (is_config_enabled) { + current_type.AddMember (current_event_field); + } + is_config_enabled = true; + + if (current_event_field.MemberName.ExplicitInterface != null) { + report.Error (71, current_event_field.Location, "`{0}': An explicit interface implementation of an event must use property syntax", + current_event_field.GetSignatureForError ()); + } + + $$ = current_event_field; + } + opt_event_initializer + opt_event_declarators + SEMICOLON + { + if (doc_support) { + current_event_field.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lbag.AddMember (current_event_field, mod_locations, GetLocation ($3), GetLocation ($10)); + current_event_field = null; + } + | opt_attributes + opt_modifiers + EVENT member_declaration_name COLON type + OPEN_BRACE + { + current_event = new EventProperty (current_type, (FullNamedExpression) $6, (Modifiers) $2, (MemberName) $4, (Attributes) $1); + if (is_config_enabled) { + current_type.AddMember (current_event); + } + is_config_enabled = true; + lbag.AddMember (current_event, mod_locations, GetLocation ($3), GetLocation ($7)); + + lexer.EventParsing = true; + } + event_accessor_declarations + { + if (current_container.Kind == MemberKind.Interface) + report.Error (69, GetLocation ($7), "Event in interface cannot have add or remove accessors"); + + lexer.EventParsing = false; + } + CLOSE_BRACE + { + if (doc_support) { + current_event.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lbag.AppendToMember (current_event, GetLocation ($10)); + current_event = null; + current_local_parameters = null; + } + ; + +opt_event_initializer + : /* empty */ + | ASSIGN + { + ++lexer.parsing_block; + } + event_variable_initializer + { + --lexer.parsing_block; + current_event_field.Initializer = (Expression) $3; + } + ; + +opt_event_declarators + : /* empty */ + | event_declarators + ; + +event_declarators + : event_declarator + { + current_event_field.AddDeclarator ((FieldDeclarator) $1); + } + | event_declarators event_declarator + { + current_event_field.AddDeclarator ((FieldDeclarator) $2); + } + ; + +event_declarator + : COMMA IDENTIFIER COLON member_type + { + var lt = (LocatedToken) $2; + $$ = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null, (FullNamedExpression) $4); + lbag.AddLocation ($$, GetLocation ($1)); + } + | COMMA IDENTIFIER COLON member_type ASSIGN + { + ++lexer.parsing_block; + } + event_variable_initializer + { + --lexer.parsing_block; + var lt = (LocatedToken) $2; + $$ = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (Expression) $7, (FullNamedExpression) $4); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($5)); + } + ; + +event_variable_initializer + : { + if (current_container.Kind == MemberKind.Interface) { + report.Error (68, lexer.Location, "`{0}': event in interface cannot have an initializer", + current_event_field.GetSignatureForError ()); + } + + if ((current_event_field.ModFlags & Modifiers.ABSTRACT) != 0) { + report.Error (74, lexer.Location, "`{0}': abstract event cannot have an initializer", + current_event_field.GetSignatureForError ()); + } + } + variable_initializer + { + $$ = $2; + } + ; + +event_accessor_declarations + : add_accessor_declaration remove_accessor_declaration + | remove_accessor_declaration add_accessor_declaration + | add_accessor_declaration + { + report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", + current_event.GetSignatureForError ()); + } + | remove_accessor_declaration + { + report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", + current_event.GetSignatureForError ()); + } + | error + { + report.Error (1055, GetLocation ($1), "An add or remove accessor expected"); + $$ = null; + } + ; + +add_accessor_declaration + : opt_attributes opt_modifiers ADD + { + if ($2 != ModifierNone) { + report.Error (1609, GetLocation ($2), "Modifiers cannot be placed on event accessor declarations"); + } + + current_event.Add = new EventProperty.AddDelegateMethod (current_event, (Attributes) $1, GetLocation ($3)); + current_local_parameters = current_event.Add.ParameterInfo; + + lbag.AddMember (current_event.Add, mod_locations); + lexer.EventParsing = false; + } + event_accessor_block + { + lexer.EventParsing = true; + + current_event.Add.Block = (ToplevelBlock) $5; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_event.Add.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_event.Add.GetSignatureForError ()); + } + + current_local_parameters = null; + } + ; + +remove_accessor_declaration + : opt_attributes opt_modifiers REMOVE + { + if ($2 != ModifierNone) { + report.Error (1609, GetLocation ($2), "Modifiers cannot be placed on event accessor declarations"); + } + + current_event.Remove = new EventProperty.RemoveDelegateMethod (current_event, (Attributes) $1, GetLocation ($3)); + current_local_parameters = current_event.Remove.ParameterInfo; + + lbag.AddMember (current_event.Remove, mod_locations); + lexer.EventParsing = false; + } + event_accessor_block + { + lexer.EventParsing = true; + + current_event.Remove.Block = (ToplevelBlock) $5; + + if (current_container.Kind == MemberKind.Interface) { + report.Error (531, current_event.Remove.Block.StartLocation, + "`{0}': interface members cannot have a definition", current_event.Remove.GetSignatureForError ()); + } + + current_local_parameters = null; + } + ; + +event_accessor_block + : opt_semicolon + { + report.Error (73, lexer.Location, "An add or remove accessor must have a body"); + $$ = null; + } + | block; + ; + +attributes_without_members + : attribute_sections CLOSE_BRACE + { + current_type.UnattachedAttributes = (Attributes) $1; + report.Error (1519, GetLocation ($1), "An attribute is missing member declaration"); + lexer.putback ('}'); + } + ; + +enum_declaration + : opt_attributes + opt_modifiers + ENUM type_declaration_name + opt_enum_base + { + if (doc_support) + enumTypeComment = Lexer.consume_doc_comment (); + } + OPEN_BRACE + { + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + + MemberName name = (MemberName) $4; + if (name.IsGeneric) { + report.Error (1675, name.Location, "Enums cannot have type parameters"); + } + + push_current_container (new Enum (current_container, (FullNamedExpression) $5, (Modifiers) $2, name, (Attributes) $1), null); + + Lexer.EatBlock = !is_config_enabled; + } + opt_enum_member_declarations + { + lexer.parsing_modifiers = true; + + // here will be evaluated after CLOSE_BLACE is consumed. + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + CLOSE_BRACE opt_semicolon + { + CheckIsPlayScript("enum", GetLocation($3)); + + if (doc_support) + current_container.DocComment = enumTypeComment; + + --lexer.parsing_declaration; + +// if (doc_support) +// em.DocComment = ev.DocComment; + + is_config_enabled = true; + + lbag.AddMember (current_container, mod_locations, GetLocation ($3), GetLocation ($7), GetLocation ($11)); + $$ = pop_current_class (); + } + ; + +opt_enum_base + : /* empty */ + | COLON type + { +// var te = $2 as TypeExpression; +// if (te == null || !EnumSpec.IsValidUnderlyingType (te.Type)) { +// Enum.Error_1008 (GetLocation ($2), report); +// } + $$ = $2; + } + | COLON error + { + Error_TypeExpected (GetLocation ($1)); + $$ = null; + } + ; + +opt_enum_member_declarations + : /* empty */ + | enum_member_declarations + | enum_member_declarations COMMA + { + lbag.AddLocation ($1, GetLocation ($2)); + } + ; + +enum_member_declarations + : enum_member_declaration + | enum_member_declarations COMMA enum_member_declaration + { + lbag.AddLocation ($1, GetLocation ($2)); + $$ = $3; + } + ; + +enum_member_declaration + : opt_attributes IDENTIFIER + { + var lt = (LocatedToken) $2; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) $1); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) { + em.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + $$ = em; + } + | opt_attributes IDENTIFIER + { + ++lexer.parsing_block; + if (doc_support) { + tmpComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.NotAllowed; + } + } + ASSIGN constant_expression + { + --lexer.parsing_block; + + var lt = (LocatedToken) $2; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) $1); + em.Initializer = new ConstInitializer (em, (Expression) $5, GetLocation ($4)); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) + em.DocComment = ConsumeStoredComment (); + + $$ = em; + } + | opt_attributes IDENTIFIER error + { + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) $2; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) $1); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) { + em.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + $$ = em; + } + | attributes_without_members + ; + +delegate_declaration + : opt_attributes + opt_modifiers + DELEGATE + type_declaration_name + OPEN_PARENS + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; + } + opt_formal_parameter_list CLOSE_PARENS COLON member_type + { + valid_param_mod = 0; + + ParametersCompiled p = (ParametersCompiled) $7; + + Delegate del = new Delegate (current_container, (FullNamedExpression) $10, (Modifiers) $2, (MemberName) $4, p, (Attributes) $1); + + p.CheckParameters (del); + + current_container.AddTypeContainer (del); + + current_delegate = del; + lexer.ConstraintsParsing = true; + } + opt_type_parameter_constraints_clauses + { + lexer.ConstraintsParsing = false; + } + SEMICOLON + { + CheckIsPlayScript("delegate", GetLocation($3)); + + if (doc_support) { + current_delegate.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + if ($12 != null) + current_delegate.SetConstraints ((List) $12); + lbag.AddMember (current_delegate, mod_locations, GetLocation ($3), GetLocation ($5), GetLocation ($8), GetLocation ($14)); + + $$ = current_delegate; + + current_delegate = null; + } + ; + +namespace_declaration + : opt_attributes + opt_modifiers + NAMESPACE + IDENTIFIER opt_namespace_url SEMICOLON + { + var lt = (LocatedToken) $4; + MemberName className = new MemberName(lt.Value + "_ns", GetLocation($4)); + push_current_container(new Class (current_container, className, (Modifiers) $2, (Attributes) $1), GetLocation($3)); + pop_current_class(); + + if (doc_support) { + current_delegate.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + } + ; + +opt_namespace_url + : /* empty */ + | namespace_url + ; + +namespace_url + : ASSIGN LITERAL + { + if (!($2 is StringLiteral)) + syntax_error (GetLocation($2), "string literal expected"); + $$ = $2; + } + ; + +opt_nullable + : /* empty */ + | INTERR_NULLABLE + { + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($1), "nullable types"); + + $$ = ComposedTypeSpecifier.CreateNullable (GetLocation ($1)); + } + ; + +namespace_or_type_expr + : member_name +// | qualified_alias_member IDENTIFIER opt_type_argument_list +// { +// var lt1 = (LocatedToken) $1; +// var lt2 = (LocatedToken) $2; +// +// $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); +// lbag.AddLocation ($$, GetLocation ($2)); +// } +// | qualified_alias_member IDENTIFIER generic_dimension +// { +// var lt1 = (LocatedToken) $1; +// var lt2 = (LocatedToken) $2; +// +// $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); +// lbag.AddLocation ($$, GetLocation ($2)); +// } + ; + +member_name + : simple_name_expr + | namespace_or_type_expr DOT IDENTIFIER opt_type_argument_list + { + // member_name + var lt = (LocatedToken) $3; + $$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + | namespace_or_type_expr DOT IDENTIFIER generic_dimension + { + var lt = (LocatedToken) $3; + $$ = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +simple_name_expr + : IDENTIFIER opt_type_argument_list + { + // simple_name_expr + var lt = (LocatedToken) $1; + $$ = new SimpleName (lt.Value, (TypeArguments)$2, lt.Location); + } + | IDENTIFIER generic_dimension + { + var lt = (LocatedToken) $1; + $$ = new SimpleName (lt.Value, (int) $2, lt.Location); + } + + ; + +// +// Generics arguments (any type, without attributes) +// +opt_type_argument_list + : /* empty */ + | OP_GENERICS_LT type_arguments OP_GENERICS_GT + { + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($1), "generics"); + + $$ = $2; + } + | OP_GENERICS_LT error + { + Error_TypeExpected (lexer.Location); + $$ = new TypeArguments (); + } + ; + +type_arguments + : type + { + TypeArguments type_args = new TypeArguments (); + type_args.Add ((FullNamedExpression) $1); + $$ = type_args; + } + | type_arguments COMMA type + { + TypeArguments type_args = (TypeArguments) $1; + type_args.Add ((FullNamedExpression) $3); + $$ = type_args; + } + ; + +// +// Generics parameters (identifiers only, with attributes), used in type or method declarations +// +type_declaration_name + : IDENTIFIER + { + lexer.parsing_generic_declaration = true; + } + opt_type_parameter_list + { + lexer.parsing_generic_declaration = false; + var lt = (LocatedToken) $1; + $$ = new MemberName (lt.Value, (TypeParameters)$3, lt.Location); + } + ; + +member_declaration_name + : method_declaration_name + { + MemberName mn = (MemberName)$1; + if (mn.TypeParameters != null) + syntax_error (mn.Location, string.Format ("Member `{0}' cannot declare type arguments", + mn.GetSignatureForError ())); + } + ; + +method_declaration_name + : type_declaration_name + | explicit_interface IDENTIFIER opt_type_parameter_list + { + lexer.parsing_generic_declaration = false; + var lt = (LocatedToken) $2; + $$ = new MemberName (lt.Value, (TypeParameters) $3, (ATypeNameExpression) $1, lt.Location); + } + ; + +indexer_declaration_name + : THIS + { + lexer.parsing_generic_declaration = false; + $$ = new MemberName (TypeDefinition.DefaultIndexerName, GetLocation ($1)); + } + | explicit_interface THIS + { + lexer.parsing_generic_declaration = false; + $$ = new MemberName (TypeDefinition.DefaultIndexerName, null, (ATypeNameExpression) $1, GetLocation ($2)); + } + ; + +explicit_interface + : IDENTIFIER opt_type_argument_list DOT + { + var lt = (LocatedToken) $1; + $$ = new SimpleName (lt.Value, (TypeArguments) $2, lt.Location); + lbag.AddLocation ($$, GetLocation ($3)); + } +// | qualified_alias_member IDENTIFIER opt_type_argument_list DOT +// { +// var lt1 = (LocatedToken) $1; +// var lt2 = (LocatedToken) $2; +// +// $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); +// lbag.AddLocation ($$, GetLocation ($4)); +// } + | explicit_interface IDENTIFIER opt_type_argument_list DOT + { + var lt = (LocatedToken) $2; + $$ = new MemberAccess ((ATypeNameExpression) $1, lt.Value, (TypeArguments) $3, lt.Location); + lbag.AddLocation ($$, GetLocation ($4)); + } + ; + +opt_type_parameter_list + : /* empty */ + | OP_GENERICS_LT type_parameters OP_GENERICS_GT + { + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($1), "generics"); + + $$ = $2; + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($3)); + } + ; + +type_parameters + : type_parameter + { + var tparams = new TypeParameters (); + tparams.Add ((TypeParameter)$1); + $$ = tparams; + } + | type_parameters COMMA type_parameter + { + var tparams = (TypeParameters) $1; + tparams.Add ((TypeParameter)$3); + $$ = tparams; + lbag.AddLocation ($3, GetLocation ($3)); + } + ; + +type_parameter + : opt_attributes opt_type_parameter_variance IDENTIFIER + { + var lt = (LocatedToken)$3; + $$ = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)$1, (VarianceDecl) $2); + } + | error + { + if (GetTokenName (yyToken) == "type") + report.Error (81, GetLocation ($1), "Type parameter declaration must be an identifier not a type"); + else + Error_SyntaxError (yyToken); + + $$ = new TypeParameter (MemberName.Null, null, null); + } + ; + +// +// All types where void is allowed +// +type_and_void + : type_expression_or_array + | VOID + { + $$ = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)); + } + ; + +member_type + : type_and_void + { + lexer.parsing_generic_declaration = true; + } + ; + +// +// A type which does not allow `void' to be used +// +type + : type_expression_or_array + | VOID + { + Expression.Error_VoidInvalidInTheContext (GetLocation ($1), report); + $$ = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)); + } + ; + +simple_type + : type_expression + | VOID + { + Expression.Error_VoidInvalidInTheContext (GetLocation ($1), report); + $$ = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)); + } + ; + +opt_parameter_type + : /* empty */ + { + $$ = null; + } + | COLON parameter_type + { + $$ = $2; + } + ; + +parameter_type + : type_expression_or_array + | VOID + { + report.Error (1536, GetLocation ($1), "Invalid parameter type `void'"); + $$ = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)); + } + ; + +type_expression_or_array + : type_expression + | type_expression rank_specifiers + { + CheckIsPlayScript("arrays", GetLocation($2)); + $$ = new ComposedCast ((FullNamedExpression) $1, (ComposedTypeSpecifier) $2); + } + ; + +type_expression + : namespace_or_type_expr opt_nullable + { + if ($2 != null) { + $$ = new ComposedCast ((ATypeNameExpression) $1, (ComposedTypeSpecifier) $2); + } else { + var sn = $1 as SimpleName; + if (sn != null) + $$ = ConvertAsType(sn, $1); + else + $$ = $1; + } + } + | STAR + { + $$ = new TypeExpression (compiler.BuiltinTypes.AsUntyped, GetLocation ($1)); + } +// | namespace_or_type_expr pointer_stars +// { +// $$ = new ComposedCast ((ATypeNameExpression) $1, (ComposedTypeSpecifier) $2); +// } + | builtin_types opt_nullable + { + if ($2 != null) + $$ = new ComposedCast ((FullNamedExpression) $1, (ComposedTypeSpecifier) $2); + } +// | builtin_types pointer_stars +// { +// $$ = new ComposedCast ((FullNamedExpression) $1, (ComposedTypeSpecifier) $2); +// } +// | VOID pointer_stars +// { +// $$ = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)), (ComposedTypeSpecifier) $2); +// } + ; + +type_list + : base_type_name + { + var types = new List (2); + types.Add ((FullNamedExpression) $1); + $$ = types; + } + | type_list COMMA base_type_name + { + var types = (List) $1; + types.Add ((FullNamedExpression) $3); + $$ = types; + } + ; + +base_type_name + : type + { + if ($1 is ComposedCast) { + report.Error (1521, GetLocation ($1), "Invalid base type `{0}'", ((ComposedCast)$1).GetSignatureForError ()); + } + $$ = $1; + } + ; + +/* + * replaces all the productions for isolating the various + * simple types, but we need this to reuse it easily in variable_type + */ +builtin_types + : /* OBJECT { $$ = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation ($1)); } + | STRING { $$ = new TypeExpression (compiler.BuiltinTypes.String, GetLocation ($1)); } + | BOOL { $$ = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation ($1)); } + | */ DECIMAL { CheckIsPlayScript("decimal", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation ($1)); } + | FLOAT { CheckIsPlayScript("float", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation ($1)); } +// | FLOAT2 { CheckIsPlayScript("float2", GetLocation($1)); $$ = MakeMonoSimdType("Vector4f", GetLocation($1)); } +// | FLOAT3 { CheckIsPlayScript("float3", GetLocation($1)); $$ = MakeMonoSimdType("Vector4f", GetLocation($1)); } +// | FLOAT4 { CheckIsPlayScript("float4", GetLocation($1)); $$ = MakeMonoSimdType("Vector4f", GetLocation($1)); } + | DOUBLE { CheckIsPlayScript("double", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation ($1)); } +// | DOUBLE2 { CheckIsPlayScript("double2", GetLocation($1)); $$ = MakeMonoSimdType("Vector2d", GetLocation($1)); } +// | DOUBLE3 { CheckIsPlayScript("double3", GetLocation($1)); $$ = MakeMonoSimdType("Vector4d", GetLocation($1)); } +// | DOUBLE4 { CheckIsPlayScript("double4", GetLocation($1)); $$ = MakeMonoSimdType("Vector4d", GetLocation($1)); } + | integral_type + ; + +integral_type + : SBYTE { CheckIsPlayScript("sbyte", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation ($1)); } + | BYTE { CheckIsPlayScript("byte", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation ($1)); } + | SHORT { CheckIsPlayScript("short", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation ($1)); } + | USHORT { CheckIsPlayScript("ushort", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation ($1)); } + | INT { $$ = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation ($1)); } + | UINT { $$ = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation ($1)); } + | LONG { CheckIsPlayScript("long", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation ($1)); } + | ULONG { CheckIsPlayScript("ulong", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation ($1)); } + | CHAR { CheckIsPlayScript("char", GetLocation($1)); $$ = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation ($1)); } + ; + +// +// Expressions, section 7.5 +// + + +primary_expression + : primary_expression_or_type + | literal +// | array_creation_expression + | parenthesized_expression + | default_value_expression + | invocation_expression + | element_access + | this_access + | base_access + | post_increment_expression + | post_decrement_expression +// | object_or_delegate_creation_expression +// | anonymous_type_expression +// | typeof_expression + | sizeof_expression + | checked_expression + | unchecked_expression + | new_expression +// | pointer_member_access + | anonymous_method_expression +// | undocumented_expressions + | array_initializer + | object_or_collection_initializer + ; + +primary_expression_or_type + : simple_name_expr + +// : IDENTIFIER opt_type_argument_list +// { +// // primary_expression_or_type +// var lt = (LocatedToken) $1; +// $$ = new SimpleName (lt.Value, (TypeArguments)$2, lt.Location); +// } + | IDENTIFIER GENERATE_COMPLETION { + var lt = (LocatedToken) $1; + $$ = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); + } + | builtin_types { + $$ = $1; + } + | member_access + ; + +literal + : boolean_literal + | LITERAL + | UNDEFINED { $$ = new AsUndefinedLiteral (GetLocation ($1)); } + | NULL { $$ = new NullLiteral (GetLocation ($1)); } + ; + +boolean_literal + : TRUE { $$ = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation ($1)); } + | FALSE { $$ = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation ($1)); } + ; + +open_parens_any + : OPEN_PARENS + ; + +// +// Use this production to accept closing parenthesis or +// performing completion +// +close_parens + : CLOSE_PARENS + | COMPLETE_COMPLETION + ; + + +parenthesized_expression + : OPEN_PARENS expression CLOSE_PARENS + { + $$ = new ParenthesizedExpression ((Expression) $2, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($3)); + } + | OPEN_PARENS expression COMPLETE_COMPLETION + { + $$ = new ParenthesizedExpression ((Expression) $2, GetLocation ($1)); + } + ; + +member_access + : primary_expression DOT IDENTIFIER opt_type_argument_list + { + // member_access + var lt = (LocatedToken) $3; + $$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + | primary_expression INTERR_OPERATOR DOT identifier_inside_body opt_type_argument_list + { + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation ($2), "null propagating operator"); + + var lt = (LocatedToken) $4; + $$ = new ConditionalMemberAccess ((Expression) $1, lt.Value, (TypeArguments) $5, lt.Location); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($3)); + } + | primary_expression INTERR_OPERATOR DOT identifier_inside_body opt_type_argument_list + { + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation ($2), "null propagating operator"); + + var lt = (LocatedToken) $4; + //$$ = new NullMemberAccess ((Expression) $1, lt.Value, (TypeArguments) $5, lt.Location); + $$ = new ConditionalMemberAccess ((Expression) $1, lt.Value, (TypeArguments) $5, lt.Location); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($3)); + } + | primary_expression DOT_AT IDENTIFIER + { + var lt = (LocatedToken) $3; + var ma = new MemberAccess ((Expression) $1, lt.Value, null, lt.Location); + ma.AccessorType = MemberAccess.Accessor.AsE4xChildAttribute; + lbag.AddLocation ($$, GetLocation ($2)); + $$ = ma; + } + + | AWAIT DOT identifier_inside_body opt_type_argument_list + { + var lt = (LocatedToken) $3; + $$ = new MemberAccess (new SimpleName ("await", ((LocatedToken) $1).Location), lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + + | primary_expression DOT_STAR + { + var ma = new MemberAccess ((Expression) $1, "any", null, GetLocation($2)); + ma.AccessorType = MemberAccess.Accessor.AsE4xChildAll; + lbag.AddLocation ($$, GetLocation ($2)); + $$ = ma; + } + | primary_expression DOTDOT IDENTIFIER + { + var lt = (LocatedToken) $3; + var ma = new MemberAccess ((Expression) $1, lt.Value, null, lt.Location); + ma.AccessorType = MemberAccess.Accessor.AsE4xDescendant; + lbag.AddLocation ($$, GetLocation ($2)); + $$ = ma; + } + | primary_expression DOTDOT_STAR + { + var ma = new MemberAccess ((Expression) $1, "any", null, GetLocation($2)); + ma.AccessorType = MemberAccess.Accessor.AsE4xDescendantAll; + lbag.AddLocation ($$, GetLocation ($2)); + $$ = ma; + } + | primary_expression DOUBLE_COLON IDENTIFIER + { + var lt = (LocatedToken) $3; + var ma = new MemberAccess ((Expression) $1, lt.Value, null, lt.Location); + ma.AccessorType = MemberAccess.Accessor.AsE4xNamespace; + lbag.AddLocation ($$, GetLocation ($2)); + $$ = ma; + } + | primary_expression DOUBLE_COLON OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET + { + var ea = new ElementAccess ((Expression) $1, (Arguments) $4, GetLocation ($3)); + ea.AccessorType = ElementAccess.Accessor.AsE4xNamespaceAccess; + lbag.AddLocation (GetLocation ($3), GetLocation ($5)); + $$ = ea; + } + | primary_expression DOT_AT OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET + { + var ea = new ElementAccess ((Expression) $1, (Arguments) $4, GetLocation ($3)); + ea.AccessorType = ElementAccess.Accessor.AsE4xAttributeAccess; + lbag.AddLocation (GetLocation ($3), GetLocation ($5)); + $$ = ea; + } + | primary_expression DOT OPEN_PARENS expression CLOSE_PARENS + { + var lt = (LocatedToken) $3; + var ma = new AsXmlQueryExpression ((Expression) $1, (Expression) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + $$ = ma; + } +// | builtin_types DOT IDENTIFIER opt_type_argument_list +// { +// var lt = (LocatedToken) $3; +// $$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location); +// lbag.AddLocation ($$, GetLocation ($2)); +// } + | SUPER DOT IDENTIFIER opt_type_argument_list + { + var lt = (LocatedToken) $3; + $$ = new MemberAccess (new BaseThis (GetLocation ($1)), lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } +// | qualified_alias_member IDENTIFIER opt_type_argument_list +// { +// var lt1 = (LocatedToken) $1; +// var lt2 = (LocatedToken) $2; +// +// $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); +// lbag.AddLocation ($$, GetLocation ($2)); +// } + | qualified_alias_member identifier_inside_body generic_dimension + { + var lt1 = (LocatedToken) $1; + var lt2 = (LocatedToken) $2; + + $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + | primary_expression DOT GENERATE_COMPLETION { + $$ = new CompletionMemberAccess ((Expression) $1, null,GetLocation ($3)); + } + | primary_expression DOT IDENTIFIER GENERATE_COMPLETION { + var lt = (LocatedToken) $3; + $$ = new CompletionMemberAccess ((Expression) $1, lt.Value, lt.Location); + } +// | builtin_types DOT GENERATE_COMPLETION +// { +// $$ = new CompletionMemberAccess ((Expression) $1, null, lexer.Location); +// } +// | builtin_types DOT IDENTIFIER GENERATE_COMPLETION { +// var lt = (LocatedToken) $3; +// $$ = new CompletionMemberAccess ((Expression) $1, lt.Value, lt.Location); + // } + ; + +invocation_expression + : SUPER open_parens_any opt_argument_list close_parens + { + if (current_constructor == null) + report.Error (7014, GetLocation ($1), "Base constructor initializer may only be called in constructor"); + var initializer = new ConstructorBaseInitializer ((Arguments) $3, GetLocation ($1)); + initializer.IsAsExplicitSuperCall = true; + current_constructor.Initializer = initializer; + $$ = initializer; + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($2), GetLocation ($4)); + } + | primary_expression open_parens_any opt_argument_list close_parens + { + var newExpr = $1 as AsNew; + if (newExpr != null) { + // Convert Invocation(AsNew()) into AsNew(Invocation()) + var invExpr = new Invocation(newExpr.Expr, (Arguments) $3); + newExpr.Expr = invExpr; + $$ = newExpr; + } else { + // Just a normal invocation + $$ = new Invocation ((Expression) $1, (Arguments) $3); + } + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + | primary_expression open_parens_any argument_list error + { + Error_SyntaxError (yyToken); + + $$ = new Invocation ((Expression) $1, (Arguments) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +object_or_collection_initializer + : init_open_brace opt_member_initializer_list init_close_brace_or_complete_completion + { + var expList = $2 as List; + if (expList == null) { + expList = new List(); + } + var oi = new AsObjectInitializer (expList, GetLocation ($1)); + if (current_variable != null) { + oi.VariableDeclaration = current_variable; + } + lbag.AddLocation ($$, GetLocation ($3)); + $$ = oi; + } + | init_open_brace member_initializer_list COMMA init_close_brace + { + var oi = new AsObjectInitializer ((List) $2, GetLocation ($1)); + if (current_variable != null) { + oi.VariableDeclaration = current_variable; + } + lbag.AddLocation ($$, GetLocation ($3), GetLocation ($4)); + $$ = oi; + } + ; + +init_open_brace + : OPEN_BRACE_INIT + { + oob_stack.Push (Lexer.AutoSemiInsertion); + Lexer.AutoSemiInsertion = false; + } + ; + +init_close_brace + : CLOSE_BRACE + { + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + if (Lexer.AutoSemiInsertion) + Lexer.AllowAutoSemiAfterToken(Token.CLOSE_BRACE, true); + } + ; + +init_close_brace_or_complete_completion + : CLOSE_BRACE + { + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + if (Lexer.AutoSemiInsertion) + Lexer.AllowAutoSemiAfterToken(Token.CLOSE_BRACE, true); + } + | COMPLETE_COMPLETION + ; + +opt_member_initializer_list + : /* empty */ { $$ = null; } + | member_initializer_list + { + $$ = $1; + } + ; + +member_initializer_list + : member_initializer + { + var a = new List (); + a.Add ((Expression) $1); + $$ = a; + } + | member_initializer_list COMMA member_initializer + { + var a = (List)$1; + a.Add ((Expression) $3); + $$ = a; + } + | member_initializer_list error { + Error_SyntaxError (yyToken); + $$ = $1; + } + ; + +member_initializer + : IDENTIFIER COLON initializer_value + { + var lt = (LocatedToken) $1; + $$ = new ElementInitializer (lt.Value, (Expression)$3, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + | AWAIT ASSIGN initializer_value + { + var lt = (LocatedToken) Error_AwaitAsIdentifier ($1); + $$ = new ElementInitializer (lt.Value, (Expression)$3, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + | LITERAL COLON initializer_value + { + ILiteralConstant lit = $1 as ILiteralConstant; + string nm; + if (lit is StringLiteral) { + nm = ((StringLiteral)lit).Value; + } else { + if (parsing_playscript || !(lit is IntLiteral || lit is DoubleLiteral || lit is BoolLiteral)) { + report.Error (7019, GetLocation ($1), "Must be identifier or string literal"); + nm = "err"; + } else { + nm = ((Constant)$1).GetValueAsLiteral(); + } + } + + $$ = new ElementInitializer (nm, (Expression)$3, GetLocation($1)); + lbag.AddLocation ($$, GetLocation ($2)); + } + | GENERATE_COMPLETION + { + $$ = new CompletionElementInitializer (null, GetLocation ($1)); + } + /* | non_assignment_expression opt_COMPLETE_COMPLETION { + CompletionSimpleName csn = $1 as CompletionSimpleName; + if (csn == null) + $$ = new CollectionElementInitializer ((Expression)$1); + else + $$ = new CompletionElementInitializer (csn.Prefix, csn.Location); + } + | OPEN_BRACE expression_list CLOSE_BRACE + { + if ($2 == null) + $$ = null; + else + $$ = new CollectionElementInitializer ((List)$2, GetLocation ($1)); + } + | OPEN_BRACE CLOSE_BRACE + { + report.Error (1920, GetLocation ($1), "An element initializer cannot be empty"); + $$ = null; + } */ + ; + +initializer_value + : expression + ; + +opt_argument_list + : /* empty */ { $$ = null; } + | argument_list + ; + +argument_list + : argument + { + Arguments list = new Arguments (4); + list.Add ((Argument) $1); + $$ = list; + } + | argument_list COMMA argument + { + Arguments list = (Arguments) $1; + list.Add ((Argument) $3); + $$ = list; + } + | argument_list COMMA error + { + lexer.putback (')'); // TODO: Wrong but what can I do + Error_SyntaxError (yyToken); + $$ = $1; + } + | COMMA error + { + report.Error (839, GetLocation ($1), "An argument is missing"); + $$ = null; + } + ; + +argument + : expression + { + $$ = new Argument ((Expression) $1); + } + | non_simple_argument + ; + +non_simple_argument + : REF variable_reference + { + $$ = new Argument ((Expression) $2, Argument.AType.Ref); + lbag.AddLocation ($$, GetLocation ($1)); + } + | REF declaration_expression + { + $$ = new Argument ((Expression) $2, Argument.AType.Ref); + } + | OUT variable_reference + { + $$ = new Argument ((Expression) $2, Argument.AType.Out); + lbag.AddLocation ($$, GetLocation ($1)); + } + | OUT declaration_expression + { + $$ = new Argument ((Expression) $2, Argument.AType.Out); + } + ; + +declaration_expression + : OPEN_PARENS declaration_expression CLOSE_PARENS + { + $$ = new ParenthesizedExpression ((Expression) $2, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($3)); + } +/* + | CHECKED open_parens_any declaration_expression CLOSE_PARENS + { + $$ = new CheckedExpr ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + | UNCHECKED open_parens_any declaration_expression CLOSE_PARENS + { + $$ = new UnCheckedExpr ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } +*/ + | variable_type identifier_inside_body + { + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation ($1), "declaration expression"); + + var lt = (LocatedToken) $2; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + $$ = new DeclarationExpression ((FullNamedExpression) $1, lv); + } + | variable_type identifier_inside_body ASSIGN expression + { + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation ($1), "declaration expression"); + + var lt = (LocatedToken) $2; + var lv = new LocalVariable (current_block, lt.Value, lt.Location); + current_block.AddLocalName (lv); + $$ = new DeclarationExpression ((FullNamedExpression) $1, lv) { + Initializer = (Expression) $4 + }; + } + ; + +variable_reference + : expression + ; + +element_access + : primary_expression OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET + { + var newExpr = $1 as AsNew; + if (newExpr != null) { + // Convert ElementAccess(AsNew()) into AsNew(ElementAccess()) + var elemAccessExpr = new ElementAccess(newExpr.Expr, (Arguments) $3, GetLocation ($2)); + newExpr.Expr = elemAccessExpr; + $$ = newExpr; + } else { + $$ = new ElementAccess ((Expression) $1, (Arguments) $3, GetLocation ($2)); + } + lbag.AddLocation ($$, GetLocation ($4)); + } + | primary_expression INTERR_OPERATOR OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET + { + if (lang_version < LanguageVersion.V_6) + FeatureIsNotAvailable (GetLocation ($2), "null propagating operator"); + + $$ = new ElementAccess ((Expression) $1, (Arguments) $4, GetLocation ($3)) { + ConditionalAccess = true + }; + + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($5)); + } + + | primary_expression OPEN_BRACKET_EXPR expression_list_arguments error + { + Error_SyntaxError (yyToken); + $$ = new ElementAccess ((Expression) $1, (Arguments) $3, GetLocation ($2)); + } + | primary_expression OPEN_BRACKET_EXPR error + { + Error_SyntaxError (yyToken); + $$ = new ElementAccess ((Expression) $1, null, GetLocation ($2)); + } +// | builtin_types OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET +// { +// $$ = new ElementAccess ((Expression) $1, (Arguments) $3, GetLocation ($2)); +// lbag.AddLocation ($$, GetLocation ($4)); +// } +// | builtin_types OPEN_BRACKET_EXPR expression_list_arguments error +// { +// Error_SyntaxError (yyToken); +// $$ = new ElementAccess ((Expression) $1, (Arguments) $3, GetLocation ($2)); +// } +// | builtin_types OPEN_BRACKET_EXPR error +// { +// Error_SyntaxError (yyToken); +// $$ = new ElementAccess ((Expression) $1, null, GetLocation ($2)); +// } + ; + +expression_list + : expression + { + var list = new List (4); + list.Add ((Expression) $1); + $$ = list; + } + | expression_list COMMA expression + { + var list = (List) $1; + list.Add ((Expression) $3); + $$ = list; + } + | expression_list error { + Error_SyntaxError (yyToken); + $$ = $1; + } + ; + +expression_list_arguments + : expression_list_argument + { + Arguments args = new Arguments (4); + args.Add ((Argument) $1); + $$ = args; + } + | expression_list_arguments COMMA expression_list_argument + { + Arguments args = (Arguments) $1; + args.Add ((Argument) $3); + $$ = args; + } + ; + +expression_list_argument + : expression + { + $$ = new Argument ((Expression) $1); + } + ; + +this_access + : THIS + { + $$ = new This (GetLocation ($1)); + } + ; + +base_access + : SUPER OPEN_BRACKET_EXPR expression_list_arguments CLOSE_BRACKET + { + $$ = new ElementAccess (new BaseThis (GetLocation ($1)), (Arguments) $3, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($4)); + } + | SUPER OPEN_BRACKET error + { + Error_SyntaxError (yyToken); + $$ = new ElementAccess (null, null, GetLocation ($2)); + } + ; + +post_increment_expression + : primary_expression OP_INC + { + $$ = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) $1, GetLocation ($2)); + } + ; + +post_decrement_expression + : primary_expression OP_DEC + { + $$ = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) $1, GetLocation ($2)); + } + ; + +//object_or_delegate_creation_expression +// : NEW new_expr_type open_parens_any opt_argument_list CLOSE_PARENS +// { +// $$ = new New ((FullNamedExpression) $2, (Arguments) $4, GetLocation ($1)); +// +// lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5)); +// } +// | NEW new_expr_type SEMICOLON +// { +// $$ = new New ((FullNamedExpression) $2, null, GetLocation ($1)); +// lexer.putback (';'); +// } +// | NEW OP_LT type_expression OP_GT array_initializer +// { +// var arrayInit = (AsArrayInitializer) $5; +// arrayInit.VectorType = (FullNamedExpression) $3; +// $$ = arrayInit; +// } +// ; + +//array_creation_expression +// : NEW new_expr_type OPEN_BRACKET_EXPR expression_list CLOSE_BRACKET +// opt_rank_specifier +// /* opt_array_initializer */ +// { +// CheckIsPlayScript("arrays", GetLocation($1)); +// $$ = new ArrayCreation ((FullNamedExpression) $2, (List) $4, +// new ComposedTypeSpecifier (((List) $4).Count, GetLocation ($3)) { +// Next = (ComposedTypeSpecifier) $6 +// }, (AsArrayInitializer) null /*$7*/, GetLocation ($1)); +// lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5)); +// } +// | NEW new_expr_type OPEN_BRACKET CLOSE_BRACKET OPEN_BRACKET_EXPR error CLOSE_BRACKET +// { +// CheckIsPlayScript("arrays", GetLocation($1)); +// report.Error (178, GetLocation ($6), "Invalid rank specifier, expecting `,' or `]'"); +// $$ = new ArrayCreation ((FullNamedExpression) $2, null, GetLocation ($1)); +// } +// | NEW new_expr_type error +// { +// Error_SyntaxError (yyToken); +// // It can be any of new expression, create the most common one +// $$ = new New ((FullNamedExpression) $2, null, GetLocation ($1)); +// } +// ; + +//new_expr_type +// : { +// ++lexer.parsing_type; +// } +// simple_type +// { +// --lexer.parsing_type; +// $$ = $2; +// } +// ; + +new_expression + : NEW new_type_or_member_access + { + $$ = new AsNew ((Expression) $2, GetLocation ($1)); + } + | NEW builtin_types + { + $$ = new AsNew ((Expression) $2, GetLocation ($1)); + } + | NEW OPEN_PARENS expression CLOSE_PARENS + { + $$ = new AsNew ((Expression) $3, GetLocation ($1)); + } + | NEW OP_LT type_expression OP_GT array_initializer + { + var arrayInit = (AsArrayInitializer) $5; + arrayInit.VectorType = (FullNamedExpression) $3; + $$ = arrayInit; + } + ; + +new_type_or_member_access + : simple_name_expr + | THIS + { + $$ = new This (GetLocation ($1)); + } + | SUPER DOT IDENTIFIER opt_type_argument_list + { + var lt = (LocatedToken) $3; + $$ = new MemberAccess (new BaseThis (GetLocation ($1)), lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + | new_type_or_member_access DOT IDENTIFIER opt_type_argument_list + { + // member_name + var lt = (LocatedToken) $3; + $$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + + +//anonymous_type_expression +// : NEW OPEN_BRACE anonymous_type_parameters_opt_comma CLOSE_BRACE +// { +// if (lang_version <= LanguageVersion.ISO_2) +// FeatureIsNotAvailable (GetLocation ($1), "anonymous types"); +// +// $$ = new NewAnonymousType ((List) $3, current_container, GetLocation ($1)); +// +// // TODO: lbag comma location +// lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); +// } +// ; + +//anonymous_type_parameters_opt_comma +// : anonymous_type_parameters_opt +// | anonymous_type_parameters COMMA +// ; + +//anonymous_type_parameters_opt +// : { $$ = null; } +// | anonymous_type_parameters +// ; + +//anonymous_type_parameters +// : anonymous_type_parameter +// { +// var a = new List (4); +// a.Add ((AnonymousTypeParameter) $1); +// $$ = a; +// } +// | anonymous_type_parameters COMMA anonymous_type_parameter +// { +// var a = (List) $1; +// a.Add ((AnonymousTypeParameter) $3); +// $$ = a; +// } +// ; + +//anonymous_type_parameter +// : IDENTIFIER ASSIGN variable_initializer +// { +// var lt = (LocatedToken)$1; +// $$ = new AnonymousTypeParameter ((Expression)$3, lt.Value, lt.Location); +// lbag.AddLocation ($$, GetLocation ($2)); +// } +// | IDENTIFIER +// { +// var lt = (LocatedToken)$1; +// $$ = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), +// lt.Value, lt.Location); +// } +// | member_access +// { +// MemberAccess ma = (MemberAccess) $1; +// $$ = new AnonymousTypeParameter (ma, ma.Name, ma.Location); +// } +// | error +// { +// report.Error (746, lexer.Location, +// "Invalid anonymous type member declarator. Anonymous type members must be a member assignment, simple name or member access expression"); +// $$ = null; +// } +// ; + +//opt_rank_specifier +// : /* empty */ +// | rank_specifiers +// ; + +rank_specifiers + : rank_specifier + | rank_specifier rank_specifiers + { + ((ComposedTypeSpecifier) $1).Next = (ComposedTypeSpecifier) $2; + $$ = $1; + } + ; + +rank_specifier + : OPEN_BRACKET CLOSE_BRACKET + { + $$ = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2)); + } + | OPEN_BRACKET dim_separators CLOSE_BRACKET + { + $$ = ComposedTypeSpecifier.CreateArrayDimension ((int)$2, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3)); + } + ; + +dim_separators + : COMMA + { + $$ = 2; + } + | dim_separators COMMA + { + $$ = ((int) $1) + 1; + } + ; + +//opt_array_initializer +// : /* empty */ +// { +// $$ = null; +// } +// | array_initializer +// { +// $$ = $1; +// } +// ; + +array_initializer + : init_open_bracket init_close_bracket + { + var ai = new AsArrayInitializer (0, GetLocation ($1)); + if (current_variable != null) { + ai.VariableDeclaration = current_variable; + } + lbag.AddLocation (ai, GetLocation ($2)); + $$ = ai; + } + | init_open_bracket_expr variable_initializer_list opt_comma init_close_bracket + { + var ai = new AsArrayInitializer ((List) $2, GetLocation ($1)); + if (current_variable != null) { + ai.VariableDeclaration = current_variable; + } + if ($3 != null) { + lbag.AddLocation (ai, GetLocation ($3), GetLocation ($4)); + } else { + lbag.AddLocation (ai, GetLocation ($4)); + } + $$ = ai; + } + ; + +init_open_bracket + : OPEN_BRACKET + { + oob_stack.Push (Lexer.AutoSemiInsertion); + Lexer.AutoSemiInsertion = false; + } + ; + +init_open_bracket_expr + : OPEN_BRACKET_EXPR + { + oob_stack.Push (Lexer.AutoSemiInsertion); + Lexer.AutoSemiInsertion = false; + } + ; + +init_close_bracket + : CLOSE_BRACKET + { + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + } + ; + +variable_initializer_list + : variable_initializer + { + var list = new List (4); + list.Add ((Expression) $1); + $$ = list; + } + | variable_initializer_list COMMA variable_initializer + { + var list = (List) $1; + list.Add ((Expression) $3); + $$ = list; + } + ; + +//typeof_expression +// : TYPEOF +// { +// lexer.TypeOfParsing = true; +// } +// open_parens_any typeof_type_expression CLOSE_PARENS +// { +// CheckIsPlayScript("typeof", GetLocation($1)); +// lexer.TypeOfParsing = false; +// $$ = new TypeOf ((FullNamedExpression) $4, GetLocation ($1)); +// lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5)); +// } +// ; +typeof_expression + : TYPEOF open_parens_any typeof_type_expression CLOSE_PARENS + { + $$ = new TypeOf ((FullNamedExpression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + ; + +typeof_type_expression + : type_and_void +// | unbound_type_name + | error + { + Error_TypeExpected (lexer.Location); + $$ = null; + } + ; + +//unbound_type_name +// : identifier_inside_body generic_dimension +// { +// var lt = (LocatedToken) $1; +// +// $$ = new SimpleName (lt.Value, (int) $2, lt.Location); +// } +//// | qualified_alias_member identifier_inside_body generic_dimension +//// { +//// var lt1 = (LocatedToken) $1; +//// var lt2 = (LocatedToken) $2; +//// +//// $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); +//// lbag.AddLocation ($$, GetLocation ($2)); +//// } +// | unbound_type_name DOT identifier_inside_body +// { +// var lt = (LocatedToken) $3; +// +// $$ = new MemberAccess ((Expression) $1, lt.Value, lt.Location); +// } +// | unbound_type_name DOT identifier_inside_body generic_dimension +// { +// var lt = (LocatedToken) $3; +// +// $$ = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location); +// } +// | namespace_or_type_expr DOT identifier_inside_body generic_dimension +// { +// var tne = (ATypeNameExpression) $1; +// if (tne.HasTypeArguments) +// Error_TypeExpected (GetLocation ($4)); +// +// var lt = (LocatedToken) $3; +// $$ = new MemberAccess (tne, lt.Value, (int) $4, lt.Location); +// } +// ; + +generic_dimension + : GENERIC_DIMENSION + { + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($1), "generics"); + + $$ = $1; + } + ; + +//qualified_alias_member +// : IDENTIFIER DOUBLE_COLON +// { +// var lt = (LocatedToken) $1; +// if (lang_version == LanguageVersion.ISO_1) +// FeatureIsNotAvailable (lt.Location, "namespace alias qualifier"); +// +// $$ = lt; +// } +// ; + +sizeof_expression + : SIZEOF open_parens_any type CLOSE_PARENS + { + CheckIsPlayScript("sizeof", GetLocation($1)); + $$ = new SizeOf ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + | SIZEOF open_parens_any type error + { + Error_SyntaxError (yyToken); + + $$ = new SizeOf ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +checked_expression + : CHECKED open_parens_any expression CLOSE_PARENS + { + CheckIsPlayScript("checked", GetLocation($1)); + $$ = new CheckedExpr ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + | CHECKED error + { + Error_SyntaxError (yyToken); + + $$ = new CheckedExpr (null, GetLocation ($1)); + } + ; + +unchecked_expression + : UNCHECKED open_parens_any expression CLOSE_PARENS + { + CheckIsPlayScript("unchecked", GetLocation($1)); + $$ = new UnCheckedExpr ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + | UNCHECKED error + { + Error_SyntaxError (yyToken); + + $$ = new UnCheckedExpr (null, GetLocation ($1)); + } + ; + +//pointer_member_access +// : primary_expression OP_PTR IDENTIFIER opt_type_argument_list +// { +// var lt = (LocatedToken) $3; +// $$ = new MemberAccess (new Indirection ((Expression) $1, GetLocation ($2)), lt.Value, (TypeArguments) $4, lt.Location); +// } +// ; + +anonymous_method_expression + : FUNCTION OPEN_PARENS + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + opt_formal_parameter_list CLOSE_PARENS COLON member_type + { + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) $4, (FullNamedExpression) $7, false, GetLocation ($1)); + } + anon_block + { + $$ = end_anonymous ((ParametersBlock) $9); + } + | ASYNC FUNCTION OPEN_PARENS + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + opt_formal_parameter_list CLOSE_PARENS COLON member_type + { + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) $5, (FullNamedExpression) $8, true, GetLocation ($1)); + } + anon_block + { + $$ = end_anonymous ((ParametersBlock) $10); + } + ; + +local_function_statement + : FUNCTION IDENTIFIER OPEN_PARENS + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + opt_formal_parameter_list CLOSE_PARENS COLON member_type + { + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) $5, (FullNamedExpression) $8, false, GetLocation ($1)); + } + block + { + var lt = (LocatedToken) $2; + var anonMethod = end_anonymous ((ParametersBlock) $10); + var li = new LocalVariable (current_block.ParametersBlock, lt.Value, lt.Location); + var type = Delegate.CreateDelegateTypeExpression(compiler.BuiltinTypes, anonMethod.AsParameters, anonMethod.AsReturnType, GetLocation($1)); + var decl = new BlockVariable(type, li); + decl.Initializer = anonMethod; + current_block.AddLocalName (li); + current_block.ParametersBlock.AddScopeStatement (decl); + $$ = new AsLocalFunction(GetLocation($1), lt.Value, anonMethod, decl); + } + | ASYNC FUNCTION IDENTIFIER OPEN_PARENS + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + opt_formal_parameter_list CLOSE_PARENS COLON member_type + { + valid_param_mod = 0; + start_anonymous ((ParametersCompiled) $6, (FullNamedExpression) $9, true, GetLocation ($1)); + } + block + { + var lt = (LocatedToken) $3; + var anonMethod = end_anonymous ((ParametersBlock) $11); + var li = new LocalVariable (current_block.ParametersBlock, lt.Value, lt.Location); + var type = Delegate.CreateDelegateTypeExpression(compiler.BuiltinTypes, anonMethod.AsParameters, anonMethod.AsReturnType, GetLocation($1)); + var decl = new BlockVariable(type, li); + decl.Initializer = anonMethod; + current_block.AddLocalName (li); + current_block.ParametersBlock.AddScopeStatement (decl); + $$ = new AsLocalFunction(GetLocation($1), lt.Value, anonMethod, decl); + } + ; + +//anonymous_method_signature +// : OPEN_PARENS +// { +// valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; +// } +// opt_formal_parameter_list CLOSE_PARENS opt_method_return_type +// { +// valid_param_mod = 0; +// $$ = $3; +// } +// ; + +default_value_expression + : DEFAULT open_parens_any type CLOSE_PARENS + { + CheckIsPlayScript("default values", GetLocation($1)); + + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($1), "default value expression"); + + $$ = new DefaultValueExpression ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + ; + +unary_expression + : primary_expression + | BANG prefixed_unary_expression + { + $$ = new Unary (Unary.Operator.LogicalNot, (Expression) $2, GetLocation ($1)); + } + | TILDE prefixed_unary_expression + { + $$ = new Unary (Unary.Operator.OnesComplement, (Expression) $2, GetLocation ($1)); + } + | AWAIT prefixed_unary_expression + { + CheckIsPlayScript("await", GetLocation($1)); + + if (!async_block) { + if (current_anonymous_method is LambdaExpression) { + report.Error (4034, GetLocation ($1), + "The `await' operator can only be used when its containing lambda expression is marked with the `async' modifier"); + } else if (current_anonymous_method != null) { + report.Error (4035, GetLocation ($1), + "The `await' operator can only be used when its containing anonymous method is marked with the `async' modifier"); + } else if (interactive_async != null) { + current_block.Explicit.RegisterAsyncAwait (); + interactive_async = true; + } else { + report.Error (4033, GetLocation ($1), + "The `await' operator can only be used when its containing method is marked with the `async' modifier"); + } + } else { + current_block.Explicit.RegisterAsyncAwait (); + } + + $$ = new Await ((Expression) $2, GetLocation ($1)); + } + | OP_AT prefixed_unary_expression + { + $$ = new Unary (Unary.Operator.AsE4xAttribute, (Expression) $2, GetLocation ($1)); + } + | TYPEOF prefixed_unary_expression + { + $$ = new AsTypeOf ((Expression) $2, GetLocation ($1)); + } + | DELETE prefixed_unary_expression + { + var expr = $2 as Expression; + if (!(expr is ElementAccess || expr is MemberAccess)) { + report.Error (7022, GetLocation ($1), + "delete operator may only be used with element access or member access expressions"); + } + $$ = new AsDelete ((Expression) $2, GetLocation ($1)); + } + | BANG error + { + Error_SyntaxError (yyToken); + + $$ = new Unary (Unary.Operator.LogicalNot, null, GetLocation ($1)); + } + | TILDE error + { + Error_SyntaxError (yyToken); + + $$ = new Unary (Unary.Operator.OnesComplement, null, GetLocation ($1)); + } + | AWAIT error + { + Error_SyntaxError (yyToken); + + $$ = new Await (null, GetLocation ($1)); + } + | OP_AT error + { + Error_SyntaxError (yyToken); + + $$ = new Unary (Unary.Operator.AsE4xAttribute, null, GetLocation ($1)); + } + | TYPEOF error + { + Error_SyntaxError (yyToken); + + $$ = new AsTypeOf (null, GetLocation ($1)); + } + | DELETE error + { + Error_SyntaxError (yyToken); + + $$ = new AsDelete (null, GetLocation ($1)); + } + ; + + // + // The idea to split this out is from Rhys' grammar + // to solve the problem with casts. + // +prefixed_unary_expression + : unary_expression + | PLUS prefixed_unary_expression + { + $$ = new Unary (Unary.Operator.UnaryPlus, (Expression) $2, GetLocation ($1)); + } + | MINUS prefixed_unary_expression + { + $$ = new Unary (Unary.Operator.UnaryNegation, (Expression) $2, GetLocation ($1)); + } + | OP_INC prefixed_unary_expression + { + $$ = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) $2, GetLocation ($1)); + } + | OP_DEC prefixed_unary_expression + { + $$ = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) $2, GetLocation ($1)); + } +// | STAR prefixed_unary_expression +// { +// $$ = new Indirection ((Expression) $2, GetLocation ($1)); +// } + | BITWISE_AND prefixed_unary_expression + { + $$ = new Unary (Unary.Operator.AddressOf, (Expression) $2, GetLocation ($1)); + } + | PLUS error + { + Error_SyntaxError (yyToken); + + $$ = new Unary (Unary.Operator.UnaryPlus, null, GetLocation ($1)); + } + | MINUS error + { + Error_SyntaxError (yyToken); + + $$ = new Unary (Unary.Operator.UnaryNegation, null, GetLocation ($1)); + } + | OP_INC error + { + Error_SyntaxError (yyToken); + + $$ = new UnaryMutator (UnaryMutator.Mode.PreIncrement, null, GetLocation ($1)); + } + | OP_DEC error + { + Error_SyntaxError (yyToken); + + $$ = new UnaryMutator (UnaryMutator.Mode.PreDecrement, null, GetLocation ($1)); + } +// | STAR error +// { +// Error_SyntaxError (yyToken); +// +// $$ = new Indirection (null, GetLocation ($1)); +// } + | BITWISE_AND error + { + Error_SyntaxError (yyToken); + + $$ = new Unary (Unary.Operator.AddressOf, null, GetLocation ($1)); + } + ; + +multiplicative_expression + : prefixed_unary_expression + | multiplicative_expression STAR prefixed_unary_expression + { + $$ = new Binary (Binary.Operator.Multiply, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | multiplicative_expression DIV prefixed_unary_expression + { + $$ = new Binary (Binary.Operator.Division, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | multiplicative_expression PERCENT prefixed_unary_expression + { + $$ = new Binary (Binary.Operator.Modulus, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | multiplicative_expression STAR error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.Multiply, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | multiplicative_expression DIV error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.Division, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | multiplicative_expression PERCENT error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.Modulus, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +additive_expression + : multiplicative_expression + | additive_expression PLUS multiplicative_expression + { + $$ = new Binary (Binary.Operator.Addition, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | additive_expression MINUS multiplicative_expression + { + $$ = new Binary (Binary.Operator.Subtraction, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | additive_expression OP_IN multiplicative_expression + { + $$ = new AsIn ((Expression) $1, (Expression) $3, GetLocation ($2)); + } + | additive_expression AS primary_expression_or_type + { + $$ = new As ((Expression) $1, (Expression) $3, GetLocation ($2)); + } + | additive_expression IS primary_expression_or_type + { + $$ = new Is ((Expression) $1, (Expression) $3, GetLocation ($2)); +// var is_expr = new Is ((Expression) $1, (Expression) $3, GetLocation ($2)); +// if ($4 != null) { +// if (lang_version != LanguageVersion.Experimental) +// FeatureIsNotAvailable (GetLocation ($4), "type pattern matching"); +// +// var lt = (LocatedToken) $4; +// is_expr.Variable = new LocalVariable (current_block, lt.Value, lt.Location); +// current_block.AddLocalName (is_expr.Variable); +// } +// +// $$ = is_expr; + } + | additive_expression PLUS error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.Addition, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | additive_expression MINUS error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.Subtraction, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | additive_expression OP_IN error + { + Error_SyntaxError (yyToken); + + $$ = new AsIn ((Expression) $1, null, GetLocation ($2)); + } + | additive_expression AS error + { + Error_SyntaxError (yyToken); + + $$ = new As ((Expression) $1, null, GetLocation ($2)); + } + | additive_expression IS error + { + Error_SyntaxError (yyToken); + + $$ = new Is ((Expression) $1, null, GetLocation ($2)); + } + ; + +shift_expression + : additive_expression + | shift_expression OP_SHIFT_LEFT additive_expression + { + $$ = new Binary (Binary.Operator.LeftShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | shift_expression OP_SHIFT_RIGHT additive_expression + { + $$ = new Binary (Binary.Operator.RightShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | shift_expression OP_USHIFT_RIGHT additive_expression + { + $$ = new Binary (Binary.Operator.AsURightShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | shift_expression OP_SHIFT_LEFT error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.LeftShift, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | shift_expression OP_SHIFT_RIGHT error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.RightShift, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | shift_expression OP_USHIFT_RIGHT error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.AsURightShift, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +relational_expression + : shift_expression + | relational_expression OP_LT shift_expression + { + $$ = new Binary (Binary.Operator.LessThan, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | relational_expression OP_GT shift_expression + { + $$ = new Binary (Binary.Operator.GreaterThan, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | relational_expression OP_LE shift_expression + { + $$ = new Binary (Binary.Operator.LessThanOrEqual, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | relational_expression OP_GE shift_expression + { + $$ = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | relational_expression OP_LT error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.LessThan, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | relational_expression OP_GT error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.GreaterThan, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | relational_expression OP_LE error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.LessThanOrEqual, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + | relational_expression OP_GE error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +equality_expression + : relational_expression + | equality_expression OP_EQ relational_expression + { + $$ = new Binary (Binary.Operator.Equality, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | equality_expression OP_NE relational_expression + { + $$ = new Binary (Binary.Operator.Inequality, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | equality_expression OP_STRICT_EQ relational_expression + { + $$ = new Binary (Binary.Operator.AsStrictEquality, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | equality_expression OP_STRICT_NE relational_expression + { + $$ = new Binary (Binary.Operator.AsStrictInequality, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +and_expression + : equality_expression + | and_expression BITWISE_AND equality_expression + { + $$ = new Binary (Binary.Operator.BitwiseAnd, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | and_expression BITWISE_AND error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.BitwiseAnd, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +exclusive_or_expression + : and_expression + | exclusive_or_expression CARRET and_expression + { + $$ = new Binary (Binary.Operator.ExclusiveOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | exclusive_or_expression CARRET error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.ExclusiveOr, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +inclusive_or_expression + : exclusive_or_expression + | inclusive_or_expression BITWISE_OR exclusive_or_expression + { + $$ = new Binary (Binary.Operator.BitwiseOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | inclusive_or_expression BITWISE_OR error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.BitwiseOr, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +conditional_and_expression + : inclusive_or_expression + | conditional_and_expression OP_AND inclusive_or_expression + { + $$ = new Binary (Binary.Operator.LogicalAnd, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | conditional_and_expression OP_AND error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.LogicalAnd, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +conditional_or_expression + : conditional_and_expression + | conditional_or_expression OP_OR conditional_and_expression + { + $$ = new Binary (Binary.Operator.LogicalOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | conditional_or_expression OP_OR error + { + Error_SyntaxError (yyToken); + + $$ = new Binary (Binary.Operator.LogicalOr, (Expression) $1, null); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +null_coalescing_expression + : conditional_or_expression + | conditional_or_expression OP_COALESCING null_coalescing_expression + { + CheckIsPlayScript("?? operator", GetLocation($2)); + + if (lang_version < LanguageVersion.ISO_2) + FeatureIsNotAvailable (GetLocation ($2), "null coalescing operator"); + + $$ = new Nullable.NullCoalescingOperator ((Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +conditional_expression + : null_coalescing_expression + | null_coalescing_expression INTERR expression COLON expression + { + $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, (Expression) $5, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($4)); + } + | null_coalescing_expression INTERR expression error + { + Error_SyntaxError (yyToken); + + $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, null, GetLocation ($2)); + } + | null_coalescing_expression INTERR expression COLON error + { + Error_SyntaxError (yyToken); + + $$ = new Conditional (new BooleanExpression ((Expression) $1), (Expression) $3, null, GetLocation ($2)); + lbag.AddLocation ($$, GetLocation ($4)); + } + ; + +assignment_expression + : prefixed_unary_expression ASSIGN expression + { + Expression target = (Expression) $1; + Expression source = (Expression) $3; + + var assign = new SimpleAssign (target, source); + lbag.AddLocation (assign, GetLocation ($2)); + + if (source is AsArrayInitializer) { + (source as AsArrayInitializer).Assign = assign; + } else if (source is AsObjectInitializer) { + (source as AsObjectInitializer).Assign = assign; + } + + $$ = assign; + } + | prefixed_unary_expression OP_MULT_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.Multiply, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_DIV_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.Division, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_MOD_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.Modulus, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_ADD_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.Addition, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_SUB_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.Subtraction, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_SHIFT_LEFT_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.LeftShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_SHIFT_RIGHT_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.RightShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_USHIFT_RIGHT_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.AsURightShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_AND_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.BitwiseAnd, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression LOGICAL_AND_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.LogicalAnd, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_OR_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.BitwiseOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression LOGICAL_OR_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.LogicalOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + | prefixed_unary_expression OP_XOR_ASSIGN expression + { + $$ = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +expression_or_error + : expression + | error + { + Error_SyntaxError (yyToken); + $$ = null; + } + ; + +expression + : assignment_expression + | non_assignment_expression + ; + +non_assignment_expression + : conditional_expression + | query_expression +// | ARGLIST +// { +// $$ = new ArglistAccess (GetLocation ($1)); +// } + ; + +//undocumented_expressions +// : REFVALUE OPEN_PARENS non_assignment_expression COMMA type CLOSE_PARENS +// { +// $$ = new RefValueExpr ((Expression) $3, (FullNamedExpression) $5, GetLocation ($1)); +// lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4), GetLocation ($6)); +// } +// | REFTYPE open_parens_any expression CLOSE_PARENS +// { +// $$ = new RefTypeExpr ((Expression) $3, GetLocation ($1)); +// lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); +// } +// | MAKEREF open_parens_any expression CLOSE_PARENS +// { +// $$ = new MakeRefExpr ((Expression) $3, GetLocation ($1)); +// lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); +// } +// ; + +constant_expression + : expression + ; + +boolean_expression + : expression + { + $$ = new BooleanExpression ((Expression) $1); + } + ; + +// +// 10 classes +// +class_declaration + : opt_attributes + opt_modifiers + opt_partial + CLASS + { + lexer.ConstraintsParsing = true; + lexer.AutoSemiInsertion = false; + } + type_declaration_name + { + // To workaround access level restrictions, we make internal classes + // public for ActionScript. + var modifiers = (Modifiers) $2; + if (!parsing_playscript) { + if ((modifiers & Modifiers.INTERNAL) != 0) { // specified as internal + modifiers &= ~Modifiers.INTERNAL; + modifiers |= Modifiers.PUBLIC; + } + if ((modifiers & Modifiers.AccessibilityMask) == 0) { // defaults to internal + modifiers |= Modifiers.PUBLIC; + } + } + + Class c = new Class (current_container, (MemberName) $6, modifiers, (Attributes) $1); + if (((c.ModFlags & Modifiers.STATIC) != 0) && lang_version == LanguageVersion.ISO_1) { + FeatureIsNotAvailable (c.Location, "static classes"); + } + + bool is_partial = IsPartial($1) || $3 != null; + push_current_container (c, is_partial); + } + opt_class_extends + opt_class_implements + opt_type_parameter_constraints_clauses + { + lexer.ConstraintsParsing = false; + + if ($10 != null) + current_container.SetConstraints ((List) $10); + lbag.AddMember (current_container, mod_locations, GetLocation ($4)); + + if (doc_support) { + current_container.PartialContainer.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + lexer.parsing_modifiers = true; + lexer.DynamicParsing = false; + } + OPEN_BRACE + { + lexer.AutoSemiInsertion = true; + Lexer.EatBlock = !is_config_enabled; + } + opt_class_member_declarations CLOSE_BRACE + { + lexer.DynamicParsing = true; + --lexer.parsing_declaration; + if (doc_support) + Lexer.doc_state = XmlCommentState.Allowed; + } + opt_semicolon + { + is_config_enabled = true; + lbag.AppendToMember (current_container, GetLocation ($12), GetLocation ($15), GetLocation ($17)); + $$ = pop_current_class (); + } + ; + +opt_partial + : /* empty */ + { $$ = null; } + | PARTIAL + { $$ = $1; } // location + ; + +opt_modifiers + : /* empty */ + { + mod_locations = null; + $$ = ModifierNone; + lexer.parsing_modifiers = false; + } + | modifiers + { + lexer.parsing_modifiers = false; + } + ; + +modifiers + : modifier + | modifiers modifier + { + var m1 = (Modifiers) $1; + var m2 = (Modifiers) $2; + + if ((m1 & m2) != 0) { + report.Error (1004, lexer.Location - ModifiersExtensions.Name (m2).Length, + "Duplicate `{0}' modifier", ModifiersExtensions.Name (m2)); + } else if ((m2 & Modifiers.AccessibilityMask) != 0 && (m1 & Modifiers.AccessibilityMask) != 0 && + ((m2 | m1 & Modifiers.AccessibilityMask) != (Modifiers.PROTECTED | Modifiers.INTERNAL))) { + report.Error (107, lexer.Location - ModifiersExtensions.Name (m2).Length, + "More than one protection modifier specified"); + } + + $$ = m1 | m2; + } + ; + +modifier + : NEW + { + $$ = Modifiers.NEW; + StoreModifierLocation ($$, GetLocation ($1)); + + if (current_container.Kind == MemberKind.Namespace) + report.Error (1530, GetLocation ($1), "Keyword `new' is not allowed on namespace elements"); + } + | PUBLIC + { + $$ = Modifiers.PUBLIC; + StoreModifierLocation ($$, GetLocation ($1)); + } + | PROTECTED + { + $$ = Modifiers.PROTECTED; + StoreModifierLocation ($$, GetLocation ($1)); + } + | INTERNAL + { + $$ = Modifiers.INTERNAL; + StoreModifierLocation ($$, GetLocation ($1)); + } + | PRIVATE + { + $$ = Modifiers.PRIVATE; + StoreModifierLocation ($$, GetLocation ($1)); + } + | ABSTRACT + { + $$ = Modifiers.ABSTRACT; + StoreModifierLocation ($$, GetLocation ($1)); + } + | FINAL + { + $$ = (Modifiers)0; // Modifiers.SEALED; // The semantics for SEALED and FINAL don't quite match. Ignore FINAL for right now. (BEN) + StoreModifierLocation ($$, GetLocation ($1)); + } + | STATIC + { + $$ = Modifiers.STATIC; + StoreModifierLocation ($$, GetLocation ($1)); + } + | READONLY + { + $$ = Modifiers.READONLY; + StoreModifierLocation ($$, GetLocation ($1)); + } + | VIRTUAL + { + $$ = Modifiers.VIRTUAL; + StoreModifierLocation ($$, GetLocation ($1)); + } + | OVERRIDE + { + $$ = Modifiers.OVERRIDE; + StoreModifierLocation ($$, GetLocation ($1)); + } + | NATIVE + { + $$ = Modifiers.EXTERN; + StoreModifierLocation ($$, GetLocation ($1)); + } + | VOLATILE + { + $$ = Modifiers.VOLATILE; + StoreModifierLocation ($$, GetLocation ($1)); + } + | UNSAFE + { + $$ = Modifiers.UNSAFE; + StoreModifierLocation ($$, GetLocation ($1)); + if (!settings.Unsafe) + Error_UnsafeCodeNotAllowed (GetLocation ($1)); + } + | ASYNC + { + $$ = Modifiers.ASYNC; + StoreModifierLocation ($$, GetLocation ($1)); + } + | DYNAMIC + { + $$ = Modifiers.AS_DYNAMIC; + StoreModifierLocation ($$, GetLocation ($1)); + } + | IDENTIFIER_MODIFIER + { + $$ = Modifiers.INTERNAL; + StoreModifierLocation ($$, GetLocation ($1)); + } + ; + +opt_class_extends + : /* empty */ + | EXTENDS base_type_name + { + current_type.AddBaseForPart ((FullNamedExpression) $2); + } + | EXTENDS base_type_name error + { + Error_SyntaxError (yyToken); + + current_type.AddBaseForPart ((FullNamedExpression) $2); + } + ; + +opt_interface_extends + : /* empty */ + | EXTENDS type_list + { + current_type.SetBaseTypes ((List) $2); + } + | EXTENDS type_list error + { + Error_SyntaxError (yyToken); + + current_type.SetBaseTypes ((List) $2); + } + ; + +opt_class_implements + : /* empty */ + | IMPLEMENTS type_list + { + current_type.AddBasesForPart ((List) $2); + } + | IMPLEMENTS type_list error + { + Error_SyntaxError (yyToken); + + current_type.AddBasesForPart ((List) $2); + } + ; + +opt_type_parameter_constraints_clauses + : /* empty */ + | type_parameter_constraints_clauses + { + $$ = $1; + } + ; + +type_parameter_constraints_clauses + : type_parameter_constraints_clause + { + var constraints = new List (1); + constraints.Add ((Constraints) $1); + $$ = constraints; + } + | type_parameter_constraints_clauses type_parameter_constraints_clause + { + var constraints = (List) $1; + Constraints new_constraint = (Constraints)$2; + + foreach (Constraints c in constraints) { + if (new_constraint.TypeParameter.Value == c.TypeParameter.Value) { + report.Error (409, new_constraint.Location, + "A constraint clause has already been specified for type parameter `{0}'", + new_constraint.TypeParameter.Value); + } + } + + constraints.Add (new_constraint); + $$ = constraints; + } + ; + +type_parameter_constraints_clause + : WHERE IDENTIFIER COLON type_parameter_constraints + { + var lt = (LocatedToken) $2; + $$ = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List) $4, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3)); + } + | WHERE IDENTIFIER error + { + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) $2; + $$ = new Constraints (new SimpleMemberName (lt.Value, lt.Location), null, GetLocation ($1)); + } + ; + +type_parameter_constraints + : type_parameter_constraint + { + var constraints = new List (1); + constraints.Add ((FullNamedExpression) $1); + $$ = constraints; + } + | type_parameter_constraints COMMA type_parameter_constraint + { + var constraints = (List) $1; + var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; + if (prev != null && (prev.Constraint & SpecialConstraint.Constructor) != 0) { + report.Error (401, GetLocation ($2), "The `new()' constraint must be the last constraint specified"); + } + + prev = $3 as SpecialContraintExpr; + if (prev != null) { + if ((prev.Constraint & (SpecialConstraint.Class | SpecialConstraint.Struct)) != 0) { + report.Error (449, prev.Location, "The `class' or `struct' constraint must be the first constraint specified"); + } else { + prev = constraints [0] as SpecialContraintExpr; + if (prev != null && (prev.Constraint & SpecialConstraint.Struct) != 0) { + report.Error (451, GetLocation ($3), "The `new()' constraint cannot be used with the `struct' constraint"); + } + } + } + + constraints.Add ((FullNamedExpression) $3); + $$ = constraints; + } + ; + +type_parameter_constraint + : type + { + if ($1 is ComposedCast) + report.Error (706, GetLocation ($1), "Invalid constraint type `{0}'", ((ComposedCast)$1).GetSignatureForError ()); + + $$ = $1; + } + | NEW OPEN_PARENS CLOSE_PARENS + { + $$ = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($3)); + } + | CLASS + { + $$ = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation ($1)); + } + | STRUCT + { + $$ = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation ($1)); + } + ; + +opt_type_parameter_variance + : /* empty */ + { + $$ = Variance.None; + } + | type_parameter_variance + { + if (lang_version <= LanguageVersion.V_3) + FeatureIsNotAvailable (lexer.Location, "generic type variance"); + + $$ = $1; + } + ; + +type_parameter_variance + : OUT + { + $$ = Variance.Covariant; + } + | IN + { + $$ = Variance.Contravariant; + } + ; + +// +// Statements (8.2) +// + +// +// A block is "contained" on the following places: +// method_body +// property_declaration as part of the accessor body (get/set) +// operator_declaration +// constructor_declaration +// destructor_declaration +// event_declaration as part of add_accessor_declaration or remove_accessor_declaration +// +block + : OPEN_BRACE + { + ++lexer.parsing_block; + lexer.AutoSemiInsertion = true; + start_block (GetLocation ($1)); + Lexer.EatBlock = !is_config_enabled; + } + opt_statement_list block_end + { + $$ = $4; + } + ; + +// +// Anon block (has auto-semi insertion after semicolon) +// +anon_block + : OPEN_BRACE + { + ++lexer.parsing_block; + lexer.AutoSemiInsertion = true; + start_block (GetLocation ($1)); + } + opt_statement_list anon_block_end + { + $$ = $4; + } + ; + +// +// An optional config block is "contained" on the following places: +// method_body +// +config_block + : opt_block_config OPEN_BRACE + { + ++lexer.parsing_block; + start_block (GetLocation ($2)); + Lexer.EatBlock = !is_config_enabled; + } + opt_statement_list block_end + { + if (is_config_enabled) { + // This block should be included + $$ = $5; + } else { + $$ = new EmptyStatement (GetLocation ($2)); + } + is_config_enabled = true; + } + ; + +opt_block_config + : /* empty */ + | IDENTIFIER DOUBLE_COLON block_config_identifier + { + var lt1 = (LocatedToken) $1; + var lt2 = (LocatedToken) $3; + is_config_enabled = IsConfigVarDefined (lt1.Value + "::" + lt2.Value); + } + ; + +block_config_identifier + : IDENTIFIER + { + Lexer.AutoSemiInsertionAfter = 1; + $$ = $1; + } + ; + +block_end + : CLOSE_BRACE + { + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + $$ = end_block (GetLocation ($1)); + } + | COMPLETE_COMPLETION + { + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + $$ = end_block (lexer.Location); + } + ; + +anon_block_end + : CLOSE_BRACE + { + Lexer.AutoSemiInsertion = true; + Lexer.AllowAutoSemiAfterToken(Token.CLOSE_BRACE, true); + --lexer.parsing_block; + $$ = end_block (GetLocation ($1)); + } + | COMPLETE_COMPLETION + { + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + $$ = end_block (lexer.Location); + } + ; + +block_prepared + : OPEN_BRACE + { + ++lexer.parsing_block; + current_block.StartLocation = GetLocation ($1); + } + opt_statement_list CLOSE_BRACE + { + Lexer.AutoSemiInsertion = true; + --lexer.parsing_block; + $$ = end_block (GetLocation ($4)); + } + ; + +opt_statement_list + : /* empty */ + | statement_list + ; + +statement_list + : statement + | statement_list statement + ; + +statement + : block_variable_declaration + { + current_block.AddStatement ((Statement) $1); + } + | valid_declaration_statement + { + current_block.AddStatement ((Statement) $1); + } + | labeled_statement + | error + { + Error_SyntaxError (yyToken); + $$ = null; + } + ; + +// +// The interactive_statement and its derivatives are only +// used to provide a special version of `expression_statement' +// that has a side effect of assigning the expression to +// $retval +// +interactive_statement_list + : interactive_statement + | interactive_statement_list interactive_statement + ; + +interactive_statement + : block_variable_declaration + { + current_block.AddStatement ((Statement) $1); + } + | interactive_valid_declaration_statement + { + current_block.AddStatement ((Statement) $1); + } + | labeled_statement + ; + +valid_declaration_statement + : config_block + | empty_statement + | expression_statement + | selection_statement + | iteration_statement + | jump_statement + | try_statement + | checked_statement + | unchecked_statement + | lock_statement + | using_statement + | unsafe_statement + | fixed_statement +// | delete_statement + | local_function_statement + ; + +interactive_valid_declaration_statement + : config_block + | empty_statement + | interactive_expression_statement + | selection_statement + | iteration_statement + | jump_statement + | try_statement + | checked_statement + | unchecked_statement + | lock_statement + | using_statement + | unsafe_statement + | fixed_statement +// | delete_statement + | local_function_statement + ; + +embedded_statement + : valid_declaration_statement + | block_variable_declaration + { + if (parsing_playscript) { + report.Error (1023, GetLocation ($1), "An embedded statement may not be a declaration or labeled statement"); + $$ = null; + } else { + // NOTE: This is actually allowed in PlayScript. We'll turn it off in ASX though as it's error prone. + $$ = $1; + } + } + | labeled_statement + { + report.Error (1023, GetLocation ($1), "An embedded statement may not be a declaration or labeled statement"); + $$ = null; + } + | error + { + Error_SyntaxError (yyToken); + $$ = new EmptyStatement (GetLocation ($1)); + } + ; + +empty_statement + : SEMICOLON + { + Lexer.AutoSemiInsertion = true; + // Uses lexer.Location because semicolon location is not kept in quick mode + $$ = new EmptyStatement (lexer.Location); + } + ; + +labeled_statement + : identifier_inside_body COLON + { + var lt = (LocatedToken) $1; + LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); + lbag.AddLocation (labeled, GetLocation ($2)); + current_block.AddLabel (labeled); + current_block.AddStatement (labeled); + } + statement + ; + +use_namespace_statement + : USE NAMESPACE IDENTIFIER stmnt_end_semicolon + { + Lexer.NamespaceParsing = false; + var lt = (LocatedToken) $2; + $$ = new AsUseNamespaceStatement (lt.Value, GetLocation ($1)); + } + ; + +variable_type + : variable_type_simple + | variable_type_simple rank_specifiers + { + if ($1 is VarExpr) + $1 = new SimpleName ("var", ((VarExpr) $1).Location); + + $$ = new ComposedCast ((FullNamedExpression) $1, (ComposedTypeSpecifier) $2); + } + ; + +/* + * The following is from Rhys' grammar: + * > Types in local variable declarations must be recognized as + * > expressions to prevent reduce/reduce errors in the grammar. + * > The expressions are converted into types during semantic analysis. + */ +variable_type_simple + : primary_expression_or_type opt_nullable + { + // Ok, the above "primary_expression" is there to get rid of + // both reduce/reduce and shift/reduces in the grammar, it should + // really just be "type_name". If you use type_name, a reduce/reduce + // creeps up. If you use namespace_or_type_name (which is all we need + // really) two shift/reduces appear. + // + + // So the super-trick is that primary_expression + // can only be either a SimpleName or a MemberAccess. + // The MemberAccess case arises when you have a fully qualified type-name like : + // Foo.Bar.Blah i; + // SimpleName is when you have + // Blah i; + + Expression expr = (Expression) $1; + if ($2 == null) { + SimpleName sn = expr as SimpleName; + if (sn != null) + $$ = ConvertAsType(sn, $1); + else + $$ = $1; + } else if (expr is ATypeNameExpression) { + $$ = new ComposedCast ((ATypeNameExpression)expr, (ComposedTypeSpecifier) $2); + } else { + Error_ExpectingTypeName (expr); + $$ = null; + } + } +// | primary_expression_or_type pointer_stars +// { +// ATypeNameExpression expr = $1 as ATypeNameExpression; +// +// if (expr != null) { +// $$ = new ComposedCast (expr, (ComposedTypeSpecifier) $2); +// } else { +// Error_ExpectingTypeName ((Expression)$1); +// $$ = expr; +// } +// } +// | builtin_types opt_nullable +// { +// if ($2 == null) +// $$ = $1; +// else +// $$ = new ComposedCast ((FullNamedExpression) $1, (ComposedTypeSpecifier) $2); +// } +// | builtin_types pointer_stars +// { +// $$ = new ComposedCast ((FullNamedExpression) $1, (ComposedTypeSpecifier) $2); +// } +// | VOID pointer_stars +// { +// $$ = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)), (ComposedTypeSpecifier) $2); +// } + | VOID + { + Expression.Error_VoidInvalidInTheContext (GetLocation ($1), report); + $$ = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($1)); + } + ; + +//pointer_stars +// : pointer_star +// | pointer_star pointer_stars +// { +// ((ComposedTypeSpecifier) $1).Next = (ComposedTypeSpecifier) $2; +// $$ = $1; +// } +// ; + +//pointer_star +// : STAR +// { +// $$ = ComposedTypeSpecifier.CreatePointer (GetLocation ($1)); +// } +// ; + +identifier_inside_body + : IDENTIFIER + | AWAIT + { + if (async_block) { + report.Error (4003, GetLocation ($1), "`await' cannot be used as an identifier within an async method"); + $$ = new LocatedToken ("await", GetLocation ($1)); + } + } + ; + +stmnt_end_semicolon + : SEMICOLON + { + Lexer.AutoSemiInsertion = true; + } + ; + +block_variable_declaration + : VAR identifier_inside_body COLON type + { + var lt = (LocatedToken) $2; + var li = GetOrCreateLocalVariable (current_block, lt.Value, 0, (FullNamedExpression) $4, lt.Location); + current_variable = new BlockVariable ((FullNamedExpression) $4, li); + } + opt_local_variable_initializer opt_variable_declarators stmnt_end_semicolon + { + $$ = current_variable; + current_variable = null; + lbag.AddLocation ($$, GetLocation ($6)); + } + | VAR identifier_inside_body + { + var lt = (LocatedToken) $2; + var li = GetOrCreateLocalVariable (current_block, lt.Value, 0, null, lt.Location); + current_variable = new BlockVariable (new VarExpr (GetLocation($1)), li); + } + opt_local_variable_initializer opt_variable_declarators stmnt_end_semicolon + { + $$ = current_variable; + current_variable = null; + lbag.AddLocation ($$, GetLocation ($4)); + } + | CONST identifier_inside_body COLON type // TODO: We'll have to use regular variables here, but resolve to const values in resolve phase. + { + var lt = (LocatedToken) $2; + var li = GetOrCreateLocalVariable (current_block, lt.Value, /*LocalVariable.Flags.Constant*/ 0, null, lt.Location); + current_variable = new BlockVariable (new VarExpr (GetLocation($1)), li); // new BlockConstant ((FullNamedExpression) $4, li); + } + opt_local_variable_initializer opt_variable_declarators stmnt_end_semicolon + /* const_variable_initializer opt_const_declarators stmnt_end_semicolon */ + { + $$ = current_variable; + current_variable = null; + lbag.AddLocation ($$, GetLocation ($1), GetLocation ($7)); + } + ; + +opt_local_variable_initializer + : /* empty */ + | ASSIGN block_variable_initializer + { + current_variable.Initializer = (Expression) $2; + PushLocation (GetLocation ($1)); + $$ = current_variable; + } + | error + { + if (yyToken == Token.OPEN_BRACKET_EXPR) { + report.Error (650, lexer.Location, + "Syntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier. To declare a fixed size buffer field, use the fixed keyword before the field type"); + } else { + Error_SyntaxError (yyToken); + } + } + ; + +opt_variable_declarators + : /* empty */ + | variable_declarators + ; + +opt_using_or_fixed_variable_declarators + : /* empty */ + | variable_declarators + { + foreach (var d in current_variable.Declarators) { + if (d.Initializer == null) + Error_MissingInitializer (d.Variable.Location); + } + } + ; + +variable_declarators + : variable_declarator + | variable_declarators variable_declarator + ; + +variable_declarator + : COMMA identifier_inside_body + { + var lt = (LocatedToken) $2; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, current_variable.TypeExpression, lt.Location); + var d = new BlockVariableDeclarator (li, null); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation ($1)); + } + | COMMA identifier_inside_body ASSIGN block_variable_initializer + { + var lt = (LocatedToken) $2; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, current_variable.TypeExpression, lt.Location); + var d = new BlockVariableDeclarator (li, (Expression) $4); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation ($1), GetLocation ($3)); + } + | COMMA identifier_inside_body COLON type + { + var lt = (LocatedToken) $2; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, (FullNamedExpression) $4, lt.Location); + var d = new BlockVariableDeclarator (li, null, (FullNamedExpression) $4); + d.Location = GetLocation($2); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation ($1)); + } + | COMMA identifier_inside_body COLON type ASSIGN block_variable_initializer + { + var lt = (LocatedToken) $2; + var li = GetOrCreateLocalVariable (current_variable.Variable.Block, lt.Value, + current_variable.Variable.DeclFlags, (FullNamedExpression) $4, lt.Location); + var d = new BlockVariableDeclarator (li, (Expression) $6, (FullNamedExpression) $4); + d.Location = GetLocation($2); + current_variable.AddDeclarator (d); + lbag.AddLocation (d, GetLocation ($1), GetLocation ($5)); + } + ; + +//const_variable_initializer +// : /* empty */ +// { +// report.Error (145, lexer.Location, "A const field requires a value to be provided"); +// } +// | ASSIGN constant_initializer_expr +// { +// current_variable.Initializer = (Expression) $2; +// } +// ; +// +//opt_const_declarators +// : /* empty */ +// | const_declarators +// ; +// +//const_declarators +// : const_declarator +// | const_declarators const_declarator +// ; +// +//const_declarator +// : COMMA identifier_inside_body ASSIGN constant_initializer_expr +// { +// var lt = (LocatedToken) $2; +// var li = GetOrCreateLocalVariable (current_block, lt.Value, +// LocalVariable.Flags.Constant, current_variable.TypeExpression, lt.Location); +// var d = new BlockVariableDeclarator (li, (Expression) $4); +// current_variable.AddDeclarator (d); +// lbag.AddLocation (d, GetLocation ($1), GetLocation ($3)); +// } +// ; + +block_variable_initializer + : variable_initializer +// | STACKALLOC simple_type OPEN_BRACKET_EXPR expression CLOSE_BRACKET +// { +// $$ = new StackAlloc ((Expression) $2, (Expression) $4, GetLocation ($1)); +// lbag.AddLocation ($$, GetLocation ($3), GetLocation ($5)); +// } +// | STACKALLOC simple_type +// { +// report.Error (1575, GetLocation ($1), "A stackalloc expression requires [] after type"); +// $$ = new StackAlloc ((Expression) $2, null, GetLocation ($1)); +// } + ; + +expression_statement + : statement_expression stmnt_end_semicolon + { + $$ = $1; + lbag.AddStatement ($$, GetLocation ($2)); + } + | statement_expression COMPLETE_COMPLETION { $$ = $1; } + | statement_expression CLOSE_BRACE + { + $$ = $1; + report.Error (1002, GetLocation ($2), "; expected"); + lexer.putback ('}'); + } + ; + +interactive_expression_statement + : interactive_statement_expression SEMICOLON { $$ = $1; } + | interactive_statement_expression COMPLETE_COMPLETION { $$ = $1; } + ; + + // + // We have to do the wrapping here and not in the case above, + // because statement_expression is used for example in for_statement + // +statement_expression + : expression + { + $$ = ConvertExpressionToStatement((Expression)$1); + } + ; + +interactive_statement_expression + : expression + { + Expression expr = (Expression) $1; + $$ = new StatementExpression (new OptionalAssign (expr, lexer.Location)); + } + | error + { + Error_SyntaxError (yyToken); + $$ = new EmptyStatement (GetLocation ($1)); + } + ; + +selection_statement + : if_statement + | switch_statement + ; + +stmnt_close_parens + : CLOSE_PARENS + { + Lexer.AutoSemiInsertionAfter = 1; + } + ; + +stmnt_else + : ELSE + { + Lexer.AutoSemiInsertionAfter = 1; + } + ; + +if_statement + : IF open_parens_any boolean_expression stmnt_close_parens + embedded_statement + { + if ($5 is EmptyStatement) + Warning_EmptyStatement (GetLocation ($5)); + + $$ = new If ((BooleanExpression) $3, (Statement) $5, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | IF open_parens_any boolean_expression stmnt_close_parens + embedded_statement stmnt_else embedded_statement + { + $$ = new If ((BooleanExpression) $3, (Statement) $5, (Statement) $7, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4), GetLocation ($6)); + + if ($5 is EmptyStatement) + Warning_EmptyStatement (GetLocation ($5)); + if ($7 is EmptyStatement) + Warning_EmptyStatement (GetLocation ($7)); + } + | IF open_parens_any boolean_expression error + { + Error_SyntaxError (yyToken); + + $$ = new If ((BooleanExpression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } + ; + +switch_statement + : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE + { + Lexer.AutoSemiInsertion = true; + start_block (GetLocation ($5)); + } + opt_switch_sections CLOSE_BRACE + { + $$ = new Switch ((Expression) $3, (ExplicitBlock) current_block.Explicit, GetLocation ($1)); + end_block (GetLocation ($8)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | SWITCH open_parens_any expression error + { + Error_SyntaxError (yyToken); + + $$ = new Switch ((Expression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } + ; + +opt_switch_sections + : /* empty */ + { + report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + } + | switch_labels + { + report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); + } + | switch_sections opt_switch_labels + ; + +switch_sections + : switch_section + | switch_sections switch_section + | error + { + Error_SyntaxError (yyToken); + } + ; + +switch_section + : switch_labels statement_list + ; + +opt_switch_labels + : /* empty */ + | switch_labels + ; + +switch_labels + : switch_label + { + var label = (SwitchLabel) $1; + label.SectionStart = true; + current_block.AddStatement (label); + } + | switch_labels switch_label + { + current_block.AddStatement ((Statement) $2); + } + ; + +switch_label + : CASE constant_expression COLON + { + $$ = new SwitchLabel ((Expression) $2, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3)); + Lexer.AutoSemiInsertionAfter = 1; + } + | CASE constant_expression error + { + Error_SyntaxError (yyToken); + $$ = new SwitchLabel ((Expression) $2, GetLocation ($1)); + } + | DEFAULT_COLON + { + $$ = new SwitchLabel (null, GetLocation ($1)); + Lexer.AutoSemiInsertionAfter = 1; + } + ; + +iteration_statement + : while_statement + | do_statement + | for_statement + | foreach_statement + ; + +while_statement + : WHILE open_parens_any boolean_expression stmnt_close_parens embedded_statement + { + if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($5)); + + $$ = new While ((BooleanExpression) $3, (Statement) $5, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | WHILE open_parens_any boolean_expression error + { + Error_SyntaxError (yyToken); + + $$ = new While ((BooleanExpression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } + ; + +stmnt_do + : DO + { + Lexer.AutoSemiInsertionAfter = 1; + } + ; + +do_while_stmnt_close_parens + : CLOSE_PARENS + { + Lexer.AutoSemiInsertion = true; + } + ; + +do_statement + : stmnt_do embedded_statement WHILE open_parens_any boolean_expression do_while_stmnt_close_parens stmnt_end_semicolon + { + Lexer.AutoSemiInsertion = true; + + $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1), GetLocation ($3)); + lbag.AddStatement ($$, GetLocation ($3), GetLocation ($4), GetLocation ($6), GetLocation ($7)); + } + | stmnt_do embedded_statement error + { + Lexer.AutoSemiInsertion = true; + + Error_SyntaxError (yyToken); + $$ = new Do ((Statement) $2, null, GetLocation ($1), Location.Null); + } + | stmnt_do embedded_statement WHILE open_parens_any boolean_expression error + { + Lexer.AutoSemiInsertion = true; + + Error_SyntaxError (yyToken); + + $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1), GetLocation ($3)); + lbag.AddStatement ($$, GetLocation ($3), GetLocation ($4)); + } + ; + +for_statement + : FOR open_parens_any + { + start_block (GetLocation ($2)); + current_block.IsCompilerGenerated = true; + lexer.ForInParsing = true; + $$ = new Tuple(GetLocation($0), GetLocation($1)); + } + for_statement_cont + { + lexer.ForInParsing = false; + $$ = $4; + } + ; + +// Has to use be extra rule to recover started block +for_statement_cont + : for_initializer IN + { + lexer.ForInParsing = false; + } + expression stmnt_close_parens embedded_statement + { + if ($6 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($6)); + + var blockVar = $1 as BlockVariable; + if (blockVar != null) { + if (blockVar == null || blockVar.Initializer != null || blockVar.Declarators != null) { + report.Error (7036, GetLocation ($4), "Invalid for each initializer"); + $$ = end_block (current_block.StartLocation); + } else { + var locations = (Tuple) $0; + + Foreach f = new Foreach (blockVar.TypeExpression, blockVar.Variable, (Expression) $4, (Statement) $6, current_block, AsForEachType.ForEachKey, locations.Item1); + lbag.AddStatement (f, locations.Item2, GetLocation ($2), GetLocation ($5)); + + end_block (GetLocation ($5)); + $$ = f; + } + } else { + var expList = $1 as List; + var varRef = ($1 as FullNamedExpression) ?? ((expList != null && expList.Count == 1) ? (expList[0] as FullNamedExpression) : null); + if (varRef == null) { + report.Error (7041, GetLocation ($1), "Invalid iterator initializer"); + $$ = end_block (current_block.StartLocation); + } else { + var locations = (Tuple) $0; + + Foreach f = new Foreach (varRef, (Expression) $4, (Statement) $6, current_block, AsForEachType.ForEachKey, locations.Item1); + lbag.AddStatement (f, locations.Item2, GetLocation ($2), GetLocation ($5)); + + end_block (GetLocation ($5)); + $$ = f; + } + } + } + | opt_for_initializer SEMICOLON + { + lexer.ForInParsing = false; + + var locations = (Tuple) $0; + + For f = new For (locations.Item1); + current_block.AddStatement (f); + + var expList = $1 as List; + if (expList != null) + f.Initializer = ExpressionListToStatementList (expList); + else + f.Initializer = (Statement) $1; + + // Pass the "For" object to the iterator_part4 + oob_stack.Push (f); + + $$ = f; + } + for_condition_and_iterator_part + embedded_statement + { + var locations = (Tuple) $4; + oob_stack.Pop (); + if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($5)); + + For f = ((For) $3); + f.Statement = (Statement) $5; + lbag.AddStatement (f, current_block.StartLocation, GetLocation ($2), GetLocation (locations.Item1), GetLocation (locations.Item2)); + + $$ = end_block (GetLocation ($2)); + } + | error + { + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + $$ = end_block (current_block.StartLocation); + } + ; + +for_condition_and_iterator_part + : opt_for_condition SEMICOLON + { + For f = (For) oob_stack.Peek (); + f.Condition = (BooleanExpression) $1; + } + for_iterator_part { + $$ = new Tuple (GetLocation ($2), (Location) $4); + } + + // Handle errors in the case of opt_for_condition being followed by + // a close parenthesis + | opt_for_condition close_parens_close_brace { + Lexer.AutoSemiInsertion = true; + report.Error (1525, GetLocation ($2), "Unexpected symbol `}'"); + For f = (For) oob_stack.Peek (); + f.Condition = (BooleanExpression) $1; + $$ = new Tuple (GetLocation ($2), GetLocation ($2)); + } + ; + +for_iterator_part + : opt_for_iterator stmnt_close_parens { + For f = (For) oob_stack.Peek (); + f.Iterator = (Statement) $1; + $$ = GetLocation ($2); + } + | opt_for_iterator CLOSE_BRACE { + Lexer.AutoSemiInsertion = true; + report.Error (1525, GetLocation ($2), "Unexpected symbol expected ')'"); + For f = (For) oob_stack.Peek (); + f.Iterator = (Statement) $1; + $$ = GetLocation ($2); + } + ; + +close_parens_close_brace + : CLOSE_PARENS + | CLOSE_BRACE { lexer.putback ('}'); } + ; + +opt_for_initializer + : /* empty */ { $$ = new EmptyStatement (lexer.Location); } + | for_initializer + ; + +for_initializer + : VAR identifier_inside_body opt_type + { + var lt = (LocatedToken) $2; + var type = (FullNamedExpression) $3; + if (type == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + type = new UntypedTypeExpression (GetLocation ($2)); + } + var li = GetOrCreateLocalVariable (current_block, lt.Value, 0, type, lt.Location); + current_variable = new BlockVariable (type, li); + } + opt_local_variable_initializer opt_variable_declarators + { + $$ = current_variable; + current_variable = null; + } + | expression_list + { + + } + ; + +opt_type + : /* empty */ + { + $$ = null; + } + | COLON type + { + $$ = $2; + } + ; + +opt_for_condition + : /* empty */ { $$ = null; } + | boolean_expression + ; + +opt_for_iterator + : /* empty */ { $$ = new EmptyStatement (lexer.Location); } + | for_iterator + ; + +for_iterator + : statement_expression_list + ; + +statement_expression_list + : statement_expression + | statement_expression_list COMMA statement_expression + { + var sl = $1 as StatementList; + if (sl == null) { + sl = new StatementList ((Statement) $1, (Statement) $3); + lbag.AddStatement (sl, GetLocation ($2)); + } else { + sl.Add ((Statement) $3); + lbag.AppendTo (sl, GetLocation ($2)); + } + + $$ = sl; + } + ; + +foreach_statement + : FOR_EACH + { + lexer.ForInParsing = true; + } + open_parens_any for_initializer IN + { + lexer.ForInParsing = false; + } + expression stmnt_close_parens + { + start_block (GetLocation ($3)); + current_block.IsCompilerGenerated = true; + } + embedded_statement + { + if ($10 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($10)); + + var blockVar = $4 as BlockVariable; + if (blockVar != null) { + if (blockVar == null || blockVar.Initializer != null || blockVar.Declarators != null) { + report.Error (7036, GetLocation ($4), "Invalid for each initializer"); + $$ = end_block (current_block.StartLocation); + } else { + Foreach f = new Foreach (blockVar.TypeExpression, blockVar.Variable, (Expression) $7, (Statement) $10, current_block, AsForEachType.ForEachValue, GetLocation ($1)); + lbag.AddStatement (f, GetLocation ($3), GetLocation ($5), GetLocation ($8)); + + end_block (GetLocation ($5)); + $$ = f; + } + } else { + var expList = $4 as List; + var varRef = ($4 as FullNamedExpression) ?? ((expList != null && expList.Count == 1) ? (expList[0] as FullNamedExpression) : null); + if (varRef == null) { + report.Error (7041, GetLocation ($4), "Invalid iterator initializer"); + $$ = end_block (current_block.StartLocation); + } else { + Foreach f = new Foreach (varRef, (Expression) $7, (Statement) $10, current_block, AsForEachType.ForEachValue, GetLocation ($1)); + lbag.AddStatement (f, GetLocation ($3), GetLocation ($5), GetLocation ($8)); + + end_block (GetLocation ($5)); + $$ = f; + } + } + } + ; + +jump_statement + : break_statement + | continue_statement + | goto_statement + | return_statement + | throw_statement + | yield_statement + | use_namespace_statement + ; + +break_statement + : BREAK stmnt_end_semicolon + { + $$ = new Break (GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } + ; + +continue_statement + : CONTINUE stmnt_end_semicolon + { + $$ = new Continue (GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } + | CONTINUE error + { + Error_SyntaxError (yyToken); + $$ = new Continue (GetLocation ($1)); + } + ; + +goto_statement + : GOTO identifier_inside_body stmnt_end_semicolon + { + var lt = (LocatedToken) $2; + $$ = new Goto (lt.Value, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($3)); + } + | GOTO CASE constant_expression stmnt_end_semicolon + { + $$ = new GotoCase ((Expression) $3, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | GOTO DEFAULT stmnt_end_semicolon + { + $$ = new GotoDefault (GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($3)); + } + ; + +return_statement + : RETURN opt_expression stmnt_end_semicolon + { + $$ = new Return ((Expression) $2, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($3)); + } + | RETURN expression error + { + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + $$ = new Return ((Expression) $2, GetLocation ($1)); + } + | RETURN error + { + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + $$ = new Return (null, GetLocation ($1)); + } + ; + +throw_statement + : THROW opt_expression stmnt_end_semicolon + { + $$ = new Throw ((Expression) $2, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($3)); + } + | THROW expression error + { + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + $$ = new Throw ((Expression) $2, GetLocation ($1)); + } + | THROW error + { + Lexer.AutoSemiInsertion = true; + Error_SyntaxError (yyToken); + $$ = new Throw (null, GetLocation ($1)); + } + ; + +yield_statement + : identifier_inside_body RETURN opt_expression stmnt_end_semicolon + { + var lt = (LocatedToken) $1; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if ($3 == null) { + report.Error (1627, GetLocation ($4), "Expression expected after yield return"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + $$ = new Yield ((Expression) $3, lt.Location); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | identifier_inside_body RETURN expression error + { + Lexer.AutoSemiInsertion = true; + + Error_SyntaxError (yyToken); + + var lt = (LocatedToken) $1; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if ($3 == null) { + report.Error (1627, GetLocation ($4), "Expression expected after yield return"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + $$ = new Yield ((Expression) $3, lt.Location); + lbag.AddStatement ($$, GetLocation ($2)); + } + | identifier_inside_body BREAK stmnt_end_semicolon + { + var lt = (LocatedToken) $1; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + $$ = new YieldBreak (lt.Location); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($3)); + } + ; + +opt_expression + : /* empty */ + | expression + ; + +try_statement + : TRY block catch_clauses + { + $$ = new TryCatch ((Block) $2, (List) $3, GetLocation ($1), false); + } + | TRY block FINALLY block + { + //$$ = new TryFinally ((Statement) $2, (Block) $4, GetLocation ($1)); + $$ = new TryFinally ((Statement) $2, (ExplicitBlock) $4, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($3)); + } + | TRY block catch_clauses FINALLY block + { + //$$ = new TryFinally (new TryCatch ((Block) $2, (List) $3, Location.Null, true), (Block) $5, GetLocation ($1)); + //lbag.AddStatement ($$, GetLocation ($4)); + $$ = new TryFinally (new TryCatch ((Block) $2, (List) $3, Location.Null, true), (ExplicitBlock) $5, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($4)); + } + | TRY block error + { + Error_SyntaxError (1524, yyToken); + $$ = new TryCatch ((Block) $2, null, GetLocation ($1), false); + } + ; + +catch_clauses + : catch_clause + { + var l = new List (2); + + l.Add ((Catch) $1); + $$ = l; + } + | catch_clauses catch_clause + { + var l = (List) $1; + + Catch c = (Catch) $2; + var prev_catch = l [l.Count - 1]; + if (prev_catch.IsGeneral && prev_catch.Filter == null) { + report.Error (1017, c.loc, "Try statement already has an empty catch block"); + } + + l.Add (c); + $$ = l; + } + ; + +catch_clause + : CATCH opt_catch_filter block + { + //$$ = new Catch ((Block) $2, GetLocation ($1)); + //$$ = new Catch ((ExplicitBlock) $2, GetLocation ($1)); + var c = new Catch ((ExplicitBlock) $3, GetLocation ($1)); + c.Filter = (CatchFilterExpression) $2; + $$ = c; + } + | CATCH open_parens_any IDENTIFIER opt_type CLOSE_PARENS + { + start_block (GetLocation ($2)); + var lt = (LocatedToken) $3; + var type = (FullNamedExpression) $4; + if (type == null) { + if (settings.PsStrictMode) + report.Error (7012, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + else + report.Warning (1009, 1, lt.Location, "Variable `{0}' has no type declaration.", lt.Value); + type = new UntypedExceptionExpression (lt.Location); + } + + if (type.Type != null && type.Type.IsDynamic) + type = new UntypedExceptionExpression (lt.Location); + + //var c = new Catch (current_block, GetLocation ($1)); + var c = new Catch ((ExplicitBlock) current_block, GetLocation ($1)); + c.TypeExpression = type; + c.Variable = new LocalVariable (current_block, lt.Value, lt.Location); + c.Variable.TypeExpr = c.TypeExpression; + current_block.AddLocalName (c.Variable); + + lbag.AddLocation (c, GetLocation ($2), GetLocation ($5)); + $$ = c; + } + opt_catch_filter block_prepared + { + ((Catch) $6).Filter = (CatchFilterExpression) $7; + $$ = $6; + } + | CATCH open_parens_any error + { + if (yyToken == Token.CLOSE_PARENS) { + report.Error (1015, lexer.Location, + "A type that derives from `System.Exception', `object', or `string' expected"); + } else { + Error_SyntaxError (yyToken); + } + + $$ = new Catch (null, GetLocation ($1)); + } + ; + +opt_catch_filter + : /* empty */ + | IF open_parens_any expression CLOSE_PARENS + { + if (lang_version <= LanguageVersion.V_5) + FeatureIsNotAvailable (GetLocation ($1), "exception filter"); + + $$ = new CatchFilterExpression ((Expression) $3, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($2), GetLocation ($4)); + } + ; + +checked_statement + : CHECKED block + { + $$ = new Checked ((Block) $2, GetLocation ($1)); + } + ; + +unchecked_statement + : UNCHECKED block + { + $$ = new Unchecked ((Block) $2, GetLocation ($1)); + } + ; + +unsafe_statement + : UNSAFE + { + if (!settings.Unsafe) + Error_UnsafeCodeNotAllowed (GetLocation ($1)); + } block { + $$ = new Unsafe ((Block) $3, GetLocation ($1)); + } + ; + +lock_statement + : LOCK open_parens_any expression CLOSE_PARENS embedded_statement + { + if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($5)); + + $$ = new Lock ((Expression) $3, (Statement) $5, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | LOCK open_parens_any expression error + { + Error_SyntaxError (yyToken); + + $$ = new Lock ((Expression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } + ; + +fixed_statement + : FIXED open_parens_any type identifier_inside_body + { + start_block (GetLocation ($2)); + + current_block.IsCompilerGenerated = true; + var lt = (LocatedToken) $4; + var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.FixedVariable | LocalVariable.Flags.Used, lt.Location); + current_block.AddLocalName (li); + current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) $3, li); + } + using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS + { + $$ = current_variable; + current_variable = null; + } + embedded_statement + { + if ($10 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($10)); + + Fixed f = new Fixed ((Fixed.VariableDeclaration) $9, (Statement) $10, GetLocation ($1)); + current_block.AddStatement (f); + $$ = end_block (GetLocation ($8)); + } + ; + +using_statement + : USING open_parens_any variable_type identifier_inside_body + { + start_block (GetLocation ($2)); + + current_block.IsCompilerGenerated = true; + var lt = (LocatedToken) $4; + var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.UsingVariable | LocalVariable.Flags.Used, lt.Location); + current_block.AddLocalName (li); + current_variable = new Using.VariableDeclaration ((FullNamedExpression) $3, li); + } + using_initialization CLOSE_PARENS + { + $$ = current_variable; + current_variable = null; + } + embedded_statement + { + CheckIsPlayScript("using", GetLocation($2)); + + if ($9 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($9)); + + Using u = new Using ((Using.VariableDeclaration) $8, (Statement) $9, GetLocation ($1)); + current_block.AddStatement (u); + $$ = end_block (GetLocation ($7)); + } + | USING open_parens_any expression CLOSE_PARENS embedded_statement + { + CheckIsPlayScript("using", GetLocation($2)); + + if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) + Warning_EmptyStatement (GetLocation ($5)); + + $$ = new Using ((Expression) $3, (Statement) $5, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | USING open_parens_any expression error + { + CheckIsPlayScript("using", GetLocation($2)); + + Error_SyntaxError (yyToken); + + $$ = new Using ((Expression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } + ; + +using_initialization + : using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators + | error + { + // It has to be here for the parent to safely restore artificial block + Error_SyntaxError (yyToken); + } + ; + +using_or_fixed_variable_initializer + : /* empty */ + { + Error_MissingInitializer (lexer.Location); + } + | ASSIGN variable_initializer + { + current_variable.Initializer = (Expression) $2; + $$ = current_variable; + } + ; + +//delete_statement +// : DELETE element_access SEMICOLON +// { +// $$ = new StatementExpression (new AsDelete ((Expression) $2, GetLocation ($1))); +// lbag.AddStatement ($$, GetLocation ($2)); +// } +// | DELETE member_access SEMICOLON +// { +// $$ = new StatementExpression (new AsDelete ((Expression) $2, GetLocation ($1))); +// lbag.AddStatement ($$, GetLocation ($2)); +// } +// ; + +// LINQ + +query_expression + : first_from_clause query_body + { + lexer.query_parsing = false; + + Linq.AQueryClause from = $1 as Linq.AQueryClause; + + from.Tail.Next = (Linq.AQueryClause)$2; + $$ = from; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + | nested_from_clause query_body + { + Linq.AQueryClause from = $1 as Linq.AQueryClause; + + from.Tail.Next = (Linq.AQueryClause)$2; + $$ = from; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + + // Bubble up COMPLETE_COMPLETION productions + | first_from_clause COMPLETE_COMPLETION { + lexer.query_parsing = false; + $$ = $1; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + | nested_from_clause COMPLETE_COMPLETION { + $$ = $1; + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + ; + +first_from_clause + : FROM_FIRST identifier_inside_body IN expression + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) $2; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + $$ = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$4, rv, GetLocation ($1))); + } + | FROM_FIRST type identifier_inside_body IN expression + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) $3; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + $$ = new Linq.QueryExpression ( + new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$5, rv, GetLocation ($1)) { + IdentifierType = (FullNamedExpression)$2 + } + ); + } + ; + +nested_from_clause + : FROM identifier_inside_body IN expression + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) $2; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + $$ = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$4, rv, GetLocation ($1))); + } + | FROM type identifier_inside_body IN expression + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + var lt = (LocatedToken) $3; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + $$ = new Linq.QueryExpression ( + new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)$5, rv, GetLocation ($1)) { + IdentifierType = (FullNamedExpression)$2 + } + ); + } + ; + +from_clause + : FROM identifier_inside_body IN + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + expression_or_error + { + var lt = (LocatedToken) $2; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + $$ = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)$5, GetLocation ($1)); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + } + | FROM type identifier_inside_body IN + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + expression_or_error + { + var lt = (LocatedToken) $3; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + + $$ = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)$6, GetLocation ($1)) { + IdentifierType = (FullNamedExpression)$2 + }; + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + } + ; + +query_body + : query_body_clauses select_or_group_clause opt_query_continuation + { + Linq.AQueryClause head = (Linq.AQueryClause)$2; + + if ($3 != null) + head.Next = (Linq.AQueryClause)$3; + + if ($1 != null) { + Linq.AQueryClause clause = (Linq.AQueryClause)$1; + clause.Tail.Next = head; + head = clause; + } + + $$ = head; + } + | select_or_group_clause opt_query_continuation + { + Linq.AQueryClause head = (Linq.AQueryClause)$2; + + if ($1 != null) { + Linq.AQueryClause clause = (Linq.AQueryClause)$1; + clause.Tail.Next = head; + head = clause; + } + + $$ = head; + } + | query_body_clauses COMPLETE_COMPLETION + | query_body_clauses error + { + report.Error (742, GetLocation ($2), "Unexpected symbol `{0}'. A query body must end with select or group clause", GetSymbolName (yyToken)); + $$ = $1; + } + | error + { + Error_SyntaxError (yyToken); + $$ = null; + } + ; + +select_or_group_clause + : SELECT + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + expression_or_error + { + $$ = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)$3, GetLocation ($1)); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + | GROUP + { + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock)current_block); + } + expression_or_error + { + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + BY expression_or_error + { + $$ = new Linq.GroupBy ((Linq.QueryBlock)current_block, (Expression)$3, linq_clause_blocks.Pop (), (Expression)$6, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($5)); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + ; + +query_body_clauses + : query_body_clause + | query_body_clauses query_body_clause + { + ((Linq.AQueryClause)$1).Tail.Next = (Linq.AQueryClause)$2; + $$ = $1; + } + ; + +query_body_clause + : from_clause + | let_clause + | where_clause + | join_clause + | orderby_clause + ; + +let_clause + : LET identifier_inside_body ASSIGN + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + expression_or_error + { + var lt = (LocatedToken) $2; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + $$ = new Linq.Let ((Linq.QueryBlock) current_block, sn, (Expression)$5, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3)); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + } + ; + +where_clause + : WHERE + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + expression_or_error + { + $$ = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)$3, GetLocation ($1)); + + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + } + ; + +join_clause + : JOIN identifier_inside_body IN + { + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + expression_or_error ON + { + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + expression_or_error EQUALS + { + current_block.AddStatement (new ContextualReturn ((Expression) $8)); + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + expression_or_error opt_join_into + { + current_block.AddStatement (new ContextualReturn ((Expression) $11)); + current_block.SetEndLocation (lexer.Location); + + var outer_selector = linq_clause_blocks.Pop (); + var block = linq_clause_blocks.Pop (); + + var lt = (LocatedToken) $2; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + Linq.RangeVariable into; + + if ($12 == null) { + into = sn; + $$ = new Linq.Join (block, sn, (Expression)$5, outer_selector, (Linq.QueryBlock) current_block, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3), GetLocation ($6), GetLocation ($9)); + } else { + // + // Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions + // + var parent = block.Parent; + while (parent is Linq.QueryBlock) { + parent = parent.Parent; + } + current_block.Parent = parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + + lt = (LocatedToken) $12; + into = new Linq.RangeVariable (lt.Value, lt.Location); + + $$ = new Linq.GroupJoin (block, sn, (Expression)$5, outer_selector, (Linq.QueryBlock) current_block, into, GetLocation ($1)); + lbag.AddLocation ($$, GetLocation ($3), GetLocation ($6), GetLocation ($9), GetLocation ($12)); + } + + current_block = block.Parent; + ((Linq.QueryBlock)current_block).AddRangeVariable (into); + } + | JOIN type identifier_inside_body IN + { + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + expression_or_error ON + { + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + expression_or_error EQUALS + { + current_block.AddStatement (new ContextualReturn ((Expression) $9)); + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + expression_or_error opt_join_into + { + current_block.AddStatement (new ContextualReturn ((Expression) $12)); + current_block.SetEndLocation (lexer.Location); + + var outer_selector = linq_clause_blocks.Pop (); + var block = linq_clause_blocks.Pop (); + + var lt = (LocatedToken) $3; + var sn = new Linq.RangeVariable (lt.Value, lt.Location); + Linq.RangeVariable into; + + if ($13 == null) { + into = sn; + $$ = new Linq.Join (block, sn, (Expression)$6, outer_selector, (Linq.QueryBlock) current_block, GetLocation ($1)) { + IdentifierType = (FullNamedExpression)$2 + }; + } else { + // + // Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions + // + var parent = block.Parent; + while (parent is Linq.QueryBlock) { + parent = parent.Parent; + } + current_block.Parent = parent; + + ((Linq.QueryBlock)current_block).AddRangeVariable (sn); + + lt = (LocatedToken) $13; + into = new Linq.RangeVariable (lt.Value, lt.Location); // TODO: + + $$ = new Linq.GroupJoin (block, sn, (Expression)$6, outer_selector, (Linq.QueryBlock) current_block, into, GetLocation ($1)) { + IdentifierType = (FullNamedExpression)$2 + }; + } + + current_block = block.Parent; + ((Linq.QueryBlock)current_block).AddRangeVariable (into); + } + ; + +opt_join_into + : /* empty */ + | INTO identifier_inside_body + { + $$ = $2; + } + ; + +orderby_clause + : ORDERBY + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + orderings + { + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + $$ = $3; + } + ; + +orderings + : order_by + | order_by COMMA + { + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + orderings_then_by + { + ((Linq.AQueryClause)$1).Next = (Linq.AQueryClause)$4; + $$ = $1; + } + ; + +orderings_then_by + : then_by + | orderings_then_by COMMA + { + current_block.SetEndLocation (lexer.Location); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location); + } + then_by + { + ((Linq.AQueryClause)$1).Tail.Next = (Linq.AQueryClause)$4; + $$ = $1; + } + ; + +order_by + : expression + { + $$ = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)$1); + } + | expression ASCENDING + { + $$ = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)$1); + lbag.AddLocation ($$, GetLocation ($2)); + } + | expression DESCENDING + { + $$ = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)$1); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + +then_by + : expression + { + $$ = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)$1); + } + | expression ASCENDING + { + $$ = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)$1); + lbag.AddLocation ($$, GetLocation ($2)); + } + | expression DESCENDING + { + $$ = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)$1); + lbag.AddLocation ($$, GetLocation ($2)); + } + ; + + +opt_query_continuation + : /* empty */ + | INTO identifier_inside_body + { + // query continuation block is not linked with query block but with block + // before. This means each query can use same range variable names for + // different identifiers. + + current_block.SetEndLocation (GetLocation ($1)); + current_block = current_block.Parent; + + current_block = new Linq.QueryBlock (current_block, lexer.Location); + + if (linq_clause_blocks == null) + linq_clause_blocks = new Stack (); + + linq_clause_blocks.Push ((Linq.QueryBlock) current_block); + } + query_body + { + var current_block = linq_clause_blocks.Pop (); + var lt = (LocatedToken) $2; + var rv = new Linq.RangeVariable (lt.Value, lt.Location); + $$ = new Linq.QueryStartClause ((Linq.QueryBlock)current_block, null, rv, GetLocation ($1)) { + next = (Linq.AQueryClause)$4 + }; + } + ; + +// +// Support for using the compiler as an interactive parser +// +// The INTERACTIVE_PARSER token is first sent to parse our +// productions; If the result is a Statement, the parsing +// is repeated, this time with INTERACTIVE_PARSE_WITH_BLOCK +// to setup the blocks in advance. +// +// This setup is here so that in the future we can add +// support for other constructs (type parsing, namespaces, etc) +// that do not require a block to be setup in advance +// + +interactive_parsing + : EVAL_STATEMENT_PARSER EOF + | EVAL_USING_DECLARATIONS_UNIT_PARSER package_directives opt_COMPLETE_COMPLETION + | EVAL_STATEMENT_PARSER + { + current_container = current_type = new Class (current_container, new MemberName (""), Modifiers.PUBLIC, null); + + // (ref object retval) + Parameter [] mpar = new Parameter [1]; + mpar [0] = new Parameter (new TypeExpression (compiler.BuiltinTypes.Object, Location.Null), "$retval", Parameter.Modifier.REF, null, Location.Null); + + ParametersCompiled pars = new ParametersCompiled (mpar); + var mods = Modifiers.PUBLIC | Modifiers.STATIC; + if (settings.Unsafe) + mods |= Modifiers.UNSAFE; + + current_local_parameters = pars; + var method = new InteractiveMethod ( + current_type, + new TypeExpression (compiler.BuiltinTypes.Void, Location.Null), + mods, + pars); + + current_type.AddMember (method); + oob_stack.Push (method); + + interactive_async = false; + + ++lexer.parsing_block; + start_block (lexer.Location); + } + interactive_statement_list opt_COMPLETE_COMPLETION + { + --lexer.parsing_block; + var method = (InteractiveMethod) oob_stack.Pop (); + method.Block = (ToplevelBlock) end_block(lexer.Location); + + if (interactive_async == true) { + method.ChangeToAsync (); + } + + InteractiveResult = (Class) pop_current_class (); + current_local_parameters = null; + } + | EVAL_COMPILATION_UNIT_PARSER interactive_compilation_unit + ; + +interactive_compilation_unit + : opt_extern_alias_directives opt_package_directives + | opt_extern_alias_directives opt_package_directives package_declaration + ; + +opt_COMPLETE_COMPLETION + : /* nothing */ + | COMPLETE_COMPLETION + ; + +//close_brace_or_complete_completion +// : CLOSE_BRACE +// | COMPLETE_COMPLETION +// ; + +// +// XML documentation code references micro parser +// +documentation_parsing + : DOC_SEE doc_cref + { + module.DocumentationBuilder.ParsedName = (MemberName) $2; + } + ; + +doc_cref + : doc_type_declaration_name opt_doc_method_sig + { + module.DocumentationBuilder.ParsedParameters = (List)$2; + } +// | builtin_types opt_doc_method_sig +// { +// module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)$1; +// module.DocumentationBuilder.ParsedParameters = (List)$2; +// $$ = null; +// } +// | builtin_types DOT IDENTIFIER opt_doc_method_sig +// { +// module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)$1; +// module.DocumentationBuilder.ParsedParameters = (List)$4; +// var lt = (LocatedToken) $3; +// $$ = new MemberName (lt.Value); +// } + | doc_type_declaration_name DOT THIS + { + $$ = new MemberName ((MemberName) $1, MemberCache.IndexerNameAlias, Location.Null); + } + | doc_type_declaration_name DOT THIS OPEN_BRACKET + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + opt_doc_parameters CLOSE_BRACKET + { + module.DocumentationBuilder.ParsedParameters = (List)$6; + $$ = new MemberName ((MemberName) $1, MemberCache.IndexerNameAlias, Location.Null); + } + | EXPLICIT OPERATOR type opt_doc_method_sig + { + var p = (List)$4 ?? new List (1); + p.Add (new DocumentationParameter ((FullNamedExpression) $3)); + module.DocumentationBuilder.ParsedParameters = p; + module.DocumentationBuilder.ParsedOperator = Operator.OpType.Explicit; + $$ = null; + } + | IMPLICIT OPERATOR type opt_doc_method_sig + { + var p = (List)$4 ?? new List (1); + p.Add (new DocumentationParameter ((FullNamedExpression) $3)); + module.DocumentationBuilder.ParsedParameters = p; + module.DocumentationBuilder.ParsedOperator = Operator.OpType.Implicit; + $$ = null; + } + | OPERATOR overloadable_operator opt_doc_method_sig + { + var p = (List)$3 ?? new List (1); + module.DocumentationBuilder.ParsedParameters = p; + module.DocumentationBuilder.ParsedOperator = (Operator.OpType) $2; + $$ = null; + } + ; + +doc_type_declaration_name + : type_declaration_name + | doc_type_declaration_name DOT type_declaration_name + { + $$ = new MemberName (((MemberName) $1), (MemberName) $3); + } + ; + +opt_doc_method_sig + : /* empty */ + | OPEN_PARENS + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } + opt_doc_parameters CLOSE_PARENS + { + $$ = $3; + } + ; + +opt_doc_parameters + : /* empty */ + { + $$ = new List (0); + } + | doc_parameters + ; + +doc_parameters + : doc_parameter + { + var parameters = new List (); + parameters.Add ((DocumentationParameter) $1); + $$ = parameters; + } + | doc_parameters COMMA doc_parameter + { + var parameters = $1 as List; + parameters.Add ((DocumentationParameter) $3); + $$ = parameters; + } + ; + +doc_parameter + : opt_parameter_modifier parameter_type + { + if ($1 != null) + $$ = new DocumentationParameter ((Parameter.Modifier) $1, (FullNamedExpression) $2); + else + $$ = new DocumentationParameter ((FullNamedExpression) $2); + } + ; + +%% + +// +// A class used to hold info about an operator declarator +// +class OperatorDeclaration { + public readonly Operator.OpType optype; + public readonly FullNamedExpression ret_type; + public readonly Location location; + + public OperatorDeclaration (Operator.OpType op, FullNamedExpression ret_type, Location location) + { + optype = op; + this.ret_type = ret_type; + this.location = location; + } +} + +void Error_ExpectingTypeName (Expression expr) +{ + if (expr is Invocation){ + report.Error (1002, expr.Location, "Expecting `;'"); + } else { + expr.Error_InvalidExpressionStatement (report); + } +} + +void Error_ParameterModifierNotValid (string modifier, Location loc) +{ + report.Error (631, loc, "The parameter modifier `{0}' is not valid in this context", + modifier); +} + +void Error_DuplicateParameterModifier (Location loc, Parameter.Modifier mod) +{ + report.Error (1107, loc, "Duplicate parameter modifier `{0}'", + Parameter.GetModifierSignature (mod)); +} + +void Error_TypeExpected (Location loc) +{ + report.Error (1031, loc, "Type expected"); +} + +void Error_UnsafeCodeNotAllowed (Location loc) +{ + report.Error (227, loc, "Unsafe code requires the `unsafe' command line option to be specified"); +} + +void Warning_EmptyStatement (Location loc) +{ + report.Warning (642, 3, loc, "Possible mistaken empty statement"); +} + +void Error_NamedArgumentExpected (NamedArgument a) +{ + report.Error (1738, a.Location, "Named arguments must appear after the positional arguments"); +} + +void Error_MissingInitializer (Location loc) +{ + report.Error (210, loc, "You must provide an initializer in a fixed or using statement declaration"); +} + +object Error_AwaitAsIdentifier (object token) +{ + if (async_block) { + report.Error (4003, GetLocation (token), "`await' cannot be used as an identifier within an async method"); + return new LocatedToken ("await", GetLocation (token)); + } + + return token; +} + +void push_current_container (TypeDefinition tc, object partial_token) +{ + if (module.Evaluator != null){ + tc.Definition.Modifiers = tc.ModFlags = (tc.ModFlags & ~Modifiers.AccessibilityMask) | Modifiers.PUBLIC; + if (undo == null) + undo = new Undo (); + + undo.AddTypeContainer (current_container, tc); + } + + if (is_config_enabled) { + if (partial_token != null) + current_container.AddPartial (tc); + else + current_container.AddTypeContainer (tc); + } + + ++lexer.parsing_declaration; + current_container = tc; + current_type = tc; +} + +TypeContainer pop_current_class () +{ + var retval = current_container; + + current_container = current_container.Parent; + current_type = current_type.Parent as TypeDefinition; + + return retval; +} + +[System.Diagnostics.Conditional ("FULL_AST")] +void StoreModifierLocation (object token, Location loc) +{ + if (lbag == null) + return; + + if (mod_locations == null) + mod_locations = new List> (); + + mod_locations.Add (Tuple.Create ((Modifiers) token, loc)); +} + +[System.Diagnostics.Conditional ("FULL_AST")] +void PushLocation (Location loc) +{ + if (location_stack == null) + location_stack = new Stack (); + + location_stack.Push (loc); +} + +Location PopLocation () +{ + if (location_stack == null) + return Location.Null; + + return location_stack.Pop (); +} + +//string CheckAttributeTarget (string a, Location l) +string CheckAttributeTarget (int token, string a, Location l) +{ + switch (a) { + case "assembly" : case "module" : case "field" : case "method" : case "param" : case "property" : case "type" : + return a; + } + +// report.Warning (658, 1, l, +// "`{0}' is invalid attribute target. All attributes in this attribute section will be ignored", a); + if (!Tokenizer.IsValidIdentifier (a)) { + Error_SyntaxError (token); + } else { + report.Warning (658, 1, l, + "`{0}' is invalid attribute target. All attributes in this attribute section will be ignored", a); + } + return string.Empty; +} + +bool IsPartial (object a) +{ + var attrs = a as Attributes; + if (attrs == null) + return false; + foreach (var attr in attrs.Attrs) { + if (attr.TypeExpression.Name == "Partial") + return true; + } + return false; +} + +static bool IsUnaryOperator (Operator.OpType op) +{ + switch (op) { + + case Operator.OpType.LogicalNot: + case Operator.OpType.OnesComplement: + case Operator.OpType.Increment: + case Operator.OpType.Decrement: + case Operator.OpType.True: + case Operator.OpType.False: + case Operator.OpType.UnaryPlus: + case Operator.OpType.UnaryNegation: + return true; + } + return false; +} + +void syntax_error (Location l, string msg) +{ + report.Error (1003, l, "Syntax error, " + msg); +} + +Tokenizer lexer; + +public Tokenizer Lexer { + get { + return lexer; + } +} + +public PlayScriptParser (SeekableStreamReader reader, CompilationSourceFile file, ParserSession session) + : this (reader, file, file.Compiler.Report, session) +{ +} + +public PlayScriptParser (SeekableStreamReader reader, CompilationSourceFile file, Report report, ParserSession session) +{ + this.file = file; + current_container = current_namespace = file; + + this.module = file.Module; + this.compiler = file.Compiler; + this.settings = compiler.Settings; + this.report = report; + + lang_version = settings.Version; + yacc_verbose_flag = settings.VerboseParserFlag; + doc_support = settings.DocumentationFile != null; + lexer = new Tokenizer (reader, file, session, report); + oob_stack = new Stack (); + lbag = session.LocationsBag; + use_global_stacks = session.UseJayGlobalArrays; + parameters_bucket = session.ParametersStack; +} + +public void parse () +{ + eof_token = Token.EOF; + + try { + if (yacc_verbose_flag > 1) + yyparse (lexer, new yydebug.yyDebugSimple ()); + else + yyparse (lexer); + + Tokenizer tokenizer = lexer as Tokenizer; + tokenizer.cleanup (); + } catch (Exception e){ + if (e is yyParser.yyUnexpectedEof) { + Error_SyntaxError (yyToken); + UnexpectedEOF = true; + return; + } + + if (e is yyParser.yyException) { + if (report.Errors == 0) + report.Error (-25, lexer.Location, "Parsing error"); + } else { + // Used by compiler-tester to test internal errors + if (yacc_verbose_flag > 0 || e is FatalException) + throw; + + report.Error (589, lexer.Location, "Internal compiler error during parsing" + e); + } + } +} + +void CheckToken (int error, int yyToken, string msg, Location loc) +{ + if (yyToken >= Token.FIRST_KEYWORD && yyToken <= Token.LAST_KEYWORD) + report.Error (error, loc, "{0}: `{1}' is a keyword", msg, GetTokenName (yyToken)); + else + report.Error (error, loc, msg); +} + +string ConsumeStoredComment () +{ + string s = tmpComment; + tmpComment = null; + Lexer.doc_state = XmlCommentState.Allowed; + return s; +} + +void FeatureIsNotAvailable (Location loc, string feature) +{ + report.FeatureIsNotAvailable (compiler, loc, feature); +} + +Location GetLocation (object obj) +{ + var lt = obj as LocatedToken; + if (lt != null) + return lt.Location; + + var mn = obj as MemberName; + if (mn != null) + return mn.Location; + + var expr = obj as Expression; + if (expr != null) + return expr.Location; + + return lexer.Location; +} + +void start_block (Location loc) +{ + if (current_block == null) { + current_block = new ToplevelBlock (compiler, current_local_parameters, loc); + parsing_anonymous_method = false; + } else if (parsing_anonymous_method) { + current_block = new ParametersBlock (current_block, current_local_parameters, loc); + parsing_anonymous_method = false; + } else { + current_block = new ExplicitBlock (current_block, loc, Location.Null); + } +} + +Block +end_block (Location loc) +{ + Block retval = current_block.Explicit; + retval.SetEndLocation (loc); + current_block = retval.Parent; + return retval; +} + +void start_anonymous (ParametersCompiled parameters, FullNamedExpression retType, bool isAsync, Location loc) +{ + oob_stack.Push (current_anonymous_method); + oob_stack.Push (current_local_parameters); + oob_stack.Push (current_variable); + oob_stack.Push (async_block); + oob_stack.Push (Lexer.PrevAutoSemiInsertion); // Auto semi will always be false after a FUNCTION keyword.. we want to know what it was before that. + + current_local_parameters = parameters; + if (lang_version == LanguageVersion.ISO_1) + FeatureIsNotAvailable (loc, "anonymous methods"); + + current_anonymous_method = new AnonymousMethodExpression (loc, parameters, retType); + + async_block = isAsync; + // Force the next block to be created as a ToplevelBlock + parsing_anonymous_method = true; +} + +/* + * Completes the anonymous method processing + */ +AnonymousMethodExpression end_anonymous (ParametersBlock anon_block) +{ + AnonymousMethodExpression retval; + + if (async_block) + anon_block.IsAsync = true; + + current_anonymous_method.Block = anon_block; + retval = current_anonymous_method; + + Lexer.AutoSemiInsertion = (bool) oob_stack.Pop (); + async_block = (bool) oob_stack.Pop (); + current_variable = (BlockVariable) oob_stack.Pop (); + current_local_parameters = (ParametersCompiled) oob_stack.Pop (); + current_anonymous_method = (AnonymousMethodExpression) oob_stack.Pop (); + + return retval; +} + +void Error_SyntaxError (int token) +{ + Error_SyntaxError (0, token); +} + +void Error_SyntaxError (int error_code, int token) +{ + Error_SyntaxError (error_code, token, "Unexpected symbol"); +} + +void Error_SyntaxError (int error_code, int token, string msg) +{ + Lexer.CompleteOnEOF = false; + + // An error message has been reported by tokenizer + if (token == Token.ERROR) + return; + + // Avoid duplicit error message after unterminated string literals + if (token == Token.LITERAL && lexer.Location.Column == 0) + return; + + string symbol = GetSymbolName (token); + string expecting = GetExpecting (); + var loc = lexer.Location - symbol.Length; + + if (error_code == 0) { + if (expecting == "`identifier'") { + if (token > Token.FIRST_KEYWORD && token < Token.LAST_KEYWORD) { + report.Error (1041, loc, "Identifier expected, `{0}' is a keyword", symbol); + return; + } + + error_code = 1001; + expecting = "identifier"; + } else if (expecting == "`)'") { + error_code = 1026; + } else { + error_code = 1525; + } + } + + if (string.IsNullOrEmpty (expecting)) + report.Error (error_code, loc, "{1} `{0}'", symbol, msg); + else + report.Error (error_code, loc, "{2} `{0}', expecting {1}", symbol, expecting, msg); +} + +void CheckIsPlayScript(string elem, Location loc) +{ + if (!parsing_playscript) { + report.Error (7035, loc, "`{0}' only supported in PlayScript", elem); + } + +} + +object ConvertAsType(SimpleName sn, object e) +{ + if (sn.Name == "Object") + return new TypeExpression (compiler.BuiltinTypes.Dynamic, GetLocation (e)); + else if (sn.Name == "Boolean") + return new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (e)); + else if (sn.Name == "Number") + return new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (e)); + else if (sn.Name == "String") + return new TypeExpression (compiler.BuiltinTypes.String, GetLocation (e)); + else if (sn.Name == "void") + return new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (e)); + else if (sn.Name == "Function") + return new TypeExpression (compiler.BuiltinTypes.Delegate, GetLocation (e)); + else if (sn.Name == "Class") + return new TypeExpression (compiler.BuiltinTypes.Type, GetLocation (e)); + else + return e; +} + +Statement ExpressionListToStatementList(List list) +{ + if (list.Count == 1) { + return ConvertExpressionToStatement(list[0]); + } else if (list.Count > 1) { + var sl = new StatementList(ConvertExpressionToStatement(list[0]), ConvertExpressionToStatement(list[1])); + for (var i = 2; i < list.Count; i++) { + sl.Add(ConvertExpressionToStatement(list[i])); + } + return sl; + } + + return new StatementErrorExpression (EmptyExpression.MissingValue); +} + +Statement ConvertExpressionToStatement(Expression ex) +{ + Statement ret; + ExpressionStatement s = ex as ExpressionStatement; + if (s == null) { + if (Lexer.ParsingPlayScript) { + ex.Error_InvalidExpressionStatement (report); + ret = new StatementErrorExpression (ex); + } else { + ret = new AsNonAssignStatementExpression (ex); + } + } else { + ret = new StatementExpression (s); + } + return ret; +} + +Expression MakeMonoSimdType(string typeName, Location loc) +{ + return new MemberAccess(new MemberAccess(new SimpleName("Mono", loc), "Simd", loc), typeName, loc); +} + +LocalVariable GetOrCreateLocalVariable(Block block, string name, LocalVariable.Flags flags, FullNamedExpression typeExpr, Location loc) +{ + INamedBlockVariable existing = null; + LocalVariable li = null; + + if (!parsing_playscript) { + if (block.ParametersBlock.TopBlock.GetLocalName (name, block, ref existing)) { + if (existing is LocalVariable) { + li = existing as LocalVariable; + if (li.TypeExpr != null && existing.TypeExpr != null && li.TypeExpr.Equals (existing.TypeExpr)) { + report.Warning (7138, 1, loc, "Variable is declared more than once."); + li.DeclFlags |= LocalVariable.Flags.AsIgnoreMultiple; + return li; + } + } + } + } + + li = new LocalVariable(block, name, flags, loc); + li.TypeExpr = typeExpr; + + block.AddLocalName (li); + + return li; +} + +string MakePrivateNamespaceName(NamespaceContainer prev_container, CompilationSourceFile file) +{ + StringBuilder sb = new StringBuilder(); + sb.Append("_"); + sb.Append(System.IO.Path.GetFileNameWithoutExtension(file.FileName)); + sb.Append("_private"); + for (var i = 0; i < sb.Length; i++) { + var ch = sb[i]; + if (ch != '_' && !char.IsLetterOrDigit(ch)) + sb[i] = '_'; + } + return sb.ToString(); +} + +bool IsConfigVarDefined(string configVar) +{ + string var_name = configVar.Replace("::", "_"); + return file.IsConditionalDefined (var_name) && file.GetConditionalValue (var_name) != "false"; +} + +string GetExpecting () +{ + int [] tokens = yyExpectingTokens (yyExpectingState); + var names = new List (tokens.Length); + bool has_type = false; + bool has_identifier = false; + for (int i = 0; i < tokens.Length; i++){ + int token = tokens [i]; + has_identifier |= token == Token.IDENTIFIER; + + string name = GetTokenName (token); + if (name == "") + continue; + + has_type |= name == "type"; + if (names.Contains (name)) + continue; + + names.Add (name); + } + + // + // Too many tokens to enumerate + // + if (names.Count > 8) + return null; + + if (has_type && has_identifier) + names.Remove ("identifier"); + + if (names.Count == 1) + return "`" + GetTokenName (tokens [0]) + "'"; + + StringBuilder sb = new StringBuilder (); + names.Sort (); + int count = names.Count; + for (int i = 0; i < count; i++){ + bool last = i + 1 == count; + if (last) + sb.Append ("or "); + sb.Append ('`'); + sb.Append (names [i]); + sb.Append (last ? "'" : count < 3 ? "' " : "', "); + } + return sb.ToString (); +} + + +string GetSymbolName (int token) +{ + switch (token){ + case Token.LITERAL: + return "Literal " + ((Constant)lexer.Value).GetValue ().ToString (); + case Token.IDENTIFIER: + case Token.IDENTIFIER_MODIFIER: + case Token.IDENTIFIER_CONFIG: + return "Identifier " + ((LocatedToken)lexer.Value).Value ?? ""; + case Token.BOOL: + return "bool"; + case Token.BOOLEAN: + return "boolean"; + case Token.BYTE: + return "byte"; + case Token.CHAR: + return "char"; + case Token.VOID: + return "void"; + case Token.DECIMAL: + return "decimal"; + case Token.DOUBLE: + return "double"; + case Token.DOUBLE2: + return "double2"; + case Token.DOUBLE3: + return "double3"; + case Token.DOUBLE4: + return "double4"; + case Token.DYNAMIC: + return "dynamic"; + case Token.FLOAT: + return "float"; + case Token.FLOAT2: + return "float2"; + case Token.FLOAT3: + return "float3"; + case Token.FLOAT4: + return "float4"; + case Token.INT: + return "int"; + case Token.LONG: + return "long"; + case Token.SBYTE: + return "sbyte"; + case Token.SHORT: + return "short"; + case Token.STRING: + return "string"; + case Token.UINT: + return "uint"; + case Token.ULONG: + return "ulong"; + case Token.USHORT: + return "ushort"; + case Token.OBJECT: + return "object"; + + case Token.PLUS: + return "+"; + case Token.UMINUS: + case Token.MINUS: + return "-"; + case Token.BANG: + return "!"; + case Token.BITWISE_AND: + return "&"; + case Token.BITWISE_OR: + return "|"; + case Token.LOGICAL_AND_ASSIGN: + return "&&="; + case Token.LOGICAL_OR_ASSIGN: + return "||="; + case Token.STAR: + return "*"; + case Token.PERCENT: + return "%"; + case Token.DIV: + return "/"; + case Token.CARRET: + return "^"; + case Token.OP_INC: + return "++"; + case Token.OP_DEC: + return "--"; + case Token.OP_SHIFT_LEFT: + return "<<"; + case Token.OP_SHIFT_RIGHT: + return ">>"; + case Token.OP_USHIFT_RIGHT: + return ">>>"; + case Token.OP_LT: + return "<"; + case Token.OP_GT: + return ">"; + case Token.OP_LE: + return "<="; + case Token.OP_GE: + return ">="; + case Token.OP_EQ: + return "=="; + case Token.OP_STRICT_EQ: + return "==="; + case Token.OP_NE: + return "!="; + case Token.OP_AND: + return "&&"; + case Token.OP_OR: + return "||"; + case Token.OP_PTR: + return "->"; + case Token.OP_IN: + return "in"; + case Token.OP_COALESCING: + return "??"; + case Token.OP_MULT_ASSIGN: + return "*="; + case Token.OP_DIV_ASSIGN: + return "/="; + case Token.OP_MOD_ASSIGN: + return "%="; + case Token.OP_ADD_ASSIGN: + return "+="; + case Token.OP_SUB_ASSIGN: + return "-="; + case Token.OP_SHIFT_LEFT_ASSIGN: + return "<<="; + case Token.OP_SHIFT_RIGHT_ASSIGN: + return ">>="; + case Token.OP_USHIFT_RIGHT_ASSIGN: + return ">>>="; + case Token.OP_AND_ASSIGN: + return "&="; + case Token.OP_XOR_ASSIGN: + return "^="; + case Token.OP_OR_ASSIGN: + return "|="; + } + + return GetTokenName (token); +} + +static string GetTokenName (int token) +{ + switch (token){ + case Token.ABSTRACT: + return "abstract"; + case Token.AS: + return "as"; + case Token.ADD: + return "add"; + case Token.ASYNC: + return "async"; + case Token.SUPER: + return "super"; + case Token.BREAK: + return "break"; + case Token.CASE: + return "case"; + case Token.CATCH: + return "catch"; + case Token.CHECKED: + return "checked"; + case Token.CLASS: + return "class"; + case Token.CONST: + return "const"; + case Token.CONTINUE: + return "continue"; + case Token.DEFAULT: + return "default"; + case Token.DELEGATE: + return "delegate"; + case Token.DELETE: + return "delete"; + case Token.DO: + return "do"; + case Token.EACH: + return "each"; + case Token.ELSE: + return "else"; + case Token.ENUM: + return "enum"; + case Token.EVENT: + return "event"; + case Token.EXPLICIT: + return "explicit"; + case Token.EXTENDS: + return "extends"; + case Token.EXTERN: + return "extern"; + case Token.FALSE: + return "false"; + case Token.FINAL: + return "final"; + case Token.FINALLY: + return "finally"; + case Token.FIXED: + return "fixed"; + case Token.FOR: + return "for"; + case Token.FOR_EACH: + return "for each"; + case Token.FUNCTION: + return "function"; + case Token.FUNCTION_GET: + return "function get"; + case Token.FUNCTION_SET: + return "function set"; + case Token.GOTO: + return "goto"; + case Token.IF: + return "if"; + case Token.IMPLEMENTS: + return "implements"; + case Token.IMPLICIT: + return "implicit"; + case Token.IMPORT: + return "import"; + case Token.IN: + return "in"; + case Token.INDEXER: + return "indexer"; + case Token.INSTANCEOF: + return "instanceof"; + case Token.INTERFACE: + return "interface"; + case Token.INTERNAL: + return "internal"; + case Token.IS: + return "is"; + case Token.LOCK: + return "lock"; + case Token.NAMESPACE: + return "namespace"; + case Token.NATIVE: + return "native"; + case Token.NEW: + return "new"; + case Token.NULL: + return "null"; + case Token.OPERATOR: + return "operator"; + case Token.OUT: + return "out"; + case Token.OVERRIDE: + return "override"; + case Token.OVERLOAD: + return "overload"; + case Token.PARAMS: + return "params"; + case Token.PRIVATE: + return "private"; + case Token.PROPERTY: + return "property"; + case Token.PROTECTED: + return "protected"; + case Token.PUBLIC: + return "public"; + case Token.READONLY: + return "readonly"; + case Token.REF: + return "ref"; + case Token.RETURN: + return "return"; + case Token.REMOVE: + return "remove"; + case Token.SIZEOF: + return "sizeof"; + case Token.STACKALLOC: + return "stackalloc"; + case Token.STATIC: + return "static"; + case Token.STRUCT: + return "struct"; + case Token.SWITCH: + return "switch"; + case Token.THIS: + return "this"; + case Token.THROW: + return "throw"; + case Token.TRUE: + return "true"; + case Token.TRY: + return "try"; + case Token.TYPEOF: + return "typeof"; + case Token.UNCHECKED: + return "unchecked"; + case Token.UNDEFINED: + return "undefined"; + case Token.UNSAFE: + return "unsafe"; + case Token.USE: + return "use"; + case Token.USING: + return "using"; + case Token.VAR: + return "var"; + case Token.VIRTUAL: + return "virtual"; + case Token.VOLATILE: + return "volatile"; + case Token.WHERE: + return "where"; + case Token.WHILE: + return "while"; +// case Token.ARGLIST: +// return "__arglist"; +// case Token.REFVALUE: +// return "__refvalue"; +// case Token.REFTYPE: +// return "__reftype"; +// case Token.MAKEREF: +// return "__makeref"; + case Token.PARTIAL: + return "partial"; + case Token.ARROW: + return "=>"; + case Token.FROM: + case Token.FROM_FIRST: + return "from"; + case Token.JOIN: + return "join"; + case Token.ON: + return "on"; + case Token.EQUALS: + return "equals"; + case Token.SELECT: + return "select"; + case Token.GROUP: + return "group"; + case Token.BY: + return "by"; + case Token.LET: + return "let"; + case Token.ORDERBY: + return "orderby"; + case Token.ASCENDING: + return "ascending"; + case Token.DESCENDING: + return "descending"; + case Token.INTO: + return "into"; + case Token.GET: + return "get"; + case Token.SET: + return "set"; + case Token.OPEN_BRACE: + case Token.OPEN_BRACE_INIT: + return "{"; + case Token.CLOSE_BRACE: + return "}"; + case Token.OPEN_BRACKET: + case Token.OPEN_BRACKET_EXPR: + return "["; + case Token.CLOSE_BRACKET: + return "]"; + case Token.OPEN_PARENS: + return "("; + case Token.CLOSE_PARENS: + return ")"; + case Token.DOT: + return "."; + case Token.DOT_AT: + return ".@"; + case Token.DOT_STAR: + return ".*"; + case Token.DOTDOT: + return ".."; + case Token.DOTDOT_AT: + return "..@"; + case Token.DOTDOT_STAR: + return "..*"; + case Token.DOTDOTDOT: + return "..."; + case Token.COMMA: + return ","; + case Token.DEFAULT_COLON: + return "default:"; + case Token.COLON: + return ":"; + case Token.SEMICOLON: + return ";"; + case Token.TILDE: + return "~"; + + case Token.PLUS: + case Token.UMINUS: + case Token.MINUS: + case Token.BANG: + case Token.OP_LT: + case Token.OP_GT: + case Token.BITWISE_AND: + case Token.BITWISE_OR: + case Token.STAR: + case Token.PERCENT: + case Token.DIV: + case Token.CARRET: + case Token.OP_INC: + case Token.OP_DEC: + case Token.OP_SHIFT_LEFT: + case Token.OP_SHIFT_RIGHT: + case Token.OP_LE: + case Token.OP_GE: + case Token.OP_EQ: + case Token.OP_NE: + case Token.OP_AND: + case Token.OP_OR: + case Token.OP_PTR: + case Token.OP_COALESCING: + case Token.OP_MULT_ASSIGN: + case Token.OP_DIV_ASSIGN: + case Token.OP_MOD_ASSIGN: + case Token.OP_ADD_ASSIGN: + case Token.OP_SUB_ASSIGN: + case Token.OP_SHIFT_LEFT_ASSIGN: + case Token.OP_SHIFT_RIGHT_ASSIGN: + case Token.OP_AND_ASSIGN: + case Token.OP_XOR_ASSIGN: + case Token.OP_OR_ASSIGN: + case Token.OP_AT: + return ""; + + case Token.BOOL: + case Token.BYTE: + case Token.CHAR: + case Token.VOID: + case Token.DECIMAL: + case Token.DOUBLE: + case Token.FLOAT: + case Token.INT: + case Token.LONG: + case Token.SBYTE: + case Token.SHORT: + case Token.STRING: + case Token.UINT: + case Token.ULONG: + case Token.USHORT: + case Token.OBJECT: + return "type"; + + case Token.ASSIGN: + return "="; + case Token.OP_GENERICS_LT: + case Token.GENERIC_DIMENSION: + return ".<"; + case Token.OP_GENERICS_GT: + return ">"; + case Token.INTERR: + case Token.INTERR_NULLABLE: + return "?"; + case Token.DOUBLE_COLON: + return "::"; + case Token.LITERAL: + return "value"; + case Token.IDENTIFIER: + case Token.AWAIT: + return "identifier"; + + case Token.EOF: + return "end-of-file"; + + // All of these are internal. + case Token.NONE: + case Token.ERROR: + case Token.FIRST_KEYWORD: + case Token.EVAL_COMPILATION_UNIT_PARSER: + case Token.EVAL_USING_DECLARATIONS_UNIT_PARSER: + case Token.EVAL_STATEMENT_PARSER: + case Token.LAST_KEYWORD: + case Token.GENERATE_COMPLETION: + case Token.COMPLETE_COMPLETION: + return ""; + + // A bit more robust. + default: + return yyNames [token]; + } +} + +/* end end end */ +} diff --git a/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-tokenizer.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-tokenizer.cs new file mode 100644 index 000000000..21880ca28 --- /dev/null +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/ps-tokenizer.cs @@ -0,0 +1,4380 @@ +// +// cs-tokenizer.cs: The Tokenizer for the PlayScript compiler +// This also implements the preprocessor +// +// Author: Miguel de Icaza (miguel@gnu.org) +// Marek Safar (marek.safar@gmail.com) +// Ben Cooley (bcooley@zynga.com) +// +// Dual licensed under the terms of the MIT X11 or GNU GPL +// +// Copyright 2001, 2002 Ximian, Inc (http://www.ximian.com) +// Copyright 2004-2008 Novell, Inc +// Copyright 2011 Xamarin, Inc (http://www.xamarin.com) +// + +using System; +using System.Text; +using System.Collections.Generic; +using System.Globalization; +using System.Diagnostics; +using System.Collections; +//using Mono.CSharp; +using ICSharpCode.NRefactory.MonoPlayScript; + +namespace Mono.PlayScript +{ + // + // This class has to be used by parser only, it reuses token + // details once a file is parsed + // + public class LocatedToken + { + public int row, column; + public string value; + public SourceFile file; + + public LocatedToken () + { + } + + public LocatedToken (string value, Location loc) + { + this.value = value; + file = loc.SourceFile; + row = loc.Row; + column = loc.Column; + } + + public override string ToString () + { + return string.Format ("Token '{0}' at {1},{2}", Value, row, column); + } + + public Location Location + { + get { return new Location (file, row, column); } + } + + public string Value + { + get { return value; } + } + } + + /// + /// Tokenizer for C# source code. + /// + public class Tokenizer : yyParser.yyInput + { + class KeywordEntry + { + public readonly T Token; + public KeywordEntry Next; + public readonly char[] Value; + + public KeywordEntry (string value, T token) + { + this.Value = value.ToCharArray (); + this.Token = token; + } + } + + sealed class IdentifiersComparer : IEqualityComparer + { + readonly int length; + + public IdentifiersComparer (int length) + { + this.length = length; + } + + public bool Equals (char[] x, char[] y) + { + for (int i = 0; i < length; ++i) + if (x [i] != y [i]) + return false; + + return true; + } + + public int GetHashCode (char[] obj) + { + int h = 0; + for (int i = 0; i < length; ++i) + h = (h << 5) - h + obj [i]; + + return h; + } + } + + public class LocatedTokenBuffer + { + readonly LocatedToken[] buffer; + public int pos; + + public LocatedTokenBuffer () + { + buffer = new LocatedToken[0]; + } + + public LocatedTokenBuffer (LocatedToken[] buffer) + { + this.buffer = buffer ?? new LocatedToken[0]; + } + + public LocatedToken Create (SourceFile file, int row, int column) + { + return Create (null, file, row, column); + } + + public LocatedToken Create (string value, SourceFile file, int row, int column) + { + // + // TODO: I am not very happy about the logic but it's the best + // what I could come up with for now. + // Ideally we should be using just tiny buffer (256 elements) which + // is enough to hold all details for currect stack and recycle elements + // poped from the stack but there is a trick needed to recycle + // them properly. + // + LocatedToken entry; + if (pos >= buffer.Length) { + entry = new LocatedToken (); + } else { + entry = buffer[pos]; + if (entry == null) { + entry = new LocatedToken (); + buffer[pos] = entry; + } + + ++pos; + } + entry.value = value; + entry.file = file; + entry.row = row; + entry.column = column; + return entry; + } + + // + // Used for token not required by expression evaluator + // + [Conditional ("FULL_AST")] + public void CreateOptional (SourceFile file, int row, int col, ref object token) + { + token = Create (file, row, col); + } + } + + public enum PreprocessorDirective + { + Invalid = 0, + + Region = 1, + Endregion = 2, + If = 3 | RequiresArgument, + Endif = 4, + Elif = 5 | RequiresArgument, + Else = 6, + Define = 7 | RequiresArgument, + Undef = 8 | RequiresArgument, + Error = 9, + Warning = 10, + Pragma = 11 | CustomArgumentsParsing, + Line = 12 | CustomArgumentsParsing, + + CustomArgumentsParsing = 1 << 10, + RequiresArgument = 1 << 11 + } + + readonly SeekableStreamReader reader; + readonly CompilationSourceFile source_file; + public CompilationSourceFile SourceFile { get { return source_file; } } + readonly CompilerContext context; + readonly Report Report; + + SourceFile current_source; + Location hidden_block_start; + int ref_line = 1; + int line = 1; + int col = 0; + int previous_col; + int prev_token; + int prev_token_line; + int current_token; + int current_token_line; + int putback_token = -1; + int parse_regex_xml = 0; + int parse_colon = 0; + bool prev_allow_auto_semi = true; + bool allow_auto_semi = true; + int allow_auto_semi_after = 0; + bool has_temp_auto_semi_after_tokens = false; + List temp_auto_semi_after_tokens = new List(); + readonly int tab_size; + bool parsing_playscript = false; + bool handle_namespace = true; + bool handle_get_set = false; + bool handle_dynamic = true; + bool handle_each = false; + bool handle_remove_add = false; + bool handle_where = false; +// bool handle_typeof = false; + bool handle_for_in = false; + bool eat_block = false; + int eat_block_braces = 0; + List escaped_identifiers; + int parsing_generic_less_than; + readonly bool doc_processing; + readonly LocatedTokenBuffer ltb; + + private static BitArray allowed_auto_semi_tokens = new BitArray(750, false); + private static BitArray disallowed_next_auto_semi_tokens = new BitArray(750, false); + + // + // Used mainly for parser optimizations. Some expressions for instance + // can appear only in block (including initializer, base initializer) + // scope only + // + public int parsing_block; + internal bool query_parsing; + + // + // When parsing type only, useful for ambiguous nullable types + // + public int parsing_type; + + // + // Set when parsing generic declaration (type or method header) + // + public bool parsing_generic_declaration; + public bool parsing_generic_declaration_doc; + + // + // The value indicates that we have not reach any declaration or + // namespace yet + // + public int parsing_declaration; + + public bool parsing_attribute_section; + + public bool parsing_modifiers; + + // + // The special characters to inject on streams to run the unit parser + // in the special expression mode. Using private characters from + // Plane Sixteen (U+100000 to U+10FFFD) + // + // This character is only tested just before the tokenizer is about to report + // an error; So on the regular operation mode, this addition will have no + // impact on the tokenizer's performance. + // + + public const int EvalStatementParserCharacter = 0x100000; + public const int EvalCompilationUnitParserCharacter = 0x100001; + public const int EvalUsingDeclarationsParserCharacter = 0x100002; + public const int DocumentationXref = 0x100003; + + const int UnicodeLS = 0x2028; + const int UnicodePS = 0x2029; + + // + // XML documentation buffer. The save point is used to divide + // comments on types and comments on members. + // + StringBuilder xml_comment_buffer; + + // + // See comment on XmlCommentState enumeration. + // + XmlCommentState xml_doc_state = XmlCommentState.Allowed; + + // + // Whether tokens have been seen on this line + // + bool tokens_seen = false; + + // + // Set to true once the GENERATE_COMPLETION token has bee + // returned. This helps produce one GENERATE_COMPLETION, + // as many COMPLETE_COMPLETION as necessary to complete the + // AST tree and one final EOF. + // + bool generated; + + // + // Whether a token has been seen on the file + // This is needed because `define' is not allowed to be used + // after a token has been seen. + // + bool any_token_seen; + + // + // Class variables + // + static readonly KeywordEntry[][] keywords; + static readonly KeywordEntry[][] keywords_preprocessor; + static readonly HashSet keyword_strings; + static readonly NumberStyles styles; + static readonly NumberFormatInfo csharp_format_info; + + // Pragma arguments + static readonly char[] pragma_warning = "warning".ToCharArray (); + static readonly char[] pragma_warning_disable = "disable".ToCharArray (); + static readonly char[] pragma_warning_restore = "restore".ToCharArray (); + static readonly char[] pragma_checksum = "checksum".ToCharArray (); + static readonly char[] line_hidden = "hidden".ToCharArray (); + static readonly char[] line_default = "default".ToCharArray (); + + static readonly char[] simple_whitespaces = new char[] { ' ', '\t' }; + internal SpecialsBag sbag; + + public bool ParsingPlayScript { + get { return parsing_playscript; } + set { parsing_playscript = value; } + } + + public bool NamespaceParsing { + get { return handle_namespace; } + set { handle_namespace = value; } + } + + public bool PropertyParsing { + get { return handle_get_set; } + set { handle_get_set = value; } + } + + public bool EventParsing { + get { return handle_remove_add; } + set { handle_remove_add = value; } + } + + public bool ConstraintsParsing { + get { return handle_where; } + set { handle_where = value; } + } + +// public bool TypeOfParsing { +// get { return handle_typeof; } +// set { handle_typeof = value; } +// } + + public bool ForInParsing { + get { return handle_for_in; } + set { handle_for_in = value; } + } + + public bool DynamicParsing { + get { return handle_dynamic; } + set { handle_dynamic = value; } + } + + public bool AutoSemiInsertion { + get { return allow_auto_semi; } + set { + prev_allow_auto_semi = allow_auto_semi; + allow_auto_semi = value; + allow_auto_semi_after = 0; + } + } + + public bool PrevAutoSemiInsertion { + get { return prev_allow_auto_semi; } + } + + public int AutoSemiInsertionAfter + { + get { return allow_auto_semi_after; } + set { + allow_auto_semi = true; + allow_auto_semi_after = value + 1; + } + } + + public void AllowAutoSemiAfterToken (int token, bool allow) + { + allowed_auto_semi_tokens.Set (token, allow); + if (true) { + has_temp_auto_semi_after_tokens = true; + temp_auto_semi_after_tokens.Add (token); + } + } + + public bool RegexXmlParsing { + get { return parse_regex_xml > 0; } + } + + public bool EatBlock { + get { return eat_block; } + set { + eat_block = value; + if (eat_block) { + eat_block_braces = 0; + } + } + } + + public XmlCommentState doc_state { + get { return xml_doc_state; } + set { + if (value == XmlCommentState.Allowed) { + check_incorrect_doc_comment (); + reset_doc_comment (); + } + xml_doc_state = value; + } + } + + // + // This is used to trigger completion generation on the parser + public bool CompleteOnEOF; + + void AddEscapedIdentifier (Location loc) + { + if (escaped_identifiers == null) + escaped_identifiers = new List (); + + escaped_identifiers.Add (loc); + } + + public bool IsEscapedIdentifier (ATypeNameExpression name) + { + return escaped_identifiers != null && escaped_identifiers.Contains (name.Location); + } + + // + // Values for the associated token returned + // + internal int putback_char; // Used by repl only + object val; + + // + // Pre-processor + // + const int TAKING = 1; + const int ELSE_SEEN = 4; + const int PARENT_TAKING = 8; + const int REGION = 16; + + // + // pre-processor if stack state: + // + Stack ifstack; + + public const int MaxIdentifierLength = 512; + public const int MaxNumberLength = 512; + + readonly char[] id_builder; + readonly Dictionary[] identifiers; + readonly char[] number_builder; + int number_pos; + + char[] value_builder = new char[64]; + + public int Line { + get { + return ref_line; + } + set { + ref_line = value; + } + } + + public int Column { + get { + return col; + } + set { + col = value; + } + } + + // + // This is used when the tokenizer needs to save + // the current position as it needs to do some parsing + // on its own to deamiguate a token in behalf of the + // parser. + // + Stack position_stack = new Stack (2); + + class Position { + public int position; + public int line; + public int ref_line; + public int col; + public Location hidden; + public int putback_char; + public int previous_col; + public Stack ifstack; + public int parsing_generic_less_than; + public int parse_regex_xml; + public int parse_colon; + public bool prev_allow_auto_semi; + public bool allow_auto_semi; + public int allow_auto_semi_after; + public object val; + public int prev_token; + public int prev_token_line; + public int current_token; + public int current_token_line; + public int putback_token; + + public Position (Tokenizer t) + { + position = t.reader.Position; + line = t.line; + ref_line = t.ref_line; + col = t.col; + hidden = t.hidden_block_start; + putback_char = t.putback_char; + previous_col = t.previous_col; + if (t.ifstack != null && t.ifstack.Count != 0) { + // There is no simple way to clone Stack all + // methods reverse the order + var clone = t.ifstack.ToArray (); + Array.Reverse (clone); + ifstack = new Stack (clone); + } + parsing_generic_less_than = t.parsing_generic_less_than; + parse_regex_xml = t.parse_regex_xml; + parse_colon = t.parse_colon; + prev_allow_auto_semi = t.prev_allow_auto_semi; + allow_auto_semi = t.allow_auto_semi; + allow_auto_semi_after = t.allow_auto_semi_after; + prev_token = t.prev_token; + prev_token_line = t.prev_token_line; + current_token = t.current_token; + current_token_line = t.current_token_line; + putback_token = t.putback_token; + val = t.val; + } + } + + public Tokenizer (SeekableStreamReader input, CompilationSourceFile file, ParserSession session, Report report) + { + this.source_file = file; + // SourceFile will be null if we are running in the repl; + // TODO: Determine if REPL should allow Extended PlayScript language, + // for now to run Tamarin tests, only ActionScript + if (file.SourceFile != null) { + this.parsing_playscript = file.SourceFile.PsExtended; + } + this.context = file.Compiler; + this.current_source = file.SourceFile; + this.identifiers = session.Identifiers; + this.id_builder = session.IDBuilder; + this.number_builder = session.NumberBuilder; + this.ltb = new LocatedTokenBuffer (session.AsLocatedTokens); + this.Report = report; + + reader = input; + + putback_char = -1; + + xml_comment_buffer = new StringBuilder (); + doc_processing = context.Settings.DocumentationFile != null; + + tab_size = context.Settings.TabSize; + } + + public void PushPosition () + { + position_stack.Push (new Position (this)); + } + + public void PopPosition () + { + Position p = position_stack.Pop (); + + reader.Position = p.position; + ref_line = p.ref_line; + line = p.line; + col = p.col; + hidden_block_start = p.hidden; + putback_char = p.putback_char; + previous_col = p.previous_col; + ifstack = p.ifstack; + parsing_generic_less_than = p.parsing_generic_less_than; + parse_regex_xml = p.parse_regex_xml; + parse_colon = p.parse_colon; + prev_token = p.prev_token; + prev_token_line = p.prev_token_line; + prev_allow_auto_semi = p.prev_allow_auto_semi; + allow_auto_semi = p.allow_auto_semi; + allow_auto_semi_after = p.allow_auto_semi_after; + current_token = p.current_token; + current_token_line = p.current_token_line; + putback_token = p.putback_token; + val = p.val; + } + + // Do not reset the position, ignore it. + public void DiscardPosition () + { + position_stack.Pop (); + } + + static void AddKeyword (string kw, int token) + { + keyword_strings.Add (kw); + + AddKeyword (keywords, kw, token); + } + + static void AddPreprocessorKeyword (string kw, PreprocessorDirective directive) + { + AddKeyword (keywords_preprocessor, kw, directive); + } + + static void AddKeyword (KeywordEntry[][] keywords, string kw, T token) + { + int length = kw.Length; + if (keywords[length] == null) { + keywords[length] = new KeywordEntry['z' - '_' + 1]; + } + + int char_index = kw[0] - '_'; + var kwe = keywords[length][char_index]; + if (kwe == null) { + keywords[length][char_index] = new KeywordEntry (kw, token); + return; + } + + while (kwe.Next != null) { + kwe = kwe.Next; + } + + kwe.Next = new KeywordEntry (kw, token); + } + + static void AddAllowedAutoSemiTokens(int[] tokens) { + var len = tokens.Length; + for (var i = 0; i < len; i++) { + allowed_auto_semi_tokens.Set (tokens[i], true); + } + } + + static void AddDisallowedNextAutoSemiTokens(int[] tokens) { + var len = tokens.Length; + for (var i = 0; i < len; i++) { + disallowed_next_auto_semi_tokens.Set (tokens[i], true); + } + } + + // + // Class initializer + // + static Tokenizer () + { + keyword_strings = new HashSet (); + + // 13 is the length of the longest keyword for now + keywords = new KeywordEntry[13][]; + + AddKeyword ("abstract", Token.ABSTRACT); + AddKeyword ("as", Token.AS); + AddKeyword ("add", Token.ADD); + AddKeyword ("bool", Token.BOOL); + AddKeyword ("boolean", Token.BOOLEAN); + AddKeyword ("break", Token.BREAK); + AddKeyword ("byte", Token.BYTE); + AddKeyword ("case", Token.CASE); + AddKeyword ("catch", Token.CATCH); + AddKeyword ("char", Token.CHAR); + AddKeyword ("checked", Token.CHECKED); + AddKeyword ("class", Token.CLASS); + AddKeyword ("const", Token.CONST); + AddKeyword ("continue", Token.CONTINUE); + AddKeyword ("decimal", Token.DECIMAL); + AddKeyword ("default", Token.DEFAULT); + AddKeyword ("delegate", Token.DELEGATE); + AddKeyword ("delete", Token.DELETE); + AddKeyword ("do", Token.DO); + AddKeyword ("double", Token.DOUBLE); + AddKeyword ("double2", Token.DOUBLE2); + AddKeyword ("double3", Token.DOUBLE3); + AddKeyword ("double4", Token.DOUBLE4); + AddKeyword ("dynamic", Token.DYNAMIC); + AddKeyword ("each", Token.EACH); + AddKeyword ("else", Token.ELSE); + AddKeyword ("enum", Token.ENUM); + AddKeyword ("event", Token.EVENT); + AddKeyword ("explicit", Token.EXPLICIT); + AddKeyword ("extends", Token.EXTENDS); + AddKeyword ("extern", Token.EXTERN); + AddKeyword ("false", Token.FALSE); + AddKeyword ("final", Token.FINAL); + AddKeyword ("finally", Token.FINALLY); + AddKeyword ("fixed", Token.FIXED); + AddKeyword ("float", Token.FLOAT); + AddKeyword ("float2", Token.FLOAT2); + AddKeyword ("float3", Token.FLOAT3); + AddKeyword ("float4", Token.FLOAT4); + AddKeyword ("for", Token.FOR); + AddKeyword ("function", Token.FUNCTION); + AddKeyword ("goto", Token.GOTO); + AddKeyword ("get", Token.GET); + AddKeyword ("if", Token.IF); + AddKeyword ("implements", Token.IMPLEMENTS); + AddKeyword ("implicit", Token.IMPLICIT); + AddKeyword ("import", Token.IMPORT); + AddKeyword ("in", Token.IN); + AddKeyword ("indexer", Token.INDEXER); + AddKeyword ("instanceof", Token.INSTANCEOF); + AddKeyword ("int", Token.INT); + AddKeyword ("interface", Token.INTERFACE); + AddKeyword ("internal", Token.INTERNAL); + AddKeyword ("is", Token.IS); + AddKeyword ("lock", Token.LOCK); + AddKeyword ("long", Token.LONG); + AddKeyword ("namespace", Token.NAMESPACE); + AddKeyword ("native", Token.NATIVE); + AddKeyword ("new", Token.NEW); + AddKeyword ("null", Token.NULL); + AddKeyword ("object", Token.OBJECT); + AddKeyword ("operator", Token.OPERATOR); + AddKeyword ("out", Token.OUT); + AddKeyword ("override", Token.OVERRIDE); + AddKeyword ("overload", Token.OVERLOAD); + AddKeyword ("package", Token.PACKAGE); + AddKeyword ("params", Token.PARAMS); + AddKeyword ("property", Token.PROPERTY); + AddKeyword ("private", Token.PRIVATE); + AddKeyword ("protected", Token.PROTECTED); + AddKeyword ("public", Token.PUBLIC); + AddKeyword ("readonly", Token.READONLY); + AddKeyword ("ref", Token.REF); + AddKeyword ("remove", Token.REMOVE); + AddKeyword ("return", Token.RETURN); + AddKeyword ("sbyte", Token.SBYTE); + AddKeyword ("set", Token.SET); + AddKeyword ("short", Token.SHORT); + AddKeyword ("sizeof", Token.SIZEOF); + AddKeyword ("stackalloc", Token.STACKALLOC); + AddKeyword ("static", Token.STATIC); + AddKeyword ("string", Token.STRING); + AddKeyword ("struct", Token.STRUCT); + AddKeyword ("super", Token.SUPER); + AddKeyword ("switch", Token.SWITCH); + AddKeyword ("this", Token.THIS); + AddKeyword ("throw", Token.THROW); + AddKeyword ("true", Token.TRUE); + AddKeyword ("try", Token.TRY); + AddKeyword ("typeof", Token.TYPEOF); + AddKeyword ("uint", Token.UINT); + AddKeyword ("ulong", Token.ULONG); + AddKeyword ("unchecked", Token.UNCHECKED); + AddKeyword ("undefined", Token.UNDEFINED); + AddKeyword ("unsafe", Token.UNSAFE); + AddKeyword ("use", Token.USE); + AddKeyword ("ushort", Token.USHORT); + AddKeyword ("using", Token.USING); + AddKeyword ("var", Token.VAR); + AddKeyword ("virtual", Token.VIRTUAL); + AddKeyword ("void", Token.VOID); + AddKeyword ("volatile", Token.VOLATILE); + AddKeyword ("while", Token.WHILE); + AddKeyword ("partial", Token.PARTIAL); + AddKeyword ("where", Token.WHERE); + + // LINQ keywords + AddKeyword ("from", Token.FROM); + AddKeyword ("join", Token.JOIN); + AddKeyword ("on", Token.ON); + AddKeyword ("equals", Token.EQUALS); + AddKeyword ("select", Token.SELECT); + AddKeyword ("group", Token.GROUP); + AddKeyword ("by", Token.BY); + AddKeyword ("let", Token.LET); + AddKeyword ("orderby", Token.ORDERBY); + AddKeyword ("ascending", Token.ASCENDING); + AddKeyword ("descending", Token.DESCENDING); + AddKeyword ("into", Token.INTO); + + // Contextual async keywords + AddKeyword ("async", Token.ASYNC); + AddKeyword ("await", Token.AWAIT); + + keywords_preprocessor = new KeywordEntry[10][]; + + AddPreprocessorKeyword ("region", PreprocessorDirective.Region); + AddPreprocessorKeyword ("endregion", PreprocessorDirective.Endregion); + AddPreprocessorKeyword ("if", PreprocessorDirective.If); + AddPreprocessorKeyword ("endif", PreprocessorDirective.Endif); + AddPreprocessorKeyword ("elif", PreprocessorDirective.Elif); + AddPreprocessorKeyword ("else", PreprocessorDirective.Else); + AddPreprocessorKeyword ("define", PreprocessorDirective.Define); + AddPreprocessorKeyword ("undef", PreprocessorDirective.Undef); + AddPreprocessorKeyword ("error", PreprocessorDirective.Error); + AddPreprocessorKeyword ("warning", PreprocessorDirective.Warning); + AddPreprocessorKeyword ("pragma", PreprocessorDirective.Pragma); + AddPreprocessorKeyword ("line", PreprocessorDirective.Line); + + // Semicolons will be auto-inserted after these tokens by default (unless manually disabled by the parser). + AddAllowedAutoSemiTokens(new int [] { + Token.CLOSE_BRACKET, + Token.CLOSE_PARENS, + Token.IDENTIFIER, + Token.LITERAL, + Token.OP_INC, + Token.OP_DEC, + Token.TRUE, + Token.FALSE, + Token.UNDEFINED, + Token.NULL, + Token.CHAR, + Token.INT, + Token.UINT, + Token.OBJECT, + Token.DECIMAL, + Token.BYTE, + Token.SBYTE, + Token.LONG, + Token.ULONG, + Token.VOID, + Token.DOUBLE, + Token.DOUBLE2, + Token.DOUBLE3, + Token.DOUBLE4, + Token.FLOAT, + Token.FLOAT2, + Token.FLOAT3, + Token.FLOAT4, + Token.STRING, + Token.BOOL, + Token.BOOLEAN, + Token.SHORT, + Token.USHORT, + Token.BREAK, + Token.CONTINUE, + Token.RETURN, + Token.STAR, + Token.OP_GENERICS_GT + }); + + AddDisallowedNextAutoSemiTokens(new int [] { + Token.PLUS, + Token.MINUS, + Token.DIV, + Token.PERCENT, + Token.STAR, + Token.DOT, + Token.DOT_AT, + Token.DOT_STAR, + Token.DOTDOT, + Token.DOTDOT_AT, + Token.DOTDOT_STAR, + Token.OP_SHIFT_LEFT, + Token.OP_SHIFT_RIGHT, + Token.OP_USHIFT_RIGHT, + Token.LOGICAL_AND_ASSIGN, + Token.LOGICAL_OR_ASSIGN, + Token.CLOSE_BRACKET, + Token.CLOSE_PARENS, + Token.OP_ADD_ASSIGN, + Token.OP_AT, + Token.OP_IN, + Token.AS, + Token.IN, + Token.ARROW, + Token.ASSIGN, + Token.COLON, + Token.COMMA, + Token.OP_ADD_ASSIGN, + Token.OP_SUB_ASSIGN, + Token.OP_MOD_ASSIGN, + Token.OP_MULT_ASSIGN, + Token.OP_DIV_ASSIGN, + Token.OP_COALESCING, + Token.OP_AND_ASSIGN, + Token.OP_OR_ASSIGN, + Token.OP_XOR_ASSIGN, + Token.OP_SHIFT_LEFT_ASSIGN, + Token.OP_SHIFT_RIGHT_ASSIGN, + Token.OP_USHIFT_RIGHT_ASSIGN, + Token.OP_EQ, + Token.OP_NE, + Token.OP_STRICT_EQ, + Token.OP_STRICT_NE, + Token.OP_LT, + Token.OP_GT, + Token.OP_GE, + Token.OP_LE, + Token.OP_AND, + Token.OP_OR, + Token.BITWISE_AND, + Token.BITWISE_OR, + Token.CARRET, + Token.INTERR + }); + + csharp_format_info = NumberFormatInfo.InvariantInfo; + styles = NumberStyles.Float; + } + + int GetKeyword (char[] id, int id_len) + { + // + // Keywords are stored in an array of arrays grouped by their + // length and then by the first character + // + if (id_len >= keywords.Length || keywords [id_len] == null) + return -1; + + int first_index = id [0] - '_'; + if (first_index > 'z' - '_') + return -1; + + var kwe = keywords [id_len] [first_index]; + if (kwe == null) + return -1; + + int res; + do { + res = kwe.Token; + for (int i = 1; i < id_len; ++i) { + if (id [i] != kwe.Value [i]) { + res = 0; + kwe = kwe.Next; + break; + } + } + } while (res == 0 && kwe != null); + + if (res == 0) + return -1; + + int next_token; + switch (res) { + case Token.FOR: + this.handle_each = true; + next_token = peek_token (); + if (next_token == Token.EACH) { + token (); + res = Token.FOR_EACH; + } + this.handle_each = false; + break; + case Token.FUNCTION: + parsing_modifiers = false; + this.AutoSemiInsertion = false; + PushPosition(); + var fn_token = token (); + if (fn_token == Token.IDENTIFIER) + { + var get_set = (string)((LocatedToken)val).Value; + if (get_set == "get" || get_set == "set") { + fn_token = token (); + if (fn_token == Token.IDENTIFIER) { + res = (get_set == "get") ? Token.FUNCTION_GET : Token.FUNCTION_SET; + } + } + } + PopPosition (); + if (res != Token.FUNCTION) + token (); + break; + case Token.GET: + case Token.SET: + if (!handle_get_set) + res = -1; + break; + case Token.IF: + case Token.WHILE: + case Token.DO: + case Token.TRY: + case Token.CATCH: + case Token.SWITCH: + case Token.CASE: + this.AutoSemiInsertion = false; + break; + case Token.DYNAMIC: + if (!handle_dynamic) + res = -1; + break; + case Token.EACH: + if (!handle_each) + res = -1; + break; + case Token.REMOVE: + case Token.ADD: + if (!handle_remove_add || !parsing_playscript) + res = -1; + break; + case Token.EXTERN: + if (parsing_declaration != 0 || !parsing_playscript) + res = -1; + break; + case Token.DEFAULT: + if (peek_token () == Token.COLON) { + token (); + res = Token.DEFAULT_COLON; + } + break; + case Token.WHERE: + if (!handle_where && !query_parsing || !parsing_playscript) + res = -1; + break; + case Token.FROM: + // + // A query expression is any expression that starts with `from identifier' + // followed by any token except ; , = + // + if (!parsing_playscript) { + res = -1; + } else if (!query_parsing) { + PushPosition (); + // HACK: to disable generics micro-parser, because PushPosition does not + // store identifiers array + parsing_generic_less_than = 1; + switch (xtoken ()) { + case Token.IDENTIFIER: + case Token.INT: + case Token.BOOL: + case Token.BYTE: + case Token.CHAR: + case Token.DECIMAL: + case Token.FLOAT: + case Token.LONG: + case Token.OBJECT: + case Token.STRING: + case Token.UINT: + case Token.ULONG: + next_token = xtoken (); + if (next_token == Token.SEMICOLON || next_token == Token.COMMA || next_token == Token.EQUALS) + goto default; + + res = Token.FROM_FIRST; + query_parsing = true; + if (context.Settings.Version <= LanguageVersion.ISO_2) + Report.FeatureIsNotAvailable (context, Location, "query expressions"); + break; + case Token.VOID: + Expression.Error_VoidInvalidInTheContext (Location, Report); + break; + default: + PopPosition (); + // HACK: A token is not a keyword so we need to restore identifiers buffer + // which has been overwritten before we grabbed the identifier + id_builder [0] = 'f'; id_builder [1] = 'r'; id_builder [2] = 'o'; id_builder [3] = 'm'; + return -1; + } + PopPosition (); + } + break; + case Token.JOIN: + case Token.ON: + case Token.EQUALS: + case Token.SELECT: + case Token.GROUP: + case Token.BY: + case Token.LET: + case Token.ORDERBY: + case Token.ASCENDING: + case Token.DESCENDING: + case Token.INTO: + if (!query_parsing || !parsing_playscript) + res = -1; + break; + + case Token.IN: + if (!handle_for_in) + res = Token.OP_IN; + break; + + case Token.USE: + handle_namespace = true; + break; + case Token.USING: + // TODO: some explanation needed + check_incorrect_doc_comment (); + break; + case Token.NAMESPACE: + // TODO: some explanation needed + if (!handle_namespace) + res = -1; + else + check_incorrect_doc_comment (); + break; + + case Token.PARTIAL: + if (parsing_block > 0 || !parsing_playscript) { + res = -1; + break; + } + + // Save current position and parse next token. + PushPosition (); + + next_token = token (); + bool ok = (next_token == Token.CLASS) || + (next_token == Token.STRUCT) || + (next_token == Token.INTERFACE) || + (next_token == Token.VOID); + + PopPosition (); + + if (ok) { + if (next_token == Token.VOID) { + if (context.Settings.Version <= LanguageVersion.ISO_2) + Report.FeatureIsNotAvailable (context, Location, "partial methods"); + } else if (context.Settings.Version == LanguageVersion.ISO_1) + Report.FeatureIsNotAvailable (context, Location, "partial types"); + + return res; + } + + if (next_token < Token.LAST_KEYWORD) { + Report.Error (267, Location, + "The `partial' modifier can be used only immediately before `class', `struct', `interface', or `void' keyword"); + return token (); + } + + res = -1; + break; + + case Token.ASYNC: + if (!parsing_playscript) { + return -1; + } else if (parsing_modifiers) { + // + // Skip attributes section or constructor called async + // + if (parsing_attribute_section || peek_token () == Token.OPEN_PARENS) { + res = -1; + } else { + // async is keyword + } + } else if (parsing_block > 0) { + switch (peek_token ()) { + case Token.DELEGATE: + // async is keyword + break; + case Token.IDENTIFIER: + PushPosition (); + xtoken (); + if (xtoken () != Token.ARROW) + res = -1; + + PopPosition (); + break; + default: + res = -1; + break; + } + } else { + res = -1; + } + + if (res == Token.ASYNC && context.Settings.Version <= LanguageVersion.V_4) { + Report.FeatureIsNotAvailable (context, Location, "asynchronous functions"); + } + + break; + + case Token.AWAIT: + if (parsing_block == 0 || !parsing_playscript) + res = -1; + + break; + + // PLAYSCRIPT Extension Type keywords + case Token.BOOL: + case Token.CHAR: + case Token.BYTE: + case Token.SBYTE: + case Token.DECIMAL: + case Token.OBJECT: + case Token.STRING: + case Token.LONG: + case Token.ULONG: + case Token.SHORT: + case Token.USHORT: + case Token.FLOAT: + case Token.FLOAT2: + case Token.FLOAT3: + case Token.FLOAT4: + case Token.DOUBLE: + case Token.DOUBLE2: + case Token.DOUBLE3: + case Token.DOUBLE4: + if (!parsing_playscript) + res = -1; + + break; + + // PLAYSCRIPT Extension keywords + case Token.CHECKED: + case Token.EXPLICIT: + case Token.IMPLICIT: + case Token.OVERLOAD: + case Token.LOCK: + case Token.OUT: + case Token.PARAMS: + case Token.READONLY: + case Token.REF: + case Token.UNCHECKED: + case Token.UNSAFE: + case Token.FIXED: + case Token.GOTO: + if (!parsing_playscript) + res = -1; + + break; + + case Token.EVENT: + case Token.INDEXER: + case Token.OPERATOR: + case Token.PROPERTY: + if (!parsing_playscript) + res = -1; + else + parsing_modifiers = false; + + break; + + case Token.STRUCT: + case Token.DELEGATE: + case Token.ENUM: + if (!parsing_playscript) + res = -1; + else + parsing_modifiers = handle_namespace = false; + + break; + + case Token.CLASS: + case Token.INTERFACE: + parsing_modifiers = handle_namespace = false; + break; + + } + + + return res; + } + + static PreprocessorDirective GetPreprocessorDirective (char[] id, int id_len) + { + // + // Keywords are stored in an array of arrays grouped by their + // length and then by the first character + // + if (id_len >= keywords_preprocessor.Length || keywords_preprocessor[id_len] == null) + return PreprocessorDirective.Invalid; + + int first_index = id[0] - '_'; + if (first_index > 'z' - '_') + return PreprocessorDirective.Invalid; + + var kwe = keywords_preprocessor[id_len][first_index]; + if (kwe == null) + return PreprocessorDirective.Invalid; + + PreprocessorDirective res = PreprocessorDirective.Invalid; + do { + res = kwe.Token; + for (int i = 1; i < id_len; ++i) { + if (id[i] != kwe.Value[i]) { + res = 0; + kwe = kwe.Next; + break; + } + } + } while (res == PreprocessorDirective.Invalid && kwe != null); + + return res; + } + + public Location Location { + get { + return new Location (current_source, ref_line, col); + } + } + + static bool is_identifier_start_character (int c) + { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || Char.IsLetter ((char)c); + } + + static bool is_identifier_part_character (char c) + { + if (c >= 'a' && c <= 'z') + return true; + + if (c >= 'A' && c <= 'Z') + return true; + + if (c == '_' || c == '$' || (c >= '0' && c <= '9')) + return true; + + if (c < 0x80) + return false; + + return Char.IsLetter (c) || Char.GetUnicodeCategory (c) == UnicodeCategory.ConnectorPunctuation; + } + + public static bool IsKeyword (string s) + { + return keyword_strings.Contains (s); + } + + // + // Open parens micro parser. Only detects simple open parens at the moment. + // + int TokenizeOpenParens () + { + return Token.OPEN_PARENS; + } + + public static bool IsValidIdentifier (string s) + { + if (s == null || s.Length == 0) + return false; + + if (!is_identifier_start_character (s [0])) + return false; + + for (int i = 1; i < s.Length; i ++) + if (! is_identifier_part_character (s [i])) + return false; + + return true; + } + +// bool parse_less_than () + bool parse_less_than (ref int genericDimension) + { + start: + int the_token = token (); + if (the_token == Token.OPEN_BRACKET) { + do { + the_token = token (); + } while (the_token != Token.CLOSE_BRACKET); + the_token = token (); + } else if (the_token == Token.IN || the_token == Token.OUT) { + the_token = token (); + } + switch (the_token) { + case Token.IDENTIFIER: + case Token.OBJECT: + case Token.STRING: + case Token.BOOL: + case Token.DECIMAL: + case Token.FLOAT: + case Token.DOUBLE: + case Token.SBYTE: + case Token.BYTE: + case Token.SHORT: + case Token.USHORT: + case Token.INT: + case Token.UINT: + case Token.LONG: + case Token.ULONG: + case Token.CHAR: + case Token.VOID: + break; + case Token.OP_GENERICS_GT: + genericDimension = 1; + return true; + case Token.IN: + case Token.OUT: + return true; + case Token.COMMA: + do { + ++genericDimension; + the_token = token (); + } while (the_token == Token.COMMA); + + if (the_token == Token.OP_GENERICS_GT) { + ++genericDimension; + return true; + } + + return false; + default: + return false; + } + again: + the_token = token (); + + if (the_token == Token.OP_GENERICS_GT) + return true; + else if (the_token == Token.COMMA || the_token == Token.DOT || the_token == Token.DOUBLE_COLON) + goto start; + else if (the_token == Token.INTERR_NULLABLE || the_token == Token.STAR) + goto again; + else if (the_token == Token.OP_GENERICS_LT) { + if (!parse_less_than (ref genericDimension)) + return false; + goto again; + } else if (the_token == Token.OPEN_BRACKET) { + rank_specifiers: + the_token = token (); + if (the_token == Token.CLOSE_BRACKET) + goto again; + else if (the_token == Token.COMMA) + goto rank_specifiers; + return false; + } + + return false; + } + + bool parse_generic_dimension (out int dimension) + { + dimension = 1; + + again: + int the_token = token (); + if (the_token == Token.OP_GENERICS_GT) + return true; + else if (the_token == Token.COMMA) { + dimension++; + goto again; + } + + return false; + } + + public int peek_token () + { + int the_token; + + PushPosition (); + the_token = token (); + PopPosition (); + + return the_token; + } + + // + // Tonizes `?' using custom disambiguous rules to return one + // of following tokens: INTERR_NULLABLE, OP_COALESCING, INTERR + // + // Tricky expression looks like: + // + // Foo ? a = x ? b : c; + // + int TokenizePossibleNullableType () + { + if (parsing_block == 0 || parsing_type > 0) + return Token.INTERR_NULLABLE; + + int d = peek_char (); + if (d == '?') { + get_char (); + return Token.OP_COALESCING; + } + + switch (current_token) { + case Token.CLOSE_PARENS: + case Token.TRUE: + case Token.FALSE: + case Token.NULL: + case Token.LITERAL: + return Token.INTERR; + } + + if (d != ' ') { + if (d == ',' || d == ';' || d == '>') + return Token.INTERR_NULLABLE; + if (d == '*' || (d >= '0' && d <= '9')) + return Token.INTERR; + } + + PushPosition (); +// current_token = Token.NONE; // Doesn't work with auto semi-insertion - needs prev token history always + int next_token; + switch (xtoken ()) { + case Token.LITERAL: + case Token.TRUE: + case Token.FALSE: + case Token.NULL: + case Token.THIS: + case Token.NEW: + next_token = Token.INTERR; + break; + + case Token.SEMICOLON: + case Token.COMMA: + case Token.CLOSE_PARENS: + case Token.OPEN_BRACKET: + case Token.OP_GENERICS_GT: + case Token.INTERR: + next_token = Token.INTERR_NULLABLE; + break; + + default: + next_token = -1; + break; + } + + if (next_token == -1) { + switch (xtoken ()) { + case Token.COMMA: + case Token.SEMICOLON: + case Token.OPEN_BRACE: + case Token.CLOSE_PARENS: + case Token.IN: + next_token = Token.INTERR_NULLABLE; + break; + + case Token.COLON: + next_token = Token.INTERR; + break; + + default: + int ntoken; + int interrs = 1; + int colons = 0; + int braces = 0; + int parens = 0; + // + // All shorcuts failed, do it hard way + // + while ((ntoken = xtoken ()) != Token.EOF) { + switch (ntoken) { + case Token.OPEN_BRACE: + ++braces; + continue; + case Token.OPEN_PARENS: + ++parens; + continue; + case Token.CLOSE_BRACE: + --braces; + continue; + case Token.CLOSE_PARENS: + if (parens > 0) + --parens; + continue; + } + + if (braces != 0) + continue; + + if (ntoken == Token.SEMICOLON) + break; + + if (parens != 0) + continue; + + if (ntoken == Token.COLON) { + if (++colons == interrs) + break; + continue; + } + + if (ntoken == Token.INTERR) { + ++interrs; + continue; + } + } + + next_token = colons != interrs && braces == 0 ? Token.INTERR_NULLABLE : Token.INTERR; + break; + } + } + + PopPosition (); + return next_token; + } + + bool decimal_digits (int c) + { + int d; + bool seen_digits = false; + + if (c != -1){ + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); + number_builder [number_pos++] = (char) c; + } + + // + // We use peek_char2, because decimal_digits needs to do a + // 2-character look-ahead (5.ToString for example). + // + while ((d = peek_char2 ()) != -1){ + if (d >= '0' && d <= '9'){ + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); + number_builder [number_pos++] = (char) d; + get_char (); + seen_digits = true; + } else + break; + } + + return seen_digits; + } + + static bool is_hex (int e) + { + return (e >= '0' && e <= '9') || (e >= 'A' && e <= 'F') || (e >= 'a' && e <= 'f'); + } + + static TypeCode real_type_suffix (int c) + { + switch (c){ + case 'F': case 'f': + return TypeCode.Single; + case 'D': case 'd': + return TypeCode.Double; + case 'M': case 'm': + return TypeCode.Decimal; + default: + return TypeCode.Empty; + } + } + + ILiteralConstant integer_type_suffix (ulong ul, int c, Location loc) + { + bool is_unsigned = false; + bool is_long = false; + + if (c != -1){ + bool scanning = true; + do { + switch (c){ + case 'U': case 'u': + if (is_unsigned) + scanning = false; + is_unsigned = true; + get_char (); + break; + + case 'l': + if (!is_unsigned){ + // + // if we have not seen anything in between + // report this error + // + Report.Warning (78, 4, Location, "The 'l' suffix is easily confused with the digit '1' (use 'L' for clarity)"); + } + + goto case 'L'; + + case 'L': + if (is_long) + scanning = false; + is_long = true; + get_char (); + break; + + default: + scanning = false; + break; + } + c = peek_char (); + } while (scanning); + } + + if (is_long && is_unsigned){ + return new ULongLiteral (context.BuiltinTypes, ul, loc); + } + + if (is_unsigned){ + // uint if possible, or ulong else. + + if ((ul & 0xffffffff00000000) == 0) + return new UIntLiteral (context.BuiltinTypes, (uint) ul, loc); + else + return new ULongLiteral (context.BuiltinTypes, ul, loc); + } else if (is_long){ + // long if possible, ulong otherwise + if ((ul & 0x8000000000000000) != 0) + return new ULongLiteral (context.BuiltinTypes, ul, loc); + else + return new LongLiteral (context.BuiltinTypes, (long) ul, loc); + } else { + // int, uint, long or ulong in that order + if ((ul & 0xffffffff00000000) == 0){ + uint ui = (uint) ul; + + if ((ui & 0x80000000) != 0) + return new UIntLiteral (context.BuiltinTypes, ui, loc); + else + return new IntLiteral (context.BuiltinTypes, (int) ui, loc); + } else { + if ((ul & 0x8000000000000000) != 0) + return new ULongLiteral (context.BuiltinTypes, ul, loc); + else + return new LongLiteral (context.BuiltinTypes, (long) ul, loc); + } + } + } + + // + // given `c' as the next char in the input decide whether + // we need to convert to a special type, and then choose + // the best representation for the integer + // + ILiteralConstant adjust_int (int c, Location loc) + { + try { + if (number_pos > 9){ + ulong ul = (uint) (number_builder [0] - '0'); + + for (int i = 1; i < number_pos; i++){ + ul = checked ((ul * 10) + ((uint)(number_builder [i] - '0'))); + } + + return integer_type_suffix (ul, c, loc); + } else { + uint ui = (uint) (number_builder [0] - '0'); + + for (int i = 1; i < number_pos; i++){ + ui = checked ((ui * 10) + ((uint)(number_builder [i] - '0'))); + } + + return integer_type_suffix (ui, c, loc); + } + } catch (OverflowException) { + Error_NumericConstantTooLong (); + return new IntLiteral (context.BuiltinTypes, 0, loc); + } + catch (FormatException) { + Report.Error (1013, Location, "Invalid number"); + return new IntLiteral (context.BuiltinTypes, 0, loc); + } + } + + ILiteralConstant adjust_real (TypeCode t, Location loc) + { + string s = new string (number_builder, 0, number_pos); + const string error_details = "Floating-point constant is outside the range of type `{0}'"; + + switch (t){ + case TypeCode.Decimal: + try { + return new DecimalLiteral (context.BuiltinTypes, decimal.Parse (s, styles, csharp_format_info), loc); + } catch (OverflowException) { + Report.Error (594, Location, error_details, "decimal"); + return new DecimalLiteral (context.BuiltinTypes, 0, loc); + } + case TypeCode.Single: + try { + return new FloatLiteral (context.BuiltinTypes, float.Parse (s, styles, csharp_format_info), loc); + } catch (OverflowException) { + Report.Error (594, Location, error_details, "float"); + return new FloatLiteral (context.BuiltinTypes, 0, loc); + } + default: + try { + return new DoubleLiteral (context.BuiltinTypes, double.Parse (s, styles, csharp_format_info), loc); + } catch (OverflowException) { + Report.Error (594, loc, error_details, "double"); + return new DoubleLiteral (context.BuiltinTypes, 0, loc); + } + } + } + + ILiteralConstant handle_hex (Location loc) + { + int d; + ulong ul; + + get_char (); + while ((d = peek_char ()) != -1){ + if (is_hex (d)){ + number_builder [number_pos++] = (char) d; + get_char (); + } else + break; + } + + string s = new String (number_builder, 0, number_pos); + + try { + if (number_pos <= 8) + ul = System.UInt32.Parse (s, NumberStyles.HexNumber); + else + ul = System.UInt64.Parse (s, NumberStyles.HexNumber); + + return integer_type_suffix (ul, peek_char (), loc); + } catch (OverflowException){ + Error_NumericConstantTooLong (); + return new IntLiteral (context.BuiltinTypes, 0, loc); + } + catch (FormatException) { + Report.Error (1013, Location, "Invalid number"); + return new IntLiteral (context.BuiltinTypes, 0, loc); + } + } + + // + // Invoked if we know we have .digits or digits + // + int is_number (int c) + { + ILiteralConstant res; + +#if FULL_AST + int read_start = reader.Position - 1; + if (c == '.') { + // + // Caller did peek_char + // + --read_start; + } +#endif + number_pos = 0; + var loc = Location; + + if (c >= '0' && c <= '9'){ + if (c == '0'){ + int peek = peek_char (); + + if (peek == 'x' || peek == 'X') { + val = res = handle_hex (loc); +#if FULL_AST + res.ParsedValue = reader.ReadChars (read_start, reader.Position - 1); +#endif + + return Token.LITERAL; + } + } + decimal_digits (c); + c = get_char (); + } + + // + // We need to handle the case of + // "1.1" vs "1.string" (LITERAL_FLOAT vs NUMBER DOT IDENTIFIER) + // + bool is_real = false; + if (c == '.'){ + if (decimal_digits ('.')){ + is_real = true; + c = get_char (); + } else { + putback ('.'); + number_pos--; + val = res = adjust_int (-1, loc); + +#if FULL_AST + res.ParsedValue = reader.ReadChars (read_start, reader.Position - 1); +#endif + return Token.LITERAL; + } + } + + if (c == 'e' || c == 'E'){ + is_real = true; + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); + number_builder [number_pos++] = (char) c; + c = get_char (); + + if (c == '+'){ + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); + number_builder [number_pos++] = '+'; + c = -1; + } else if (c == '-') { + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); + number_builder [number_pos++] = '-'; + c = -1; + } else { + if (number_pos == MaxNumberLength) + Error_NumericConstantTooLong (); + number_builder [number_pos++] = '+'; + } + + decimal_digits (c); + c = get_char (); + } + + var type = real_type_suffix (c); + if (type == TypeCode.Empty && !is_real) { + putback (c); + res = adjust_int (c, loc); + } else { + is_real = true; + + if (type == TypeCode.Empty) { + putback (c); + } + + res = adjust_real (type, loc); + } + + val = res; + +#if FULL_AST + var chars = reader.ReadChars (read_start, reader.Position - (type == TypeCode.Empty && c > 0 ? 1 : 0)); + if (chars[chars.Length - 1] == '\r') + Array.Resize (ref chars, chars.Length - 1); + res.ParsedValue = chars; +#endif + + return Token.LITERAL; + } + + // + // Accepts exactly count (4 or 8) hex, no more no less + // + int getHex (int count, out int surrogate, out bool error) + { + int i; + int total = 0; + int c; + int top = count != -1 ? count : 4; + + get_char (); + error = false; + surrogate = 0; + for (i = 0; i < top; i++){ + c = get_char (); + + if (c >= '0' && c <= '9') + c = (int) c - (int) '0'; + else if (c >= 'A' && c <= 'F') + c = (int) c - (int) 'A' + 10; + else if (c >= 'a' && c <= 'f') + c = (int) c - (int) 'a' + 10; + else { + error = true; + return 0; + } + + total = (total * 16) + c; + if (count == -1){ + int p = peek_char (); + if (p == -1) + break; + if (!is_hex ((char)p)) + break; + } + } + + if (top == 8) { + if (total > 0x0010FFFF) { + error = true; + return 0; + } + + if (total >= 0x00010000) { + surrogate = ((total - 0x00010000) % 0x0400 + 0xDC00); + total = ((total - 0x00010000) / 0x0400 + 0xD800); + } + } + + return total; + } + + int escape (int c, out int surrogate) + { + bool error; + int d; + int v; + + d = peek_char (); + if (c != '\\') { + surrogate = 0; + return c; + } + + switch (d){ + case 'a': + v = '\a'; break; + case 'b': + v = '\b'; break; + case 'n': + v = '\n'; break; + case 't': + v = '\t'; break; + case 'v': + v = '\v'; break; + case 'r': + v = '\r'; break; + case '\\': + v = '\\'; break; + case '/': + v = '/'; break; + case 'f': + v = '\f'; break; + case '0': + v = 0; break; + case '"': + v = '"'; break; + case '\'': + v = '\''; break; + case 'x': + v = getHex (-1, out surrogate, out error); + if (error) + goto default; + return v; + case 'u': + case 'U': + return EscapeUnicode (d, out surrogate); + default: + surrogate = 0; + Report.Error (1009, Location, "Unrecognized escape sequence `\\{0}'", ((char)d).ToString ()); + return d; + } + + get_char (); + surrogate = 0; + return v; + } + + int EscapeUnicode (int ch, out int surrogate) + { + bool error; + if (ch == 'U') { + ch = getHex (8, out surrogate, out error); + } else { + ch = getHex (4, out surrogate, out error); + } + + if (error) + Report.Error (1009, Location, "Unrecognized escape sequence"); + + return ch; + } + + int get_char () + { + int x; + if (putback_char != -1) { + x = putback_char; + putback_char = -1; + } else { + x = reader.Read (); + } + + if (x <= 13) { + if (x == '\r') { + if (peek_char () == '\n') { + putback_char = -1; + } + + x = '\n'; + advance_line (); + } else if (x == '\n') { + advance_line (); + } else { + col++; + } + } else if (x >= UnicodeLS && x <= UnicodePS) { + advance_line (); + } else { + col++; + } + + return x; + } + + void advance_line () + { + line++; + ref_line++; + previous_col = col; + col = 0; + } + + int peek_char () + { + if (putback_char == -1) + putback_char = reader.Read (); + return putback_char; + } + + int peek_char2 () + { + if (putback_char != -1) + return putback_char; + return reader.Peek (); + } + + public void putback (int c) + { + if (putback_char != -1) { + throw new InternalErrorException (string.Format ("Secondary putback [{0}] putting back [{1}] is not allowed", (char)putback_char, (char) c), Location); + } + + if (c == '\n' || col == 0 || (c >= UnicodeLS && c <= UnicodePS)) { + // It won't happen though. + line--; + ref_line--; + col = previous_col; + } + else + col--; + putback_char = c; + } + + public bool advance () + { + return peek_char () != -1 || CompleteOnEOF; + } + + public Object Value { + get { + return val; + } + } + + public Object value () + { + return val; + } + + public int token () + { + prev_token = current_token; + prev_token_line = current_token_line; + + current_token = xtoken (true); + current_token_line = line; + + return current_token; + } + + public void token_putback (int token) + { + if (putback_token != -1) + throw new Exception("Can't put back token twice.'"); + putback_token = token; + } + + int TokenizePreprocessorIdentifier (out int c) + { + // skip over white space + do { + c = get_char (); + } while (c == ' ' || c == '\t'); + + + int pos = 0; + while (c != -1 && c >= 'a' && c <= 'z') { + id_builder[pos++] = (char) c; + c = get_char (); + if (c == '\\') { + int peek = peek_char (); + if (peek == 'U' || peek == 'u') { + int surrogate; + c = EscapeUnicode (c, out surrogate); + if (surrogate != 0) { + if (is_identifier_part_character ((char) c)) { + id_builder[pos++] = (char) c; + } + c = surrogate; + } + } + } + } + + return pos; + } + + PreprocessorDirective get_cmd_arg (out string arg) + { + int c; + + tokens_seen = false; + arg = ""; + + var cmd = GetPreprocessorDirective (id_builder, TokenizePreprocessorIdentifier (out c)); + + if ((cmd & PreprocessorDirective.CustomArgumentsParsing) != 0) + return cmd; + + // skip over white space + while (c == ' ' || c == '\t') + c = get_char (); + + int has_identifier_argument = (int)(cmd & PreprocessorDirective.RequiresArgument); + int pos = 0; + + while (c != -1 && c != '\n' && c != UnicodeLS && c != UnicodePS) { + if (c == '\\' && has_identifier_argument >= 0) { + if (has_identifier_argument != 0) { + has_identifier_argument = 1; + + int peek = peek_char (); + if (peek == 'U' || peek == 'u') { + int surrogate; + c = EscapeUnicode (c, out surrogate); + if (surrogate != 0) { + if (is_identifier_part_character ((char) c)) { + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder[pos++] = (char) c; + } + c = surrogate; + } + } + } else { + has_identifier_argument = -1; + } + } else if (c == '/' && peek_char () == '/') { + // + // Eat single-line comments + // + get_char (); + ReadToEndOfLine (); + break; + } + + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder[pos++] = (char) c; + c = get_char (); + } + + if (pos != 0) { + if (pos > MaxIdentifierLength) + arg = new string (value_builder, 0, pos); + else + arg = InternIdentifier (value_builder, pos); + + // Eat any trailing whitespaces + arg = arg.Trim (simple_whitespaces); + } + + return cmd; + } + + // + // Handles the #line directive + // + bool PreProcessLine () + { + Location loc = Location; + + int c; + + int length = TokenizePreprocessorIdentifier (out c); + if (length == line_default.Length) { + if (!IsTokenIdentifierEqual (line_default)) + return false; + + current_source = source_file.SourceFile; + if (!hidden_block_start.IsNull) { + current_source.RegisterHiddenScope (hidden_block_start, loc); + hidden_block_start = Location.Null; + } + + ref_line = line; + return true; + } + + if (length == line_hidden.Length) { + if (!IsTokenIdentifierEqual (line_hidden)) + return false; + + if (hidden_block_start.IsNull) + hidden_block_start = loc; + + return true; + } + + if (length != 0 || c < '0' || c > '9') { + // + // Eat any remaining characters to continue parsing on next line + // + ReadToEndOfLine (); + return false; + } + + int new_line = TokenizeNumber (c); + if (new_line < 1) { + // + // Eat any remaining characters to continue parsing on next line + // + ReadToEndOfLine (); + return new_line != 0; + } + + c = get_char (); + if (c == ' ') { + // skip over white space + do { + c = get_char (); + } while (c == ' ' || c == '\t'); + } else if (c == '"') { + c = 0; + } + + if (c != '\n' && c != '/' && c != '"' && c != UnicodeLS && c != UnicodePS) { + // + // Eat any remaining characters to continue parsing on next line + // + ReadToEndOfLine (); + + Report.Error (1578, loc, "Filename, single-line comment or end-of-line expected"); + return true; + } + + string new_file_name = null; + if (c == '"') { + new_file_name = TokenizeFileName (ref c); + + // skip over white space + while (c == ' ' || c == '\t') { + c = get_char (); + } + } + + if (c == '\n' || c == UnicodeLS || c == UnicodePS) { + + } else if (c == '/') { + ReadSingleLineComment (); + } else { + // + // Eat any remaining characters to continue parsing on next line + // + ReadToEndOfLine (); + + Error_EndLineExpected (); + return true; + } + + if (new_file_name != null) { + current_source = context.LookupFile (source_file, new_file_name); + source_file.AddIncludeFile (current_source); + } + + if (!hidden_block_start.IsNull) { + current_source.RegisterHiddenScope (hidden_block_start, loc); + hidden_block_start = Location.Null; + } + + ref_line = new_line; + return true; + } + + // + // Handles #define and #undef + // + void PreProcessDefinition (bool is_define, string ident, bool caller_is_taking) + { + if (ident.Length == 0 || ident == "true" || ident == "false"){ + Report.Error (1001, Location, "Missing identifier to pre-processor directive"); + return; + } + + if (ident.IndexOfAny (simple_whitespaces) != -1){ + Error_EndLineExpected (); + return; + } + + if (!is_identifier_start_character (ident [0])) + Report.Error (1001, Location, "Identifier expected: {0}", ident); + + foreach (char c in ident.Substring (1)){ + if (!is_identifier_part_character (c)){ + Report.Error (1001, Location, "Identifier expected: {0}", ident); + return; + } + } + + if (!caller_is_taking) + return; + + if (is_define) { + // + // #define ident + // + if (context.Settings.IsConditionalSymbolDefined (ident)) + return; + + source_file.AddDefine (ident); + } else { + // + // #undef ident + // + source_file.AddUndefine (ident); + } + } + + byte read_hex (out bool error) + { + int total; + int c = get_char (); + + if ((c >= '0') && (c <= '9')) + total = (int) c - (int) '0'; + else if ((c >= 'A') && (c <= 'F')) + total = (int) c - (int) 'A' + 10; + else if ((c >= 'a') && (c <= 'f')) + total = (int) c - (int) 'a' + 10; + else { + error = true; + return 0; + } + + total *= 16; + c = get_char (); + + if ((c >= '0') && (c <= '9')) + total += (int) c - (int) '0'; + else if ((c >= 'A') && (c <= 'F')) + total += (int) c - (int) 'A' + 10; + else if ((c >= 'a') && (c <= 'f')) + total += (int) c - (int) 'a' + 10; + else { + error = true; + return 0; + } + + error = false; + return (byte) total; + } + + // + // Parses #pragma checksum + // + bool ParsePragmaChecksum () + { + // + // The syntax is ` "foo.txt" "{guid}" "hash"' + // + // guid is predefined hash algorithm guid {406ea660-64cf-4c82-b6f0-42d48172a799} for md5 + // + int c = get_char (); + + if (c != '"') + return false; + + string file_name = TokenizeFileName (ref c); + + // TODO: Any white-spaces count + if (c != ' ') + return false; + + SourceFile file = context.LookupFile (source_file, file_name); + + if (get_char () != '"' || get_char () != '{') + return false; + + bool error; + byte[] guid_bytes = new byte [16]; + int i = 0; + + for (; i < 4; i++) { + guid_bytes [i] = read_hex (out error); + if (error) + return false; + } + + if (get_char () != '-') + return false; + + for (; i < 10; i++) { + guid_bytes [i] = read_hex (out error); + if (error) + return false; + + guid_bytes [i++] = read_hex (out error); + if (error) + return false; + + if (get_char () != '-') + return false; + } + + for (; i < 16; i++) { + guid_bytes [i] = read_hex (out error); + if (error) + return false; + } + + if (get_char () != '}' || get_char () != '"') + return false; + + // TODO: Any white-spaces count + c = get_char (); + if (c != ' ') + return false; + + if (get_char () != '"') + return false; + + // Any length of checksum + List checksum_bytes = new List (16); + + var checksum_location = Location; + c = peek_char (); + while (c != '"' && c != -1) { + checksum_bytes.Add (read_hex (out error)); + if (error) + return false; + + c = peek_char (); + } + + if (c == '/') { + ReadSingleLineComment (); + } else if (get_char () != '"') { + return false; + } + + if (context.Settings.GenerateDebugInfo) { + var chsum = checksum_bytes.ToArray (); + + if (file.HasChecksum) { + if (!ArrayComparer.IsEqual (file.Checksum, chsum)) { + // TODO: Report.SymbolRelatedToPreviousError + Report.Warning (1697, 1, checksum_location, "Different checksum values specified for file `{0}'", file.Name); + } + } + + file.SetChecksum (guid_bytes, chsum); + current_source.AutoGenerated = true; + } + + return true; + } + + bool IsTokenIdentifierEqual (char[] identifier) + { + for (int i = 0; i < identifier.Length; ++i) { + if (identifier[i] != id_builder[i]) + return false; + } + + return true; + } + + int TokenizeNumber (int value) + { + number_pos = 0; + + decimal_digits (value); + uint ui = (uint) (number_builder[0] - '0'); + + try { + for (int i = 1; i < number_pos; i++) { + ui = checked ((ui * 10) + ((uint) (number_builder[i] - '0'))); + } + + return (int) ui; + } catch (OverflowException) { + Error_NumericConstantTooLong (); + return -1; + } + } + + string TokenizeFileName (ref int c) + { + var string_builder = new StringBuilder (); + while (c != -1 && c != '\n' && c != UnicodeLS && c != UnicodePS) { + c = get_char (); + if (c == '"') { + c = get_char (); + break; + } + + string_builder.Append ((char) c); + } + + if (string_builder.Length == 0) { + Report.Warning (1709, 1, Location, "Filename specified for preprocessor directive is empty"); + } + + + return string_builder.ToString (); + } + + int TokenizePragmaNumber (ref int c) + { + number_pos = 0; + + int number; + + if (c >= '0' && c <= '9') { + number = TokenizeNumber (c); + + c = get_char (); + + // skip over white space + while (c == ' ' || c == '\t') + c = get_char (); + + if (c == ',') { + c = get_char (); + } + + // skip over white space + while (c == ' ' || c == '\t') + c = get_char (); + } else { + number = -1; + if (c == '/') { + ReadSingleLineComment (); + } else { + Report.Warning (1692, 1, Location, "Invalid number"); + + // Read everything till the end of the line or file + ReadToEndOfLine (); + } + } + + return number; + } + + void ReadToEndOfLine () + { + int c; + do { + c = get_char (); + } while (c != -1 && c != '\n' && c != UnicodeLS && c != UnicodePS); + } + + void ReadSingleLineComment () + { + if (peek_char () != '/') + Report.Warning (1696, 1, Location, "Single-line comment or end-of-line expected"); + + // Read everything till the end of the line or file + ReadToEndOfLine (); + } + + /// + /// Handles #pragma directive + /// + void ParsePragmaDirective () + { + int c; + int length = TokenizePreprocessorIdentifier (out c); + if (length == pragma_warning.Length && IsTokenIdentifierEqual (pragma_warning)) { + length = TokenizePreprocessorIdentifier (out c); + + // + // #pragma warning disable + // #pragma warning restore + // + if (length == pragma_warning_disable.Length) { + bool disable = IsTokenIdentifierEqual (pragma_warning_disable); + if (disable || IsTokenIdentifierEqual (pragma_warning_restore)) { + // skip over white space + while (c == ' ' || c == '\t') + c = get_char (); + + var loc = Location; + + if (c == '\n' || c == '/' || c == UnicodeLS || c == UnicodePS) { + if (c == '/') + ReadSingleLineComment (); + + // + // Disable/Restore all warnings + // + if (disable) { + Report.RegisterWarningRegion (loc).WarningDisable (loc.Row); + } else { + Report.RegisterWarningRegion (loc).WarningEnable (loc.Row); + } + } else { + // + // Disable/Restore a warning or group of warnings + // + int code; + do { + code = TokenizePragmaNumber (ref c); + if (code > 0) { + if (disable) { + Report.RegisterWarningRegion (loc).WarningDisable (loc, code, context.Report); + } else { + Report.RegisterWarningRegion (loc).WarningEnable (loc, code, context); + } + } + } while (code >= 0 && c != '\n' && c != -1 && c != UnicodeLS && c != UnicodePS); + } + + return; + } + } + + Report.Warning (1634, 1, Location, "Expected disable or restore"); + + // Eat any remaining characters on the line + ReadToEndOfLine (); + + return; + } + + // + // #pragma checksum + // + if (length == pragma_checksum.Length && IsTokenIdentifierEqual (pragma_checksum)) { + if (c != ' ' || !ParsePragmaChecksum ()) { + Report.Warning (1695, 1, Location, + "Invalid #pragma checksum syntax. Expected \"filename\" \"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\" \"XXXX...\""); + } + + return; + } + + Report.Warning (1633, 1, Location, "Unrecognized #pragma directive"); + } + + bool eval_val (string s) + { + if (s == "true") + return true; + if (s == "false") + return false; + + return source_file.IsConditionalDefined (s); + } + + bool pp_primary (ref string s) + { + s = s.Trim (); + int len = s.Length; + + if (len > 0){ + char c = s [0]; + + if (c == '('){ + s = s.Substring (1); + bool val = pp_expr (ref s, false); + if (s.Length > 0 && s [0] == ')'){ + s = s.Substring (1); + return val; + } + Error_InvalidDirective (); + return false; + } + + if (is_identifier_start_character (c)){ + int j = 1; + + while (j < len){ + c = s [j]; + + if (is_identifier_part_character (c)){ + j++; + continue; + } + bool v = eval_val (s.Substring (0, j)); + s = s.Substring (j); + return v; + } + bool vv = eval_val (s); + s = ""; + return vv; + } + } + Error_InvalidDirective (); + return false; + } + + bool pp_unary (ref string s) + { + s = s.Trim (); + int len = s.Length; + + if (len > 0){ + if (s [0] == '!'){ + if (len > 1 && s [1] == '='){ + Error_InvalidDirective (); + return false; + } + s = s.Substring (1); + return ! pp_primary (ref s); + } else + return pp_primary (ref s); + } else { + Error_InvalidDirective (); + return false; + } + } + + bool pp_eq (ref string s) + { + bool va = pp_unary (ref s); + + s = s.Trim (); + int len = s.Length; + if (len > 0){ + if (s [0] == '='){ + if (len > 2 && s [1] == '='){ + s = s.Substring (2); + return va == pp_unary (ref s); + } else { + Error_InvalidDirective (); + return false; + } + } else if (s [0] == '!' && len > 1 && s [1] == '='){ + s = s.Substring (2); + + return va != pp_unary (ref s); + + } + } + + return va; + + } + + bool pp_and (ref string s) + { + bool va = pp_eq (ref s); + + s = s.Trim (); + int len = s.Length; + if (len > 0){ + if (s [0] == '&'){ + if (len > 2 && s [1] == '&'){ + s = s.Substring (2); + return (va & pp_and (ref s)); + } else { + Error_InvalidDirective (); + return false; + } + } + } + return va; + } + + // + // Evaluates an expression for `#if' or `#elif' + // + bool pp_expr (ref string s, bool isTerm) + { + bool va = pp_and (ref s); + s = s.Trim (); + int len = s.Length; + if (len > 0){ + char c = s [0]; + + if (c == '|'){ + if (len > 2 && s [1] == '|'){ + s = s.Substring (2); + return va | pp_expr (ref s, isTerm); + } else { + Error_InvalidDirective (); + return false; + } + } + if (isTerm) { + Error_EndLineExpected (); + return false; + } + } + + return va; + } + + bool eval (string s) + { + bool v = pp_expr (ref s, true); + s = s.Trim (); + if (s.Length != 0){ + return false; + } + + return v; + } + + void Error_NumericConstantTooLong () + { + Report.Error (1021, Location, "Integral constant is too large"); + } + + void Error_InvalidDirective () + { + Report.Error (1517, Location, "Invalid preprocessor directive"); + } + + void Error_UnexpectedDirective (string extra) + { + Report.Error ( + 1028, Location, + "Unexpected processor directive ({0})", extra); + } + + void Error_TokensSeen () + { + Report.Error (1032, Location, + "Cannot define or undefine preprocessor symbols after first token in file"); + } + + void Eror_WrongPreprocessorLocation () + { + Report.Error (1040, Location, + "Preprocessor directives must appear as the first non-whitespace character on a line"); + } + + void Error_EndLineExpected () + { + Report.Error (1025, Location, "Single-line comment or end-of-line expected"); + } + + // + // Raises a warning when tokenizer found documentation comment + // on unexpected place + // + void WarningMisplacedComment (Location loc) + { + if (doc_state != XmlCommentState.Error) { + doc_state = XmlCommentState.Error; + Report.Warning (1587, 2, loc, "XML comment is not placed on a valid language element"); + } + } + + // + // if true, then the code continues processing the code + // if false, the code stays in a loop until another directive is + // reached. + // When caller_is_taking is false we ignore all directives except the ones + // which can help us to identify where the #if block ends + bool ParsePreprocessingDirective (bool caller_is_taking) + { + string arg; + bool region_directive = false; + + var directive = get_cmd_arg (out arg); + + // + // The first group of pre-processing instructions is always processed + // + switch (directive) { + case PreprocessorDirective.Region: + region_directive = true; + arg = "true"; + goto case PreprocessorDirective.If; + + case PreprocessorDirective.Endregion: + if (ifstack == null || ifstack.Count == 0){ + Error_UnexpectedDirective ("no #region for this #endregion"); + return true; + } + int pop = ifstack.Pop (); + + if ((pop & REGION) == 0) + Report.Error (1027, Location, "Expected `#endif' directive"); + + return caller_is_taking; + + case PreprocessorDirective.If: + if (ifstack == null) + ifstack = new Stack (2); + + int flags = region_directive ? REGION : 0; + if (ifstack.Count == 0){ + flags |= PARENT_TAKING; + } else { + int state = ifstack.Peek (); + if ((state & TAKING) != 0) { + flags |= PARENT_TAKING; + } + } + + if (eval (arg) && caller_is_taking) { + ifstack.Push (flags | TAKING); + return true; + } + ifstack.Push (flags); + return false; + + case PreprocessorDirective.Endif: + if (ifstack == null || ifstack.Count == 0){ + Error_UnexpectedDirective ("no #if for this #endif"); + return true; + } else { + pop = ifstack.Pop (); + + if ((pop & REGION) != 0) + Report.Error (1038, Location, "#endregion directive expected"); + + if (arg.Length != 0) { + Error_EndLineExpected (); + } + + if (ifstack.Count == 0) + return true; + + int state = ifstack.Peek (); + return (state & TAKING) != 0; + } + + case PreprocessorDirective.Elif: + if (ifstack == null || ifstack.Count == 0){ + Error_UnexpectedDirective ("no #if for this #elif"); + return true; + } else { + int state = ifstack.Pop (); + + if ((state & REGION) != 0) { + Report.Error (1038, Location, "#endregion directive expected"); + return true; + } + + if ((state & ELSE_SEEN) != 0){ + Error_UnexpectedDirective ("#elif not valid after #else"); + return true; + } + + if ((state & TAKING) != 0) { + ifstack.Push (0); + return false; + } + + if (eval (arg) && ((state & PARENT_TAKING) != 0)){ + ifstack.Push (state | TAKING); + return true; + } + + ifstack.Push (state); + return false; + } + + case PreprocessorDirective.Else: + if (ifstack == null || ifstack.Count == 0){ + Error_UnexpectedDirective ("no #if for this #else"); + return true; + } else { + int state = ifstack.Peek (); + + if ((state & REGION) != 0) { + Report.Error (1038, Location, "#endregion directive expected"); + return true; + } + + if ((state & ELSE_SEEN) != 0){ + Error_UnexpectedDirective ("#else within #else"); + return true; + } + + ifstack.Pop (); + + if (arg.Length != 0) { + Error_EndLineExpected (); + return true; + } + + bool ret = false; + if ((state & PARENT_TAKING) != 0) { + ret = (state & TAKING) == 0; + + if (ret) + state |= TAKING; + else + state &= ~TAKING; + } + + ifstack.Push (state | ELSE_SEEN); + + return ret; + } + case PreprocessorDirective.Define: + if (any_token_seen){ + Error_TokensSeen (); + return caller_is_taking; + } + PreProcessDefinition (true, arg, caller_is_taking); + return caller_is_taking; + + case PreprocessorDirective.Undef: + if (any_token_seen){ + Error_TokensSeen (); + return caller_is_taking; + } + PreProcessDefinition (false, arg, caller_is_taking); + return caller_is_taking; + + case PreprocessorDirective.Invalid: + Report.Error (1024, Location, "Wrong preprocessor directive"); + return true; + } + + // + // These are only processed if we are in a `taking' block + // + if (!caller_is_taking) + return false; + + switch (directive){ + case PreprocessorDirective.Error: + Report.Error (1029, Location, "#error: '{0}'", arg); + return true; + + case PreprocessorDirective.Warning: + Report.Warning (1030, 1, Location, "#warning: `{0}'", arg); + return true; + + case PreprocessorDirective.Pragma: + if (context.Settings.Version == LanguageVersion.ISO_1) { + Report.FeatureIsNotAvailable (context, Location, "#pragma"); + } + + ParsePragmaDirective (); + return true; + + case PreprocessorDirective.Line: + Location loc = Location; + if (!PreProcessLine ()) + Report.Error (1576, loc, "The line number specified for #line directive is missing or invalid"); + + return caller_is_taking; + } + + throw new NotImplementedException (directive.ToString ()); + } + + private int consume_string (bool quoted, char quoteChar = '"') + { + int c; + int pos = 0; + Location start_location = Location; + if (quoted) + start_location = start_location - 1; + +#if FULL_AST + int reader_pos = reader.Position; +#endif + + while (true) { + c = get_char (); + if (c == quoteChar) { + if (quoted && peek_char () == quoteChar) { + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder[pos++] = (char) c; + get_char (); + continue; + } + + string s; + if (pos == 0) + s = string.Empty; + else if (pos <= 4) + s = InternIdentifier (value_builder, pos); + else + s = new string (value_builder, 0, pos); + + ILiteralConstant res = new StringLiteral (context.BuiltinTypes, s, start_location); + val = res; +#if FULL_AST + res.ParsedValue = quoted ? + reader.ReadChars (reader_pos - 2, reader.Position - 1) : + reader.ReadChars (reader_pos - 1, reader.Position); +#endif + + return Token.LITERAL; + } + + if (c == '\n' || c == UnicodeLS || c == UnicodePS) { + if (!quoted) { + Report.Error (1010, Location, "Newline in constant"); + + advance_line (); + + // Don't add \r to string literal + if (pos > 1 && value_builder [pos - 1] == '\r') + --pos; + + val = new StringLiteral (context.BuiltinTypes, new string (value_builder, 0, pos), start_location); + return Token.LITERAL; + } + + advance_line (); + } else if (c == '\\' && !quoted) { + ++col; + int surrogate; + c = escape (c, out surrogate); + if (c == -1) + return Token.ERROR; + if (surrogate != 0) { + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder[pos++] = (char) c; + c = surrogate; + } + } else if (c == -1) { + Report.Error (1039, Location, "Unterminated string literal"); + return Token.EOF; + } else { + ++col; + } + + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder[pos++] = (char) c; + } + } + + private int consume_regex () + { + int c; + int pos = 0; + Location start_location = Location; + +#if FULL_AST + int reader_pos = reader.Position; +#endif + + StringBuilder opt_builder = null; + + while (true) { + c = get_char (); + if (c == '\\') { + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + value_builder[pos++] = (char) c; + c = get_char (); + // c will be added automatically at the end of this block + } else if (c == '/') { + + c = peek_char(); + while (c == 'g' || c == 'i' || c == 'm' || c == 's' || c == 'x') { + if (opt_builder == null) + opt_builder = new StringBuilder(); + opt_builder.Append((char) get_char ()); + c = peek_char (); + } + + string s; + if (pos == 0) + s = string.Empty; + else + s = new string (value_builder, 0, pos); + + ILiteralConstant res = new RegexLiteral (context.BuiltinTypes, s, + opt_builder != null ? opt_builder.ToString() : null, + start_location); + val = res; +#if FULL_AST +// res.ParsedValue = quoted ? +// reader.ReadChars (reader_pos - 2, reader.Position - 1) : +// reader.ReadChars (reader_pos - 1, reader.Position); +#endif + + return Token.LITERAL; + } + + if (c == '\n') { + Report.Error (7027, Location, "Newline in regex constant"); + val = new StringLiteral (context.BuiltinTypes, new string (value_builder, 0, pos), start_location); + return Token.LITERAL; + } /* else if (c == '\\') { + c = get_char(); + if (c != -1) { + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + value_builder[pos++] = (char) c; + } + } */ + + if (c == -1) { + Report.Error (7028, Location, "Unterminated regex literal"); + return Token.EOF; + } + + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + + value_builder[pos++] = (char) c; + } + } + + private int consume_xml () + { + int c; + int pos = 0; + Location start_location = Location; + +#if FULL_AST + int reader_pos = reader.Position; +#endif + + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + value_builder[pos++] = (char) '<'; + + while (true) { + + c = get_char (); + if (c == '>') { + + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + value_builder[pos++] = (char) c; + + c = peek_char(); + while (c == ' ' || c == '\t') { + c = get_char (); + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + value_builder[pos++] = (char) c; + } + + // TODO: This is a pretty ghetto way to identify the end of the xml literal. Probably will + // work most of the time, but is not a general solution. FIXME + if (c == ';' || c == '.' || c == ',' || c == ')' || c == '}' || c == ']') { + + string s; + if (pos == 0) + s = string.Empty; + else + s = new string (value_builder, 0, pos); + + ILiteralConstant res = new XmlLiteral (context.BuiltinTypes, s, start_location); + val = res; +#if FULL_AST +// res.ParsedValue = quoted ? +// reader.ReadChars (reader_pos - 2, reader.Position - 1) : +// reader.ReadChars (reader_pos - 1, reader.Position); +#endif + + return Token.LITERAL; + } + } + + if (c == -1) { + Report.Error (7029, Location, "Unterminated xml literal"); + return Token.EOF; + } + + if (pos == value_builder.Length) + Array.Resize (ref value_builder, pos * 2); + value_builder[pos++] = (char) c; + } + } + + private int consume_identifier (bool parse_token, int s) + { + int res = consume_identifier (parse_token, s, false); + + if (doc_state == XmlCommentState.Allowed) + doc_state = XmlCommentState.NotAllowed; + + return res; + } + + int consume_identifier (bool parse_token, int c, bool quoted) + { + // + // This method is very performance sensitive. It accounts + // for approximately 25% of all parser time + // + + int pos = 0; + int column = col; + if (quoted) + --column; + + if (c == '\\') { + int surrogate; + c = escape (c, out surrogate); + if (surrogate != 0) { + id_builder [pos++] = (char) c; + c = surrogate; + } + } + + id_builder [pos++] = (char) c; + + bool is_config_ident = false; + + try { + while (true) { + c = reader.Read (); + + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || (c >= '0' && c <= '9') || c == '$') { + id_builder [pos++] = (char) c; + continue; + } + + if (parsing_block == 0 && c == ':' && !is_config_ident) { + var colonPos = reader.Position; + c = reader.Read (); + if (c == ':') { + c = reader.Read (); + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '$') { + is_config_ident = true; + id_builder [pos++] = ':'; + id_builder [pos++] = ':'; + id_builder [pos++] = (char) c; + continue; + } + } + if (!is_config_ident) { + reader.Position = colonPos; + c = ':'; + } + } + + if (c < 0x80) { + if (c == '\\') { + int surrogate; + c = escape (c, out surrogate); + if (is_identifier_part_character ((char) c)) + id_builder[pos++] = (char) c; + + if (surrogate != 0) { + c = surrogate; + } + + continue; + } + } else if (Char.IsLetter ((char) c) || Char.GetUnicodeCategory ((char) c) == UnicodeCategory.ConnectorPunctuation) { + id_builder [pos++] = (char) c; + continue; + } + + putback_char = c; + break; + } + } catch (IndexOutOfRangeException) { + Report.Error (645, Location, "Identifier too long (limit is 512 chars)"); + --pos; + col += pos; + } + + col += pos - 1; + + // + // Optimization: avoids doing the keyword lookup + // on uppercase letters + // + if (!quoted && !is_config_ident && id_builder [0] >= '_') { + int keyword = GetKeyword (id_builder, pos); + if (keyword != -1) { + val = ltb.Create (keyword == Token.AWAIT ? "await" : null, current_source, ref_line, column); + if (keyword == Token.ELSE && do_auto_semi_insertion(parse_token, line, -1, keyword)) + return Token.SEMICOLON; + return keyword; + } + } + + string s = InternIdentifier (id_builder, pos); + + val = ltb.Create (s, current_source, ref_line, column); + if (quoted && parsing_attribute_section) + AddEscapedIdentifier (((LocatedToken) val).Location); + + return is_config_ident ? Token.IDENTIFIER_CONFIG : + ((parsing_modifiers && !parsing_attribute_section) ? Token.IDENTIFIER_MODIFIER : Token.IDENTIFIER); + } + + string InternIdentifier (char[] charBuffer, int length) + { + // + // Keep identifiers in an array of hashtables to avoid needless + // allocations + // + var identifiers_group = identifiers[length]; + string s; + if (identifiers_group != null) { + if (identifiers_group.TryGetValue (charBuffer, out s)) { + return s; + } + } else { + // TODO: this should be number of files dependant + // corlib compilation peaks at 1000 and System.Core at 150 + int capacity = length > 20 ? 10 : 100; + identifiers_group = new Dictionary (capacity, new IdentifiersComparer (length)); + identifiers[length] = identifiers_group; + } + + char[] chars = new char[length]; + Array.Copy (charBuffer, chars, length); + + s = new string (charBuffer, 0, length); + identifiers_group.Add (chars, s); + return s; + } + + public int xtoken (bool parse_token = false) + { + int d, c, next; + + // Allow next token to be pushed back if we insert semicolons + if (putback_token != -1) { + next = putback_token; + putback_token = -1; + return next; + } + + // Decrement parse regex counter (allows regex literals to follow 1 token after + // symbols '=', ':', '(', '[', and ',') + if (parse_regex_xml > 0) + parse_regex_xml--; + + // Decrement parse colon counter (allows us to disambiguate ident:*=value from *= operator) + if (parse_colon > 0) + parse_colon--; + + // Decrement allow auto semi counter (allows us to allow semicolon insertion only after next x symbols) + if (allow_auto_semi_after > 0) + allow_auto_semi_after--; + + // Eat all tokens until we get to final end brace + if (eat_block) { + eat_block = false; + eat_block_braces = 1; + do { + next = xtoken (parse_token); + if (next == Token.OPEN_BRACE || next == Token.OPEN_BRACE_INIT) { + eat_block_braces++; + } else if (next == Token.CLOSE_BRACE) { + eat_block_braces--; + } + } while (eat_block_braces > 0 && next != Token.EOF); + return next; + } + + // Whether we have seen comments on the current line + bool comments_seen = false; + while ((c = get_char ()) != -1) { + switch (c) { + case '\t': + col = ((col - 1 + tab_size) / tab_size) * tab_size; + continue; + + case ' ': + case '\f': + case '\v': + case 0xa0: + case 0: + case 0xFEFF: // Ignore BOM anywhere in the file + continue; + +/* This is required for compatibility with .NET + case 0xEF: + if (peek_char () == 0xBB) { + PushPosition (); + get_char (); + if (get_char () == 0xBF) + continue; + PopPosition (); + } + break; +*/ + case '\\': + tokens_seen = true; + return consume_identifier (parse_token, c); + + case '{': + val = ltb.Create (current_source, ref_line, col); + if (current_token == Token.OPEN_PARENS || + current_token == Token.ASSIGN || + current_token == Token.COMMA || + current_token == Token.COLON || + current_token == Token.OPEN_BRACKET || + current_token == Token.OPEN_BRACKET_EXPR || + current_token == Token.RETURN || + current_token == Token.OP_OR || + current_token == Token.LOGICAL_OR_ASSIGN || + current_token == Token.INTERR || + current_token == Token.INTERR_NULLABLE) { + bool isInit = true; + PushPosition(); + this.AutoSemiInsertion = false; + next = token (); + if (next != Token.CLOSE_BRACE) { + if (next != Token.IDENTIFIER && next != Token.LITERAL) { + isInit = false; + } else { + next = token (); + if (next != Token.COLON) { + isInit = false; + } + } + } + PopPosition(); + if (isInit) + return Token.OPEN_BRACE_INIT; + } + return Token.OPEN_BRACE; + case '}': + if (do_auto_semi_insertion (parse_token, line, c, -1)) + return Token.SEMICOLON; + val = ltb.Create (current_source, ref_line, col); + return Token.CLOSE_BRACE; + case '[': + // To block doccomment inside attribute declaration. + if (doc_state == XmlCommentState.Allowed) + doc_state = XmlCommentState.NotAllowed; + + val = ltb.Create (current_source, ref_line, col); + + parse_regex_xml = 2; // regex literals may be included in array initializers. + + if (parsing_block == 0) + return Token.OPEN_BRACKET; + + next = peek_char (); + switch (next) { + case ']': + case ',': + return Token.OPEN_BRACKET; + + case ' ': + case '\f': + case '\v': + case '\r': + case '\n': + case UnicodeLS: + case UnicodePS: + case '/': + next = peek_token (); + if (next == Token.COMMA || next == Token.CLOSE_BRACKET) + return Token.OPEN_BRACKET; + + return Token.OPEN_BRACKET_EXPR; + default: + return Token.OPEN_BRACKET_EXPR; + } + case ']': + ltb.CreateOptional (current_source, ref_line, col, ref val); + return Token.CLOSE_BRACKET; + case '(': + val = ltb.Create (current_source, ref_line, col); + parse_regex_xml = 2; // regex literals may follow open parens (method param, expressions). + // + // An expression versions of parens can appear in block context only + // + if (parsing_block != 0) { + + // + // Optmize most common case where we know that parens + // is not special + // + switch (current_token) { + case Token.IDENTIFIER: + case Token.IF: + case Token.FOR: + case Token.FOR_EACH: + case Token.TYPEOF: + case Token.WHILE: + case Token.USING: + case Token.DEFAULT: + case Token.DELEGATE: + case Token.OP_GENERICS_GT: + return Token.OPEN_PARENS; + } + + // Optimize using peek + int xx = peek_char (); + switch (xx) { + case '(': + case '\'': + case '"': + case '0': + case '1': + return Token.OPEN_PARENS; + } + + PushPosition (); + d = TokenizeOpenParens (); + PopPosition (); + return d; + } + + return Token.OPEN_PARENS; + case ')': +// d = peek_char (); +// if (d == '.') { +// get_char (); +// return Token.CLOSE_PARENS_DOT; +// } + ltb.CreateOptional (current_source, ref_line, col, ref val); + return Token.CLOSE_PARENS; + case ',': + ltb.CreateOptional (current_source, ref_line, col, ref val); + parse_regex_xml = 2; // Regex literals may follow commas, (method param, initializer element) + return Token.COMMA; + case ';': + ltb.CreateOptional (current_source, ref_line, col, ref val); + return Token.SEMICOLON; + case '~': + val = ltb.Create (current_source, ref_line, col); + return Token.TILDE; + case '?': + val = ltb.Create (current_source, ref_line, col); + return TokenizePossibleNullableType (); + + case '<': + val = ltb.Create (current_source, ref_line, col); + d = peek_char (); + + if (d == '=') { + get_char (); + return Token.OP_LE; + } + + if (d == '<') { + get_char (); + d = peek_char (); + + if (d == '=') { + get_char (); + return Token.OP_SHIFT_LEFT_ASSIGN; + } + return Token.OP_SHIFT_LEFT; + } + + if (parse_regex_xml > 0 && char.IsLetter ((char)d)) { + return consume_xml(); + } + + return Token.OP_LT; + + case '>': + val = ltb.Create (current_source, ref_line, col); + d = peek_char (); + + if (parsing_generic_less_than > 1 || (parsing_generic_less_than == 1 && d != '>')) { + parsing_generic_less_than--; + return Token.OP_GENERICS_GT; + } + + if (d == '=') { + get_char (); + return Token.OP_GE; + } + + if (d == '>') { + get_char (); + d = peek_char (); + + if (d == '=') { + get_char (); + return Token.OP_SHIFT_RIGHT_ASSIGN; + } + + if (d == '>') { + get_char (); + d = peek_char (); + + if (d == '=') { + get_char (); + return Token.OP_USHIFT_RIGHT_ASSIGN; + } + + return Token.OP_USHIFT_RIGHT; + } + return Token.OP_SHIFT_RIGHT; + } + + return Token.OP_GT; + + case '+': + val = ltb.Create (current_source, ref_line, col); + d = peek_char (); + if (d == '+') { + d = Token.OP_INC; + } else if (d == '=') { + d = Token.OP_ADD_ASSIGN; + } else { + return Token.PLUS; + } + get_char (); + return d; + + case '-': + val = ltb.Create (current_source, ref_line, col); + d = peek_char (); + if (d == '-') { + d = Token.OP_DEC; + } else if (d == '=') + d = Token.OP_SUB_ASSIGN; + else if (d == '>') + d = Token.OP_PTR; + else { + return Token.MINUS; + } + get_char (); + return d; + + case '!': + val = ltb.Create (current_source, ref_line, col); + if (peek_char () == '=') { + get_char (); + if (peek_char () == '=') { + get_char (); + return Token.OP_STRICT_NE; + } + return Token.OP_NE; + } + return Token.BANG; + + case '=': + val = ltb.Create (current_source, ref_line, col); + d = peek_char (); + if (d == '=') { + parse_regex_xml = 2; // Regex literals may follow equality test operators. + get_char (); + d = peek_char (); + if (d == '=') { + get_char (); + return Token.OP_STRICT_EQ; + } + return Token.OP_EQ; + } + if (d == '>' && parsing_playscript) { + get_char (); + return Token.ARROW; + } + + parse_regex_xml = 2; // Regex literals may follow assignment op '=' + return Token.ASSIGN; + + case '&': + val = ltb.Create (current_source, ref_line, col); + d = peek_char (); + if (d == '&') { + get_char (); + d = peek_char (); + if (d == '=') { + get_char (); + return Token.LOGICAL_AND_ASSIGN; + } + return Token.OP_AND; + } + if (d == '=') { + get_char (); + return Token.OP_AND_ASSIGN; + } + return Token.BITWISE_AND; + + case '|': + val = ltb.Create (current_source, ref_line, col); + d = peek_char (); + if (d == '|') { + get_char (); + d = peek_char (); + if (d == '=') { + get_char (); + return Token.LOGICAL_OR_ASSIGN; + } + return Token.OP_OR; + } + if (d == '=') { + get_char (); + return Token.OP_OR_ASSIGN; + } + return Token.BITWISE_OR; + + case '*': + val = ltb.Create (current_source, ref_line, col); + if (peek_char () == '=' && parse_colon == 0) { + get_char (); + return Token.OP_MULT_ASSIGN; + } + return Token.STAR; + + case '/': + d = peek_char (); + if (d == '=') { + val = ltb.Create (current_source, ref_line, col); + get_char (); + return Token.OP_DIV_ASSIGN; + } + + // Handle double-slash comments. + if (d == '/') { + get_char (); + if (doc_processing) { + if (peek_char () == '/') { + get_char (); + // Don't allow ////. + if ((d = peek_char ()) != '/') { + if (doc_state == XmlCommentState.Allowed) + handle_one_line_xml_comment (); + else if (doc_state == XmlCommentState.NotAllowed) + WarningMisplacedComment (Location - 3); + } + } else { + if (xml_comment_buffer.Length > 0) + doc_state = XmlCommentState.NotAllowed; + } + } + + while ((d = get_char ()) != -1 && d != '\n' && d != UnicodeLS && d != UnicodePS); + + if (d == '\n' || d == UnicodeLS || d == UnicodePS) + putback (d); + + any_token_seen |= tokens_seen; + tokens_seen = false; + comments_seen = false; + continue; + } else if (d == '*') { + get_char (); + // Handle /*@asx conditional comment + if (peek_char () == '@') { + PushPosition(); + get_char (); + if (peek_char() == 'a') { + get_char (); + if (peek_char () == 's') { + get_char (); + if (peek_char () == 'x') { + get_char (); + DiscardPosition(); + continue; + } + } + } + PopPosition(); + } + bool docAppend = false; + if (doc_processing && peek_char () == '*') { + get_char (); + // But when it is /**/, just do nothing. + if (peek_char () == '/') { + get_char (); + continue; + } + if (doc_state == XmlCommentState.Allowed) + docAppend = true; + else if (doc_state == XmlCommentState.NotAllowed) { + WarningMisplacedComment (Location - 2); + } + } + + int current_comment_start = 0; + if (docAppend) { + current_comment_start = xml_comment_buffer.Length; + xml_comment_buffer.Append (Environment.NewLine); + } + + while ((d = get_char ()) != -1) { + if (d == '*' && peek_char () == '/') { + get_char (); + comments_seen = true; + break; + } + if (docAppend) + xml_comment_buffer.Append ((char)d); + + if (d == '\n' || d == UnicodeLS || d == UnicodePS){ + any_token_seen |= tokens_seen; + tokens_seen = false; + // + // Reset 'comments_seen' just to be consistent. + // It doesn't matter either way, here. + // + comments_seen = false; + } + } + if (!comments_seen) + Report.Error (1035, Location, "End-of-file found, '*/' expected"); + + if (docAppend) + update_formatted_doc_comment (current_comment_start); + continue; + } else if (parse_regex_xml > 0) { + // A regex literal may follow an '=', '==', '===' '(' ',' ':' or '['. + return consume_regex(); + } + val = ltb.Create (current_source, ref_line, col); + return Token.DIV; + + case '%': + val = ltb.Create (current_source, ref_line, col); + if (peek_char () == '=') { + get_char (); + return Token.OP_MOD_ASSIGN; + } + return Token.PERCENT; + + case '^': + val = ltb.Create (current_source, ref_line, col); + if (peek_char () == '=') { + get_char (); + return Token.OP_XOR_ASSIGN; + } + return Token.CARRET; + + case ':': + val = ltb.Create (current_source, ref_line, col); + if (peek_char () == ':') { + get_char (); + return Token.DOUBLE_COLON; + } + parse_regex_xml = 2; // Regex literals may follow colons in object initializers. + parse_colon = 2; // Don't parse *= after a colon + return Token.COLON; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + tokens_seen = true; + return is_number (c); + + case '\n': // white space + case UnicodeLS: + case UnicodePS: + if (do_auto_semi_insertion (parse_token, line - 1, c, -1)) + return Token.SEMICOLON; + any_token_seen |= tokens_seen; + tokens_seen = false; + comments_seen = false; + continue; + + case '.': + tokens_seen = true; + d = peek_char (); + if (d >= '0' && d <= '9') + return is_number (c); + + if (d == '@') { + get_char (); + return Token.DOT_AT; + } + + if (d == '*') { + get_char (); + return Token.DOT_STAR; + } + +// if (d == '(') { +// get_char (); +// return Token.DOT_OPEN_PARENS; +// } + + if (d == '.') { + get_char (); + d = peek_char (); + if (d == '.') { + get_char (); + return Token.DOTDOTDOT; + } + if (d == '@') { + get_char (); + return Token.DOTDOT_AT; + } + if (d == '*') { + get_char (); + return Token.DOTDOT_STAR; + } + return Token.DOTDOT; + } + + ltb.CreateOptional (current_source, ref_line, col, ref val); + if (d != '<') { + return Token.DOT; + } + get_char (); + parsing_generic_less_than++; + int dim; + PushPosition (); + if (parse_generic_dimension (out dim)) { + val = dim; + DiscardPosition (); + return Token.GENERIC_DIMENSION; + } + PopPosition (); + return Token.OP_GENERICS_LT; + + case '#': + if (tokens_seen || comments_seen) { + Eror_WrongPreprocessorLocation (); + return Token.ERROR; + } + + if (ParsePreprocessingDirective (true)) + continue; + + bool directive_expected = false; + while ((c = get_char ()) != -1) { + if (col == 1) { + directive_expected = true; + } else if (!directive_expected) { + // TODO: Implement comment support for disabled code and uncomment this code +// if (c == '#') { +// Eror_WrongPreprocessorLocation (); +// return Token.ERROR; +// } + continue; + } + + if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\v' || c == UnicodeLS || c == UnicodePS) + continue; + + if (c == '#') { + if (ParsePreprocessingDirective (false)) + break; + } + directive_expected = false; + } + + if (c != -1) { + tokens_seen = false; + continue; + } + + return Token.EOF; + + case '"': + return consume_string (false, '"'); + case '\'': + return consume_string (false, '\''); + +// case '\'': +// return TokenizeBackslash (); + + case '@': + if (!parsing_playscript) + return Token.OP_AT; + + c = get_char (); + if (c == '"') { + tokens_seen = true; + return consume_string (true); + } + + // Handle end @asx*/ conditional comment + PushPosition(); + if (c == 'a') { + if (peek_char () == 's') { + get_char (); + if (peek_char () == 'x') { + get_char (); + if (peek_char () == '*') { + get_char (); + if (peek_char () == '/') { + get_char (); + DiscardPosition(); + continue; + } + } + } + } + } + PopPosition(); + + if (is_identifier_start_character (c)){ + return consume_identifier (parse_token, c, true); + } + + Report.Error (1646, Location, "Keyword, identifier, or string expected after verbatim specifier: @"); + return Token.ERROR; + + case EvalStatementParserCharacter: + return Token.EVAL_STATEMENT_PARSER; + case EvalCompilationUnitParserCharacter: + return Token.EVAL_COMPILATION_UNIT_PARSER; + case EvalUsingDeclarationsParserCharacter: + return Token.EVAL_USING_DECLARATIONS_UNIT_PARSER; + case DocumentationXref: + return Token.DOC_SEE; + } + + if (is_identifier_start_character (c)) { + tokens_seen = true; + return consume_identifier (parse_token, c); + } + + if (char.IsWhiteSpace ((char) c)) + continue; + + Report.Error (1056, Location, "Unexpected character `{0}'", ((char) c).ToString ()); + } + + if (CompleteOnEOF){ + if (generated) + return Token.COMPLETE_COMPLETION; + + generated = true; + return Token.GENERATE_COMPLETION; + } + + + return Token.EOF; + } + +// int TokenizeBackslash () +// { +//#if FULL_AST +// int read_start = reader.Position; +//#endif +// Location start_location = Location; +// int c = get_char (); +// tokens_seen = true; +// if (c == '\'') { +// val = new CharLiteral (context.BuiltinTypes, (char) c, start_location); +// Report.Error (1011, start_location, "Empty character literal"); +// return Token.LITERAL; +// } +// +// if (c == '\n' || c == UnicodeLS || c == UnicodePS) { +// Report.Error (1010, start_location, "Newline in constant"); +// return Token.ERROR; +// } +// +// int d; +// c = escape (c, out d); +// if (c == -1) +// return Token.ERROR; +// if (d != 0) +// throw new NotImplementedException (); +// +// ILiteralConstant res = new CharLiteral (context.BuiltinTypes, (char) c, start_location); +// val = res; +// c = get_char (); +// +// if (c != '\'') { +// Report.Error (1012, start_location, "Too many characters in character literal"); +// +// // Try to recover, read until newline or next "'" +// while ((c = get_char ()) != -1) { +// if (c == '\n' || c == '\'') +// break; +// } +// } +// +//#if FULL_AST +// res.ParsedValue = reader.ReadChars (read_start - 1, reader.Position); +//#endif +// +// return Token.LITERAL; +// } + + + // + // Handles one line xml comment + // + private void handle_one_line_xml_comment () + { + int c; + while ((c = peek_char ()) == ' ') + get_char (); // skip heading whitespaces. + while ((c = peek_char ()) != -1 && c != '\n' && c != '\r') { + xml_comment_buffer.Append ((char) get_char ()); + } + if (c == '\r' || c == '\n') + xml_comment_buffer.Append (Environment.NewLine); + } + + // + // Remove heading "*" in Javadoc-like xml documentation. + // + private void update_formatted_doc_comment (int current_comment_start) + { + int length = xml_comment_buffer.Length - current_comment_start; + string [] lines = xml_comment_buffer.ToString ( + current_comment_start, + length).Replace ("\r", "").Split ('\n'); + + // The first line starts with /**, thus it is not target + // for the format check. + for (int i = 1; i < lines.Length; i++) { + string s = lines [i]; + int idx = s.IndexOf ('*'); + string head = null; + if (idx < 0) { + if (i < lines.Length - 1) + return; + head = s; + } else + head = s.Substring (0, idx); + foreach (char c in head) + if (c != ' ') + return; + lines [i] = s.Substring (idx + 1); + } + xml_comment_buffer.Remove (current_comment_start, length); + xml_comment_buffer.Insert (current_comment_start, String.Join (Environment.NewLine, lines)); + } + + // + // Checks if there was incorrect doc comments and raise + // warnings. + // + public void check_incorrect_doc_comment () + { + if (xml_comment_buffer.Length > 0) + WarningMisplacedComment (Location); + } + + // + // Consumes the saved xml comment lines (if any) + // as for current target member or type. + // + public string consume_doc_comment () + { + if (xml_comment_buffer.Length > 0) { + string ret = xml_comment_buffer.ToString (); + reset_doc_comment (); + return ret; + } + return null; + } + + void reset_doc_comment () + { + xml_comment_buffer.Length = 0; + } + + bool do_auto_semi_insertion (bool parse_token, int line, int c, int t) + { + bool insert_semi = false; + if (parse_token && prev_token_line == line && prev_token != Token.SEMICOLON && !parsing_playscript && allow_auto_semi && + allow_auto_semi_after == 0 && allowed_auto_semi_tokens[prev_token]) { + PushPosition (); + int next = xtoken (); + PopPosition (); + if (!disallowed_next_auto_semi_tokens[next]) { + if (c != -1) + putback (c); + else + token_putback (t); + warn_semi_inserted (Location); + insert_semi = true; + } + } + if (parse_token && has_temp_auto_semi_after_tokens) + clear_temp_auto_semi_tokens (); + return insert_semi; + } + + void warn_semi_inserted (Location loc) + { + Report.Warning (7093, 4, loc, "Semicolon automatically inserted on unterminated line."); + } + + void clear_temp_auto_semi_tokens () + { + var len = temp_auto_semi_after_tokens.Count; + for (var i = 0; i < len; i++) { + int token = temp_auto_semi_after_tokens[i]; + allowed_auto_semi_tokens.Set (token, false); + } + has_temp_auto_semi_after_tokens = false; + } + + public void cleanup () + { + if (ifstack != null && ifstack.Count >= 1) { + int state = ifstack.Pop (); + if ((state & REGION) != 0) + Report.Error (1038, Location, "#endregion directive expected"); + else + Report.Error (1027, Location, "Expected `#endif' directive"); + } + } + } + + // + // Indicates whether it accepts XML documentation or not. + // + public enum XmlCommentState { + // comment is allowed in this state. + Allowed, + // comment is not allowed in this state. + NotAllowed, + // once comments appeared when it is NotAllowed, then the + // state is changed to it, until the state is changed to + // .Allowed. + Error + } +} + diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/reflection.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/reflection.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/reflection.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/reflection.cs index 936818f07..2f950efd1 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/reflection.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/reflection.cs @@ -17,7 +17,7 @@ using System.Reflection.Emit; using System.Security; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { #if STATIC public class ReflectionImporter diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/report.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/report.cs index 63fea3196..7478efa56 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/report.cs @@ -14,7 +14,7 @@ using System.Collections.Generic; using System.Diagnostics; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { // // Errors and warnings manager @@ -58,7 +58,7 @@ public class Report 3021, 3022, 3023, 3024, 3026, 3027, 4014, 4024, 4025, 4026, 7035, 7080, 7081, 7082, 7095, - 8009, 8094 + 8009, }; static HashSet AllWarningsHashSet; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/settings.cs similarity index 83% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/settings.cs index 141dd91f8..7e5134bfd 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/settings.cs @@ -18,8 +18,9 @@ using System.Text; using System.Globalization; using System; +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { public enum LanguageVersion { @@ -43,7 +44,8 @@ public enum RuntimeVersion public enum Target { - Library, Exe, Module, WinExe + Library = 1, Exe = 2, Module = 4, WinExe = 8, + IsTextTarget = 48 } public enum Platform @@ -56,6 +58,13 @@ public enum Platform IA64 } + public enum InliningMode + { + None, + Explicit, + Any + } + public class CompilerSettings { public Target Target; @@ -165,7 +174,7 @@ public class CompilerSettings public bool WriteMetadataOnly; - readonly List conditional_symbols; + readonly Dictionary conditional_symbols; readonly List source_files; @@ -173,6 +182,91 @@ public class CompilerSettings List warnings_only; HashSet warning_ignore_table; + // + // Automatically seal any class with no derived classes. (NOTE: Intended for AOT compilation) + // + + public bool AutoSeal; + public bool AutoSealVerbosity; + + // + // Settings controlling the enabling of components of the new dynamic runtime + // + + // if true, then static calls to PSBinaryOperation.Addition(a,b) are used instead of binder + public bool NewDynamicRuntime_BinaryOps = false; + // if true, then static calls to PSUnaryOperation.xyz(a,b) are used instead of binder + public bool NewDynamicRuntime_UnaryOps = false; + // if true, dynamics are cast to boolean before performing logical operations + public bool NewDynamicRuntime_LogicalOps = false; + // if true, hasOwnProperty is statically called on dynamics + public bool NewDynamicRuntime_HasOwnProperty = false; + // if true, conversions use static calls to PSConverter.ConvertToXYZ + public bool NewDynamicRuntime_Convert = false; + // if true, conversions will be removed around dynamic statements + public bool NewDynamicRuntime_ConvertReturnType = false; + // if true, new get/set index call sites will be used + public bool NewDynamicRuntime_GetSetIndex = false; + // if true, new get/set member call sites will be used + public bool NewDynamicRuntime_GetSetMember = false; + // if true, both the true and false componets of a ?: will be cast to dynamic if either is dynamic + public bool NewDynamicRuntime_Conditional = false; + // if true, event add/remove binders will be disabled + public bool NewDynamicRuntime_EventAddRemove = false; + // if true, PSInvokeMember non-delegate invokes are used + public bool NewDynamicRuntime_InvokeMember = false; + // if true, PSInvoke non-delegate invokes are used for calling Functions + public bool NewDynamicRuntime_Invoke = false; + // if true, toString/ToString is statically called on dynamics + public bool NewDynamicRuntime_ToString = false; + // if true, dynamic Constructor will be resolved at compile time if possible + public bool NewDynamicRuntime_Constructor = false; + // if true, type hints will be used for expression resolving + public bool NewDynamicRuntime_TypeHint = false; + + public void SetNewDynamicRuntimeEnable(bool value) + { + NewDynamicRuntime_BinaryOps = value; + NewDynamicRuntime_UnaryOps = value; + NewDynamicRuntime_LogicalOps = value; + NewDynamicRuntime_HasOwnProperty = value; + NewDynamicRuntime_Convert = value; + NewDynamicRuntime_ConvertReturnType = value; + NewDynamicRuntime_GetSetIndex = value; + NewDynamicRuntime_GetSetMember = value; + NewDynamicRuntime_Conditional = value; + NewDynamicRuntime_EventAddRemove = value; + NewDynamicRuntime_InvokeMember = value; + NewDynamicRuntime_Invoke = value; + NewDynamicRuntime_ToString = value; + NewDynamicRuntime_Constructor = value; + NewDynamicRuntime_TypeHint = value; + } + + // + // Allow dynamic code at the top level of a program. + // + + public bool AllowDynamic = true; + + // + // Whether to enable PlayScript strict mode. Defaults to true. + // + + public bool PsStrictMode = true; + + // + // Whether to enable PlayScript compiler only mode. Defaults to false. + // + + public bool PsOnlyMode = false; + + // + // Inlining mode for source level inliner (none, explicit, any) + // + + public InliningMode Inlining = InliningMode.None; + public CompilerSettings () { StdLib = true; @@ -186,6 +280,9 @@ public CompilerSettings () StdLibRuntimeVersion = RuntimeVersion.v4; WarningLevel = 4; + // Turn Dynamic Runtime on by default + SetNewDynamicRuntimeEnable(true); + // Default to 1 or mdb files would be platform speficic TabSize = 1; @@ -194,11 +291,11 @@ public CompilerSettings () Modules = new List (); ReferencesLookupPaths = new List (); - conditional_symbols = new List (); + conditional_symbols = new Dictionary (); // // Add default mcs define // - conditional_symbols.Add ("__MonoCS__"); + conditional_symbols.Add ("__MonoCS__", "true"); source_files = new List (); } @@ -231,10 +328,10 @@ public List SourceFiles { #endregion - public void AddConditionalSymbol (string symbol) + public void AddConditionalSymbol (string symbol, string value = "true") { - if (!conditional_symbols.Contains (symbol)) - conditional_symbols.Add (symbol); + if (!conditional_symbols.ContainsKey (symbol)) + conditional_symbols.Add (symbol, value); } public void AddWarningAsError (int id) @@ -255,7 +352,12 @@ public void AddWarningOnly (int id) public bool IsConditionalSymbolDefined (string symbol) { - return conditional_symbols.Contains (symbol); + return conditional_symbols.ContainsKey (symbol); + } + + public string GetConditionalSymbolValue (string symbol) + { + return conditional_symbols [symbol]; } public bool IsWarningAsError (int code) @@ -340,15 +442,32 @@ public bool HasBeenStopped { void About () { +#if PLAYSCRIPT output.WriteLine ( - "The Mono C# compiler is Copyright 2001-2011, Novell, Inc.\n\n" + + "The PlayScript compiler parts Copyright 2013, Zynga, Inc.\n" + + "Based on Mono MCS Compiler Copyright 2001-2011, Novell, Inc.\n\n" + "The compiler source code is released under the terms of the \n" + "MIT X11 or GNU GPL licenses\n\n" + + "For more information on PlayScript, visit the project Web site\n" + + " http://playscriptredux.github.io/\n\n" + + "For more information on Mono, visit the project Web site\n" + " http://www.mono-project.com\n\n" + + "The compiler was written by Miguel de Icaza, Ravi Pratap, Martin Baulig, Marek Safar, Raja R Harinath, Atushi Enomoto\n" + + "The PlayScript/ActionScript compiler was written by Ben Cooley and Icer Addis - Zynga"); +#else + output.WriteLine ( + "The Mono C# compiler is Copyright 2001-2011, Novell, Inc.\n\n" + + "The compiler source code is released under the terms of the \n" + + "MIT X11 or GNU GPL licenses\n\n" + + + "For more information on Mono, visit the project Web site\n" + + " http://www.mono-project.com\n\n" + + "The compiler was written by Miguel de Icaza, Ravi Pratap, Martin Baulig, Marek Safar, Raja R Harinath, Atushi Enomoto"); +#endif } public CompilerSettings ParseArguments (string[] args) @@ -701,6 +820,7 @@ ParseResult ParseOption (string option, ref string[] args, CompilerSettings sett case "/t": case "/target": + bool is_dotnet = true; switch (value) { case "exe": settings.Target = Target.Exe; @@ -721,9 +841,12 @@ ParseResult ParseOption (string option, ref string[] args, CompilerSettings sett break; default: - report.Error (2019, "Invalid target type for -target. Valid options are `exe', `winexe', `library' or `module'"); + report.Error (2019, "Invalid target type for -target. Valid options are `exe', `winexe', `library', `module'"); return ParseResult.Error; } + if (is_dotnet) { + settings.AddConditionalSymbol ("TARGET_IL"); + } return ParseResult.Success; case "/out": @@ -753,6 +876,61 @@ ParseResult ParseOption (string option, ref string[] args, CompilerSettings sett // nothing. return ParseResult.Success; + case "/inline": + if (value.Length == 0) { + Error_RequiresArgument (option); + return ParseResult.Error; + } + + switch (value.ToLowerInvariant ()) { + case "none": + settings.Inlining = InliningMode.None; + break; + case "explicit": + settings.Inlining = InliningMode.Explicit; + break; + case "any": + settings.Inlining = InliningMode.Any; + break; + default: + report.Error (1672, "Invalid -inline option `{0}'. Valid options are `none', `explicit', `any'", + value); + return ParseResult.Error; + } + + return ParseResult.Success; + + case "/autoseal": + case "/autoseal+": + settings.AutoSeal = true; + return ParseResult.Success; + + case "/autoseal-": + settings.AutoSeal = false; + return ParseResult.Success; + + case "/newdynamic": + case "/newdynamic+": + settings.SetNewDynamicRuntimeEnable(true); + return ParseResult.Success; + + case "/newdynamic-": + settings.SetNewDynamicRuntimeEnable(false); + return ParseResult.Success; + + case "/autoseal_verbosity": + case "/autoseal_verbosity+": + settings.AutoSealVerbosity = true; + return ParseResult.Success; + + case "/autoseal_verbosity-": + settings.AutoSealVerbosity = false; + return ParseResult.Success; + + case "/dynamic-": + settings.AllowDynamic = false; + return ParseResult.Success; + case "/d": case "/define": { if (value.Length == 0) { @@ -762,12 +940,18 @@ ParseResult ParseOption (string option, ref string[] args, CompilerSettings sett foreach (string d in value.Split (argument_value_separator)) { string conditional = d.Trim (); + string conditionalValue = "true"; // NOTE: This is only ever used by PlayScript! + string[] conditionalArgs = conditional.Split (new char[] { '=' }); + if (conditionalArgs.Length == 2) { + conditional = conditionalArgs [0].Trim (); + conditionalValue = conditionalArgs [1].Trim (); + } if (!Tokenizer.IsValidIdentifier (conditional)) { report.Warning (2029, 1, "Invalid conditional define symbol `{0}'", conditional); continue; } - settings.AddConditionalSymbol (conditional); + settings.AddConditionalSymbol (conditional, conditionalValue); } return ParseResult.Success; } @@ -930,7 +1114,7 @@ ParseResult ParseOption (string option, ref string[] args, CompilerSettings sett return ParseResult.Success; case "/debug": - if (value.Equals ("full", StringComparison.OrdinalIgnoreCase) || value.Equals ("pdbonly", StringComparison.OrdinalIgnoreCase) || idx < 0) { + if (value.Equals ("+", StringComparison.OrdinalIgnoreCase) || value.Equals ("full", StringComparison.OrdinalIgnoreCase) || value.Equals ("pdbonly", StringComparison.OrdinalIgnoreCase) || idx < 0) { settings.GenerateDebugInfo = true; return ParseResult.Success; } @@ -974,7 +1158,23 @@ ParseResult ParseOption (string option, ref string[] args, CompilerSettings sett settings.Unsafe = false; return ParseResult.Success; - case "/warnaserror": + case "/psstrict-": + settings.PsStrictMode = false; + return ParseResult.Success; + + case "/psstrict+": + settings.PsStrictMode = true; + return ParseResult.Success; + + case "/psonlymode-": + settings.PsOnlyMode = false; + return ParseResult.Success; + + case "/psonlymode+": + settings.PsOnlyMode = true; + return ParseResult.Success; + + case "/warnaserror": case "/warnaserror+": if (value.Length == 0) { settings.WarningsAreErrors = true; @@ -1071,6 +1271,22 @@ ParseResult ParseOption (string option, ref string[] args, CompilerSettings sett return ParseResult.Success; + // We just ignore this. + case "/errorendlocation": + case "/highentropyva-": + case "/highentropyva+": + case "/highentropyva": + case "/utf8output": + return ParseResult.Success; + + // We just ignore this. + case "/preferreduilang": + switch (value.ToLowerInvariant()) + { + default: + return ParseResult.Success; + } + case "/helpinternal": OtherFlags (); return ParseResult.Stop; @@ -1530,9 +1746,17 @@ static void SplitPathAndPattern (string spec, out string path, out string patter void Usage () { output.WriteLine ( +#if PLAYSCRIPT + "PlayScript compiler, parts Copyright 2013 Zynga, Inc.\n" + + "Based on MCS compiler Copyright 2001-2011 Novell, Inc., Copyright 2011-2012 Xamarin, Inc\n" + + "playc [options] source-files\n" + + " --about About the PlayScript compiler\n" + + +#else "Mono C# compiler, Copyright 2001-2011 Novell, Inc., Copyright 2011-2012 Xamarin, Inc\n" + "mcs [options] source-files\n" + " --about About the Mono C# compiler\n" + +#endif " -addmodule:M1[,Mn] Adds the module to the generated assembly\n" + " -checked[+|-] Sets default aritmetic overflow context\n" + " -clscheck[+|-] Disables CLS Compliance verifications\n" + diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/statement.cs similarity index 85% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/statement.cs index cb8b10e2e..a901ed369 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/statement.cs @@ -20,9 +20,9 @@ using System.Reflection.Emit; #endif -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { - public abstract class Statement { + public abstract partial class Statement { public Location loc; protected bool reachable; @@ -31,7 +31,14 @@ public bool IsUnreachable { return !reachable; } } - + + // The '/dynamic-' command line parameter can be used to disable dynamic in an entire set of files. + // The [AllowDynamic] and [ForbidDynamic] attributes enable/disable dynamic support hierarchically on classes, methods, and packages. + // [assembly:AllowDynamic(package=target)] is used to enable/disable dynamic on packages. + + // The dynamic ops generated during compilation of the current statement + public static DynamicOperation DynamicOps; + /// /// Resolves the statement, true means that all sub-statements /// did resolve ok. @@ -140,7 +147,7 @@ protected void Error_FinallyClauseExit (BlockContext bc) } } - public sealed class EmptyStatement : Statement + public sealed partial class EmptyStatement : Statement { public EmptyStatement (Location loc) { @@ -177,7 +184,7 @@ public override object Accept (StructuralVisitor visitor) } } - public class If : Statement { + public partial class If : Statement { Expression expr; public Statement TrueStatement; public Statement FalseStatement; @@ -350,11 +357,26 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + if (visitor.Continue && this.TrueStatement != null) + this.TrueStatement.Accept (visitor); + if (visitor.Continue && this.FalseStatement != null) + this.FalseStatement.Accept (visitor); + } + + return ret; } } - public class Do : LoopStatement + public partial class Do : LoopStatement { public Expression expr; bool iterator_reachable, end_reachable; @@ -465,7 +487,20 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } +// if (visitor.Continue && this.EmbeddedStatement != null) +// this.EmbeddedStatement.Accept (visitor); + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + } + + return ret; } public override void SetEndReachable () @@ -479,7 +514,7 @@ public override void SetIteratorReachable () } } - public class While : LoopStatement + public partial class While : LoopStatement { public Expression expr; bool empty, infinite, end_reachable; @@ -623,7 +658,20 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + if (visitor.Continue && this.Statement != null) + this.Statement.Accept (visitor); + } + + return ret; } public override void AddEndDefiniteAssignment (FlowAnalysisContext fc) @@ -643,7 +691,7 @@ public override void SetEndReachable () } } - public class For : LoopStatement + public partial class For : LoopStatement { bool infinite, empty, iterator_reachable, end_reachable; List end_reachable_das; @@ -809,7 +857,24 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Initializer != null) + this.Initializer.Accept (visitor); + if (visitor.Continue && this.Condition != null) + this.Condition.Accept (visitor); + if (visitor.Continue && this.Iterator != null) + this.Iterator.Accept (visitor); + if (visitor.Continue && this.Statement != null) + this.Statement.Accept (visitor); + } + + return ret; } public override void AddEndDefiniteAssignment (FlowAnalysisContext fc) @@ -871,7 +936,7 @@ public virtual void SetIteratorReachable () } } - public class StatementExpression : Statement + public partial class StatementExpression : Statement { ExpressionStatement expr; @@ -925,7 +990,18 @@ public override bool Resolve (BlockContext ec) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -970,7 +1046,18 @@ protected override void CloneTo (CloneContext clonectx, Statement target) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -1043,7 +1130,22 @@ protected override void CloneTo (CloneContext clonectx, Statement target) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && statements != null) { + foreach (var stmnt in statements) { + if (visitor.Continue) + stmnt.Accept (visitor); + } + } + } + + return ret; } } @@ -1101,7 +1203,7 @@ protected override bool DoFlowAnalysis (FlowAnalysisContext fc) /// /// Implements the return statement /// - public class Return : ExitStatement + public partial class Return : ExitStatement { Expression expr; @@ -1135,7 +1237,7 @@ protected override bool DoResolve (BlockContext ec) var block_return_type = ec.ReturnType; if (expr == null) { - if (block_return_type.Kind == MemberKind.Void || block_return_type == InternalType.ErrorType) + if (block_return_type.Kind == MemberKind.Void) return true; // @@ -1158,10 +1260,14 @@ protected override bool DoResolve (BlockContext ec) if (ec.CurrentIterator != null) { Error_ReturnFromIterator (ec); - } else if (block_return_type != InternalType.ErrorType) { - ec.Report.Error (126, loc, - "An object of a type convertible to `{0}' is required for the return statement", - block_return_type.GetSignatureForError ()); + } else if (ec.ReturnType != InternalType.ErrorType) { + if (ec.HasNoReturnType && ec.IsPlayScript) { + expr = new MemberAccess(new MemberAccess(new SimpleName("PlayScript", loc), "Undefined", loc), "_undefined", loc).Resolve (ec); + return true; + } else + ec.Report.Error (126, loc, + "An object of a type convertible to `{0}' is required for the return statement", + block_return_type.GetSignatureForError ()); } return false; @@ -1359,7 +1465,18 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -1573,7 +1690,20 @@ public void AddGotoReference (Reachability rc, bool finalTarget) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + if (block != null) + block.Accept (visitor); + } + } + + return ret; } } @@ -1669,7 +1799,7 @@ public override bool Resolve (BlockContext ec) return false; } - if (!Convert.ImplicitStandardConversionExists (c, type)) + if (!Convert.ImplicitStandardConversionExists (c, type, ec)) ec.Report.Warning (469, 2, loc, "The `goto case' value is not implicitly convertible to type `{0}'", type.GetSignatureForError ()); @@ -1710,7 +1840,18 @@ public override Reachability MarkReachable (Reachability rc) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } @@ -1756,7 +1897,7 @@ protected void Error_GotoCaseRequiresSwitchBlock (BlockContext bc) } } - public class Throw : Statement { + public partial class Throw : Statement { Expression expr; public Throw (Expression expr, Location l) @@ -1849,11 +1990,22 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + } + + return ret; } } - public class Break : LocalExitStatement + public partial class Break : LocalExitStatement { public Break (Location l) : base (l) @@ -1900,7 +2052,7 @@ public override Reachability MarkReachable (Reachability rc) } } - public class Continue : LocalExitStatement + public partial class Continue : LocalExitStatement { public Continue (Location l) : base (l) @@ -1994,19 +2146,30 @@ public interface INamedBlockVariable bool IsDeclared { get; } bool IsParameter { get; } Location Location { get; } + FullNamedExpression TypeExpr { get; set; } } public class BlockVariableDeclarator { LocalVariable li; + FullNamedExpression type_expr; Expression initializer; + Location loc; - public BlockVariableDeclarator (LocalVariable li, Expression initializer) + public BlockVariableDeclarator (LocalVariable li, Expression initializer, FullNamedExpression type_expr = null) { if (li.Type != null) throw new ArgumentException ("Expected null variable type"); this.li = li; + this.type_expr = type_expr; + this.initializer = initializer; + } + + public BlockVariableDeclarator (BlockVariableDeclarator clone, Expression initializer) + { + this.li = clone.li; + this.type_expr = clone.type_expr; this.initializer = initializer; } @@ -2027,6 +2190,24 @@ public Expression Initializer { } } + public FullNamedExpression TypeExpression { + get { + return type_expr; + } + set { + type_expr = value; + } + } + + public Location Location { + get { + return loc; + } + set { + loc = value; + } + } + #endregion public virtual BlockVariableDeclarator Clone (CloneContext cloneCtx) @@ -2039,7 +2220,7 @@ public virtual BlockVariableDeclarator Clone (CloneContext cloneCtx) } } - public class BlockVariable : Statement + public partial class BlockVariable : Statement { Expression initializer; protected FullNamedExpression type_expr; @@ -2123,64 +2304,13 @@ public override bool Resolve (BlockContext bc) public bool Resolve (BlockContext bc, bool resolveDeclaratorInitializers) { if (type == null && !li.IsCompilerGenerated) { - var vexpr = type_expr as VarExpr; - - // - // C# 3.0 introduced contextual keywords (var) which behaves like a type if type with - // same name exists or as a keyword when no type was found - // - if (vexpr != null && !vexpr.IsPossibleTypeOrNamespace (bc)) { - if (bc.Module.Compiler.Settings.Version < LanguageVersion.V_3) - bc.Report.FeatureIsNotAvailable (bc.Module.Compiler, loc, "implicitly typed local variable"); - - if (li.IsFixed) { - bc.Report.Error (821, loc, "A fixed statement cannot use an implicitly typed local variable"); - return false; - } - - if (li.IsConstant) { - bc.Report.Error (822, loc, "An implicitly typed local variable cannot be a constant"); - return false; - } - - if (Initializer == null) { - bc.Report.Error (818, loc, "An implicitly typed local variable declarator must include an initializer"); - return false; - } - - if (declarators != null) { - bc.Report.Error (819, loc, "An implicitly typed local variable declaration cannot include multiple declarators"); - declarators = null; - } - - Initializer = Initializer.Resolve (bc); - if (Initializer != null) { - ((VarExpr) type_expr).InferType (bc, Initializer); - type = type_expr.Type; - } else { - // Set error type to indicate the var was placed correctly but could - // not be infered - // - // var a = missing (); - // - type = InternalType.ErrorType; - } - } - - if (type == null) { - type = type_expr.ResolveAsType (bc); - if (type == null) - return false; - - if (li.IsConstant && !type.IsConstantCompatible) { - Const.Error_InvalidConstantType (type, loc, bc.Report); - } - } - - if (type.IsStatic) - FieldBase.Error_VariableOfStaticClass (loc, li.Name, type, bc.Report); - + Expression resolvedInitializer = null; + type = ResolveVariableType(li, type_expr, initializer, out resolvedInitializer, declarators, loc, bc); + if (type == null) + return false; li.Type = type; + if (resolvedInitializer != null) + initializer = resolvedInitializer; } bool eval_global = bc.Module.Compiler.Settings.StatementMode && bc.CurrentBlock is ToplevelBlock; @@ -2196,8 +2326,20 @@ public bool Resolve (BlockContext bc, bool resolveDeclaratorInitializers) } if (declarators != null) { + var declType = li.Type; foreach (var d in declarators) { - d.Variable.Type = li.Type; + if (d.TypeExpression == null) { + d.Variable.Type = declType; + } else { + // PlayScript - Declarators can specify their own types (not really declarators, but close enough). + Expression declResolvedInitializer = null; + declType = ResolveVariableType(d.Variable, d.TypeExpression, d.Initializer, out declResolvedInitializer, null, d.Location, bc); + if (declType == null) + return false; + d.Variable.Type = declType; + if (declResolvedInitializer != null) + d.Initializer = declResolvedInitializer; + } if (eval_global) { CreateEvaluatorVariable (bc, d.Variable); } else if (type != InternalType.ErrorType) { @@ -2214,6 +2356,74 @@ public bool Resolve (BlockContext bc, bool resolveDeclaratorInitializers) return true; } + private static TypeSpec ResolveVariableType(LocalVariable li, Expression type_expr, + Expression initializer, out Expression resolvedInitializer, + List declarators, Location loc, BlockContext bc) + { + TypeSpec type = null; + + resolvedInitializer = null; + + var vexpr = type_expr as VarExpr; + + // + // C# 3.0 introduced contextual keywords (var) which behaves like a type if type with + // same name exists or as a keyword when no type was found + // + if (vexpr != null && !vexpr.IsPossibleTypeOrNamespace (bc)) { + if (bc.Module.Compiler.Settings.Version < LanguageVersion.V_3) + bc.Report.FeatureIsNotAvailable (bc.Module.Compiler, loc, "implicitly typed local variable"); + + if (li.IsFixed) { + bc.Report.Error (821, loc, "A fixed statement cannot use an implicitly typed local variable"); + return null; + } + + if (li.IsConstant) { + bc.Report.Error (822, loc, "An implicitly typed local variable cannot be a constant"); + return null; + } + + if (initializer == null) { + bc.Report.Error (818, loc, "An implicitly typed local variable declarator must include an initializer"); + return null; + } + + if (declarators != null) { + bc.Report.Error (819, loc, "An implicitly typed local variable declaration cannot include multiple declarators"); + declarators = null; + } + + resolvedInitializer = initializer.Resolve (bc); + if (resolvedInitializer != null) { + ((VarExpr) type_expr).InferType (bc, resolvedInitializer); + type = type_expr.Type; + } else { + // Set error type to indicate the var was placed correctly but could + // not be infered + // + // var a = missing (); + // + type = InternalType.ErrorType; + } + } + + if (type == null) { + type = type_expr.ResolveAsType (bc); + if (type == null) + return null; + + if (li.IsConstant && !type.IsConstantCompatible) { + Const.Error_InvalidConstantType (type, loc, bc.Report); + } + } + + if (type.IsStatic) + FieldBase.Error_VariableOfStaticClass (loc, li.Name, type, bc.Report); + + return type; + } + protected virtual Expression ResolveInitializer (BlockContext bc, LocalVariable li, Expression initializer) { var a = new SimpleAssign (li.CreateReferenceExpression (bc, li.Location), initializer, li.Location); @@ -2281,7 +2491,31 @@ protected override void CloneTo (CloneContext clonectx, Statement target) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + if (initializer != null) { + this.initializer.Accept (visitor); + } + } + if (visitor.Continue) { + if (declarators != null) { + foreach (var decl in declarators) { + if (visitor.Continue) { + if (decl.Initializer != null) + decl.Initializer.Accept (visitor); + } + } + } + } + } + + return ret; } } @@ -2309,7 +2543,7 @@ protected override Expression ResolveInitializer (BlockContext bc, LocalVariable return null; } - c = c.ConvertImplicitly (li.Type); + c = c.ConvertImplicitly (li.Type, bc); if (c == null) { if (TypeSpec.IsReferenceType (li.Type)) initializer.Error_ConstantCanBeInitializedWithNullOnly (bc, li.Type, initializer.Location, li.Name); @@ -2346,8 +2580,10 @@ public enum Flags FixedVariable = 1 << 6, UsingVariable = 1 << 7, IsLocked = 1 << 8, + AsIgnoreMultiple = 1 << 9, // ActionScript: Should ignore multiple decls - ReadonlyMask = ForeachVariable | FixedVariable | UsingVariable + ReadonlyMask = ForeachVariable | FixedVariable | UsingVariable, + CreateBuilderMask = CompilerGenerated | AsIgnoreMultiple } TypeSpec type; @@ -2362,8 +2598,16 @@ public enum Flags LocalBuilder builder; + // PlayScript - We need a copy of the type expression here to handle default initialization. + FullNamedExpression typeExpr; + public LocalVariable (Block block, string name, Location loc) { + // PlayScript local variable hoisting + if (loc.SourceFile != null && loc.SourceFile.FileType == SourceFileType.PlayScript && loc.SourceFile.PsExtended == false) { + block = block.ParametersBlock; + } + this.block = block; this.name = name; this.loc = loc; @@ -2406,6 +2650,16 @@ public Constant ConstantValue { } } + // ActionScript - Needs type expression to detect when two local declarations are the same declaration. + public FullNamedExpression TypeExpr { + get { + return typeExpr; + } + set { + typeExpr = value; + } + } + // // Hoisted local variable variant // @@ -2490,6 +2744,15 @@ public TypeSpec Type { } } + public Flags DeclFlags { + get { + return flags; + } + set { + flags = value; + } + } + #endregion public void CreateBuilder (EmitContext ec) @@ -2510,7 +2773,7 @@ public void CreateBuilder (EmitContext ec) return; if (builder != null) { - if ((flags & Flags.CompilerGenerated) != 0) + if ((flags & Flags.CreateBuilderMask) != 0) return; // To avoid Used warning duplicates @@ -2543,7 +2806,7 @@ public Expression CreateReferenceExpression (ResolveContext rc, Location loc) public void Emit (EmitContext ec) { // TODO: Need something better for temporary variables - if ((flags & Flags.CompilerGenerated) != 0) + if ((flags & Flags.CreateBuilderMask) != 0) CreateBuilder (ec); ec.Emit (OpCodes.Ldloc, builder); @@ -2552,9 +2815,14 @@ public void Emit (EmitContext ec) public void EmitAssign (EmitContext ec) { // TODO: Need something better for temporary variables - if ((flags & Flags.CompilerGenerated) != 0) + if ((flags & Flags.CreateBuilderMask) != 0) CreateBuilder (ec); + // FIX: Hack for PlayScript .play exception filters due to upstream merge 2ab02d + // not creating builder in the correct spot so hack it for now + if (builder == null) + CreateBuilder (ec); + ec.Emit (OpCodes.Stloc, builder); } @@ -2647,7 +2915,7 @@ public override string ToString () /// Top-level blocks derive from Block, and they are called ToplevelBlock /// they contain extra information that is not necessary on normal blocks. /// - public class Block : Statement { + public partial class Block : Statement { [Flags] public enum Flags { @@ -2694,7 +2962,11 @@ public enum Flags public int ID = id++; static int clone_id_counter; + +#pragma warning disable 0414 int clone_id; +#pragma warning restore 0414 + #endif // int assignable_slots; @@ -2896,12 +3168,21 @@ public override bool Resolve (BlockContext bc) Block prev_block = bc.CurrentBlock; bc.CurrentBlock = this; + bool allowDynamic = bc.AllowDynamic; + // // Compiler generated scope statements // if (scope_initializers != null) { for (resolving_init_idx = 0; resolving_init_idx < scope_initializers.Count; ++resolving_init_idx) { + //var initializer = scope_initializers [resolving_init_idx.Value]; scope_initializers[resolving_init_idx.Value].Resolve (bc); +// bc.Statement = initializer; +// initializer.Resolve (bc); +// if (!allowDynamic && Statement.DynamicOps != 0) +// ErrorIllegalDynamic (bc, initializer.loc); +// Statement.DynamicOps = 0; +// scope_initializers[resolving_init_idx.Value].Resolve (bc); } resolving_init_idx = null; @@ -2919,6 +3200,13 @@ public override bool Resolve (BlockContext bc) continue; } + + if (bc.IsPlayScript) { + if (!allowDynamic && Statement.DynamicOps != 0) + ErrorIllegalDynamic (bc, s.loc); + Statement.DynamicOps = 0; + + } } bc.CurrentBlock = prev_block; @@ -2927,6 +3215,22 @@ public override bool Resolve (BlockContext bc) return ok; } + protected void ErrorIllegalDynamic(BlockContext bc, Location loc) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder (); + bool first = true; + for (uint i = 1u; i <= 1u << 30; i <<= 1) { + if (((uint)Statement.DynamicOps & i) != 0u) { + if (!first) + sb.Append (","); + sb.Append (System.Enum.GetName (typeof(DynamicOperation), (int)i)); + first = false; + } + } + + bc.Report.Error (7655, loc, "Illegal use of dynamic: '" + sb.ToString () + "'"); + } + protected override void DoEmit (EmitContext ec) { for (int ix = 0; ix < statements.Count; ix++){ @@ -2952,7 +3256,10 @@ protected override bool DoFlowAnalysis (FlowAnalysisContext fc) { if (scope_initializers != null) { foreach (var si in scope_initializers) - si.FlowAnalysis (fc); + if (si == null) + Console.WriteLine ("**** Statement Block scope_initializer is null? ****"); + else + si.FlowAnalysis (fc); } return DoFlowAnalysis (fc, 0); @@ -3105,7 +3412,32 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue) { + if (scope_initializers != null) { + foreach (var sinit in scope_initializers) { + if (visitor.Continue) + sinit.Accept (visitor); + } + } + } + if (visitor.Continue) { + if (statements != null) { + foreach (var stmnt in statements) { + if (visitor.Continue) + stmnt.Accept (visitor); + } + } + } + } + + return ret; } } @@ -3219,15 +3551,15 @@ public void EmitScopeInitialization (EmitContext ec) public override void Emit (EmitContext ec) { - if (Parent != null) - ec.BeginScope (); - EmitScopeInitialization (ec); if (ec.EmitAccurateDebugInfo && !IsCompilerGenerated && ec.Mark (StartLocation)) { ec.Emit (OpCodes.Nop); } + if (Parent != null) + ec.BeginScope (); + DoEmit (ec); if (Parent != null) @@ -3279,7 +3611,7 @@ protected void DefineStoreyContainer (EmitContext ec, AnonymousMethodStorey stor // // We are the first storey on path and 'this' has to be hoisted // - if (storey.HoistedThis == null || !(storey.Parent is HoistedStoreyClass)) { + if (storey.HoistedThis == null) { foreach (ExplicitBlock ref_block in Original.ParametersBlock.TopBlock.ThisReferencesFromChildrenBlock) { // // ThisReferencesFromChildrenBlock holds all reference even if they @@ -3467,6 +3799,8 @@ public class ParameterInfo : INamedBlockVariable public VariableInfo VariableInfo; bool is_locked; + private FullNamedExpression typeExpr; + public ParameterInfo (ParametersBlock block, int index) { this.block = block; @@ -3526,6 +3860,16 @@ public TypeSpec ParameterType { } } + // ActionScript - Needs type expression to detect when two local declarations are the same declaration. + public FullNamedExpression TypeExpr { + get { + return typeExpr; + } + set { + typeExpr = value; + } + } + #endregion public Expression CreateReferenceExpression (ResolveContext rc, Location loc) @@ -3690,6 +4034,72 @@ public bool Resolved { #endregion + // + // PlayScript - We need to create an "Array" for our args parameters for ActionScript/PlayScript.. + // + private void PsCreateVarArgsArray (BlockContext rc) + { + if (parameters != null && parameters.FixedParameters != null && parameters.FixedParameters.Length > 0) { + var param = parameters.FixedParameters [parameters.FixedParameters.Length - 1] as Parameter; + if (param != null && (param.ParameterModifier & Parameter.Modifier.PARAMS) != 0) { + string argName = param.Name.Substring (2); // Arg should start with "__" (we added it in the parser). + var li = new LocalVariable (this, argName, this.loc); + var decl = new BlockVariable (new ICSharpCode.NRefactory.MonoPlayScript.TypeExpression(rc.Module.PredefinedTypes.AsArray.Resolve(), this.loc), li); + var arguments = new Arguments (1); + arguments.Add (new Argument(new SimpleName(param.Name, this.loc))); + decl.Initializer = new Invocation (new MemberAccess(new MemberAccess(new SimpleName("PlayScript", this.loc), "Support", this.loc), "CreateArgListArray", this.loc), arguments); + this.AddLocalName (li); + this.AddScopeStatement (decl); + } + } + } + + // + // PlayScript - Need to support non-null default args for object types + // + private void PsInitializeDefaultArgs (BlockContext rc) + { + if (parameters != null && parameters.FixedParameters != null && parameters.FixedParameters.Length > 0) { + int n = parameters.FixedParameters.Length; + for (int i = 0; i < n; i++) { + var param = parameters.FixedParameters [i] as Parameter; + if (param == null || !param.HasDefaultValue) + continue; + + // + // These types are already handled by default, skip over them. + // + if (param.DefaultValue.IsNull || !TypeSpec.IsReferenceType (param.Type) || param.Type.BuiltinType == BuiltinTypeSpec.Type.String) + continue; + + // + // Types that aren't supported by the base C# functionality will + // be assigned the value System.Reflection.Missing. We insert an if + // block at the top of the function which checks for this type, and + // then assigns the variable the real default value. + // + param = param.Clone (); + param.ResolveDefaultValue (rc); + var value = param.DefaultValue.Child; + if (value is BoxedCast) + value = ((BoxedCast)value).Child; + + if (value is ILiteralConstant) { + var variable = new SimpleName (param.Name, loc); + var assign = new StatementExpression ( + new SimpleAssign (variable, value.Clone (new CloneContext ()))); + var missing = new MemberAccess (new MemberAccess ( + new QualifiedAliasMember (QualifiedAliasMember.GlobalAlias, "System", loc), "Reflection", loc), "Missing", loc); + var statement = new If (new Is (variable, missing, loc), assign, loc); + AddScopeStatement (statement); + } else { + rc.Report.Error (7013, "Optional parameter `{0}' of type `{1}' can't be initialized with the given value", + param.Name, param.Type.GetSignatureForError ()); + } + } + } + } + // // Checks whether all `out' parameters have been assigned. // @@ -3879,6 +4289,8 @@ protected void ProcessParameters () // TODO: Should use Parameter only and more block there parameter_info[i] = new ParameterInfo (this, i); + if (p is Parameter) + parameter_info[i].TypeExpr = ((Parameter)p).TypeExpression; if (p.Name != null) AddLocalName (p.Name, parameter_info[i]); } @@ -3907,6 +4319,14 @@ public override bool Resolve (BlockContext bc) if (bc.HasSet (ResolveContext.Options.ExpressionTreeConversion)) flags |= Flags.IsExpressionTree; + // + // PlayScript specific setup + // + if (bc.IsPlayScript) { + PsInitializeDefaultArgs (bc); + PsCreateVarArgsArray (bc); + } + try { PrepareAssignmentAnalysis (bc); @@ -3916,7 +4336,6 @@ public override bool Resolve (BlockContext bc) } catch (Exception e) { if (e is CompletionResult || bc.Report.IsDisabled || e is FatalException || bc.Report.Printer is NullReportPrinter || bc.Module.Compiler.Settings.BreakOnInternalError) throw; - if (bc.CurrentBlock != null) { bc.Report.Error (584, bc.CurrentBlock.StartLocation, "Internal compiler error: {0}", e.Message); } else { @@ -3924,6 +4343,25 @@ public override bool Resolve (BlockContext bc) } } +// if (rc.ReturnType.Kind != MemberKind.Void && !unreachable) { +// if (rc.CurrentAnonymousMethod == null) { +// // FIXME: Missing FlowAnalysis for generated iterator MoveNext method +// if (md is StateMachineMethod) { +// unreachable = true; +// } else { + + + // Support untyped methods + // This emulates the as3 behavior with 1 exception: if you specify a + // return type of '*', but not all code paths return a value, PlayScript + // will consider this a compiler error instead of automatically returing + // undefined in those cases. I think this behavior is favorable. + if (bc.IsPlayScript && bc.HasNoReturnType) { + var ret = new Return (null, EndLocation); + ret.Resolve (bc); + statements.Add (ret); + return true; + } // // If an asynchronous body of F is either an expression classified as nothing, or a // statement block where no return statements have expressions, the inferred return type is Task @@ -4073,6 +4511,30 @@ public Report Report { } } + public int NamesCount { + get { + return names.Count; + } + } + + public IEnumerable> Names { + get { + return names; + } + } + + public int LabelsCount { + get { + return labels.Count; + } + } + + public IEnumerable> Labels { + get { + return labels; + } + } + // // Used by anonymous blocks to track references of `this' variable // @@ -4113,16 +4575,34 @@ public void AddLocalName (string name, INamedBlockVariable li, bool ignoreChildr existing_list = (List) value; } + var variable_block = li.Block.Explicit; + + // Check if we're ActionScript.. + bool isActionScript = variable_block != null && variable_block.loc.SourceFile != null && + variable_block.loc.SourceFile.FileType == SourceFileType.PlayScript && + !variable_block.loc.SourceFile.PsExtended; + // // A collision checking between local names // - var variable_block = li.Block.Explicit; for (int i = 0; i < existing_list.Count; ++i) { existing = existing_list[i]; Block b = existing.Block.Explicit; // Collision at same level if (variable_block == b) { + + // If we're ActionScript and two local vars are declared with identical + // declarations, we return the previous declaration var info and discard ours. + if (isActionScript && (li.TypeExpr == existing.TypeExpr || (li.TypeExpr != null && existing.TypeExpr != null && + li.TypeExpr.Equals (existing.TypeExpr)))) { + + li.Block.ParametersBlock.TopBlock.Report.Warning (7138, 1, li.Location, + "Variable is declared more than once."); + + return; + } + li.Block.Error_AlreadyDeclared (name, li); break; } @@ -4568,7 +5048,18 @@ protected override void CloneTo (CloneContext clonectx, Statement target) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.label != null) + this.label.Accept (visitor); + } + + return ret; } public string GetSignatureForError () @@ -4583,7 +5074,7 @@ public string GetSignatureForError () } } - public class Switch : LoopStatement + public partial class Switch : LoopStatement { // structure used to hold blocks of keys while calculating table switch sealed class LabelsRange : IComparable @@ -4682,13 +5173,14 @@ protected override void CloneTo (CloneContext clonectx, Statement target) protected override bool DoFlowAnalysis (FlowAnalysisContext fc) { - if (FallOut) { - fc.Report.Error (8070, loc, "Control cannot fall out of switch statement through final case label `{0}'", - label.GetSignatureForError ()); - } else { - fc.Report.Error (163, loc, "Control cannot fall through from one case label `{0}' to another", - label.GetSignatureForError ()); - } + if (!loc.IsPlayScript) // AS allows empty case blocks && AS allows fall throughs + if (FallOut) { + fc.Report.Error (8070, loc, "Control cannot fall out of switch statement through final case label `{0}'", + label.GetSignatureForError ()); + } else { + fc.Report.Error (163, loc, "Control cannot fall through from one case label `{0}' to another", + label.GetSignatureForError ()); + } return true; } } @@ -5093,6 +5585,25 @@ protected override bool DoFlowAnalysis (FlowAnalysisContext fc) return case_default != null && !end_reachable; } + private List GetSwitchCaseTypes(BlockContext ec) + { + // build type list from all case labels + var types = new List(); + foreach (var statement in this.Block.Statements) { + if (statement is SwitchLabel) { + var caseLabel = statement as SwitchLabel; + if (caseLabel.Label != null) { + // resolve label type + var resolved = caseLabel.Label.Resolve(ec); + if (!types.Contains(resolved.Type)) { + types.Add(resolved.Type); + } + } + } + } + return types; + } + public override bool Resolve (BlockContext ec) { Expr = Expr.Resolve (ec); @@ -5118,6 +5629,35 @@ public override bool Resolve (BlockContext ec) } } + if (new_expr == null && ec.FileType == SourceFileType.PlayScript) { + // handle implict casting of switch expression + // get types of all case labels + var caseTypes = GetSwitchCaseTypes(ec); + + // only handle case where all labels are all the same type + if (caseTypes.Count == 1) { + // convert expression to case label type + new_expr = Convert.ImplicitConversion(ec, Expr, caseTypes[0], Expr.Location, false); + if (new_expr == null) { + ec.Report.Error (151, loc, + "A switch expression of type `{0}' cannot be converted to type '{1}'", + Expr.Type.GetSignatureForError (), + caseTypes[0].GetSignatureForError() + ); + } + } else if (caseTypes.Count == 0) { + // no case statements (does it matter?) + new_expr = new NullLiteral(Expr.Location); + } else if (caseTypes.Count > 1) { + // multiple case statements, with multiple types + ec.Report.Error (151, loc, + "A switch expression of type `{0}' has multiple types in its case labels, cast it to a specific type first", + Expr.Type.GetSignatureForError () + ); + return false; + } + } + Expression switch_expr; if (new_expr == null) { if (ec.Module.Compiler.Settings.Version != LanguageVersion.Experimental) { @@ -5595,7 +6135,20 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + if (visitor.Continue && this.Block != null) + this.Block.Accept (visitor); + } + + return ret; } public override void AddEndDefiniteAssignment (FlowAnalysisContext fc) @@ -6048,7 +6601,18 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.expr != null) + this.expr.Accept (visitor); + } + + return ret; } } @@ -6095,7 +6659,18 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Block != null) + this.Block.Accept (visitor); + } + + return ret; } } @@ -6141,7 +6716,18 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Block != null) + this.Block.Accept (visitor); + } + + return ret; } } @@ -6189,7 +6775,18 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Block != null) + this.Block.Accept (visitor); + } + + return ret; } } @@ -6493,37 +7090,23 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); - } - } - - public class Catch : Statement - { - class CatchVariableStore : Statement - { - readonly Catch ctch; - - public CatchVariableStore (Catch ctch) - { - this.ctch = ctch; - } - - protected override void CloneTo (CloneContext clonectx, Statement target) - { - } + var ret = visitor.Visit (this); - protected override void DoEmit (EmitContext ec) - { - // Emits catch variable debug information inside correct block - ctch.EmitCatchVariableStore (ec); + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Statement != null) + this.Statement.Accept (visitor); } - protected override bool DoFlowAnalysis (FlowAnalysisContext fc) - { - return true; - } + return ret; } + } + public class Catch : Statement + { class FilterStatement : Statement { readonly Catch ctch; @@ -6597,6 +7180,9 @@ public override bool Resolve (BlockContext bc) TypeSpec type; LocalTemporary hoisted_temp; + // The PlayScript error variable (if we're converting from Exception to Error). + LocalVariable psErrorLi; + public Catch (ExplicitBlock block, Location loc) { this.block = block; @@ -6653,6 +7239,9 @@ protected override void DoEmit (EmitContext ec) ec.BeginExceptionFilterBlock (); ec.Emit (OpCodes.Isinst, IsGeneral ? ec.BuiltinTypes.Object : CatchType); + if (li != null) + EmitCatchVariableStore (ec); + if (Block.HasAwait) { Block.EmitScopeInitialization (ec); } else { @@ -6667,15 +7256,17 @@ protected override void DoEmit (EmitContext ec) else ec.BeginCatchBlock (CatchType); - if (li == null) + if (li != null) { + EmitCatchVariableStore (ec); + } else { ec.Emit (OpCodes.Pop); + } - if (Block.HasAwait) { - if (li != null) - EmitCatchVariableStore (ec); - } else { + if (psErrorLi != null) + psErrorLi.CreateBuilder (ec); + + if (!Block.HasAwait) Block.Emit (ec); - } } void EmitCatchVariableStore (EmitContext ec) @@ -6683,9 +7274,9 @@ void EmitCatchVariableStore (EmitContext ec) li.CreateBuilder (ec); // - // For hoisted catch variable we have to use a temporary local variable - // for captured variable initialization during storey setup because variable - // needs to be on the stack after storey instance for stfld operation + // Special case hoisted catch variable, we have to use a temporary variable + // to pass via anonymous storey initialization with the value still on top + // of the stack // if (li.HoistedVariant != null) { hoisted_temp = new LocalTemporary (li.Type); @@ -6701,9 +7292,6 @@ public override bool Resolve (BlockContext bc) using (bc.Set (ResolveContext.Options.CatchScope)) { if (type_expr == null) { if (CreateExceptionVariable (bc.Module.Compiler.BuiltinTypes.Object)) { - if (!block.HasAwait || Filter != null) - block.AddScopeStatement (new CatchVariableStore (this)); - Expression source = new EmptyExpression (li.Type); assign = new CompilerAssign (new LocalVariableReference (li, Location.Null), source, Location.Null); Block.AddScopeStatement (new StatementExpression (assign, Location.Null)); @@ -6719,6 +7307,23 @@ public override bool Resolve (BlockContext bc) if (type.BuiltinType != BuiltinTypeSpec.Type.Exception && !TypeSpec.IsBaseClass (type, bc.BuiltinTypes.Exception, false)) { bc.Report.Error (155, loc, "The type caught or thrown must be derived from System.Exception"); } else if (li != null) { + + // For PlayScript catch (e:Error) { convert to catch (Exception __e), then convert to Error in catch block.. + if (bc.IsPlayScript && type == bc.Module.PredefinedTypes.AsError.Resolve ()) { + + // Save old error var so we can use it below + psErrorLi = li; + psErrorLi.Type = type; + psErrorLi.PrepareAssignmentAnalysis (bc); + + // Switch to "Exception" + type = bc.BuiltinTypes.Exception; + li = new LocalVariable (block, "__" + this.Variable.Name , Location.Null); + li.TypeExpr = new TypeExpression(bc.BuiltinTypes.Exception, Location.Null); + li.Type = bc.BuiltinTypes.Exception; + block.AddLocalName (li); + } + li.Type = type; li.PrepareAssignmentAnalysis (bc); @@ -6727,14 +7332,24 @@ public override bool Resolve (BlockContext bc) if (li.Type.IsGenericParameter) source = new UnboxCast (source, li.Type); - if (!block.HasAwait || Filter != null) - block.AddScopeStatement (new CatchVariableStore (this)); - // // Uses Location.Null to hide from symbol file // assign = new CompilerAssign (new LocalVariableReference (li, Location.Null), source, Location.Null); Block.AddScopeStatement (new StatementExpression (assign, Location.Null)); + + // Convert Exception to PlayScript/ActionScript Error type if needed + if (psErrorLi != null) { + // PlayScript - Generate the code "err = __err as Error ?? new DotNetError(_err)" + var newArgs = new Arguments (1); + newArgs.Add (new Argument (new LocalVariableReference (li, Location.Null))); + var asExpr = new As (new LocalVariableReference (li, Location.Null), new TypeExpression (bc.Module.PredefinedTypes.AsError.Resolve (), Location.Null), Location.Null); + var newExpr = new New (new TypeExpression (bc.Module.PredefinedTypes.AsDotNetError.Resolve (), Location.Null), newArgs, Location.Null); + + var errAssign = new CompilerAssign (psErrorLi.CreateReferenceExpression (bc, Location.Null), + new Nullable.NullCoalescingOperator (asExpr, newExpr), Location.Null); + block.AddScopeStatement (new StatementExpression(errAssign, Location.Null)); + } } } @@ -7061,7 +7676,20 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Statement != null) + this.Statement.Accept (visitor); + if (visitor.Continue && this.fini != null) + this.fini.Accept (visitor); + } + + return ret; } } @@ -7288,7 +7916,26 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Block != null) + this.Block.Accept (visitor); + if (visitor.Continue) { + if (clauses != null) { + foreach (var claus in clauses) { + if (visitor.Continue) + claus.Accept (visitor); + } + } + } + } + + return ret; } } @@ -7574,10 +8221,41 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); + if (visitor.Continue && this.Statement != null) + this.Statement.Accept (visitor); + } + + return ret; } } + /// + /// PlayScript ForEach type. + /// / + public enum AsForEachType { + /// + /// Generate a normal cs foreach statement. + /// + CSharpForEach, + /// + /// Generate an PlayScript for (var a in collection) statement. Yields keys. + /// + ForEachKey, + /// + /// Generate an PlayScript for each (var a in collection) statement. Yields values. + /// + ForEachValue + } + /// /// Implementation of the foreach C# statement /// @@ -7639,6 +8317,12 @@ public ArrayForeach (Foreach @foreach, int rank) public override bool Resolve (BlockContext ec) { + if (ec.FileType == SourceFileType.PlayScript && + for_each.AsForEachType == AsForEachType.ForEachKey) { + ec.Report.Error (7018, loc, "for(in) statement cannot be used with arrays."); + return false; + } + Block variables_block = for_each.variable.Block; copy = TemporaryVariableReference.Create (for_each.expr.Type, variables_block, loc); copy.Resolve (ec); @@ -7791,10 +8475,10 @@ protected override Statement CreateDisposeCall (BlockContext bc, LocalVariable l TemporaryVariableReference enumerator_variable; bool ambiguous_getenumerator_name; - public CollectionForeach (Foreach @foreach, LocalVariable var, Expression expr) + public CollectionForeach (Foreach @foreach, LocalVariable @var, Expression expr) : base (@foreach) { - this.variable = var; + this.variable = @var; this.expr = expr; } @@ -7884,6 +8568,65 @@ MethodGroupExpr ResolveGetEnumerator (ResolveContext rc) return mg; } + MethodGroupExpr ResolveGetKeyEnumerator (ResolveContext rc) + { + // + // Option 1: Try to match by name GetKeyEnumerator first + // + var mexpr = Expression.MemberLookup (rc, false, expr.Type, + "GetKeyEnumerator", 0, Expression.MemberLookupRestrictions.ExactArity, loc); // TODO: What if CS0229 ? + + var mg = mexpr as MethodGroupExpr; + if (mg != null) { + mg.InstanceExpression = expr; + Arguments args = new Arguments (0); + mg = mg.OverloadResolve (rc, ref args, this, OverloadResolver.Restrictions.ProbingOnly); + + // For ambiguous GetEnumerator name warning CS0278 was reported, but Option 2 could still apply + if (ambiguous_getenumerator_name) + mg = null; + + if (mg != null && args.Count == 0 && !mg.BestCandidate.IsStatic && mg.BestCandidate.IsPublic) { + return mg; + } + } + + // + // Option 2: Try to match using IKeyEnumerable interfaces + // + var t = expr.Type; + PredefinedMember iface_candidate = null; + rc.Module.PredefinedTypes.AsIKeyEnumerable.Define(); + + var ifaces = t.Interfaces; + if (ifaces != null) { + foreach (var iface in ifaces) { + if (iface == rc.Module.PredefinedTypes.AsIKeyEnumerable.TypeSpec && iface_candidate == null) { + iface_candidate = rc.Module.PredefinedMembers.AsIKeyEnumerableGetKeyEnumerator; + } + } + } + + if (iface_candidate == null) { + if (expr.Type != InternalType.ErrorType) { + rc.Report.Error (1579, loc, + "for statement cannot operate on variables of type `{0}' because it does not contain a definition for `{1}' or is inaccessible", + expr.Type.GetSignatureForError (), "GetKeyEnumerator"); + } + + return null; + } + + var method = iface_candidate.Resolve (loc); + if (method == null) + return null; + + mg = MethodGroupExpr.CreatePredefined (method, expr.Type, loc); + mg.InstanceExpression = expr; + return mg; + } + + MethodGroupExpr ResolveMoveNext (ResolveContext rc, MethodSpec enumerator) { var ms = MemberCache.FindMember (enumerator.ReturnType, @@ -7912,21 +8655,65 @@ PropertySpec ResolveCurrent (ResolveContext rc, MethodSpec enumerator) return ps; } + PropertySpec ResolveKVPairKey (ResolveContext rc, TypeSpec kvPairType) + { + var ps = MemberCache.FindMember (kvPairType, + MemberFilter.Property ("Key", null), + BindingRestriction.InstanceOnly) as PropertySpec; + + if (ps == null || !ps.IsPublic) { + return null; + } + + return ps; + } + + PropertySpec ResolveKVPairValue (ResolveContext rc, TypeSpec kvPairType) + { + var ps = MemberCache.FindMember (kvPairType, + MemberFilter.Property ("Value", null), + BindingRestriction.InstanceOnly) as PropertySpec; + + if (ps == null || !ps.IsPublic) { + return null; + } + + return ps; + } + public override bool Resolve (BlockContext ec) { bool is_dynamic = expr.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic; - if (is_dynamic) { - expr = Convert.ImplicitConversionRequired (ec, expr, ec.BuiltinTypes.IEnumerable, loc); - } else if (expr.Type.IsNullableType) { - expr = new Nullable.UnwrapCall (expr).Resolve (ec); + MethodGroupExpr get_enumerator_mg = null;; + + if (for_each.AsForEachType == AsForEachType.ForEachKey) { + // key enumeration + if (is_dynamic) { + ec.Module.PredefinedTypes.AsIKeyEnumerable.Define(); + expr = Convert.ImplicitConversionRequired (ec, expr, ec.Module.PredefinedTypes.AsIKeyEnumerable.TypeSpec, loc); + } else if (expr.Type.IsNullableType) { + expr = new Nullable.UnwrapCall (expr).Resolve (ec); + } + + get_enumerator_mg = ResolveGetKeyEnumerator (ec); + + } else { + // value enumeration + if (is_dynamic) { + expr = Convert.ImplicitConversionRequired (ec, expr, ec.BuiltinTypes.IEnumerable, loc); + } else if (expr.Type.IsNullableType) { + expr = new Nullable.UnwrapCall (expr).Resolve (ec); + } + + get_enumerator_mg = ResolveGetEnumerator (ec); } - var get_enumerator_mg = ResolveGetEnumerator (ec); if (get_enumerator_mg == null) { return false; } + var get_enumerator = get_enumerator_mg.BestCandidate; enumerator_variable = TemporaryVariableReference.Create (get_enumerator.ReturnType, variable.Block, loc); enumerator_variable.Resolve (ec); @@ -7949,6 +8736,38 @@ public override bool Resolve (BlockContext ec) if (current_pe == null) return false; + // Handle PlayScript Key for (.. in .. ) and value for each (.. in ..) statements. + if (ec.FileType == SourceFileType.PlayScript) { + var infTypeSpec = current_pe.Type as InflatedTypeSpec; + if (infTypeSpec != null) { + var defTypeSpec = infTypeSpec.GetDefinition(); + var keyValueTypeSpec = ec.Module.PredefinedTypes.KeyValuePair.Resolve (); + if (defTypeSpec.Equals(keyValueTypeSpec)) { + if (for_each.AsForEachType == AsForEachType.ForEachKey) { + var key_prop = ResolveKVPairKey(ec, current_pe.Type); + if (key_prop == null) + return false; + current_pe = new PropertyExpr(key_prop, loc) { InstanceExpression = current_pe }.Resolve (ec); + } else { + var value_prop = ResolveKVPairValue(ec, current_pe.Type); + if (value_prop == null) + return false; + current_pe = new PropertyExpr(value_prop, loc) { InstanceExpression = current_pe }.Resolve (ec); + } + } + } + // Actually, for(in) statements iterate over array values too in PlayScript. +// else { +// if (for_each.AsForEachType == AsForEachType.ForEachKey) { +// ec.Report.Error (7017, loc, "for(in) statement cannot operate on keys of non dictionary collections."); +// return false; +// } +// } + if (current_pe == null) + return false; + } + + VarExpr ve = for_each.type as VarExpr; if (ve != null) { @@ -7962,7 +8781,7 @@ public override bool Resolve (BlockContext ec) } else { if (is_dynamic) { // Explicit cast of dynamic collection elements has to be done at runtime - current_pe = EmptyCast.Create (current_pe, ec.BuiltinTypes.Dynamic); + current_pe = EmptyCast.Create (current_pe, ec.BuiltinTypes.Dynamic, ec); } variable.Type = for_each.type.ResolveAsType (ec); @@ -8060,10 +8879,12 @@ bool OverloadResolver.IErrorHandler.TypeInferenceFailed (ResolveContext rc, Memb #endregion } + FullNamedExpression varRef; Expression type; LocalVariable variable; Expression expr; Block body; + AsForEachType asForEachType = AsForEachType.CSharpForEach; public Foreach (Expression type, LocalVariable var, Expression expr, Statement stmt, Block body, Location l) : base (stmt) @@ -8075,10 +8896,32 @@ public Foreach (Expression type, LocalVariable var, Expression expr, Statement s loc = l; } + public Foreach (Expression type, LocalVariable var, Expression expr, Statement stmt, Block body, AsForEachType asType, Location l) + : this(type, var, expr, stmt, body, l) + { + asForEachType = asType; + } + + public Foreach (FullNamedExpression varRef, Expression expr, Statement stmt, Block body, AsForEachType asType, Location l) + : base (stmt) + { + this.varRef = varRef; + this.expr = expr; + this.Statement = stmt; + this.body = body; + asForEachType = asType; + loc = l; + } + public Expression Expr { get { return expr; } } + //Fixed for(in) with local var. + public FullNamedExpression VariableRef { + get { return varRef; } + } + public Expression TypeExpression { get { return type; } } @@ -8087,6 +8930,10 @@ public LocalVariable Variable { get { return variable; } } + public AsForEachType AsForEachType { + get { return asForEachType; } + } + public override Reachability MarkReachable (Reachability rc) { base.MarkReachable (rc); @@ -8098,6 +8945,17 @@ public override Reachability MarkReachable (Reachability rc) public override bool Resolve (BlockContext ec) { + // Actionscript can specify a block scope local variable instead of declaring a new local variable. + if (varRef != null) { + var locVarRef = varRef.Resolve (ec) as LocalVariableReference; + if (locVarRef == null) { + ec.Report.Error (7037, loc, "For each must reference an accessible local variable."); + return false; + } + variable = locVarRef.local_info; + type = new TypeExpression(variable.Type, loc); + } + expr = expr.Resolve (ec); if (expr == null) return false; @@ -8123,6 +8981,24 @@ public override bool Resolve (BlockContext ec) Statement = new CollectionForeach (this, variable, expr); } + // PlayScript - always check if var is enumerable before doing loop + if (ec.IsPlayScript && expr != null && + (expr.Type.IsClass || expr.Type.IsInterface || expr.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic)) { + + // + // For dynamics, check that it's enumerable. For classes, just check + // against null. + // + if (expr.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) { + if (asForEachType == AsForEachType.ForEachKey) + Statement = new If (new Is (expr, new TypeExpression (ec.Module.PredefinedTypes.AsIKeyEnumerable.Resolve (), loc), loc), Statement, loc); + else + Statement = new If (new Is (expr, new TypeExpression (ec.Module.Compiler.BuiltinTypes.IEnumerable, loc), loc), Statement, loc); + } else { + Statement = new If (new Binary(Binary.Operator.Inequality, expr, new NullLiteral(loc)), Statement, loc); + } + } + return base.Resolve (ec); } @@ -8135,7 +9011,9 @@ protected override void DoEmit (EmitContext ec) if (!(Statement is Block)) ec.BeginCompilerScope (); - variable.CreateBuilder (ec); + // Only create variable if we aren't referencing a var (PlayScript only). + if (varRef == null) + variable.CreateBuilder (ec); Statement.Emit (ec); @@ -8168,7 +9046,23 @@ protected override void CloneTo (CloneContext clonectx, Statement t) public override object Accept (StructuralVisitor visitor) { - return visitor.Visit (this); + var ret = visitor.Visit (this); + + if (visitor.AutoVisit) { + if (visitor.Skip) { + visitor.Skip = false; + return ret; + } + if (visitor.Continue && this.Expr != null) + this.Expr.Accept (visitor); +// if (visitor.Continue && this.Statement != null) +// this.Statement.Accept (visitor); + if (visitor.Continue && this.body != null) + this.body.Accept (visitor); + } + + return ret; } } + } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/support.cs similarity index 98% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/support.cs index 7b3a53caf..3ae385350 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/support.cs @@ -12,12 +12,11 @@ // using System; -using System.Linq; using System.IO; using System.Text; using System.Collections.Generic; -namespace ICSharpCode.NRefactory.MonoCSharp { +namespace ICSharpCode.NRefactory.MonoPlayScript { sealed class ReferenceEquality : IEqualityComparer where T : class { @@ -51,7 +50,7 @@ public Tuple (T1 item1, T2 item2) public override int GetHashCode () { - return ((object)Item1 ?? 0) .GetHashCode () ^ ((object)Item2 ?? 0).GetHashCode (); + return Item1.GetHashCode () ^ Item2.GetHashCode (); } #region IEquatable> Members diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/symbolwriter.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/symbolwriter.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/symbolwriter.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/symbolwriter.cs index e94a4e383..e65897a21 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/symbolwriter.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/symbolwriter.cs @@ -22,7 +22,7 @@ using Mono.CompilerServices.SymbolWriter; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { static class SymbolWriter { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/typemanager.cs similarity index 85% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/typemanager.cs index 6fa9bccba..ecdfbacab 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/typemanager.cs @@ -17,8 +17,9 @@ using System.Collections.Generic; using System.Text; using System.IO; +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // All compiler built-in types (they have to exist otherwise the compiler will not work) @@ -64,15 +65,20 @@ public class BuiltinTypes // build-in type (mostly object) // public readonly BuiltinTypeSpec Dynamic; + public readonly BuiltinTypeSpec AsUntyped; // Predefined operators tables public readonly Binary.PredefinedOperator[] OperatorsBinaryStandard; + public readonly Binary.PredefinedOperator[] AsOperatorsBinaryStandard; // PlayScript - Include additional implicit conversion matches public readonly Binary.PredefinedOperator[] OperatorsBinaryEquality; + public readonly Binary.PredefinedOperator[] AsOperatorsBinaryEquality; // PlayScript - Include additional implicit conversion matches public readonly Binary.PredefinedOperator[] OperatorsBinaryUnsafe; public readonly TypeSpec[][] OperatorsUnary; public readonly TypeSpec[] OperatorsUnaryMutator; public readonly TypeSpec[] BinaryPromotionsTypes; + public readonly TypeSpec[] AsBinaryPromotionsTypes; // PlayScript binary promotion types - includes BOOL. + public readonly TypeSpec[] SwitchUserTypes; readonly BuiltinTypeSpec[] types; @@ -116,15 +122,22 @@ public BuiltinTypes () // TODO: Maybe I should promote it to different kind for faster compares Dynamic = new BuiltinTypeSpec ("dynamic", BuiltinTypeSpec.Type.Dynamic); + AsUntyped = new BuiltinTypeSpec ("*", BuiltinTypeSpec.Type.Dynamic); OperatorsBinaryStandard = Binary.CreateStandardOperatorsTable (this); + AsOperatorsBinaryStandard = Binary.CreateAsStandardOperatorsTable (this); OperatorsBinaryEquality = Binary.CreateEqualityOperatorsTable (this); + AsOperatorsBinaryEquality = Binary.CreateAsEqualityOperatorsTable (this); OperatorsBinaryUnsafe = Binary.CreatePointerOperatorsTable (this); OperatorsUnary = Unary.CreatePredefinedOperatorsTable (this); OperatorsUnaryMutator = UnaryMutator.CreatePredefinedOperatorsTable (this); BinaryPromotionsTypes = ConstantFold.CreateBinaryPromotionsTypes (this); + // PlayScript binary promotion types (includes bool). + AsBinaryPromotionsTypes = ConstantFold.CreateAsBinaryPromotionsTypes (this); +// SwitchUserTypes = Switch.CreateSwitchUserTypes (this); + types = new BuiltinTypeSpec[] { Object, ValueType, Attribute, Int, UInt, Long, ULong, Float, Double, Char, Short, Decimal, Bool, SByte, Byte, UShort, String, @@ -161,6 +174,8 @@ public bool CheckDefinitions (ModuleContainer module) // Set internal build-in types Dynamic.SetDefinition (Object); + AsUntyped.SetDefinition (Object); + AsUntyped.Modifiers |= Modifiers.AS_UNTYPED; return true; } @@ -188,6 +203,10 @@ class PredefinedTypes public readonly PredefinedType ICollectionGeneric; public readonly PredefinedType IReadOnlyCollectionGeneric; public readonly PredefinedType IEnumerableGeneric; + public readonly PredefinedType IDictionaryGeneric; + public readonly PredefinedType IList; + public readonly PredefinedType ICollection; + public readonly PredefinedType IDictionary; public readonly PredefinedType Nullable; public readonly PredefinedType Activator; public readonly PredefinedType Interlocked; @@ -197,7 +216,9 @@ class PredefinedTypes public readonly PredefinedType RuntimeMethodHandle; public readonly PredefinedType SecurityAction; public readonly PredefinedType Dictionary; + public readonly PredefinedType KeyValuePair; public readonly PredefinedType Hashtable; + public readonly PredefinedType List; public readonly TypeSpec[] SwitchUserTypes; // @@ -227,16 +248,46 @@ class PredefinedTypes public readonly PredefinedType AsyncTaskMethodBuilder; public readonly PredefinedType AsyncTaskMethodBuilderGeneric; public readonly PredefinedType Action; + public readonly PredefinedType Func; public readonly PredefinedType Task; public readonly PredefinedType TaskGeneric; public readonly PredefinedType IAsyncStateMachine; public readonly PredefinedType INotifyCompletion; public readonly PredefinedType ICriticalNotifyCompletion; - // C# 6.0 - public readonly PredefinedType IFormattable; - public readonly PredefinedType FormattableString; - public readonly PredefinedType FormattableStringFactory; + // + // Actionscript + // + public readonly PredefinedType AsExpandoObject; + public readonly PredefinedType AsVector; + public readonly PredefinedType AsArray; + public readonly PredefinedType AsError; + public readonly PredefinedType AsFunction; + public readonly PredefinedType AsUndefined; + public readonly PredefinedType AsCallSite; + public readonly PredefinedType AsCallSiteGeneric; + public readonly PredefinedType AsExpressionType; + public readonly PredefinedType AsBinder; + public readonly PredefinedType AsBinderFlags; + public readonly PredefinedType AsRegExp; + public readonly PredefinedType AsXml; + public readonly PredefinedType AsIKeyEnumerable; + public readonly PredefinedType AsDotNetError; + + public readonly PredefinedType PsGetMember; + public readonly PredefinedType PsSetMember; + public readonly PredefinedType PsSetIndex; + public readonly PredefinedType PsGetIndex; + public readonly PredefinedType PsConverter; + public readonly PredefinedType PsBinaryOperation; + public readonly PredefinedType PsUnaryOperation; + public readonly PredefinedType PsInvokeMember; + public readonly PredefinedType PsInvoke; + + // PlayScript dynamic binder AOT mode support.. + private bool checkedAsDynamicMode = false; + private bool isAsDynamicMode = false; + private bool isAsAotMode = false; public PredefinedTypes (ModuleContainer module) { @@ -256,6 +307,10 @@ public PredefinedTypes (ModuleContainer module) ICollectionGeneric = new PredefinedType (module, MemberKind.Interface, "System.Collections.Generic", "ICollection", 1); IReadOnlyCollectionGeneric = new PredefinedType (module, MemberKind.Interface, "System.Collections.Generic", "IReadOnlyCollection", 1); IEnumerableGeneric = new PredefinedType (module, MemberKind.Interface, "System.Collections.Generic", "IEnumerable", 1); + IDictionaryGeneric = new PredefinedType (module, MemberKind.Interface, "System.Collections.Generic", "IDictionary", 2); + IList = new PredefinedType (module, MemberKind.Interface, "System.Collections", "IList"); + ICollection = new PredefinedType (module, MemberKind.Interface, "System.Collections", "ICollection"); + IDictionary = new PredefinedType (module, MemberKind.Interface, "System.Collections", "IDictionary"); Nullable = new PredefinedType (module, MemberKind.Struct, "System", "Nullable", 1); Activator = new PredefinedType (module, MemberKind.Class, "System", "Activator"); Interlocked = new PredefinedType (module, MemberKind.Class, "System.Threading", "Interlocked"); @@ -265,7 +320,9 @@ public PredefinedTypes (ModuleContainer module) RuntimeMethodHandle = new PredefinedType (module, MemberKind.Struct, "System", "RuntimeMethodHandle"); SecurityAction = new PredefinedType (module, MemberKind.Enum, "System.Security.Permissions", "SecurityAction"); Dictionary = new PredefinedType (module, MemberKind.Class, "System.Collections.Generic", "Dictionary", 2); + KeyValuePair = new PredefinedType (module, MemberKind.Struct, "System.Collections.Generic", "KeyValuePair", 2); Hashtable = new PredefinedType (module, MemberKind.Class, "System.Collections", "Hashtable"); + List = new PredefinedType (module, MemberKind.Class, "System.Collections.Generic", "List", 1); Expression = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "Expression"); ExpressionGeneric = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "Expression", 1); @@ -282,6 +339,7 @@ public PredefinedTypes (ModuleContainer module) BinderFlags = new PredefinedType (module, MemberKind.Enum, "Microsoft.CSharp.RuntimeBinder", "CSharpBinderFlags"); Action = new PredefinedType (module, MemberKind.Delegate, "System", "Action"); + Func = new PredefinedType (module, MemberKind.Delegate, "System", "Func"); AsyncVoidMethodBuilder = new PredefinedType (module, MemberKind.Struct, "System.Runtime.CompilerServices", "AsyncVoidMethodBuilder"); AsyncTaskMethodBuilder = new PredefinedType (module, MemberKind.Struct, "System.Runtime.CompilerServices", "AsyncTaskMethodBuilder"); AsyncTaskMethodBuilderGeneric = new PredefinedType (module, MemberKind.Struct, "System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", 1); @@ -291,9 +349,31 @@ public PredefinedTypes (ModuleContainer module) INotifyCompletion = new PredefinedType (module, MemberKind.Interface, "System.Runtime.CompilerServices", "INotifyCompletion"); ICriticalNotifyCompletion = new PredefinedType (module, MemberKind.Interface, "System.Runtime.CompilerServices", "ICriticalNotifyCompletion"); - IFormattable = new PredefinedType (module, MemberKind.Interface, "System", "IFormattable"); - FormattableString = new PredefinedType (module, MemberKind.Class, "System", "FormattableString"); - FormattableStringFactory = new PredefinedType (module, MemberKind.Class, "System.Runtime.CompilerServices", "FormattableStringFactory"); + AsExpandoObject = new PredefinedType (module, MemberKind.Class, "PlayScript.Expando", "ExpandoObject"); + AsArray = new PredefinedType (module, MemberKind.Class, PsConsts.PsRootNamespace, "Array"); + AsVector = new PredefinedType (module, MemberKind.Class, PsConsts.PsRootNamespace, "Vector", 1); + AsError = new PredefinedType (module, MemberKind.Class, PsConsts.PsRootNamespace, "Error"); + AsFunction = new PredefinedType (module, MemberKind.Class, PsConsts.PsRootNamespace, "Function"); + AsUndefined = new PredefinedType (module, MemberKind.Class, "PlayScript", "Undefined"); + AsCallSite = new PredefinedType (module, MemberKind.Class, "PlayScript", "CallSite"); + AsCallSiteGeneric = new PredefinedType (module, MemberKind.Class, "PlayScript", "CallSite", 1); + AsExpressionType = new PredefinedType (module, MemberKind.Enum, "PlayScript", "ExpressionType"); + AsBinder = new PredefinedType (module, MemberKind.Class, "PlayScript.RuntimeBinder", "Binder"); + AsBinderFlags = new PredefinedType (module, MemberKind.Enum, "PlayScript.RuntimeBinder", "CSharpBinderFlags"); + AsRegExp = new PredefinedType (module, MemberKind.Class, PsConsts.PsRootNamespace, "RegExp"); + AsXml = new PredefinedType (module, MemberKind.Class, PsConsts.PsRootNamespace, "XML"); + AsIKeyEnumerable = new PredefinedType (module, MemberKind.Interface, "PlayScript", "IKeyEnumerable"); + AsDotNetError = new PredefinedType (module, MemberKind.Class, PsConsts.PsRootNamespace, "DotNetError"); + + PsGetMember = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSGetMember"); + PsSetMember = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSSetMember"); + PsGetIndex = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSGetIndex"); + PsSetIndex = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSSetIndex"); + PsConverter = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSConverter"); + PsBinaryOperation = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSBinaryOperation"); + PsUnaryOperation = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSUnaryOperation"); + PsInvokeMember = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSInvokeMember"); + PsInvoke = new PredefinedType (module, MemberKind.Class, "PlayScript.DynamicRuntime", "PSInvoke"); // // Define types which are used for comparison. It does not matter @@ -330,10 +410,50 @@ public PredefinedTypes (ModuleContainer module) if (TaskGeneric.Define ()) TaskGeneric.TypeSpec.IsGenericTask = true; + AsUndefined.Define (); + SwitchUserTypes = Switch.CreateSwitchUserTypes (module, Nullable.TypeSpec); + } + + private void CheckPlayScriptDynamicMode() + { + if (!checkedAsDynamicMode) { + isAsDynamicMode = AsBinder.Define (); // Using PlayScript dynamic support. + isAsAotMode = AsCallSite.Define (); // Using PlayScript dynamic support, in AOT mode. + checkedAsDynamicMode = true; + } + } - IFormattable.Define (); - FormattableString.Define (); + public bool IsPlayScriptDynamicMode { + get { + if (!checkedAsDynamicMode) + CheckPlayScriptDynamicMode(); + return isAsDynamicMode; + } + } + + public bool IsPlayScriptAotMode { + get { + if (!checkedAsDynamicMode) + CheckPlayScriptDynamicMode(); + return isAsAotMode; + } + } + + public PredefinedType GetBinder(ResolveContext ec) { + if (IsPlayScriptDynamicMode) { + return AsBinder; + } else { + return Binder; + } + } + + public PredefinedType GetBinderFlags(ResolveContext ec) { + if (IsPlayScriptDynamicMode) { + return AsBinderFlags; + } else { + return BinderFlags; + } } } @@ -398,6 +518,8 @@ class PredefinedMembers public readonly PredefinedMember StructLayoutCharSet; public readonly PredefinedMember StructLayoutSize; public readonly PredefinedMember TypeGetTypeFromHandle; + public readonly PredefinedMember AsIKeyEnumerableGetKeyEnumerator; + public readonly PredefinedMember AsUntypedAttributeCtor; public PredefinedMembers (ModuleContainer module) { @@ -703,6 +825,13 @@ public PredefinedMembers (ModuleContainer module) MemberFilter.Field ("Size", btypes.Int)); TypeGetTypeFromHandle = new PredefinedMember (module, btypes.Type, "GetTypeFromHandle", btypes.RuntimeTypeHandle); + + AsIKeyEnumerableGetKeyEnumerator = new PredefinedMember (module, types.AsIKeyEnumerable, + "GetKeyEnumerator", TypeSpec.EmptyTypes); + + AsUntypedAttributeCtor = new PredefinedMember (module, atypes.AsUntypedAttribute, MemberFilter.Constructor ( + ParametersCompiled.CreateFullyResolved ( + ArrayContainer.MakeType (module, btypes.Bool)))); } } @@ -1102,7 +1231,26 @@ public static bool HasElementType (TypeSpec t) { return t is ElementTypeSpec; } - + + /// + /// Utility function to check whether a type is AsUndefined or not + /// + public static bool IsAsUndefined (TypeSpec type, ResolveContext opt_ec) + { + if (opt_ec == null) + return false; + + // + // AsUndefined is only defined if PlayScript.Dynamic is included, so + // we excplitily check if it has been defined, rather than calling + // Resolve. + // + if (opt_ec.Module.PredefinedTypes.AsUndefined.IsDefined && type == opt_ec.Module.PredefinedTypes.AsUndefined.TypeSpec) + return true; + + return false; + } + /// /// Utility function that can be used to probe whether a type /// is managed or not. diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/typespec.cs similarity index 92% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/typespec.cs index f67867b5c..7a91f44e9 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/typespec.cs @@ -22,7 +22,7 @@ using System.Reflection; #endif -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { // // Inflated or non-inflated representation of any type. @@ -34,6 +34,10 @@ public class TypeSpec : MemberSpec protected IList ifaces; TypeSpec base_type; + // Are we dynamic, have we checked yet? + protected bool isAsDynamicSet; + protected bool isAsDynamic; + Dictionary inflated_instances; public static readonly TypeSpec[] EmptyTypes = new TypeSpec[0]; @@ -157,6 +161,19 @@ public bool IsClass { } } + // True if this type is an ActionScript dynamic class. + public bool IsAsDynamicClass { + get { + if (!isAsDynamicSet) { + // We are always dynamic if our builtin type is "dynamic", but we could also be dynamic if we're a + // dynamic class. + isAsDynamic = this.definition != null && ((ITypeDefinition)this.definition).IsAsDynamicClass; + isAsDynamicSet = true; + } + return isAsDynamic; + } + } + public bool IsConstantCompatible { get { if ((Kind & (MemberKind.Enum | MemberKind.Class | MemberKind.Interface | MemberKind.Delegate | MemberKind.ArrayType)) != 0) @@ -337,6 +354,49 @@ public bool IsUnmanaged { } } + public virtual bool IsNumeric { + get { + switch (BuiltinType) { + case BuiltinTypeSpec.Type.Byte: + case BuiltinTypeSpec.Type.SByte: + case BuiltinTypeSpec.Type.Char: + case BuiltinTypeSpec.Type.Short: + case BuiltinTypeSpec.Type.UShort: + case BuiltinTypeSpec.Type.Int: + case BuiltinTypeSpec.Type.UInt: + case BuiltinTypeSpec.Type.Long: + case BuiltinTypeSpec.Type.ULong: + case BuiltinTypeSpec.Type.Float: + case BuiltinTypeSpec.Type.Double: + case BuiltinTypeSpec.Type.Decimal: + case BuiltinTypeSpec.Type.IntPtr: + case BuiltinTypeSpec.Type.UIntPtr: + case BuiltinTypeSpec.Type.Enum: + return true; + default: + return false; + } + } + } + + public bool IsDynamic { + get { + return BuiltinType == BuiltinTypeSpec.Type.Dynamic; + } + } + + // + // There is a distinction between the "Object" and "*" types in ActionScript. The + // former adds a small amount of type safety (i.e. it disallows numeric operators), + // whereas the latter is fully dynamic, and is the only type that can contain the + // value of "undefined". + // + public bool IsAsUntyped { + get { + return IsDynamic && (Modifiers & Modifiers.AS_UNTYPED) != 0; + } + } + // // A cache of all type members (including nested types) // @@ -490,22 +550,17 @@ public virtual TypeSpec GetDefinition () // // Text representation of type used by documentation writer // - public sealed override string GetSignatureForDocumentation () - { - return GetSignatureForDocumentation (false); - } - - public virtual string GetSignatureForDocumentation (bool explicitName) + public override string GetSignatureForDocumentation () { StringBuilder sb = new StringBuilder (); if (IsNested) { - sb.Append (DeclaringType.GetSignatureForDocumentation (explicitName)); - } else if (MemberDefinition.Namespace != null) { - sb.Append (explicitName ? MemberDefinition.Namespace.Replace ('.', '#') : MemberDefinition.Namespace); + sb.Append (DeclaringType.GetSignatureForDocumentation ()); + } else { + sb.Append (MemberDefinition.Namespace); } if (sb.Length != 0) - sb.Append (explicitName ? "#" : "."); + sb.Append ("."); sb.Append (Name); if (Arity > 0) { @@ -515,7 +570,7 @@ public virtual string GetSignatureForDocumentation (bool explicitName) if (i > 0) sb.Append (","); - sb.Append (TypeArguments[i].GetSignatureForDocumentation (explicitName)); + sb.Append (TypeArguments[i].GetSignatureForDocumentation ()); } sb.Append ("}"); } else { @@ -527,6 +582,33 @@ public virtual string GetSignatureForDocumentation (bool explicitName) return sb.ToString (); } + public string GetExplicitNameSignatureForDocumentation () + { + StringBuilder sb = new StringBuilder (); + if (IsNested) { + sb.Append (DeclaringType.GetExplicitNameSignatureForDocumentation ()); + } else if (MemberDefinition.Namespace != null) { + sb.Append (MemberDefinition.Namespace.Replace ('.', '#')); + } + + if (sb.Length != 0) + sb.Append ("#"); + + sb.Append (Name); + if (Arity > 0) { + sb.Append ("{"); + for (int i = 0; i < Arity; ++i) { + if (i > 0) + sb.Append (","); + + sb.Append (TypeArguments[i].GetExplicitNameSignatureForDocumentation ()); + } + sb.Append ("}"); + } + + return sb.ToString (); + } + public override string GetSignatureForError () { string s; @@ -857,6 +939,8 @@ public enum Type IEnumerator, IEnumerable, IDisposable, + IList, + IDictionary, Exception, Attribute, Other, @@ -1183,7 +1267,7 @@ public static bool IsEqual (TypeSpec type1, TypeSpec type2) var t2_targs = type2.TypeArguments; var targs_definition = target_type_def.TypeParameters; - if (!type1.IsInterface && !type1.IsDelegate) { + if (!type1.IsInterface && !type1.IsDelegate || t1_targs.Length != t2_targs.Length) { // !!!: Need to confirm interfaces have same number of targs return false; } @@ -1197,9 +1281,9 @@ public static bool IsEqual (TypeSpec type1, TypeSpec type2) } if (v == Variance.Covariant) { - if (!Convert.ImplicitReferenceConversionExists (t1_targs[i], t2_targs[i])) + if (!Convert.ImplicitReferenceConversionExists (t1_targs[i], t2_targs[i], null, false)) return false; - } else if (!Convert.ImplicitReferenceConversionExists (t2_targs[i], t1_targs[i])) { + } else if (!Convert.ImplicitReferenceConversionExists (t2_targs[i], t1_targs[i], null, false)) { return false; } } @@ -1408,6 +1492,10 @@ public interface ITypeDefinition : IMemberDefinition int TypeParametersCount { get; } TypeParameterSpec[] TypeParameters { get; } + // ActionScript : Class types we need to know about. + bool IsAsDynamicClass { get; } + bool IsAsBindableClass { get; } + TypeSpec GetAttributeCoClass (); string GetAttributeDefaultMember (); AttributeUsageAttribute GetAttributeUsage (PredefinedAttribute pa); @@ -1459,6 +1547,18 @@ bool ITypeDefinition.IsComImport { } } + bool ITypeDefinition.IsAsDynamicClass { + get { + return false; + } + } + + bool ITypeDefinition.IsAsBindableClass { + get { + return false; + } + } + bool IMemberDefinition.IsImported { get { return false; @@ -1601,6 +1701,18 @@ bool ITypeDefinition.IsComImport { } } + bool ITypeDefinition.IsAsDynamicClass { + get { + return false; + } + } + + bool ITypeDefinition.IsAsBindableClass { + get { + return false; + } + } + bool ITypeDefinition.IsPartial { get { return false; @@ -1637,9 +1749,9 @@ protected virtual string GetPostfixSignature () return null; } - public override string GetSignatureForDocumentation (bool explicitName) + public override string GetSignatureForDocumentation () { - return Element.GetSignatureForDocumentation (explicitName) + GetPostfixSignature (); + return Element.GetSignatureForDocumentation () + GetPostfixSignature (); } public override string GetSignatureForError () @@ -1872,33 +1984,29 @@ public static string GetPostfixSignature (int rank) return sb.ToString (); } - public override string GetSignatureForDocumentation (bool explicitName) + public override string GetSignatureForDocumentation () { StringBuilder sb = new StringBuilder (); - GetElementSignatureForDocumentation (sb, explicitName); + GetElementSignatureForDocumentation (sb); return sb.ToString (); } - void GetElementSignatureForDocumentation (StringBuilder sb, bool explicitName) + void GetElementSignatureForDocumentation (StringBuilder sb) { var ac = Element as ArrayContainer; if (ac == null) - sb.Append (Element.GetSignatureForDocumentation (explicitName)); + sb.Append (Element.GetSignatureForDocumentation ()); else - ac.GetElementSignatureForDocumentation (sb, explicitName); + ac.GetElementSignatureForDocumentation (sb); - if (explicitName) { - sb.Append (GetPostfixSignature (rank)); - } else { - sb.Append ("["); - for (int i = 1; i < rank; i++) { - if (i == 1) - sb.Append ("0:"); + sb.Append ("["); + for (int i = 1; i < rank; i++) { + if (i == 1) + sb.Append ("0:"); - sb.Append (",0:"); - } - sb.Append ("]"); + sb.Append (",0:"); } + sb.Append ("]"); } public static ArrayContainer MakeType (ModuleContainer module, TypeSpec element) @@ -1988,6 +2096,7 @@ public static PointerContainer MakeType (ModuleContainer module, TypeSpec elemen return pc; } + } public class MissingTypeSpecReference @@ -2001,4 +2110,5 @@ public MissingTypeSpecReference (TypeSpec type, MemberSpec caller) public TypeSpec Type { get; private set; } public MemberSpec Caller { get; private set; } } + } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/visit.cs similarity index 82% rename from ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs rename to ICSharpCode.NRefactory.PlayScript/Parser/mcs/visit.cs index 4a11a37e1..984060b91 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/visit.cs +++ b/ICSharpCode.NRefactory.PlayScript/Parser/mcs/visit.cs @@ -12,32 +12,59 @@ using System; using System.Diagnostics; +using System.Collections.Generic; +using Mono.PlayScript; -namespace ICSharpCode.NRefactory.MonoCSharp +namespace ICSharpCode.NRefactory.MonoPlayScript { + public enum VisitDepth + { + Namespaces = 1, // Namespaces + Types = 2, // Types + Members = 3, // Member declarations + Initializers = 4, // Field, const initializers + MethodBodies = 5, // Method,constructor,property bodies + All = 6 // Everything + } + public abstract class StructuralVisitor { + // True to automatically visit all children, false to manually implement traversal in visit methods + public bool AutoVisit; + // True to continue auto traversal, false exits immediately + public bool Continue = true; + // True to skip children of this element and continue to next element + public bool Skip; + // Maximum depth for visitor + public VisitDepth Depth = VisitDepth.All; + public virtual void Visit (MemberCore member) { Debug.Fail ("unknown member type: " + member.GetType ()); } - public virtual void Visit (ModuleContainer mc) + void VisitTypeContainer (TypeContainer tc) { - foreach (var container in mc.Containers) { + foreach (var container in tc.Containers) { container.Accept (this); } } - void VisitTypeDefinition (TypeDefinition tc) + void VisitTypeContainer (TypeDefinition tc) { foreach (var member in tc.Members) { member.Accept (this); } } - public virtual void Visit (NamespaceContainer ns) + public virtual void Visit (UsingClause usingClause) + { + } + + public virtual void Visit (ModuleContainer module) { + if (!AutoVisit) + VisitTypeContainer (module); } public virtual void Visit (UsingNamespace un) @@ -52,28 +79,34 @@ public virtual void Visit (UsingExternAlias uea) { } - public virtual void Visit (UsingClause usingClause) + public virtual void Visit (NamespaceContainer ns) { + if (!AutoVisit) + VisitTypeContainer (ns); } public virtual void Visit (CompilationSourceFile csf) { + VisitTypeContainer (csf); } public virtual void Visit (Class c) { - VisitTypeDefinition (c); + if (!AutoVisit) + VisitTypeContainer (c); } public virtual void Visit (Struct s) { - VisitTypeDefinition (s); + if (!AutoVisit) + VisitTypeContainer (s); } public virtual void Visit (Interface i) { - VisitTypeDefinition (i); + if (!AutoVisit) + VisitTypeContainer (i); } public virtual void Visit (Delegate d) @@ -82,7 +115,8 @@ public virtual void Visit (Delegate d) public virtual void Visit (Enum e) { - VisitTypeDefinition (e); + if (!AutoVisit) + VisitTypeContainer (e); } public virtual void Visit (FixedField f) @@ -131,14 +165,14 @@ public virtual void Visit (EventProperty ep) public virtual void Visit (EnumMember em) { } - + public virtual object Visit (Statement stmt) { Debug.Fail ("unknown statement:" + stmt); return null; } - public virtual object Visit (BlockVariable blockVariableDeclaration) + public virtual object Visit (BlockVariable blockVariable) { return null; } @@ -315,11 +349,6 @@ public virtual object Visit (YieldBreak yieldBreakStatement) { return null; } - - public virtual object Visit (InvalidStatementExpression invalidStatementExpression) - { - return null; - } public virtual object Visit (Expression expression) { @@ -592,7 +621,7 @@ public virtual object Visit (Linq.ThenByAscending thenByAscending) { return null; } - + public virtual object Visit (Linq.ThenByDescending thenByDescending) { return null; @@ -618,5 +647,58 @@ public virtual object Visit (Await awaitExpr) { return null; } + + // ActionScript/PlayScript Expressions + + public virtual object Visit (AsObjectInitializer initializer) + { + return null; + } + + public virtual object Visit (AsArrayInitializer initializer) + { + return null; + } + + public virtual object Visit (AsNew newExpression) + { + return null; + } + + public virtual object Visit (AsDelete deleteExpr) + { + return null; + } + + public virtual object Visit (AsTypeOf typeOfExpr) + { + return null; + } + + public virtual object Visit (AsIn inExpr) + { + return null; + } + + public virtual object Visit (AsLocalFunction localFunc) + { + return null; + } + + public virtual object Visit (AsUseNamespaceStatement useNamespace) + { + return null; + } + + public virtual object Visit (AsNonAssignStatementExpression asStmntExpr) + { + return null; + } + + public virtual object Visit (AsXmlQueryExpression xmlQueryExpr) + { + return null; + } + } } \ No newline at end of file diff --git a/ICSharpCode.NRefactory.CSharp/PatternMatching/AnyType.cs b/ICSharpCode.NRefactory.PlayScript/PatternMatching/AnyType.cs similarity index 89% rename from ICSharpCode.NRefactory.CSharp/PatternMatching/AnyType.cs rename to ICSharpCode.NRefactory.PlayScript/PatternMatching/AnyType.cs index 41e3778da..ce43f400c 100644 --- a/ICSharpCode.NRefactory.CSharp/PatternMatching/AnyType.cs +++ b/ICSharpCode.NRefactory.PlayScript/PatternMatching/AnyType.cs @@ -25,11 +25,11 @@ // THE SOFTWARE. using System; using System.Collections.Generic; -using ICSharpCode.NRefactory.CSharp.Resolver; +using ICSharpCode.NRefactory.PlayScript.Resolver; using ICSharpCode.NRefactory.TypeSystem; -using ICSharpCode.NRefactory.CSharp; +using ICSharpCode.NRefactory.PlayScript; -namespace ICSharpCode.NRefactory.PatternMatching +namespace ICSharpCode.NRefactory.PlayScript.PatternMatching { diff --git a/ICSharpCode.NRefactory.CSharp/Properties/AssemblyInfo.cs b/ICSharpCode.NRefactory.PlayScript/Properties/AssemblyInfo.cs similarity index 76% rename from ICSharpCode.NRefactory.CSharp/Properties/AssemblyInfo.cs rename to ICSharpCode.NRefactory.PlayScript/Properties/AssemblyInfo.cs index e19210c5d..59b3d5797 100644 --- a/ICSharpCode.NRefactory.CSharp/Properties/AssemblyInfo.cs +++ b/ICSharpCode.NRefactory.PlayScript/Properties/AssemblyInfo.cs @@ -28,6 +28,6 @@ // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("ICSharpCode.NRefactory.CSharp")] +[assembly: AssemblyTitle("ICSharpCode.NRefactory.PlayScript")] [assembly: AssemblyDescription("C# parser and semantic analysis")] -[assembly: InternalsVisibleTo("ICSharpCode.NRefactory.CSharp.Refactoring, PublicKey=00240000048000009400000006020000002400005253413100040000010001004dcf3979c4e902efa4dd2163a039701ed5822e6f1134d77737296abbb97bf0803083cfb2117b4f5446a217782f5c7c634f9fe1fc60b4c11d62c5b3d33545036706296d31903ddcf750875db38a8ac379512f51620bb948c94d0831125fbc5fe63707cbb93f48c1459c4d1749eb7ac5e681a2f0d6d7c60fa527a3c0b8f92b02bf")] +[assembly: InternalsVisibleTo("ICSharpCode.NRefactory.PlayScript.Refactoring")] diff --git a/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs b/ICSharpCode.NRefactory.PlayScript/QueryExpressionExpander.cs similarity index 99% rename from ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs rename to ICSharpCode.NRefactory.PlayScript/QueryExpressionExpander.cs index 2870e824e..b2dc27287 100644 --- a/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs +++ b/ICSharpCode.NRefactory.PlayScript/QueryExpressionExpander.cs @@ -24,7 +24,8 @@ using System.Text; using ICSharpCode.NRefactory.PatternMatching; -namespace ICSharpCode.NRefactory.CSharp { +namespace ICSharpCode.NRefactory.PlayScript { + public class QueryExpressionExpansionResult { public AstNode AstNode { get; private set; } diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs b/ICSharpCode.NRefactory.PlayScript/Refactoring/BaseRefactoringContext.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs rename to ICSharpCode.NRefactory.PlayScript/Refactoring/BaseRefactoringContext.cs index 3f8055871..72ec4d5b6 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs +++ b/ICSharpCode.NRefactory.PlayScript/Refactoring/BaseRefactoringContext.cs @@ -27,19 +27,21 @@ using System; using System.Linq; using System.Threading; -using ICSharpCode.NRefactory.CSharp.Resolver; -using ICSharpCode.NRefactory.CSharp.TypeSystem; +//using ICSharpCode.NRefactory.PlayScript.TypeSystem; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.Editor; using System.ComponentModel.Design; -using ICSharpCode.NRefactory.CSharp.Analysis; +using ICSharpCode.NRefactory.PlayScript.Analysis; using ICSharpCode.NRefactory.Utils; using System.Collections.Generic; using ICSharpCode.NRefactory.Analysis; +using ICSharpCode.NRefactory.PlayScript.Resolver; +using ICSharpCode.NRefactory.PlayScript.TypeSystem; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { public abstract class BaseRefactoringContext : IServiceProvider { @@ -99,7 +101,7 @@ public virtual TypeGraph TypeGraph { get { return new TypeGraph(Compilation.Assemblies); } } - public BaseRefactoringContext (ICSharpCode.NRefactory.CSharp.Resolver.CSharpAstResolver resolver, System.Threading.CancellationToken cancellationToken) + public BaseRefactoringContext (CSharpAstResolver resolver, System.Threading.CancellationToken cancellationToken) { this.resolver = resolver; this.cancellationToken = cancellationToken; diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeAction.cs b/ICSharpCode.NRefactory.PlayScript/Refactoring/CodeAction.cs similarity index 95% rename from ICSharpCode.NRefactory.CSharp/Refactoring/CodeAction.cs rename to ICSharpCode.NRefactory.PlayScript/Refactoring/CodeAction.cs index 3acd74698..529fd7cd5 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeAction.cs +++ b/ICSharpCode.NRefactory.PlayScript/Refactoring/CodeAction.cs @@ -25,8 +25,9 @@ // THE SOFTWARE. using System; using ICSharpCode.NRefactory.Refactoring; +using ICSharpCode.NRefactory; -namespace ICSharpCode.NRefactory.CSharp.Refactoring +namespace ICSharpCode.NRefactory.PlayScript.Refactoring { /// /// A code action provides a code transformation with a description. @@ -101,7 +102,7 @@ public Severity Severity { const string defaultSiblingKey = "default"; /// - /// Initializes a new instance of the class, + /// Initializes a new instance of the class, /// using a non-null default value for . /// /// @@ -119,7 +120,7 @@ public CodeAction (string description, Action