ARRAY_LENGTH_POS,
DEFAULT,
OUT,
- REF;
+ REF,
+ VFUNC_NAME,
+ VIRTUAL,
+ ABSTRACT;
public static ArgumentType? from_string (string name) {
var enum_class = (EnumClass) typeof(ArgumentType).class_ref ();
case TokenType.DEFAULT:
case TokenType.OUT:
case TokenType.REF:
+ case TokenType.VIRTUAL:
+ case TokenType.ABSTRACT:
str = get_string ();
break;
}
if (element_name == "virtual-method" || element_name == "callback") {
if (s is Method) {
((Method) s).is_virtual = true;
- if (invoker == null) {
+ if (invoker == null && !metadata.has_argument (ArgumentType.VFUNC_NAME)) {
s.attributes.append (new Attribute ("NoWrapper", s.source_reference));
}
}
((Method) s).binding = MemberBinding.STATIC;
}
+ if (s is Method) {
+ var method = (Method) s;
+ if (metadata.has_argument (ArgumentType.VIRTUAL)) {
+ method.is_virtual = metadata.get_bool (ArgumentType.VIRTUAL);
+ method.is_abstract = false;
+ } else if (metadata.has_argument (ArgumentType.ABSTRACT)) {
+ method.is_abstract = metadata.get_bool (ArgumentType.ABSTRACT);
+ method.is_virtual = false;
+ }
+ method.vfunc_name = metadata.get_string (ArgumentType.VFUNC_NAME);
+ }
+
var parameters = new ArrayList<MethodInfo> ();
var array_length_parameters = new ArrayList<int> ();
var closure_parameters = new ArrayList<int> ();