2 changed files with 135 additions and 11 deletions
@ -0,0 +1,135 @@ |
|||
/* |
|||
* Defines the data structures associated with Continuation Expressions (cexps) |
|||
* The object here is to have an intermediate representation that allows a code generator backend |
|||
* to easily create sequential code. In other words we are taking an alegraic/applicative language |
|||
* and translating it to something more similar to the "one word at a time" architecture of the von-Neumann |
|||
* architecture |
|||
*/ |
|||
|
|||
var cexp = { |
|||
type : "cexp" |
|||
} |
|||
|
|||
function record(values_accesspaths, |
|||
w, |
|||
next_cexp) { |
|||
this.values_accesspaths = values_accesspaths; |
|||
this.w = w; |
|||
this.next_cexp = next_cexp; |
|||
return this; |
|||
} |
|||
|
|||
record.prototype = cexp; |
|||
|
|||
function select(i, v, w, next_cexp) { |
|||
this.i = i; |
|||
this.v = v; |
|||
this.w = w; |
|||
this.next_cexp = next_cexp; |
|||
return this; |
|||
} |
|||
select.prototype = cexp; |
|||
|
|||
function offset(i, v, w, next_cexp) { |
|||
this.i = i; |
|||
this.v = v; |
|||
this.w = w; |
|||
this.next_cexp = next_cexp; |
|||
return this; |
|||
} |
|||
offset.prototype = cexp; |
|||
|
|||
function app(k, vs) { |
|||
this.k =k; |
|||
this.vs = vs; |
|||
return this; |
|||
} |
|||
app.prototype = cexp; |
|||
|
|||
function fix(fs, next_cexp) { |
|||
this.fs = fs; |
|||
this.next_cexp = next_cexp; |
|||
return this; |
|||
} |
|||
fix.prototype = cexp; |
|||
|
|||
function switchl(v, cexps) { |
|||
this.v = v; |
|||
this.cexps = cexps; |
|||
return this; |
|||
} |
|||
switchl.prototype = cexp; |
|||
|
|||
function primop(op, vals, vars, next_cexp) { |
|||
this.op = op; |
|||
this.vals = vals; |
|||
this.vars = vars; |
|||
this.next_cexp = next_cexp; |
|||
return this; |
|||
} |
|||
primop.prototype = cexp; |
|||
|
|||
function accessPath(offp, selp) { |
|||
this.offp = offp; |
|||
this.selp = selp; |
|||
return this; |
|||
} |
|||
|
|||
var primoptype = { |
|||
type : "primop", |
|||
equal : function(pOp) { |
|||
return this.name === pOp.name |
|||
} |
|||
}; |
|||
|
|||
function Primop(name) { |
|||
function ptype() { |
|||
this.name = name; |
|||
return this; |
|||
}; |
|||
ptype.prototype = primoptype; |
|||
return new ptype(); |
|||
} |
|||
|
|||
var times = Primop("+"); |
|||
var plus = Primop("+"); |
|||
var div = Primop("div"); |
|||
var tilde = Primop("~"); |
|||
var ieql = Primop("ieql"); |
|||
var ineq = Primop("ineq"); |
|||
var lessthan = Primop("<"); |
|||
var lessoreq = Primop("<="); |
|||
var greatthan = Primop(">"); |
|||
var greatoreq = Primop(">="); |
|||
var bang = Primop("!"); |
|||
var subscript = Protoype("subscript"); |
|||
var ordof = Primop("ordof"); |
|||
var assign = Primop(":="); |
|||
var unboxedassign = Primop("unboxedassign"); |
|||
var update = Primop("update"); |
|||
var unboxedupdate = Primop("unboxedupdate"); |
|||
var store = Primop("store"); |
|||
var makeref = Primop("makeref"); |
|||
var makerefunboxed = Primop("makerefunboxed"); |
|||
var alength = Primop("alength"); |
|||
var slength = Primop("slength"); |
|||
var gethdlr = Primop("gethdlr") |
|||
var sethdlr = Primop("sethdlr"); |
|||
var boxed = Primop("boxed"); |
|||
var fadd = Primop("fadd"); |
|||
var fsub = Primop("fsub"); |
|||
var fdiv = Primop("fdiv"); |
|||
var fmul = Primop("fmul"); |
|||
var feql = Primop("feql"); |
|||
var fneq = Primop("fneq"); |
|||
var fge = Primop("fge"); |
|||
var fgt = Primop("fgt"); |
|||
var fle = Primop("fle"); |
|||
var flt = Primop("flt"); |
|||
var rshift = Primop("rshift"); |
|||
var lshift = Primop("lshift"); |
|||
var orb = Primop("orb"); |
|||
var andb = Primop("andb"); |
|||
var xorb = Primop("xorb"); |
|||
var notb = Primop("notb"); |
|||
|
@ -1,11 +0,0 @@ |
|||
var typ = require("./representation.js"); |
|||
|
|||
/*function simplify(stx) { |
|||
switch (stx.exprType) { |
|||
case "Application": |
|||
|
|||
} |
|||
}*/ |
|||
|
|||
//function simplifyUnary(stx) {
|
|||
|
Loading…
Reference in new issue