private bool _throw() { //○○で|のエラー発生 TokenTry(); bool is_value = _value(); if (!Accept(NakoTokenType.THROW)) { TokenBack(); return(false); } TokenFinally(); NakoNodeThrow nt = new NakoNodeThrow(); nt.errorVarNo = localVar.GetIndex(NakoReservedWord.ERROR, true); // 変数「エラー値」の変数番号を取得 NakoNodeVariable v = new NakoNodeVariable(); v.varType = NakoVarType.Object; if (is_value) { v.value = new InvalidOperationException(); //TODO:set exception from value } else { v.value = new Exception(); } nt.exceptionNode = v; parentNode.AddChild(nt); tok.MoveNext(); return(true); }
private void _throw(NakoNodeThrow node) { //int errorVarNo = node.errorVarNo; //Write_r(node.exceptionNode); //addNewILCode(NakoILType.LD_LOCAL_REF, node.exceptionNode.value); //addNewILCode(NakoILType.ST_LOCAL, errorVarNo); //addNewILCode(NakoILType.LD_LOCAL_REF, errorVarNo); addNewILCode(NakoILType.THROW, node.exceptionNode.value); }