Skip to content

Commit

Permalink
Reimplement generation of goto target handlers
Browse files Browse the repository at this point in the history
  • Loading branch information
sorear committed Oct 29, 2011
1 parent ea5d9a0 commit 3909462
Showing 1 changed file with 22 additions and 8 deletions.
30 changes: 22 additions & 8 deletions lib/CodeGen.cs
Expand Up @@ -3385,20 +3385,34 @@ class NamProcessor {
List<object> enter = new List<object>();
EnterCode(enter);

List<object> handlers = new List<object>();
handlers.Add(new JScalar("xspan"));
handlers.Add(new JScalar("tstart"));
handlers.Add(new JScalar("tend"));
handlers.Add(new JScalar("0"));
handlers.Add(b);

// TODO: bind a ro container around return values
if (sub.IsTopicalizer()) {
b = new object[] { new JScalar("xspan"),
new JScalar("tstart"), new JScalar("tend"),
new JScalar("0"), b,
new JScalar("6"), new JScalar(""), new JScalar("tend")};
handlers.Add(new JScalar("6"));
handlers.Add(new JScalar(""));
handlers.Add(new JScalar("tend"));
}
foreach (KeyValuePair<string,LexInfo> kv in sub.dylex) {
if (!(kv.Value is LILabel))
continue;
handlers.Add(new JScalar("8"));
handlers.Add(new JScalar(kv.Key));
handlers.Add(new JScalar("goto_" + kv.Key));
}
if (sub.mo.HasMRO(Kernel.RoutineMO) &&
(sub.special & SubInfo.RETURN_PASS) == 0) {
b = new object[] { new JScalar("xspan"),
new JScalar("rstart"), new JScalar("rend"),
new JScalar("0"), b,
new JScalar("4"), new JScalar(""), new JScalar("rend")};
handlers.Add(new JScalar("4"));
handlers.Add(new JScalar(""));
handlers.Add(new JScalar("tend"));
}
if (handlers.Count != 5)
b = handlers.ToArray();
enter.Insert(0, new JScalar("prog"));
enter.Add(new object[] { new JScalar("return"), b });
b = enter.ToArray();
Expand Down

0 comments on commit 3909462

Please sign in to comment.