//добавление фиктивного метода (если метод содерж. вложенные, создается заглушка) //т. е. метод не добавл. в таблицу public MethInfo AddFictiveMethod(IFunctionNode func, MethodBuilder mi) { MethInfo m = new MethInfo(mi); //defs[func] = m; return(m); }
//добавление функции (метода) public MethInfo AddMethod(IFunctionNode func, MethodInfo mi) { MethInfo m = new MethInfo(mi); defs[func] = m; return(m); }
//добавление функции, вложенной в функцию public MethInfo AddMethod(IFunctionNode func, MethodInfo mi, MethInfo up) { MethInfo m = new MethInfo(mi); m.up_meth = up; defs[func] = m; return(m); }
//добавление конструктора public MethInfo AddConstructor(IFunctionNode func, ConstructorInfo ci) { //ConstrInfo m = new ConstrInfo(ci); MethInfo mi = new MethInfo(); mi.cnstr = ci; defs[func] = mi; return(mi); }
public ConstructorBuilder GetConstructorBuilder(IFunctionNode meth) { MethInfo ci = defs[meth] as MethInfo; if (ci != null) { return(ci.cnstr as ConstructorBuilder); } return(null); }
public MethodBuilder GetMethodBuilder(IFunctionNode meth) { MethInfo mi = defs[meth] as MethInfo; if (mi != null) { return(mi.mi as MethodBuilder); } return(null); }
static ShaderTraverseResult Traverse(this IFunctionNode node, ShaderTraverseResult result = null) { if (result.LocalDeclarations.ContainsKey(node)) { return(result); } foreach (var arg in node.NodeArguments) { arg.Traverse(result); } result.FunctionDeclarations[node.Name] = node.Code; var args = node.NodeArguments.Select(a => result.GetPhrase(a)); result.LocalDeclarations[node] = node.CreateShaderCallAssignment($"var{result.LocalDeclarations.Count}", args); return(result); }
//ssyy public static string GetFullMethodHeaderString(IFunctionNode member) { string s = member.name; IParameterNode[] ps = member.parameters; if (ps.Length > 0) { s += '('; s += ps[0].type.name; for (int i = 1; i < ps.Length; i++) { s += "," + ps[i].type.name; } s += ')'; } if (member.return_value_type != null) { s += ":" + member.return_value_type.name; } return(s); }
//добавление конструктора public MethInfo AddConstructor(IFunctionNode func, ConstructorInfo ci) { //ConstrInfo m = new ConstrInfo(ci); MethInfo mi = new MethInfo(); mi.cnstr = ci; defs[func] = mi; return mi; }
public string GetPhrase(IFunctionNode node) => LocalDeclarations[node].Identifier;
public virtual void visit(IFunctionNode value) { }
public void visit(IFunctionNode value) { string s = value.GetType().Name + "."; prepare_string_node(value.name, s + "name"); prepare_string_node(value.node_kind.ToString(), s + "node_kind"); prepare_string_node(value.node_location_kind.ToString(), s + "node_location_kind"); //prepare_collection(value.parameters, s + "parameters", "parameters", value.parameters.Length); //value.return_value_type prepare_node(value.return_value_type, s + "return_value_type"); }
public virtual void visit(IFunctionNode value) { }
private string GetPossibleAccessorName(IFunctionNode fn, out bool get_set) { /*string name = accessors_names[fn] as string; get_set = false; if (name == null) return fn.name; get_set = true; return name;*/ get_set = false; return fn.name; }
//получение метода public MethInfo GetMethod(IFunctionNode func) { return (MethInfo)defs[func]; }
//добавление функции, вложенной в функцию public MethInfo AddMethod(IFunctionNode func, MethodInfo mi, MethInfo up) { MethInfo m = new MethInfo(mi); m.up_meth = up; defs[func] = m; return m; }
//добавление функции (метода) public MethInfo AddMethod(IFunctionNode func, MethodInfo mi) { MethInfo m = new MethInfo(mi); defs[func] = m; return m; }
//добавление фиктивного метода (если метод содерж. вложенные, создается заглушка) //т. е. метод не добавл. в таблицу public MethInfo AddFictiveMethod(IFunctionNode func, MethodBuilder mi) { MethInfo m = new MethInfo(mi); //defs[func] = m; return m; }
//получение конструктора public MethInfo GetConstructor(IFunctionNode func) { MethInfo mi = (MethInfo)defs[func]; return mi; }
public MethodBuilder GetMethodBuilder(IFunctionNode meth) { MethInfo mi = defs[meth] as MethInfo; if (mi != null) return mi.mi as MethodBuilder; return null; }
//получение метода public MethInfo GetMethod(IFunctionNode func) { return((MethInfo)defs[func]); }
public ConstructorBuilder GetConstructorBuilder(IFunctionNode meth) { MethInfo ci = defs[meth] as MethInfo; if (ci != null) return ci.cnstr as ConstructorBuilder; return null; }
//получение конструктора public MethInfo GetConstructor(IFunctionNode func) { MethInfo mi = (MethInfo)defs[func]; return(mi); }
public void visit(IFunctionNode value) { throw new System.NotSupportedException(value.GetType().ToString()); }