define method

void define({
  1. required String name,
  2. List<String> parameters = const [],
  3. required String replacement,
  4. required Location location,
})

Defines a new macro in the system.

This method creates either an object-like or function-like macro based on whether parameters are provided.

Parameters:

  • name - The identifier for the macro
  • parameters - Optional list of parameter names for function-like macros
  • replacement - The text/code that replaces the macro
  • location - Source location for error reporting

Throws MacroDefinitionException if the macro name is invalid.

Implementation

void define({
  required String name,
  List<String> parameters = const [],
  required String replacement,
  required Location location,
}) {
  // Validate macro name
  if (!_isValidMacroName(name)) {
    throw MacroDefinitionException(
      'Invalid macro name: $name',
      location,
    );
  }

  // Create appropriate macro type
  final macro = parameters.isEmpty
      ? MacroDefinition.object(
          name: name,
          replacement: replacement,
          location: location,
        )
      : MacroDefinition.function(
          name: name,
          parameters: parameters,
          replacement: replacement,
          location: location,
        );

  _macros[name] = macro;
}