Commit Graph

206 Commits

Author SHA1 Message Date
강동윤
f49fbea2af Update referenes 2019-02-28 19:30:58 +09:00
강동윤
a46804ab48 swc_ecma_ast:
- Split class member / property into separate types
2019-02-28 19:25:38 +09:00
강동윤
a5bc5c1490
Publish (again) (#279)
- swc_ecma_codegen@0.6.1
 - swc_ecma_codegen_macros@0.3.0
 - swc_ecma_parser@0.9.1
 - swc_ecma_parser_macros@0.3.0
2019-02-27 10:48:02 +09:00
강동윤
10cb9a4b21
Publish (#278)
- swc_macros_common@0.2.0
 - ast_node@0.4.1
 - string_enum @0.2.0 
 - swc_ecma_ast@0.8.0
 - swc_ecma_parser_macros@0.3.0
 - swc_ecma_codegen_macros@0.3.0
 - swc_ecma_parser@0.9.1
 - swc_ecma_parser@0.6.1
2019-02-27 10:42:22 +09:00
강동윤
1b28766c26
Improve comment api (#277)
swc_ecma_parser:
 - parser now take comments by reference
2019-02-26 13:56:58 +09:00
강동윤
a75dbdf2f2 Update references 2019-02-25 19:47:53 +09:00
강동윤
dff2cb8f75
Implement deserialize for ast nodes (#274)
string_enum:
 - #[derive(StringEnum)] now derives `Deserialize`

swc_ecma_ast:
 - implement deserialize for ast nodes.
 - change ast to make it serialized / deserialized correctly

swc_ecma_parser:
 - jsx, test262, typescript tests now verify serialization and deserialization of module
2019-02-24 14:12:04 +09:00
강동윤
7dcb2e34af Add test for #269. 2019-02-22 15:55:04 +09:00
강동윤
07e2cffb43
Fixes (#265)
swc_ecma_parsr:
 - fix parsing of invalid utf8 characters (#261)
 - fix parsing of function body (#257)
 - fix parsing of  () => (x = true) (#259)

swc_ecma_transforms:
 - fix default arguments in arrow expression (#254)
 - fix assignment pattern in array pattern (#260)
 - make amd / umd configurable. (#262)
2019-02-21 22:21:48 +09:00
강동윤
76ce98b685
Implement serialize for ast nodes (#244)
swc_common:
 - implement Serialize / Deserialize for span

swc_ecma_parser:
 - use json instead of {:#?} while testing
 - update test references
2019-02-20 11:35:41 +09:00
강동윤
7d5316463d
Fixes (#241)
swc_ecma_transforms:
 - handle constructor from object_rest_spread pass (#239)
 - typescript::strip pass now removes signature-only constructor

swc_ecma_parser:
 - fix parsing of do while statement (#242)

swc_ecma_codegen:
 - fix codegen of do while statement (#242)
2019-02-19 15:20:02 +09:00
강동윤
4dc10d849e
Fixes (#237)
swc_ecma_transforms:
 - handle pattern correctly in coomon_js pass (#235)
 - fix object rest in arrow expression (#233)
2019-02-19 12:52:03 +09:00
Nate Mara
6fd789aa34 Remove dbg! macro call (#232) 2019-02-19 10:34:12 +09:00
강동윤
aa8940c1b0 Fix #226.
Now parser works correctly when either
exportDefaultFrom and exportNamespace is enabled
2019-02-18 23:43:53 +09:00
강동윤
2b7240c595
Support export * as Foo from 'foo'; (#228)
swc_ecma_parser:
 - support `export * as Foo from 'foo';` (Fix #226)

swc_ecma_transforms:
 - support `export * as Foo from 'foo';` (Fix #226)
2019-02-18 14:01:56 +09:00
강동윤
1a1889f437
Fix bugs (#221)
swc_ecmascript_parser:
 - fix parsing of `export default from 'src';`

swc_ecmascript:
 - add a pass which allows injecting helpers before the module pass
2019-02-16 14:18:22 +09:00
강동윤
631eff9e8c
Bugfixes (#208)
swc_ecma_codegen:
 - fix codegen of shebang (#177)
 - add test for #197.

swc_ecma_transforms:
 - fix object rest spread pass (#162)
2019-02-14 13:24:01 +09:00
강동윤
b27829825e
Fix Bugs (#205)
swc_ecma_codegen:
 - escape characters (#204)

swc_ecma_parser:
 - fix parsing of `<!--`

swc_ecma_transforms:
 - promote VarCollector to crate-level utility
 - fix es3::member_expr_lits (#206)
 - fix es2015::duplicate_keys pass (#203)
 - improve fixer (paren for assignment) (#201)
 - improve fixer (arrow expression) (#207)
 - make typescript pass strip out type-only exports (#196)
2019-02-14 11:03:06 +09:00
강동윤
c1a3cc53c1
React jsx / improve fixer (#202)
swc_ecma_parser:
 - fix parsing of jsx

swc_ecma_transforms:
 - fix fixer (#199)
2019-02-13 19:12:00 +09:00
강동윤
c647cf1bc0
Fix bugs (#193)
swc_ecma_parser:
 - fix lexer
 - better error reporting for jsx reference test

swc_ecma_codegen:
 - Update references
2019-02-13 16:03:38 +09:00
강동윤
fedfea4e09 Fix #190 2019-02-13 14:24:44 +09:00
강동윤
2d062432a8
Shebang & small improvement for object rest spread (#184)
swc_ecma_ast:
 - handle shebang

swc_ecma_codegen:
 - handle shebang

swc_ecma_parser:
 - handle shebang

swc_ecma_transforms:
 - fix arrow expression used with object rest spread
2019-02-13 11:08:21 +09:00
강동윤
f797019b79
Use strict (#183)
swc_ecma_parser:
- fix parsing of use strict without semicolon.

swc_ecma_transforms:
 - emit helpers after use strict.
2019-02-13 08:44:54 +09:00
강동윤
bd219688ac
Typescript bugs (#170)
swc_ecma_parser:
 - fix parsing of cond expression (Closes #158)
 - fix parsing of function signature (Closes #159)
2019-02-12 22:05:46 +09:00
강동윤
227423d5f6
Export default from & fix codegen of imports (#168)
swc_ecma_ast:
 - Support `export v from 'foo';`

swc_ecma_parser:
 - Support `export v from 'foo';`

swc_ecma_codegen:
 - Fix codegen of side-effect imports
2019-02-12 15:30:11 +09:00
강동윤
7fe2245a3d
Cleanup (#152)
- replace Lrc with std::sync::Arc
swc_common:
 - make swc_common::sync private
 - improve MoveMap

swc_ecma_codegen:
 - fix codegen of import.

swc_ecma_transforms:
 - properly detect valid identifier.

swc_ecma_parser:
 - Fix parsing of cond expr inside paren.
2019-02-11 11:39:20 +09:00
Adrian Adamiak
c2142bc225 Remove a leftover (#149)
Remove unused variable from colors.js
2019-02-11 09:40:53 +09:00
nateroling
5afed275f1 Typo correction (#150)
Fix a couple comment typos.
2019-02-11 09:40:28 +09:00
강동윤
ab4f619257
Fix tests (#142) 2019-02-10 20:49:29 +09:00
강동윤
605019280f Fix parsing of import expression 2019-02-10 14:33:21 +09:00
강동윤
b1bf99c67c improve error messages 2019-02-10 12:26:27 +09:00
강동윤
3b8d36dc58 Parse dynamic imports 2019-02-10 12:07:40 +09:00
강동윤
43d633b44d
Handle comments and improve codegen (#136)
swc_ecma_codegen:
 - Improve codegen
 - Handle comments

swc_ecma_parser:
 - Handle comments
2019-02-08 13:00:58 +09:00
강동윤
b516c19133
Update dependencies (#135) 2019-02-07 00:05:25 +09:00
강동윤
e63be11d0e Fix order of the classes pass 2019-01-30 13:05:45 +09:00
강동윤
ba0c7c908c
Improve swc_ecma_trnasforms (#127)
# swc_ecma_ast
 - Add PrivateName to Expr

# swc_ecma_parser
 - Fix parsing of private name

# swc_ecma_transforms

## Hygiene
 - It correctly tracks `BindingIdentifer` / `IdentifierReference`
 - Preserve `IdentiferReference` if it conflicts with a `BindingIdentifier`

## Block scoping
 - It correctly tracks `BindingIdentifer` / `IdentifierReference`


## Fixer
 - It removes useless parens.
 - It removes useless `IdentiferReference`s in comma expressions.

## Classes properties
 - public prooperty
 - private property

## Class decorators
 - implemented
2019-01-29 23:56:16 +09:00
강동윤
c648232864
Classes improvements (#123)
Now swc passes all tests from `@babel/plugin-transform-classes`
2019-01-24 16:07:09 +09:00
강동윤
9313b04c6c Enable some assertions and fix ICE on release mode 2019-01-22 12:37:51 +09:00
강동윤
4379515f00 Bump version 2019-01-20 11:10:31 +09:00
강동윤
f87e2fb123 Fix parser 2019-01-20 11:08:26 +09:00
강동윤
cb12e13a0b Fix cfg(not(procmacro2_semver_exempt)) 2019-01-19 09:31:31 +09:00
강동윤
29c5faed9b Remove usage of nightly features 2019-01-18 10:26:04 +09:00
강동윤
8ff21b9c99 Bump version (again) 2019-01-18 00:01:10 +09:00
강동윤
ca235e1c67 Bump version 2019-01-17 23:58:43 +09:00
강동윤
3facfd8810 Bump version 2019-01-17 23:57:56 +09:00
강동윤
12944c006a Fix to publish it 2019-01-17 23:38:45 +09:00
강동윤
eebf14fbef
Allow stable rust (#118)
This pr introduces some cargo features. For `swc_common` and `swc_ecma_ast`, it introduces a feature flag `fold`.
`Fold` and `Visit` traits exist only if the feature is enabled.

For `swc_ecma_parser`, flag called `verify` is added. When disabled, we skip checking of validity of some expressions.

e.g. `{foo = bar}`

Verification is disabled by default it requires nightly compiler
2019-01-17 23:17:16 +09:00
강동윤
338759110f Fix parsing of large integers 2019-01-16 11:53:41 +09:00
강동윤
a126afaf42 Better error messages for unimplemented!s 2019-01-15 20:18:41 +09:00
강동윤
2a49e1e896 implement clone for transform passes 2019-01-14 17:36:15 +09:00
강동윤
1fabc3fa3e debug_assert! instead of assert!
This reduces binary size
2019-01-10 18:54:40 +09:00
강동윤
d4fefa8615
Reduce binary size (#116)
- remove unused debug impls
2019-01-10 18:23:25 +09:00
강동윤
0f0dc1451a Make procmacro2_semver_exempt optional 2019-01-09 09:46:38 +09:00
강동윤
eb22cfb1bd default for syntax configs 2019-01-08 18:27:38 +09:00
강동윤
fc3a9d6180
.swcrc file for configuration (#115)
libswc:
 - use config file
2019-01-08 16:34:35 +09:00
강동윤
ea610c6ded
Typescript & parser for decorators
swc_atoms:
 - add some atoms

swc_ecma_ast:
 - ast nodes for typescript
 - `ClassMethod` -> `Method`, `ClassMethodKind` -> `MethodKind`
 - private class method / class property
 - use separate type for tagged template literals
 - add `declare` field to `Decl`s
 - make function body optional

swc_ecma_parser:
 - rename Type to TokenContext
 - support decorators
 Note: error reporting for invalid decorator is not implemented yet
 - merge `Config` into `Syntax`
 - Use DiagnosticBuilder for error type
This is to make backtracking cheaper.

swc_ecma_transforms:
 - add `strip` pass
2019-01-07 19:43:47 +09:00
Leviathan Jeanis
75e83860be
Update proc_macro2 to fix missing join() 2018-12-30 09:48:56 -06:00
강동윤
f89a227d5e implement more traits for Syntax 2018-12-30 13:06:13 +09:00
강동윤
603b83291d
jsx support (#100)
swc_ecma_parser:
 - implement parser for jsx

swc_ecma_transforms:
 - implement react::jsx transform

swc_ecma_codegen:
 - implement code generator for jsx
2018-12-30 11:57:27 +09:00
강동윤
4d4e4ce979
Implement object rest / spread (#98)
swc_ecma_parser:
 - improve parser's tests
It now shows the code failed to parse
 - allow rest pattern in catch clause
 - fix parsing of named export (semicolon)

swc_ecma_transforms:
 - implement array spread
 - add helper methods (objectWithoutProperties)
 - add some fast paths
 - make es2015::parameters handle catch clauses
 - don't show helpers when execution failed
 - export fixer
2018-12-26 17:09:48 +09:00
강동윤
22b40e2b17
implements async to generator (#91)
swc_ecma_parser:
 - fix parsing of arrow expression

swc_ecma_codegen:
 - fix codegen of async function

swc_ecma_transforms:
 - implement es2017::async_to_generator
2018-12-24 10:58:40 +09:00
강동윤
a5362ebdb8 inline benchmark files and remove submodule 2018-12-22 18:35:44 +09:00
강동윤
4ff6d4ed4a
Performance & Node binding (#84)
swc_common:
 - update rustc-ap crates to v313

swc_ecma_ast:
 - use bool instead of Option<Span>


swc_ecma_parser:
 - remove LexerInput
 - use uncons_while
 - assert only on debug mode
 - use Visit instead of Fold while verifying
 - replace debug! with trace!
 - disable logging while benchmarking
 - drop slog

swc_ecma_transforms:
 - classes: fold Decl instead of Stmt

swc:
 - add nodejs binding
2018-12-21 16:54:36 +09:00
강동윤
222bdc191f
Performance (#82)
`Map<T>` adds a method named `map` which is actually `Box<T>` -> `Box<T>` without reallocation.

swc_ecma_transforms:
 - chain_at!(Type, passes)
This macro deeply joins path at 'Type' level.
2018-12-01 22:24:26 +09:00
강동윤
ab7d46c5bc
Es2015 (#80)
swc_common:
 - implement VisitWith for &T and [T]

swc_ecma_ast:
 - fix codegen of `===`

swc_ecma_parser:
 - fix parsing of array pattern


swc_ecma_transforms:
 - implement es2015::destructuring
 - implement es2015::computed_properties
 - implement es2015::duplicate_keys
 - implement es2015::parameters
 - fix `InjectHelper` pass

Note that getters / setters in class are not supported yet

 - Run execution tests via jest
 - ignore es2016::exponentation tests
2018-11-28 12:24:08 +09:00
강동윤
33d296af31
block scoped function and tagged template literal (#77)
swc_ecma_transforms:
 - implement es2015::block_scoped_functions
 - implement tagged template literal without escape handling
 - hygiene: rename to different number
 - scope: handle pattern by folding children


swc_ecma_ast:
 - use Str instead of String for template literal

swc_ecma_parser:
 - fix lexer tests
 - handle template literal correctly
template literals now have cooked field


swc_ecma_codegen:
 - escape newline character and backslash ('\')
2018-11-25 11:31:48 +09:00
강동윤
8524d93e9a spdy -> speedy & black box for benchmark 2018-11-23 19:52:46 +09:00
강동윤
d3e14b6533
Parser & transformers (#71)
swc_ecma_transforms:
 - implement es2015::arrow (without this support)
 - implement basical scope analysis
 - implement es2015::function_name
 - new.target is supported
 - implement untagged template literals

swc_ecma_parser
 - make test to use load_file()
 - fix eof handling
 - bump version
2018-11-21 18:59:17 +09:00
강동윤
dc8e178088 fix parser tests 2018-11-19 19:58:35 +09:00
강동윤
c816d699ca
Improve ast (#70)
* Update ast (bool -> Option<Span>)

* fixup! Update ast (bool -> Option<Span>)
2018-11-19 15:52:06 +09:00
강동윤
1d0c78de6c
More works (#66)
ecma_transforms:
 - implement es2015::instanceof
 - implement es2015::typeof_symbol
 - implement inline_globals pass

ecma_parser:
 - `PResult<T>` is now `Result<T, ()>` and `Err(())` means that an error is emitted.
 - add docs
2018-11-18 14:00:07 +09:00
강동윤
b3a9d1a264
Cleanup (#64)
- rename packages to be consistent
 - `swc_macros` is removed. Now macros are imported with `extern crate macro_name` instead of `extern crate swc_macros`.
 - manage atoms with words.txt file
2018-11-17 16:38:23 +09:00
강동윤
fb08c18f7e
Support es2019 (#63)
ast:
 - Update ast to match es2019 spec

parser:
 - implement es2019 parser
 - ignore an old test

codegen:
 - fix

testing:
 - better output while testing (when failed)

transforms:
 - fix
2018-11-17 12:30:49 +09:00
강동윤
63ee25f0c5
Cleanup (#62)
- do not reexport swc crates

 - Add benchmark for parser

 135ns/op on my macbook pro
 
 - remove unused script
 
 - Update README.md
    - Make features section complete
2018-11-17 10:02:40 +09:00
강동윤
309a9de0fd
Fix tests & upgrade deps (#60)
common:
 - upgrade rustc-ap crates to 297
 - swc_common does not reexport sourcemap anymore
 - update rustfmt to 0.99.6

simplifier:
 - make some tests success when source code is equavalent
 - implement fixer to fix ast broken by simplifier
- implement bit shift operators
- fix str.length
- ignore some tests


compat:
 - fix `**=`
 - fix es3::prop_lits
2018-11-16 20:09:17 +09:00
강동윤
6234fd7a21
parse "constructor"() as constructor (#56) 2018-11-15 21:29:47 +09:00
강동윤
fae7bfc2c7
Chores (#54)
- improve readme
 - fix lints
 - Enable lto
 - better codegen (newline after stmts)
 - add some docs

 - implement `**=` transformer

 - use `quote_ident!`
 - use `.as_arg()` instead of constructing ExprOrSpread
 - use `as_callee()`
 - inject helpers

 - fix imports

 - split libswc

 - don't mark! useless span
2018-11-15 13:29:44 +09:00
강동윤
9a5de4beb6
More transcompilers (#49)
transforms:
 - implement String.length simplifier
 - implement more arithmetic operations
 - new Date() is side-effect free
 - implement left.rhs * right
 - optimize `SeqExpr` while creation
 
 - implement es3 - member expression literals pass
 - implement es2015 - classes pass

codegen: 
 - handle infinity correctly
 - disable comments for testing (it's buggy)

ast:
 - add methods about reserved words
2018-11-14 19:40:46 +09:00
강동윤
9d7af34aab
Initial release (#45)
common:
 - rename `Folder` to `Fold`
 - folder.then()
 - impl Fold for Box<F>
 - impl Fold<T> for &mut F where F: Fold<T>

transforms:
 - make Simplifier private
 - organize compat

codegen:
 - use `Mark` to avoid deoptimization

swc:
 - upgrade rayon and use global thread pool instead
2018-11-10 17:44:35 +09:00
강동윤
e12dcf0452
Compiler baseline
- Fix binary
 - Add base for transformers

This will be last large squash.
2018-11-03 16:56:43 +09:00
강동윤
f9be576e02
Ecmascript codegen (#40)
Comment is not fully supported yet
2018-10-25 13:17:05 +09:00
강동윤
0a5f3f4ab5
rustup to 2018-08-29\ (#39)
- libswc is broken
2018-09-16 20:25:41 +09:00
강동윤
5d5f861b9d Update dependencies
- rustc toolchain to "nightly-2018-05-30"
 - rustfmt to 0.8.6
 - rustc-ap-* to 150
 - syn to 0.14
 - proc-macro2 to 0.4
 - quote to 0.6
2018-06-02 18:01:00 +09:00
강동윤
79f3660f0f
Downgrade rust toolchain to 2018-02-01 (#37) 2018-03-09 16:56:43 +09:00
강동윤
4d5efb4a9b Fix test262-parser-tests 2018-03-08 11:17:41 +09:00
강동윤
442302553d Fix library tests for parser 2018-03-08 11:04:25 +09:00
강동윤
57944ab70e Update parser to new ast.
Tests are not updated yet.
2018-03-07 17:14:16 +09:00
강동윤
f11434ee3c [WIP] Update parser 2018-03-06 22:34:42 +09:00
강동윤
00bcd8f9af Don't use #[ast_node] for temporary for-head 2018-03-06 15:07:52 +09:00
강동윤
10f83f3f02
Fix rls (again) (#33)
* Don't use `#[parser]` in lexer

* Don't use `#[parser]` in parser/util.rs

* Pin rust toolchain to nightly-2018-02-28
2018-02-28 14:35:52 +09:00
강동윤
67daa4c4e4
Fix a test about float parser (#32)
See https://github.com/rust-lang/rust/pull/48235
2018-02-27 15:31:50 +09:00
강동윤
4a30fb3436
Testing framework (#31)
- Make rls happy.
  - Some minor parser error improvements.
  - Add reference files for ecmascript parser errors.
  - Improve error message of import/export used outside of a module
2018-02-27 13:21:57 +09:00
강동윤
056a11dd06 chores: cleanup for docs; no email from travis 2018-01-27 15:14:53 +09:00
강동윤
59f11a83d1 fixup! fix tests 2018-01-27 13:42:04 +09:00
강동윤
92c7defc2e fix tests 2018-01-27 11:31:45 +09:00
강동윤
5602c376e5 Implement error reporting for ecmascript parser
Passes all test262-identity tests and all fail tests.
2018-01-26 21:53:30 +09:00
강동윤
9b2a5880bb Use FileMap as an input. 2018-01-23 21:38:48 +09:00
강동윤
0a2473fe1c Improve error reporting of ecmascript parser
And drop nll because it's currently too slow.
2018-01-22 21:47:16 +09:00
강동윤
4d52cb49d4 Implement error reporting.
* Use syntax_pos and rustc_error.
 * Use syntax_pos::Span
2018-01-21 17:47:37 +09:00
강동윤
9c646596c5 Fix ecmascript parser.
* Make span inclusive-exclusive.
 * Fix array parsing.
2018-01-17 14:06:05 +09:00
강동윤
d6e61f9638 Make expression and statement consistent. Fixes #19 2018-01-16 11:35:05 +09:00
강동윤
06731dfcb5 Cleanup and documentations for swc_common.
* Remove CanIUse trait, which will be reimpplemented in future
 using Visitor.

 * Remove some other unused stuffs.

 * Change public path of swc_common::fold::* to swc_common::*.
2018-01-15 10:33:18 +09:00
강동윤
15fde7b5ff add op! macro 2018-01-14 13:29:57 +09:00
강동윤
3b02b27d62
groundwork for docs
Ignore two tests. See #8.

Add code coverage and travis to readme.
2018-01-13 20:42:52 +09:00
강동윤
4a9d66a0f3 update test262.rs 2018-01-13 19:06:50 +09:00
강동윤
e949c40517
ECMAScript parser (#1)
- Parser and lexer for lastest ecma spec https://tc39.github.io/ecma262

  - Lexer is currently very inefficient

 - Use https://github.com/tc39/test262-parser-tests/ for testing.

 - Implement proc-macro based ast folder and assert_eq_ignore_span! based on it.

 - Some utilities for proc macro at /macros/common
2018-01-12 16:53:06 +09:00