classes.tuple: adding ?offset-of-slot that returns n/f.
							parent
							
								
									0f0ca3ecf7
								
							
						
					
					
						commit
						edc1b3f65d
					
				| 
						 | 
				
			
			@ -454,17 +454,24 @@ HELP: boa
 | 
			
		|||
HELP: bad-superclass
 | 
			
		||||
{ $error-description "Thrown if an attempt is made to subclass a class that is not a tuple class, or a tuple class declared " { $link POSTPONE: final } "." } ;
 | 
			
		||||
 | 
			
		||||
HELP: ?offset-of-slot
 | 
			
		||||
{ $values { "name" string } { "tuple" tuple } { "n" { $maybe integer } } }
 | 
			
		||||
{ $description "Returns the offset of a tuple slot accessed by " { $snippet "name" } ", or " { $link f } " if no slot with that name." } ;
 | 
			
		||||
 | 
			
		||||
HELP: offset-of-slot
 | 
			
		||||
{ $values { "name" string } { "tuple" tuple } { "n" integer } }
 | 
			
		||||
{ $description "Returns the offset of a tuple slot accessed by " { $snippet "name" } "." } ;
 | 
			
		||||
{ $description "Returns the offset of a tuple slot accessed by " { $snippet "name" } "." }
 | 
			
		||||
{ $errors "Throws a " { $link no-slot } " error if no slot with that name." } ;
 | 
			
		||||
 | 
			
		||||
HELP: get-slot-named
 | 
			
		||||
{ $values { "name" string } { "tuple" tuple } { "value" object } }
 | 
			
		||||
{ $description "Returns the " { $snippet "value" } " stored in a tuple slot accessed by " { $snippet "name" } "." } ;
 | 
			
		||||
{ $description "Returns the " { $snippet "value" } " stored in a tuple slot accessed by " { $snippet "name" } "." }
 | 
			
		||||
{ $errors "Throws a " { $link no-slot } " error if no slot with that name." } ;
 | 
			
		||||
 | 
			
		||||
HELP: set-slot-named
 | 
			
		||||
{ $values { "value" object } { "name" string } { "tuple" tuple } }
 | 
			
		||||
{ $description "Stores the " { $snippet "value" } " into a tuple slot accessed by " { $snippet "name" } "." } ;
 | 
			
		||||
{ $description "Stores the " { $snippet "value" } " into a tuple slot accessed by " { $snippet "name" } "." }
 | 
			
		||||
{ $errors "Throws a " { $link no-slot } " error if no slot with that name." } ;
 | 
			
		||||
 | 
			
		||||
HELP: set-slots
 | 
			
		||||
{ $values { "assoc" assoc } { "tuple" tuple } }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,9 +24,11 @@ ERROR: not-a-tuple object ;
 | 
			
		|||
 | 
			
		||||
ERROR: no-slot name tuple ;
 | 
			
		||||
 | 
			
		||||
: ?offset-of-slot ( name tuple -- n/f )
 | 
			
		||||
    class-of all-slots slot-named [ offset>> ] [ f ] if* ;
 | 
			
		||||
 | 
			
		||||
: offset-of-slot ( name tuple -- n )
 | 
			
		||||
    2dup class-of all-slots slot-named
 | 
			
		||||
    [ 2nip offset>> ] [ no-slot ] if* ;
 | 
			
		||||
    2dup ?offset-of-slot [ 2nip ] [ no-slot ] if* ;
 | 
			
		||||
 | 
			
		||||
: get-slot-named ( name tuple -- value )
 | 
			
		||||
    [ nip ] [ offset-of-slot ] 2bi slot ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue