@@ -667,7 +667,7 @@ const EasyCoder_Core = {
667
667
run : program => {
668
668
const command = program [ program . pc ] ;
669
669
const moduleRecord = program . getSymbolRecord ( command . module ) ;
670
- const p = moduleRecord . program ;
670
+ const p = EasyCoder . scripts [ moduleRecord . program ] ;
671
671
p . run ( p . onClose ) ;
672
672
return command . pc + 1 ;
673
673
}
@@ -959,8 +959,6 @@ const EasyCoder_Core = {
959
959
} ,
960
960
961
961
run : program => {
962
- program . parent . run ( program . parent . nextPc ) ;
963
- program . parent . nextPc = 0 ;
964
962
program . exit ( ) ;
965
963
return 0 ;
966
964
}
@@ -1176,7 +1174,7 @@ const EasyCoder_Core = {
1176
1174
newRecord . extra = symbolRecord . extra ;
1177
1175
newRecord . isValueHolder = symbolRecord . isValueHolder ;
1178
1176
if ( symbolRecord . program ) {
1179
- newRecord . program = symbolRecord . program ;
1177
+ newRecord . program = symbolRecord . program . script ;
1180
1178
}
1181
1179
newRecord . imported = true ;
1182
1180
if ( ! compiler . tokenIs ( `and` ) ) {
@@ -1289,8 +1287,7 @@ const EasyCoder_Core = {
1289
1287
} ,
1290
1288
1291
1289
run : program => {
1292
- const command = program [ program . pc ] ;
1293
- return command . pc + 1 ;
1290
+ return program [ program . pc ] . pc + 1 ;
1294
1291
}
1295
1292
} ,
1296
1293
@@ -1650,13 +1647,11 @@ const EasyCoder_Core = {
1650
1647
compile : compiler => {
1651
1648
const lino = compiler . getLino ( ) ;
1652
1649
const script = compiler . getNextValue ( ) ;
1653
- let program = compiler . getProgram ( ) ;
1654
1650
const imports = [ ] ;
1655
1651
if ( compiler . tokenIs ( `with` ) ) {
1656
1652
while ( true ) {
1657
1653
if ( compiler . nextIsSymbol ( true ) ) {
1658
1654
const symbolRecord = compiler . getSymbolRecord ( ) ;
1659
- // symbolRecord.exporter = program.script;
1660
1655
imports . push ( symbolRecord . name ) ;
1661
1656
compiler . next ( ) ;
1662
1657
if ( ! compiler . tokenIs ( `and` ) ) {
@@ -1669,7 +1664,7 @@ const EasyCoder_Core = {
1669
1664
if ( compiler . tokenIs ( `as` ) ) {
1670
1665
if ( compiler . nextIsSymbol ( true ) ) {
1671
1666
const moduleRecord = compiler . getSymbolRecord ( ) ;
1672
- moduleRecord . program = program ;
1667
+ // moduleRecord.program = program.script ;
1673
1668
compiler . next ( ) ;
1674
1669
if ( moduleRecord . keyword !== `module` ) {
1675
1670
throw new Error ( `'${ moduleRecord . name } ' is not a module` ) ;
@@ -1806,9 +1801,9 @@ const EasyCoder_Core = {
1806
1801
const command = program [ program . pc ] ;
1807
1802
const message = program . getValue ( command . message ) ;
1808
1803
if ( command . recipient === `parent` ) {
1809
- const parent = program . parent ;
1810
- if ( parent ) {
1811
- const onMessage = program . parent . onMessage ;
1804
+ if ( program . parent ) {
1805
+ const parent = EasyCoder . scripts [ program . parent ] ;
1806
+ const onMessage = parent . onMessage ;
1812
1807
if ( onMessage ) {
1813
1808
parent . message = message ;
1814
1809
parent . run ( parent . onMessage ) ;
@@ -1817,8 +1812,9 @@ const EasyCoder_Core = {
1817
1812
} else {
1818
1813
const recipient = program . getSymbolRecord ( command . recipient ) ;
1819
1814
if ( recipient . program ) {
1820
- recipient . program . message = message ;
1821
- recipient . program . run ( recipient . program . onMessage ) ;
1815
+ let rprog = EasyCoder . scripts [ recipient . program ] ;
1816
+ rprog . message = message ;
1817
+ rprog . run ( rprog . onMessage ) ;
1822
1818
}
1823
1819
}
1824
1820
return command . pc + 1 ;
@@ -2027,8 +2023,11 @@ const EasyCoder_Core = {
2027
2023
}
2028
2024
break ;
2029
2025
case `setReady` :
2030
- program . parent . run ( program . parent . nextPc ) ;
2031
- program . parent . nextPc = 0 ;
2026
+ let parent = EasyCoder . scripts [ program . parent ] ;
2027
+ if ( parent ) {
2028
+ parent . run ( parent . nextPc ) ;
2029
+ parent . nextPc = 0 ;
2030
+ }
2032
2031
break ;
2033
2032
case `setArray` :
2034
2033
targetRecord = program . getSymbolRecord ( command . target ) ;
@@ -2235,7 +2234,7 @@ const EasyCoder_Core = {
2235
2234
const command = program [ program . pc ] ;
2236
2235
if ( command . name ) {
2237
2236
const symbolRecord = program . getSymbolRecord ( command . name ) ;
2238
- symbolRecord . program . exit ( ) ;
2237
+ EasyCoder . scripts [ symbolRecord . program ] . exit ( ) ;
2239
2238
} else {
2240
2239
return 0 ;
2241
2240
}
@@ -2435,7 +2434,9 @@ const EasyCoder_Core = {
2435
2434
const command = program [ program . pc ] ;
2436
2435
const value = program . getValue ( command . value ) ;
2437
2436
setTimeout ( function ( ) {
2438
- program . run ( command . pc + 1 ) ;
2437
+ if ( program . run ) {
2438
+ program . run ( command . pc + 1 ) ;
2439
+ }
2439
2440
} , value * command . multiplier ) ;
2440
2441
return 0 ;
2441
2442
}
@@ -3595,7 +3596,7 @@ const EasyCoder = {
3595
3596
imports . caller = program . script ;
3596
3597
const moduleRecord = command . module ? program . getSymbolRecord ( command . module ) : null ;
3597
3598
try {
3598
- EasyCoder . tokeniseAndCompile ( script . split ( `\n` ) , imports , moduleRecord , this , command . then ) ;
3599
+ EasyCoder . tokeniseAndCompile ( script . split ( `\n` ) , imports , moduleRecord , this . script , command . then ) ;
3599
3600
} catch ( err ) {
3600
3601
EasyCoder . reportError ( err , program , program . source ) ;
3601
3602
if ( program . onError ) {
@@ -3666,7 +3667,7 @@ const EasyCoder = {
3666
3667
program . module = module ;
3667
3668
program . parent = parent ;
3668
3669
if ( module ) {
3669
- module . program = program ;
3670
+ module . program = program . script ;
3670
3671
}
3671
3672
return program ;
3672
3673
} ,
@@ -3749,7 +3750,11 @@ const EasyCoder = {
3749
3750
}
3750
3751
}
3751
3752
if ( program ) {
3752
- program . onExit = then ;
3753
+ EasyCoder . scripts [ program . script ] = program ;
3754
+ if ( module ) {
3755
+ module . program = program . script ;
3756
+ }
3757
+ program . afterExit = then ;
3753
3758
program . running = true ;
3754
3759
EasyCoder_Run . run ( program , 0 ) ;
3755
3760
}
@@ -4028,11 +4033,19 @@ const EasyCoder_Run = {
4028
4033
4029
4034
exit : ( program ) => {
4030
4035
if ( program . onExit ) {
4031
- delete EasyCoder . scripts [ program . script ] ;
4032
- program . parent . run ( program . onExit ) ;
4033
- program . module . program = null ;
4034
- program . running = false ;
4035
- program = null ;
4036
+ program . run ( program . onExit ) ;
4037
+ }
4038
+ let parent = program . parent ;
4039
+ let afterExit = program . afterExit ;
4040
+ delete EasyCoder . scripts [ program . script ] ;
4041
+ if ( program . module ) {
4042
+ delete program . module . program ;
4043
+ }
4044
+ Object . keys ( program ) . forEach ( function ( key ) {
4045
+ delete program [ key ] ;
4046
+ } ) ;
4047
+ if ( parent && afterExit ) {
4048
+ EasyCoder . scripts [ parent ] . run ( afterExit ) ;
4036
4049
}
4037
4050
}
4038
4051
} ;
@@ -4235,7 +4248,7 @@ const EasyCoder_Value = {
4235
4248
return value ;
4236
4249
}
4237
4250
} ;
4238
- EasyCoder . version = `2.5.2 ` ;
4251
+ EasyCoder . version = `2.5.4 ` ;
4239
4252
EasyCoder . timestamp = Date . now ( ) ;
4240
4253
console . log ( `EasyCoder loaded; waiting for page` ) ;
4241
4254
0 commit comments