Reorder Program.interpret cases
Этот коммит содержится в:
		
							родитель
							
								
									75477eb14e
								
							
						
					
					
						коммит
						25344bc08f
					
				
					 1 изменённых файлов: 16 добавлений и 16 удалений
				
			
		|  | @ -102,22 +102,6 @@ func (p *Program) interpret(instrs []ssa.Instruction) (int, error) { | ||||||
| 			} else { | 			} else { | ||||||
| 				return i, errors.New("todo: init IndexAddr index: " + instr.Index.String()) | 				return i, errors.New("todo: init IndexAddr index: " + instr.Index.String()) | ||||||
| 			} | 			} | ||||||
| 		case *ssa.UnOp: |  | ||||||
| 			if instr.Op != token.MUL || instr.CommaOk { |  | ||||||
| 				return i, errors.New("init: unknown unop: " + instr.String()) |  | ||||||
| 			} |  | ||||||
| 			valPtr, err := p.getValue(instr.X, locals) |  | ||||||
| 			if err != nil { |  | ||||||
| 				return i, err |  | ||||||
| 			} |  | ||||||
| 			switch valPtr := valPtr.(type) { |  | ||||||
| 			case *GlobalValue: |  | ||||||
| 				locals[instr] = valPtr.Global.initializer |  | ||||||
| 			case *PointerValue: |  | ||||||
| 				locals[instr] = *valPtr.Elem |  | ||||||
| 			default: |  | ||||||
| 				panic("expected a pointer") |  | ||||||
| 			} |  | ||||||
| 		case *ssa.MakeInterface: | 		case *ssa.MakeInterface: | ||||||
| 			locals[instr] = &InterfaceValue{instr.X.Type(), locals[instr.X]} | 			locals[instr] = &InterfaceValue{instr.X.Type(), locals[instr.X]} | ||||||
| 		case *ssa.MakeMap: | 		case *ssa.MakeMap: | ||||||
|  | @ -177,6 +161,22 @@ func (p *Program) interpret(instrs []ssa.Instruction) (int, error) { | ||||||
| 			} else { | 			} else { | ||||||
| 				return i, errors.New("todo: init Store: " + instr.String()) | 				return i, errors.New("todo: init Store: " + instr.String()) | ||||||
| 			} | 			} | ||||||
|  | 		case *ssa.UnOp: | ||||||
|  | 			if instr.Op != token.MUL || instr.CommaOk { | ||||||
|  | 				return i, errors.New("init: unknown unop: " + instr.String()) | ||||||
|  | 			} | ||||||
|  | 			valPtr, err := p.getValue(instr.X, locals) | ||||||
|  | 			if err != nil { | ||||||
|  | 				return i, err | ||||||
|  | 			} | ||||||
|  | 			switch valPtr := valPtr.(type) { | ||||||
|  | 			case *GlobalValue: | ||||||
|  | 				locals[instr] = valPtr.Global.initializer | ||||||
|  | 			case *PointerValue: | ||||||
|  | 				locals[instr] = *valPtr.Elem | ||||||
|  | 			default: | ||||||
|  | 				panic("expected a pointer") | ||||||
|  | 			} | ||||||
| 		default: | 		default: | ||||||
| 			return i, nil | 			return i, nil | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Ayke van Laethem
						Ayke van Laethem