Lines Matching refs:desc
253 void ParserImpl::ParseClassAccessor(ClassElementDescriptor *desc, char32_t *nextCp)
255 ConsumeClassPrivateIdentifier(desc, nextCp);
269 ThrowIfPrivateIdent(desc, "Unexpected identifier");
275 desc->methodKind =
277 desc->methodStart = lexer_->GetToken().Start();
280 ConsumeClassPrivateIdentifier(desc, nextCp);
283 void ParserImpl::ThrowIfPrivateIdent(ClassElementDescriptor *desc, const char *msg)
285 if (desc->isPrivateIdent) {
292 void ParserImpl::ValidateClassKey(ClassElementDescriptor *desc)
294 if (((desc->modifiers & ir::ModifierFlags::ASYNC) != 0 || desc->isGenerator) &&
295 (desc->methodKind == ir::MethodDefinitionKind::GET || desc->methodKind == ir::MethodDefinitionKind::SET)) {
306 ThrowIfPrivateIdent(desc, "Private identifier can not be constructor");
308 if ((desc->modifiers & ir::ModifierFlags::STATIC) == 0) {
309 if ((desc->modifiers & ir::ModifierFlags::ASYNC) != 0 ||
310 desc->methodKind == ir::MethodDefinitionKind::GET ||
311 desc->methodKind == ir::MethodDefinitionKind::SET || desc->isGenerator) {
315 desc->methodKind = ir::MethodDefinitionKind::CONSTRUCTOR;
316 desc->methodStart = lexer_->GetToken().Start();
317 desc->newStatus |= ParserStatus::CONSTRUCTOR_FUNCTION;
319 if (desc->hasSuperClass) {
320 desc->newStatus |= ParserStatus::ALLOW_SUPER_CALL;
324 ThrowErrorIfStaticConstructor(desc->modifiers);
325 } else if (propNameStr.Is("prototype") && (desc->modifiers & ir::ModifierFlags::STATIC) != 0) {
343 ir::Expression *ParserImpl::ParseClassKey(ClassElementDescriptor *desc)
352 ValidateClassKey(desc);
356 propName->AsIdentifier()->SetPrivate(desc->isPrivateIdent);
360 ThrowIfPrivateIdent(desc, "Private identifier name can not be string");
366 if (lexer_->GetToken().Ident().Is("prototype") && (desc->modifiers & ir::ModifierFlags::STATIC) != 0) {
375 ThrowIfPrivateIdent(desc, "Private identifier name can not be number");
387 ThrowIfPrivateIdent(desc, "Unexpected character in private identifier");
388 std::tie(desc->isComputed, desc->invalidComputedProperty, desc->isIndexSignature) =
402 void ParserImpl::ValidateClassMethodStart(ClassElementDescriptor *desc, [[maybe_unused]] ir::TypeNode *typeAnnotation)
407 desc->classMethod = true;
409 if ((desc->modifiers & ir::ModifierFlags::ASYNC) != 0) {
410 desc->newStatus |= ParserStatus::ASYNC_FUNCTION;
413 if (desc->isGenerator) {
414 desc->newStatus |= ParserStatus::GENERATOR_FUNCTION;
418 void ParserImpl::ValidateClassSetter([[maybe_unused]] ClassElementDescriptor *desc,
427 void ParserImpl::ValidateClassGetter([[maybe_unused]] ClassElementDescriptor *desc,
436 ir::MethodDefinition *ParserImpl::ParseClassMethod(ClassElementDescriptor *desc,
440 if (desc->methodKind != ir::MethodDefinitionKind::SET &&
441 (desc->newStatus & ParserStatus::CONSTRUCTOR_FUNCTION) == 0) {
442 desc->newStatus |= ParserStatus::NEED_RETURN_TYPE;
445 ir::ScriptFunction *func = ParseFunction(desc->newStatus);
450 if (desc->methodKind == ir::MethodDefinitionKind::SET) {
451 ValidateClassSetter(desc, properties, propName, func);
452 } else if (desc->methodKind == ir::MethodDefinitionKind::GET) {
453 ValidateClassGetter(desc, properties, propName, func);
462 auto *method = AllocNode<ir::MethodDefinition>(desc->methodKind, ident, funcExpr, desc->modifiers, Allocator(),
463 desc->isComputed);
469 ir::ClassElement *ParserImpl::ParseClassProperty(ClassElementDescriptor *desc,
476 if (desc->classMethod) {
477 if ((desc->modifiers & ir::ModifierFlags::DECLARE) != 0) {
481 property = ParseClassMethod(desc, properties, propName, &propEnd);
482 property->SetRange({desc->propStart, propEnd});
491 if (InAmbientContext() || (desc->modifiers & ir::ModifierFlags::DECLARE) != 0) {
500 AllocNode<ir::ClassProperty>(propName, value, typeAnnotation, desc->modifiers, Allocator(), desc->isComputed);
502 property->SetRange({desc->propStart, propEnd});
507 void ParserImpl::CheckClassGeneratorMethod(ClassElementDescriptor *desc, char32_t *nextCp)
513 desc->isGenerator = true;
529 void ParserImpl::ConsumeClassPrivateIdentifier(ClassElementDescriptor *desc, char32_t *nextCp)
535 desc->isPrivateIdent = true;
593 ClassElementDescriptor desc(Allocator());
595 desc.methodKind = ir::MethodDefinitionKind::METHOD;
596 desc.newStatus = ParserStatus::ALLOW_SUPER;
597 desc.hasSuperClass = (modifiers & ir::ClassDefinitionModifiers::HAS_SUPER) != 0U;
598 desc.propStart = lexer_->GetToken().Start();
599 desc.modifiers = ParseModifiers();
602 CheckClassGeneratorMethod(&desc, &nextCp);
603 ParseClassAccessor(&desc, &nextCp);
605 if ((desc.modifiers & ir::ModifierFlags::STATIC) == 0) {
609 ir::Expression *propName = ParseClassKey(&desc);
610 ValidateClassMethodStart(&desc, nullptr);
611 ir::ClassElement *property = ParseClassProperty(&desc, properties, propName, nullptr);
627 if (desc.isPrivateIdent) {