Fix a doozy of a bug in #nashorn - engine.eval('(' + jsonContainingArray + ')' ) does not return same result as JSON.parse( jsonContainingArray )
This commit is contained in:
parent
5754816017
commit
c01ce603c5
2 changed files with 48 additions and 7 deletions
|
@ -4,10 +4,12 @@ var _dataDir = null,
|
||||||
module.exports = function( rootDir, $ ) {
|
module.exports = function( rootDir, $ ) {
|
||||||
|
|
||||||
var _load = function( name ) {
|
var _load = function( name ) {
|
||||||
return $.scload( _dataDir.canonicalPath + '/' + name + '-store.json' );
|
var result = $.scloadJSON( _dataDir.canonicalPath + '/' + name + '-store.json' );
|
||||||
|
return result;
|
||||||
};
|
};
|
||||||
var _save = function( name, data ) {
|
|
||||||
$.scsave( data, _dataDir.canonicalPath + '/' + name + '-store.json' );
|
var _save = function( name, objToSave ) {
|
||||||
|
$.scsave( objToSave, _dataDir.canonicalPath + '/' + name + '-store.json' );
|
||||||
};
|
};
|
||||||
|
|
||||||
_dataDir = new java.io.File( rootDir, 'data' );
|
_dataDir = new java.io.File( rootDir, 'data' );
|
||||||
|
@ -23,7 +25,7 @@ module.exports = function( rootDir, $ ) {
|
||||||
}
|
}
|
||||||
if ( !write ) {
|
if ( !write ) {
|
||||||
dataFromFile = _load( name );
|
dataFromFile = _load( name );
|
||||||
if ( dataFromFile ) {
|
if ( typeof dataFromFile != 'undefined') {
|
||||||
for ( i in dataFromFile ) {
|
for ( i in dataFromFile ) {
|
||||||
data[i] = dataFromFile[i];
|
data[i] = dataFromFile[i];
|
||||||
}
|
}
|
||||||
|
|
|
@ -443,14 +443,15 @@ function __onEnable ( __engine, __plugin, __script )
|
||||||
/*
|
/*
|
||||||
Save a javascript object to a file (saves using JSON notation)
|
Save a javascript object to a file (saves using JSON notation)
|
||||||
*/
|
*/
|
||||||
var _save = function( object, filename ) {
|
var _save = function( objToSave, filename ) {
|
||||||
var objectToStr = null,
|
var objectToStr = null,
|
||||||
f,
|
f,
|
||||||
out;
|
out;
|
||||||
try {
|
try {
|
||||||
objectToStr = JSON.stringify( object, null, 2 );
|
objectToStr = JSON.stringify( objToSave, null, 2 );
|
||||||
|
|
||||||
} catch( e ) {
|
} catch( e ) {
|
||||||
print( 'ERROR: ' + e.getMessage() + ' while saving ' + filename );
|
console.error( 'ERROR: ' + e.getMessage() + ' while saving ' + filename );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
f = (filename instanceof File) ? filename : new File(filename);
|
f = (filename instanceof File) ? filename : new File(filename);
|
||||||
|
@ -466,6 +467,43 @@ function __onEnable ( __engine, __plugin, __script )
|
||||||
return __engine.eval( str );
|
return __engine.eval( str );
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _loadJSON = function ( filename ){
|
||||||
|
var result = null,
|
||||||
|
file = filename,
|
||||||
|
r,
|
||||||
|
reader,
|
||||||
|
br,
|
||||||
|
contents;
|
||||||
|
|
||||||
|
if ( !( filename instanceof File ) ) {
|
||||||
|
file = new File(filename);
|
||||||
|
}
|
||||||
|
var canonizedFilename = _canonize( file );
|
||||||
|
|
||||||
|
if ( file.exists() ) {
|
||||||
|
reader = new FileReader( file );
|
||||||
|
br = new BufferedReader( reader );
|
||||||
|
contents = '';
|
||||||
|
try {
|
||||||
|
while ( (r = br.readLine()) !== null ) {
|
||||||
|
contents += r + '\n';
|
||||||
|
}
|
||||||
|
result = JSON.parse(contents);
|
||||||
|
} catch ( e ) {
|
||||||
|
logger.severe( 'Error evaluating ' + canonizedFilename + ', ' + e );
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
try {
|
||||||
|
reader.close();
|
||||||
|
} catch ( re ) {
|
||||||
|
// fail silently on reader close error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
|
||||||
|
};
|
||||||
/*
|
/*
|
||||||
Load the contents of the file and evaluate as javascript
|
Load the contents of the file and evaluate as javascript
|
||||||
*/
|
*/
|
||||||
|
@ -570,6 +608,7 @@ function __onEnable ( __engine, __plugin, __script )
|
||||||
global.alert = _echo;
|
global.alert = _echo;
|
||||||
global.scload = _load;
|
global.scload = _load;
|
||||||
global.scsave = _save;
|
global.scsave = _save;
|
||||||
|
global.scloadJSON = _loadJSON;
|
||||||
|
|
||||||
var configRequire = _load( jsPluginsRootDirName + '/lib/require.js', true );
|
var configRequire = _load( jsPluginsRootDirName + '/lib/require.js', true );
|
||||||
/*
|
/*
|
||||||
|
|
Reference in a new issue