From 10f46fd515025e59a7638ecbfee842f666869ded Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Wed, 9 Mar 2011 17:48:36 -0500 Subject: [PATCH] get-compiled-procedure-entry --- assemble.rkt | 2 +- test-assemble.rkt | 29 +++++++++++++++++++++++++---- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/assemble.rkt b/assemble.rkt index ecea354..7c3e7b4 100644 --- a/assemble.rkt +++ b/assemble.rkt @@ -308,7 +308,7 @@ EOF (define (assemble-op-expression op) (cond [(GetCompiledProcedureEntry? op) - "proc.label"] + "MACHINE.proc.label"] [(MakeCompiledProcedure? op) (format "new Closure(~a, ~a, [~a], ~s)" diff --git a/test-assemble.rkt b/test-assemble.rkt index 3e40261..d3b1910 100644 --- a/test-assemble.rkt +++ b/test-assemble.rkt @@ -160,9 +160,9 @@ 'closureStart (make-GotoStatement (make-Label 'afterLambda)) 'afterLambda - (make-AssignPrimOpStatement 'val (make-MakeCompiledProcedure 'afterLambda 0 '()))) + (make-AssignPrimOpStatement 'val (make-MakeCompiledProcedure 'closureStart 0 '()))) "MACHINE.val.displayName") - "afterLambda") + "closureStart") ;; A do-nothing closure with a few values @@ -175,7 +175,7 @@ (make-Const "hello")) (make-AssignImmediateStatement (make-EnvLexicalReference 1) (make-Const "world")) - (make-AssignPrimOpStatement 'val (make-MakeCompiledProcedure 'afterLambda 0 + (make-AssignPrimOpStatement 'val (make-MakeCompiledProcedure 'closureStart 0 (list (make-EnvLexicalReference 0) (make-EnvLexicalReference 1))))) "MACHINE.val.closedVals[1] + ',' + MACHINE.val.closedVals[0]") @@ -194,7 +194,7 @@ (make-Const "hello")) (make-AssignImmediateStatement (make-EnvLexicalReference 1) (make-Const "world")) - (make-AssignPrimOpStatement 'proc (make-MakeCompiledProcedure 'afterLambdaBody 0 + (make-AssignPrimOpStatement 'proc (make-MakeCompiledProcedure 'closureStart 0 (list (make-EnvLexicalReference 0) (make-EnvLexicalReference 1)))) (make-PopEnvironment 2 0) @@ -205,6 +205,27 @@ +;; get-compiled-procedure-entry +(test (E-many (list (make-GotoStatement (make-Label 'afterLambdaBody)) + + 'closureStart + (make-PerformStatement (make-InstallClosureValues!)) + (make-GotoStatement (make-Label 'theEnd)) + + 'afterLambdaBody + (make-PushEnvironment 2) + (make-AssignImmediateStatement (make-EnvLexicalReference 0) + (make-Const "hello")) + (make-AssignImmediateStatement (make-EnvLexicalReference 1) + (make-Const "world")) + (make-AssignPrimOpStatement 'proc (make-MakeCompiledProcedure 'closureStart 0 + (list (make-EnvLexicalReference 0) + (make-EnvLexicalReference 1)))) + (make-PopEnvironment 2 0) + (make-AssignPrimOpStatement 'val (make-GetCompiledProcedureEntry))) + "typeof(MACHINE.val) + ',' + (MACHINE.val === MACHINE.proc.label)") + "function,true") +