MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / parse_error_handling

Method parse_error_handling

aiscript-vm/src/parser/mod.rs:1916–1953  ·  view source on GitHub ↗

Parse error handling after a call/invoke

(&mut self)

Source from the content-addressed store, hash-verified

1914
1915 // Parse error handling after a call/invoke
1916 fn parse_error_handling(&mut self) -> Option<ErrorHandler<'gc>> {
1917 let mut handler = None;
1918 if self.match_token(TokenType::Pipe) {
1919 self.consume(
1920 TokenType::Identifier,
1921 "Expect error variable name after '|'.",
1922 );
1923 let error_var = self.previous;
1924
1925 self.consume(TokenType::Pipe, "Expect closing '|' after error variable.");
1926 self.consume(
1927 TokenType::OpenBrace,
1928 "Expect '{' before error handler body.",
1929 );
1930
1931 let handler_body = self.block_expr();
1932
1933 handler = Some(ErrorHandler {
1934 error_var,
1935 handler_body,
1936 propagate: false,
1937 });
1938 } else if self.match_token(TokenType::Question) {
1939 // Validate ? operator usage
1940 if !self.in_error_function() {
1941 self.error("Cannot use '?' operator in function that doesn't declare error types.");
1942 } else {
1943 // If we saw a ? but no handler, create an implicit propagation handler
1944 handler = Some(ErrorHandler {
1945 error_var: Token::default(), // Dummy token since we don't need a variable name
1946 handler_body: Vec::new(), // Empty body since we're just propagating
1947 propagate: true,
1948 });
1949 }
1950 }
1951
1952 handler
1953 }
1954
1955 fn raise_statement(&mut self) -> Option<Stmt<'gc>> {
1956 if self.fn_type.is_lambda() {

Callers 5

lambdaMethod · 0.80
pipe_arrowMethod · 0.80
objectMethod · 0.80
callMethod · 0.80
dotMethod · 0.80

Calls 5

match_tokenMethod · 0.80
block_exprMethod · 0.80
in_error_functionMethod · 0.80
consumeMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected