diff --git a/assemble.rkt b/assemble.rkt index e5a7b72..11e37e7 100644 --- a/assemble.rkt +++ b/assemble.rkt @@ -132,7 +132,7 @@ EOF [(MakeCompiledProcedure? op) (list (MakeCompiledProcedure-label op))] [(ApplyPrimitiveProcedure? op) - (list (ApplyPrimitiveProcedure-label op))] + empty] [(GetControlStackLabel? op) empty] [(CaptureEnvironment? op) @@ -386,9 +386,8 @@ EOF (assemble-display-name (MakeCompiledProcedure-display-name op)))] [(ApplyPrimitiveProcedure? op) - (format "MACHINE.proc(~a, ~a)" - (ApplyPrimitiveProcedure-arity op) - (ApplyPrimitiveProcedure-label op))] + (format "MACHINE.proc(MACHINE, ~a)" + (ApplyPrimitiveProcedure-arity op))] [(GetControlStackLabel? op) (format "MACHINE.control[MACHINE.control.length-1].label")] diff --git a/compile.rkt b/compile.rkt index d5d70db..f6b8d30 100644 --- a/compile.rkt +++ b/compile.rkt @@ -482,7 +482,7 @@ ;; the appropriate spot on the stack. This takes into account the popenviroment ;; that happens right afterwards. (adjust-target-depth target n) - (make-ApplyPrimitiveProcedure n after-call)) + (make-ApplyPrimitiveProcedure n)) ,(make-PopEnvironment n 0)))) after-call)))) diff --git a/il-structs.rkt b/il-structs.rkt index 53526ab..857e03f 100644 --- a/il-structs.rkt +++ b/il-structs.rkt @@ -139,11 +139,7 @@ ;; 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 ;; to that primitive. -;; -;; If the primitive needs to capture the current continuation, it can get the -;; immediate address at label. -(define-struct: ApplyPrimitiveProcedure ([arity : Natural] - [label : Symbol]) +(define-struct: ApplyPrimitiveProcedure ([arity : Natural]) #:transparent) diff --git a/runtime.js b/runtime.js index 8a9aa5d..f6fd477 100644 --- a/runtime.js +++ b/runtime.js @@ -34,16 +34,16 @@ var Closure = function(label, arity, closedVals, displayName) { var Primitives = (function() { var NULL = []; return { - 'display': function(arity, returnLabel) { + 'display': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; MACHINE.params.currentDisplayer(firstArg); }, - 'newline': function(arity, returnLabel) { + 'newline': function(MACHINE, arity) { MACHINE.params.currentDisplayer("\n"); }, - 'displayln': function(arity, returnLabel){ + 'displayln': function(MACHINE, arity){ var firstArg = MACHINE.env[MACHINE.env.length-1]; MACHINE.params.currentDisplayer(firstArg); MACHINE.params.currentDisplayer("\n"); @@ -53,68 +53,68 @@ var Primitives = (function() { 'e' : Math.E, - '=': function(arity, returnLabel) { + '=': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg === secondArg; }, - '<': function(arity, returnLabel) { + '<': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg < secondArg; }, - '>': function(arity, returnLabel) { + '>': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg > secondArg; }, - '<=': function(arity, returnLabel) { + '<=': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg <= secondArg; }, - '>=': function(arity, returnLabel) { + '>=': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg >= secondArg; }, - '+': function(arity, returnLabel) { + '+': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg + secondArg; }, - '*': function(arity, returnLabel) { + '*': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg * secondArg; }, - '-': function(arity, returnLabel) { + '-': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg - secondArg; }, - '/': function(arity, returnLabel) { + '/': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg / secondArg; }, - 'cons': function(arity, returnLabel) { + 'cons': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return [firstArg, secondArg]; }, - 'list': function(arity, returnLabel) { + 'list': function(MACHINE, arity) { var result = NULL; for (var i = 0; i < arity; i++) { result = [MACHINE.env[MACHINE.env.length - (arity - i)], @@ -123,62 +123,62 @@ var Primitives = (function() { return result; }, - 'car': function(arity, returnLabel) { + 'car': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg[0]; }, - 'cdr': function(arity, returnLabel) { + 'cdr': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg[1]; }, - 'pair?': function(arity, returnLabel) { + 'pair?': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return (typeof(firstArg) == 'object' && firstArg.length === 2); }, - 'set-car!': function(arity, returnLabel) { + 'set-car!': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; firstArg[0] = secondArg; }, - 'set-cdr!': function(arity, returnLabel) { + 'set-cdr!': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; firstArg[1] = secondArg; }, - 'not': function(arity, returnLabel) { + 'not': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return (!firstArg); }, 'null' : NULL, - 'null?': function(arity, returnLabel) { + 'null?': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg === NULL; }, - 'add1': function(arity, returnLabel) { + 'add1': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg + 1; }, - 'sub1': function(arity, returnLabel) { + 'sub1': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg - 1; }, - 'zero?': function(arity, returnLabel) { + 'zero?': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg === 0; }, - 'vector': function(arity, returnLabel) { + 'vector': function(MACHINE, arity) { var i; var result = []; for (i = 0; i < arity; i++) { @@ -187,7 +187,7 @@ var Primitives = (function() { return result; }, - 'vector->list': function(arity, returnLabel) { + 'vector->list': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var i; var result = NULL; @@ -197,7 +197,7 @@ var Primitives = (function() { return result; }, - 'list->vector': function(arity, returnLabel) { + 'list->vector': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var result = []; while (firstArg !== NULL) { @@ -207,13 +207,13 @@ var Primitives = (function() { return result; }, - 'vector-ref': function(arity, returnLabel) { + 'vector-ref': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg[secondArg]; }, - 'vector-set!': function(arity, returnLabel) { + 'vector-set!': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; var thirdArg = MACHINE.env[MACHINE.env.length-3]; @@ -221,17 +221,17 @@ var Primitives = (function() { return null; }, - 'symbol?': function(arity, returnLabel) { + 'symbol?': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return typeof(firstArg) === 'string'; }, - 'symbol->string': function(arity, returnLabel) { + 'symbol->string': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg; }, - 'string-append': function(arity, returnLabel) { + 'string-append': function(MACHINE, arity) { var buffer = []; var i; for (i = 0; i < arity; i++) { @@ -240,41 +240,41 @@ var Primitives = (function() { return buffer.join(''); }, - 'string-length': function(arity, returnLabel) { + 'string-length': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg.length; }, - 'box': function(arity, returnLabel) { + 'box': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var result = [firstArg]; return result; }, - 'unbox': function(arity, returnLabel) { + 'unbox': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; return firstArg[0]; }, - 'set-box!': function(arity, returnLabel) { + 'set-box!': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; firstArg[0] = secondArg; return; }, - 'void': function(arity, returnLabel) { + 'void': function(MACHINE, arity) { return; }, - 'eq?': function(arity, returnLabel) { + 'eq?': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; return firstArg === secondArg; }, - 'equal?': function(arity, returnLabel) { + 'equal?': function(MACHINE, arity) { var firstArg = MACHINE.env[MACHINE.env.length-1]; var secondArg = MACHINE.env[MACHINE.env.length-2]; var lset = [firstArg], rset = [secondArg];