From ed7794f14a1f3201862ce7b9595b9b453049a708 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Sat, 26 Mar 2011 19:00:38 -0400 Subject: [PATCH] rearranging --- compile.rkt | 18 ++++++++++++------ il-structs.rkt | 2 ++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/compile.rkt b/compile.rkt index 95dbcc4..73f4d06 100644 --- a/compile.rkt +++ b/compile.rkt @@ -18,7 +18,8 @@ [entry-point : Symbol] [arity : Natural]) #:transparent) -(define-type CompileTimeEnvironmentEntry (U '? Prefix StaticallyKnownLam)) +(define-type CompileTimeEnvironmentEntry + (U '? Prefix StaticallyKnownLam ModuleVariable)) (define-type CompileTimeEnvironment (Listof CompileTimeEnvironmentEntry)) @@ -361,14 +362,18 @@ '?) (App-operands exp)) cenv)]) - (let: ([op-knowledge : (U '? StaticallyKnownLam) + (let: ([op-knowledge : CompileTimeEnvironmentEntry (extract-static-knowledge (App-operator exp) extended-cenv)]) (cond [(eq? op-knowledge '?) (compile-general-application exp cenv extended-cenv target linkage)] + [(ModuleVariable? op-knowledge) + (compile-general-application exp cenv extended-cenv target linkage)] [(StaticallyKnownLam? op-knowledge) - (compile-statically-known-lam-application op-knowledge exp cenv extended-cenv target linkage)])))) + (compile-statically-known-lam-application op-knowledge exp cenv extended-cenv target linkage)] + [(Prefix? op-knowledge) + (error 'impossible)])))) (: compile-general-application (App CompileTimeEnvironment CompileTimeEnvironment Target Linkage -> InstructionSequence)) @@ -577,8 +582,10 @@ (error 'compile "return linkage, target not val: ~s" target)])) + (: extract-static-knowledge (ExpressionCore CompileTimeEnvironment -> - (U StaticallyKnownLam '?))) + CompileTimeEnvironmentEntry)) +;; Statically determines what we know about exp, given the compile time environment. (define (extract-static-knowledge exp cenv) (cond [(Lam? exp) @@ -599,8 +606,7 @@ (ToplevelRef-pos exp))]) (cond [(ModuleVariable? name) - ;; fixme - '?] + name] [else '?]))] [else diff --git a/il-structs.rkt b/il-structs.rkt index d316345..10bac2a 100644 --- a/il-structs.rkt +++ b/il-structs.rkt @@ -148,6 +148,8 @@ (define-type KernelPrimitiveName (U '+)) +(define-predicate KernelPrimitiveName? KernelPrimitiveName) + (define-struct: CallKernelPrimitiveProcedure ([operator : KernelPrimitiveName] [operands : (Listof OpArg)])