void defineObject() { IType obj = Context.CreateType("Object"); obj.DefineMethod("abort", obj, new string[] { }, new IType[] { }); defineString(); obj.DefineMethod("type_name", Context.GetType("String"), new string[] { }, new IType[] { }); obj.DefineMethod("copy", obj, new string[] { }, new IType[] { }); }
public void Visit(Method node) { var retType = Context.GetType(node.ReturnType); if (retType == null) { errorLog.LogError(string.Format(TypeNotExist, node.Line, node.ReturnType)); } var argTypes = node.Arguments.Select(t => Context.GetType(t.Type)); foreach (var type in argTypes) { if (type == null) { errorLog.LogError(string.Format(TypeNotExist, type)); } } var argNames = node.Arguments.Select(t => t.Name); if (!currentType.DefineMethod(node.Name, retType, argNames.ToArray(), argTypes.ToArray())) { errorLog.LogError(string.Format(MethodRedefined, node.Name, currentType.Name)); } }