(&mut self)
| 472 | "life" => self.ops.push(Op::Life), |
| 473 | "lifetime" => self.ops.push(Op::Lifetime), |
| 474 | "age_left" => self.ops.push(Op::AgeLeft), |
| 475 | "age01" => self.ops.push(Op::Age01), |
| 476 | "spawn_time" => self.ops.push(Op::SpawnTime), |
| 477 | "emitter_time" => self.ops.push(Op::EmitterTime), |
| 478 | "speed" => self.ops.push(Op::Speed), |
| 479 | "id" => self.ops.push(Op::Id), |
| 480 | "dir_x" => self.ops.push(Op::DirX), |
| 481 | "dir_y" => self.ops.push(Op::DirY), |
| 482 | "dir_z" => self.ops.push(Op::DirZ), |
| 483 | "vel_x" => self.ops.push(Op::VelX), |
| 484 | "vel_y" => self.ops.push(Op::VelY), |
| 485 | "vel_z" => self.ops.push(Op::VelZ), |
| 486 | "rand" => self.ops.push(Op::Rand), |
| 487 | "rand2" => self.ops.push(Op::Rand2), |
| 488 | "rand3" => self.ops.push(Op::Rand3), |
| 489 | "seed" => self.ops.push(Op::Seed), |
| 490 | "ring_u" => self.ops.push(Op::RingU), |
| 491 | "index01" => self.ops.push(Op::Index01), |
| 492 | "emitter_x" => self.ops.push(Op::EmitterX), |
| 493 | "emitter_y" => self.ops.push(Op::EmitterY), |
| 494 | "emitter_z" => self.ops.push(Op::EmitterZ), |
| 495 | "prev_x" => self.ops.push(Op::PrevX), |
| 496 | "prev_y" => self.ops.push(Op::PrevY), |
| 497 | "prev_z" => self.ops.push(Op::PrevZ), |
| 498 | "pi" => self.ops.push(Op::Const(std::f32::consts::PI)), |
| 499 | "tau" => self.ops.push(Op::Const(std::f32::consts::TAU)), |
| 500 | _ => return Err(CompileError::UnknownIdentifier), |
| 501 | } |
| 502 | Ok(()) |
| 503 | } |
| 504 | |
| 505 | fn parse_args(&mut self) -> Result<usize, CompileError> { |
| 506 | let mut argc = 0usize; |
| 507 | self.skip_ws(); |
| 508 | if self.eat(b')') { |
| 509 | return Ok(argc); |
| 510 | } |
| 511 | loop { |
| 512 | self.parse_expr()?; |
| 513 | argc += 1; |
| 514 | self.skip_ws(); |
| 515 | if self.eat(b',') { |
| 516 | continue; |
| 517 | } |
| 518 | self.expect(b')')?; |
| 519 | break; |
| 520 | } |
| 521 | Ok(argc) |
| 522 | } |
| 523 | |
| 524 | fn parse_ident(&mut self) -> Option<String> { |
| 525 | self.skip_ws(); |
| 526 | let start = self.i; |
| 527 | while self.i < self.s.len() |
| 528 | && (self.s[self.i].is_ascii_alphanumeric() || self.s[self.i] == b'_') |
| 529 | { |
| 530 | self.i += 1; |
| 531 | } |
no test coverage detected