bootstrap
changeset 864:fd327d01458d
add app-rule optimization to ometa-parser
increase small heap size to 64M
increase small heap size to 64M
| author | John Leuner <jewel@subvert-the-dominant-paradigm.net> |
|---|---|
| date | Wed Jan 04 21:27:46 2012 +0200 (4 months ago) |
| parents | b937c15aa55d |
| children | 4c5dae3e446e |
| files | genesis/ometa/ometa-interpreter.church genesis/ometa/ometa-predictors.church state/runtime/state_runtime.state |
line diff
1.1 --- a/genesis/ometa/ometa-interpreter.church Wed Jan 04 21:02:15 2012 +0200 1.2 +++ b/genesis/ometa/ometa-interpreter.church Wed Jan 04 21:27:46 2012 +0200 1.3 @@ -191,9 +191,9 @@ 1.4 rule.reference-count = 0 1.5 rule.reference-count = + rule.reference-count 1 1.6 if rule.transient? 1.7 - `[app-no-memo ,rule-name] 1.8 + `[app-rule-no-memo ,rule] 1.9 else 1.10 - `[app ,rule-name] 1.11 + `[app-rule ,rule] 1.12 else 1.13 error "bad app form" form 1.14 act 1.15 @@ -274,6 +274,22 @@ 1.16 ; reset-to stream column[+ (* rule.rule-number 2) 1] 1.17 reset-to stream (unsafe-get-array-value column (+ (* rule.rule-number 2) 1)) 1.18 result 1.19 + parse-memo-rule rule stream frame-pointer stack-pointer 1.20 + memo = self.memo-table 1.21 + inputpos = stream.input-position 1.22 + column = unsafe-get-array-value memo inputpos 1.23 + if (null? column) 1.24 + column = make-array (* self.column-size 2) 4 1.25 + unsafe-set-array-value memo inputpos column 1.26 + result = unsafe-get-array-value column (* rule.rule-number 2) 1.27 + if (null? result) 1.28 + result = actual-parse-rule self rule stream frame-pointer stack-pointer 1.29 + unsafe-set-array-value column (* rule.rule-number 2) result 1.30 + unsafe-set-array-value column (+ (* rule.rule-number 2) 1) stream.input-position 1.31 + result 1.32 + else 1.33 + reset-to stream (unsafe-get-array-value column (+ (* rule.rule-number 2) 1)) 1.34 + result 1.35 actual-parse rule-name stream frame-pointer stack-pointer 1.36 ; curr-rule = (if (null? self.current-rule) nil (unsafe-car self.current-rule)) 1.37 ; self.current-rule = cons rule-name self.current-rule 1.38 @@ -310,6 +326,17 @@ 1.39 result = interpret self r.instructions stream frame-pointer stack-pointer 1.40 ; self.current-rule = unsafe-cdr self.current-rule 1.41 result 1.42 + actual-parse-rule rule stream frame-pointer stack-pointer 1.43 + r = rule 1.44 + frame-pointer = stack-pointer 1.45 + stack-pointer = + (+ stack-pointer r.variables-length) 1 1.46 + loop 1.47 + for i from frame-pointer to stack-pointer 1.48 + do 1.49 + self.data-stack[i] = nil 1.50 + 1.51 + result = interpret self r.instructions stream frame-pointer stack-pointer 1.52 + result 1.53 parse-with-arg rule-name stream frame-pointer stack-pointer arg 1.54 ; print "** parse with arg" 1.55 ; print rule-name 1.56 @@ -443,7 +470,7 @@ 1.57 else 1.58 error "bad type in interpret-action" form 1.59 interpret ins stream frame-pointer stack-pointer 1.60 - record-trace stream.input-position ins 1.61 +; record-trace stream.input-position ins 1.62 ; out "<-------- " 1.63 ; if (not (at-end? stream)) 1.64 ; print (remaining stream) 1.65 @@ -484,6 +511,8 @@ 1.66 o-fail 1.67 else 1.68 o-fail 1.69 + app-rule (parse-memo-rule self (unsafe-car (unsafe-cdr ins)) stream frame-pointer stack-pointer) 1.70 + app-rule-no-memo (actual-parse-rule self (unsafe-car (unsafe-cdr ins)) stream frame-pointer stack-pointer) 1.71 app (parse-memo self (unsafe-car (unsafe-cdr ins)) stream frame-pointer stack-pointer) 1.72 app-no-memo (actual-parse self (unsafe-car (unsafe-cdr ins)) stream frame-pointer stack-pointer) 1.73 and
2.1 --- a/genesis/ometa/ometa-predictors.church Wed Jan 04 21:02:15 2012 +0200 2.2 +++ b/genesis/ometa/ometa-predictors.church Wed Jan 04 21:27:46 2012 +0200 2.3 @@ -84,6 +84,12 @@ 2.4 app 2.5 rule = get parser.rules-map (second ins) nil 2.6 find-first rule.instructions parser first-sets 2.7 + app-rule 2.8 + rule = second ins 2.9 + find-first rule.instructions parser first-sets 2.10 + app-rule-no-memo 2.11 + rule = second ins 2.12 + find-first rule.instructions parser first-sets 2.13 match-char 2.14 list (second ins) 2.15 set (find-first (third ins) parser first-sets)
3.1 --- a/state/runtime/state_runtime.state Wed Jan 04 21:02:15 2012 +0200 3.2 +++ b/state/runtime/state_runtime.state Wed Jan 04 21:27:46 2012 +0200 3.3 @@ -92,7 +92,7 @@ 3.4 3.5 3.6 (define CHURCH_GC_init (lambda () 3.7 - (set! CHURCH_HEAP_SIZE (* 32 (* 1024 1024))) 3.8 + (set! CHURCH_HEAP_SIZE (* 64 (* 1024 1024))) 3.9 (set! CHURCH_LARGE_HEAP_SIZE (* 64 (* 1024 1024))) 3.10 ; check return code 3.11 (set! CHURCH_HEAP1 (CHURCH_gc_allocate_contiguous_pages (+ CHURCH_HEAP_SIZE CHURCH_LARGE_HEAP_SIZE)))
