for primitive