Пример #1
0
 public static Symbol GenSym(Package p)
 {
     lock (_lock) {
         System.Threading.Interlocked.Increment(ref nextgen);
         return new Symbol(p, "#G" + nextgen);
     }
 }
Пример #2
0
        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;
        }
Пример #3
0
 protected virtual void SetCurrentPackage(Package p)
 {
     if (p != null) {
         InnerCurrentPackage = p;
         Intern("*package*").GlobalValue = p;
     }
 }
Пример #4
0
        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);
        }
Пример #5
0
 //.........................................................................
 public Keyword(Package p, String name)
     : base(p, name)
 {
     InnerGlobalValue = this;
 }
Пример #6
0
 //.........................................................................
 public Symbol(Package p, string name)
 {
     InnerName = name;
     InnerPackage = p;
 }
Пример #7
0
 public SymbolTable(Package p, TypeResolver tr)
 {
     InnerTypeResolver = tr ?? new TypeResolver();
     InnerPackage = p;
 }
Пример #8
0
 //.........................................................................
 public SymbolTable(Package p)
     : this(p, null)
 {
 }
Пример #9
0
 //.........................................................................
 public virtual void RegisterPackage(Package p)
 {
     if (p != null) {
         InnerPackages[p.Name] = p;
     }
 }
Пример #10
0
 // XXX ј если зациклимс¤! ÷иклических ссылок не должно быть!
 public virtual void UsePackage(Package p)
 {
     if (p != null && !UseList.Contains(p))
         UseList.Add(p);
 }
Пример #11
0
 //.........................................................................
 public Constant(Package p, String name, Object val)
     : base(p, name)
 {
     InnerGlobalValue = val;
 }
Пример #12
0
 //.........................................................................
 public CLSInstanceSymbol(Package p, string name, string memberName, Type type)
     : base(p, name)
 {
     InnerGlobalValue = CLSMember.FindMember(memberName, type, false);
 }
Пример #13
0
 //.........................................................................
 public CLSStaticSymbol(Package p, string name, string memberName, Type type)
     : base(p, name)
 {
     InnerGlobalValue = InnerMember = CLSMember.FindMember(memberName, type, true);
 }
Пример #14
0
 //.........................................................................
 public CLSTypeSymbol(Package p, string name, Type type, TypeResolver tr)
     : base(p, name)
 {
     //InnerGlobalValue = type;
     InnerGlobalValue = null;
     InnerTypeResolver = tr;
 }