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
de36a84a51
Fix cloning of _fnStash
...
This may help #71
2014-06-04 21:53:31 -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
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
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
ddca88af9b
Add compilation (Script, vm.Compile, etc.)
2014-04-13 15:04:32 -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
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
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
e01dde79ed
More tests for .Copy()
...
This fixes #57
2014-02-16 21:41:16 -08:00
Tim Jurcka
dd88ce83b8
Call getter/setter if property is AccessorDescriptor
...
This fixes #36
This fixes #56
2014-02-12 21:52:42 -08:00
Robert Krimen
c3cd59909c
Provide early warning of missing functionality (set:/get:)
...
This is a bandaid for #56
2014-02-10 21:15:40 -08:00
Robert Krimen
329e5afb2c
Add objectLength
2014-02-01 11:09:14 -08:00
Robert Krimen
4a6c644125
Fix Object.defineProperties to only enumerate over enumerable
2014-01-20 08:56:10 -08:00
Robert Krimen
c47cf7be6e
Improve arguments property handling
...
Also, fix an issue with double enumeration of arguments
2014-01-19 21:08:05 -08:00
Robert Krimen
ea621687a4
Add Otto.Copy()
2013-07-14 14:20:01 -07:00
Robert Krimen
c55510cb36
Inline context initialization & improve _object.value
...
* 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
2013-06-09 18:28:18 -07:00
Robert Krimen
506ba2768f
Tidy tests (make release, make check, etc.)
2013-06-06 19:57:12 -07:00
Robert Krimen
baf3318f30
Add Error.prototype.message
2013-06-02 15:03:33 -07:00
Robert Krimen
18630616eb
Remove throw behavior from Otto.Call
2013-05-19 21:08:32 -07:00
Robert Krimen
83c56dd73d
Add Otto.Call
2013-05-19 19:03:05 -07:00
Robert Krimen
699232d49a
Consolidate run/runSafe into _runtime
2013-05-18 16:18:17 -07:00
Robert Krimen
bdd28e5938
Revamp property mode bit fiddling (write, enumerate, configure)
2013-05-18 15:56:35 -07:00
Robert Krimen
7e2b4f2063
Rewrite of property handling to be more robust and compliant
...
* No more _stash
* Now using a "virtual table" system via _objectClass
* Make Array.concat GoArray compatible (via .isArray())
Fix #16
2013-05-12 14:14:51 -07:00
Robert Krimen
9184233705
Bundle terst dependency (github.com/robertkrimen/terst)
2013-04-15 10:20:34 -07:00
Robert Krimen
260b2a48bf
Fix (band-aid) Go/JavaScript cross-boundary error transformation
2013-03-06 12:07:26 -08:00
Robert Krimen
bada1b6b24
Fix passing the wrong value to calculateBinaryOperation
...
Was passing left instead of leftValue
2013-03-05 18:10:14 -08:00
Robert Krimen
283dffe841
Can delete an undefined reference
2013-03-05 17:49:15 -08:00
Robert Krimen
d1c4cf79ab
Fix always passing in the global object as this for eval
...
Should be passing in the this of the parent execution context instead
2013-03-05 14:41:50 -08:00
Robert Krimen
16a30ee951
Differentiate between direct and indirect eval
2013-02-27 21:23:21 -08:00
Robert Krimen
809a0a0ba6
Split tests out of one big massive file
2013-02-05 08:56:08 -08:00
Robert Krimen
15aadd333c
Upgrade underscore to 1.4.4, including tests
2013-02-04 21:58:47 -08:00
Robert Krimen
aaa90bf65c
Fix HasInstace (instanceof) to return false
...
Should not TypeError panic on a non-Object
2013-02-04 15:21:00 -08:00
Robert Krimen
a879744c20
Add Go <=> JavaScript type interaction
...
Via reflection for struct, map, and slice/array
Fix #10
2013-02-04 10:31:44 -08:00
Robert Krimen
e5ff4cef59
Add delete to type_array
2013-02-04 07:30:53 -08:00
Robert Krimen
3240efeb62
Convert string to utf16 for length, indexing, etc.
...
This change is internal to String objects
2013-01-25 14:57:55 -08:00
Robert Krimen
20d2e8bba6
gofmt
...
Ugh.
2013-01-25 09:59:42 -08:00
Robert Krimen
668d0fc6a7
Fix broken (panicking) RegExp transformations
...
Transformations would panic on some edge (error) cases:
\u0z
\x_
2012-12-28 15:50:37 -08:00
Robert Krimen
2b5c4b6975
Safeguard RegExp.exec against non-RegExp
2012-11-21 18:27:36 -08:00
Robert Krimen
aef569f297
Fix to handle Infinity radix in parseInt properly
2012-11-15 15:15:26 -08:00
Robert Krimen
db913468da
If a property is defined without a value (nil interface), define it as undefined
2012-11-14 15:48:19 -08:00
Robert Krimen
0498f06be0
Fix trying to delete non-reference
2012-11-14 11:09:52 -08:00
Robert Krimen
bff799a0e1
Test for correct endIndex when submatching
2012-11-11 16:23:51 -08:00
Robert Krimen
845172c82c
endIndex needs to be an offset from lastIndex
2012-11-07 15:46:21 -08:00
Robert Krimen
9385f32241
Fix substring to have correct behavior
2012-11-06 20:03:22 -08:00