• just a "picture" without words;)

    process.on('uncaughtException', function(err) {
      console.log('!!!UNCAUGHTEXCEPTION!!!',er­r);
    });
    
    const arr= new Uint32Array([1,2,3,4]);     // or any other ArrayView
    
    console.log('test E...');
    if (!E.xyz) console.log('E ok');   // works as expected
    console.log('test arr...');
    if (!arr.xyz) console.log('arr ok'); // throws exception - not as expected
    console.log('done all ok');
    

    EspruinoWIFI 1v96

  • Some more suspicious things...

    This behaves as expected:

    process.on('uncaughtException',(err)=>{
      console.log('!!!UNCAUGHTEXCEPTION!!!',er­r);
    });
    const arr= new Uint32Array([1,2,3,4]);
    
    console.log('-A1-');
    if (!!arr.xyz) console.log('-A2-');
    console.log('-A3-');
    

    But this

    process.on('uncaughtException',(err)=>{
      console.log('!!!UNCAUGHTEXCEPTION!!!',er­r);
    });
    const arr= new Uint32Array([1,2,3,4]);
    
    console.log('-B1-');
    try{
      if (!!arr.xyz) console.log('-B2-');
      console.log('-B3-');
    }
    catch(e){
      console.log('-B4-',e);
    }
    console.log('-B5-');
    

    reports some strange error (see 2nd UNCAUGHTEXCEPTION message):

    -B1-
    !!!UNCAUGHTEXCEPTION!!! Error {
      "msg": "Field or method \"xyz\" does not already exist, and can't create it on Uint32Array",
      "type": "Error",
      "stack": " at line 2 col 12\n  if (!!arr.xyz) console.log('-B2-');\n           ^\n"
     }
    !!!UNCAUGHTEXCEPTION!!! SyntaxError {
      "msg": "Got catch expected EOF",
      "type": "SyntaxError",
      "stack": " at line 1 col 1\ncatch(e){\n^\n"
     }
    -B5-
    

    Maybe another topic relates to this: i think that exceptions got lost without any notice when they occured inside a switch statement. i try to come up with some test code for this, too...

  • ok, as promised some sample code to reproduce the second problem when throwing inside a switch statement.

    without switch(), everything behaves as expected:

    process.on('uncaughtException',(err)=>{
      console.log('!!!UNCAUGHTEXCEPTION!!!',er­r);
    });
    /*
    expect output === achieved output:
      -D0-
      -D1-
      CATCHED ... "simulate crash"
      -D8-
      -D9-
    */
    function test( crit){
      try{
        const arr= new Uint32Array([1,2,3,4]);
        console.log('-D1-');
        if( crit) throw new Error('simulate crash');	// such as thrown by testing  Uint32Array.xyz
        console.log('-D2-');
      }
      catch(err){
        console.log('CATCHED',err);
      }
      console.log('-D8-');
    }
    
    console.log('-D0-');
    test('crash');
    console.log('-D9-');
    
    
    

    adding the switch() brings up some fancy extras:

    process.on('uncaughtException',(err)=>{
      console.log('!!!UNCAUGHTEXCEPTION!!!',er­r);
    });
    function test( crit){
      try{
        const arr= new Uint32Array([1,2,3,4]);
        console.log('-C1-');
        switch (crit) {
          case 'ok':  
            console.log('-C2-C3-');	
            break;
    
          default:  
            console.log('-C2-');
            if( crit) throw new Error('simulate crash');	// such as thrown by testing  Uint32Array.xyz
            console.log('-C3-');
            break;
        }		
        console.log('-C4-');
      }
      catch(err){
        console.log('CATCHED',err);
      }
      console.log('-C8-');
    }
    
    console.log('-C0-');
    test('crash');
    console.log('-C9-');
    

    expected output (tested on chrome):

      -C0-
      -C1-
      -C2-
      CATCHED Error: simulate crash
      -C8-
      -C9-
    

    achieved output:

      -C0-
      -C1-
      -C2-
      -C4-                                            * should not exist
      -C8-
      !!!UNCAUGHTEXCEPTION!!! ... "simulate crash"    * should be CATCHED
      -C9-
    
  • I'll look into the exception on Typed Arrays - it shouldn't complain about it at that point - only when you try and write it. I filed an issue for it here: https://github.com/espruino/Espruino/iss­ues/1351

    For your try... catch I bet you just pasted it into the left-hand side? Espruino bracket-counts to see when it should execute a line, so if you write code with all brackets closed and hit enter then it's executed. If you upload from the right-hand side of the IDE it's got some stuff in there to counteract that.

    Thanks for the report on the switch as well - I'll have a look at that. There's now an issue filed for it here https://github.com/espruino/Espruino/iss­ues/1352

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

Exception when testing non-existent property of Uint32Array and bug with throw inside switch()

Posted by Avatar for mrQ @mrQ

Actions