diff --git a/src/protocol/parser/pass_definitions.rs b/src/protocol/parser/pass_definitions.rs index f1daca6c3081615e0dee6cdde1a16065d2eaf752..23c7b2ab8be45b30fdeb1ad82d654cbc0f803963 100644 --- a/src/protocol/parser/pass_definitions.rs +++ b/src/protocol/parser/pass_definitions.rs @@ -98,7 +98,7 @@ impl PassDefinitions { Some(KW_ENUM) => self.visit_enum_definition(module, &mut iter, ctx)?, Some(KW_UNION) => self.visit_union_definition(module, &mut iter, ctx)?, Some(KW_FUNCTION) => self.visit_function_definition(module, &mut iter, ctx)?, - Some(KW_PRIMITIVE) | Some(KW_COMPOSITE) => self.visit_component_definition(module, &mut iter, ctx)?, + Some(KW_COMPONENT) => self.visit_component_definition(module, &mut iter, ctx)?, _ => return Err(ParseError::new_error_str_at_pos( &module.source, iter.last_valid_pos(), "unexpected symbol, expected a keyword marking the start of a definition" @@ -297,8 +297,8 @@ impl PassDefinitions { &mut self, module: &Module, iter: &mut TokenIter, ctx: &mut PassCtx ) -> Result<(), ParseError> { // Consume component variant and name - let (_variant_text, _) = consume_any_ident(&module.source, iter)?; - debug_assert!(_variant_text == KW_PRIMITIVE || _variant_text == KW_COMPOSITE); + let (_component_text, _) = consume_any_ident(&module.source, iter)?; + debug_assert!(_component_text == KW_COMPONENT); let (ident_text, _) = consume_ident(&module.source, iter)?; // Retrieve preallocated definition @@ -378,6 +378,7 @@ impl PassDefinitions { ("std.global", "print") => ProcedureSource::FuncPrint, ("std.random", "random_u32") => ProcedureSource::CompRandomU32, ("std.internet", "tcp_client") => ProcedureSource::CompTcpClient, + ("std.internet", "tcp_listener") => ProcedureSource::CompTcpListener, _ => panic!( "compiler error: unknown builtin procedure '{}' in module '{}'", procedure_name, module_name @@ -390,7 +391,7 @@ impl PassDefinitions { let source = match kind { ProcedureKind::Function => ProcedureSource::FuncUserDefined, - ProcedureKind::Primitive | ProcedureKind::Composite => + ProcedureKind::Component => ProcedureSource::CompUserDefined, }; @@ -1663,8 +1664,14 @@ impl PassDefinitions { // TODO: Once we start generating bytecode this is unnecessary let procedure_id = proc_def.this; let method = match proc_def.source { - ProcedureSource::FuncUserDefined => Method::UserFunction, - ProcedureSource::CompUserDefined => Method::UserComponent, + // Bit of a hack, at this point the source is not yet known, except if it is a + // builtin. So we check for the "kind" + ProcedureSource::FuncUserDefined | ProcedureSource::CompUserDefined => { + match proc_def.kind { + ProcedureKind::Function => Method::UserFunction, + ProcedureKind::Component => Method::UserComponent, + } + }, ProcedureSource::FuncGet => Method::Get, ProcedureSource::FuncPut => Method::Put, ProcedureSource::FuncFires => Method::Fires, @@ -1674,6 +1681,7 @@ impl PassDefinitions { ProcedureSource::FuncPrint => Method::Print, ProcedureSource::CompRandomU32 => Method::ComponentRandomU32, ProcedureSource::CompTcpClient => Method::ComponentTcpClient, + ProcedureSource::CompTcpListener => Method::ComponentTcpListener, _ => todo!("other procedure sources"), };