@@ -3,36 +3,49 @@ const fs = require('fs');
33const path = require ( 'path' ) ;
44const print = console . log ;
55const exit = process . exit ;
6+ const PRE = "CodeAlchemist_V8Native"
7+ const RE = new RegExp ( PRE , "g" ) ;
68
7- function parse ( fname ) {
9+ function resolveV8Native ( src ) {
10+ src = src . replace ( / % [ a - z A - Z ] + / g, function ( src ) { return PRE + src . slice ( 1 ) } ) ;
11+ return esprima . parse ( src ) ;
12+ }
13+
14+ function parse ( fname , isV8 ) {
815 try {
9- var str = fs . readFileSync ( fname , 'utf8' ) ;
10- return esprima . parse ( str ) ;
16+ var src = fs . readFileSync ( fname , 'utf8' ) ;
17+ return esprima . parse ( src ) ;
1118 } catch ( e ) {
12- print ( fname + ' : parse error! ' + e ) ;
19+ if ( isV8 ) {
20+ try { return resolveV8Native ( src ) }
21+ catch ( e ) { print ( fname + ' : parse error! ' + e ) ; }
22+ } else print ( fname + ' : parse error! ' + e ) ;
1323 }
1424}
1525
16- function astToJson ( ast ) {
26+ function astToJson ( ast , isV8 ) {
1727 try {
1828 var ret = JSON . stringify ( ast , null , 2 ) ;
1929 } catch ( e ) {
2030 print ( 'astsToJson error!' ) ;
2131 }
32+ if ( isV8 && ret ) ret = ret . replace ( RE , "%" )
2233 return ret
2334}
2435
25- function listdir ( dir ) {
36+ function listDir ( dir ) {
2637 return fs . readdirSync ( dir )
2738}
2839
2940function main ( ) {
30- var js_dir = process . argv [ 2 ] ;
31- var json_dir = process . argv [ 3 ] ;
32- var js_files = listdir ( js_dir ) ;
41+ var engine = process . argv [ 2 ] ;
42+ var isV8 = ( engine === "V8" ) ;
43+ var js_dir = process . argv [ 3 ] ;
44+ var json_dir = process . argv [ 4 ] ;
45+ var js_files = listDir ( js_dir ) ;
3346 for ( let name of js_files ) {
3447 if ( name . endsWith ( '.js' ) ) {
35- let json = astToJson ( parse ( path . join ( js_dir , name ) ) ) ;
48+ let json = astToJson ( parse ( path . join ( js_dir , name ) , isV8 ) , isV8 ) ;
3649 if ( json !== undefined ) {
3750 fs . writeFileSync ( path . join ( json_dir , name ) , json ) ;
3851 }
0 commit comments