bootstrap

changeset 864:fd327d01458d

add app-rule optimization to ometa-parser
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)))