diff options
| author | Camil Staps | 2017-07-30 09:17:44 +0200 | 
|---|---|---|
| committer | Camil Staps | 2017-07-30 09:17:44 +0200 | 
| commit | ebde44b28b551f670c9e5c4c038d03e94bfbb1d2 (patch) | |
| tree | 7d021edb338a4fc6210a38fb2d3f0dafdda85ec2 /Sil/Compile.icl | |
| parent | Force logical order of output in cli (diff) | |
Reorganise: make Position a field in Syntax types
Diffstat (limited to 'Sil/Compile.icl')
| -rw-r--r-- | Sil/Compile.icl | 24 | 
1 files changed, 8 insertions, 16 deletions
| diff --git a/Sil/Compile.icl b/Sil/Compile.icl index ced497e..6569dd1 100644 --- a/Sil/Compile.icl +++ b/Sil/Compile.icl @@ -264,9 +264,6 @@ where  class gen a :: a -> Gen () -instance gen (Positioned a) | gen a -where gen p = gen $ fromPositioned p -  instance gen Program  where  	gen p = @@ -280,27 +277,24 @@ where  		     , 'ABC'.Jmp "_driver"  		     , 'ABC'.Annotation $ 'ABC'.OAnnot 0 []  		     , 'ABC'.Label "_sil_boot2" ] *> -		let gsize = foldr (+~) zero [typeSize i.init_type \\ i <- globs] in +		let gsize = foldr (+~) zero [typeSize i.init_type \\ i <- p.p_globals] in  		modify (\cs -> {cs & globalsize=(gsize.asize, gsize.bsize)}) *>  		shrinkStack gsize *> -		mapM_ reserveVar [(i.init_name, i.init_type) \\ i <- globs] *> +		mapM_ reserveVar [(i.init_name, i.init_type) \\ i <- p.p_globals] *>  		mapM_ gen p.p_globals *>  		tell [ 'ABC'.Jmp (toLabel "main") ] *>  		pushTypeResolver typeresolver *> -		mapM_ (addFunction o fromPositioned) p.p_funs *> +		mapM_ addFunction p.p_funs *>  		mapM_ gen p.p_funs *>  		popTypeResolver  	where  		typeresolver :: Name -> Maybe (MaybeError Error Type) -		typeresolver n = case [f \\ f <- funs | f.f_name == n] of +		typeresolver n = case [f \\ f <- p.p_funs | f.f_name == n] of  			[f:_] -> type typeresolver f -			[]    -> case [g.init_type \\ g <- globs | g.init_name == n] of +			[]    -> case [g.init_type \\ g <- p.p_globals | g.init_name == n] of  				[t:_] -> Just $ Ok t  				[]    -> Nothing -		globs = map fromPositioned p.p_globals -		funs = map fromPositioned p.p_funs -  instance gen Function  where  	gen f = @@ -375,7 +369,7 @@ where  	gen cb =  		storeStackOffsets *>  		gets stackoffsets >>= \so -> -		mapM_ reserveVar [(i.init_name, i.init_type) \\ i <- init] *> +		mapM_ reserveVar [(i.init_name, i.init_type) \\ i <- cb.cb_init] *>  		mapM_ gen cb.cb_init *>  		addToReturn cleanup` *>  		pushTypeResolver typeresolver *> @@ -390,12 +384,10 @@ where  			_  -> [ 'ABC'.Pop_a locals.asize  			      , 'ABC'.Pop_b locals.bsize  			      ] -		locals = foldr (+~) zero [typeSize i.init_type \\ i <- init] +		locals = foldr (+~) zero [typeSize i.init_type \\ i <- cb.cb_init]  		typeresolver :: Name -> Maybe (MaybeError Error Type) -		typeresolver n = listToMaybe [Ok i.init_type \\ i <- init | i.init_name == n] - -		init = map fromPositioned cb.cb_init +		typeresolver n = listToMaybe [Ok i.init_type \\ i <- cb.cb_init | i.init_name == n]  instance gen Initialisation  where | 
