| 
									
										
										
										
											2014-04-16 04:08:37 +02:00
										 |  |  | package utils | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"github.com/obscuren/mutan" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // General compile function | 
					
						
							|  |  |  | func Compile(script string) ([]byte, error) { | 
					
						
							| 
									
										
										
										
											2014-04-27 18:05:48 +02:00
										 |  |  | 	byteCode, errors := mutan.Compile(strings.NewReader(script), false) | 
					
						
							| 
									
										
										
										
											2014-04-16 04:08:37 +02:00
										 |  |  | 	if len(errors) > 0 { | 
					
						
							|  |  |  | 		var errs string | 
					
						
							|  |  |  | 		for _, er := range errors { | 
					
						
							|  |  |  | 			if er != nil { | 
					
						
							|  |  |  | 				errs += er.Error() | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return nil, fmt.Errorf("%v", errs) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-27 18:05:48 +02:00
										 |  |  | 	return byteCode, nil | 
					
						
							| 
									
										
										
										
											2014-04-16 04:08:37 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-04-23 15:54:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | func CompileScript(script string) ([]byte, []byte, error) { | 
					
						
							|  |  |  | 	// Preprocess | 
					
						
							| 
									
										
										
										
											2014-05-10 16:22:57 +02:00
										 |  |  | 	mainInput, initInput := mutan.PreParse(script) | 
					
						
							| 
									
										
										
										
											2014-04-23 15:54:34 +02:00
										 |  |  | 	// Compile main script | 
					
						
							|  |  |  | 	mainScript, err := Compile(mainInput) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Compile init script | 
					
						
							|  |  |  | 	initScript, err := Compile(initInput) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return mainScript, initScript, nil | 
					
						
							|  |  |  | } |