public P5MainSymbolTable(Runtime runtime, string name) : base(runtime, name) { var stdout = GetStashGlob(runtime, "STDOUT", true); stdout.Handle = new P5Handle(runtime, null, System.Console.Out); var stdin = GetStashGlob(runtime, "STDIN", true); stdin.Handle = new P5Handle(runtime, System.Console.In, null); var stderr = GetStashGlob(runtime, "STDERR", true); stderr.Handle = new P5Handle(runtime, null, System.Console.Error); var dquote = GetStashGlob(runtime, "\"", true); dquote.Scalar = new P5Scalar(runtime, " "); var version = GetStashGlob(runtime, "]", true); version.Scalar = new P5Scalar(runtime, 5.008); // UNIVERSAL universal = GetPackage(runtime, "UNIVERSAL", true); var isa = universal.GetStashGlob(runtime, "isa", true); isa.Code = new P5NativeCode("UNIVERSAL::isa", new P5Code.Sub(WrapIsa)); // Internals var internals = GetPackage(runtime, "Internals", true); var add_overload = internals.GetStashGlob(runtime, "add_overload", true); add_overload.Code = new P5NativeCode("Internals::add_overload", new P5Code.Sub(WrapAddOverload)); // Internals::Net (TODO move to external assembly) var internals_net = GetPackage(runtime, "Internals::Net", true); var get_class = internals_net.GetStashGlob(runtime, "get_class", true); get_class.Code = new P5NativeCode("Internals::Net::get_class", new P5Code.Sub(WrapGetClass)); var specialize_type = internals_net.GetStashGlob(runtime, "specialize_type", true); specialize_type.Code = new P5NativeCode("Internals::Net::specialize_type", new P5Code.Sub(WrapSpecializeType)); var create = internals_net.GetStashGlob(runtime, "create", true); create.Code = new P5NativeCode("Internals::Net::create", new P5Code.Sub(WrapCreate)); var call_method = internals_net.GetStashGlob(runtime, "call_method", true); call_method.Code = new P5NativeCode("Internals::Net::call_mehtod", new P5Code.Sub(WrapCallMethod)); var call_static = internals_net.GetStashGlob(runtime, "call_static", true); call_static.Code = new P5NativeCode("Internals::Net::call_static", new P5Code.Sub(WrapCallStatic)); var get_property = internals_net.GetStashGlob(runtime, "get_property", true); get_property.Code = new P5NativeCode("Internals::Net::get_property", new P5Code.Sub(WrapGetProperty)); var set_property = internals_net.GetStashGlob(runtime, "set_property", true); set_property.Code = new P5NativeCode("Internals::Net::set_property", new P5Code.Sub(WrapSetProperty)); var extend = internals_net.GetStashGlob(runtime, "extend", true); extend.Code = new P5NativeCode("Internals::Net::extend", new P5Code.Sub(WrapExtend)); var compile = internals_net.GetStashGlob(runtime, "compile_assembly", true); compile.Code = new P5NativeCode("Internals::Net::compile_assembly", new P5Code.Sub(WrapCompileAssembly)); }
public virtual void Bless(Runtime runtime, P5SymbolTable stash) { throw new System.InvalidOperationException("Not a reference"); }
public virtual void Bless(Runtime runtime, P5SymbolTable stash) { // do nothing }
// IP5Referrable public override void Bless(Runtime runtime, P5SymbolTable stash) { throw new System.NotImplementedException(); }
internal void BlessReference(Runtime runtime, P5SymbolTable stash) { var refbody = body as P5Reference; if (refbody == null) throw new System.Exception("Not a reference"); refbody.Referred.Bless(runtime, stash); }
public virtual void Bless(Runtime runtime, P5SymbolTable stash) { blessed = stash; }
public bool IsDerivedFrom(Runtime runtime, P5SymbolTable parent) { if (this == parent) return true; IP5Any isa; P5Array isa_array = null; if (hash.TryGetValue("ISA", out isa)) isa_array = (isa as P5Typeglob).Array; if (isa_array == null || isa_array.GetCount(runtime) == 0) return parent == runtime.SymbolTable.Universal; foreach (var e in isa_array) { var base_name = e.AsString(runtime); var base_stash = runtime.SymbolTable.GetPackage(runtime, base_name); if (base_stash == null) continue; if (base_stash == parent || base_stash.IsDerivedFrom(runtime, parent)) return true; } return false; }
// IP5Referrable public abstract void Bless(Runtime runtime, P5SymbolTable stash);