func exprToName(e *ast.Expr) *ast.NameExpr { if e.GetBuiltIn() != nil { if e.GetBuiltIn().GetSymbol().String() == "==" { if e.GetBuiltIn().GetExpr().GetTerminal() != nil { t := e.GetBuiltIn().GetExpr().GetTerminal() if t.DoubleValue != nil { return ast.NewDoubleName(t.GetDoubleValue()) } if t.IntValue != nil { return ast.NewIntName(t.GetIntValue()) } if t.UintValue != nil { return ast.NewUintName(t.GetUintValue()) } if t.BoolValue != nil { return ast.NewBoolName(t.GetBoolValue()) } if t.StringValue != nil { return ast.NewStringName(t.GetStringValue()) } if t.BytesValue != nil { return ast.NewBytesName(t.GetBytesValue()) } } else { panic("todo") } } else { panic("todo") } } if e.GetFunction() != nil { if e.GetFunction().GetName() == "not" { return ast.NewAnyNameExcept(exprToName(e.GetFunction().GetParams()[0])) } if e.GetFunction().GetName() == "or" { return ast.NewNameChoice( exprToName(e.GetFunction().GetParams()[0]), exprToName(e.GetFunction().GetParams()[1]), ) } panic("todo") } if e.GetTerminal() != nil { if e.GetTerminal().BoolValue != nil { if e.GetTerminal().GetBoolValue() { return ast.NewAnyName() } else { panic("todo") } } else { panic("todo") } } panic("todo") }
//ConvertBuiltInIntoFunction converts a BuiltIn Expr into a Function Expr. func ConvertBuiltInIntoFunction(e *ast.Expr) (*ast.Expr, error) { if e.BuiltIn == nil { return e, nil } s := e.GetBuiltIn().GetSymbol().GetValue() right := e.GetBuiltIn().GetExpr().Clone() typ, err := Which(right) if err != nil { return nil, err } if types.IsList(typ) { typ = types.ListToSingle(typ) } left := ast.NewVar(typ) funcName := ast.BuiltInFunctionName(s) e2 := ast.NewNestedFunction(funcName, left, right) if funcName == "regex" { e2 = ast.NewNestedFunction(funcName, right, ast.NewVar(types.SINGLE_STRING)) } else if funcName == "type" { e2 = ast.NewNestedFunction(funcName, right) } return e2, nil }