Пример #1
0
func composeInt32(expr *ast.Expr) (funcs.Int32, error) {
	uniq, err := prep(expr, types.SINGLE_INT32)
	if err != nil {
		return nil, err
	}
	if expr.Terminal != nil {
		if expr.GetTerminal().Variable != nil {
			return funcs.NewInt32Variable(), nil
		} else {
			return funcs.NewConstInt32(expr.GetTerminal().GetInt32Value()), nil
		}
	}
	values, err := newValues(expr.GetFunction().GetParams())
	if err != nil {
		return nil, err
	}
	return funcs.NewInt32Func(uniq, values...)
}
Пример #2
0
func composeVariable(v *ast.Variable) funcs.Variable {
	switch v.Type {
	case types.SINGLE_DOUBLE:
		return funcs.NewFloat64Variable()
	case types.SINGLE_FLOAT:
		return funcs.NewFloat32Variable()
	case types.SINGLE_INT64:
		return funcs.NewInt64Variable()
	case types.SINGLE_UINT64:
		return funcs.NewUint64Variable()
	case types.SINGLE_INT32:
		return funcs.NewInt32Variable()
	case types.SINGLE_BOOL:
		return funcs.NewBoolVariable()
	case types.SINGLE_STRING:
		return funcs.NewStringVariable()
	case types.SINGLE_BYTES:
		return funcs.NewBytesVariable()
	case types.SINGLE_UINT32:
		return funcs.NewUint32Variable()
	}
	panic("unreachable")
}