@@ -954,10 +954,6 @@ namespace pxt.py {
954954 return v . kind == "Name" && ( v as py . Name ) . id == "self"
955955 }
956956
957- function sourceAt ( e : py . AST ) {
958- return ( ctx . currModule . source [ e . lineno - 1 ] || "" ) . slice ( e . col_offset )
959- }
960-
961957 const exprMap : Map < ( v : py . Expr ) => B . JsNode > = {
962958 BoolOp : ( n : py . BoolOp ) => {
963959 let r = expr ( n . values [ 0 ] )
@@ -1258,11 +1254,7 @@ namespace pxt.py {
12581254 } ,
12591255 Num : ( n : py . Num ) => {
12601256 unify ( n . tsType , tpNumber )
1261- let src = sourceAt ( n )
1262- let m = / ^ ( 0 [ b o x ] [ 0 - 9 a - f ] + ) / i. exec ( src )
1263- if ( m )
1264- return B . mkText ( m [ 1 ] )
1265- return B . mkText ( n . n + "" )
1257+ return B . mkText ( n . ns )
12661258 } ,
12671259 Str : ( n : py . Str ) => {
12681260 unify ( n . tsType , tpString )
@@ -1355,16 +1347,7 @@ namespace pxt.py {
13551347 U . oops ( e . kind + " - unknown stmt" )
13561348 }
13571349
1358- let cmts : string [ ] = [ ]
1359- let scmts = ctx . currModule . comments
1360- if ( scmts ) {
1361- for ( let i = 0 ; i < e . lineno ; ++ i ) {
1362- if ( scmts [ i ] ) {
1363- cmts . push ( scmts [ i ] )
1364- scmts [ i ] = null
1365- }
1366- }
1367- }
1350+ let cmts : string [ ] = ( e . _comments || [ ] ) . map ( c => c . value )
13681351
13691352 let r = f ( e )
13701353 if ( currErrs ) {
@@ -1400,14 +1383,6 @@ namespace pxt.py {
14001383 ]
14011384 }
14021385
1403- function parseComments ( mod : py . Module ) {
1404- mod . comments = mod . source . map ( l => {
1405- let m = / ( \s | ^ ) # \s * ( .* ) / . exec ( l )
1406- if ( m ) return m [ 2 ]
1407- return null
1408- } )
1409- }
1410-
14111386 function iterPy ( e : py . AST , f : ( v : py . AST ) => void ) {
14121387 if ( ! e ) return
14131388 f ( e )
@@ -1419,4 +1394,72 @@ namespace pxt.py {
14191394 v . forEach ( ( x : any ) => iterPy ( x , f ) )
14201395 } )
14211396 }
1397+
1398+ export function convert ( mpkg : MainPackage , opts : pxtc . CompileOptions ) {
1399+ moduleAst = { }
1400+
1401+ if ( ! opts . generatedFiles )
1402+ opts . generatedFiles = [ ]
1403+
1404+ for ( const pkg of mpkg . sortedDeps ( ) ) {
1405+ for ( const f of pkg . getFiles ( ) ) {
1406+ if ( ! U . endsWith ( f , ".py" ) )
1407+ continue
1408+ let sn = f
1409+ let modname = f . replace ( / ^ \. p y / , "" )
1410+ if ( pkg . level > 0 )
1411+ sn = "pxt_modules/" + pkg . id + "/" + f
1412+ let src = pkg . readFile ( f )
1413+
1414+ try {
1415+ let tokens = pxt . py . lex ( src )
1416+ console . log ( pxt . py . tokensToString ( tokens ) )
1417+ let stmts = pxt . py . parse ( src , sn , tokens )
1418+ console . log ( pxt . py . dump ( stmts ) )
1419+
1420+ sn += ".ts"
1421+
1422+ moduleAst [ modname ] = {
1423+ kind : "Module" ,
1424+ body : stmts ,
1425+ name : modname ,
1426+ tsFilename : sn
1427+ } as any
1428+ } catch ( e ) {
1429+ // TODO
1430+ console . log ( "Parse error" , e )
1431+ }
1432+ }
1433+ }
1434+
1435+ for ( let i = 0 ; i < 5 ; ++ i ) {
1436+ currIteration = i
1437+ for ( let m of U . values ( moduleAst ) ) {
1438+ try {
1439+ toTS ( m )
1440+ } catch ( e ) {
1441+ console . log ( "Conv pass error" , e ) ;
1442+ }
1443+ }
1444+ }
1445+
1446+ let files : pxt . Map < string > = { }
1447+
1448+ currIteration = 1000
1449+ for ( let m of U . values ( moduleAst ) ) {
1450+ try {
1451+ let nodes = toTS ( m )
1452+ if ( ! nodes ) return
1453+ let res = B . flattenNode ( nodes )
1454+ opts . sourceFiles . push ( m . tsFilename )
1455+ opts . generatedFiles . push ( m . tsFilename )
1456+ opts . fileSystem [ m . tsFilename ] = res . output
1457+ } catch ( e ) {
1458+ console . log ( "Conv error" , e ) ;
1459+ }
1460+ }
1461+ }
1462+
1463+
1464+ pxt . conversionPasses . push ( convert )
14221465}
0 commit comments