fixing up application
This commit is contained in:
parent
7e3baee864
commit
ba2544653b
|
@ -67,26 +67,36 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(: assemble-target (Target -> String))
|
(: assemble-target (Target -> (String -> String)))
|
||||||
(define (assemble-target target)
|
(define (assemble-target target)
|
||||||
(cond
|
(cond
|
||||||
[(eq? target 'proc)
|
[(PrimitivesReference? target)
|
||||||
"MACHINE.proc"]
|
(lambda: ([rhs : String])
|
||||||
[(eq? target 'val)
|
(format "RUNTIME.Primitives[~s] = RUNTIME.Primitives[~s] || ~a;"
|
||||||
"MACHINE.val"]
|
(symbol->string (PrimitivesReference-name target))
|
||||||
[(eq? target 'argcount)
|
(symbol->string (PrimitivesReference-name target))
|
||||||
"MACHINE.argcount"]
|
rhs))]
|
||||||
[(EnvLexicalReference? target)
|
[else
|
||||||
(assemble-lexical-reference target)]
|
(lambda: ([rhs : String])
|
||||||
[(EnvPrefixReference? target)
|
(format "~a = ~a;"
|
||||||
(assemble-prefix-reference target)]
|
(cond
|
||||||
[(PrimitivesReference? target)
|
[(eq? target 'proc)
|
||||||
(format "RUNTIME.Primitives[~s]" (symbol->string (PrimitivesReference-name target)))]
|
"MACHINE.proc"]
|
||||||
[(ControlFrameTemporary? target)
|
[(eq? target 'val)
|
||||||
(assemble-control-frame-temporary target)]
|
"MACHINE.val"]
|
||||||
[(ModulePrefixTarget? target)
|
[(eq? target 'argcount)
|
||||||
(format "MACHINE.modules[~s].prefix"
|
"MACHINE.argcount"]
|
||||||
(symbol->string (ModuleLocator-name (ModulePrefixTarget-path target))))]))
|
[(EnvLexicalReference? target)
|
||||||
|
(assemble-lexical-reference target)]
|
||||||
|
[(EnvPrefixReference? target)
|
||||||
|
(assemble-prefix-reference target)]
|
||||||
|
[(ControlFrameTemporary? target)
|
||||||
|
(assemble-control-frame-temporary target)]
|
||||||
|
[(ModulePrefixTarget? target)
|
||||||
|
(format "MACHINE.modules[~s].prefix"
|
||||||
|
(symbol->string (ModuleLocator-name (ModulePrefixTarget-path target))))])
|
||||||
|
rhs))]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(: assemble-control-frame-temporary (ControlFrameTemporary -> String))
|
(: assemble-control-frame-temporary (ControlFrameTemporary -> String))
|
||||||
|
|
|
@ -138,14 +138,13 @@ EOF
|
||||||
[(DebugPrint? stmt)
|
[(DebugPrint? stmt)
|
||||||
(format "MACHINE.params.currentOutputPort.writeDomNode(MACHINE, $('<span/>').text(~a));" (assemble-oparg (DebugPrint-value stmt)))]
|
(format "MACHINE.params.currentOutputPort.writeDomNode(MACHINE, $('<span/>').text(~a));" (assemble-oparg (DebugPrint-value stmt)))]
|
||||||
[(AssignImmediateStatement? stmt)
|
[(AssignImmediateStatement? stmt)
|
||||||
(let: ([t : String (assemble-target (AssignImmediateStatement-target stmt))]
|
(let: ([t : (String -> String) (assemble-target (AssignImmediateStatement-target stmt))]
|
||||||
[v : OpArg (AssignImmediateStatement-value stmt)])
|
[v : OpArg (AssignImmediateStatement-value stmt)])
|
||||||
(format "~a = ~a;" t (assemble-oparg v)))]
|
(t (assemble-oparg v)))]
|
||||||
|
|
||||||
[(AssignPrimOpStatement? stmt)
|
[(AssignPrimOpStatement? stmt)
|
||||||
(format "~a=~a;"
|
((assemble-target (AssignPrimOpStatement-target stmt))
|
||||||
(assemble-target (AssignPrimOpStatement-target stmt))
|
(assemble-op-expression (AssignPrimOpStatement-op stmt)))]
|
||||||
(assemble-op-expression (AssignPrimOpStatement-op stmt)))]
|
|
||||||
|
|
||||||
[(PerformStatement? stmt)
|
[(PerformStatement? stmt)
|
||||||
(assemble-op-statement (PerformStatement-op stmt))]
|
(assemble-op-statement (PerformStatement-op stmt))]
|
||||||
|
|
|
@ -1,5 +1,31 @@
|
||||||
14
|
14
|
||||||
'(2 3 4 5)
|
14
|
||||||
|
14
|
||||||
|
14
|
||||||
|
14
|
||||||
|
120
|
||||||
|
120
|
||||||
|
120
|
||||||
|
120
|
||||||
|
120
|
||||||
|
(2 3 4 5)
|
||||||
|
(2 3 4 5)
|
||||||
|
(2 3 4 5)
|
||||||
|
(2 3 4 5)
|
||||||
|
(2 3 4 5)
|
||||||
|
14
|
||||||
|
15
|
||||||
|
#f
|
||||||
|
(3 4 5)
|
||||||
|
49
|
||||||
|
"squaring"
|
||||||
|
49
|
||||||
|
64
|
||||||
"now factorial"
|
"now factorial"
|
||||||
|
1
|
||||||
|
1
|
||||||
|
2
|
||||||
6
|
6
|
||||||
|
24
|
||||||
|
120
|
||||||
144
|
144
|
||||||
|
|
|
@ -52,9 +52,9 @@
|
||||||
(apply * `(,x ,(apply f (apply sub1 (apply list x '())) '())))]))
|
(apply * `(,x ,(apply f (apply sub1 (apply list x '())) '())))]))
|
||||||
|
|
||||||
(f 0)
|
(f 0)
|
||||||
(f 1)
|
(apply f 1 '())
|
||||||
(f 2)
|
(f 2)
|
||||||
(f 3)
|
(apply f '(3))
|
||||||
(f 4)
|
(f 4)
|
||||||
(f 5)
|
(f 5)
|
||||||
(+ (f 4) (f 5))
|
(+ (apply f 4 '()) (f 5))
|
||||||
|
|
|
@ -17,4 +17,4 @@
|
||||||
(test "more-tests/lists.rkt")
|
(test "more-tests/lists.rkt")
|
||||||
(test "more-tests/earley.rkt")
|
(test "more-tests/earley.rkt")
|
||||||
(test "more-tests/hello-bf.rkt")
|
(test "more-tests/hello-bf.rkt")
|
||||||
#;(test "more-tests/simple-apply.rkt")
|
(test "more-tests/simple-apply.rkt")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user