1
0
mirror of https://github.com/robertkrimen/otto synced 2025-10-19 19:55:30 +08:00
Commit Graph

722 Commits

Author SHA1 Message Date
Robert Krimen
dea31a3d39 Fix behavior when breaking a loop into an outer block
This fixes #87
2014-07-02 21:33:53 -07:00
Tim Jurcka
c65402d4bf Fix panic: in.value.(Value) != true
When copying a runtime which contains objects with property accessors ({g,s}etters)

—
	$ go test -v -run=Test_issue86
	=== RUN Test_issue86
	~~~ FAIL: (Terst)
	--- FAIL: Test_issue86 (0.00 seconds)
	panic: in.value.(Value) != true [recovered]
		panic: in.value.(Value) != true [recovered]
		panic: in.value.(Value) != true

	goroutine 20 [running]:
	runtime.panic(0x2f5400, 0x2086ed7e0)
		/usr/local/go/src/pkg/runtime/panic.c:279 +0xf5
	testing.func·006()
		/usr/local/go/src/pkg/testing/testing.go:416 +0x176
	runtime.panic(0x2f5400, 0x2086ed7e0)
		/usr/local/go/src/pkg/runtime/panic.c:248 +0x18d
	_/Users/tim/repositories/github.com/sdgoij/otto/terst.func·001()
		/Users/tim/repositories/github.com/sdgoij/otto/terst/terst.go:475 +0xf5
	runtime.panic(0x2f5400, 0x2086ed7e0)
		/usr/local/go/src/pkg/runtime/panic.c:248 +0x18d
	_/Users/tim/repositories/github.com/sdgoij/otto.(*_clone).property(0x2087a6030, 0x2a0360, 0x2086ed5d0, 0x92, 0x0, 0x0, 0x0)
		/Users/tim/repositories/github.com/sdgoij/otto/clone.go:146 +0x186
	_/Users/tim/repositories/github.com/sdgoij/otto.objectClone(0x208779b60, 0x2087a8ba0, 0x2087a6030, 0x20878f4a0)
		/Users/tim/repositories/github.com/sdgoij/otto/object_class.go:471 +0x279
	_/Users/tim/repositories/github.com/sdgoij/otto.(*_clone).object(0x2087a6030, 0x208779b60, 0x208779b60)
		/Users/tim/repositories/github.com/sdgoij/otto/clone.go:87 +0xf1
	_/Users/tim/repositories/github.com/sdgoij/otto.(*_clone).value(0x2087a6030, 0x5, 0x336680, 0x208779b60, 0x0, 0x0, 0x0)
		/Users/tim/repositories/github.com/sdgoij/otto/clone.go:121 +0xb6
	_/Users/tim/repositories/github.com/sdgoij/otto.(*_clone).property(0x2087a6030, 0x341ea0, 0x2087a40a0, 0x48, 0x0, 0x0, 0x0)
		/Users/tim/repositories/github.com/sdgoij/otto/clone.go:144 +0xbc
	_/Users/tim/repositories/github.com/sdgoij/otto.objectClone(0x2086f0c00, 0x208779c80, 0x2087a6030, 0x20878f8e0)
		/Users/tim/repositories/github.com/sdgoij/otto/object_class.go:471 +0x279
	_/Users/tim/repositories/github.com/sdgoij/otto.(*_clone).object(0x2087a6030, 0x2086f0c00, 0x2087a60f0)
		/Users/tim/repositories/github.com/sdgoij/otto/clone.go:87 +0xf1
	_/Users/tim/repositories/github.com/sdgoij/otto.(*_runtime).clone(0x20873c000, 0x0)
		/Users/tim/repositories/github.com/sdgoij/otto/clone.go:29 +0x1b9
	_/Users/tim/repositories/github.com/sdgoij/otto.(*Otto).Copy(0x2086ed3c0, 0x75)
		/Users/tim/repositories/github.com/sdgoij/otto/otto.go:471 +0x2b
	_/Users/tim/repositories/github.com/sdgoij/otto.func·098()
		/Users/tim/repositories/github.com/sdgoij/otto/bug_test.go:592 +0xf5
	_/Users/tim/repositories/github.com/sdgoij/otto/terst.func·002()
		/Users/tim/repositories/github.com/sdgoij/otto/terst/terst.go:479 +0x21a
	_/Users/tim/repositories/github.com/sdgoij/otto/terst.Terst(0x20873a1b0, 0x20878ff40, 0x1, 0x1)
		/Users/tim/repositories/github.com/sdgoij/otto/terst/terst.go:480 +0x196
	_/Users/tim/repositories/github.com/sdgoij/otto.tt(0x20873a1b0, 0x20878ff40, 0x1, 0x1)
		/Users/tim/repositories/github.com/sdgoij/otto/testing_test.go:19 +0x16a
	_/Users/tim/repositories/github.com/sdgoij/otto.Test_issue86(0x20873a1b0)
		/Users/tim/repositories/github.com/sdgoij/otto/bug_test.go:594 +0x72
	testing.tRunner(0x20873a1b0, 0x6277f0)
		/usr/local/go/src/pkg/testing/testing.go:422 +0x8b
	created by testing.RunTests
		/usr/local/go/src/pkg/testing/testing.go:504 +0x8db

	goroutine 16 [chan receive]:
	testing.RunTests(0x4baf48, 0x6273a0, 0x172, 0x172, 0x1)
		/usr/local/go/src/pkg/testing/testing.go:505 +0x923
	testing.Main(0x4baf48, 0x6273a0, 0x172, 0x172, 0x6219e0, 0x3, 0x3, 0x621aa0, 0x2, 0x2)
		/usr/local/go/src/pkg/testing/testing.go:435 +0x84
	main.main()
		_/Users/tim/repositories/github.com/sdgoij/otto/_test/_testmain.go:795 +0x9c

	goroutine 19 [finalizer wait]:
	runtime.park(0x157e0, 0x629838, 0x626809)
		/usr/local/go/src/pkg/runtime/proc.c:1369 +0x89
	runtime.parkunlock(0x629838, 0x626809)
		/usr/local/go/src/pkg/runtime/proc.c:1385 +0x3b
	runfinq()
		/usr/local/go/src/pkg/runtime/mgc0.c:2644 +0xcf
	runtime.goexit()
		/usr/local/go/src/pkg/runtime/proc.c:1445
	exit status 2
	FAIL	_/Users/tim/repositories/github.com/sdgoij/otto	0.029s
2014-06-28 12:40:49 +02:00
linlexing
5dad38eb5d Fix string representation of GREATER_OR_EQUAL
This fixes #82
2014-06-21 21:54:06 -07:00
Robert Krimen
ed456945de Improve error reporting (again) 2014-06-21 21:16:58 -07:00
Robert Krimen
e6768252c2 Improve error reporting
* Delay entering global scope on code evaluation, not runtime creation

This fixes #66
2014-06-12 21:27:32 -07:00
Robert Krimen
709a0aa7ff Value.string(), .float64(), .bool(), etc. 2014-06-06 21:29:40 -07:00
Robert Krimen
b813fe3676 Fix JSON.stringify treating large integers as float64
This fixes #80
2014-06-06 21:08:59 -07:00
Robert Krimen
de36a84a51 Fix cloning of _fnStash
This may help #71
2014-06-04 21:53:31 -07:00
Robert Krimen
6c7c425424 Fix toReflectValue to handle Struct, Map, Slice, etc.
This fixes #79
2014-06-04 18:08:42 -07:00
Robert Krimen
1a2fa0b815 Fix "Halting Problem" example
As discussed in #71, the original example contains a race condition that could cause the goroutine to block forever.
2014-05-31 13:38:11 -07:00
Robert Krimen
f09ce5eac2 Add mutex locking for .Copy() 2014-05-30 20:27:30 -07:00
Robert Krimen
98be5e74da go vet
This fixes #76

I cheated on some of these.
2014-05-28 21:46:08 -07:00
Robert Krimen
918abeb8d8 The zero value of Value is now defined to be undefined
Previously, it was a publically accessible but invalid value (valueEmpty).

* Deprecate internal use of UndefinedValue(), NullValue(), FalseValue(), TrueValue()
* Guard against Empty, Result, Reference values from escaping the package
2014-05-28 21:23:32 -07:00
Robert Krimen
526d3b2fd5 Minor cloning adjustments
Mostly cosmetic.
2014-05-27 22:09:57 -07:00
Robert Krimen
9cd045ef04 Simplification & refactor of (parts of) the runtime
* Proper lowercasing for internal stuff
* *Environment => *_stash
* ExecutionContext => _scope
* Simpler & shallower call/construct mechanics
* Remove unnecessary fields & methods
* Better scoping (no more stack): []*_scope => _scope.outer
* Some speed improvements

In preparation for #66
2014-05-27 22:05:35 -07:00
Robert Krimen
b7dd9df181 Fix array-like handling in JSON.stringify
This fixes #73
2014-05-24 10:05:10 -07:00
Robert Krimen
ba678bc782 Use _runtime.toValue() instead of func toValue()
This fixes #72
2014-05-22 20:39:27 -07:00
Igor Kharin
1864a88fa0 Implement strings without value16
This fixes #68

Some changes over the original patch, removing references to utf8string.String:

* (better) This removes a dependency on a non-standard (though solid) package
* (better) utf8string.String has mutable parts
* (worse) utf8string.String has a smarter consecutive access approach (by
  remembering where the last access was)
* (?) _stringWide allocates a []rune if charAt or charCodeAt access is needed (though
  it will only do this once for the string object)
2014-05-18 12:38:15 -07:00
Robert Krimen
6d506b4b2f Update documention to mention natto 2014-04-26 22:49:27 -07:00
Robert Krimen
058fe32c29 terst 2014-04-26 22:19:01 -07:00
Robert Krimen
70f432f8d5 terst 2014-04-26 11:52:14 -07:00
Robert Krimen
a15d66ea64 Fix missing interrupt 2014-04-25 23:04:44 -07:00
Robert Krimen
470b8c3b73 terst
* Update to latest github.com/robertkrimen/terst
* Clean up testing
2014-04-25 22:48:25 -07:00
Robert Krimen
bf7b16f4a3 Add internal compilation step
* Streamline what we get from "otto/parser"
* Get rid of some "otto/parser" cruft
* FunctionExpression => FunctionLiteral
* The debugger statement (debugger) should do nothing (not panic)
* Fix aspects of function expression call evaluation
2014-04-19 14:05:51 -07:00
Robert Krimen
0917510923 Fix delete ... triggering property get() 2014-04-19 11:11:53 -07:00
Robert Krimen
8aca2c886a Disable script marshalling/unmarshalling for now 2014-04-15 18:34:24 -07:00
Robert Krimen
142951ac5a Add Script marshalling/unmarshalling 2014-04-13 19:47:23 -07:00
Robert Krimen
9561f66959 Tighten test comparisons instead of squashing everything to a string 2014-04-13 18:09:46 -07:00
Robert Krimen
7721396b67 Fix Date tests to always mock UTC 2014-04-13 15:07:29 -07:00
Robert Krimen
ddca88af9b Add compilation (Script, vm.Compile, etc.) 2014-04-13 15:04:32 -07:00
Robert Krimen
7163cd7841 Skip unexported fields, begin json.Marshaler support
* The "reflect" package is willing to expose unexported fields in structs (a little suprising).
* Skip unexported fields when enumerating or trying to access (pretend they don't exist).
* Allow structs that implement json.Marshaler to work as expected in a JSON.stringify call.

If we let the runtime try to access unexported fields, it'll cause a panic.

This fixes #64
2014-04-12 11:53:04 -07:00
Robert Krimen
ba4c8b0769 Fix documentation 2014-04-11 18:23:34 -07:00
Robert Krimen
9d7eadf70f Simplify the commandline client (otto) 2014-04-11 18:13:46 -07:00
Robert Krimen
f04cfab02d Add ability to parse []byte, *bytes.Buffer, io.Reader 2014-04-11 18:07:57 -07:00
Robert Krimen
6e3ed1b99d Tighten test comparisons instead of squashing everything to a string 2014-04-11 18:06:18 -07:00
Robert Krimen
029f0bbd63 Fix parseInt if ErrRange occurs (fallback to float64) 2014-04-11 18:05:54 -07:00
Robert Krimen
ad8a97c028 New parser
* Faster, more straightforward, etc.
* More advanced object literals (get ..., set ...)
* More tests using JavaScript from the wild (http://cdnjs.com/)
2014-04-10 20:42:25 -07:00
Robert Krimen
ec106f69e0 Add Object.Keys()
This fixes #62
2014-04-03 18:25:53 -07:00
Robert Krimen
0c82879349 Stop checking against 1.0.3 for release 2014-03-16 09:05:28 -07:00
Daniel Cannon
07737f86b9 Add ability to call struct methods
This fixes #60

This is incompatible with go 1.0.3
2014-03-16 09:04:00 -07:00
Daniel Cannon
661a61c5a0 Fix toValue not properly converting type aliases
This fixes #61
2014-03-16 08:46:20 -07:00
Robert Krimen
6f0e24ae2d Fix Array.prototype.reduce, .reduceRight
Fix false-positives in underscore testing
Fix test (missing document because we're not in a browser)
2014-03-13 22:39:17 +01:00
Robert Krimen
73cdc7031e newnewNode => newNewNode 2014-02-21 23:06:20 -08:00
Robert Krimen
aef9bfcb9a Fix "memory leak" by gelcapping panic values with _exception
Basically, the Go runtime sees the gelcap shell of the exception,
which dissolves (payload is set to nil) once we catch the error.

This prevents the Go runtime from hanging onto a heavy object for the
panic log (or whatever it is doing with the panic value).

This fixes #59
2014-02-21 18:24:07 -08:00
Robert Krimen
1f3aef2086 Fix Date.prototype.setTime
This fixes #58
2014-02-18 20:37:54 -08:00
Robert Krimen
e01dde79ed More tests for .Copy()
This fixes #57
2014-02-16 21:41:16 -08:00
Robert Krimen
70e6bec5e0 Make sure to set the Otto/runtime dependency when copying
This is a problem in #57
2014-02-16 21:22:30 -08:00
Robert Krimen
2ea54739df terst 2014-02-16 11:07:10 -08:00
Robert Krimen
5aa653244a Fix Put to see set/get properties 2014-02-15 10:20:33 -08:00
Robert Krimen
333bb23c07 Guard against _nilGetSetObject sneaking in 2014-02-14 23:23:39 -08:00