| 
						
					 | 
					 | 
					@ -49,6 +49,31 @@ func pop() (Expr, error) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return res, nil
 | 
					 | 
					 | 
					 | 
						return res, nil
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					func popExpr() (Expr, error) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						a, e := pop()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							return Expr{}, e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if a.Tok == IDENTIFIER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							a = get(a.Value.(string))
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						return a, nil
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					func pop2Expr() (Expr, Expr, error) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						b, e := popExpr()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							return Expr{}, Expr{}, e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						a, e := popExpr()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							return Expr{}, Expr{}, e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						return b, a, nil
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func identifierToObj(c Expr, idx int, argv []string, w io.Writer) error {
 | 
					 | 
					 | 
					 | 
					func identifierToObj(c Expr, idx int, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						k, k_ok := c.Value.(string)
 | 
					 | 
					 | 
					 | 
						k, k_ok := c.Value.(string)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if k_ok {
 | 
					 | 
					 | 
					 | 
						if k_ok {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -360,7 +385,7 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if list.Tok == LIST {
 | 
					 | 
					 | 
					 | 
								if list.Tok == LIST {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, len(list.Exprs) == 0, 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, len(list.Exprs) == 0, 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								} else {
 | 
					 | 
					 | 
					 | 
								} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `shatter` not a list @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `empty` not a list @%v", idx)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case COMPOSE:
 | 
					 | 
					 | 
					 | 
							case COMPOSE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								v, e := pop()
 | 
					 | 
					 | 
					 | 
								v, e := pop()
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -581,27 +606,21 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Pow(a.Value.(float64), b.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Pow(a.Value.(float64), b.Value.(float64)), 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case SQRT:
 | 
					 | 
					 | 
					 | 
							case SQRT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								angle, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if angle.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									angle = get(angle.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if angle.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Sqrt(angle.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Sqrt(a.Value.(float64)), 0})
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								} else {
 | 
					 | 
					 | 
					 | 
								} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `sqrt` value is not number or float @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `sqrt` value is not number or float @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case ADD1:
 | 
					 | 
					 | 
					 | 
							case ADD1:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, a.Value.(float64) + 1.0, 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, a.Value.(float64) + 1.0, 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -609,13 +628,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `add1` value is not a number @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `add1` value is not a number @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case SUB1:
 | 
					 | 
					 | 
					 | 
							case SUB1:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, a.Value.(float64) - 1.0, 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, a.Value.(float64) - 1.0, 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -623,13 +639,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `sub1` value is not a number  @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `sub1` value is not a number  @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case SIN:
 | 
					 | 
					 | 
					 | 
							case SIN:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Sin(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Sin(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -637,13 +650,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `sin` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `sin` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case COS:
 | 
					 | 
					 | 
					 | 
							case COS:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Cos(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Cos(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -651,13 +661,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `cos` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `cos` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case TAN:
 | 
					 | 
					 | 
					 | 
							case TAN:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Tan(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Tan(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -665,13 +672,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `tan` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `tan` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case ATAN:
 | 
					 | 
					 | 
					 | 
							case ATAN:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								den, e := pop()
 | 
					 | 
					 | 
					 | 
								den, e := pop()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -687,13 +691,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `atan` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `atan` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case LN:
 | 
					 | 
					 | 
					 | 
							case LN:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Log(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Log(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -701,13 +702,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `ln` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `ln` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case LOG:
 | 
					 | 
					 | 
					 | 
							case LOG:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Log10(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Log10(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -715,13 +713,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `log` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `log` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case LOG3:
 | 
					 | 
					 | 
					 | 
							case LOG3:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Log(a.Value.(float64)) / math.Log(3.0), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Log(a.Value.(float64)) / math.Log(3.0), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -729,13 +724,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `log3` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `log3` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case CLIP:
 | 
					 | 
					 | 
					 | 
							case CLIP:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Floor(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Floor(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -743,13 +735,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `clip` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `clip` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case SMOOTH:
 | 
					 | 
					 | 
					 | 
							case SMOOTH:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Round(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Round(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -757,13 +746,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `smooth` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `smooth` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case HOWMUCH:
 | 
					 | 
					 | 
					 | 
							case HOWMUCH:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Abs(a.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, math.Abs(a.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -771,13 +757,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `howmuch` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `howmuch` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case SETRAND:
 | 
					 | 
					 | 
					 | 
							case SETRAND:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									rand.Seed(int64(a.Value.(float64)))
 | 
					 | 
					 | 
					 | 
									rand.Seed(int64(a.Value.(float64)))
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -785,13 +768,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `setrand` values are not numbers or floats @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `setrand` values are not numbers or floats @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case RAND:
 | 
					 | 
					 | 
					 | 
							case RAND:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									max := a.Value.(float64)
 | 
					 | 
					 | 
					 | 
									max := a.Value.(float64)
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -805,23 +785,17 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case E:
 | 
					 | 
					 | 
					 | 
							case E:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								push(Expr{NUMBER, nil, 2.71828182845904523536, 0})
 | 
					 | 
					 | 
					 | 
								push(Expr{NUMBER, nil, 2.71828182845904523536, 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case ISINT:
 | 
					 | 
					 | 
					 | 
							case ISINT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								push(Expr{BOOLEAN, nil, a.Value.(float64) == float64(int64(a.Value.(float64))), 0})
 | 
					 | 
					 | 
					 | 
								push(Expr{BOOLEAN, nil, a.Value.(float64) == float64(int64(a.Value.(float64))), 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case ISNUMBER:
 | 
					 | 
					 | 
					 | 
							case ISNUMBER:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								push(Expr{BOOLEAN, nil, (a.Tok == NUMBER), 0})
 | 
					 | 
					 | 
					 | 
								push(Expr{BOOLEAN, nil, (a.Tok == NUMBER), 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case NUMBERIZE:
 | 
					 | 
					 | 
					 | 
							case NUMBERIZE:
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -840,21 +814,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								push(Expr{NUMBER, nil, num, 0})
 | 
					 | 
					 | 
					 | 
								push(Expr{NUMBER, nil, num, 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case ISOLATE:
 | 
					 | 
					 | 
					 | 
							case ISOLATE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) & int64(b.Value.(float64))), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) & int64(b.Value.(float64))), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -862,21 +825,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `isolate` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `isolate` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case MIX:
 | 
					 | 
					 | 
					 | 
							case MIX:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) | int64(b.Value.(float64))), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) | int64(b.Value.(float64))), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -884,21 +836,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `mix` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `mix` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case CONTRADICT:
 | 
					 | 
					 | 
					 | 
							case CONTRADICT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) ^ int64(b.Value.(float64))), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) ^ int64(b.Value.(float64))), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -906,13 +847,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `contradict` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `contradict` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case COMPL:
 | 
					 | 
					 | 
					 | 
							case COMPL:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(^int64(a.Value.(float64))), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(^int64(a.Value.(float64))), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -920,21 +858,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `compl` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `compl` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case SHIFTRIGHT:
 | 
					 | 
					 | 
					 | 
							case SHIFTRIGHT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) >> int64(b.Value.(float64))), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) >> int64(b.Value.(float64))), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -942,21 +869,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `shiftright` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `shiftright` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case SHIFTLEFT:
 | 
					 | 
					 | 
					 | 
							case SHIFTLEFT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) << int64(b.Value.(float64))), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{NUMBER, nil, float64(int64(a.Value.(float64)) << int64(b.Value.(float64))), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -964,21 +880,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `shiftleft` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `shiftleft` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case GT:
 | 
					 | 
					 | 
					 | 
							case GT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) > (b.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) > (b.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -986,21 +891,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `gt` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `gt` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case LT:
 | 
					 | 
					 | 
					 | 
							case LT:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) < (b.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) < (b.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1009,21 +903,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `lt` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `lt` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case EQ:
 | 
					 | 
					 | 
					 | 
							case EQ:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) == b.Value.(float64), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) == b.Value.(float64), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1031,21 +914,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `eq` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `eq` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case GE:
 | 
					 | 
					 | 
					 | 
							case GE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) >= (b.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) >= (b.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1053,21 +925,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `ge` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `ge` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case LE:
 | 
					 | 
					 | 
					 | 
							case LE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) <= (b.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) <= (b.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1075,21 +936,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `le` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `le` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case NE:
 | 
					 | 
					 | 
					 | 
							case NE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER && b.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) != (b.Value.(float64)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) != (b.Value.(float64)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1097,22 +947,16 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `ne` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `ne` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case ISNULL:
 | 
					 | 
					 | 
					 | 
							case ISNULL:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								push(Expr{BOOLEAN, nil, (a.Tok == NULL || a.Value == nil), 0})
 | 
					 | 
					 | 
					 | 
								push(Expr{BOOLEAN, nil, (a.Tok == NULL || a.Value == nil), 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case NEGATIVE:
 | 
					 | 
					 | 
					 | 
							case NEGATIVE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
					 | 
					 | 
					 | 
								if a.Tok == NUMBER {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) < 0.0, 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, a.Value.(float64) < 0.0, 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1120,21 +964,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `negative` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `negative` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case AND:
 | 
					 | 
					 | 
					 | 
							case AND:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == BOOLEAN && b.Tok == BOOLEAN {
 | 
					 | 
					 | 
					 | 
								if a.Tok == BOOLEAN && b.Tok == BOOLEAN {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, (a.Value.(bool) && b.Value.(bool)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, (a.Value.(bool) && b.Value.(bool)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1142,21 +975,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `and` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `and` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case OR:
 | 
					 | 
					 | 
					 | 
							case OR:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == BOOLEAN && b.Tok == BOOLEAN {
 | 
					 | 
					 | 
					 | 
								if a.Tok == BOOLEAN && b.Tok == BOOLEAN {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, (a.Value.(bool) || b.Value.(bool)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, (a.Value.(bool) || b.Value.(bool)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1164,21 +986,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `or` values are not numbers @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `or` values are not numbers @%v", idx)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case XOR:
 | 
					 | 
					 | 
					 | 
							case XOR:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								b, e := pop()
 | 
					 | 
					 | 
					 | 
								b, a, e := pop2Expr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if b.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									b = get(b.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == BOOLEAN && b.Tok == BOOLEAN {
 | 
					 | 
					 | 
					 | 
								if a.Tok == BOOLEAN && b.Tok == BOOLEAN {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, (a.Value.(bool) != b.Value.(bool)), 0})
 | 
					 | 
					 | 
					 | 
									push(Expr{BOOLEAN, nil, (a.Value.(bool) != b.Value.(bool)), 0})
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1212,13 +1023,10 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								push(Expr{STRING, nil, str, 0})
 | 
					 | 
					 | 
					 | 
								push(Expr{STRING, nil, str, 0})
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case COMPLAIN:
 | 
					 | 
					 | 
					 | 
							case COMPLAIN:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								a, e := pop()
 | 
					 | 
					 | 
					 | 
								a, e := popExpr()
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if e != nil {
 | 
					 | 
					 | 
					 | 
								if e != nil {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if a.Tok == IDENTIFIER {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									a = get(a.Value.(string))
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								fmt.Fprintf(os.Stderr, "%v", a.Value)
 | 
					 | 
					 | 
					 | 
								fmt.Fprintf(os.Stderr, "%v", a.Value)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							case NEWLINE:
 | 
					 | 
					 | 
					 | 
							case NEWLINE:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								fmt.Fprintf(w, "\n")
 | 
					 | 
					 | 
					 | 
								fmt.Fprintf(w, "\n")
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					@ -1262,7 +1070,7 @@ func Interpret(code Expr, argv []string, w io.Writer) error {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return e
 | 
					 | 
					 | 
					 | 
									return e
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								if str.Tok != STRING {
 | 
					 | 
					 | 
					 | 
								if str.Tok != STRING {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `servehttp` exptected a string for the port @%v", idx)
 | 
					 | 
					 | 
					 | 
									return fmt.Errorf("cannot `readall` @%v", idx)
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								}
 | 
					 | 
					 | 
					 | 
								}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								filedata, err := ioutil.ReadFile(str.Value.(string)) // the file is inside the local directory
 | 
					 | 
					 | 
					 | 
								filedata, err := ioutil.ReadFile(str.Value.(string)) // the file is inside the local directory
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
					 | 
					 | 
					
 
 |