v9.CheckScriptFailure(lines, 'E1349: Function "Methods" of interface "Some" not implemented')
enddef
+def Test_class_used_as_type()
+ var lines =<< trim END
+ vim9script
+
+ class Point
+ this.x = 0
+ this.y = 0
+ endclass
+
+ var p: Point
+ p = Point.new(2, 33)
+ assert_equal(2, p.x)
+ assert_equal(33, p.y)
+ END
+ v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+
+ interface HasX
+ this.x: number
+ endinterface
+
+ class Point implements HasX
+ this.x = 0
+ this.y = 0
+ endclass
+
+ var p: Point
+ p = Point.new(2, 33)
+ var hx = p
+ assert_equal(2, hx.x)
+ END
+ v9.CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+
+ class Point
+ this.x = 0
+ this.y = 0
+ endclass
+
+ var p: Point
+ p = 'text'
+ END
+ v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected object but got string')
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
break;
}
+ // It can be a class or interface name.
+ typval_T tv;
+ tv.v_type = VAR_UNKNOWN;
+ if (eval_variable(*arg, len, 0, &tv, NULL,
+ EVAL_VAR_VERBOSE + EVAL_VAR_IMPORT) == OK)
+ {
+ if (tv.v_type == VAR_CLASS && tv.vval.v_class != NULL)
+ {
+ type_T *type = get_type_ptr(type_gap);
+ if (type != NULL)
+ {
+ // Although the name is that of a class or interface, the type
+ // uses will be an object.
+ type->tt_type = VAR_OBJECT;
+ type->tt_member = (type_T *)tv.vval.v_class;
+ clear_tv(&tv);
+ *arg += len;
+ return type;
+ }
+ }
+
+ clear_tv(&tv);
+ }
+
if (give_error)
semsg(_(e_type_not_recognized_str), *arg);
return NULL;