2016-08-31 6 views
0

IDLの経験はあまりありませんが、コンパイルの失敗ステータスを呼び出し元のスクリプトに戻す必要があるバグを修正する必要があります。IDLのコンパイルでエラーが返されない

cat <<ENDCAT> something.pro 

    PRINT, "Start" 

    PRINT, "Compiling functions needing early compile" 
    @do_early_func 

    PRINT, "Compiling remaining functions" 
    @do_other_func 

    PRINT, "Running: resolve_all" 
    resolve_all 

    EXIT 

    ENDCAT 

    setenv IDL_STARTUP something.pro 

    $IDL_DIR/bin/idl 

上記の内容はと呼ばれる別のスクリプトによって呼び出されMAKE_PROGRAMというスクリプト内に存在し、私が直面しています問題がある

build_scriptそのコンパイルの失敗であっても「resolve_allの成績make_programは、build_scriptに常にtrueを返します。実際にはコンパイルが成功したと判断します。失敗ステータスを呼び出し元のスクリプトに戻すにはどうすればよいですか?

答えて

0

EXITルーチンには、スクリプトの終了ステータスを返すことができるSTATUSキーワードがあります。だから、のようなもの:RESOLVE_ALLが正常に完了した場合、あなたはCATCHブロックを行う必要があります決定するため

exit, status=status_code 

。最も簡単な方法は、おそらくRESOLVE_ALLが成功したかどうかを返すERRORキーワードを持つ自分のルーチンにRESOLVE_ALLをラップすることです。

0

私はこれを拾った場所がわからないんだけど、あなたが2つのルーチン必要があります:あなたは、その後validate_syntaxを呼び出す

function validate_syntax_helper, routineName 

    compile_opt strictarr, hidden 

    catch, error 
    if (error ne 0) then return, 0 

    resolve_routine, routineName, /either, /compile_full_file 
    return, 1 

end 

function validate_syntax, routineName 

    compile_opt strictarr, hidden 

    oldquiet = !quiet 
    !quiet = 1 

    catch, error 
    if (error ne 0) then return, 0 

    ; Get current directory 
    cd, current=pwd 

    o = obj_new('IDL_IDLBridge') 
    o->execute, '@' + pref_get('IDL_STARTUP') 
    ; Change to current directory 
    o->execute, 'cd, ''' + pwd + '''' 
    ; Validate syntax 
    cmd = 'result = validate_syntax_helper(''' + routineName + ''')' 
    o->execute, cmd 
    result = o->getVar('result') 
    obj_destroy, o 

    !quiet = oldquiet 

    return, result 

end 

を、それはコンパイルすることができたときに1を返すと、 0できない場合があります。私はexecuteを使用しているので、これはIDL仮想マシンからは使えないと思いますが、それはあなたにとって重要ではないかもしれません。 resolve_allではなく、コンパイルするすべてのルーチンでこれを手動で実行する必要があります。

関連する問題