getParam method

int getParam(
  1. ClipToken funcParam,
  2. ClipParam parentParam,
  3. ClipParam childParam
)

Implementation

int getParam( ClipToken funcParam, ClipParam parentParam, ClipParam childParam ){
	int code;
	dynamic token;
	int index;

	ClipToken? saveLine = _curLine.token();
	_curLine.setToken( funcParam );

	int i = ClipMath.charCode0;
	int j = 0;
	childParam.initUpdateParam();
	funcParam.beginGetToken();
	while( funcParam.getTokenParam( parentParam ) ){
		code  = ClipToken.curCode();
		token = ClipToken.curToken();
		if( j > 9 ){
			_curLine.setToken( saveLine );
			return _retError( ClipGlobal.procErrFuncParaNum, code, token );
		}
		childParam.updateParamCodeArray().add( code );
		childParam.updateParamIndexArray().add( 0 );
		switch( code ){
		case ClipGlobal.codeVariable:
			index = varIndexParam( parentParam, token );
			childParam.setUpdateParamIndex( j, index );
			childParam.variable().set( i, parentParam.val( index ), true );
			_updateValue( parentParam, childParam.variable().val( i ) );
			break;
		case ClipGlobal.codeAutoVar:
			index = autoVarIndex( parentParam, token );
			childParam.setUpdateParamIndex( j, index );
			childParam.variable().set( i, parentParam.val( index ), true );
			_updateValue( parentParam, childParam.variable().val( i ) );
			break;
		case ClipGlobal.codeGlobalVar:
			index = autoVarIndex( globalParam(), token );
			childParam.setUpdateParamIndex( j, index );
			childParam.variable().set( i, globalParam().val( index ), true );
			_updateValue( globalParam(), childParam.variable().val( i ) );
			break;
		case ClipGlobal.codeArray:
			index = arrayIndexParam( parentParam, token );
			childParam.setUpdateParamIndex( j, index );
			parentParam.array().dup( childParam.array(), index, i, true );
			_updateArray( parentParam, childParam.array(), i );
			if( token == 0 ){
				childParam.variable().set( i, parentParam.val( 0 ), true );
				_updateValue( parentParam, childParam.variable().val( i ) );
			}
			break;
		case ClipGlobal.codeAutoArray:
			index = autoArrayIndex( parentParam, token );
			childParam.setUpdateParamIndex( j, index );
			parentParam.array().dup( childParam.array(), index, i, true );
			_updateArray( parentParam, childParam.array(), i );
			break;
		case ClipGlobal.codeGlobalArray:
			index = autoArrayIndex( globalParam(), token );
			childParam.setUpdateParamIndex( j, index );
			globalParam().array().dup( childParam.array(), index, i, true );
			_updateArray( globalParam(), childParam.array(), i );
			break;
		case ClipGlobal.codeString:
			strSet( childParam.array(), i, token );
			break;
		case ClipGlobal.codeConstant:
			childParam.variable().set( i, token, true );
			_updateValue( parentParam, childParam.variable().val( i ) );
			break;
		case ClipGlobal.codeMatrix:
			childParam.array().setMatrix( i, token, true );
			_updateMatrix( parentParam, childParam.array().matrix(i) );
			break;
		case ClipGlobal.codeMultiPrec:
			childParam.array().move( i );
			childParam.array().mp(i).attach( (token as MPData).clone() );

			{
				var str = _procMp.fnum2str( childParam.array().mp(i), parentParam.mpPrec() );
				var val = ClipMath.stringToFloat( str, 0, ParamInteger() );
				childParam.variable().set( i, val, true );
				_updateValue( parentParam, childParam.variable().val( i ) );
			}

			break;
		default:
			_curLine.setToken( saveLine );
			return _retError( ClipGlobal.procErrFuncParaCode, code, token );
		}
		i++;
		j++;
	}

	_curLine.setToken( saveLine );

	childParam.variable().set( ClipMath.charCodeEx, j, true );

	return ClipGlobal.noErr;
}