;
TypeOpt
- : "(" LexSetRegExp TypedIdentifier ")" { $$ = $3; }
- | { $$ = NULL; }
+ : "(" LexSetRegExp TypedIdentifier ")" { if ($3->identifier_ != NULL) error($3->location_, "unexpected identifier"); $$ = $3; }
+ | { $$ = CYNew CYTypedIdentifier(CYNew CYTypeVariable("id")); }
;
MessageParameter
- : Word ":" TypeOpt Identifier { $$ = CYNew CYMessageParameter($1, $3, $4); }
+ : Word ":" TypeOpt Identifier { $3->identifier_ = $4; $$ = CYNew CYMessageParameter($1, $3); }
;
MessageParameterList
MessageParameters
: MessageParameterList { $$ = $1; }
- | Word { $$ = CYNew CYMessageParameter($1, NULL, NULL); }
+ | Word { $$ = CYNew CYMessageParameter($1, NULL); }
;
ClassMessageDeclaration
CYForEach (parameter, parameters_)
if (parameter->tag_ != NULL) {
out << ' ' << *parameter->tag_;
- if (parameter->name_ != NULL)
- out << ':' << *parameter->name_;
+ if (parameter->type_ != NULL)
+ out << ':' << *parameter->type_->identifier_;
}
out << code_;
#include <sstream>
static CYExpression *MessageType(CYContext &context, CYTypedIdentifier *type, CYMessageParameter *next, CYExpression *extra = NULL) {
- if (type == NULL)
- return NULL;
-
CYExpression *left($C0($M(type->Replace(context), $S("toString"))));
if (extra != NULL)
left = $ CYAdd(left, extra);
- if (next == NULL || next->name_ == NULL)
+ if (next == NULL || next->type_ == NULL)
return left;
CYExpression *right(next->TypeSignature(context));
CYVariable *self($V("self"));
CYVariable *_class($V(instance_ ? "$cys" : "$cyp"));
- CYExpression *type(TypeSignature(context) ?: $C1($M(cyn, $S("type")), _class));
-
return $ CYBlock($$->*
next_->Replace(context, replace)->*
$E($ CYAssign(cyn, parameters_->Selector(context)))->*
- $E($ CYAssign(cyt, type))->*
+ $E($ CYAssign(cyt, TypeSignature(context)))->*
$E($C4($V(replace ? "class_replaceMethod" : "class_addMethod"),
$V(instance_ ? "$cyc" : "$cym"),
cyn,
CYFunctionParameter *CYMessageParameter::Parameters(CYContext &context) const { $T(NULL)
CYFunctionParameter *next(next_->Parameters(context));
- return name_ == NULL ? next : $ CYFunctionParameter($ CYDeclaration(name_), next);
+ return type_ == NULL ? next : $ CYFunctionParameter($ CYDeclaration(type_->identifier_), next);
}
CYSelector *CYMessageParameter::Selector(CYContext &context) const {
CYSelectorPart *CYMessageParameter::SelectorPart(CYContext &context) const { $T(NULL)
CYSelectorPart *next(next_->SelectorPart(context));
- return tag_ == NULL ? next : $ CYSelectorPart(tag_, name_ != NULL, next);
+ return tag_ == NULL ? next : $ CYSelectorPart(tag_, type_ != NULL, next);
}
CYExpression *CYMessageParameter::TypeSignature(CYContext &context) const {