Releases: sweet-js/sweet-core
Releases · sweet-js/sweet-core
Version 3.0.1
Bug fixes
- fix interaction between binary and postfix custom operators #680
Version 3.0.0
Breaking changes:
- places in a macro where you used to get a
Syntax
you now getTerm
ctx.next().value
is aTerm
instead of aTermOrSyntaxWrapper
- indexing a syntax template gets a
RawSyntax
instead of aSyntax
ctx.contextify()
new method instead of.inner()
method on the wrappercompile
now takes a path and loader instead of just the source to compile
New Features:
- custom operators
- helper library
- readtables
- internal only, not exposed to macro authors yet
- recursive module loading
console
/process
added to syntax scope in node- loader API
And lot's of bug fixes.
More details in the announcement.
Version 2.2.1
Bug fixes
Version 2.2.0
2.1.0
2.0.0
Breaking Changes
The macro context API has changed. Before you could call ctx.next('expr')
to expand until an expression was matched but now this has been separated out into the expand
method. The expand
method now also understands a lot more grammar productions:
Statement
with aliasstmt
AssignmentExpression
with aliasexpr
Expression
BlockStatement
WhileStatement
IfStatement
ForStatement
SwitchStatement
BreakStatement
ContinueStatement
DebuggerStatement
WithStatement
TryStatement
ThrowStatement
ClassDeclaration
FunctionDeclaration
LabeledStatement
VariableDeclarationStatement
ReturnStatement
ExpressionStatement
YieldExpression
ClassExpression
ArrowExpression
NewExpression
ThisExpression
FunctionExpression
IdentifierExpression
LiteralNumericExpression
LiteralInfinityExpression
LiteralStringExpression
TemplateExpression
LiteralBooleanExpression
LiteralNullExpression
LiteralRegExpExpression
ObjectExpression
ArrayExpression
UnaryExpression
UpdateExpression
BinaryExpression
StaticMemberExpression
ComputedMemberExpression
AssignmentExpression
CompoundAssignmentExpression
ConditionalExpression
In addition, the macro context now has a reset
method that resets the iterator. The interface is now:
TransformerContext = {
name: () -> Syntax
next: () -> {
done: boolean,
value: Syntax
}
expand: (string) -> {
done: boolean,
value: Syntax
}
reset: () -> undefined
}
Modules and Phasing
This is the first release with support for phases!
// log.js
#lang 'sweet.js';
export function log(msg) {
console.log(msg);
}
// main.js
import { log } from './log.js' for syntax;
syntax m = ctx => {
log('doing some Sweet things');
// ...
}
Phasing is currently only supported for modules with the #lang 'sweet.js'
pragma.
More details in the tutorial.