/// <summary> /// Construct from a procedural type /// </summary> public RoutineDefinition(string name, ProceduralType type, RoutineDirectives dirs = null, RoutineSection body = null) : base(name, type) { this.Directives.Add(dirs); this.body = body; }
public MethodDefinition(string objname, string name, ParametersSection @params, TypeNode ret = null, RoutineDirectives dirs = null, MethodKind kind = MethodKind.Default, RoutineSection body = null) : base(objname, name, @params, ret, dirs, kind) { this.body = body; }
public RoutineDefinition(string name, ParametersSection @params, TypeNode ret = null, RoutineDirectives dirs = null, RoutineSection body = null) : base(name, @params, ret, dirs) { this.body = body; body.declaringCallable = this; }
/// <summary> /// Construct from a procedural type /// </summary> public RoutineDeclaration(string name, ProceduralType type) : base(name, type) { if (Directives == null) { Directives = new RoutineDirectives(); } }
public RoutineDeclaration(string name, ParametersSection @params, TypeNode ret = null, RoutineDirectives dirs = null) : base(name, @params, ret, dirs) { if (Directives == null) { Directives = new RoutineDirectives(); } }
public override bool Equals(object o) { if (o == null || !(o is RoutineDirectives)) { return(false); } RoutineDirectives rtype = (RoutineDirectives)o; return(Callconv == rtype.Callconv && generaldirs.SequenceEqual(rtype.generaldirs)); }
public ProceduralType(ParametersSection @params, TypeNode ret = null, RoutineDirectives dirs = null) { this.@params = @params; this.funcret = ret; if (dirs != null) { Directives = dirs; } if (ret != null) { // TODO check and emit error if any parameter is named 'Result' @params.returnVar = new OutParamDeclaration("result", ret); } }
public virtual void Add(RoutineDirectives dirs) { if (dirs == null) { return; } if (dirs.Callconv != 0) { Callconv = dirs.Callconv; } foreach (GeneralDirective dir in dirs.generaldirs) { generaldirs.Add(dir); } }
public MethodDeclaration(string objname, string name, ParametersSection @params, TypeNode ret = null, RoutineDirectives dirs = null, MethodKind kind = MethodKind.Default) : base(name, new MethodType(@params, ret, dirs, kind)) { this.objname = objname; isStatic = false; fullname = objname + "." + name; if (Directives == null) { Directives = new MethodDirectives(); } foreach (var param in @params.decls) { if (param.name == "self") { throw new IdentifierRedeclared("Method parameter cannot shadow 'self' reference"); } } }
public MethodType(ParametersSection @params, TypeNode ret = null, RoutineDirectives dirs = null, MethodKind kind = MethodKind.Default) : base(@params, ret, dirs) { this.kind = kind; }
public override void Add(RoutineDirectives dirs) { base.Add(dirs); }
public CallableDeclaration(string name, ParametersSection @params, TypeNode ret = null, RoutineDirectives dirs = null) : base(name, new ProceduralType(@params, ret, dirs)) { }