47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
 | |
| Need to check for multiple (effectively) identical closures.
 | |
| node-equal?
 | |
| 
 | |
| Flatten needs to do something about shared strings and byte-vectors.
 | |
| 
 | |
| Do SET! globals need to be treated differently?  Will C allow the following?
 | |
|  int f( int x ) { ... }
 | |
|  main() { f = ... }
 | |
| 
 | |
| Check what happens if a name->enumerand or enumerand->name survives loading.
 | |
| 
 | |
| CALL-WITH-VALUES needs to simplify to two calls (so that the known-call
 | |
| stuff works) even when it doesn't know what the type is (because of
 | |
| polymorphism; we don't resimplify when types change).
 | |
|  (call-with-values cont a b)
 | |
|    =>
 | |
|  (unknown-call (lambda (res:tuple)
 | |
|                  (unknown-call cont 'tuple-args  b res))
 | |
| 	       'tuple-result
 | |
|                a)
 | |
| Need tuple-args-goto as well.  The protocol stuff has to do the right thing.
 | |
| When the tuple type is determined RES has to change in both places.
 | |
| Actually, it can just expand into this.  The type stuff will work out.
 | |
| For now I am not going to allow polymorphic use of call-with-values.
 | |
| All of this is much like Scheme.
 | |
| 
 | |
| Non-tail-recursive named-LETS appear to break things.
 | |
| 
 | |
| CALL-WITH-VALUES and VALUES are only allowed in call position, and the
 | |
| second argument to CALL-WITH-VALUES must be a lambda form.
 | |
| 
 | |
| STOB->NODE in form.scm needs to look for substobs.
 | |
| Or does flatten flatten non-shared structures?
 | |
| 
 | |
| Pointer comparisons need to be done using unsigned longs.
 | |
| => Pre-Scheme needs unsigned comparisons u=, u<, etc.
 | |
| 
 | |
| Primitives do not appear to check the argument count!
 | |
| 
 | |
| Channel library may be doable as externals, including decoding
 | |
| the events.
 | |
| 
 | |
| Tail-called forms that return multiple values?
 | |
| 
 | |
| MAX and other primitives need to check number-of-args when type checking.
 |