ECMAScript Spec Operations, in ECMAScript
Have you ever wanted to write a to-the-letter implementation of some ECMAScript spec function? Maybe you want to run tests against it; maybe you're just crazy and like self-hosting JavaScript in JavaScript. In either case, this is the package for you!
Especially has a small-but-growing collection of meta-textual and abstract operations drawn directly from the pages of the ECMAScript 6 draft specification. From common things like Get to dealing with internal slots, Especially has you covered.
APIs
Especially has no main module (gasp). Instead, you'll require one of the top-level modules that contain the stuff you want.
require("especially/abstract-operations")
require("especially/math")
A variety of math operations from the Algorithm Conventions section of the spec:
- abs(x)
- sign(x)
- min(x1, x2, …, xn)
- floor(x)
require("especially/meta")
assert: ensures you pass it a boolean, then throws if it's not true
define_built_in_data_property: a shortcut for defining a built-in data property with the usual property descriptor.
- Internal slot management:
make_slots(object, arrayOfSlotNames): call this to initialize an object's internal slots. Often referenced in the spec as "instances of (something) are initially created with the internal slots listed in (some table)."
get_slot(object, name): get the value of an internal slot. Often referenced in the spec as "the value of (object)'s [[SlotName]] internal slot."
set_slot(object, name): set the value of an internal slot. Often referenced in the spec as "Set (object)'s [[SlotName]] internal slot to (a value)."
has_slot(object): check whether an object has an internal slot with the given name. Often referenced in the spec as "If (object) does not have a [[SlotName]] internal slot."
require("especially/well-known-symbols")
A few well-known symbol are included:
"@@create" will give you a symbol that is used by OrdinaryConstruct and related operations.
"@@iterator" will give you a symbol that is used by GetIterator.
require("especially/intrinsics")
Some of the well-known intrinsic objects are included by name, e.g. "%ObjectPrototype%". These are used by GetPrototypeFromConstructor and related operations.
Usage Notes
Especially is meant to run in Node.js 0.11.9+, at least for now. It uses certain ES6 features so far only implemented in bleeding-edge V8, with the --harmony flag turned on.
Install it from npm into your project with npm install especially. And don't forget to run your program, or your tests, with the --harmony flag.
You can see examples of it in use in the reference implementation of the ES6 promises specification.