示例#1
0
        private void BuildName(DNamePattern node, Hints hints, CompilerContext ctx)
        {
            var err = GetTypeHandle(null, node.Name, out var handle, out var std);

            if (err == CompilerError.None)
            {
                cw.TypeCheck(new TypeHandle(handle, std));
            }
            else
            {
                ScopeVar sv    = default;
                var      found = hints.Has(Rebind)
                    ? TryGetVariable(node.Name, out sv)
                    : hints.Has(OpenMatch) ? false : TryGetLocalVariable(node.Name, out sv);
                var sva = sv.Address;

                if (!found)
                {
                    sva = AddVariable(node.Name, node, hints.Has(Const) ? VarFlags.Const : VarFlags.None);
                }
                else if ((sv.Data & VarFlags.Const) == VarFlags.Const)
                {
                    AddError(CompilerError.UnableAssignConstant, node.Location, node.Name);
                }

                cw.PopVar(sva);
                cw.Push(true);
            }
        }
示例#2
0
        private void PreinitName(DNamePattern node, Hints hints)
        {
            var err = GetTypeHandle(null, node.Name, out var handle, out var std);

            if (err != CompilerError.None)
            {
                var found = TryGetLocalVariable(node.Name, out var sv);
                var sva   = -1;

                if (!found)
                {
                    sva = AddVariable(node.Name, node, hints.Has(Const) ? VarFlags.Const : VarFlags.None);
                }
                else
                {
                    sva = sv.Address;
                }

                cw.PushNil();
                cw.PopVar(sva);
            }
        }