public static Symbol GenSym(Package p) { lock (_lock) { System.Threading.Interlocked.Increment(ref nextgen); return new Symbol(p, "#G" + nextgen); } }
public static Package DefinePackage(string name, Interpreter interpreter) { if (interpreter == null) Error.Fatal(new ArgumentNullException("interpreter"), typeof(Package)); PackageProvider pp = interpreter.PackageProvider; Package p = pp.GetPackage(name); if (p == null) { p = new Package(interpreter, name, pp); pp.RegisterPackage(p); } return p; }
protected virtual void SetCurrentPackage(Package p) { if (p != null) { InnerCurrentPackage = p; Intern("*package*").GlobalValue = p; } }
protected void Initialize() { InnerGlobalEnvironment = new Environment(null, null, null); InnerReader = new Reader(this); InnerPackageProvider = new PackageProvider(); InnerGlobalPackage = Package.DefinePackage("global", this); CurrentPackage = Package.DefinePackage("internal", this); CurrentPackage.Export("*package*"); InnerKeywordPackage = Package.DefinePackage("keyword", this); CurrentPackage.UsePackage(InnerKeywordPackage); CurrentPackage.UsePackage(InnerGlobalPackage); Assembly[] asm = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly a in asm) { AddTypesFrom(a); } InternBuiltins(); Primitives.InternAll(this); LASTVAL.GlobalValue = null; NEXTLASTVAL.GlobalValue = null; THIRDLASTVAL.GlobalValue = null; //these primitives are here, rather than in Primitives, because their implementation //requires calls to gfs bound to symbols InternAndExport("intern", new Function(InternF)); InternAndExport("unintern", new Function(UnInternF)); InternAndExport("eval", new Function(EvalF)); InternAndExport("load", new Function(LoadF)); InternAndExport("map->list", new Function(MapToList)); InternAndExport("apply", new Function(Apply)); InternAndExport("<", new Function(Lt)); InternAndExport("<=", new Function(LtEq)); InternAndExport(">", new Function(Gt)); InternAndExport(">=", new Function(GtEq)); InternAndExport("==", new Function(EqEq)); InternAndExport("!=", new Function(NotEq)); InternAndExport("typeof", new Function(TypeOf)); InternAndExport("null", null); InternAndExport("defpackage", new Function(DefPackage)); InternAndExport("use-package", new Function(UsePackage)); InternAndExport("in-package", new Function(InPackage)); InternAndExport("gensym", new Function(GenSym)); InternAndExport("export", new Function(Export)); InternAndExport("cast", new Function(Cast)); InnerStrGF = (SimpleGenericFunction)InternAndExport("str").GlobalValue; InnerGetEnumGF = (SimpleGenericFunction)InternAndExport("get-enum").GlobalValue; InnerCompareGF = (BinOp)InternAndExport("compare").GlobalValue; Intern("interpreter", this); }
//......................................................................... public Keyword(Package p, String name) : base(p, name) { InnerGlobalValue = this; }
//......................................................................... public Symbol(Package p, string name) { InnerName = name; InnerPackage = p; }
public SymbolTable(Package p, TypeResolver tr) { InnerTypeResolver = tr ?? new TypeResolver(); InnerPackage = p; }
//......................................................................... public SymbolTable(Package p) : this(p, null) { }
//......................................................................... public virtual void RegisterPackage(Package p) { if (p != null) { InnerPackages[p.Name] = p; } }
// XXX ј если зациклимс¤! ÷иклических ссылок не должно быть! public virtual void UsePackage(Package p) { if (p != null && !UseList.Contains(p)) UseList.Add(p); }
//......................................................................... public Constant(Package p, String name, Object val) : base(p, name) { InnerGlobalValue = val; }
//......................................................................... public CLSInstanceSymbol(Package p, string name, string memberName, Type type) : base(p, name) { InnerGlobalValue = CLSMember.FindMember(memberName, type, false); }
//......................................................................... public CLSStaticSymbol(Package p, string name, string memberName, Type type) : base(p, name) { InnerGlobalValue = InnerMember = CLSMember.FindMember(memberName, type, true); }
//......................................................................... public CLSTypeSymbol(Package p, string name, Type type, TypeResolver tr) : base(p, name) { //InnerGlobalValue = type; InnerGlobalValue = null; InnerTypeResolver = tr; }