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); } }
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); } }