@@ -2387,19 +2387,22 @@ function prolog_js_call(request, result)
2387
2387
}
2388
2388
}
2389
2389
2390
+ if ( obj == null || obj == undefined )
2391
+ throw new TypeError ( `${ obj } has no attribute ${ fname } ` ) ;
2392
+
2390
2393
const func = obj [ fname ] ;
2391
2394
if ( typeof ( func ) === "function" )
2392
2395
return func . apply ( obj , args ) ;
2393
2396
else
2394
- console . error ( `Function ${ fname } is not defined on ${ obj } `) ;
2397
+ throw new TypeError ( ` ${ obj } . ${ fname } is not a function `) ;
2395
2398
}
2396
2399
2397
- for ( let i = 0 ; i < ar . length ; i ++ )
2398
- { const next = ar [ i ] ;
2400
+ for ( let i = 0 ; i < ar . length ; i ++ ) {
2401
+ const next = ar [ i ] ;
2399
2402
2400
- if ( typeof ( next ) === "string" )
2401
- { if ( i == 0 )
2402
- { switch ( next )
2403
+ if ( typeof ( next ) === "string" ) {
2404
+ if ( i == 0 ) {
2405
+ switch ( next )
2403
2406
{ case "prolog" :
2404
2407
obj = prolog ;
2405
2408
break ;
@@ -2409,13 +2412,15 @@ function prolog_js_call(request, result)
2409
2412
default :
2410
2413
obj = eval ( next ) ;
2411
2414
}
2412
- } else
2413
- { obj = obj [ next ] ;
2415
+ } else if ( obj == null || obj == undefined ) {
2416
+ throw new TypeError ( `${ obj } has no attribute ${ next } ` ) ;
2417
+ } else {
2418
+ obj = obj [ next ] ;
2414
2419
}
2415
- } else if ( next . v !== undefined )
2416
- { obj = next . v ;
2417
- } else
2418
- { const args = next . args . map ( ( v ) => eval_chain ( v ) ) ;
2420
+ } else if ( next . v !== undefined ) {
2421
+ obj = next . v ;
2422
+ } else {
2423
+ const args = next . args . map ( ( v ) => eval_chain ( v ) ) ;
2419
2424
2420
2425
obj = eval_one ( obj , next . f , args ) ;
2421
2426
}
@@ -2424,28 +2429,31 @@ function prolog_js_call(request, result)
2424
2429
return obj ;
2425
2430
}
2426
2431
2427
- try
2428
- { return prolog . with_frame ( ( ) =>
2429
- { const ar = prolog . toJSON ( request , { string : "string" } ) ;
2432
+ try {
2433
+ return prolog . with_frame ( ( ) => {
2434
+ const ar = prolog . toJSON ( request , { string : "string" } ) ;
2430
2435
let obj ;
2431
2436
2432
- if ( ar . setter )
2433
- { const target = eval_chain ( ar . target ) ;
2437
+ if ( ar . setter ) {
2438
+ const target = eval_chain ( ar . target ) ;
2434
2439
const value = eval_chain ( ar . value ) ;
2435
2440
target [ ar . setter ] = value ;
2436
2441
obj = true ;
2437
- } else
2438
- { obj = eval_chain ( ar ) ;
2442
+ } else {
2443
+ obj = eval_chain ( ar ) ;
2439
2444
}
2440
2445
2441
2446
return prolog . unify ( result , prolog . toProlog ( obj ) ) ;
2442
2447
} , false ) ;
2443
- } catch ( e )
2444
- { return prolog . bindings . PL_raise_exception (
2445
- prolog . toProlog ( new prolog . Compound ( "error" ,
2446
- [ new prolog . Compound ( "js_error" , [ e . toString ( ) ] ) ,
2447
- new prolog . Var ( )
2448
- ] ) ) ) ;
2448
+ } catch ( e ) {
2449
+ return prolog . bindings . PL_raise_exception (
2450
+ prolog . toProlog ( new prolog . Compound (
2451
+ "error" ,
2452
+ new prolog . Compound ( "js_eval_error" ,
2453
+ e . toString ( ) ,
2454
+ new prolog . Term ( request ) ) ,
2455
+ new prolog . Var ( )
2456
+ ) ) ) ;
2449
2457
}
2450
2458
}
2451
2459
0 commit comments