removing unnecessary label

This commit is contained in:
Danny Yoo 2011-03-25 23:05:50 -04:00
parent fab12bcc83
commit d758585c85
4 changed files with 44 additions and 49 deletions

View File

@ -132,7 +132,7 @@ EOF
[(MakeCompiledProcedure? op) [(MakeCompiledProcedure? op)
(list (MakeCompiledProcedure-label op))] (list (MakeCompiledProcedure-label op))]
[(ApplyPrimitiveProcedure? op) [(ApplyPrimitiveProcedure? op)
(list (ApplyPrimitiveProcedure-label op))] empty]
[(GetControlStackLabel? op) [(GetControlStackLabel? op)
empty] empty]
[(CaptureEnvironment? op) [(CaptureEnvironment? op)
@ -386,9 +386,8 @@ EOF
(assemble-display-name (MakeCompiledProcedure-display-name op)))] (assemble-display-name (MakeCompiledProcedure-display-name op)))]
[(ApplyPrimitiveProcedure? op) [(ApplyPrimitiveProcedure? op)
(format "MACHINE.proc(~a, ~a)" (format "MACHINE.proc(MACHINE, ~a)"
(ApplyPrimitiveProcedure-arity op) (ApplyPrimitiveProcedure-arity op))]
(ApplyPrimitiveProcedure-label op))]
[(GetControlStackLabel? op) [(GetControlStackLabel? op)
(format "MACHINE.control[MACHINE.control.length-1].label")] (format "MACHINE.control[MACHINE.control.length-1].label")]

View File

@ -482,7 +482,7 @@
;; the appropriate spot on the stack. This takes into account the popenviroment ;; the appropriate spot on the stack. This takes into account the popenviroment
;; that happens right afterwards. ;; that happens right afterwards.
(adjust-target-depth target n) (adjust-target-depth target n)
(make-ApplyPrimitiveProcedure n after-call)) (make-ApplyPrimitiveProcedure n))
,(make-PopEnvironment n 0)))) ,(make-PopEnvironment n 0))))
after-call)))) after-call))))

View File

@ -139,11 +139,7 @@
;; Applies the primitive procedure that's stored in the proc register, using ;; Applies the primitive procedure that's stored in the proc register, using
;; the arity number of values that are bound in the environment as arguments ;; the arity number of values that are bound in the environment as arguments
;; to that primitive. ;; to that primitive.
;; (define-struct: ApplyPrimitiveProcedure ([arity : Natural])
;; If the primitive needs to capture the current continuation, it can get the
;; immediate address at label.
(define-struct: ApplyPrimitiveProcedure ([arity : Natural]
[label : Symbol])
#:transparent) #:transparent)

View File

@ -34,16 +34,16 @@ var Closure = function(label, arity, closedVals, displayName) {
var Primitives = (function() { var Primitives = (function() {
var NULL = []; var NULL = [];
return { return {
'display': function(arity, returnLabel) { 'display': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
MACHINE.params.currentDisplayer(firstArg); MACHINE.params.currentDisplayer(firstArg);
}, },
'newline': function(arity, returnLabel) { 'newline': function(MACHINE, arity) {
MACHINE.params.currentDisplayer("\n"); MACHINE.params.currentDisplayer("\n");
}, },
'displayln': function(arity, returnLabel){ 'displayln': function(MACHINE, arity){
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
MACHINE.params.currentDisplayer(firstArg); MACHINE.params.currentDisplayer(firstArg);
MACHINE.params.currentDisplayer("\n"); MACHINE.params.currentDisplayer("\n");
@ -53,68 +53,68 @@ var Primitives = (function() {
'e' : Math.E, 'e' : Math.E,
'=': function(arity, returnLabel) { '=': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg === secondArg; return firstArg === secondArg;
}, },
'<': function(arity, returnLabel) { '<': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg < secondArg; return firstArg < secondArg;
}, },
'>': function(arity, returnLabel) { '>': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg > secondArg; return firstArg > secondArg;
}, },
'<=': function(arity, returnLabel) { '<=': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg <= secondArg; return firstArg <= secondArg;
}, },
'>=': function(arity, returnLabel) { '>=': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg >= secondArg; return firstArg >= secondArg;
}, },
'+': function(arity, returnLabel) { '+': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg + secondArg; return firstArg + secondArg;
}, },
'*': function(arity, returnLabel) { '*': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg * secondArg; return firstArg * secondArg;
}, },
'-': function(arity, returnLabel) { '-': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg - secondArg; return firstArg - secondArg;
}, },
'/': function(arity, returnLabel) { '/': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg / secondArg; return firstArg / secondArg;
}, },
'cons': function(arity, returnLabel) { 'cons': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return [firstArg, secondArg]; return [firstArg, secondArg];
}, },
'list': function(arity, returnLabel) { 'list': function(MACHINE, arity) {
var result = NULL; var result = NULL;
for (var i = 0; i < arity; i++) { for (var i = 0; i < arity; i++) {
result = [MACHINE.env[MACHINE.env.length - (arity - i)], result = [MACHINE.env[MACHINE.env.length - (arity - i)],
@ -123,62 +123,62 @@ var Primitives = (function() {
return result; return result;
}, },
'car': function(arity, returnLabel) { 'car': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg[0]; return firstArg[0];
}, },
'cdr': function(arity, returnLabel) { 'cdr': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg[1]; return firstArg[1];
}, },
'pair?': function(arity, returnLabel) { 'pair?': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return (typeof(firstArg) == 'object' && return (typeof(firstArg) == 'object' &&
firstArg.length === 2); firstArg.length === 2);
}, },
'set-car!': function(arity, returnLabel) { 'set-car!': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
firstArg[0] = secondArg; firstArg[0] = secondArg;
}, },
'set-cdr!': function(arity, returnLabel) { 'set-cdr!': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
firstArg[1] = secondArg; firstArg[1] = secondArg;
}, },
'not': function(arity, returnLabel) { 'not': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return (!firstArg); return (!firstArg);
}, },
'null' : NULL, 'null' : NULL,
'null?': function(arity, returnLabel) { 'null?': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg === NULL; return firstArg === NULL;
}, },
'add1': function(arity, returnLabel) { 'add1': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg + 1; return firstArg + 1;
}, },
'sub1': function(arity, returnLabel) { 'sub1': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg - 1; return firstArg - 1;
}, },
'zero?': function(arity, returnLabel) { 'zero?': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg === 0; return firstArg === 0;
}, },
'vector': function(arity, returnLabel) { 'vector': function(MACHINE, arity) {
var i; var i;
var result = []; var result = [];
for (i = 0; i < arity; i++) { for (i = 0; i < arity; i++) {
@ -187,7 +187,7 @@ var Primitives = (function() {
return result; return result;
}, },
'vector->list': function(arity, returnLabel) { 'vector->list': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var i; var i;
var result = NULL; var result = NULL;
@ -197,7 +197,7 @@ var Primitives = (function() {
return result; return result;
}, },
'list->vector': function(arity, returnLabel) { 'list->vector': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var result = []; var result = [];
while (firstArg !== NULL) { while (firstArg !== NULL) {
@ -207,13 +207,13 @@ var Primitives = (function() {
return result; return result;
}, },
'vector-ref': function(arity, returnLabel) { 'vector-ref': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg[secondArg]; return firstArg[secondArg];
}, },
'vector-set!': function(arity, returnLabel) { 'vector-set!': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
var thirdArg = MACHINE.env[MACHINE.env.length-3]; var thirdArg = MACHINE.env[MACHINE.env.length-3];
@ -221,17 +221,17 @@ var Primitives = (function() {
return null; return null;
}, },
'symbol?': function(arity, returnLabel) { 'symbol?': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return typeof(firstArg) === 'string'; return typeof(firstArg) === 'string';
}, },
'symbol->string': function(arity, returnLabel) { 'symbol->string': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg; return firstArg;
}, },
'string-append': function(arity, returnLabel) { 'string-append': function(MACHINE, arity) {
var buffer = []; var buffer = [];
var i; var i;
for (i = 0; i < arity; i++) { for (i = 0; i < arity; i++) {
@ -240,41 +240,41 @@ var Primitives = (function() {
return buffer.join(''); return buffer.join('');
}, },
'string-length': function(arity, returnLabel) { 'string-length': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg.length; return firstArg.length;
}, },
'box': function(arity, returnLabel) { 'box': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var result = [firstArg]; var result = [firstArg];
return result; return result;
}, },
'unbox': function(arity, returnLabel) { 'unbox': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
return firstArg[0]; return firstArg[0];
}, },
'set-box!': function(arity, returnLabel) { 'set-box!': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
firstArg[0] = secondArg; firstArg[0] = secondArg;
return; return;
}, },
'void': function(arity, returnLabel) { 'void': function(MACHINE, arity) {
return; return;
}, },
'eq?': function(arity, returnLabel) { 'eq?': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
return firstArg === secondArg; return firstArg === secondArg;
}, },
'equal?': function(arity, returnLabel) { 'equal?': function(MACHINE, arity) {
var firstArg = MACHINE.env[MACHINE.env.length-1]; var firstArg = MACHINE.env[MACHINE.env.length-1];
var secondArg = MACHINE.env[MACHINE.env.length-2]; var secondArg = MACHINE.env[MACHINE.env.length-2];
var lset = [firstArg], rset = [secondArg]; var lset = [firstArg], rset = [secondArg];