Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Misc top removal 2
  • Loading branch information
sorear committed Nov 13, 2012
1 parent 3db2fe1 commit a2d37f7
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 23 deletions.
5 changes: 2 additions & 3 deletions lib/CodeGen.cs
Expand Up @@ -3647,8 +3647,7 @@ public class DowncallReceiver : CallReceiver {
}
public static object push_compartment(object[] args) {
var old = Compartment.Top;
Compartment.Top = new Compartment();
Kernel.InitCompartment();
Kernel.InitCompartment( Compartment.Top = new Compartment() );
return Handle.Wrap(old);
}
public static object pop_compartment(object[] args) {
Expand All @@ -3663,7 +3662,7 @@ public class DowncallReceiver : CallReceiver {

if (ru.setting.containerRootUnit == null) {
// this is a module unit
Kernel.InitCompartment();
Kernel.InitCompartment(ru.setting);
ru.setting.containerRootUnit = ru;
ru.depended_units.Add(ru);
ru.owner = ru;
Expand Down
40 changes: 20 additions & 20 deletions lib/Kernel.cs
Expand Up @@ -490,6 +490,7 @@ sealed class EmitUnit {
public Type Finish(out Constants constTable) {
var type = type_builder.CreateType();
constTable = (Constants)Activator.CreateInstance(type);
constTable.setting = setting;

if (dll_name != null)
asm_builder.Save(dll_name);
Expand Down Expand Up @@ -687,7 +688,7 @@ class IdentityComparer : IEqualityComparer<object> {
}

public class Constants {
internal Compartment setting = Compartment.Top;
internal Compartment setting;
}

// There are two kinds of units. Primary units have their own hash of
Expand Down Expand Up @@ -1028,6 +1029,7 @@ public sealed class RuntimeUnit : IFreeze {
Assembly assembly = Assembly.Load(n.asm_name);
n.type = tb.type = assembly.GetType(n.asm_name, true);
n.constTable = (Constants)Activator.CreateInstance(n.type);
n.constTable.setting = tb.setting;
n.constants = new Dictionary<object,FieldInfo>();
var fields = new Dictionary<string,FieldInfo>();
foreach (FieldInfo fi in n.type.GetFields())
Expand Down Expand Up @@ -1193,21 +1195,21 @@ public class LICommon : LexInfo {
internal string VarName() { return hkey.Substring(1 + (int)hkey[0]); }

public override object Get(Frame f) {
return Kernel.GetGlobal(hkey);
return Kernel.GetGlobal(f, hkey);
}

public override void Set(Frame f, object to) {
Kernel.BindGlobal(hkey, (Variable)to);
Kernel.BindGlobal(f, hkey, (Variable)to);
}

internal override ClrOp GetCode(int up) {
return new ClrMethodCall(false, Tokens.Kernel_GetGlobal,
new ClrStringLiteral(hkey));
ClrCpsFrame.Instance, new ClrStringLiteral(hkey));
}

internal override ClrOp SetCode(int up, ClrOp to) {
return new ClrMethodCall(false, Tokens.Kernel_BindGlobal,
new ClrStringLiteral(hkey), to);
ClrCpsFrame.Instance, new ClrStringLiteral(hkey), to);
}

internal override void DoFreeze(FreezeBuffer fb) {
Expand Down Expand Up @@ -1528,7 +1530,7 @@ public class Parameter : P6any, IFixup {
}

// Value processing
public const int HASTYPE = 1; // else Compartment.Top.AnyMO
public const int HASTYPE = 1; // else AnyMO
public const int MULTI_IGNORED = 16384;
public const int ANY_DEF = 0x40000;
public const int UNDEF_ONLY = 0x80000;
Expand Down Expand Up @@ -4996,8 +4998,7 @@ public class Kernel {
SetTrace();
}

internal static void InitCompartment() {
var c = Compartment.Top;
internal static void InitCompartment(Compartment c) {
c.reg = new ObjectRegistry(c);

c.AutoThreadSubSI = new SubInfo(c, "KERNEL AutoThreadSub",
Expand Down Expand Up @@ -6155,9 +6156,6 @@ class LastFrameNode {
return lfn.next.cur = lfn.next.root = ((l == null ?
new Frame(null, null, s.ExitRunloopSI, s.AnyP) :
l.MakeChild(null, s.ExitRunloopSI, s.AnyP)));
//lfn.next.cur = lfn.next.root = ((l == null ?
// new Frame(null, null, ExitRunloopSI, Compartment.Top.AnyP) :
// l.MakeChild(null, ExitRunloopSI, Compartment.Top.AnyP)));
//Console.WriteLine("Created exit-runloop {0:X} caller={1:X}",
// lfn.next.cur.GetHashCode(), lfn.next.cur.caller == null ? 0 :
// lfn.next.cur.caller.GetHashCode());
Expand Down Expand Up @@ -6201,12 +6199,12 @@ class LastFrameNode {
}
}

public static Variable GetGlobal(string key) {
return Compartment.Top.currentGlobals[key].v;
[ImplicitFrame] public static Variable GetGlobal(Frame f, string key) {
return f.info.setting.currentGlobals[key].v;
}

public static void BindGlobal(string key, Variable to) {
Compartment.Top.currentGlobals[key].Bind(to);
[ImplicitFrame] public static void BindGlobal(Frame f, string key, Variable to) {
f.info.setting.currentGlobals[key].Bind(to);
}

internal static void CreateBasicTypes(Compartment s) {
Expand Down Expand Up @@ -6666,12 +6664,13 @@ class LastFrameNode {
}

public static void MainHandler(string uname, string[] args) {
InitCompartment();
var c = Compartment.Top;
InitCompartment(c);
InitGlobal();
commandArgs = args;

RuntimeUnit ru = (RuntimeUnit)
Compartment.Top.reg.LoadUnit(uname).root;
c.reg.LoadUnit(uname).root;

ru.setting.containerRootUnit = ru;
ru.setting.currentGlobals = ru.globals;
Expand Down Expand Up @@ -6702,8 +6701,9 @@ class LastFrameNode {

public static void Main(string[] args) {
string cmd = args.Length > 0 ? args[0] : "-help";
var comp = Compartment.Top;

InitCompartment();
InitCompartment(comp);
InitGlobal();

if (cmd == "-field-inventory") {
Expand Down Expand Up @@ -6765,7 +6765,7 @@ class LastFrameNode {
Backend.cross_level_load = true;

RuntimeUnit root = (RuntimeUnit)
Compartment.Top.reg.LoadUnit("MAIN").root;
comp.reg.LoadUnit("MAIN").root;

// reset for writing
Backend.obj_dir = AppDomain.CurrentDomain.BaseDirectory;
Expand All @@ -6774,7 +6774,7 @@ class LastFrameNode {
RewriteUnits(root, root, new HashSet<RuntimeUnit>());

// reset for writability
Compartment.Top.reg = new ObjectRegistry(Compartment.Top);
comp.reg = new ObjectRegistry(comp);

root.dll_name = exename + ".exe";
root.asm_name = exename;
Expand Down

0 comments on commit a2d37f7

Please sign in to comment.