mirror of
				https://github.com/robertkrimen/otto
				synced 2025-10-26 20:28:49 +08:00 
			
		
		
		
	 c55510cb36
			
		
	
	
		c55510cb36
		
	
	
	
	
		
			
			* Context setup is now done via _newContext.
* _newContext is a function that resides in inline.go. _newContext is very flat,
resulting in almost no function calls (a 180 from the earlier status quo).
* inline.go is a Go source file that is built by Perl (via inline).
* Lots of crufty functions removed (along with all of their TODO & FIXME).
* In addition, before, the underlying value of _object.value was a pointer to
something. This made for extra work, since the type of _object.value is interface{},
which is already something of a pointer. Now, the underlying value of _object.value
in Function, Date, RegExp, ..., is a struct value.
* type_function.go was streamlined, removing superfluous struct fields and methods.
* There is now less "digging" to get to the actual value of a function, which is important
when makings lots of calls.
Before (without inline):
    PASS
    BenchmarkNew        2000           1067871 ns/op
    ok      github.com/robertkrimen/otto    3.336s
    PASS
    BenchmarkNew        2000           1077644 ns/op
    ok      github.com/robertkrimen/otto    3.367s
After (with inline):
    PASS
    BenchmarkNew       10000            364418 ns/op
    ok      github.com/robertkrimen/otto    4.616s
    PASS
    BenchmarkNew       10000            307241 ns/op
    ok      github.com/robertkrimen/otto    4.051s
This (partially) fixes #22
		
	
			
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package otto
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| func formatForConsole(argumentList []Value) string {
 | |
| 	output := []string{}
 | |
| 	for _, argument := range argumentList {
 | |
| 		output = append(output, fmt.Sprintf("%v", argument))
 | |
| 	}
 | |
| 	return strings.Join(output, " ")
 | |
| }
 | |
| 
 | |
| func builtinConsole_log(call FunctionCall) Value {
 | |
| 	fmt.Fprintln(os.Stdout, formatForConsole(call.ArgumentList))
 | |
| 	return UndefinedValue()
 | |
| }
 | |
| 
 | |
| func builtinConsole_error(call FunctionCall) Value {
 | |
| 	fmt.Fprintln(os.Stdout, formatForConsole(call.ArgumentList))
 | |
| 	return UndefinedValue()
 | |
| }
 | |
| 
 | |
| // Nothing happens.
 | |
| func builtinConsole_dir(call FunctionCall) Value {
 | |
| 	return UndefinedValue()
 | |
| }
 | |
| 
 | |
| func builtinConsole_time(call FunctionCall) Value {
 | |
| 	return UndefinedValue()
 | |
| }
 | |
| 
 | |
| func builtinConsole_timeEnd(call FunctionCall) Value {
 | |
| 	return UndefinedValue()
 | |
| }
 | |
| 
 | |
| func builtinConsole_trace(call FunctionCall) Value {
 | |
| 	return UndefinedValue()
 | |
| }
 | |
| 
 | |
| func builtinConsole_assert(call FunctionCall) Value {
 | |
| 	return UndefinedValue()
 | |
| }
 | |
| 
 | |
| func (runtime *_runtime) newConsole() *_object {
 | |
| 
 | |
| 	return newConsoleObject(runtime)
 | |
| }
 |